_ZN7exe4cpp17ISteadyTimeSourceD2Ev:
   36|  8.87k|    virtual ~ISteadyTimeSource() = default;

_ZN7exe4cpp12MockExecutorC2Ev:
   74|  8.87k|    MockExecutor() = default;
_ZN7exe4cpp12MockExecutor8get_timeEv:
  103|  3.14k|    {
  104|  3.14k|        return current_time;
  105|  3.14k|    }
_ZN7exe4cpp12MockExecutor8run_manyEm:
  136|  17.7k|    {
  137|  17.7k|        size_t num = 0;
  138|  17.7k|        while (num < maximum && this->run_one()) ++num;
  ------------------
  |  Branch (138:16): [True: 17.7k, False: 0]
  |  Branch (138:33): [True: 0, False: 17.7k]
  ------------------
  139|  17.7k|        return num;
  140|  17.7k|    }
_ZN7exe4cpp12MockExecutor7run_oneEv:
  114|  17.7k|    {
  115|  17.7k|        this->check_for_expired_timers();
  116|       |
  117|  17.7k|        if (this->post_queue.size() > 0)
  ------------------
  |  Branch (117:13): [True: 0, False: 17.7k]
  ------------------
  118|      0|        {
  119|      0|            auto runnable = post_queue.front();
  120|      0|            this->post_queue.pop_front();
  121|      0|            runnable();
  122|      0|            return true;
  123|      0|        }
  124|  17.7k|        else
  125|  17.7k|        {
  126|  17.7k|            return false;
  127|  17.7k|        }
  128|  17.7k|    }
_ZN7exe4cpp12MockExecutor24check_for_expired_timersEv:
  228|  17.7k|    {
  229|  17.7k|        size_t count = 0;
  230|  17.7k|        while (find_expired_timer())
  ------------------
  |  Branch (230:16): [True: 0, False: 17.7k]
  ------------------
  231|      0|        {
  232|      0|            ++count;
  233|      0|        }
  234|  17.7k|        return count;
  235|  17.7k|    }
_ZN7exe4cpp12MockExecutor18find_expired_timerEv:
  238|  17.7k|    {
  239|  17.7k|        auto expired = [this](const std::shared_ptr<MockTimer>& timer)
  240|  17.7k|        {
  241|  17.7k|            return timer->expires_at() <= this->current_time;
  242|  17.7k|        };
  243|       |
  244|  17.7k|        auto iter = std::find_if(this->timers.begin(), this->timers.end(), expired);
  245|       |
  246|  17.7k|        if (iter == this->timers.end())
  ------------------
  |  Branch (246:13): [True: 17.7k, False: 0]
  ------------------
  247|  17.7k|        {
  248|  17.7k|            return false;
  249|  17.7k|        }
  250|      0|        else
  251|      0|        {
  252|       |            // keep the timer alive until it's callback is completed.
  253|      0|            auto action = [timer = (*iter), action = (*iter)->action]() -> void { action(); };
  254|      0|            this->post_queue.push_back(action);
  255|      0|            this->timers.erase(iter);
  256|      0|            return true;
  257|      0|        }
  258|  17.7k|    }

_ZN7exe4cpp5TimerC2Ev:
   41|  8.87k|    Timer() : timer{}
   42|  8.87k|    {}

_ZN7ser4cpp5ArrayIN8opendnp34NodeINS1_16TypedEventRecordINS1_15OctetStringSpecEEEEEjED2Ev:
   55|  8.87k|    {
   56|  8.87k|        delete[] buffer;
   57|  8.87k|    }
_ZN7ser4cpp5ArrayIN8opendnp34NodeINS1_16TypedEventRecordINS1_22AnalogOutputStatusSpecEEEEEjED2Ev:
   55|  8.87k|    {
   56|  8.87k|        delete[] buffer;
   57|  8.87k|    }
_ZN7ser4cpp5ArrayIN8opendnp34NodeINS1_16TypedEventRecordINS1_22BinaryOutputStatusSpecEEEEEjED2Ev:
   55|  8.87k|    {
   56|  8.87k|        delete[] buffer;
   57|  8.87k|    }
_ZN7ser4cpp5ArrayIN8opendnp34NodeINS1_16TypedEventRecordINS1_17FrozenCounterSpecEEEEEjED2Ev:
   55|  8.87k|    {
   56|  8.87k|        delete[] buffer;
   57|  8.87k|    }
_ZN7ser4cpp5ArrayIN8opendnp34NodeINS1_16TypedEventRecordINS1_11CounterSpecEEEEEjED2Ev:
   55|  8.87k|    {
   56|  8.87k|        delete[] buffer;
   57|  8.87k|    }
_ZN7ser4cpp5ArrayIN8opendnp34NodeINS1_16TypedEventRecordINS1_10AnalogSpecEEEEEjED2Ev:
   55|  8.87k|    {
   56|  8.87k|        delete[] buffer;
   57|  8.87k|    }
_ZN7ser4cpp5ArrayIN8opendnp34NodeINS1_16TypedEventRecordINS1_19DoubleBitBinarySpecEEEEEjED2Ev:
   55|  8.87k|    {
   56|  8.87k|        delete[] buffer;
   57|  8.87k|    }
_ZN7ser4cpp5ArrayIN8opendnp34NodeINS1_16TypedEventRecordINS1_10BinarySpecEEEEEjED2Ev:
   55|  8.87k|    {
   56|  8.87k|        delete[] buffer;
   57|  8.87k|    }
_ZN7ser4cpp5ArrayIN8opendnp34NodeINS1_11EventRecordEEEjED2Ev:
   55|  8.87k|    {
   56|  8.87k|        delete[] buffer;
   57|  8.87k|    }
_ZN7ser4cpp5ArrayIN8opendnp34NodeINS1_11EventRecordEEEjEC2Ej:
   44|  8.87k|    Array(W size) : HasLength<W>(size), buffer(new T[size]()) {}
_ZN7ser4cpp5ArrayIN8opendnp34NodeINS1_16TypedEventRecordINS1_10BinarySpecEEEEEjEC2Ej:
   44|  8.87k|    Array(W size) : HasLength<W>(size), buffer(new T[size]()) {}
_ZN7ser4cpp5ArrayIN8opendnp34NodeINS1_16TypedEventRecordINS1_19DoubleBitBinarySpecEEEEEjEC2Ej:
   44|  8.87k|    Array(W size) : HasLength<W>(size), buffer(new T[size]()) {}
_ZN7ser4cpp5ArrayIN8opendnp34NodeINS1_16TypedEventRecordINS1_10AnalogSpecEEEEEjEC2Ej:
   44|  8.87k|    Array(W size) : HasLength<W>(size), buffer(new T[size]()) {}
_ZN7ser4cpp5ArrayIN8opendnp34NodeINS1_16TypedEventRecordINS1_11CounterSpecEEEEEjEC2Ej:
   44|  8.87k|    Array(W size) : HasLength<W>(size), buffer(new T[size]()) {}
_ZN7ser4cpp5ArrayIN8opendnp34NodeINS1_16TypedEventRecordINS1_17FrozenCounterSpecEEEEEjEC2Ej:
   44|  8.87k|    Array(W size) : HasLength<W>(size), buffer(new T[size]()) {}
_ZN7ser4cpp5ArrayIN8opendnp34NodeINS1_16TypedEventRecordINS1_22BinaryOutputStatusSpecEEEEEjEC2Ej:
   44|  8.87k|    Array(W size) : HasLength<W>(size), buffer(new T[size]()) {}
_ZN7ser4cpp5ArrayIN8opendnp34NodeINS1_16TypedEventRecordINS1_22AnalogOutputStatusSpecEEEEEjEC2Ej:
   44|  8.87k|    Array(W size) : HasLength<W>(size), buffer(new T[size]()) {}
_ZN7ser4cpp5ArrayIN8opendnp34NodeINS1_16TypedEventRecordINS1_15OctetStringSpecEEEEEjEC2Ej:
   44|  8.87k|    Array(W size) : HasLength<W>(size), buffer(new T[size]()) {}

_ZN7ser4cpp6BufferD2Ev:
   42|  26.6k|    ~Buffer() = default;
_ZN7ser4cpp6BufferC2Em:
   45|  26.6k|        HasLength(length),
   46|  26.6k|        bytes(std::make_unique<uint8_t[]>(length))
   47|  26.6k|    {}
_ZN7ser4cpp6Buffer9as_wsliceEv:
   64|  8.37k|    {
   65|  8.37k|        return wseq_t(this->bytes.get(), this->length());
   66|  8.37k|    }

_ZN7ser4cpp9HasLengthImEC2Em:
   53|   102k|    explicit HasLength(L length) : m_length(length)
   54|   102k|    {}
_ZNK7ser4cpp9HasLengthImE6lengthEv:
   36|  4.18M|    {
   37|  4.18M|        return m_length;
   38|  4.18M|    }
_ZNK7ser4cpp9HasLengthImE12is_not_emptyEv:
   46|  33.5k|    {
   47|  33.5k|        return m_length != 0;
   48|  33.5k|    }
_ZNK7ser4cpp9HasLengthImE8is_emptyEv:
   41|     10|    {
   42|     10|        return m_length == 0;
   43|     10|    }
_ZN7ser4cpp9HasLengthImEC2Ev:
   51|  8.37k|    HasLength() {}
_ZN7ser4cpp9HasLengthIjEC2Ej:
   53|   159k|    explicit HasLength(L length) : m_length(length)
   54|   159k|    {}
_ZNK7ser4cpp9HasLengthIjE8is_emptyEv:
   41|  79.9k|    {
   42|  79.9k|        return m_length == 0;
   43|  79.9k|    }

_ZN7ser4cpp4PairIN8opendnp38IINFieldENS1_15AppControlFieldEEC2ERKS2_RKS3_:
   35|  4.71k|    Pair(const A& first_, const B& second_) : first(first_), second(second_) {}

_ZN7ser4cpp4RSeqImEC2EPKhm:
   59|  41.3k|        HasLength<L>(length),
   60|  41.3k|        buffer_(buffer)
   61|  41.3k|    {}
_ZNK7ser4cpp4RSeqImEcvPKhEv:
   88|  1.29M|    {
   89|  1.29M|        return this->buffer_;
   90|  1.29M|    };
_ZN7ser4cpp4RSeqImE7advanceEm:
   81|  1.37M|    {
   82|  1.37M|        auto num = ser4cpp::min(this->length(), count);
   83|  1.37M|        this->buffer_ += num;
   84|  1.37M|        this->m_length -= num;
   85|  1.37M|    }
_ZNK7ser4cpp4RSeqImE4takeEm:
   70|  10.6k|    {
   71|  10.6k|        return RSeq(this->buffer_, (count < this->length()) ? count : this->length());
  ------------------
  |  Branch (71:36): [True: 10.6k, False: 6]
  ------------------
   72|  10.6k|    }
_ZN7ser4cpp4RSeqImEC2Ev:
   55|  26.6k|    RSeq() : HasLength<L>(0)
   56|  26.6k|    {}
_ZNK7ser4cpp4RSeqImE4skipEm:
   75|  8.87k|    {
   76|  8.87k|        auto num = ser4cpp::min(this->length(), count);
   77|  8.87k|        return RSeq(this->buffer_ + num, this->length() - num);
   78|  8.87k|    }

_ZN7ser4cpp8SettableIN8opendnp320LinkBroadcastAddressEEC2Ev:
   35|  8.87k|    Settable() : value_is_set(false) {}
_ZNK7ser4cpp8SettableIN8opendnp320LinkBroadcastAddressEE6is_setEv:
   38|  8.37k|    {
   39|  8.37k|        return value_is_set;
   40|  8.37k|    }
_ZN7ser4cpp8SettableINS_4WSeqImEEEC2Ev:
   35|  8.37k|    Settable() : value_is_set(false) {}

_ZNK7ser4cpp4WSeqImEcvPhEv:
  106|   275k|    {
  107|   275k|        return buffer_;
  108|   275k|    };
_ZN7ser4cpp4WSeqImE7advanceEm:
   70|   247k|    {
   71|   247k|        const auto num = ser4cpp::min(count, this->length());
   72|   247k|        this->buffer_ += num;
   73|   247k|        this->m_length -= num;
   74|   247k|        return num;
   75|   247k|    }
_ZN7ser4cpp4WSeqImE9copy_fromERKNS_4RSeqImEE:
  111|  2.26k|    {
  112|  2.26k|        return this->transfer_from<memcpy>(src);
  113|  2.26k|    }
_ZN7ser4cpp4WSeqImE13transfer_fromIXcvPFPvS3_PKvmEadL_Z6memcpyEEEENS_4RSeqImEERKS9_:
  123|  2.26k|    {
  124|  2.26k|        if (src.length() > this->length())
  ------------------
  |  Branch (124:13): [True: 0, False: 2.26k]
  ------------------
  125|      0|        {
  126|      0|            return RSeq<L>::empty();
  127|      0|        }
  128|  2.26k|        else
  129|  2.26k|        {
  130|  2.26k|            const auto ret = this->readonly().take(src.length());
  131|  2.26k|            mem_func(buffer_, src, src.length());
  132|  2.26k|            this->advance(src.length());
  133|  2.26k|            return ret;
  134|  2.26k|        }
  135|  2.26k|    }
_ZNK7ser4cpp4WSeqImE8readonlyEv:
  101|  10.6k|    {
  102|  10.6k|        return RSeq<L>(this->buffer_, this->length());
  103|  10.6k|    }
_ZN7ser4cpp4WSeqImEC2EPhm:
   55|  8.37k|    WSeq(uint8_t* buffer, L length) : HasLength<L>(length), buffer_(buffer)
   56|  8.37k|    {}
_ZN7ser4cpp4WSeqImEC2Ev:
   53|  8.37k|    {}

_ZN7ser4cpp11DoubleFloat9read_fromERNS_4RSeqImEERd:
   44|  8.75k|    {
   45|  8.75k|        uint64_t value;
   46|  8.75k|        if(UInt64::read_from(input, value))
  ------------------
  |  Branch (46:12): [True: 8.75k, False: 0]
  ------------------
   47|  8.75k|        {
   48|  8.75k|            out = to_double(value);
   49|  8.75k|            return true;
   50|  8.75k|        }
   51|       |        
   52|      0|        return false;
   53|  8.75k|    }
_ZN7ser4cpp11DoubleFloat8write_toERNS_4WSeqImEEd:
   56|  7.92k|    {
   57|  7.92k|        if (dest.length() < size) return false;
  ------------------
  |  Branch (57:13): [True: 0, False: 7.92k]
  ------------------
   58|       |
   59|  7.92k|        const auto uint64_value = to_uint64(value);
   60|  7.92k|        return UInt64::write_to(dest, uint64_value);
   61|  7.92k|    }
_ZN7ser4cpp11DoubleFloat9to_doubleEm:
   64|  8.75k|    {
   65|       |        // Extract the required values
   66|  8.75k|        bool sign = (value & 0x8000000000000000) != 0;
   67|  8.75k|        uint16_t exponent = static_cast<uint16_t>((value >> 52) & 0x7FF);
   68|  8.75k|        uint64_t mantissa = value & 0xFFFFFFFFFFFFF;
   69|       |
   70|       |        // Check special cases
   71|  8.75k|        if(exponent == 0x7FF)
  ------------------
  |  Branch (71:12): [True: 1.79k, False: 6.96k]
  ------------------
   72|  1.79k|        {
   73|  1.79k|            if(mantissa != 0)
  ------------------
  |  Branch (73:16): [True: 989, False: 804]
  ------------------
   74|    989|            {
   75|    989|                return std::numeric_limits<double>::quiet_NaN();
   76|    989|            }
   77|    804|            else
   78|    804|            {
   79|    804|                if(!sign)
  ------------------
  |  Branch (79:20): [True: 543, False: 261]
  ------------------
   80|    543|                {
   81|    543|                    return std::numeric_limits<double>::infinity();
   82|    543|                }
   83|    261|                else
   84|    261|                {
   85|    261|                    return -std::numeric_limits<double>::infinity();
   86|    261|                }
   87|       |                
   88|    804|            }
   89|  1.79k|        }
   90|  6.96k|        if(exponent == 0 && mantissa == 0)
  ------------------
  |  Branch (90:12): [True: 1.77k, False: 5.19k]
  |  Branch (90:29): [True: 434, False: 1.33k]
  ------------------
   91|    434|        {
   92|    434|            return 0.0;
   93|    434|        }
   94|       |
   95|       |        // Build the actual value
   96|  6.53k|        auto weighted_mantissa = static_cast<double>(mantissa)/(uint64_t{1} << 52);
   97|  6.53k|        double result;
   98|  6.53k|        if(exponent == 0)
  ------------------
  |  Branch (98:12): [True: 1.33k, False: 5.19k]
  ------------------
   99|  1.33k|        {
  100|  1.33k|            result = std::ldexp(weighted_mantissa, 2 - (uint16_t{1} << 11));
  101|  1.33k|        }
  102|  5.19k|        else
  103|  5.19k|        {
  104|  5.19k|            result = std::ldexp(1.0 + weighted_mantissa, exponent - 1023);
  105|  5.19k|        }
  106|       |
  107|       |        // Adjust the sign
  108|  6.53k|        if(sign)
  ------------------
  |  Branch (108:12): [True: 1.54k, False: 4.98k]
  ------------------
  109|  1.54k|        {
  110|  1.54k|            result = -result;
  111|  1.54k|        }
  112|       |
  113|  6.53k|        return result;
  114|  6.96k|    }
_ZN7ser4cpp11DoubleFloat9to_uint64Ed:
  117|  7.92k|    {
  118|  7.92k|        uint64_t encoded_value{0};
  119|       |
  120|  7.92k|        if (std::isnan(value))
  ------------------
  |  Branch (120:13): [True: 796, False: 7.12k]
  ------------------
  121|    796|        {
  122|       |            // NaN has all exponent bit set to 1, and mantissa with a least a 1. Sign bit is ignored.
  123|       |            // Here, I use x86 qNaN (because libiec61850 simply cast the value into a double)
  124|    796|            encoded_value = 0x7FF8000000000001;
  125|    796|        }
  126|  7.12k|        else if (std::isinf(value))
  ------------------
  |  Branch (126:18): [True: 483, False: 6.64k]
  ------------------
  127|    483|        {
  128|       |            // Infinite has all exponent bit set to 1, and mantissa filled with zeroes. Sign bit determines
  129|       |            // which infinite it represents
  130|    483|            encoded_value = 0x7FF0000000000000;
  131|    483|        }
  132|  6.64k|        else if (value != 0.0)
  ------------------
  |  Branch (132:18): [True: 3.99k, False: 2.64k]
  ------------------
  133|  3.99k|        {
  134|  3.99k|            int integral_part;
  135|  3.99k|            double fraction_part = std::frexp(std::abs(value), &integral_part);
  136|       |
  137|  3.99k|            uint16_t exponent = integral_part + 1022;
  138|  3.99k|            encoded_value |= (static_cast<uint64_t>(exponent) & 0x7FF) << 52;
  139|  3.99k|            encoded_value |= static_cast<uint64_t>(fraction_part * (uint64_t{1} << 53)) & 0xFFFFFFFFFFFFF;
  140|  3.99k|        }
  141|       |
  142|  7.92k|        if (std::signbit(value))
  ------------------
  |  Branch (142:13): [True: 1.47k, False: 6.44k]
  ------------------
  143|  1.47k|        {
  144|  1.47k|            encoded_value |= uint64_t{1} << 63;
  145|  1.47k|        }
  146|       |
  147|  7.92k|        return encoded_value;
  148|  7.92k|    }

_ZN7ser4cpp13EndianHelpers4readERNS_4RSeqImEE:
  182|  50.7k|    {
  183|  50.7k|        return true;
  184|  50.7k|    }
_ZN7ser4cpp13EndianHelpers5writeERNS_4WSeqImEE:
  187|  63.1k|    {
  188|  63.1k|        return true;
  189|  63.1k|    }
_ZN7ser4cpp11serializers8read_oneIhEEbRNS_4RSeqImEERT_:
   41|  60.8k|{
   42|  60.8k|    return UInt8::read_from(input, out);
   43|  60.8k|}
_ZN7ser4cpp11serializers8read_oneIsEEbRNS_4RSeqImEERT_:
   47|  22.3k|{
   48|  22.3k|    return Int16::read_from(input, out);
   49|  22.3k|}
_ZN7ser4cpp11serializers8read_oneIiEEbRNS_4RSeqImEERT_:
   59|  5.59k|{
   60|  5.59k|    return Int32::read_from(input, out);
   61|  5.59k|}
_ZN7ser4cpp11serializers8read_oneIjEEbRNS_4RSeqImEERT_:
   65|  10.6k|{
   66|  10.6k|    return UInt32::read_from(input, out);
   67|  10.6k|}
_ZN7ser4cpp11serializers8read_oneIdEEbRNS_4RSeqImEERT_:
   89|  8.75k|{
   90|  8.75k|    return DoubleFloat::read_from(input, out);
   91|  8.75k|}
_ZN7ser4cpp11serializers8read_oneIfEEbRNS_4RSeqImEERT_:
   95|  8.19k|{
   96|  8.19k|    return SingleFloat::read_from(input, out);
   97|  8.19k|}
_ZN7ser4cpp11serializers9write_oneIhEEbRNS_4WSeqImEERKT_:
  104|  67.1k|{
  105|  67.1k|    return UInt8::write_to(dest, value);
  106|  67.1k|}
_ZN7ser4cpp11serializers9write_oneIsEEbRNS_4WSeqImEERKT_:
  110|  14.9k|{
  111|  14.9k|    return Int16::write_to(dest, value);
  112|  14.9k|}
_ZN7ser4cpp11serializers9write_oneItEEbRNS_4WSeqImEERKT_:
  116|  2.64k|{
  117|  2.64k|    return UInt16::write_to(dest, value);
  118|  2.64k|}
_ZN7ser4cpp11serializers9write_oneIiEEbRNS_4WSeqImEERKT_:
  122|  9.37k|{
  123|  9.37k|    return Int32::write_to(dest, value);
  124|  9.37k|}
_ZN7ser4cpp11serializers9write_oneIjEEbRNS_4WSeqImEERKT_:
  128|  15.0k|{
  129|  15.0k|    return UInt32::write_to(dest, value);
  130|  15.0k|}
_ZN7ser4cpp11serializers9write_oneIdEEbRNS_4WSeqImEERKT_:
  152|  7.92k|{
  153|  7.92k|    return DoubleFloat::write_to(dest, value);
  154|  7.92k|}
_ZN7ser4cpp11serializers9write_oneIfEEbRNS_4WSeqImEERKT_:
  158|  7.78k|{
  159|  7.78k|    return SingleFloat::write_to(dest, value);
  160|  7.78k|}
_ZN7ser4cpp13EndianHelpers4readIhJEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  50.2k|    {
  171|  50.2k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 50.2k, False: 0]
  |  Branch (171:55): [True: 50.2k, False: 0]
  ------------------
  172|  50.2k|    }
_ZN7ser4cpp13EndianHelpers5writeIhJEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|  45.5k|    {
  177|  45.5k|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 45.5k, False: 0]
  |  Branch (177:55): [True: 45.5k, False: 0]
  ------------------
  178|  45.5k|    }
_ZN7ser4cpp13EndianHelpers4readIN8opendnp37DNPTimeEJEEEbRNS_4RSeqImEERT_DpRT0_:
  170|    513|    {
  171|    513|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 513, False: 0]
  |  Branch (171:55): [True: 513, False: 0]
  ------------------
  172|    513|    }
_ZN7ser4cpp13EndianHelpers5writeIN8opendnp37DNPTimeEJEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|  1.26k|    {
  177|  1.26k|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 1.26k, False: 0]
  |  Branch (177:55): [True: 1.26k, False: 0]
  ------------------
  178|  1.26k|    }
_ZN7ser4cpp13EndianHelpers5writeIhJtEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|  1.09k|    {
  177|  1.09k|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 1.09k, False: 0]
  |  Branch (177:55): [True: 1.09k, False: 0]
  ------------------
  178|  1.09k|    }
_ZN7ser4cpp13EndianHelpers5writeItJEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|  2.01k|    {
  177|  2.01k|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 2.01k, False: 0]
  |  Branch (177:55): [True: 2.01k, False: 0]
  ------------------
  178|  2.01k|    }
_ZN7ser4cpp13EndianHelpers4readIhJhjjhEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  5.32k|    {
  171|  5.32k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 5.32k, False: 0]
  |  Branch (171:55): [True: 5.32k, False: 0]
  ------------------
  172|  5.32k|    }
_ZN7ser4cpp13EndianHelpers4readIhJjjhEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  5.32k|    {
  171|  5.32k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 5.32k, False: 0]
  |  Branch (171:55): [True: 5.32k, False: 0]
  ------------------
  172|  5.32k|    }
_ZN7ser4cpp13EndianHelpers4readIjJjhEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  5.32k|    {
  171|  5.32k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 5.32k, False: 0]
  |  Branch (171:55): [True: 5.32k, False: 0]
  ------------------
  172|  5.32k|    }
_ZN7ser4cpp13EndianHelpers4readIjJhEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  5.32k|    {
  171|  5.32k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 5.32k, False: 0]
  |  Branch (171:55): [True: 5.32k, False: 0]
  ------------------
  172|  5.32k|    }
_ZN7ser4cpp13EndianHelpers5writeIhJhjjhEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|  3.49k|    {
  177|  3.49k|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 3.49k, False: 0]
  |  Branch (177:55): [True: 3.49k, False: 0]
  ------------------
  178|  3.49k|    }
_ZN7ser4cpp13EndianHelpers5writeIhJjjhEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|  3.49k|    {
  177|  3.49k|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 3.49k, False: 0]
  |  Branch (177:55): [True: 3.49k, False: 0]
  ------------------
  178|  3.49k|    }
_ZN7ser4cpp13EndianHelpers5writeIjJjhEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|  3.49k|    {
  177|  3.49k|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 3.49k, False: 0]
  |  Branch (177:55): [True: 3.49k, False: 0]
  ------------------
  178|  3.49k|    }
_ZN7ser4cpp13EndianHelpers5writeIjJhEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|  5.56k|    {
  177|  5.56k|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 5.56k, False: 0]
  |  Branch (177:55): [True: 5.56k, False: 0]
  ------------------
  178|  5.56k|    }
_ZN7ser4cpp13EndianHelpers5writeIhJjEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|  4.19k|    {
  177|  4.19k|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 4.19k, False: 0]
  |  Branch (177:55): [True: 4.19k, False: 0]
  ------------------
  178|  4.19k|    }
_ZN7ser4cpp13EndianHelpers5writeIjJEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|  5.30k|    {
  177|  5.30k|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 5.30k, False: 0]
  |  Branch (177:55): [True: 5.30k, False: 0]
  ------------------
  178|  5.30k|    }
_ZN7ser4cpp13EndianHelpers5writeIhJjN8opendnp37DNPTimeEEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|    637|    {
  177|    637|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 637, False: 0]
  |  Branch (177:55): [True: 637, False: 0]
  ------------------
  178|    637|    }
_ZN7ser4cpp13EndianHelpers5writeIjJN8opendnp37DNPTimeEEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|    637|    {
  177|    637|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 637, False: 0]
  |  Branch (177:55): [True: 637, False: 0]
  ------------------
  178|    637|    }
_ZN7ser4cpp13EndianHelpers5writeIhJtN8opendnp37DNPTimeEEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|    630|    {
  177|    630|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 630, False: 0]
  |  Branch (177:55): [True: 630, False: 0]
  ------------------
  178|    630|    }
_ZN7ser4cpp13EndianHelpers5writeItJN8opendnp37DNPTimeEEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|    630|    {
  177|    630|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 630, False: 0]
  |  Branch (177:55): [True: 630, False: 0]
  ------------------
  178|    630|    }
_ZN7ser4cpp13EndianHelpers5writeIhJiEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|  4.66k|    {
  177|  4.66k|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 4.66k, False: 0]
  |  Branch (177:55): [True: 4.66k, False: 0]
  ------------------
  178|  4.66k|    }
_ZN7ser4cpp13EndianHelpers5writeIhJsEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|  1.12k|    {
  177|  1.12k|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 1.12k, False: 0]
  |  Branch (177:55): [True: 1.12k, False: 0]
  ------------------
  178|  1.12k|    }
_ZN7ser4cpp13EndianHelpers5writeIiJEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|  5.12k|    {
  177|  5.12k|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 5.12k, False: 0]
  |  Branch (177:55): [True: 5.12k, False: 0]
  ------------------
  178|  5.12k|    }
_ZN7ser4cpp13EndianHelpers5writeIsJEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|  1.64k|    {
  177|  1.64k|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 1.64k, False: 0]
  |  Branch (177:55): [True: 1.64k, False: 0]
  ------------------
  178|  1.64k|    }
_ZN7ser4cpp13EndianHelpers5writeIhJfEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|    986|    {
  177|    986|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 986, False: 0]
  |  Branch (177:55): [True: 986, False: 0]
  ------------------
  178|    986|    }
_ZN7ser4cpp13EndianHelpers5writeIfJEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|    986|    {
  177|    986|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 986, False: 0]
  |  Branch (177:55): [True: 986, False: 0]
  ------------------
  178|    986|    }
_ZN7ser4cpp13EndianHelpers5writeIhJdEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|  1.27k|    {
  177|  1.27k|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 1.27k, False: 0]
  |  Branch (177:55): [True: 1.27k, False: 0]
  ------------------
  178|  1.27k|    }
_ZN7ser4cpp13EndianHelpers5writeIdJEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|  1.27k|    {
  177|  1.27k|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 1.27k, False: 0]
  |  Branch (177:55): [True: 1.27k, False: 0]
  ------------------
  178|  1.27k|    }
_ZN7ser4cpp13EndianHelpers4readIiJhEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  5.59k|    {
  171|  5.59k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 5.59k, False: 0]
  |  Branch (171:55): [True: 5.59k, False: 0]
  ------------------
  172|  5.59k|    }
_ZN7ser4cpp13EndianHelpers5writeIiJhEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|  4.25k|    {
  177|  4.25k|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 4.25k, False: 0]
  |  Branch (177:55): [True: 4.25k, False: 0]
  ------------------
  178|  4.25k|    }
_ZN7ser4cpp13EndianHelpers4readIsJhEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  22.3k|    {
  171|  22.3k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 22.3k, False: 0]
  |  Branch (171:55): [True: 22.3k, False: 0]
  ------------------
  172|  22.3k|    }
_ZN7ser4cpp13EndianHelpers5writeIsJhEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|  13.3k|    {
  177|  13.3k|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 13.3k, False: 0]
  |  Branch (177:55): [True: 13.3k, False: 0]
  ------------------
  178|  13.3k|    }
_ZN7ser4cpp13EndianHelpers4readIfJhEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  8.19k|    {
  171|  8.19k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 8.19k, False: 0]
  |  Branch (171:55): [True: 8.19k, False: 0]
  ------------------
  172|  8.19k|    }
_ZN7ser4cpp13EndianHelpers5writeIfJhEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|  6.80k|    {
  177|  6.80k|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 6.80k, False: 0]
  |  Branch (177:55): [True: 6.80k, False: 0]
  ------------------
  178|  6.80k|    }
_ZN7ser4cpp13EndianHelpers4readIdJhEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  8.75k|    {
  171|  8.75k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 8.75k, False: 0]
  |  Branch (171:55): [True: 8.75k, False: 0]
  ------------------
  172|  8.75k|    }
_ZN7ser4cpp13EndianHelpers5writeIdJhEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|  6.64k|    {
  177|  6.64k|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 6.64k, False: 0]
  |  Branch (177:55): [True: 6.64k, False: 0]
  ------------------
  178|  6.64k|    }
_ZN7ser4cpp13EndianHelpers5writeIN8opendnp37DNPTimeEJjhEEEbRNS_4WSeqImEERKT_DpRKT0_:
  176|  2.07k|    {
  177|  2.07k|        return serializers::write_one(dest, value) && write(dest, args...);
  ------------------
  |  Branch (177:16): [True: 2.07k, False: 0]
  |  Branch (177:55): [True: 2.07k, False: 0]
  ------------------
  178|  2.07k|    }

_ZN7ser4cpp5UInt89read_fromERNS_4RSeqImEERh:
   48|  1.17M|    {
   49|  1.17M|        if (input.length() < size) return false;
  ------------------
  |  Branch (49:13): [True: 0, False: 1.17M]
  ------------------
   50|       |
   51|  1.17M|        out = read(input);
   52|  1.17M|        input.advance(size);
   53|  1.17M|        return true;
   54|  1.17M|    }
_ZN7ser4cpp5UInt88write_toERNS_4WSeqImEEh:
   57|   143k|    {
   58|   143k|        if (dest.length() < size) return false;
  ------------------
  |  Branch (58:13): [True: 0, False: 143k]
  ------------------
   59|       |
   60|   143k|        write(dest, value);
   61|   143k|        dest.advance(size);
   62|   143k|        return true;
   63|   143k|    }
_ZN7ser4cpp5UInt84readEPKh:
   73|  1.17M|    {
   74|  1.17M|        return (*start);
   75|  1.17M|    }
_ZN7ser4cpp5UInt85writeEPhh:
   78|   143k|    {
   79|   143k|        *(start) = value;
   80|   143k|    }
_ZN7ser4cpp5Bit64ImLh0ELh1ELh2ELh3ELh4ELh5ELh6ELh7EE9read_fromERNS_4RSeqImEERm:
  208|  8.75k|    {
  209|  8.75k|        if (input.length() < size) return false;
  ------------------
  |  Branch (209:13): [True: 0, False: 8.75k]
  ------------------
  210|       |
  211|  8.75k|        out = read(input);
  212|  8.75k|        input.advance(size);
  213|  8.75k|        return true;
  214|  8.75k|    }
_ZN7ser4cpp5Bit64ImLh0ELh1ELh2ELh3ELh4ELh5ELh6ELh7EE4readEPKh:
  224|  8.75k|    {
  225|  8.75k|        return	(static_cast<T>(data[B0]) << 0) |
  226|  8.75k|                (static_cast<T>(data[B1]) << 8) |
  227|  8.75k|                (static_cast<T>(data[B2]) << 16) |
  228|  8.75k|                (static_cast<T>(data[B3]) << 24) |
  229|  8.75k|                (static_cast<T>(data[B4]) << 32) |
  230|  8.75k|                (static_cast<T>(data[B5]) << 40) |
  231|  8.75k|                (static_cast<T>(data[B6]) << 48) |
  232|  8.75k|                (static_cast<T>(data[B7]) << 56);
  233|  8.75k|    }
_ZN7ser4cpp5Bit64ImLh0ELh1ELh2ELh3ELh4ELh5ELh6ELh7EE8write_toERNS_4WSeqImEEm:
  199|  7.92k|    {
  200|  7.92k|        if (dest.length() < size) return false;
  ------------------
  |  Branch (200:13): [True: 0, False: 7.92k]
  ------------------
  201|       |
  202|  7.92k|        write(dest, value);
  203|  7.92k|        dest.advance(size);
  204|  7.92k|        return true;
  205|  7.92k|    }
_ZN7ser4cpp5Bit64ImLh0ELh1ELh2ELh3ELh4ELh5ELh6ELh7EE5writeEPhm:
  236|  7.92k|    {
  237|  7.92k|        data[B0] = static_cast<uint8_t>(value & 0xFF);
  238|  7.92k|        data[B1] = static_cast<uint8_t>((value >> 8) & 0xFF);
  239|  7.92k|        data[B2] = static_cast<uint8_t>((value >> 16) & 0xFF);
  240|  7.92k|        data[B3] = static_cast<uint8_t>((value >> 24) & 0xFF);
  241|  7.92k|        data[B4] = static_cast<uint8_t>((value >> 32) & 0xFF);
  242|  7.92k|        data[B5] = static_cast<uint8_t>((value >> 40) & 0xFF);
  243|  7.92k|        data[B6] = static_cast<uint8_t>((value >> 48) & 0xFF);
  244|  7.92k|        data[B7] = static_cast<uint8_t>((value >> 56) & 0xFF);
  245|  7.92k|    }
_ZN7ser4cpp5Bit32IjLh0ELh1ELh2ELh3EE9read_fromERNS_4RSeqImEERj:
  150|  18.8k|    {
  151|  18.8k|        if (input.length() < size) return false;
  ------------------
  |  Branch (151:13): [True: 0, False: 18.8k]
  ------------------
  152|       |
  153|  18.8k|        out = read(input);
  154|  18.8k|        input.advance(size);
  155|  18.8k|        return true;
  156|  18.8k|    }
_ZN7ser4cpp5Bit32IjLh0ELh1ELh2ELh3EE4readEPKh:
  166|  18.8k|    {
  167|  18.8k|        return	(static_cast<T>(data[B0]) << 0) |
  168|  18.8k|                (static_cast<T>(data[B1]) << 8) |
  169|  18.8k|                (static_cast<T>(data[B2]) << 16) |
  170|  18.8k|                (static_cast<T>(data[B3]) << 24);
  171|  18.8k|    }
_ZN7ser4cpp5Bit32IjLh0ELh1ELh2ELh3EE8write_toERNS_4WSeqImEEj:
  141|  22.7k|    {
  142|  22.7k|        if (dest.length() < size) return false;
  ------------------
  |  Branch (142:13): [True: 0, False: 22.7k]
  ------------------
  143|       |
  144|  22.7k|        write(dest, value);
  145|  22.7k|        dest.advance(size);
  146|  22.7k|        return true;
  147|  22.7k|    }
_ZN7ser4cpp5Bit32IjLh0ELh1ELh2ELh3EE5writeEPhj:
  174|  22.7k|    {
  175|  22.7k|        data[B0] = static_cast<uint8_t>(value & 0xFF);
  176|  22.7k|        data[B1] = static_cast<uint8_t>((value >> 8) & 0xFF);
  177|  22.7k|        data[B2] = static_cast<uint8_t>((value >> 16) & 0xFF);
  178|  22.7k|        data[B3] = static_cast<uint8_t>((value >> 24) & 0xFF);
  179|  22.7k|    }
_ZN7ser4cpp5Bit16IsLh0ELh1EE9read_fromERNS_4RSeqImEERs:
  100|  22.3k|    {
  101|  22.3k|        if (input.length() < size) return false;
  ------------------
  |  Branch (101:13): [True: 0, False: 22.3k]
  ------------------
  102|       |
  103|  22.3k|        out = read(input);
  104|  22.3k|        input.advance(size);
  105|  22.3k|        return true;
  106|  22.3k|    }
_ZN7ser4cpp5Bit16IsLh0ELh1EE4readEPKh:
  116|  22.3k|    {
  117|  22.3k|        return (static_cast<T>(data[B0]) << 0) | (static_cast<T>(data[B1]) << 8);
  118|  22.3k|    }
_ZN7ser4cpp5Bit16ItLh0ELh1EE9read_fromERNS_4RSeqImEERt:
  100|  31.5k|    {
  101|  31.5k|        if (input.length() < size) return false;
  ------------------
  |  Branch (101:13): [True: 0, False: 31.5k]
  ------------------
  102|       |
  103|  31.5k|        out = read(input);
  104|  31.5k|        input.advance(size);
  105|  31.5k|        return true;
  106|  31.5k|    }
_ZN7ser4cpp5Bit16ItLh0ELh1EE4readEPKh:
  116|  31.5k|    {
  117|  31.5k|        return (static_cast<T>(data[B0]) << 0) | (static_cast<T>(data[B1]) << 8);
  118|  31.5k|    }
_ZN7ser4cpp5Bit32IiLh0ELh1ELh2ELh3EE9read_fromERNS_4RSeqImEERi:
  150|  5.59k|    {
  151|  5.59k|        if (input.length() < size) return false;
  ------------------
  |  Branch (151:13): [True: 0, False: 5.59k]
  ------------------
  152|       |
  153|  5.59k|        out = read(input);
  154|  5.59k|        input.advance(size);
  155|  5.59k|        return true;
  156|  5.59k|    }
_ZN7ser4cpp5Bit32IiLh0ELh1ELh2ELh3EE4readEPKh:
  166|  5.59k|    {
  167|  5.59k|        return	(static_cast<T>(data[B0]) << 0) |
  168|  5.59k|                (static_cast<T>(data[B1]) << 8) |
  169|  5.59k|                (static_cast<T>(data[B2]) << 16) |
  170|  5.59k|                (static_cast<T>(data[B3]) << 24);
  171|  5.59k|    }
_ZN7ser4cpp6UBit48ILh0ELh1ELh2ELh3ELh4ELh5EE9read_fromERNS_4RSeqImEERNS_10UInt48TypeE:
  262|    513|    {
  263|    513|        if (input.length() < size) return false;
  ------------------
  |  Branch (263:13): [True: 0, False: 513]
  ------------------
  264|       |
  265|    513|        out = read(input);
  266|    513|        input.advance(size);
  267|    513|        return true;
  268|    513|    }
_ZN7ser4cpp6UBit48ILh0ELh1ELh2ELh3ELh4ELh5EE4readEPKh:
  285|    513|    {
  286|    513|        return UInt48Type(
  287|    513|                    (static_cast<uint64_t>(data[B0]) << 0) |
  288|    513|                    (static_cast<uint64_t>(data[B1]) << 8) |
  289|    513|                    (static_cast<uint64_t>(data[B2]) << 16) |
  290|    513|                    (static_cast<uint64_t>(data[B3]) << 24) |
  291|    513|                    (static_cast<uint64_t>(data[B4]) << 32) |
  292|    513|                    (static_cast<uint64_t>(data[B5]) << 40));
  293|    513|    }
_ZN7ser4cpp5Bit16IsLh0ELh1EE8write_toERNS_4WSeqImEEs:
   91|  14.9k|    {
   92|  14.9k|        if (dest.length() < size) return false;
  ------------------
  |  Branch (92:13): [True: 0, False: 14.9k]
  ------------------
   93|       |
   94|  14.9k|        write(dest, value);
   95|  14.9k|        dest.advance(size);
   96|  14.9k|        return true;
   97|  14.9k|    }
_ZN7ser4cpp5Bit16IsLh0ELh1EE5writeEPhs:
  121|  14.9k|    {
  122|  14.9k|        data[B0] = static_cast<uint8_t>(value & 0xFF);
  123|  14.9k|        data[B1] = static_cast<uint8_t>((value >> 8) & 0xFF);
  124|  14.9k|    }
_ZN7ser4cpp5Bit16ItLh0ELh1EE8write_toERNS_4WSeqImEEt:
   91|  14.3k|    {
   92|  14.3k|        if (dest.length() < size) return false;
  ------------------
  |  Branch (92:13): [True: 0, False: 14.3k]
  ------------------
   93|       |
   94|  14.3k|        write(dest, value);
   95|  14.3k|        dest.advance(size);
   96|  14.3k|        return true;
   97|  14.3k|    }
_ZN7ser4cpp5Bit16ItLh0ELh1EE5writeEPht:
  121|  14.3k|    {
  122|  14.3k|        data[B0] = static_cast<uint8_t>(value & 0xFF);
  123|  14.3k|        data[B1] = static_cast<uint8_t>((value >> 8) & 0xFF);
  124|  14.3k|    }
_ZN7ser4cpp5Bit32IiLh0ELh1ELh2ELh3EE8write_toERNS_4WSeqImEEi:
  141|  9.37k|    {
  142|  9.37k|        if (dest.length() < size) return false;
  ------------------
  |  Branch (142:13): [True: 0, False: 9.37k]
  ------------------
  143|       |
  144|  9.37k|        write(dest, value);
  145|  9.37k|        dest.advance(size);
  146|  9.37k|        return true;
  147|  9.37k|    }
_ZN7ser4cpp5Bit32IiLh0ELh1ELh2ELh3EE5writeEPhi:
  174|  9.37k|    {
  175|  9.37k|        data[B0] = static_cast<uint8_t>(value & 0xFF);
  176|  9.37k|        data[B1] = static_cast<uint8_t>((value >> 8) & 0xFF);
  177|  9.37k|        data[B2] = static_cast<uint8_t>((value >> 16) & 0xFF);
  178|  9.37k|        data[B3] = static_cast<uint8_t>((value >> 24) & 0xFF);
  179|  9.37k|    }
_ZN7ser4cpp6UBit48ILh0ELh1ELh2ELh3ELh4ELh5EE8write_toERNS_4WSeqImEENS_10UInt48TypeE:
  271|  3.34k|    {
  272|  3.34k|        if (dest.length() < size) return false;
  ------------------
  |  Branch (272:13): [True: 0, False: 3.34k]
  ------------------
  273|       |
  274|  3.34k|        write(dest, value);
  275|  3.34k|        dest.advance(size);
  276|  3.34k|        return true;
  277|  3.34k|    }
_ZN7ser4cpp6UBit48ILh0ELh1ELh2ELh3ELh4ELh5EE5writeEPhNS_10UInt48TypeE:
  296|  3.34k|    {
  297|  3.34k|        if (value > max_value)
  ------------------
  |  Branch (297:13): [True: 0, False: 3.34k]
  ------------------
  298|      0|        {
  299|      0|            value = UInt48Type(max_value);
  300|      0|        }
  301|       |
  302|  3.34k|        data[B0] = static_cast<uint8_t>(value & 0xFF);
  303|  3.34k|        data[B1] = static_cast<uint8_t>((value >> 8) & 0xFF);
  304|  3.34k|        data[B2] = static_cast<uint8_t>((value >> 16) & 0xFF);
  305|  3.34k|        data[B3] = static_cast<uint8_t>((value >> 24) & 0xFF);
  306|  3.34k|        data[B4] = static_cast<uint8_t>((value >> 32) & 0xFF);
  307|  3.34k|        data[B5] = static_cast<uint8_t>((value >> 40) & 0xFF);
  308|  3.34k|    }

_ZN7ser4cpp11SingleFloat9read_fromERNS_4RSeqImEERf:
   44|  8.19k|    {
   45|  8.19k|        uint32_t value;
   46|  8.19k|        if(UInt32::read_from(input, value))
  ------------------
  |  Branch (46:12): [True: 8.19k, False: 0]
  ------------------
   47|  8.19k|        {
   48|  8.19k|            out = to_float32(value);
   49|  8.19k|            return true;
   50|  8.19k|        }
   51|       |        
   52|      0|        return false;
   53|  8.19k|    }
_ZN7ser4cpp11SingleFloat8write_toERNS_4WSeqImEEf:
   56|  7.78k|    {
   57|  7.78k|        if (dest.length() < size) return false;
  ------------------
  |  Branch (57:13): [True: 0, False: 7.78k]
  ------------------
   58|       |
   59|  7.78k|        const auto uint32_value = to_uint32(value);
   60|  7.78k|        return UInt32::write_to(dest, uint32_value);
   61|  7.78k|    }
_ZN7ser4cpp11SingleFloat10to_float32Ej:
   64|  8.19k|    {
   65|       |        // Extract the required values
   66|  8.19k|        bool sign = (value & 0x80000000) != 0;
   67|  8.19k|        uint8_t exponent = static_cast<uint8_t>((value >> 23) & 0xFF);
   68|  8.19k|        uint32_t mantissa = value & 0x7FFFFF;
   69|       |
   70|       |        // Check special cases
   71|  8.19k|        if(exponent == 0xFF)
  ------------------
  |  Branch (71:12): [True: 1.22k, False: 6.97k]
  ------------------
   72|  1.22k|        {
   73|  1.22k|            if(mantissa != 0)
  ------------------
  |  Branch (73:16): [True: 569, False: 651]
  ------------------
   74|    569|            {
   75|    569|                return std::numeric_limits<float>::quiet_NaN();
   76|    569|            }
   77|    651|            else
   78|    651|            {
   79|    651|                if(!sign)
  ------------------
  |  Branch (79:20): [True: 440, False: 211]
  ------------------
   80|    440|                {
   81|    440|                    return std::numeric_limits<float>::infinity();
   82|    440|                }
   83|    211|                else
   84|    211|                {
   85|    211|                    return -std::numeric_limits<float>::infinity();
   86|    211|                }
   87|       |                
   88|    651|            }
   89|  1.22k|        }
   90|  6.97k|        if(exponent == 0 && mantissa == 0)
  ------------------
  |  Branch (90:12): [True: 1.60k, False: 5.36k]
  |  Branch (90:29): [True: 579, False: 1.02k]
  ------------------
   91|    579|        {
   92|    579|            return 0.0f;
   93|    579|        }
   94|       |
   95|       |        // Build the actual value
   96|  6.39k|        auto weighted_mantissa = static_cast<float>(mantissa)/(uint32_t{1} << 23);
   97|  6.39k|        float result;
   98|  6.39k|        if(exponent == 0)
  ------------------
  |  Branch (98:12): [True: 1.02k, False: 5.36k]
  ------------------
   99|  1.02k|        {
  100|  1.02k|            result = std::ldexp(weighted_mantissa, 2 - (uint16_t{1} << 8));
  101|  1.02k|        }
  102|  5.36k|        else
  103|  5.36k|        {
  104|  5.36k|            result = std::ldexp(1.0f + weighted_mantissa, exponent - 127);
  105|  5.36k|        }
  106|       |
  107|       |        // Adjust the sign
  108|  6.39k|        if(sign)
  ------------------
  |  Branch (108:12): [True: 1.64k, False: 4.74k]
  ------------------
  109|  1.64k|        {
  110|  1.64k|            result = -result;
  111|  1.64k|        }
  112|       |
  113|  6.39k|        return result;
  114|  6.97k|    }
_ZN7ser4cpp11SingleFloat9to_uint32Ef:
  117|  7.78k|    {
  118|  7.78k|        uint32_t encoded_value{0};
  119|       |
  120|  7.78k|        if (std::isnan(value))
  ------------------
  |  Branch (120:13): [True: 470, False: 7.31k]
  ------------------
  121|    470|        {
  122|       |            // NaN has all exponent bit set to 1, and mantissa with a least a 1. Sign bit is ignored.
  123|       |            // Here, I use x86 qNaN (because libiec61850 simply cast the value into a double)
  124|    470|            encoded_value = 0x7F800001;
  125|    470|        }
  126|  7.31k|        else if (std::isinf(value))
  ------------------
  |  Branch (126:18): [True: 511, False: 6.80k]
  ------------------
  127|    511|        {
  128|       |            // Infinite has all exponent bit set to 1, and mantissa filled with zeroes. Sign bit determines
  129|       |            // which infinite it represents
  130|    511|            encoded_value = 0x7F800000;
  131|    511|        }
  132|  6.80k|        else if (value != 0.0f)
  ------------------
  |  Branch (132:18): [True: 4.43k, False: 2.37k]
  ------------------
  133|  4.43k|        {
  134|  4.43k|            int integral_part;
  135|  4.43k|            float fraction_part = std::frexp(std::abs(value), &integral_part);
  136|       |
  137|  4.43k|            uint16_t exponent = integral_part + 126;
  138|  4.43k|            encoded_value |= (static_cast<uint32_t>(exponent) & 0xFF) << 23;
  139|  4.43k|            encoded_value |= static_cast<uint32_t>(fraction_part * (uint32_t{1} << 24)) & 0x007FFFFF;
  140|  4.43k|        }
  141|       |
  142|  7.78k|        if (std::signbit(value))
  ------------------
  |  Branch (142:13): [True: 1.61k, False: 6.17k]
  ------------------
  143|  1.61k|        {
  144|  1.61k|            encoded_value |= uint32_t{1} << 31;
  145|  1.61k|        }
  146|       |
  147|  7.78k|        return encoded_value;
  148|  7.78k|    }

_ZN7ser4cpp10UInt48TypeC2Em:
   37|  3.85k|    explicit UInt48Type(uint64_t value) : representation(value)
   38|  3.85k|    {}
_ZN7ser4cpp10UInt48TypeC2Ev:
   40|    513|    UInt48Type() : representation(0)
   41|    513|    {}
_ZNK7ser4cpp10UInt48TypecvmEv:
   44|  23.3k|    {
   45|  23.3k|        return representation;
   46|  23.3k|    }
_ZNK7ser4cpp10UInt48Type3GetEv:
   49|    513|    {
   50|    513|        return representation;
   51|    513|    }

_ZN7ser4cpp3maxItEET_S1_S1_:
   39|  51.6k|{
   40|  51.6k|    return (a > b) ? a : b;
  ------------------
  |  Branch (40:12): [True: 28.0k, False: 23.6k]
  ------------------
   41|  51.6k|}
_ZN7ser4cpp3minItEET_S1_S1_:
   33|  51.6k|{
   34|  51.6k|    return (a < b) ? a : b;
  ------------------
  |  Branch (34:12): [True: 24.5k, False: 27.1k]
  ------------------
   35|  51.6k|}
_ZN7ser4cpp3minImEET_S1_S1_:
   33|  1.63M|{
   34|  1.63M|    return (a < b) ? a : b;
  ------------------
  |  Branch (34:12): [True: 247k, False: 1.38M]
  ------------------
   35|  1.63M|}

_ZN7ser4cpp10UncopyableD2Ev:
   39|  26.6k|    virtual ~Uncopyable() = default;
_ZN7ser4cpp10UncopyableC2Ev:
   37|  26.6k|    Uncopyable() = default; //allow construction/destruction/move

_ZN8opendnp312AnalogOutputIsEC2Es:
   37|  22.3k|    AnalogOutput(T value_) : value(value_), status(CommandStatus::SUCCESS) {}
_ZN8opendnp312AnalogOutputIsEC2EsNS_13CommandStatusE:
   39|  22.3k|    AnalogOutput(T value_, CommandStatus status_) : value(value_), status(status_) {}
_ZN8opendnp312AnalogOutputIiEC2Ei:
   37|  5.59k|    AnalogOutput(T value_) : value(value_), status(CommandStatus::SUCCESS) {}
_ZN8opendnp312AnalogOutputIiEC2EiNS_13CommandStatusE:
   39|  5.59k|    AnalogOutput(T value_, CommandStatus status_) : value(value_), status(status_) {}
_ZN8opendnp312AnalogOutputIfEC2Ef:
   37|  8.19k|    AnalogOutput(T value_) : value(value_), status(CommandStatus::SUCCESS) {}
_ZN8opendnp312AnalogOutputIfEC2EfNS_13CommandStatusE:
   39|  8.19k|    AnalogOutput(T value_, CommandStatus status_) : value(value_), status(status_) {}
_ZN8opendnp312AnalogOutputIdEC2Ed:
   37|  8.75k|    AnalogOutput(T value_) : value(value_), status(CommandStatus::SUCCESS) {}
_ZN8opendnp312AnalogOutputIdEC2EdNS_13CommandStatusE:
   39|  8.75k|    AnalogOutput(T value_, CommandStatus status_) : value(value_), status(status_) {}

_ZN8opendnp311MeasurementC2ENS_5FlagsE:
   43|  3.72M|    Measurement(Flags flags) : flags(flags) {}
_ZN8opendnp311MeasurementC2ENS_5FlagsENS_7DNPTimeE:
   45|  15.7k|    Measurement(Flags flags, DNPTime time) : flags(flags), time(time) {}
_ZN8opendnp316TypedMeasurementIbEC2EbNS_5FlagsE:
   59|  1.06M|    TypedMeasurement(T value, Flags flags) : Measurement(flags), value(value) {}
_ZN8opendnp316TypedMeasurementINS_9DoubleBitEEC2ES1_NS_5FlagsE:
   59|   532k|    TypedMeasurement(T value, Flags flags) : Measurement(flags), value(value) {}
_ZN8opendnp316TypedMeasurementIdEC2ENS_5FlagsE:
   58|  1.06M|    TypedMeasurement(Flags flags) : Measurement(flags), value(0) {}
_ZN8opendnp316TypedMeasurementIjEC2EjNS_5FlagsE:
   59|  1.06M|    TypedMeasurement(T value, Flags flags) : Measurement(flags), value(value) {}
_ZN8opendnp316TypedMeasurementIjEC2EjNS_5FlagsENS_7DNPTimeE:
   60|  15.7k|    TypedMeasurement(T value, Flags flags, DNPTime time) : Measurement(flags, time), value(value) {}

_ZNK8opendnp323ControlRelayOutputBlock11IsQUFlagSetEv:
   74|  4.31k|    {
   75|  4.31k|        return (rawCode & 0x10) != 0;
   76|  4.31k|    }

_ZN8opendnp37DNPTimeC2EmNS_16TimestampQualityE:
   34|  8.87k|    DNPTime(uint64_t value, TimestampQuality quality) : value(value), quality(quality) {}
_ZN8opendnp37DNPTimeC2Ev:
   32|  3.72M|    DNPTime() : value(0), quality(TimestampQuality::INVALID) {}
_ZN8opendnp37DNPTimeC2Em:
   33|   360k|    explicit DNPTime(uint64_t value) : value(value), quality(TimestampQuality::SYNCHRONIZED) {}

_ZN8opendnp313EventCellBaseINS_10BinarySpecEEC2Ev:
   47|   177k|    EventCellBase() : clazz(PointClass::Class1), lastEvent(), evariation(Spec::DefaultEventVariation) {}
_ZN8opendnp313EventCellBaseINS_19DoubleBitBinarySpecEEC2Ev:
   47|   177k|    EventCellBase() : clazz(PointClass::Class1), lastEvent(), evariation(Spec::DefaultEventVariation) {}
_ZN8opendnp313EventCellBaseINS_10AnalogSpecEEC2Ev:
   47|   177k|    EventCellBase() : clazz(PointClass::Class1), lastEvent(), evariation(Spec::DefaultEventVariation) {}
_ZN8opendnp313EventCellBaseINS_11CounterSpecEEC2Ev:
   47|   177k|    EventCellBase() : clazz(PointClass::Class1), lastEvent(), evariation(Spec::DefaultEventVariation) {}
_ZN8opendnp313EventCellBaseINS_17FrozenCounterSpecEEC2Ev:
   47|   177k|    EventCellBase() : clazz(PointClass::Class1), lastEvent(), evariation(Spec::DefaultEventVariation) {}
_ZN8opendnp313EventCellBaseINS_22BinaryOutputStatusSpecEEC2Ev:
   47|   177k|    EventCellBase() : clazz(PointClass::Class1), lastEvent(), evariation(Spec::DefaultEventVariation) {}
_ZN8opendnp313EventCellBaseINS_22AnalogOutputStatusSpecEEC2Ev:
   47|   177k|    EventCellBase() : clazz(PointClass::Class1), lastEvent(), evariation(Spec::DefaultEventVariation) {}
_ZN8opendnp313EventCellBaseINS_15OctetStringSpecEEC2Ev:
   47|   177k|    EventCellBase() : clazz(PointClass::Class1), lastEvent(), evariation(Spec::DefaultEventVariation) {}

_ZN8opendnp312measurements7IsEventIjmEEbRKT_S4_S2_:
   30|  24.1k|    {
   31|       |        // T can be unsigned data type so std::abs won't work since it only directly supports signed data types
   32|       |        // If one uses std::abs and T is unsigned one will get an ambiguous override error.
   33|       |
   34|  24.1k|        U diff = (val2 > val1) ? (static_cast<U>(val2) - static_cast<U>(val1))
  ------------------
  |  Branch (34:18): [True: 0, False: 24.1k]
  ------------------
   35|  24.1k|                               : (static_cast<U>(val1) - static_cast<U>(val2));
   36|       |
   37|  24.1k|        return diff > deadband;
   38|  24.1k|    }

_ZN8opendnp35FlagsC2Eh:
   42|      8|    explicit Flags(uint8_t value) : value(value) {}

_ZN8opendnp316GroupVariationIDC2Ehh:
   33|  15.1k|    GroupVariationID(uint8_t aGroup, uint8_t aVariation) : group(aGroup), variation(aVariation) {}

_ZN8opendnp38IINField5EmptyEv:
   83|  91.9k|    {
   84|  91.9k|        return IINField(0, 0);
   85|  91.9k|    }
_ZN8opendnp38IINFieldC2ENS_6IINBitE:
   87|  62.7k|    IINField(IINBit bit) : LSB(0), MSB(0)
   88|  62.7k|    {
   89|  62.7k|        this->SetBit(bit);
   90|  62.7k|    }
_ZN8opendnp38IINFieldC2Ehh:
   92|   117k|    IINField(uint8_t aLSB, uint8_t aMSB) : LSB(aLSB), MSB(aMSB) {}
_ZN8opendnp38IINFieldC2Ev:
   94|  34.8k|    IINField() : LSB(0), MSB(0) {}
_ZNK8opendnp38IINFieldorERKS0_:
  126|  25.1k|    {
  127|  25.1k|        return IINField(LSB | aIIN.LSB, MSB | aIIN.MSB);
  128|  25.1k|    }
_ZN8opendnp38IINFieldoRERKS0_:
  131|   134k|    {
  132|   134k|        MSB |= aIIN.MSB;
  133|   134k|        LSB |= aIIN.LSB;
  134|   134k|        return *this;
  135|   134k|    }
_ZN8opendnp38IINField3SetENS0_7LSBMaskE:
  171|  8.87k|    {
  172|  8.87k|        LSB |= static_cast<uint8_t>(bit);
  173|  8.87k|    }
_ZN8opendnp38IINField3SetENS0_7MSBMaskE:
  175|  55.6k|    {
  176|  55.6k|        MSB |= static_cast<uint8_t>(bit);
  177|  55.6k|    }
_ZN8opendnp38IINField5ClearENS0_7LSBMaskE:
  180|  50.2k|    {
  181|  50.2k|        LSB &= ~static_cast<uint8_t>(bit);
  182|  50.2k|    }
_ZN8opendnp38IINField5ClearENS0_7MSBMaskE:
  184|  25.1k|    {
  185|  25.1k|        MSB &= ~static_cast<uint8_t>(bit);
  186|  25.1k|    }

_ZN8opendnp37IndexedINS_23ControlRelayOutputBlockEEC2ERKS1_t:
   34|  1.52k|    Indexed(const T& value_, uint16_t index_) : value(value_), index(index_) {}
_ZN8opendnp37IndexedINS_17AnalogOutputInt16EEC2ERKS1_t:
   34|  13.2k|    Indexed(const T& value_, uint16_t index_) : value(value_), index(index_) {}
_ZN8opendnp37IndexedINS_17AnalogOutputInt32EEC2ERKS1_t:
   34|  2.54k|    Indexed(const T& value_, uint16_t index_) : value(value_), index(index_) {}
_ZN8opendnp37IndexedINS_19AnalogOutputFloat32EEC2ERKS1_t:
   34|  4.68k|    Indexed(const T& value_, uint16_t index_) : value(value_), index(index_) {}
_ZN8opendnp37IndexedINS_20AnalogOutputDouble64EEC2ERKS1_t:
   34|  3.99k|    Indexed(const T& value_, uint16_t index_) : value(value_), index(index_) {}
_ZN8opendnp37IndexedINS_8IINValueEEC2Ev:
   36|  1.08k|    Indexed() : value(), index(0) {}
_ZN8opendnp37IndexedINS_23ControlRelayOutputBlockEEC2Ev:
   36|  5.32k|    Indexed() : value(), index(0) {}
_ZN8opendnp37IndexedINS_17AnalogOutputInt32EEC2Ev:
   36|  5.59k|    Indexed() : value(), index(0) {}
_ZN8opendnp37IndexedINS_17AnalogOutputInt16EEC2Ev:
   36|  22.3k|    Indexed() : value(), index(0) {}
_ZN8opendnp37IndexedINS_19AnalogOutputFloat32EEC2Ev:
   36|  8.19k|    Indexed() : value(), index(0) {}
_ZN8opendnp37IndexedINS_20AnalogOutputDouble64EEC2Ev:
   36|  8.75k|    Indexed() : value(), index(0) {}
_ZN8opendnp39WithIndexINS_8IINValueEEENS_7IndexedIT_EERKS3_t:
   43|    733|{
   44|    733|    return Indexed<T>(value, index);
   45|    733|}
_ZN8opendnp37IndexedINS_8IINValueEEC2ERKS1_t:
   34|    733|    Indexed(const T& value_, uint16_t index_) : value(value_), index(index_) {}

_ZNK8opendnp39OctetData4SizeEv:
   68|  6.80k|    {
   69|  6.80k|        return size;
   70|  6.80k|    }

_ZN8opendnp311OctetStringC2Ev:
   37|   532k|    OctetString() : OctetData() {}

_ZNK8opendnp311ICollectionINS_7IndexedINS_8IINValueEEEE13ReadOnlyValueERS3_:
   88|  1.08k|    {
   89|  1.08k|        if (this->Count() == 1)
  ------------------
  |  Branch (89:13): [True: 733, False: 351]
  ------------------
   90|    733|        {
   91|    733|            auto assignValue = [&value](const T& item) { value = item; };
   92|    733|            this->ForeachItem(assignValue);
   93|    733|            return true;
   94|    733|        }
   95|    351|        else
   96|    351|        {
   97|    351|            return false;
   98|    351|        }
   99|  1.08k|    }
_ZNK8opendnp311ICollectionINS_7IndexedINS_8IINValueEEEE11ForeachItemIZNKS4_13ReadOnlyValueERS3_EUlRKS3_E_EEvRKT_:
   79|    733|    {
   80|    733|        FunctorVisitor<T, Fun> visitor(fun);
   81|    733|        this->Foreach(visitor);
   82|    733|    }
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_8IINValueEEEZNKS_11ICollectionIS3_E13ReadOnlyValueERS3_EUlRKS3_E_EC2ERKS9_:
   46|    733|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_8IINValueEEEZNKS_11ICollectionIS3_E13ReadOnlyValueERS3_EUlRKS3_E_E7OnValueES8_:
   49|    733|    {
   50|    733|        fun(value);
   51|    733|    }
_ZZNK8opendnp311ICollectionINS_7IndexedINS_8IINValueEEEE13ReadOnlyValueERS3_ENKUlRKS3_E_clES7_:
   91|    733|            auto assignValue = [&value](const T& item) { value = item; };
_ZNK8opendnp311ICollectionINS_11Group50Var1EE13ReadOnlyValueERS1_:
   88|    321|    {
   89|    321|        if (this->Count() == 1)
  ------------------
  |  Branch (89:13): [True: 31, False: 290]
  ------------------
   90|     31|        {
   91|     31|            auto assignValue = [&value](const T& item) { value = item; };
   92|     31|            this->ForeachItem(assignValue);
   93|     31|            return true;
   94|     31|        }
   95|    290|        else
   96|    290|        {
   97|    290|            return false;
   98|    290|        }
   99|    321|    }
_ZNK8opendnp311ICollectionINS_11Group50Var1EE11ForeachItemIZNKS2_13ReadOnlyValueERS1_EUlRKS1_E_EEvRKT_:
   79|     31|    {
   80|     31|        FunctorVisitor<T, Fun> visitor(fun);
   81|     31|        this->Foreach(visitor);
   82|     31|    }
_ZN8opendnp314FunctorVisitorINS_11Group50Var1EZNKS_11ICollectionIS1_E13ReadOnlyValueERS1_EUlRKS1_E_EC2ERKS7_:
   46|     31|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_11Group50Var1EZNKS_11ICollectionIS1_E13ReadOnlyValueERS1_EUlRKS1_E_E7OnValueES6_:
   49|     31|    {
   50|     31|        fun(value);
   51|     31|    }
_ZZNK8opendnp311ICollectionINS_11Group50Var1EE13ReadOnlyValueERS1_ENKUlRKS1_E_clES5_:
   91|     31|            auto assignValue = [&value](const T& item) { value = item; };
_ZNK8opendnp311ICollectionINS_11Group50Var3EE13ReadOnlyValueERS1_:
   88|    797|    {
   89|    797|        if (this->Count() == 1)
  ------------------
  |  Branch (89:13): [True: 482, False: 315]
  ------------------
   90|    482|        {
   91|    482|            auto assignValue = [&value](const T& item) { value = item; };
   92|    482|            this->ForeachItem(assignValue);
   93|    482|            return true;
   94|    482|        }
   95|    315|        else
   96|    315|        {
   97|    315|            return false;
   98|    315|        }
   99|    797|    }
_ZNK8opendnp311ICollectionINS_11Group50Var3EE11ForeachItemIZNKS2_13ReadOnlyValueERS1_EUlRKS1_E_EEvRKT_:
   79|    482|    {
   80|    482|        FunctorVisitor<T, Fun> visitor(fun);
   81|    482|        this->Foreach(visitor);
   82|    482|    }
_ZN8opendnp314FunctorVisitorINS_11Group50Var3EZNKS_11ICollectionIS1_E13ReadOnlyValueERS1_EUlRKS1_E_EC2ERKS7_:
   46|    482|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_11Group50Var3EZNKS_11ICollectionIS1_E13ReadOnlyValueERS1_EUlRKS1_E_E7OnValueES6_:
   49|    482|    {
   50|    482|        fun(value);
   51|    482|    }
_ZZNK8opendnp311ICollectionINS_11Group50Var3EE13ReadOnlyValueERS1_ENKUlRKS1_E_clES5_:
   91|    482|            auto assignValue = [&value](const T& item) { value = item; };
_ZNK8opendnp311ICollectionINS_7IndexedINS_23ControlRelayOutputBlockEEEE11ForeachItemIZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS0_INS1_ISE_EEEEPNS_21PrefixedWriteIteratorIT0_SE_EEEUlRKS3_E_EEvRKSE_:
   79|    758|    {
   80|    758|        FunctorVisitor<T, Fun> visitor(fun);
   81|    758|        this->Foreach(visitor);
   82|    758|    }
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_23ControlRelayOutputBlockEEEZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS1_ISC_EEEEPNS_21PrefixedWriteIteratorIT0_SC_EEEUlRKS3_E_EC2ERKSR_:
   46|    758|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_23ControlRelayOutputBlockEEEZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS1_ISC_EEEEPNS_21PrefixedWriteIteratorIT0_SC_EEEUlRKS3_E_E7OnValueESQ_:
   49|  2.07k|    {
   50|  2.07k|        fun(value);
   51|  2.07k|    }
_ZNK8opendnp311ICollectionINS_7IndexedINS_17AnalogOutputInt16EEEE11ForeachItemIZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS0_INS1_ISE_EEEEPNS_21PrefixedWriteIteratorIT0_SE_EEEUlRKS3_E_EEvRKSE_:
   79|    853|    {
   80|    853|        FunctorVisitor<T, Fun> visitor(fun);
   81|    853|        this->Foreach(visitor);
   82|    853|    }
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_17AnalogOutputInt16EEEZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS1_ISC_EEEEPNS_21PrefixedWriteIteratorIT0_SC_EEEUlRKS3_E_EC2ERKSR_:
   46|    853|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_17AnalogOutputInt16EEEZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS1_ISC_EEEEPNS_21PrefixedWriteIteratorIT0_SC_EEEUlRKS3_E_E7OnValueESQ_:
   49|  4.09k|    {
   50|  4.09k|        fun(value);
   51|  4.09k|    }
_ZNK8opendnp311ICollectionINS_7IndexedINS_17AnalogOutputInt32EEEE11ForeachItemIZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS0_INS1_ISE_EEEEPNS_21PrefixedWriteIteratorIT0_SE_EEEUlRKS3_E_EEvRKSE_:
   79|    809|    {
   80|    809|        FunctorVisitor<T, Fun> visitor(fun);
   81|    809|        this->Foreach(visitor);
   82|    809|    }
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_17AnalogOutputInt32EEEZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS1_ISC_EEEEPNS_21PrefixedWriteIteratorIT0_SC_EEEUlRKS3_E_EC2ERKSR_:
   46|    809|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_17AnalogOutputInt32EEEZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS1_ISC_EEEEPNS_21PrefixedWriteIteratorIT0_SC_EEEUlRKS3_E_E7OnValueESQ_:
   49|  2.56k|    {
   50|  2.56k|        fun(value);
   51|  2.56k|    }
_ZNK8opendnp311ICollectionINS_7IndexedINS_19AnalogOutputFloat32EEEE11ForeachItemIZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS0_INS1_ISE_EEEEPNS_21PrefixedWriteIteratorIT0_SE_EEEUlRKS3_E_EEvRKSE_:
   79|    649|    {
   80|    649|        FunctorVisitor<T, Fun> visitor(fun);
   81|    649|        this->Foreach(visitor);
   82|    649|    }
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_19AnalogOutputFloat32EEEZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS1_ISC_EEEEPNS_21PrefixedWriteIteratorIT0_SC_EEEUlRKS3_E_EC2ERKSR_:
   46|    649|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_19AnalogOutputFloat32EEEZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS1_ISC_EEEEPNS_21PrefixedWriteIteratorIT0_SC_EEEUlRKS3_E_E7OnValueESQ_:
   49|  2.02k|    {
   50|  2.02k|        fun(value);
   51|  2.02k|    }
_ZNK8opendnp311ICollectionINS_7IndexedINS_20AnalogOutputDouble64EEEE11ForeachItemIZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS0_INS1_ISE_EEEEPNS_21PrefixedWriteIteratorIT0_SE_EEEUlRKS3_E_EEvRKSE_:
   79|    504|    {
   80|    504|        FunctorVisitor<T, Fun> visitor(fun);
   81|    504|        this->Foreach(visitor);
   82|    504|    }
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_20AnalogOutputDouble64EEEZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS1_ISC_EEEEPNS_21PrefixedWriteIteratorIT0_SC_EEEUlRKS3_E_EC2ERKSR_:
   46|    504|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_20AnalogOutputDouble64EEEZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS1_ISC_EEEEPNS_21PrefixedWriteIteratorIT0_SC_EEEUlRKS3_E_E7OnValueESQ_:
   49|  1.99k|    {
   50|  1.99k|        fun(value);
   51|  1.99k|    }
_ZNK8opendnp311ICollectionINS_7IndexedINS_23ControlRelayOutputBlockEEEE11ForeachItemIZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS0_INS1_ISD_EEEEPNS_21PrefixedWriteIteratorIT0_SD_EEEUlRKS3_E_EEvRKSD_:
   79|    767|    {
   80|    767|        FunctorVisitor<T, Fun> visitor(fun);
   81|    767|        this->Foreach(visitor);
   82|    767|    }
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_23ControlRelayOutputBlockEEEZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS1_ISB_EEEEPNS_21PrefixedWriteIteratorIT0_SB_EEEUlRKS3_E_EC2ERKSQ_:
   46|    767|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_23ControlRelayOutputBlockEEEZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS1_ISB_EEEEPNS_21PrefixedWriteIteratorIT0_SB_EEEUlRKS3_E_E7OnValueESP_:
   49|  3.25k|    {
   50|  3.25k|        fun(value);
   51|  3.25k|    }
_ZNK8opendnp311ICollectionINS_7IndexedINS_17AnalogOutputInt16EEEE11ForeachItemIZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS0_INS1_ISD_EEEEPNS_21PrefixedWriteIteratorIT0_SD_EEEUlRKS3_E_EEvRKSD_:
   79|  1.58k|    {
   80|  1.58k|        FunctorVisitor<T, Fun> visitor(fun);
   81|  1.58k|        this->Foreach(visitor);
   82|  1.58k|    }
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_17AnalogOutputInt16EEEZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS1_ISB_EEEEPNS_21PrefixedWriteIteratorIT0_SB_EEEUlRKS3_E_EC2ERKSQ_:
   46|  1.58k|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_17AnalogOutputInt16EEEZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS1_ISB_EEEEPNS_21PrefixedWriteIteratorIT0_SB_EEEUlRKS3_E_E7OnValueESP_:
   49|  18.2k|    {
   50|  18.2k|        fun(value);
   51|  18.2k|    }
_ZNK8opendnp311ICollectionINS_7IndexedINS_17AnalogOutputInt32EEEE11ForeachItemIZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS0_INS1_ISD_EEEEPNS_21PrefixedWriteIteratorIT0_SD_EEEUlRKS3_E_EEvRKSD_:
   79|    808|    {
   80|    808|        FunctorVisitor<T, Fun> visitor(fun);
   81|    808|        this->Foreach(visitor);
   82|    808|    }
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_17AnalogOutputInt32EEEZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS1_ISB_EEEEPNS_21PrefixedWriteIteratorIT0_SB_EEEUlRKS3_E_EC2ERKSQ_:
   46|    808|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_17AnalogOutputInt32EEEZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS1_ISB_EEEEPNS_21PrefixedWriteIteratorIT0_SB_EEEUlRKS3_E_E7OnValueESP_:
   49|  3.02k|    {
   50|  3.02k|        fun(value);
   51|  3.02k|    }
_ZNK8opendnp311ICollectionINS_7IndexedINS_19AnalogOutputFloat32EEEE11ForeachItemIZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS0_INS1_ISD_EEEEPNS_21PrefixedWriteIteratorIT0_SD_EEEUlRKS3_E_EEvRKSD_:
   79|  1.14k|    {
   80|  1.14k|        FunctorVisitor<T, Fun> visitor(fun);
   81|  1.14k|        this->Foreach(visitor);
   82|  1.14k|    }
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_19AnalogOutputFloat32EEEZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS1_ISB_EEEEPNS_21PrefixedWriteIteratorIT0_SB_EEEUlRKS3_E_EC2ERKSQ_:
   46|  1.14k|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_19AnalogOutputFloat32EEEZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS1_ISB_EEEEPNS_21PrefixedWriteIteratorIT0_SB_EEEUlRKS3_E_E7OnValueESP_:
   49|  6.16k|    {
   50|  6.16k|        fun(value);
   51|  6.16k|    }
_ZNK8opendnp311ICollectionINS_7IndexedINS_20AnalogOutputDouble64EEEE11ForeachItemIZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS0_INS1_ISD_EEEEPNS_21PrefixedWriteIteratorIT0_SD_EEEUlRKS3_E_EEvRKSD_:
   79|  1.38k|    {
   80|  1.38k|        FunctorVisitor<T, Fun> visitor(fun);
   81|  1.38k|        this->Foreach(visitor);
   82|  1.38k|    }
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_20AnalogOutputDouble64EEEZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS1_ISB_EEEEPNS_21PrefixedWriteIteratorIT0_SB_EEEUlRKS3_E_EC2ERKSQ_:
   46|  1.38k|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_20AnalogOutputDouble64EEEZNS_22CommandResponseHandler27RespondToHeaderWithIteratorIS2_N7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS1_ISB_EEEEPNS_21PrefixedWriteIteratorIT0_SB_EEEUlRKS3_E_E7OnValueESP_:
   49|  6.76k|    {
   50|  6.76k|        fun(value);
   51|  6.76k|    }
_ZNK8opendnp311ICollectionItE11ForeachItemIZNS_14select_indicesINS_10BinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKS1_EUltE_EEvRKS7_:
   79|    895|    {
   80|    895|        FunctorVisitor<T, Fun> visitor(fun);
   81|    895|        this->Foreach(visitor);
   82|    895|    }
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_10BinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEEEUltE_EC2ERKSC_:
   46|    895|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_10BinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEEEUltE_E7OnValueERKt:
   49|  2.79k|    {
   50|  2.79k|        fun(value);
   51|  2.79k|    }
_ZNK8opendnp311ICollectionItE11ForeachItemIZNS_14select_indicesINS_10BinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKS1_NS7_18static_variation_tEEUltE_EEvRKS7_:
   79|  1.53k|    {
   80|  1.53k|        FunctorVisitor<T, Fun> visitor(fun);
   81|  1.53k|        this->Foreach(visitor);
   82|  1.53k|    }
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_10BinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS5_18static_variation_tEEUltE_EC2ERKSD_:
   46|  1.53k|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_10BinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS5_18static_variation_tEEUltE_E7OnValueERKt:
   49|  5.79k|    {
   50|  5.79k|        fun(value);
   51|  5.79k|    }
_ZNK8opendnp311ICollectionItE11ForeachItemIZNS_14select_indicesINS_19DoubleBitBinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKS1_EUltE_EEvRKS7_:
   79|    649|    {
   80|    649|        FunctorVisitor<T, Fun> visitor(fun);
   81|    649|        this->Foreach(visitor);
   82|    649|    }
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_19DoubleBitBinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEEEUltE_EC2ERKSC_:
   46|    649|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_19DoubleBitBinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEEEUltE_E7OnValueERKt:
   49|  2.83k|    {
   50|  2.83k|        fun(value);
   51|  2.83k|    }
_ZNK8opendnp311ICollectionItE11ForeachItemIZNS_14select_indicesINS_19DoubleBitBinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKS1_NS7_18static_variation_tEEUltE_EEvRKS7_:
   79|    729|    {
   80|    729|        FunctorVisitor<T, Fun> visitor(fun);
   81|    729|        this->Foreach(visitor);
   82|    729|    }
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_19DoubleBitBinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS5_18static_variation_tEEUltE_EC2ERKSD_:
   46|    729|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_19DoubleBitBinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS5_18static_variation_tEEUltE_E7OnValueERKt:
   49|  2.33k|    {
   50|  2.33k|        fun(value);
   51|  2.33k|    }
_ZNK8opendnp311ICollectionItE11ForeachItemIZNS_14select_indicesINS_22BinaryOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKS1_EUltE_EEvRKS7_:
   79|    651|    {
   80|    651|        FunctorVisitor<T, Fun> visitor(fun);
   81|    651|        this->Foreach(visitor);
   82|    651|    }
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_22BinaryOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEEEUltE_EC2ERKSC_:
   46|    651|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_22BinaryOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEEEUltE_E7OnValueERKt:
   49|  3.19k|    {
   50|  3.19k|        fun(value);
   51|  3.19k|    }
_ZNK8opendnp311ICollectionItE11ForeachItemIZNS_14select_indicesINS_22BinaryOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKS1_NS7_18static_variation_tEEUltE_EEvRKS7_:
   79|    751|    {
   80|    751|        FunctorVisitor<T, Fun> visitor(fun);
   81|    751|        this->Foreach(visitor);
   82|    751|    }
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_22BinaryOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS5_18static_variation_tEEUltE_EC2ERKSD_:
   46|    751|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_22BinaryOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS5_18static_variation_tEEUltE_E7OnValueERKt:
   49|  2.73k|    {
   50|  2.73k|        fun(value);
   51|  2.73k|    }
_ZNK8opendnp311ICollectionItE11ForeachItemIZNS_14select_indicesINS_11CounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKS1_EUltE_EEvRKS7_:
   79|    581|    {
   80|    581|        FunctorVisitor<T, Fun> visitor(fun);
   81|    581|        this->Foreach(visitor);
   82|    581|    }
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_11CounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEEEUltE_EC2ERKSC_:
   46|    581|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_11CounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEEEUltE_E7OnValueERKt:
   49|  2.08k|    {
   50|  2.08k|        fun(value);
   51|  2.08k|    }
_ZNK8opendnp311ICollectionItE11ForeachItemIZNS_14select_indicesINS_11CounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKS1_NS7_18static_variation_tEEUltE_EEvRKS7_:
   79|  2.01k|    {
   80|  2.01k|        FunctorVisitor<T, Fun> visitor(fun);
   81|  2.01k|        this->Foreach(visitor);
   82|  2.01k|    }
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_11CounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS5_18static_variation_tEEUltE_EC2ERKSD_:
   46|  2.01k|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_11CounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS5_18static_variation_tEEUltE_E7OnValueERKt:
   49|  4.47k|    {
   50|  4.47k|        fun(value);
   51|  4.47k|    }
_ZNK8opendnp311ICollectionItE11ForeachItemIZNS_14select_indicesINS_17FrozenCounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKS1_EUltE_EEvRKS7_:
   79|    709|    {
   80|    709|        FunctorVisitor<T, Fun> visitor(fun);
   81|    709|        this->Foreach(visitor);
   82|    709|    }
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_17FrozenCounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEEEUltE_EC2ERKSC_:
   46|    709|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_17FrozenCounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEEEUltE_E7OnValueERKt:
   49|  2.07k|    {
   50|  2.07k|        fun(value);
   51|  2.07k|    }
_ZNK8opendnp311ICollectionItE11ForeachItemIZNS_14select_indicesINS_17FrozenCounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKS1_NS7_18static_variation_tEEUltE_EEvRKS7_:
   79|  3.02k|    {
   80|  3.02k|        FunctorVisitor<T, Fun> visitor(fun);
   81|  3.02k|        this->Foreach(visitor);
   82|  3.02k|    }
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_17FrozenCounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS5_18static_variation_tEEUltE_EC2ERKSD_:
   46|  3.02k|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_17FrozenCounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS5_18static_variation_tEEUltE_E7OnValueERKt:
   49|  6.04k|    {
   50|  6.04k|        fun(value);
   51|  6.04k|    }
_ZNK8opendnp311ICollectionItE11ForeachItemIZNS_14select_indicesINS_10AnalogSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKS1_EUltE_EEvRKS7_:
   79|    784|    {
   80|    784|        FunctorVisitor<T, Fun> visitor(fun);
   81|    784|        this->Foreach(visitor);
   82|    784|    }
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_10AnalogSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEEEUltE_EC2ERKSC_:
   46|    784|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_10AnalogSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEEEUltE_E7OnValueERKt:
   49|  2.49k|    {
   50|  2.49k|        fun(value);
   51|  2.49k|    }
_ZNK8opendnp311ICollectionItE11ForeachItemIZNS_14select_indicesINS_10AnalogSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKS1_NS7_18static_variation_tEEUltE_EEvRKS7_:
   79|  2.91k|    {
   80|  2.91k|        FunctorVisitor<T, Fun> visitor(fun);
   81|  2.91k|        this->Foreach(visitor);
   82|  2.91k|    }
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_10AnalogSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS5_18static_variation_tEEUltE_EC2ERKSD_:
   46|  2.91k|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_10AnalogSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS5_18static_variation_tEEUltE_E7OnValueERKt:
   49|  6.58k|    {
   50|  6.58k|        fun(value);
   51|  6.58k|    }
_ZNK8opendnp311ICollectionItE11ForeachItemIZNS_14select_indicesINS_22AnalogOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKS1_EUltE_EEvRKS7_:
   79|    500|    {
   80|    500|        FunctorVisitor<T, Fun> visitor(fun);
   81|    500|        this->Foreach(visitor);
   82|    500|    }
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_22AnalogOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEEEUltE_EC2ERKSC_:
   46|    500|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_22AnalogOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEEEUltE_E7OnValueERKt:
   49|  2.40k|    {
   50|  2.40k|        fun(value);
   51|  2.40k|    }
_ZNK8opendnp311ICollectionItE11ForeachItemIZNS_14select_indicesINS_22AnalogOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKS1_NS7_18static_variation_tEEUltE_EEvRKS7_:
   79|  2.57k|    {
   80|  2.57k|        FunctorVisitor<T, Fun> visitor(fun);
   81|  2.57k|        this->Foreach(visitor);
   82|  2.57k|    }
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_22AnalogOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS5_18static_variation_tEEUltE_EC2ERKSD_:
   46|  2.57k|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_22AnalogOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS5_18static_variation_tEEUltE_E7OnValueERKt:
   49|  5.73k|    {
   50|  5.73k|        fun(value);
   51|  5.73k|    }
_ZNK8opendnp311ICollectionItE11ForeachItemIZNS_14select_indicesINS_19TimeAndIntervalSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKS1_NS7_18static_variation_tEEUltE_EEvRKS7_:
   79|    528|    {
   80|    528|        FunctorVisitor<T, Fun> visitor(fun);
   81|    528|        this->Foreach(visitor);
   82|    528|    }
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_19TimeAndIntervalSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS5_18static_variation_tEEUltE_EC2ERKSD_:
   46|    528|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_19TimeAndIntervalSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS5_18static_variation_tEEUltE_E7OnValueERKt:
   49|  2.25k|    {
   50|  2.25k|        fun(value);
   51|  2.25k|    }
_ZNK8opendnp311ICollectionItE11ForeachItemIZNS_14select_indicesINS_15OctetStringSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKS1_NS7_18static_variation_tEEUltE_EEvRKS7_:
   79|    833|    {
   80|    833|        FunctorVisitor<T, Fun> visitor(fun);
   81|    833|        this->Foreach(visitor);
   82|    833|    }
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_15OctetStringSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS5_18static_variation_tEEUltE_EC2ERKSD_:
   46|    833|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorItZNS_14select_indicesINS_15OctetStringSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS5_18static_variation_tEEUltE_E7OnValueERKt:
   49|  2.89k|    {
   50|  2.89k|        fun(value);
   51|  2.89k|    }

_ZN8opendnp39AddressesC2Ev:
   30|  26.6k|    Addresses() = default;
_ZN8opendnp39AddressesC2Ett:
   32|  8.37k|    Addresses(uint16_t source, uint16_t destination) : source(source), destination(destination) {}

_ZN8opendnp38LogLevelC2Ei:
   43|    544|    explicit LogLevel(int32_t level) : value(level) {}
_ZNK8opendnp38LogLevel4nextEv:
   46|    512|    {
   47|    512|        return LogLevel(value << 1);
   48|    512|    }
_ZN8opendnp39LogLevels4noneEv:
   71|     32|    {
   72|     32|        return LogLevels(0);
   73|     32|    }
_ZN8opendnp39LogLevelsC2Ei:
   66|  9.39k|    explicit LogLevels(int32_t levels) : levels(levels) {}
_ZN8opendnp39LogLevels10everythingEv:
   76|     32|    {
   77|     32|        return LogLevels(~0);
   78|     32|    }
_ZNK8opendnp39LogLevelsorERKNS_8LogLevelE:
   97|    448|    {
   98|    448|        return LogLevels(this->levels | other.value);
   99|    448|    }
_ZN8opendnp38ModuleIdC2Ei:
   33|  8.87k|    explicit ModuleId(int32_t level) : value(level) {}

_ZN8opendnp36LoggerC2ERKNSt3__110shared_ptrINS_11ILogHandlerEEENS_8ModuleIdERKNS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS_9LogLevelsE:
   49|  8.87k|        : backend(backend), settings(std::make_shared<Settings>(moduleid, id, levels))
   50|  8.87k|    {
   51|  8.87k|    }
_ZN8opendnp36Logger8SettingsC2ENS_8ModuleIdERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS_9LogLevelsE:
   41|  8.87k|        Settings(ModuleId module, const std::string& id, LogLevels levels) : module(module), id(id), levels(levels) {}
_ZNK8opendnp36Logger10is_enabledERKNS_8LogLevelE:
   82|   175k|    {
   83|   175k|        return backend && settings->levels.is_set(level);
  ------------------
  |  Branch (83:16): [True: 0, False: 175k]
  |  Branch (83:27): [True: 0, False: 0]
  ------------------
   84|   175k|    }

_ZN8opendnp314ApplicationIINC2Ev:
   37|  8.87k|    ApplicationIIN() = default;

_ZN8opendnp315ICommandHandlerD2Ev:
   41|  8.87k|    virtual ~ICommandHandler() = default;

_ZN8opendnp322IOutstationApplicationD2Ev:
  140|  8.87k|    virtual ~IOutstationApplication() = default;

_ZN8opendnp314IUpdateHandlerD2Ev:
   37|  8.87k|    virtual ~IUpdateHandler() {}

_ZN8opendnp320SimpleCommandHandler8DoSelectERKNS_23ControlRelayOutputBlockEt:
   75|  1.06k|    virtual void DoSelect(const ControlRelayOutputBlock& command, uint16_t index) {}
_ZN8opendnp320SimpleCommandHandler8DoSelectERKNS_17AnalogOutputInt16Et:
   78|  3.57k|    virtual void DoSelect(const AnalogOutputInt16& command, uint16_t index) {}
_ZN8opendnp320SimpleCommandHandler8DoSelectERKNS_17AnalogOutputInt32Et:
   81|  1.77k|    virtual void DoSelect(const AnalogOutputInt32& command, uint16_t index) {}
_ZN8opendnp320SimpleCommandHandler8DoSelectERKNS_19AnalogOutputFloat32Et:
   84|  1.97k|    virtual void DoSelect(const AnalogOutputFloat32& command, uint16_t index) {}
_ZN8opendnp320SimpleCommandHandler8DoSelectERKNS_20AnalogOutputDouble64Et:
   87|  2.83k|    virtual void DoSelect(const AnalogOutputDouble64& command, uint16_t index) {}

_ZN8opendnp318StaticTypeBitField8AllTypesEv:
   40|  8.87k|    {
   41|  8.87k|        return StaticTypeBitField(~0);
   42|  8.87k|    }
_ZN8opendnp318StaticTypeBitFieldC2Et:
   37|  8.87k|    StaticTypeBitField(uint16_t mask) : mask(mask) {}
_ZNK8opendnp318StaticTypeBitField5IsSetENS_17StaticTypeBitmaskE:
   45|  15.8k|    {
   46|  15.8k|        return (mask & static_cast<uint16_t>(type)) != 0;
   47|  15.8k|    }

_ZN8opendnp36BufferC2EPKhm:
   32|  2.26k|    Buffer(const uint8_t* data, std::size_t length) : data(data), length(length) {}

_ZN8opendnp312UTCTimestampC2Em:
   37|     31|    UTCTimestamp(uint64_t msSinceEpoch) : msSinceEpoch(msSinceEpoch) {}

_ZN8opendnp310UncopyableD2Ev:
   34|   128k|    virtual ~Uncopyable() = default;
_ZN8opendnp310UncopyableC2Ev:
   32|   128k|    Uncopyable() = default; // allow construction/destruction/move

_ZN8opendnp313HasUpperLayerC2Ev:
   94|  8.87k|    HasUpperLayer() : pUpperLayer(nullptr) {}
_ZN8opendnp311ILowerLayerD2Ev:
   67|  8.87k|    virtual ~ILowerLayer() {}
_ZN8opendnp313HasUpperLayer13SetUpperLayerERNS_11IUpperLayerE:
   99|  8.87k|    {
  100|  8.87k|        assert(!pUpperLayer);
  ------------------
  |  Branch (100:9): [True: 8.87k, False: 0]
  ------------------
  101|  8.87k|        pUpperLayer = &upperLayer;
  102|  8.87k|    }
_ZN8opendnp37IUpDownD2Ev:
   38|  8.87k|    virtual ~IUpDown() {}

_ZNK8opendnp311SequenceNumIhLh16EE4NextEv:
   66|    236|    {
   67|    236|        return SequenceNum(Next(seq));
   68|    236|    }
_ZN8opendnp311SequenceNumIhLh16EE4NextEh:
   31|    236|    {
   32|    236|        return (seq + 1) % Modulus;
   33|    236|    }
_ZN8opendnp311SequenceNumIhLh16EEC2Ev:
   46|  53.2k|    SequenceNum() : seq(0) {}
_ZN8opendnp311SequenceNumIhLh16EEC2Eh:
   48|  16.9k|    SequenceNum(T value) : seq(value) {}

_ZN8opendnp310APDUHeaderC2ERKNS_15AppControlFieldENS_12FunctionCodeE:
   43|  8.87k|    APDUHeader(const AppControlField& control, FunctionCode function) : control(control), function(function) {}
_ZN8opendnp310APDUHeaderC2Ev:
   41|  17.7k|    APDUHeader() = default;

_ZN8opendnp37logging9LogHeaderERNS_6LoggerERKNS_8LogLevelERKNS_10APDUHeaderE:
   33|  8.87k|    {
   34|  8.87k|        FORMAT_LOG_BLOCK(logger, flags, "FIR: %i FIN: %i CON: %i UNS: %i SEQ: %i FUNC: %s", header.control.FIR,
  ------------------
  |  |   54|  8.87k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 8.87k]
  |  |  ------------------
  |  |   55|  8.87k|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
   35|  8.87k|                         header.control.FIN, header.control.CON, header.control.UNS, header.control.SEQ,
   36|  8.87k|                         FunctionCodeSpec::to_human_string(header.function));
   37|  8.87k|    }
_ZN8opendnp37logging21ParseAndLogResponseTxERNS_6LoggerERKN7ser4cpp4RSeqImEE:
   69|  8.37k|    {
   70|  8.37k|        FORMAT_HEX_BLOCK(logger, flags::APP_HEX_TX, apdu, 18, 18);
  ------------------
  |  |   70|  8.37k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (70:9): [True: 0, False: 8.37k]
  |  |  ------------------
  |  |   71|  8.37k|    {                                                                                                                  \
  |  |   72|      0|        opendnp3::HexLogging::log(logger, levels, buffer, ' ', firstSize, otherSize);                                  \
  |  |   73|      0|    }
  ------------------
   71|       |
   72|  8.37k|        if (logger.is_enabled(flags::APP_HEADER_TX))
  ------------------
  |  Branch (72:13): [True: 0, False: 8.37k]
  ------------------
   73|      0|        {
   74|      0|            const auto result = APDUHeaderParser::ParseResponse(apdu, &logger);
   75|      0|            if (result.success)
  ------------------
  |  Branch (75:17): [True: 0, False: 0]
  ------------------
   76|      0|            {
   77|      0|                LogHeader(logger, flags::APP_HEADER_TX, result.header);
   78|       |
   79|      0|                if (logger.is_enabled(flags::APP_OBJECT_TX))
  ------------------
  |  Branch (79:21): [True: 0, False: 0]
  ------------------
   80|      0|                {
   81|      0|                    APDUParser::ParseAndLogAll(result.objects, &logger,
   82|      0|                                               ParserSettings::Create(true, flags::APP_OBJECT_TX));
   83|      0|                }
   84|      0|            }
   85|      0|        }
   86|  8.37k|    }

_ZN8opendnp312APDUResponseC2ERKN7ser4cpp4WSeqImEE:
   27|  8.37k|APDUResponse::APDUResponse(const ser4cpp::wseq_t& buffer) : APDUWrapper(buffer)
   28|  8.37k|{
   29|  8.37k|    assert(buffer.length() >= 4);
  ------------------
  |  Branch (29:5): [True: 8.37k, False: 0]
  ------------------
   30|  8.37k|    remaining.advance(2);
   31|  8.37k|}
_ZN8opendnp312APDUResponse6SetIINERKNS_8IINFieldE:
   34|  8.37k|{
   35|  8.37k|    buffer[2] = indications.LSB;
   36|  8.37k|    buffer[3] = indications.MSB;
   37|  8.37k|}

_ZN8opendnp311APDUWrapperC2ERKN7ser4cpp4WSeqImEE:
   31|  8.37k|APDUWrapper::APDUWrapper(const ser4cpp::wseq_t& buffer) : valid(true), buffer(buffer), remaining(buffer)
   32|  8.37k|{
   33|  8.37k|    assert(buffer.length() >= 2); // need a control & function at a minimum
  ------------------
  |  Branch (33:5): [True: 8.37k, False: 0]
  ------------------
   34|  8.37k|    remaining.advance(2);
   35|  8.37k|}
_ZN8opendnp311APDUWrapper9GetWriterEv:
   43|  8.37k|{
   44|  8.37k|    return HeaderWriter(&remaining);
   45|  8.37k|}
_ZN8opendnp311APDUWrapper11SetFunctionENS_12FunctionCodeE:
   53|  8.37k|{
   54|  8.37k|    assert(buffer.is_not_empty());
  ------------------
  |  Branch (54:5): [True: 8.37k, False: 0]
  ------------------
   55|  8.37k|    buffer[1] = FunctionCodeSpec::to_type(code);
   56|  8.37k|}
_ZNK8opendnp311APDUWrapper10GetControlEv:
   65|  25.1k|{
   66|  25.1k|    assert(buffer.is_not_empty());
  ------------------
  |  Branch (66:5): [True: 25.1k, False: 0]
  ------------------
   67|  25.1k|    return AppControlField(buffer[0]);
   68|  25.1k|}
_ZN8opendnp311APDUWrapper10SetControlENS_15AppControlFieldE:
   71|  8.37k|{
   72|  8.37k|    buffer[0] = control.ToByte();
   73|  8.37k|}
_ZNK8opendnp311APDUWrapper4SizeEv:
   76|  8.37k|{
   77|  8.37k|    return buffer.length() - remaining.length();
   78|  8.37k|}
_ZNK8opendnp311APDUWrapper6ToRSeqEv:
   81|  8.37k|{
   82|  8.37k|    return buffer.readonly().take(this->Size());
   83|  8.37k|}

_ZN8opendnp317AnalogOutputInt16C2EsNS_13CommandStatusE:
   27|  22.3k|AnalogOutputInt16::AnalogOutputInt16(int16_t aValue, CommandStatus aStatus) : AnalogOutput<int16_t>(aValue, aStatus) {}
_ZN8opendnp317AnalogOutputInt16C2Ev:
   29|  22.3k|AnalogOutputInt16::AnalogOutputInt16() : AnalogOutput<int16_t>(0) {}
_ZN8opendnp317AnalogOutputInt32C2EiNS_13CommandStatusE:
   38|  5.59k|AnalogOutputInt32::AnalogOutputInt32(int32_t aValue, CommandStatus aStatus) : AnalogOutput<int32_t>(aValue, aStatus) {}
_ZN8opendnp317AnalogOutputInt32C2Ev:
   40|  5.59k|AnalogOutputInt32::AnalogOutputInt32() : AnalogOutput<int32_t>(0) {}
_ZN8opendnp319AnalogOutputFloat32C2EfNS_13CommandStatusE:
   49|  8.19k|AnalogOutputFloat32::AnalogOutputFloat32(float aValue, CommandStatus aStatus) : AnalogOutput<float>(aValue, aStatus) {}
_ZN8opendnp319AnalogOutputFloat32C2Ev:
   51|  8.19k|AnalogOutputFloat32::AnalogOutputFloat32() : AnalogOutput<float>(0) {}
_ZN8opendnp320AnalogOutputDouble64C2EdNS_13CommandStatusE:
   60|  8.75k|AnalogOutputDouble64::AnalogOutputDouble64(double aValue, CommandStatus aStatus) : AnalogOutput<double>(aValue, aStatus)
   61|  8.75k|{
   62|  8.75k|}
_ZN8opendnp320AnalogOutputDouble64C2Ev:
   64|  8.75k|AnalogOutputDouble64::AnalogOutputDouble64() : AnalogOutput<double>(0) {}

_ZN8opendnp315AppControlFieldC2Eh:
   28|  34.0k|    : FIR((byte & FIR_MASK) != 0),
   29|  34.0k|      FIN((byte & FIN_MASK) != 0),
   30|  34.0k|      CON((byte & CON_MASK) != 0),
   31|  34.0k|      UNS((byte & UNS_MASK) != 0),
   32|  34.0k|      SEQ(byte & SEQ_MASK)
   33|  34.0k|{
   34|  34.0k|}
_ZN8opendnp315AppControlFieldC2Ebbbbh:
   42|  8.38k|    : FIR(fir), FIN(fin), CON(con), UNS(uns), SEQ(seq)
   43|  8.38k|{
   44|  8.38k|}
_ZNK8opendnp315AppControlField6ToByteEv:
   47|  8.37k|{
   48|  8.37k|    uint8_t ret = 0;
   49|       |
   50|  8.37k|    if (FIR)
  ------------------
  |  Branch (50:9): [True: 8.37k, False: 0]
  ------------------
   51|  8.37k|    {
   52|  8.37k|        ret |= FIR_MASK;
   53|  8.37k|    }
   54|  8.37k|    if (FIN)
  ------------------
  |  Branch (54:9): [True: 8.37k, False: 0]
  ------------------
   55|  8.37k|    {
   56|  8.37k|        ret |= FIN_MASK;
   57|  8.37k|    }
   58|  8.37k|    if (CON)
  ------------------
  |  Branch (58:9): [True: 0, False: 8.37k]
  ------------------
   59|      0|    {
   60|      0|        ret |= CON_MASK;
   61|      0|    }
   62|  8.37k|    if (UNS)
  ------------------
  |  Branch (62:9): [True: 0, False: 8.37k]
  ------------------
   63|      0|    {
   64|      0|        ret |= UNS_MASK;
   65|      0|    }
   66|       |
   67|  8.37k|    uint8_t seq = SEQ % 16;
   68|       |
   69|  8.37k|    return ret | seq;
   70|  8.37k|}

_ZNK8opendnp315AppControlField11IsFirAndFinEv:
   45|  8.87k|    {
   46|  8.87k|        return FIR && FIN;
  ------------------
  |  Branch (46:16): [True: 8.86k, False: 8]
  |  Branch (46:23): [True: 8.86k, False: 2]
  ------------------
   47|  8.87k|    }
_ZN8opendnp315AppControlFieldC2Ev:
   36|  35.5k|    AppControlField() = default;

_ZN8opendnp310ClassField4NoneEv:
   26|  8.87k|{
   27|  8.87k|    return ClassField();
   28|  8.87k|}
_ZN8opendnp310ClassFieldC2Ev:
   40|  8.87k|ClassField::ClassField() : bitfield(0) {}
_ZN8opendnp310ClassFieldC2ENS_10EventClassE:
   45|  1.19k|    : ClassField(false, ec == EventClass::EC1, ec == EventClass::EC2, ec == EventClass::EC3)
   46|  1.19k|{
   47|  1.19k|}
_ZN8opendnp310ClassFieldC2Ebbbb:
   49|  9.57k|ClassField::ClassField(bool class0, bool class1, bool class2, bool class3) : bitfield(0)
   50|  9.57k|{
   51|  9.57k|    bitfield = class0 ? ClassField::CLASS_0 : 0;
  ------------------
  |  Branch (51:16): [True: 0, False: 9.57k]
  ------------------
   52|  9.57k|    bitfield |= class1 ? ClassField::CLASS_1 : 0;
  ------------------
  |  Branch (52:17): [True: 314, False: 9.26k]
  ------------------
   53|  9.57k|    bitfield |= class2 ? ClassField::CLASS_2 : 0;
  ------------------
  |  Branch (53:17): [True: 447, False: 9.13k]
  ------------------
   54|  9.57k|    bitfield |= class3 ? ClassField::CLASS_3 : 0;
  ------------------
  |  Branch (54:17): [True: 437, False: 9.14k]
  ------------------
   55|  9.57k|}
_ZNK8opendnp310ClassField9HasClass1Ev:
  110|  8.37k|{
  111|  8.37k|    return (bitfield & CLASS_1) != 0;
  112|  8.37k|}
_ZNK8opendnp310ClassField9HasClass2Ev:
  115|  8.37k|{
  116|  8.37k|    return (bitfield & CLASS_2) != 0;
  117|  8.37k|}
_ZNK8opendnp310ClassField9HasClass3Ev:
  120|  8.37k|{
  121|  8.37k|    return (bitfield & CLASS_3) != 0;
  122|  8.37k|}

_ZN8opendnp323ControlRelayOutputBlockC2ENS_13OperationTypeENS_13TripCloseCodeEbhjjNS_13CommandStatusE:
   32|  5.32k|    : opType(opType_),
   33|  5.32k|      tcc(tcc_),
   34|  5.32k|      clear(clear_),
   35|  5.32k|      count(count_),
   36|  5.32k|      onTimeMS(onTime_),
   37|  5.32k|      offTimeMS(offTime_),
   38|  5.32k|      status(status_),
   39|  5.32k|      rawCode(((TripCloseCodeSpec::to_type(tcc) << 6) & 0xC0) | ((static_cast<uint8_t>(clear) << 5) & 0x20)
   40|  5.32k|              | (OperationTypeSpec::to_type(opType) & 0x0F))
   41|  5.32k|{
   42|  5.32k|}
_ZN8opendnp323ControlRelayOutputBlockC2EhhjjNS_13CommandStatusE:
   46|  5.32k|    : opType(OperationTypeSpec::from_type(rawCode_ & 0x0F)),
   47|  5.32k|      tcc(TripCloseCodeSpec::from_type((rawCode_ >> 6) & 0x3)),
   48|  5.32k|      clear(rawCode_ & 0x20),
   49|  5.32k|      count(count_),
   50|  5.32k|      onTimeMS(onTime_),
   51|  5.32k|      offTimeMS(offTime_),
   52|  5.32k|      status(status_),
   53|  5.32k|      rawCode(rawCode_)
   54|  5.32k|{
   55|  5.32k|}

_ZN8opendnp314DNP3SerializerINS_23ControlRelayOutputBlockEEC2ENS_16GroupVariationIDEmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS4_4WSeqImEEE:
   37|  1.52k|        : Serializer<T>(size, read_func, write_func), id(id)
   38|  1.52k|    {
   39|  1.52k|    }
_ZN8opendnp314DNP3SerializerINS_17AnalogOutputInt16EEC2ENS_16GroupVariationIDEmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS4_4WSeqImEEE:
   37|  2.43k|        : Serializer<T>(size, read_func, write_func), id(id)
   38|  2.43k|    {
   39|  2.43k|    }
_ZN8opendnp314DNP3SerializerINS_17AnalogOutputInt32EEC2ENS_16GroupVariationIDEmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS4_4WSeqImEEE:
   37|  1.61k|        : Serializer<T>(size, read_func, write_func), id(id)
   38|  1.61k|    {
   39|  1.61k|    }
_ZN8opendnp314DNP3SerializerINS_19AnalogOutputFloat32EEC2ENS_16GroupVariationIDEmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS4_4WSeqImEEE:
   37|  1.79k|        : Serializer<T>(size, read_func, write_func), id(id)
   38|  1.79k|    {
   39|  1.79k|    }
_ZN8opendnp314DNP3SerializerINS_20AnalogOutputDouble64EEC2ENS_16GroupVariationIDEmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS4_4WSeqImEEE:
   37|  1.88k|        : Serializer<T>(size, read_func, write_func), id(id)
   38|  1.88k|    {
   39|  1.88k|    }
_ZNK8opendnp314DNP3SerializerINS_23ControlRelayOutputBlockEE2IDEv:
   42|    977|    {
   43|    977|        return id;
   44|    977|    }
_ZNK8opendnp314DNP3SerializerINS_17AnalogOutputInt16EE2IDEv:
   42|  1.59k|    {
   43|  1.59k|        return id;
   44|  1.59k|    }
_ZNK8opendnp314DNP3SerializerINS_17AnalogOutputInt32EE2IDEv:
   42|    997|    {
   43|    997|        return id;
   44|    997|    }
_ZNK8opendnp314DNP3SerializerINS_19AnalogOutputFloat32EE2IDEv:
   42|  1.35k|    {
   43|  1.35k|        return id;
   44|  1.35k|    }
_ZNK8opendnp314DNP3SerializerINS_20AnalogOutputDouble64EE2IDEv:
   42|  1.13k|    {
   43|  1.13k|        return id;
   44|  1.13k|    }
_ZNK8opendnp314DNP3SerializerINS_6BinaryEE2IDEv:
   42|    638|    {
   43|    638|        return id;
   44|    638|    }
_ZN8opendnp314DNP3SerializerINS_6BinaryEEC2ENS_16GroupVariationIDEmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS4_4WSeqImEEE:
   37|    638|        : Serializer<T>(size, read_func, write_func), id(id)
   38|    638|    {
   39|    638|    }
_ZNK8opendnp314DNP3SerializerINS_15DoubleBitBinaryEE2IDEv:
   42|    497|    {
   43|    497|        return id;
   44|    497|    }
_ZN8opendnp314DNP3SerializerINS_15DoubleBitBinaryEEC2ENS_16GroupVariationIDEmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS4_4WSeqImEEE:
   37|    497|        : Serializer<T>(size, read_func, write_func), id(id)
   38|    497|    {
   39|    497|    }
_ZNK8opendnp314DNP3SerializerINS_6AnalogEE2IDEv:
   42|  1.05k|    {
   43|  1.05k|        return id;
   44|  1.05k|    }
_ZN8opendnp314DNP3SerializerINS_6AnalogEEC2ENS_16GroupVariationIDEmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS4_4WSeqImEEE:
   37|  1.05k|        : Serializer<T>(size, read_func, write_func), id(id)
   38|  1.05k|    {
   39|  1.05k|    }
_ZNK8opendnp314DNP3SerializerINS_7CounterEE2IDEv:
   42|    731|    {
   43|    731|        return id;
   44|    731|    }
_ZN8opendnp314DNP3SerializerINS_7CounterEEC2ENS_16GroupVariationIDEmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS4_4WSeqImEEE:
   37|    731|        : Serializer<T>(size, read_func, write_func), id(id)
   38|    731|    {
   39|    731|    }
_ZNK8opendnp314DNP3SerializerINS_13FrozenCounterEE2IDEv:
   42|  1.01k|    {
   43|  1.01k|        return id;
   44|  1.01k|    }
_ZN8opendnp314DNP3SerializerINS_13FrozenCounterEEC2ENS_16GroupVariationIDEmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS4_4WSeqImEEE:
   37|  1.01k|        : Serializer<T>(size, read_func, write_func), id(id)
   38|  1.01k|    {
   39|  1.01k|    }
_ZNK8opendnp314DNP3SerializerINS_18BinaryOutputStatusEE2IDEv:
   42|    495|    {
   43|    495|        return id;
   44|    495|    }
_ZN8opendnp314DNP3SerializerINS_18BinaryOutputStatusEEC2ENS_16GroupVariationIDEmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS4_4WSeqImEEE:
   37|    495|        : Serializer<T>(size, read_func, write_func), id(id)
   38|    495|    {
   39|    495|    }
_ZNK8opendnp314DNP3SerializerINS_18AnalogOutputStatusEE2IDEv:
   42|    795|    {
   43|    795|        return id;
   44|    795|    }
_ZN8opendnp314DNP3SerializerINS_18AnalogOutputStatusEEC2ENS_16GroupVariationIDEmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS4_4WSeqImEEE:
   37|    795|        : Serializer<T>(size, read_func, write_func), id(id)
   38|    795|    {
   39|    795|    }
_ZNK8opendnp314DNP3SerializerINS_15TimeAndIntervalEE2IDEv:
   42|    329|    {
   43|    329|        return id;
   44|    329|    }
_ZN8opendnp314DNP3SerializerINS_15TimeAndIntervalEEC2ENS_16GroupVariationIDEmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS4_4WSeqImEEE:
   37|    329|        : Serializer<T>(size, read_func, write_func), id(id)
   38|    329|    {
   39|    329|    }
_ZNK8opendnp314DNP3SerializerINS_11OctetStringEE2IDEv:
   42|    359|    {
   43|    359|        return id;
   44|    359|    }
_ZN8opendnp314DNP3SerializerINS_11OctetStringEEC2ENS_16GroupVariationIDEmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS4_4WSeqImEEE:
   37|    359|        : Serializer<T>(size, read_func, write_func), id(id)
   38|    359|    {
   39|    359|    }

_ZN8opendnp312DownSamplingIdiE5ApplyEdRi:
   39|  5.12k|    {
   40|  5.12k|        if (src > TARGET_MAX)
  ------------------
  |  Branch (40:13): [True: 0, False: 5.12k]
  ------------------
   41|      0|        {
   42|      0|            target = TARGET_MAX;
   43|      0|            return true;
   44|      0|        }
   45|  5.12k|        else if (src < TARGET_MIN)
  ------------------
  |  Branch (45:18): [True: 0, False: 5.12k]
  ------------------
   46|      0|        {
   47|      0|            target = TARGET_MIN;
   48|      0|            return true;
   49|      0|        }
   50|  5.12k|        else
   51|  5.12k|        {
   52|  5.12k|            target = static_cast<Target>(src);
   53|  5.12k|            return false;
   54|  5.12k|        }
   55|  5.12k|    }
_ZN8opendnp312DownSamplingIdsE5ApplyEdRs:
   39|  1.64k|    {
   40|  1.64k|        if (src > TARGET_MAX)
  ------------------
  |  Branch (40:13): [True: 0, False: 1.64k]
  ------------------
   41|      0|        {
   42|      0|            target = TARGET_MAX;
   43|      0|            return true;
   44|      0|        }
   45|  1.64k|        else if (src < TARGET_MIN)
  ------------------
  |  Branch (45:18): [True: 0, False: 1.64k]
  ------------------
   46|      0|        {
   47|      0|            target = TARGET_MIN;
   48|      0|            return true;
   49|      0|        }
   50|  1.64k|        else
   51|  1.64k|        {
   52|  1.64k|            target = static_cast<Target>(src);
   53|  1.64k|            return false;
   54|  1.64k|        }
   55|  1.64k|    }
_ZN8opendnp312DownSamplingIdfE5ApplyEdRf:
   39|    986|    {
   40|    986|        if (src > TARGET_MAX)
  ------------------
  |  Branch (40:13): [True: 0, False: 986]
  ------------------
   41|      0|        {
   42|      0|            target = TARGET_MAX;
   43|      0|            return true;
   44|      0|        }
   45|    986|        else if (src < TARGET_MIN)
  ------------------
  |  Branch (45:18): [True: 0, False: 986]
  ------------------
   46|      0|        {
   47|      0|            target = TARGET_MIN;
   48|      0|            return true;
   49|      0|        }
   50|    986|        else
   51|    986|        {
   52|    986|            target = static_cast<Target>(src);
   53|    986|            return false;
   54|    986|        }
   55|    986|    }

_ZN8opendnp39Functions15IsNoAckFuncCodeENS_12FunctionCodeE:
   26|  8.86k|{
   27|  8.86k|    switch (code)
   28|  8.86k|    {
   29|    424|    case (FunctionCode::DIRECT_OPERATE_NR):
  ------------------
  |  Branch (29:5): [True: 424, False: 8.43k]
  ------------------
   30|    458|    case (FunctionCode::IMMED_FREEZE_NR):
  ------------------
  |  Branch (30:5): [True: 34, False: 8.82k]
  ------------------
   31|    459|    case (FunctionCode::FREEZE_AT_TIME_NR):
  ------------------
  |  Branch (31:5): [True: 1, False: 8.86k]
  ------------------
   32|    479|    case (FunctionCode::FREEZE_CLEAR_NR):
  ------------------
  |  Branch (32:5): [True: 20, False: 8.84k]
  ------------------
   33|    479|        return true;
   34|  8.38k|    default:
  ------------------
  |  Branch (34:5): [True: 8.38k, False: 479]
  ------------------
   35|  8.38k|        return false;
   36|  8.86k|    }
   37|  8.86k|}

_ZN8opendnp320GroupVariationRecordC2EhhNS_14GroupVariationENS_18GroupVariationTypeE:
   29|   274k|    : enumeration(enumeration_), type(type_), group(group_), variation(variation_)
   30|   274k|{
   31|   274k|}
_ZN8opendnp312HeaderRecordC2ERKNS_20GroupVariationRecordEhj:
   34|   273k|    : GroupVariationRecord(gv), qualifier(qualifier_), headerIndex(headerIndex_)
   35|   273k|{
   36|   273k|}
_ZNK8opendnp312HeaderRecord16GetQualifierCodeEv:
   39|   282k|{
   40|   282k|    return QualifierCodeSpec::from_type(qualifier);
   41|   282k|}
_ZN8opendnp320GroupVariationRecord9GetRecordEhh:
   44|   274k|{
   45|   274k|    auto pair = GetEnumAndType(group, variation);
   46|   274k|    return GroupVariationRecord(group, variation, pair.enumeration, pair.type);
   47|   274k|}
_ZN8opendnp320GroupVariationRecord11GetGroupVarEhh:
   50|   274k|{
   51|   274k|    return (group << 8) | variation;
   52|   274k|}
_ZN8opendnp320GroupVariationRecord14GetEnumAndTypeEhh:
   55|   274k|{
   56|   274k|    auto type = GetType(group, variation);
   57|   274k|    auto enumeration = GroupVariationSpec::from_type(GetGroupVar(group, variation));
   58|       |
   59|   274k|    if (enumeration == GroupVariation::UNKNOWN)
  ------------------
  |  Branch (59:9): [True: 4.80k, False: 269k]
  ------------------
   60|  4.80k|    {
   61|  4.80k|        switch (group)
   62|  4.80k|        {
   63|  3.09k|        case (110):
  ------------------
  |  Branch (63:9): [True: 3.09k, False: 1.71k]
  ------------------
   64|  3.09k|            enumeration = GroupVariation::Group110Var0;
   65|  3.09k|            break;
   66|    815|        case (111):
  ------------------
  |  Branch (66:9): [True: 815, False: 3.98k]
  ------------------
   67|    815|            enumeration = GroupVariation::Group111Var0;
   68|    815|            break;
   69|     46|        case (112):
  ------------------
  |  Branch (69:9): [True: 46, False: 4.75k]
  ------------------
   70|     46|            enumeration = GroupVariation::Group112Var0;
   71|     46|            break;
   72|    140|        case (113):
  ------------------
  |  Branch (72:9): [True: 140, False: 4.66k]
  ------------------
   73|    140|            enumeration = GroupVariation::Group113Var0;
   74|    140|            break;
   75|    709|        default:
  ------------------
  |  Branch (75:9): [True: 709, False: 4.09k]
  ------------------
   76|    709|            break;
   77|  4.80k|        }
   78|  4.80k|    }
   79|       |
   80|   274k|    return EnumAndType(enumeration, type);
   81|   274k|}
_ZN8opendnp320GroupVariationRecord7GetTypeEhh:
   84|   274k|{
   85|   274k|    switch (group)
   86|   274k|    {
   87|  17.2k|    case (1):
  ------------------
  |  Branch (87:5): [True: 17.2k, False: 256k]
  ------------------
   88|  17.2k|        return GroupVariationType::STATIC;
   89|       |
   90|  4.53k|    case (2):
  ------------------
  |  Branch (90:5): [True: 4.53k, False: 269k]
  ------------------
   91|  4.53k|        return GroupVariationType::EVENT;
   92|       |
   93|  10.7k|    case (3):
  ------------------
  |  Branch (93:5): [True: 10.7k, False: 263k]
  ------------------
   94|  10.7k|        return GroupVariationType::STATIC;
   95|       |
   96|  4.98k|    case (4):
  ------------------
  |  Branch (96:5): [True: 4.98k, False: 269k]
  ------------------
   97|  4.98k|        return GroupVariationType::EVENT;
   98|       |
   99|  12.3k|    case (10):
  ------------------
  |  Branch (99:5): [True: 12.3k, False: 261k]
  ------------------
  100|  12.3k|        return GroupVariationType::STATIC;
  101|       |
  102|  3.96k|    case (11):
  ------------------
  |  Branch (102:5): [True: 3.96k, False: 270k]
  ------------------
  103|  3.96k|        return GroupVariationType::EVENT;
  104|       |
  105|  1.59k|    case (13):
  ------------------
  |  Branch (105:5): [True: 1.59k, False: 272k]
  ------------------
  106|  1.59k|        return GroupVariationType::EVENT;
  107|       |
  108|  26.6k|    case (20):
  ------------------
  |  Branch (108:5): [True: 26.6k, False: 247k]
  ------------------
  109|  26.6k|        return GroupVariationType::STATIC;
  110|       |
  111|  34.6k|    case (21):
  ------------------
  |  Branch (111:5): [True: 34.6k, False: 239k]
  ------------------
  112|  34.6k|        return GroupVariationType::STATIC;
  113|       |
  114|  6.78k|    case (22):
  ------------------
  |  Branch (114:5): [True: 6.78k, False: 267k]
  ------------------
  115|  6.78k|        return GroupVariationType::EVENT;
  116|       |
  117|  9.30k|    case (23):
  ------------------
  |  Branch (117:5): [True: 9.30k, False: 264k]
  ------------------
  118|  9.30k|        return GroupVariationType::EVENT;
  119|       |
  120|  33.1k|    case (30):
  ------------------
  |  Branch (120:5): [True: 33.1k, False: 241k]
  ------------------
  121|  33.1k|        return GroupVariationType::STATIC;
  122|       |
  123|  9.23k|    case (32):
  ------------------
  |  Branch (123:5): [True: 9.23k, False: 264k]
  ------------------
  124|  9.23k|        return GroupVariationType::EVENT;
  125|       |
  126|  26.1k|    case (40):
  ------------------
  |  Branch (126:5): [True: 26.1k, False: 248k]
  ------------------
  127|  26.1k|        return GroupVariationType::STATIC;
  128|       |
  129|  18.7k|    case (41):
  ------------------
  |  Branch (129:5): [True: 18.7k, False: 255k]
  ------------------
  130|  18.7k|        return GroupVariationType::EVENT;
  131|       |
  132|  11.5k|    case (42):
  ------------------
  |  Branch (132:5): [True: 11.5k, False: 262k]
  ------------------
  133|  11.5k|        return GroupVariationType::EVENT;
  134|       |
  135|  6.43k|    case (43):
  ------------------
  |  Branch (135:5): [True: 6.43k, False: 267k]
  ------------------
  136|  6.43k|        return GroupVariationType::EVENT;
  137|       |
  138|  9.80k|    case (50):
  ------------------
  |  Branch (138:5): [True: 9.80k, False: 264k]
  ------------------
  139|  9.80k|        switch (variation)
  140|  9.80k|        {
  141|  5.36k|        case (4):
  ------------------
  |  Branch (141:9): [True: 5.36k, False: 4.44k]
  ------------------
  142|  5.36k|            return GroupVariationType::STATIC;
  143|  4.44k|        default:
  ------------------
  |  Branch (143:9): [True: 4.44k, False: 5.36k]
  ------------------
  144|  4.44k|            return GroupVariationType::OTHER;
  145|  9.80k|        }
  146|       |
  147|  6.22k|    case (60):
  ------------------
  |  Branch (147:5): [True: 6.22k, False: 268k]
  ------------------
  148|  6.22k|        switch (variation)
  149|  6.22k|        {
  150|  3.70k|        case (1):
  ------------------
  |  Branch (150:9): [True: 3.70k, False: 2.51k]
  ------------------
  151|  3.70k|            return GroupVariationType::STATIC;
  152|  2.51k|        default:
  ------------------
  |  Branch (152:9): [True: 2.51k, False: 3.70k]
  ------------------
  153|  2.51k|            return GroupVariationType::EVENT;
  154|  6.22k|        }
  155|       |
  156|  5.80k|    case (110):
  ------------------
  |  Branch (156:5): [True: 5.80k, False: 268k]
  ------------------
  157|  5.80k|        return GroupVariationType::STATIC;
  158|       |
  159|  1.36k|    case (111):
  ------------------
  |  Branch (159:5): [True: 1.36k, False: 272k]
  ------------------
  160|  1.36k|        return GroupVariationType::EVENT;
  161|       |
  162|      3|    case (121):
  ------------------
  |  Branch (162:5): [True: 3, False: 274k]
  ------------------
  163|      3|        return GroupVariationType::STATIC;
  164|      3|    case (122):
  ------------------
  |  Branch (164:5): [True: 3, False: 274k]
  ------------------
  165|      3|        return GroupVariationType::EVENT;
  166|       |
  167|  12.8k|    default:
  ------------------
  |  Branch (167:5): [True: 12.8k, False: 261k]
  ------------------
  168|  12.8k|        return GroupVariationType::OTHER;
  169|   274k|    }
  170|   274k|}

_ZN8opendnp311EnumAndTypeC2ENS_14GroupVariationENS_18GroupVariationTypeE:
   44|   274k|    EnumAndType(GroupVariation enumeration_, GroupVariationType type_) : enumeration(enumeration_), type(type_) {}
_ZN8opendnp316AllObjectsHeaderC2ERKNS_12HeaderRecordE:
   93|  58.2k|    explicit AllObjectsHeader(const HeaderRecord& record) : HeaderRecord(record) {}
_ZN8opendnp311CountHeaderC2ERKNS_12HeaderRecordEt:
   99|  4.23k|    CountHeader(const HeaderRecord& record, uint16_t count_) : HeaderRecord(record), count(count_) {}
_ZN8opendnp311RangeHeaderC2ERKNS_12HeaderRecordERKNS_5RangeE:
  115|  29.5k|    RangeHeader(const HeaderRecord& record, const Range& range_) : HeaderRecord(record), range(range_) {}
_ZN8opendnp312PrefixHeaderC2ERKNS_12HeaderRecordEt:
  123|  42.4k|    PrefixHeader(const HeaderRecord& record, uint16_t count_) : HeaderRecord(record), count(count_) {}

_ZN8opendnp312HeaderWriterC2EPN7ser4cpp4WSeqImEE:
   29|  8.37k|HeaderWriter::HeaderWriter(ser4cpp::wseq_t* position_) : position(position_) {}
_ZNK8opendnp312HeaderWriter9RemainingEv:
   32|  9.65k|{
   33|  9.65k|    return position->length();
   34|  9.65k|}
_ZN8opendnp312HeaderWriter11WriteHeaderENS_16GroupVariationIDENS_13QualifierCodeE:
   54|  11.9k|{
   55|  11.9k|    if (position->length() < 3)
  ------------------
  |  Branch (55:9): [True: 0, False: 11.9k]
  ------------------
   56|      0|    {
   57|      0|        return false;
   58|      0|    }
   59|       |
   60|  11.9k|    ser4cpp::UInt8::write_to(*position, id.group);
   61|  11.9k|    ser4cpp::UInt8::write_to(*position, id.variation);
   62|  11.9k|    ser4cpp::UInt8::write_to(*position, QualifierCodeSpec::to_type(qc));
   63|  11.9k|    return true;
   64|  11.9k|}
_ZN8opendnp312HeaderWriter22WriteHeaderWithReserveENS_16GroupVariationIDENS_13QualifierCodeEm:
   67|  11.9k|{
   68|  11.9k|    return (position->length() < (3 + reserve)) ? false : WriteHeader(id, qc);
  ------------------
  |  Branch (68:12): [True: 0, False: 11.9k]
  ------------------
   69|  11.9k|}

_ZN8opendnp312HeaderWriter16WriteSingleValueIN7ser4cpp5UInt8ENS_11Group52Var2EEEbNS_13QualifierCodeERKT0_:
  157|      1|{
  158|      1|    const auto reserve_size = CountType::size + WriteType::Size();
  159|      1|    if (this->WriteHeaderWithReserve(WriteType::ID(), qc, reserve_size))
  ------------------
  |  Branch (159:9): [True: 1, False: 0]
  ------------------
  160|      1|    {
  161|      1|        CountType::write_to(*position, 1); // write the count
  162|      1|        WriteType::Write(value, *position);
  163|      1|        return true;
  164|      1|    }
  165|      0|    else
  166|      0|    {
  167|      0|        return false;
  168|      0|    }
  169|      1|}
_ZN8opendnp312HeaderWriter26IterateOverCountWithPrefixIN7ser4cpp5Bit16ItLh0ELh1EEENS_23ControlRelayOutputBlockEEENS_21PrefixedWriteIteratorIT_T0_EENS_13QualifierCodeERKNS_14DNP3SerializerIS8_EE:
  233|    534|{
  234|    534|    const auto reserve_size
  235|    534|        = 2 * PrefixType::size + serializer.get_size(); // enough space for the count, 1 prefix + object
  236|    534|    if (this->WriteHeaderWithReserve(serializer.ID(), qc, reserve_size))
  ------------------
  |  Branch (236:9): [True: 534, False: 0]
  ------------------
  237|    534|    {
  238|    534|        return PrefixedWriteIterator<PrefixType, WriteType>(serializer, *position);
  239|    534|    }
  240|      0|    else
  241|      0|        return PrefixedWriteIterator<PrefixType, WriteType>::Null();
  242|    534|}
_ZN8opendnp312HeaderWriter26IterateOverCountWithPrefixIN7ser4cpp5Bit16ItLh0ELh1EEENS_17AnalogOutputInt16EEENS_21PrefixedWriteIteratorIT_T0_EENS_13QualifierCodeERKNS_14DNP3SerializerIS8_EE:
  233|    555|{
  234|    555|    const auto reserve_size
  235|    555|        = 2 * PrefixType::size + serializer.get_size(); // enough space for the count, 1 prefix + object
  236|    555|    if (this->WriteHeaderWithReserve(serializer.ID(), qc, reserve_size))
  ------------------
  |  Branch (236:9): [True: 555, False: 0]
  ------------------
  237|    555|    {
  238|    555|        return PrefixedWriteIterator<PrefixType, WriteType>(serializer, *position);
  239|    555|    }
  240|      0|    else
  241|      0|        return PrefixedWriteIterator<PrefixType, WriteType>::Null();
  242|    555|}
_ZN8opendnp312HeaderWriter26IterateOverCountWithPrefixIN7ser4cpp5Bit16ItLh0ELh1EEENS_17AnalogOutputInt32EEENS_21PrefixedWriteIteratorIT_T0_EENS_13QualifierCodeERKNS_14DNP3SerializerIS8_EE:
  233|    509|{
  234|    509|    const auto reserve_size
  235|    509|        = 2 * PrefixType::size + serializer.get_size(); // enough space for the count, 1 prefix + object
  236|    509|    if (this->WriteHeaderWithReserve(serializer.ID(), qc, reserve_size))
  ------------------
  |  Branch (236:9): [True: 509, False: 0]
  ------------------
  237|    509|    {
  238|    509|        return PrefixedWriteIterator<PrefixType, WriteType>(serializer, *position);
  239|    509|    }
  240|      0|    else
  241|      0|        return PrefixedWriteIterator<PrefixType, WriteType>::Null();
  242|    509|}
_ZN8opendnp312HeaderWriter26IterateOverCountWithPrefixIN7ser4cpp5Bit16ItLh0ELh1EEENS_19AnalogOutputFloat32EEENS_21PrefixedWriteIteratorIT_T0_EENS_13QualifierCodeERKNS_14DNP3SerializerIS8_EE:
  233|    490|{
  234|    490|    const auto reserve_size
  235|    490|        = 2 * PrefixType::size + serializer.get_size(); // enough space for the count, 1 prefix + object
  236|    490|    if (this->WriteHeaderWithReserve(serializer.ID(), qc, reserve_size))
  ------------------
  |  Branch (236:9): [True: 490, False: 0]
  ------------------
  237|    490|    {
  238|    490|        return PrefixedWriteIterator<PrefixType, WriteType>(serializer, *position);
  239|    490|    }
  240|      0|    else
  241|      0|        return PrefixedWriteIterator<PrefixType, WriteType>::Null();
  242|    490|}
_ZN8opendnp312HeaderWriter26IterateOverCountWithPrefixIN7ser4cpp5Bit16ItLh0ELh1EEENS_20AnalogOutputDouble64EEENS_21PrefixedWriteIteratorIT_T0_EENS_13QualifierCodeERKNS_14DNP3SerializerIS8_EE:
  233|    254|{
  234|    254|    const auto reserve_size
  235|    254|        = 2 * PrefixType::size + serializer.get_size(); // enough space for the count, 1 prefix + object
  236|    254|    if (this->WriteHeaderWithReserve(serializer.ID(), qc, reserve_size))
  ------------------
  |  Branch (236:9): [True: 254, False: 0]
  ------------------
  237|    254|    {
  238|    254|        return PrefixedWriteIterator<PrefixType, WriteType>(serializer, *position);
  239|    254|    }
  240|      0|    else
  241|      0|        return PrefixedWriteIterator<PrefixType, WriteType>::Null();
  242|    254|}
_ZN8opendnp312HeaderWriter26IterateOverCountWithPrefixIN7ser4cpp5UInt8ENS_23ControlRelayOutputBlockEEENS_21PrefixedWriteIteratorIT_T0_EENS_13QualifierCodeERKNS_14DNP3SerializerIS7_EE:
  233|    443|{
  234|    443|    const auto reserve_size
  235|    443|        = 2 * PrefixType::size + serializer.get_size(); // enough space for the count, 1 prefix + object
  236|    443|    if (this->WriteHeaderWithReserve(serializer.ID(), qc, reserve_size))
  ------------------
  |  Branch (236:9): [True: 443, False: 0]
  ------------------
  237|    443|    {
  238|    443|        return PrefixedWriteIterator<PrefixType, WriteType>(serializer, *position);
  239|    443|    }
  240|      0|    else
  241|      0|        return PrefixedWriteIterator<PrefixType, WriteType>::Null();
  242|    443|}
_ZN8opendnp312HeaderWriter26IterateOverCountWithPrefixIN7ser4cpp5UInt8ENS_17AnalogOutputInt16EEENS_21PrefixedWriteIteratorIT_T0_EENS_13QualifierCodeERKNS_14DNP3SerializerIS7_EE:
  233|  1.03k|{
  234|  1.03k|    const auto reserve_size
  235|  1.03k|        = 2 * PrefixType::size + serializer.get_size(); // enough space for the count, 1 prefix + object
  236|  1.03k|    if (this->WriteHeaderWithReserve(serializer.ID(), qc, reserve_size))
  ------------------
  |  Branch (236:9): [True: 1.03k, False: 0]
  ------------------
  237|  1.03k|    {
  238|  1.03k|        return PrefixedWriteIterator<PrefixType, WriteType>(serializer, *position);
  239|  1.03k|    }
  240|      0|    else
  241|      0|        return PrefixedWriteIterator<PrefixType, WriteType>::Null();
  242|  1.03k|}
_ZN8opendnp312HeaderWriter26IterateOverCountWithPrefixIN7ser4cpp5UInt8ENS_17AnalogOutputInt32EEENS_21PrefixedWriteIteratorIT_T0_EENS_13QualifierCodeERKNS_14DNP3SerializerIS7_EE:
  233|    488|{
  234|    488|    const auto reserve_size
  235|    488|        = 2 * PrefixType::size + serializer.get_size(); // enough space for the count, 1 prefix + object
  236|    488|    if (this->WriteHeaderWithReserve(serializer.ID(), qc, reserve_size))
  ------------------
  |  Branch (236:9): [True: 488, False: 0]
  ------------------
  237|    488|    {
  238|    488|        return PrefixedWriteIterator<PrefixType, WriteType>(serializer, *position);
  239|    488|    }
  240|      0|    else
  241|      0|        return PrefixedWriteIterator<PrefixType, WriteType>::Null();
  242|    488|}
_ZN8opendnp312HeaderWriter26IterateOverCountWithPrefixIN7ser4cpp5UInt8ENS_19AnalogOutputFloat32EEENS_21PrefixedWriteIteratorIT_T0_EENS_13QualifierCodeERKNS_14DNP3SerializerIS7_EE:
  233|    863|{
  234|    863|    const auto reserve_size
  235|    863|        = 2 * PrefixType::size + serializer.get_size(); // enough space for the count, 1 prefix + object
  236|    863|    if (this->WriteHeaderWithReserve(serializer.ID(), qc, reserve_size))
  ------------------
  |  Branch (236:9): [True: 863, False: 0]
  ------------------
  237|    863|    {
  238|    863|        return PrefixedWriteIterator<PrefixType, WriteType>(serializer, *position);
  239|    863|    }
  240|      0|    else
  241|      0|        return PrefixedWriteIterator<PrefixType, WriteType>::Null();
  242|    863|}
_ZN8opendnp312HeaderWriter26IterateOverCountWithPrefixIN7ser4cpp5UInt8ENS_20AnalogOutputDouble64EEENS_21PrefixedWriteIteratorIT_T0_EENS_13QualifierCodeERKNS_14DNP3SerializerIS7_EE:
  233|    881|{
  234|    881|    const auto reserve_size
  235|    881|        = 2 * PrefixType::size + serializer.get_size(); // enough space for the count, 1 prefix + object
  236|    881|    if (this->WriteHeaderWithReserve(serializer.ID(), qc, reserve_size))
  ------------------
  |  Branch (236:9): [True: 881, False: 0]
  ------------------
  237|    881|    {
  238|    881|        return PrefixedWriteIterator<PrefixType, WriteType>(serializer, *position);
  239|    881|    }
  240|      0|    else
  241|      0|        return PrefixedWriteIterator<PrefixType, WriteType>::Null();
  242|    881|}
_ZN8opendnp312HeaderWriter16IterateOverRangeIN7ser4cpp5UInt8ENS_6BinaryEEENS_18RangeWriteIteratorIT_T0_EENS_13QualifierCodeERKNS_14DNP3SerializerIS7_EENS6_6type_tE:
  193|    638|{
  194|    638|    const auto reserve_size = 2 * IndexType::size + serializer.get_size();
  195|    638|    if (this->WriteHeaderWithReserve(serializer.ID(), qc, reserve_size))
  ------------------
  |  Branch (195:9): [True: 638, False: 0]
  ------------------
  196|    638|    {
  197|    638|        return RangeWriteIterator<IndexType, WriteType>(start, serializer, *position);
  198|    638|    }
  199|      0|    else
  200|      0|        return RangeWriteIterator<IndexType, WriteType>::Null();
  201|    638|}
_ZN8opendnp312HeaderWriter16IterateOverRangeIN7ser4cpp5UInt8ENS_15DoubleBitBinaryEEENS_18RangeWriteIteratorIT_T0_EENS_13QualifierCodeERKNS_14DNP3SerializerIS7_EENS6_6type_tE:
  193|    497|{
  194|    497|    const auto reserve_size = 2 * IndexType::size + serializer.get_size();
  195|    497|    if (this->WriteHeaderWithReserve(serializer.ID(), qc, reserve_size))
  ------------------
  |  Branch (195:9): [True: 497, False: 0]
  ------------------
  196|    497|    {
  197|    497|        return RangeWriteIterator<IndexType, WriteType>(start, serializer, *position);
  198|    497|    }
  199|      0|    else
  200|      0|        return RangeWriteIterator<IndexType, WriteType>::Null();
  201|    497|}
_ZN8opendnp312HeaderWriter16IterateOverRangeIN7ser4cpp5UInt8ENS_6AnalogEEENS_18RangeWriteIteratorIT_T0_EENS_13QualifierCodeERKNS_14DNP3SerializerIS7_EENS6_6type_tE:
  193|  1.05k|{
  194|  1.05k|    const auto reserve_size = 2 * IndexType::size + serializer.get_size();
  195|  1.05k|    if (this->WriteHeaderWithReserve(serializer.ID(), qc, reserve_size))
  ------------------
  |  Branch (195:9): [True: 1.05k, False: 0]
  ------------------
  196|  1.05k|    {
  197|  1.05k|        return RangeWriteIterator<IndexType, WriteType>(start, serializer, *position);
  198|  1.05k|    }
  199|      0|    else
  200|      0|        return RangeWriteIterator<IndexType, WriteType>::Null();
  201|  1.05k|}
_ZN8opendnp312HeaderWriter16IterateOverRangeIN7ser4cpp5UInt8ENS_7CounterEEENS_18RangeWriteIteratorIT_T0_EENS_13QualifierCodeERKNS_14DNP3SerializerIS7_EENS6_6type_tE:
  193|    731|{
  194|    731|    const auto reserve_size = 2 * IndexType::size + serializer.get_size();
  195|    731|    if (this->WriteHeaderWithReserve(serializer.ID(), qc, reserve_size))
  ------------------
  |  Branch (195:9): [True: 731, False: 0]
  ------------------
  196|    731|    {
  197|    731|        return RangeWriteIterator<IndexType, WriteType>(start, serializer, *position);
  198|    731|    }
  199|      0|    else
  200|      0|        return RangeWriteIterator<IndexType, WriteType>::Null();
  201|    731|}
_ZN8opendnp312HeaderWriter16IterateOverRangeIN7ser4cpp5UInt8ENS_13FrozenCounterEEENS_18RangeWriteIteratorIT_T0_EENS_13QualifierCodeERKNS_14DNP3SerializerIS7_EENS6_6type_tE:
  193|  1.01k|{
  194|  1.01k|    const auto reserve_size = 2 * IndexType::size + serializer.get_size();
  195|  1.01k|    if (this->WriteHeaderWithReserve(serializer.ID(), qc, reserve_size))
  ------------------
  |  Branch (195:9): [True: 1.01k, False: 0]
  ------------------
  196|  1.01k|    {
  197|  1.01k|        return RangeWriteIterator<IndexType, WriteType>(start, serializer, *position);
  198|  1.01k|    }
  199|      0|    else
  200|      0|        return RangeWriteIterator<IndexType, WriteType>::Null();
  201|  1.01k|}
_ZN8opendnp312HeaderWriter16IterateOverRangeIN7ser4cpp5UInt8ENS_18BinaryOutputStatusEEENS_18RangeWriteIteratorIT_T0_EENS_13QualifierCodeERKNS_14DNP3SerializerIS7_EENS6_6type_tE:
  193|    495|{
  194|    495|    const auto reserve_size = 2 * IndexType::size + serializer.get_size();
  195|    495|    if (this->WriteHeaderWithReserve(serializer.ID(), qc, reserve_size))
  ------------------
  |  Branch (195:9): [True: 495, False: 0]
  ------------------
  196|    495|    {
  197|    495|        return RangeWriteIterator<IndexType, WriteType>(start, serializer, *position);
  198|    495|    }
  199|      0|    else
  200|      0|        return RangeWriteIterator<IndexType, WriteType>::Null();
  201|    495|}
_ZN8opendnp312HeaderWriter16IterateOverRangeIN7ser4cpp5UInt8ENS_18AnalogOutputStatusEEENS_18RangeWriteIteratorIT_T0_EENS_13QualifierCodeERKNS_14DNP3SerializerIS7_EENS6_6type_tE:
  193|    795|{
  194|    795|    const auto reserve_size = 2 * IndexType::size + serializer.get_size();
  195|    795|    if (this->WriteHeaderWithReserve(serializer.ID(), qc, reserve_size))
  ------------------
  |  Branch (195:9): [True: 795, False: 0]
  ------------------
  196|    795|    {
  197|    795|        return RangeWriteIterator<IndexType, WriteType>(start, serializer, *position);
  198|    795|    }
  199|      0|    else
  200|      0|        return RangeWriteIterator<IndexType, WriteType>::Null();
  201|    795|}
_ZN8opendnp312HeaderWriter16IterateOverRangeIN7ser4cpp5UInt8ENS_15TimeAndIntervalEEENS_18RangeWriteIteratorIT_T0_EENS_13QualifierCodeERKNS_14DNP3SerializerIS7_EENS6_6type_tE:
  193|    329|{
  194|    329|    const auto reserve_size = 2 * IndexType::size + serializer.get_size();
  195|    329|    if (this->WriteHeaderWithReserve(serializer.ID(), qc, reserve_size))
  ------------------
  |  Branch (195:9): [True: 329, False: 0]
  ------------------
  196|    329|    {
  197|    329|        return RangeWriteIterator<IndexType, WriteType>(start, serializer, *position);
  198|    329|    }
  199|      0|    else
  200|      0|        return RangeWriteIterator<IndexType, WriteType>::Null();
  201|    329|}
_ZN8opendnp312HeaderWriter16IterateOverRangeIN7ser4cpp5UInt8ENS_11OctetStringEEENS_18RangeWriteIteratorIT_T0_EENS_13QualifierCodeERKNS_14DNP3SerializerIS7_EENS6_6type_tE:
  193|    359|{
  194|    359|    const auto reserve_size = 2 * IndexType::size + serializer.get_size();
  195|    359|    if (this->WriteHeaderWithReserve(serializer.ID(), qc, reserve_size))
  ------------------
  |  Branch (195:9): [True: 359, False: 0]
  ------------------
  196|    359|    {
  197|    359|        return RangeWriteIterator<IndexType, WriteType>(start, serializer, *position);
  198|    359|    }
  199|      0|    else
  200|      0|        return RangeWriteIterator<IndexType, WriteType>::Null();
  201|    359|}

_ZN8opendnp38IINField13SetBitToValueENS_6IINBitEb:
   67|  75.4k|{
   68|  75.4k|    if (value)
  ------------------
  |  Branch (68:9): [True: 0, False: 75.4k]
  ------------------
   69|      0|    {
   70|      0|        SetBit(bit);
   71|      0|    }
   72|  75.4k|    else
   73|  75.4k|    {
   74|  75.4k|        ClearBit(bit);
   75|  75.4k|    }
   76|  75.4k|}
_ZN8opendnp38IINField6SetBitENS_6IINBitE:
   79|  64.5k|{
   80|  64.5k|    switch (bit)
   81|  64.5k|    {
   82|      0|    case (IINBit::BROADCAST):
  ------------------
  |  Branch (82:5): [True: 0, False: 64.5k]
  ------------------
   83|      0|        Set(LSBMask::BROADCAST);
   84|      0|        break;
   85|      0|    case (IINBit::CLASS1_EVENTS):
  ------------------
  |  Branch (85:5): [True: 0, False: 64.5k]
  ------------------
   86|      0|        Set(LSBMask::CLASS1_EVENTS);
   87|      0|        break;
   88|      0|    case (IINBit::CLASS2_EVENTS):
  ------------------
  |  Branch (88:5): [True: 0, False: 64.5k]
  ------------------
   89|      0|        Set(LSBMask::CLASS2_EVENTS);
   90|      0|        break;
   91|      0|    case (IINBit::CLASS3_EVENTS):
  ------------------
  |  Branch (91:5): [True: 0, False: 64.5k]
  ------------------
   92|      0|        Set(LSBMask::CLASS3_EVENTS);
   93|      0|        break;
   94|      0|    case (IINBit::NEED_TIME):
  ------------------
  |  Branch (94:5): [True: 0, False: 64.5k]
  ------------------
   95|      0|        Set(LSBMask::NEED_TIME);
   96|      0|        break;
   97|      0|    case (IINBit::LOCAL_CONTROL):
  ------------------
  |  Branch (97:5): [True: 0, False: 64.5k]
  ------------------
   98|      0|        Set(LSBMask::LOCAL_CONTROL);
   99|      0|        break;
  100|      0|    case (IINBit::DEVICE_TROUBLE):
  ------------------
  |  Branch (100:5): [True: 0, False: 64.5k]
  ------------------
  101|      0|        Set(LSBMask::DEVICE_TROUBLE);
  102|      0|        break;
  103|  8.87k|    case (IINBit::DEVICE_RESTART):
  ------------------
  |  Branch (103:5): [True: 8.87k, False: 55.6k]
  ------------------
  104|  8.87k|        Set(LSBMask::DEVICE_RESTART);
  105|  8.87k|        break;
  106|  28.7k|    case (IINBit::FUNC_NOT_SUPPORTED):
  ------------------
  |  Branch (106:5): [True: 28.7k, False: 35.7k]
  ------------------
  107|  28.7k|        Set(MSBMask::FUNC_NOT_SUPPORTED);
  108|  28.7k|        break;
  109|    709|    case (IINBit::OBJECT_UNKNOWN):
  ------------------
  |  Branch (109:5): [True: 709, False: 63.7k]
  ------------------
  110|    709|        Set(MSBMask::OBJECT_UNKNOWN);
  111|    709|        break;
  112|  26.1k|    case (IINBit::PARAM_ERROR):
  ------------------
  |  Branch (112:5): [True: 26.1k, False: 38.3k]
  ------------------
  113|  26.1k|        Set(MSBMask::PARAM_ERROR);
  114|  26.1k|        break;
  115|      0|    case (IINBit::EVENT_BUFFER_OVERFLOW):
  ------------------
  |  Branch (115:5): [True: 0, False: 64.5k]
  ------------------
  116|      0|        Set(MSBMask::EVENT_BUFFER_OVERFLOW);
  117|      0|        break;
  118|      0|    case (IINBit::ALREADY_EXECUTING):
  ------------------
  |  Branch (118:5): [True: 0, False: 64.5k]
  ------------------
  119|      0|        Set(MSBMask::ALREADY_EXECUTING);
  120|      0|        break;
  121|      0|    case (IINBit::CONFIG_CORRUPT):
  ------------------
  |  Branch (121:5): [True: 0, False: 64.5k]
  ------------------
  122|      0|        Set(MSBMask::CONFIG_CORRUPT);
  123|      0|        break;
  124|      0|    case (IINBit::RESERVED1):
  ------------------
  |  Branch (124:5): [True: 0, False: 64.5k]
  ------------------
  125|      0|        Set(MSBMask::RESERVED1);
  126|      0|        break;
  127|      0|    case (IINBit::RESERVED2):
  ------------------
  |  Branch (127:5): [True: 0, False: 64.5k]
  ------------------
  128|      0|        Set(MSBMask::RESERVED2);
  129|      0|        break;
  130|      0|    default:
  ------------------
  |  Branch (130:5): [True: 0, False: 64.5k]
  ------------------
  131|      0|        break;
  132|  64.5k|    };
  133|  64.5k|}
_ZN8opendnp38IINField8ClearBitENS_6IINBitE:
  136|  75.4k|{
  137|  75.4k|    switch (bit)
  138|  75.4k|    {
  139|      0|    case (IINBit::BROADCAST):
  ------------------
  |  Branch (139:5): [True: 0, False: 75.4k]
  ------------------
  140|      0|        Clear(LSBMask::BROADCAST);
  141|      0|        break;
  142|  8.37k|    case (IINBit::CLASS1_EVENTS):
  ------------------
  |  Branch (142:5): [True: 8.37k, False: 67.0k]
  ------------------
  143|  8.37k|        Clear(LSBMask::CLASS1_EVENTS);
  144|  8.37k|        break;
  145|  8.37k|    case (IINBit::CLASS2_EVENTS):
  ------------------
  |  Branch (145:5): [True: 8.37k, False: 67.0k]
  ------------------
  146|  8.37k|        Clear(LSBMask::CLASS2_EVENTS);
  147|  8.37k|        break;
  148|  8.37k|    case (IINBit::CLASS3_EVENTS):
  ------------------
  |  Branch (148:5): [True: 8.37k, False: 67.0k]
  ------------------
  149|  8.37k|        Clear(LSBMask::CLASS3_EVENTS);
  150|  8.37k|        break;
  151|  8.37k|    case (IINBit::NEED_TIME):
  ------------------
  |  Branch (151:5): [True: 8.37k, False: 67.0k]
  ------------------
  152|  8.37k|        Clear(LSBMask::NEED_TIME);
  153|  8.37k|        break;
  154|  8.37k|    case (IINBit::LOCAL_CONTROL):
  ------------------
  |  Branch (154:5): [True: 8.37k, False: 67.0k]
  ------------------
  155|  8.37k|        Clear(LSBMask::LOCAL_CONTROL);
  156|  8.37k|        break;
  157|  8.37k|    case (IINBit::DEVICE_TROUBLE):
  ------------------
  |  Branch (157:5): [True: 8.37k, False: 67.0k]
  ------------------
  158|  8.37k|        Clear(LSBMask::DEVICE_TROUBLE);
  159|  8.37k|        break;
  160|      9|    case (IINBit::DEVICE_RESTART):
  ------------------
  |  Branch (160:5): [True: 9, False: 75.4k]
  ------------------
  161|      9|        Clear(LSBMask::DEVICE_RESTART);
  162|      9|        break;
  163|      0|    case (IINBit::FUNC_NOT_SUPPORTED):
  ------------------
  |  Branch (163:5): [True: 0, False: 75.4k]
  ------------------
  164|      0|        Clear(MSBMask::FUNC_NOT_SUPPORTED);
  165|      0|        break;
  166|      0|    case (IINBit::OBJECT_UNKNOWN):
  ------------------
  |  Branch (166:5): [True: 0, False: 75.4k]
  ------------------
  167|      0|        Clear(MSBMask::OBJECT_UNKNOWN);
  168|      0|        break;
  169|      0|    case (IINBit::PARAM_ERROR):
  ------------------
  |  Branch (169:5): [True: 0, False: 75.4k]
  ------------------
  170|      0|        Clear(MSBMask::PARAM_ERROR);
  171|      0|        break;
  172|  16.7k|    case (IINBit::EVENT_BUFFER_OVERFLOW):
  ------------------
  |  Branch (172:5): [True: 16.7k, False: 58.6k]
  ------------------
  173|  16.7k|        Clear(MSBMask::EVENT_BUFFER_OVERFLOW);
  174|  16.7k|        break;
  175|      0|    case (IINBit::ALREADY_EXECUTING):
  ------------------
  |  Branch (175:5): [True: 0, False: 75.4k]
  ------------------
  176|      0|        Clear(MSBMask::ALREADY_EXECUTING);
  177|      0|        break;
  178|  8.37k|    case (IINBit::CONFIG_CORRUPT):
  ------------------
  |  Branch (178:5): [True: 8.37k, False: 67.0k]
  ------------------
  179|  8.37k|        Clear(MSBMask::CONFIG_CORRUPT);
  180|  8.37k|        break;
  181|      0|    case (IINBit::RESERVED1):
  ------------------
  |  Branch (181:5): [True: 0, False: 75.4k]
  ------------------
  182|      0|        Clear(MSBMask::RESERVED1);
  183|      0|        break;
  184|      0|    case (IINBit::RESERVED2):
  ------------------
  |  Branch (184:5): [True: 0, False: 75.4k]
  ------------------
  185|      0|        Clear(MSBMask::RESERVED2);
  186|      0|        break;
  187|      0|    default:
  ------------------
  |  Branch (187:5): [True: 0, False: 75.4k]
  ------------------
  188|      0|        break;
  189|  75.4k|    };
  190|  75.4k|}

_ZN8opendnp38IINValueC2Ev:
   29|  1.08k|    IINValue() : value(false) {}
_ZN8opendnp38IINValueC2Eb:
   31|    733|    IINValue(bool value_) : value(value_) {}

_ZN8opendnp330ControlRelayOutputBlockFactory4FromEhhjjh:
  129|  5.32k|    {
  130|  5.32k|        return ControlRelayOutputBlock(code, count, onTime, offTime, CommandStatusSpec::from_type(status));
  131|  5.32k|    }
_ZN8opendnp319AnalogOutputFactoryINS_17AnalogOutputInt32EiE4FromEih:
  189|  5.59k|    {
  190|  5.59k|        return Target(value, CommandStatusSpec::from_type(status));
  191|  5.59k|    }
_ZN8opendnp319AnalogOutputFactoryINS_17AnalogOutputInt16EsE4FromEsh:
  189|  22.3k|    {
  190|  22.3k|        return Target(value, CommandStatusSpec::from_type(status));
  191|  22.3k|    }
_ZN8opendnp319AnalogOutputFactoryINS_19AnalogOutputFloat32EfE4FromEfh:
  189|  8.19k|    {
  190|  8.19k|        return Target(value, CommandStatusSpec::from_type(status));
  191|  8.19k|    }
_ZN8opendnp319AnalogOutputFactoryINS_20AnalogOutputDouble64EdE4FromEdh:
  189|  8.75k|    {
  190|  8.75k|        return Target(value, CommandStatusSpec::from_type(status));
  191|  8.75k|    }

_ZN8opendnp310BinarySpec19IsQualityOnlineOnlyERKNS_6BinaryE:
   39|  16.3k|    {
   40|  16.3k|        return (binary.flags.value & 0b01111111) == static_cast<uint8_t>(BinaryQuality::ONLINE);
   41|  16.3k|    }
_ZN8opendnp311CounterSpec7IsEventERKNS_7CounterES3_RKNS_13CounterConfigE:
   92|  8.42k|    {
   93|  8.42k|        if (old_value.flags.value != new_value.flags.value)
  ------------------
  |  Branch (93:13): [True: 0, False: 8.42k]
  ------------------
   94|      0|        {
   95|      0|            return true;
   96|      0|        }
   97|  8.42k|        else
   98|  8.42k|        {
   99|  8.42k|            return measurements::IsEvent<uint32_t, uint64_t>(old_value.value, new_value.value, config.deadband);
  100|  8.42k|        }
  101|  8.42k|    }
_ZN8opendnp317FrozenCounterSpec7IsEventERKNS_13FrozenCounterES3_RKNS_19FrozenCounterConfigE:
  110|  15.7k|    {
  111|  15.7k|        if (old_value.flags.value != new_value.flags.value)
  ------------------
  |  Branch (111:13): [True: 0, False: 15.7k]
  ------------------
  112|      0|        {
  113|      0|            return true;
  114|      0|        }
  115|  15.7k|        else
  116|  15.7k|        {
  117|  15.7k|            return measurements::IsEvent<uint32_t, uint64_t>(old_value.value, new_value.value, config.deadband);
  118|  15.7k|        }
  119|  15.7k|    }

_ZN8opendnp36BinaryC2Ev:
   31|   532k|Binary::Binary() : TypedMeasurement(false, flags::RESTART) {}
_ZN8opendnp315DoubleBitBinaryC2Ev:
   48|   532k|DoubleBitBinary::DoubleBitBinary() : TypedMeasurement(DoubleBit::INDETERMINATE, flags::RESTART) {}
_ZN8opendnp318BinaryOutputStatusC2Ev:
   78|   532k|BinaryOutputStatus::BinaryOutputStatus() : TypedMeasurement(false, flags::RESTART) {}
_ZN8opendnp36AnalogC2Ev:
  104|   532k|Analog::Analog() : TypedMeasurement(flags::RESTART) {}
_ZN8opendnp37CounterC2Ev:
  114|   532k|Counter::Counter() : TypedMeasurement(0, flags::RESTART) {}
_ZN8opendnp313FrozenCounterC2Ev:
  124|   532k|FrozenCounter::FrozenCounter() : TypedMeasurement(0, flags::RESTART) {}
_ZN8opendnp313FrozenCounterC2EjNS_5FlagsENS_7DNPTimeE:
  130|  15.7k|FrozenCounter::FrozenCounter(uint32_t value, Flags flags, DNPTime time) : TypedMeasurement<uint32_t>(value, flags, time)
  131|  15.7k|{
  132|  15.7k|}
_ZN8opendnp318AnalogOutputStatusC2Ev:
  136|   532k|AnalogOutputStatus::AnalogOutputStatus() : TypedMeasurement<double>(flags::RESTART) {}
_ZN8opendnp315TimeAndIntervalC2Ev:
  149|   355k|TimeAndInterval::TimeAndInterval() : time(0), interval(0), units(0) {}

_ZN8opendnp37MessageC2ERKNS_9AddressesERKN7ser4cpp4RSeqImEE:
   34|  17.2k|    Message(const Addresses& addresses, const ser4cpp::rseq_t& payload) : addresses(addresses), payload(payload) {}

_ZN8opendnp39OctetDataC2Ev:
   30|   532k|OctetData::OctetData() : size(1) {}
_ZNK8opendnp39OctetData8ToBufferEv:
   71|  2.26k|{
   72|  2.26k|    return Buffer(buffer.data(), size);
   73|  2.26k|}

_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5Bit16ItLh0ELh1EEENS_23ControlRelayOutputBlockEEC2ERKNS_10SerializerIS4_EERNS1_4WSeqImEE:
   40|    534|        : serializer(serializer),
   41|    534|          sizeOfTypePlusIndex(serializer.get_size() + PrefixType::size),
   42|    534|          count(0),
   43|    534|          isValid(position.length() >= PrefixType::size),
   44|    534|          countPosition(position),
   45|    534|          pPosition(&position)
   46|    534|    {
   47|    534|        if (isValid)
  ------------------
  |  Branch (47:13): [True: 534, False: 0]
  ------------------
   48|    534|        {
   49|    534|            pPosition->advance(PrefixType::size);
   50|    534|        }
   51|    534|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5Bit16ItLh0ELh1EEENS_23ControlRelayOutputBlockEE5WriteERKS4_t:
   62|  1.43k|    {
   63|  1.43k|        if (isValid && (pPosition->length() >= sizeOfTypePlusIndex))
  ------------------
  |  Branch (63:13): [True: 1.43k, False: 0]
  |  Branch (63:24): [True: 1.43k, False: 0]
  ------------------
   64|  1.43k|        {
   65|  1.43k|            PrefixType::write_to(*pPosition, index);
   66|  1.43k|            serializer.write(value, *pPosition);
   67|  1.43k|            ++count;
   68|  1.43k|            return true;
   69|  1.43k|        }
   70|      0|        else
   71|      0|        {
   72|      0|            return false;
   73|      0|        }
   74|  1.43k|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5Bit16ItLh0ELh1EEENS_23ControlRelayOutputBlockEED2Ev:
   54|    534|    {
   55|    534|        if (isValid)
  ------------------
  |  Branch (55:13): [True: 534, False: 0]
  ------------------
   56|    534|        {
   57|    534|            PrefixType::write_to(countPosition, count);
   58|    534|        }
   59|    534|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5Bit16ItLh0ELh1EEENS_17AnalogOutputInt16EEC2ERKNS_10SerializerIS4_EERNS1_4WSeqImEE:
   40|    555|        : serializer(serializer),
   41|    555|          sizeOfTypePlusIndex(serializer.get_size() + PrefixType::size),
   42|    555|          count(0),
   43|    555|          isValid(position.length() >= PrefixType::size),
   44|    555|          countPosition(position),
   45|    555|          pPosition(&position)
   46|    555|    {
   47|    555|        if (isValid)
  ------------------
  |  Branch (47:13): [True: 555, False: 0]
  ------------------
   48|    555|        {
   49|    555|            pPosition->advance(PrefixType::size);
   50|    555|        }
   51|    555|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5Bit16ItLh0ELh1EEENS_17AnalogOutputInt16EE5WriteERKS4_t:
   62|  2.93k|    {
   63|  2.93k|        if (isValid && (pPosition->length() >= sizeOfTypePlusIndex))
  ------------------
  |  Branch (63:13): [True: 2.93k, False: 0]
  |  Branch (63:24): [True: 2.93k, False: 0]
  ------------------
   64|  2.93k|        {
   65|  2.93k|            PrefixType::write_to(*pPosition, index);
   66|  2.93k|            serializer.write(value, *pPosition);
   67|  2.93k|            ++count;
   68|  2.93k|            return true;
   69|  2.93k|        }
   70|      0|        else
   71|      0|        {
   72|      0|            return false;
   73|      0|        }
   74|  2.93k|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5Bit16ItLh0ELh1EEENS_17AnalogOutputInt16EED2Ev:
   54|    555|    {
   55|    555|        if (isValid)
  ------------------
  |  Branch (55:13): [True: 555, False: 0]
  ------------------
   56|    555|        {
   57|    555|            PrefixType::write_to(countPosition, count);
   58|    555|        }
   59|    555|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5Bit16ItLh0ELh1EEENS_17AnalogOutputInt32EEC2ERKNS_10SerializerIS4_EERNS1_4WSeqImEE:
   40|    509|        : serializer(serializer),
   41|    509|          sizeOfTypePlusIndex(serializer.get_size() + PrefixType::size),
   42|    509|          count(0),
   43|    509|          isValid(position.length() >= PrefixType::size),
   44|    509|          countPosition(position),
   45|    509|          pPosition(&position)
   46|    509|    {
   47|    509|        if (isValid)
  ------------------
  |  Branch (47:13): [True: 509, False: 0]
  ------------------
   48|    509|        {
   49|    509|            pPosition->advance(PrefixType::size);
   50|    509|        }
   51|    509|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5Bit16ItLh0ELh1EEENS_17AnalogOutputInt32EE5WriteERKS4_t:
   62|  2.08k|    {
   63|  2.08k|        if (isValid && (pPosition->length() >= sizeOfTypePlusIndex))
  ------------------
  |  Branch (63:13): [True: 2.08k, False: 0]
  |  Branch (63:24): [True: 2.08k, False: 0]
  ------------------
   64|  2.08k|        {
   65|  2.08k|            PrefixType::write_to(*pPosition, index);
   66|  2.08k|            serializer.write(value, *pPosition);
   67|  2.08k|            ++count;
   68|  2.08k|            return true;
   69|  2.08k|        }
   70|      0|        else
   71|      0|        {
   72|      0|            return false;
   73|      0|        }
   74|  2.08k|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5Bit16ItLh0ELh1EEENS_17AnalogOutputInt32EED2Ev:
   54|    509|    {
   55|    509|        if (isValid)
  ------------------
  |  Branch (55:13): [True: 509, False: 0]
  ------------------
   56|    509|        {
   57|    509|            PrefixType::write_to(countPosition, count);
   58|    509|        }
   59|    509|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5Bit16ItLh0ELh1EEENS_19AnalogOutputFloat32EEC2ERKNS_10SerializerIS4_EERNS1_4WSeqImEE:
   40|    490|        : serializer(serializer),
   41|    490|          sizeOfTypePlusIndex(serializer.get_size() + PrefixType::size),
   42|    490|          count(0),
   43|    490|          isValid(position.length() >= PrefixType::size),
   44|    490|          countPosition(position),
   45|    490|          pPosition(&position)
   46|    490|    {
   47|    490|        if (isValid)
  ------------------
  |  Branch (47:13): [True: 490, False: 0]
  ------------------
   48|    490|        {
   49|    490|            pPosition->advance(PrefixType::size);
   50|    490|        }
   51|    490|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5Bit16ItLh0ELh1EEENS_19AnalogOutputFloat32EE5WriteERKS4_t:
   62|  1.64k|    {
   63|  1.64k|        if (isValid && (pPosition->length() >= sizeOfTypePlusIndex))
  ------------------
  |  Branch (63:13): [True: 1.64k, False: 0]
  |  Branch (63:24): [True: 1.64k, False: 0]
  ------------------
   64|  1.64k|        {
   65|  1.64k|            PrefixType::write_to(*pPosition, index);
   66|  1.64k|            serializer.write(value, *pPosition);
   67|  1.64k|            ++count;
   68|  1.64k|            return true;
   69|  1.64k|        }
   70|      0|        else
   71|      0|        {
   72|      0|            return false;
   73|      0|        }
   74|  1.64k|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5Bit16ItLh0ELh1EEENS_19AnalogOutputFloat32EED2Ev:
   54|    490|    {
   55|    490|        if (isValid)
  ------------------
  |  Branch (55:13): [True: 490, False: 0]
  ------------------
   56|    490|        {
   57|    490|            PrefixType::write_to(countPosition, count);
   58|    490|        }
   59|    490|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5Bit16ItLh0ELh1EEENS_20AnalogOutputDouble64EEC2ERKNS_10SerializerIS4_EERNS1_4WSeqImEE:
   40|    254|        : serializer(serializer),
   41|    254|          sizeOfTypePlusIndex(serializer.get_size() + PrefixType::size),
   42|    254|          count(0),
   43|    254|          isValid(position.length() >= PrefixType::size),
   44|    254|          countPosition(position),
   45|    254|          pPosition(&position)
   46|    254|    {
   47|    254|        if (isValid)
  ------------------
  |  Branch (47:13): [True: 254, False: 0]
  ------------------
   48|    254|        {
   49|    254|            pPosition->advance(PrefixType::size);
   50|    254|        }
   51|    254|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5Bit16ItLh0ELh1EEENS_20AnalogOutputDouble64EE5WriteERKS4_t:
   62|  1.30k|    {
   63|  1.30k|        if (isValid && (pPosition->length() >= sizeOfTypePlusIndex))
  ------------------
  |  Branch (63:13): [True: 1.30k, False: 0]
  |  Branch (63:24): [True: 1.30k, False: 0]
  ------------------
   64|  1.30k|        {
   65|  1.30k|            PrefixType::write_to(*pPosition, index);
   66|  1.30k|            serializer.write(value, *pPosition);
   67|  1.30k|            ++count;
   68|  1.30k|            return true;
   69|  1.30k|        }
   70|      0|        else
   71|      0|        {
   72|      0|            return false;
   73|      0|        }
   74|  1.30k|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5Bit16ItLh0ELh1EEENS_20AnalogOutputDouble64EED2Ev:
   54|    254|    {
   55|    254|        if (isValid)
  ------------------
  |  Branch (55:13): [True: 254, False: 0]
  ------------------
   56|    254|        {
   57|    254|            PrefixType::write_to(countPosition, count);
   58|    254|        }
   59|    254|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5UInt8ENS_23ControlRelayOutputBlockEEC2ERKNS_10SerializerIS3_EERNS1_4WSeqImEE:
   40|    443|        : serializer(serializer),
   41|    443|          sizeOfTypePlusIndex(serializer.get_size() + PrefixType::size),
   42|    443|          count(0),
   43|    443|          isValid(position.length() >= PrefixType::size),
   44|    443|          countPosition(position),
   45|    443|          pPosition(&position)
   46|    443|    {
   47|    443|        if (isValid)
  ------------------
  |  Branch (47:13): [True: 443, False: 0]
  ------------------
   48|    443|        {
   49|    443|            pPosition->advance(PrefixType::size);
   50|    443|        }
   51|    443|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5UInt8ENS_23ControlRelayOutputBlockEE5WriteERKS3_h:
   62|  2.05k|    {
   63|  2.05k|        if (isValid && (pPosition->length() >= sizeOfTypePlusIndex))
  ------------------
  |  Branch (63:13): [True: 2.05k, False: 0]
  |  Branch (63:24): [True: 2.05k, False: 0]
  ------------------
   64|  2.05k|        {
   65|  2.05k|            PrefixType::write_to(*pPosition, index);
   66|  2.05k|            serializer.write(value, *pPosition);
   67|  2.05k|            ++count;
   68|  2.05k|            return true;
   69|  2.05k|        }
   70|      0|        else
   71|      0|        {
   72|      0|            return false;
   73|      0|        }
   74|  2.05k|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5UInt8ENS_23ControlRelayOutputBlockEED2Ev:
   54|    443|    {
   55|    443|        if (isValid)
  ------------------
  |  Branch (55:13): [True: 443, False: 0]
  ------------------
   56|    443|        {
   57|    443|            PrefixType::write_to(countPosition, count);
   58|    443|        }
   59|    443|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5UInt8ENS_17AnalogOutputInt16EEC2ERKNS_10SerializerIS3_EERNS1_4WSeqImEE:
   40|  1.03k|        : serializer(serializer),
   41|  1.03k|          sizeOfTypePlusIndex(serializer.get_size() + PrefixType::size),
   42|  1.03k|          count(0),
   43|  1.03k|          isValid(position.length() >= PrefixType::size),
   44|  1.03k|          countPosition(position),
   45|  1.03k|          pPosition(&position)
   46|  1.03k|    {
   47|  1.03k|        if (isValid)
  ------------------
  |  Branch (47:13): [True: 1.03k, False: 0]
  ------------------
   48|  1.03k|        {
   49|  1.03k|            pPosition->advance(PrefixType::size);
   50|  1.03k|        }
   51|  1.03k|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5UInt8ENS_17AnalogOutputInt16EE5WriteERKS3_h:
   62|  10.3k|    {
   63|  10.3k|        if (isValid && (pPosition->length() >= sizeOfTypePlusIndex))
  ------------------
  |  Branch (63:13): [True: 10.3k, False: 0]
  |  Branch (63:24): [True: 10.3k, False: 0]
  ------------------
   64|  10.3k|        {
   65|  10.3k|            PrefixType::write_to(*pPosition, index);
   66|  10.3k|            serializer.write(value, *pPosition);
   67|  10.3k|            ++count;
   68|  10.3k|            return true;
   69|  10.3k|        }
   70|      0|        else
   71|      0|        {
   72|      0|            return false;
   73|      0|        }
   74|  10.3k|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5UInt8ENS_17AnalogOutputInt16EED2Ev:
   54|  1.03k|    {
   55|  1.03k|        if (isValid)
  ------------------
  |  Branch (55:13): [True: 1.03k, False: 0]
  ------------------
   56|  1.03k|        {
   57|  1.03k|            PrefixType::write_to(countPosition, count);
   58|  1.03k|        }
   59|  1.03k|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5UInt8ENS_17AnalogOutputInt32EEC2ERKNS_10SerializerIS3_EERNS1_4WSeqImEE:
   40|    488|        : serializer(serializer),
   41|    488|          sizeOfTypePlusIndex(serializer.get_size() + PrefixType::size),
   42|    488|          count(0),
   43|    488|          isValid(position.length() >= PrefixType::size),
   44|    488|          countPosition(position),
   45|    488|          pPosition(&position)
   46|    488|    {
   47|    488|        if (isValid)
  ------------------
  |  Branch (47:13): [True: 488, False: 0]
  ------------------
   48|    488|        {
   49|    488|            pPosition->advance(PrefixType::size);
   50|    488|        }
   51|    488|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5UInt8ENS_17AnalogOutputInt32EE5WriteERKS3_h:
   62|  2.16k|    {
   63|  2.16k|        if (isValid && (pPosition->length() >= sizeOfTypePlusIndex))
  ------------------
  |  Branch (63:13): [True: 2.16k, False: 0]
  |  Branch (63:24): [True: 2.16k, False: 0]
  ------------------
   64|  2.16k|        {
   65|  2.16k|            PrefixType::write_to(*pPosition, index);
   66|  2.16k|            serializer.write(value, *pPosition);
   67|  2.16k|            ++count;
   68|  2.16k|            return true;
   69|  2.16k|        }
   70|      0|        else
   71|      0|        {
   72|      0|            return false;
   73|      0|        }
   74|  2.16k|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5UInt8ENS_17AnalogOutputInt32EED2Ev:
   54|    488|    {
   55|    488|        if (isValid)
  ------------------
  |  Branch (55:13): [True: 488, False: 0]
  ------------------
   56|    488|        {
   57|    488|            PrefixType::write_to(countPosition, count);
   58|    488|        }
   59|    488|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5UInt8ENS_19AnalogOutputFloat32EEC2ERKNS_10SerializerIS3_EERNS1_4WSeqImEE:
   40|    863|        : serializer(serializer),
   41|    863|          sizeOfTypePlusIndex(serializer.get_size() + PrefixType::size),
   42|    863|          count(0),
   43|    863|          isValid(position.length() >= PrefixType::size),
   44|    863|          countPosition(position),
   45|    863|          pPosition(&position)
   46|    863|    {
   47|    863|        if (isValid)
  ------------------
  |  Branch (47:13): [True: 863, False: 0]
  ------------------
   48|    863|        {
   49|    863|            pPosition->advance(PrefixType::size);
   50|    863|        }
   51|    863|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5UInt8ENS_19AnalogOutputFloat32EE5WriteERKS3_h:
   62|  5.15k|    {
   63|  5.15k|        if (isValid && (pPosition->length() >= sizeOfTypePlusIndex))
  ------------------
  |  Branch (63:13): [True: 5.15k, False: 0]
  |  Branch (63:24): [True: 5.15k, False: 0]
  ------------------
   64|  5.15k|        {
   65|  5.15k|            PrefixType::write_to(*pPosition, index);
   66|  5.15k|            serializer.write(value, *pPosition);
   67|  5.15k|            ++count;
   68|  5.15k|            return true;
   69|  5.15k|        }
   70|      0|        else
   71|      0|        {
   72|      0|            return false;
   73|      0|        }
   74|  5.15k|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5UInt8ENS_19AnalogOutputFloat32EED2Ev:
   54|    863|    {
   55|    863|        if (isValid)
  ------------------
  |  Branch (55:13): [True: 863, False: 0]
  ------------------
   56|    863|        {
   57|    863|            PrefixType::write_to(countPosition, count);
   58|    863|        }
   59|    863|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5UInt8ENS_20AnalogOutputDouble64EEC2ERKNS_10SerializerIS3_EERNS1_4WSeqImEE:
   40|    881|        : serializer(serializer),
   41|    881|          sizeOfTypePlusIndex(serializer.get_size() + PrefixType::size),
   42|    881|          count(0),
   43|    881|          isValid(position.length() >= PrefixType::size),
   44|    881|          countPosition(position),
   45|    881|          pPosition(&position)
   46|    881|    {
   47|    881|        if (isValid)
  ------------------
  |  Branch (47:13): [True: 881, False: 0]
  ------------------
   48|    881|        {
   49|    881|            pPosition->advance(PrefixType::size);
   50|    881|        }
   51|    881|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5UInt8ENS_20AnalogOutputDouble64EE5WriteERKS3_h:
   62|  5.34k|    {
   63|  5.34k|        if (isValid && (pPosition->length() >= sizeOfTypePlusIndex))
  ------------------
  |  Branch (63:13): [True: 5.34k, False: 0]
  |  Branch (63:24): [True: 5.34k, False: 0]
  ------------------
   64|  5.34k|        {
   65|  5.34k|            PrefixType::write_to(*pPosition, index);
   66|  5.34k|            serializer.write(value, *pPosition);
   67|  5.34k|            ++count;
   68|  5.34k|            return true;
   69|  5.34k|        }
   70|      0|        else
   71|      0|        {
   72|      0|            return false;
   73|      0|        }
   74|  5.34k|    }
_ZN8opendnp321PrefixedWriteIteratorIN7ser4cpp5UInt8ENS_20AnalogOutputDouble64EED2Ev:
   54|    881|    {
   55|    881|        if (isValid)
  ------------------
  |  Branch (55:13): [True: 881, False: 0]
  ------------------
   56|    881|        {
   57|    881|            PrefixType::write_to(countPosition, count);
   58|    881|        }
   59|    881|    }

_ZN8opendnp35Range4FromEtt:
   35|   163k|    {
   36|   163k|        return Range(start, stop);
   37|   163k|    }
_ZN8opendnp35Range7InvalidEv:
   40|  6.13k|    {
   41|  6.13k|        return Range(1, 0);
   42|  6.13k|    }
_ZN8opendnp35RangeC2Ev:
   44|   140k|    Range() : start(1), stop(0) {}
_ZNK8opendnp35Range5CountEv:
   47|  48.2k|    {
   48|  48.2k|        return IsValid() ? (static_cast<size_t>(stop) - static_cast<size_t>(start) + 1) : 0;
  ------------------
  |  Branch (48:16): [True: 48.2k, False: 0]
  ------------------
   49|  48.2k|    }
_ZNK8opendnp35Range8ContainsEt:
   75|   240k|    {
   76|   240k|        return (index >= start) && (index <= stop);
  ------------------
  |  Branch (76:16): [True: 240k, False: 0]
  |  Branch (76:36): [True: 199k, False: 41.5k]
  ------------------
   77|   240k|    }
_ZNK8opendnp35Range5UnionERKS0_:
   87|  54.7k|    {
   88|  54.7k|        if (!this->IsValid())
  ------------------
  |  Branch (88:13): [True: 3.05k, False: 51.6k]
  ------------------
   89|  3.05k|        {
   90|  3.05k|            return other;
   91|  3.05k|        }
   92|       |
   93|  51.6k|        return Range(ser4cpp::min<uint16_t>(start, other.start), ser4cpp::max<uint16_t>(stop, other.stop));
   94|  54.7k|    }
_ZNK8opendnp35Range7IsValidEv:
  102|   343k|    {
  103|   343k|        return start <= stop;
  104|   343k|    }
_ZNK8opendnp35Range9IsOneByteEv:
  107|  5.91k|    {
  108|  5.91k|        return IsValid() && (start <= 255) && (stop <= 255);
  ------------------
  |  Branch (108:16): [True: 5.91k, False: 0]
  |  Branch (108:29): [True: 5.91k, False: 0]
  |  Branch (108:47): [True: 5.91k, False: 0]
  ------------------
  109|  5.91k|    }
_ZN8opendnp35RangeC2Ett:
  117|   221k|    Range(uint16_t start_, uint16_t stop_) : start(start_), stop(stop_) {}

_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_6BinaryEEC2EhRKNS_10SerializerIS3_EERNS1_4WSeqImEE:
   42|    638|        : start(start_),
   43|    638|          serializer(serializer),
   44|    638|          count(0),
   45|    638|          isValid(position.length() >= 2 * IndexType::size),
   46|    638|          range(position),
   47|    638|          pPosition(&position)
   48|    638|    {
   49|    638|        if (isValid)
  ------------------
  |  Branch (49:13): [True: 638, False: 0]
  ------------------
   50|    638|        {
   51|    638|            IndexType::write_to(range, start);
   52|    638|            pPosition->advance(2 * IndexType::size);
   53|    638|        }
   54|    638|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_6BinaryEE5WriteERKS3_:
   66|  3.52k|    {
   67|  3.52k|        if (isValid && (pPosition->length() >= serializer.get_size()) && (count <= IndexType::max_value))
  ------------------
  |  Branch (67:13): [True: 3.52k, False: 0]
  |  Branch (67:24): [True: 3.52k, False: 0]
  |  Branch (67:74): [True: 3.52k, False: 0]
  ------------------
   68|  3.52k|        {
   69|  3.52k|            serializer.write(value, *pPosition);
   70|  3.52k|            ++count;
   71|  3.52k|            return true;
   72|  3.52k|        }
   73|      0|        else
   74|      0|        {
   75|      0|            return false;
   76|      0|        }
   77|  3.52k|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_6BinaryEED2Ev:
   57|    638|    {
   58|    638|        if (isValid && count > 0)
  ------------------
  |  Branch (58:13): [True: 638, False: 0]
  |  Branch (58:24): [True: 638, False: 0]
  ------------------
   59|    638|        {
   60|    638|            auto stop = start + count - 1;
   61|    638|            IndexType::write_to(range, static_cast<typename IndexType::type_t>(stop));
   62|    638|        }
   63|    638|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_15DoubleBitBinaryEEC2EhRKNS_10SerializerIS3_EERNS1_4WSeqImEE:
   42|    497|        : start(start_),
   43|    497|          serializer(serializer),
   44|    497|          count(0),
   45|    497|          isValid(position.length() >= 2 * IndexType::size),
   46|    497|          range(position),
   47|    497|          pPosition(&position)
   48|    497|    {
   49|    497|        if (isValid)
  ------------------
  |  Branch (49:13): [True: 497, False: 0]
  ------------------
   50|    497|        {
   51|    497|            IndexType::write_to(range, start);
   52|    497|            pPosition->advance(2 * IndexType::size);
   53|    497|        }
   54|    497|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_15DoubleBitBinaryEE5WriteERKS3_:
   66|  2.68k|    {
   67|  2.68k|        if (isValid && (pPosition->length() >= serializer.get_size()) && (count <= IndexType::max_value))
  ------------------
  |  Branch (67:13): [True: 2.68k, False: 0]
  |  Branch (67:24): [True: 2.68k, False: 0]
  |  Branch (67:74): [True: 2.68k, False: 0]
  ------------------
   68|  2.68k|        {
   69|  2.68k|            serializer.write(value, *pPosition);
   70|  2.68k|            ++count;
   71|  2.68k|            return true;
   72|  2.68k|        }
   73|      0|        else
   74|      0|        {
   75|      0|            return false;
   76|      0|        }
   77|  2.68k|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_15DoubleBitBinaryEED2Ev:
   57|    497|    {
   58|    497|        if (isValid && count > 0)
  ------------------
  |  Branch (58:13): [True: 497, False: 0]
  |  Branch (58:24): [True: 497, False: 0]
  ------------------
   59|    497|        {
   60|    497|            auto stop = start + count - 1;
   61|    497|            IndexType::write_to(range, static_cast<typename IndexType::type_t>(stop));
   62|    497|        }
   63|    497|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_6AnalogEEC2EhRKNS_10SerializerIS3_EERNS1_4WSeqImEE:
   42|  1.05k|        : start(start_),
   43|  1.05k|          serializer(serializer),
   44|  1.05k|          count(0),
   45|  1.05k|          isValid(position.length() >= 2 * IndexType::size),
   46|  1.05k|          range(position),
   47|  1.05k|          pPosition(&position)
   48|  1.05k|    {
   49|  1.05k|        if (isValid)
  ------------------
  |  Branch (49:13): [True: 1.05k, False: 0]
  ------------------
   50|  1.05k|        {
   51|  1.05k|            IndexType::write_to(range, start);
   52|  1.05k|            pPosition->advance(2 * IndexType::size);
   53|  1.05k|        }
   54|  1.05k|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_6AnalogEE5WriteERKS3_:
   66|  4.85k|    {
   67|  4.85k|        if (isValid && (pPosition->length() >= serializer.get_size()) && (count <= IndexType::max_value))
  ------------------
  |  Branch (67:13): [True: 4.85k, False: 0]
  |  Branch (67:24): [True: 4.85k, False: 0]
  |  Branch (67:74): [True: 4.85k, False: 0]
  ------------------
   68|  4.85k|        {
   69|  4.85k|            serializer.write(value, *pPosition);
   70|  4.85k|            ++count;
   71|  4.85k|            return true;
   72|  4.85k|        }
   73|      0|        else
   74|      0|        {
   75|      0|            return false;
   76|      0|        }
   77|  4.85k|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_6AnalogEED2Ev:
   57|  1.05k|    {
   58|  1.05k|        if (isValid && count > 0)
  ------------------
  |  Branch (58:13): [True: 1.05k, False: 0]
  |  Branch (58:24): [True: 1.05k, False: 0]
  ------------------
   59|  1.05k|        {
   60|  1.05k|            auto stop = start + count - 1;
   61|  1.05k|            IndexType::write_to(range, static_cast<typename IndexType::type_t>(stop));
   62|  1.05k|        }
   63|  1.05k|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_7CounterEEC2EhRKNS_10SerializerIS3_EERNS1_4WSeqImEE:
   42|    731|        : start(start_),
   43|    731|          serializer(serializer),
   44|    731|          count(0),
   45|    731|          isValid(position.length() >= 2 * IndexType::size),
   46|    731|          range(position),
   47|    731|          pPosition(&position)
   48|    731|    {
   49|    731|        if (isValid)
  ------------------
  |  Branch (49:13): [True: 731, False: 0]
  ------------------
   50|    731|        {
   51|    731|            IndexType::write_to(range, start);
   52|    731|            pPosition->advance(2 * IndexType::size);
   53|    731|        }
   54|    731|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_7CounterEE5WriteERKS3_:
   66|  3.68k|    {
   67|  3.68k|        if (isValid && (pPosition->length() >= serializer.get_size()) && (count <= IndexType::max_value))
  ------------------
  |  Branch (67:13): [True: 3.68k, False: 0]
  |  Branch (67:24): [True: 3.68k, False: 0]
  |  Branch (67:74): [True: 3.68k, False: 0]
  ------------------
   68|  3.68k|        {
   69|  3.68k|            serializer.write(value, *pPosition);
   70|  3.68k|            ++count;
   71|  3.68k|            return true;
   72|  3.68k|        }
   73|      0|        else
   74|      0|        {
   75|      0|            return false;
   76|      0|        }
   77|  3.68k|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_7CounterEED2Ev:
   57|    731|    {
   58|    731|        if (isValid && count > 0)
  ------------------
  |  Branch (58:13): [True: 731, False: 0]
  |  Branch (58:24): [True: 731, False: 0]
  ------------------
   59|    731|        {
   60|    731|            auto stop = start + count - 1;
   61|    731|            IndexType::write_to(range, static_cast<typename IndexType::type_t>(stop));
   62|    731|        }
   63|    731|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_13FrozenCounterEEC2EhRKNS_10SerializerIS3_EERNS1_4WSeqImEE:
   42|  1.01k|        : start(start_),
   43|  1.01k|          serializer(serializer),
   44|  1.01k|          count(0),
   45|  1.01k|          isValid(position.length() >= 2 * IndexType::size),
   46|  1.01k|          range(position),
   47|  1.01k|          pPosition(&position)
   48|  1.01k|    {
   49|  1.01k|        if (isValid)
  ------------------
  |  Branch (49:13): [True: 1.01k, False: 0]
  ------------------
   50|  1.01k|        {
   51|  1.01k|            IndexType::write_to(range, start);
   52|  1.01k|            pPosition->advance(2 * IndexType::size);
   53|  1.01k|        }
   54|  1.01k|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_13FrozenCounterEE5WriteERKS3_:
   66|  4.89k|    {
   67|  4.89k|        if (isValid && (pPosition->length() >= serializer.get_size()) && (count <= IndexType::max_value))
  ------------------
  |  Branch (67:13): [True: 4.89k, False: 0]
  |  Branch (67:24): [True: 4.89k, False: 0]
  |  Branch (67:74): [True: 4.89k, False: 0]
  ------------------
   68|  4.89k|        {
   69|  4.89k|            serializer.write(value, *pPosition);
   70|  4.89k|            ++count;
   71|  4.89k|            return true;
   72|  4.89k|        }
   73|      0|        else
   74|      0|        {
   75|      0|            return false;
   76|      0|        }
   77|  4.89k|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_13FrozenCounterEED2Ev:
   57|  1.01k|    {
   58|  1.01k|        if (isValid && count > 0)
  ------------------
  |  Branch (58:13): [True: 1.01k, False: 0]
  |  Branch (58:24): [True: 1.01k, False: 0]
  ------------------
   59|  1.01k|        {
   60|  1.01k|            auto stop = start + count - 1;
   61|  1.01k|            IndexType::write_to(range, static_cast<typename IndexType::type_t>(stop));
   62|  1.01k|        }
   63|  1.01k|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_18BinaryOutputStatusEEC2EhRKNS_10SerializerIS3_EERNS1_4WSeqImEE:
   42|    495|        : start(start_),
   43|    495|          serializer(serializer),
   44|    495|          count(0),
   45|    495|          isValid(position.length() >= 2 * IndexType::size),
   46|    495|          range(position),
   47|    495|          pPosition(&position)
   48|    495|    {
   49|    495|        if (isValid)
  ------------------
  |  Branch (49:13): [True: 495, False: 0]
  ------------------
   50|    495|        {
   51|    495|            IndexType::write_to(range, start);
   52|    495|            pPosition->advance(2 * IndexType::size);
   53|    495|        }
   54|    495|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_18BinaryOutputStatusEE5WriteERKS3_:
   66|  2.70k|    {
   67|  2.70k|        if (isValid && (pPosition->length() >= serializer.get_size()) && (count <= IndexType::max_value))
  ------------------
  |  Branch (67:13): [True: 2.70k, False: 0]
  |  Branch (67:24): [True: 2.70k, False: 0]
  |  Branch (67:74): [True: 2.70k, False: 0]
  ------------------
   68|  2.70k|        {
   69|  2.70k|            serializer.write(value, *pPosition);
   70|  2.70k|            ++count;
   71|  2.70k|            return true;
   72|  2.70k|        }
   73|      0|        else
   74|      0|        {
   75|      0|            return false;
   76|      0|        }
   77|  2.70k|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_18BinaryOutputStatusEED2Ev:
   57|    495|    {
   58|    495|        if (isValid && count > 0)
  ------------------
  |  Branch (58:13): [True: 495, False: 0]
  |  Branch (58:24): [True: 495, False: 0]
  ------------------
   59|    495|        {
   60|    495|            auto stop = start + count - 1;
   61|    495|            IndexType::write_to(range, static_cast<typename IndexType::type_t>(stop));
   62|    495|        }
   63|    495|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_18AnalogOutputStatusEEC2EhRKNS_10SerializerIS3_EERNS1_4WSeqImEE:
   42|    795|        : start(start_),
   43|    795|          serializer(serializer),
   44|    795|          count(0),
   45|    795|          isValid(position.length() >= 2 * IndexType::size),
   46|    795|          range(position),
   47|    795|          pPosition(&position)
   48|    795|    {
   49|    795|        if (isValid)
  ------------------
  |  Branch (49:13): [True: 795, False: 0]
  ------------------
   50|    795|        {
   51|    795|            IndexType::write_to(range, start);
   52|    795|            pPosition->advance(2 * IndexType::size);
   53|    795|        }
   54|    795|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_18AnalogOutputStatusEE5WriteERKS3_:
   66|  4.17k|    {
   67|  4.17k|        if (isValid && (pPosition->length() >= serializer.get_size()) && (count <= IndexType::max_value))
  ------------------
  |  Branch (67:13): [True: 4.17k, False: 0]
  |  Branch (67:24): [True: 4.17k, False: 0]
  |  Branch (67:74): [True: 4.17k, False: 0]
  ------------------
   68|  4.17k|        {
   69|  4.17k|            serializer.write(value, *pPosition);
   70|  4.17k|            ++count;
   71|  4.17k|            return true;
   72|  4.17k|        }
   73|      0|        else
   74|      0|        {
   75|      0|            return false;
   76|      0|        }
   77|  4.17k|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_18AnalogOutputStatusEED2Ev:
   57|    795|    {
   58|    795|        if (isValid && count > 0)
  ------------------
  |  Branch (58:13): [True: 795, False: 0]
  |  Branch (58:24): [True: 795, False: 0]
  ------------------
   59|    795|        {
   60|    795|            auto stop = start + count - 1;
   61|    795|            IndexType::write_to(range, static_cast<typename IndexType::type_t>(stop));
   62|    795|        }
   63|    795|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_15TimeAndIntervalEEC2EhRKNS_10SerializerIS3_EERNS1_4WSeqImEE:
   42|    329|        : start(start_),
   43|    329|          serializer(serializer),
   44|    329|          count(0),
   45|    329|          isValid(position.length() >= 2 * IndexType::size),
   46|    329|          range(position),
   47|    329|          pPosition(&position)
   48|    329|    {
   49|    329|        if (isValid)
  ------------------
  |  Branch (49:13): [True: 329, False: 0]
  ------------------
   50|    329|        {
   51|    329|            IndexType::write_to(range, start);
   52|    329|            pPosition->advance(2 * IndexType::size);
   53|    329|        }
   54|    329|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_15TimeAndIntervalEE5WriteERKS3_:
   66|  2.07k|    {
   67|  2.07k|        if (isValid && (pPosition->length() >= serializer.get_size()) && (count <= IndexType::max_value))
  ------------------
  |  Branch (67:13): [True: 2.07k, False: 0]
  |  Branch (67:24): [True: 2.07k, False: 0]
  |  Branch (67:74): [True: 2.07k, False: 0]
  ------------------
   68|  2.07k|        {
   69|  2.07k|            serializer.write(value, *pPosition);
   70|  2.07k|            ++count;
   71|  2.07k|            return true;
   72|  2.07k|        }
   73|      0|        else
   74|      0|        {
   75|      0|            return false;
   76|      0|        }
   77|  2.07k|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_15TimeAndIntervalEED2Ev:
   57|    329|    {
   58|    329|        if (isValid && count > 0)
  ------------------
  |  Branch (58:13): [True: 329, False: 0]
  |  Branch (58:24): [True: 329, False: 0]
  ------------------
   59|    329|        {
   60|    329|            auto stop = start + count - 1;
   61|    329|            IndexType::write_to(range, static_cast<typename IndexType::type_t>(stop));
   62|    329|        }
   63|    329|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_11OctetStringEEC2EhRKNS_10SerializerIS3_EERNS1_4WSeqImEE:
   42|    359|        : start(start_),
   43|    359|          serializer(serializer),
   44|    359|          count(0),
   45|    359|          isValid(position.length() >= 2 * IndexType::size),
   46|    359|          range(position),
   47|    359|          pPosition(&position)
   48|    359|    {
   49|    359|        if (isValid)
  ------------------
  |  Branch (49:13): [True: 359, False: 0]
  ------------------
   50|    359|        {
   51|    359|            IndexType::write_to(range, start);
   52|    359|            pPosition->advance(2 * IndexType::size);
   53|    359|        }
   54|    359|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_11OctetStringEED2Ev:
   57|    359|    {
   58|    359|        if (isValid && count > 0)
  ------------------
  |  Branch (58:13): [True: 359, False: 0]
  |  Branch (58:24): [True: 359, False: 0]
  ------------------
   59|    359|        {
   60|    359|            auto stop = start + count - 1;
   61|    359|            IndexType::write_to(range, static_cast<typename IndexType::type_t>(stop));
   62|    359|        }
   63|    359|    }
_ZN8opendnp318RangeWriteIteratorIN7ser4cpp5UInt8ENS_11OctetStringEE5WriteERKS3_:
   66|  2.26k|    {
   67|  2.26k|        if (isValid && (pPosition->length() >= serializer.get_size()) && (count <= IndexType::max_value))
  ------------------
  |  Branch (67:13): [True: 2.26k, False: 0]
  |  Branch (67:24): [True: 2.26k, False: 0]
  |  Branch (67:74): [True: 2.26k, False: 0]
  ------------------
   68|  2.26k|        {
   69|  2.26k|            serializer.write(value, *pPosition);
   70|  2.26k|            ++count;
   71|  2.26k|            return true;
   72|  2.26k|        }
   73|      0|        else
   74|      0|        {
   75|      0|            return false;
   76|      0|        }
   77|  2.26k|    }

_ZN8opendnp310SerializerINS_23ControlRelayOutputBlockEEC2EmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS3_4WSeqImEEE:
   37|  1.52k|        : size(size), read_func(read_func), write_func(write_func)
   38|  1.52k|    {
   39|  1.52k|    }
_ZN8opendnp310SerializerINS_17AnalogOutputInt16EEC2EmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS3_4WSeqImEEE:
   37|  2.43k|        : size(size), read_func(read_func), write_func(write_func)
   38|  2.43k|    {
   39|  2.43k|    }
_ZN8opendnp310SerializerINS_17AnalogOutputInt32EEC2EmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS3_4WSeqImEEE:
   37|  1.61k|        : size(size), read_func(read_func), write_func(write_func)
   38|  1.61k|    {
   39|  1.61k|    }
_ZN8opendnp310SerializerINS_19AnalogOutputFloat32EEC2EmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS3_4WSeqImEEE:
   37|  1.79k|        : size(size), read_func(read_func), write_func(write_func)
   38|  1.79k|    {
   39|  1.79k|    }
_ZN8opendnp310SerializerINS_20AnalogOutputDouble64EEC2EmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS3_4WSeqImEEE:
   37|  1.88k|        : size(size), read_func(read_func), write_func(write_func)
   38|  1.88k|    {
   39|  1.88k|    }
_ZNK8opendnp310SerializerINS_23ControlRelayOutputBlockEE8get_sizeEv:
   45|  1.95k|    {
   46|  1.95k|        return size;
   47|  1.95k|    }
_ZNK8opendnp310SerializerINS_23ControlRelayOutputBlockEE5writeERKS1_RN7ser4cpp4WSeqImEE:
   61|  3.49k|    {
   62|  3.49k|        return (*write_func)(value, buffer);
   63|  3.49k|    }
_ZNK8opendnp310SerializerINS_17AnalogOutputInt16EE8get_sizeEv:
   45|  3.18k|    {
   46|  3.18k|        return size;
   47|  3.18k|    }
_ZNK8opendnp310SerializerINS_17AnalogOutputInt16EE5writeERKS1_RN7ser4cpp4WSeqImEE:
   61|  13.3k|    {
   62|  13.3k|        return (*write_func)(value, buffer);
   63|  13.3k|    }
_ZNK8opendnp310SerializerINS_17AnalogOutputInt32EE8get_sizeEv:
   45|  1.99k|    {
   46|  1.99k|        return size;
   47|  1.99k|    }
_ZNK8opendnp310SerializerINS_17AnalogOutputInt32EE5writeERKS1_RN7ser4cpp4WSeqImEE:
   61|  4.25k|    {
   62|  4.25k|        return (*write_func)(value, buffer);
   63|  4.25k|    }
_ZNK8opendnp310SerializerINS_19AnalogOutputFloat32EE8get_sizeEv:
   45|  2.70k|    {
   46|  2.70k|        return size;
   47|  2.70k|    }
_ZNK8opendnp310SerializerINS_19AnalogOutputFloat32EE5writeERKS1_RN7ser4cpp4WSeqImEE:
   61|  6.80k|    {
   62|  6.80k|        return (*write_func)(value, buffer);
   63|  6.80k|    }
_ZNK8opendnp310SerializerINS_20AnalogOutputDouble64EE8get_sizeEv:
   45|  2.27k|    {
   46|  2.27k|        return size;
   47|  2.27k|    }
_ZNK8opendnp310SerializerINS_20AnalogOutputDouble64EE5writeERKS1_RN7ser4cpp4WSeqImEE:
   61|  6.64k|    {
   62|  6.64k|        return (*write_func)(value, buffer);
   63|  6.64k|    }
_ZNK8opendnp310SerializerINS_6BinaryEE8get_sizeEv:
   45|  4.16k|    {
   46|  4.16k|        return size;
   47|  4.16k|    }
_ZN8opendnp310SerializerINS_6BinaryEEC2EmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS3_4WSeqImEEE:
   37|    638|        : size(size), read_func(read_func), write_func(write_func)
   38|    638|    {
   39|    638|    }
_ZNK8opendnp310SerializerINS_6BinaryEE5writeERKS1_RN7ser4cpp4WSeqImEE:
   61|  3.52k|    {
   62|  3.52k|        return (*write_func)(value, buffer);
   63|  3.52k|    }
_ZNK8opendnp310SerializerINS_15DoubleBitBinaryEE8get_sizeEv:
   45|  3.18k|    {
   46|  3.18k|        return size;
   47|  3.18k|    }
_ZN8opendnp310SerializerINS_15DoubleBitBinaryEEC2EmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS3_4WSeqImEEE:
   37|    497|        : size(size), read_func(read_func), write_func(write_func)
   38|    497|    {
   39|    497|    }
_ZNK8opendnp310SerializerINS_15DoubleBitBinaryEE5writeERKS1_RN7ser4cpp4WSeqImEE:
   61|  2.68k|    {
   62|  2.68k|        return (*write_func)(value, buffer);
   63|  2.68k|    }
_ZNK8opendnp310SerializerINS_6AnalogEE8get_sizeEv:
   45|  5.91k|    {
   46|  5.91k|        return size;
   47|  5.91k|    }
_ZN8opendnp310SerializerINS_6AnalogEEC2EmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS3_4WSeqImEEE:
   37|  1.05k|        : size(size), read_func(read_func), write_func(write_func)
   38|  1.05k|    {
   39|  1.05k|    }
_ZNK8opendnp310SerializerINS_6AnalogEE5writeERKS1_RN7ser4cpp4WSeqImEE:
   61|  4.85k|    {
   62|  4.85k|        return (*write_func)(value, buffer);
   63|  4.85k|    }
_ZNK8opendnp310SerializerINS_7CounterEE8get_sizeEv:
   45|  4.41k|    {
   46|  4.41k|        return size;
   47|  4.41k|    }
_ZN8opendnp310SerializerINS_7CounterEEC2EmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS3_4WSeqImEEE:
   37|    731|        : size(size), read_func(read_func), write_func(write_func)
   38|    731|    {
   39|    731|    }
_ZNK8opendnp310SerializerINS_7CounterEE5writeERKS1_RN7ser4cpp4WSeqImEE:
   61|  3.68k|    {
   62|  3.68k|        return (*write_func)(value, buffer);
   63|  3.68k|    }
_ZNK8opendnp310SerializerINS_13FrozenCounterEE8get_sizeEv:
   45|  5.91k|    {
   46|  5.91k|        return size;
   47|  5.91k|    }
_ZN8opendnp310SerializerINS_13FrozenCounterEEC2EmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS3_4WSeqImEEE:
   37|  1.01k|        : size(size), read_func(read_func), write_func(write_func)
   38|  1.01k|    {
   39|  1.01k|    }
_ZNK8opendnp310SerializerINS_13FrozenCounterEE5writeERKS1_RN7ser4cpp4WSeqImEE:
   61|  4.89k|    {
   62|  4.89k|        return (*write_func)(value, buffer);
   63|  4.89k|    }
_ZNK8opendnp310SerializerINS_18BinaryOutputStatusEE8get_sizeEv:
   45|  3.19k|    {
   46|  3.19k|        return size;
   47|  3.19k|    }
_ZN8opendnp310SerializerINS_18BinaryOutputStatusEEC2EmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS3_4WSeqImEEE:
   37|    495|        : size(size), read_func(read_func), write_func(write_func)
   38|    495|    {
   39|    495|    }
_ZNK8opendnp310SerializerINS_18BinaryOutputStatusEE5writeERKS1_RN7ser4cpp4WSeqImEE:
   61|  2.70k|    {
   62|  2.70k|        return (*write_func)(value, buffer);
   63|  2.70k|    }
_ZNK8opendnp310SerializerINS_18AnalogOutputStatusEE8get_sizeEv:
   45|  4.96k|    {
   46|  4.96k|        return size;
   47|  4.96k|    }
_ZN8opendnp310SerializerINS_18AnalogOutputStatusEEC2EmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS3_4WSeqImEEE:
   37|    795|        : size(size), read_func(read_func), write_func(write_func)
   38|    795|    {
   39|    795|    }
_ZNK8opendnp310SerializerINS_18AnalogOutputStatusEE5writeERKS1_RN7ser4cpp4WSeqImEE:
   61|  4.17k|    {
   62|  4.17k|        return (*write_func)(value, buffer);
   63|  4.17k|    }
_ZNK8opendnp310SerializerINS_15TimeAndIntervalEE8get_sizeEv:
   45|  2.40k|    {
   46|  2.40k|        return size;
   47|  2.40k|    }
_ZN8opendnp310SerializerINS_15TimeAndIntervalEEC2EmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS3_4WSeqImEEE:
   37|    329|        : size(size), read_func(read_func), write_func(write_func)
   38|    329|    {
   39|    329|    }
_ZNK8opendnp310SerializerINS_15TimeAndIntervalEE5writeERKS1_RN7ser4cpp4WSeqImEE:
   61|  2.07k|    {
   62|  2.07k|        return (*write_func)(value, buffer);
   63|  2.07k|    }
_ZNK8opendnp310SerializerINS_11OctetStringEE8get_sizeEv:
   45|  2.62k|    {
   46|  2.62k|        return size;
   47|  2.62k|    }
_ZNK8opendnp310SerializerINS_11OctetStringEE5writeERKS1_RN7ser4cpp4WSeqImEE:
   61|  2.26k|    {
   62|  2.26k|        return (*write_func)(value, buffer);
   63|  2.26k|    }
_ZN8opendnp310SerializerINS_11OctetStringEEC2EmPFbRN7ser4cpp4RSeqImEERS1_EPFbRKS1_RNS3_4WSeqImEEE:
   37|    359|        : size(size), read_func(read_func), write_func(write_func)
   38|    359|    {
   39|    359|    }

_ZN8opendnp38TxBufferC2Ej:
   33|  17.7k|    TxBuffer(uint32_t maxTxSize) : buffer(maxTxSize) {}
_ZN8opendnp38TxBuffer5StartEv:
   36|  8.37k|    {
   37|  8.37k|        APDUResponse response(buffer.as_wslice());
   38|  8.37k|        return response;
   39|  8.37k|    }
_ZN8opendnp38TxBuffer6RecordERKNS_15AppControlFieldERKN7ser4cpp4RSeqImEE:
   42|  8.37k|    {
   43|  8.37k|        this->control = control;
   44|  8.37k|        this->lastResponse = view;
   45|  8.37k|    }

_ZN8opendnp38ConvertQINS_10Group1Var2ENS_6BinaryEE5ApplyERKS2_:
   35|  3.52k|    {
   36|  3.52k|        Target t;
   37|  3.52k|        t.flags = src.flags.value;
   38|  3.52k|        return t;
   39|  3.52k|    }
_ZN8opendnp38ConvertQINS_10Group3Var2ENS_15DoubleBitBinaryEE5ApplyERKS2_:
   35|  2.68k|    {
   36|  2.68k|        Target t;
   37|  2.68k|        t.flags = src.flags.value;
   38|  2.68k|        return t;
   39|  2.68k|    }
_ZN8opendnp38ConvertQINS_11Group10Var2ENS_18BinaryOutputStatusEE5ApplyERKS2_:
   35|  2.70k|    {
   36|  2.70k|        Target t;
   37|  2.70k|        t.flags = src.flags.value;
   38|  2.70k|        return t;
   39|  2.70k|    }
_ZN8opendnp39ConvertQVINS_11Group20Var1ENS_7CounterEE5ApplyERKS2_:
   45|  2.02k|    {
   46|  2.02k|        Target t;
   47|  2.02k|        t.value = src.value;
   48|  2.02k|        t.flags = src.flags.value;
   49|  2.02k|        return t;
   50|  2.02k|    }
_ZN8opendnp320ConvertQVandTruncateINS_11Group20Var2ENS_7CounterEE5ApplyERKS2_:
   98|    574|    {
   99|    574|        Target t;
  100|    574|        t.flags = src.flags.value;
  101|    574|        t.value = static_cast<typename Target::ValueType>(src.value);
  102|    574|        return t;
  103|    574|    }
_ZN8opendnp38ConvertVINS_11Group20Var5ENS_7CounterEE5ApplyERKS2_:
   56|    615|    {
   57|    615|        Target t;
   58|    615|        t.value = src.value;
   59|    615|        return t;
   60|    615|    }
_ZN8opendnp319ConvertVandTruncateINS_11Group20Var6ENS_7CounterEE5ApplyERKS2_:
   66|    475|    {
   67|    475|        Target t;
   68|    475|        t.value = static_cast<typename Target::ValueType>(src.value);
   69|    475|        return t;
   70|    475|    }
_ZN8opendnp39ConvertQVINS_11Group21Var1ENS_13FrozenCounterEE5ApplyERKS2_:
   45|  2.17k|    {
   46|  2.17k|        Target t;
   47|  2.17k|        t.value = src.value;
   48|  2.17k|        t.flags = src.flags.value;
   49|  2.17k|        return t;
   50|  2.17k|    }
_ZN8opendnp320ConvertQVandTruncateINS_11Group21Var2ENS_13FrozenCounterEE5ApplyERKS2_:
   98|    525|    {
   99|    525|        Target t;
  100|    525|        t.flags = src.flags.value;
  101|    525|        t.value = static_cast<typename Target::ValueType>(src.value);
  102|    525|        return t;
  103|    525|    }
_ZN8opendnp310ConvertQVTINS_11Group21Var5ENS_13FrozenCounterEE5ApplyERKS2_:
  109|    637|    {
  110|    637|        Target t;
  111|    637|        t.flags = src.flags.value;
  112|    637|        t.value = src.value;
  113|    637|        t.time = src.time;
  114|    637|        return t;
  115|    637|    }
_ZN8opendnp321ConvertQVTandTruncateINS_11Group21Var6ENS_13FrozenCounterEE5ApplyERKS2_:
  121|    630|    {
  122|    630|        Target t;
  123|    630|        t.flags = src.flags.value;
  124|    630|        t.value = static_cast<typename Target::ValueType>(src.value);
  125|    630|        t.time = src.time;
  126|    630|        return t;
  127|    630|    }
_ZN8opendnp38ConvertVINS_11Group21Var9ENS_13FrozenCounterEE5ApplyERKS2_:
   56|    494|    {
   57|    494|        Target t;
   58|    494|        t.value = src.value;
   59|    494|        return t;
   60|    494|    }
_ZN8opendnp319ConvertVandTruncateINS_12Group21Var10ENS_13FrozenCounterEE5ApplyERKS2_:
   66|    438|    {
   67|    438|        Target t;
   68|    438|        t.value = static_cast<typename Target::ValueType>(src.value);
   69|    438|        return t;
   70|    438|    }
_ZN8opendnp319ConvertQVRangeCheckINS_11Group30Var1ENS_6AnalogELh32EE5ApplyERKS2_:
   86|  2.20k|    {
   87|  2.20k|        Target t;
   88|  2.20k|        auto overrange = DownSampling<typename Source::Type, typename Target::ValueType>::Apply(src.value, t.value);
   89|  2.20k|        t.flags = overrange ? Overrange : 0;
  ------------------
  |  Branch (89:19): [True: 0, False: 2.20k]
  ------------------
   90|  2.20k|        t.flags |= src.flags.value;
   91|  2.20k|        return t;
   92|  2.20k|    }
_ZN8opendnp319ConvertQVRangeCheckINS_11Group30Var2ENS_6AnalogELh32EE5ApplyERKS2_:
   86|    510|    {
   87|    510|        Target t;
   88|    510|        auto overrange = DownSampling<typename Source::Type, typename Target::ValueType>::Apply(src.value, t.value);
   89|    510|        t.flags = overrange ? Overrange : 0;
  ------------------
  |  Branch (89:19): [True: 0, False: 510]
  ------------------
   90|    510|        t.flags |= src.flags.value;
   91|    510|        return t;
   92|    510|    }
_ZN8opendnp318ConvertVRangeCheckINS_11Group30Var3ENS_6AnalogEE5ApplyERKS2_:
   76|    451|    {
   77|    451|        Target t;
   78|    451|        DownSampling<typename Source::Type, typename Target::ValueType>::Apply(src.value, t.value);
   79|    451|        return t;
   80|    451|    }
_ZN8opendnp318ConvertVRangeCheckINS_11Group30Var4ENS_6AnalogEE5ApplyERKS2_:
   76|    514|    {
   77|    514|        Target t;
   78|    514|        DownSampling<typename Source::Type, typename Target::ValueType>::Apply(src.value, t.value);
   79|    514|        return t;
   80|    514|    }
_ZN8opendnp319ConvertQVRangeCheckINS_11Group30Var5ENS_6AnalogELh32EE5ApplyERKS2_:
   86|    475|    {
   87|    475|        Target t;
   88|    475|        auto overrange = DownSampling<typename Source::Type, typename Target::ValueType>::Apply(src.value, t.value);
   89|    475|        t.flags = overrange ? Overrange : 0;
  ------------------
  |  Branch (89:19): [True: 0, False: 475]
  ------------------
   90|    475|        t.flags |= src.flags.value;
   91|    475|        return t;
   92|    475|    }
_ZN8opendnp39ConvertQVINS_11Group30Var6ENS_6AnalogEE5ApplyERKS2_:
   45|    704|    {
   46|    704|        Target t;
   47|    704|        t.value = src.value;
   48|    704|        t.flags = src.flags.value;
   49|    704|        return t;
   50|    704|    }
_ZN8opendnp319ConvertQVRangeCheckINS_11Group40Var1ENS_18AnalogOutputStatusELh32EE5ApplyERKS2_:
   86|  2.46k|    {
   87|  2.46k|        Target t;
   88|  2.46k|        auto overrange = DownSampling<typename Source::Type, typename Target::ValueType>::Apply(src.value, t.value);
   89|  2.46k|        t.flags = overrange ? Overrange : 0;
  ------------------
  |  Branch (89:19): [True: 0, False: 2.46k]
  ------------------
   90|  2.46k|        t.flags |= src.flags.value;
   91|  2.46k|        return t;
   92|  2.46k|    }
_ZN8opendnp319ConvertQVRangeCheckINS_11Group40Var2ENS_18AnalogOutputStatusELh32EE5ApplyERKS2_:
   86|    619|    {
   87|    619|        Target t;
   88|    619|        auto overrange = DownSampling<typename Source::Type, typename Target::ValueType>::Apply(src.value, t.value);
   89|    619|        t.flags = overrange ? Overrange : 0;
  ------------------
  |  Branch (89:19): [True: 0, False: 619]
  ------------------
   90|    619|        t.flags |= src.flags.value;
   91|    619|        return t;
   92|    619|    }
_ZN8opendnp319ConvertQVRangeCheckINS_11Group40Var3ENS_18AnalogOutputStatusELh32EE5ApplyERKS2_:
   86|    511|    {
   87|    511|        Target t;
   88|    511|        auto overrange = DownSampling<typename Source::Type, typename Target::ValueType>::Apply(src.value, t.value);
   89|    511|        t.flags = overrange ? Overrange : 0;
  ------------------
  |  Branch (89:19): [True: 0, False: 511]
  ------------------
   90|    511|        t.flags |= src.flags.value;
   91|    511|        return t;
   92|    511|    }
_ZN8opendnp39ConvertQVINS_11Group40Var4ENS_18AnalogOutputStatusEE5ApplyERKS2_:
   45|    573|    {
   46|    573|        Target t;
   47|    573|        t.value = src.value;
   48|    573|        t.flags = src.flags.value;
   49|    573|        return t;
   50|    573|    }
_ZN8opendnp39ConvertQSINS_11Group41Var1ENS_17AnalogOutputInt32EE5ApplyERKS2_:
  168|  4.25k|    {
  169|  4.25k|        Target t;
  170|  4.25k|        t.value = src.value;
  171|  4.25k|        t.status = CommandStatusSpec::to_type(src.status);
  172|  4.25k|        return t;
  173|  4.25k|    }
_ZN8opendnp39ConvertQSINS_11Group41Var2ENS_17AnalogOutputInt16EE5ApplyERKS2_:
  168|  13.3k|    {
  169|  13.3k|        Target t;
  170|  13.3k|        t.value = src.value;
  171|  13.3k|        t.status = CommandStatusSpec::to_type(src.status);
  172|  13.3k|        return t;
  173|  13.3k|    }
_ZN8opendnp39ConvertQSINS_11Group41Var3ENS_19AnalogOutputFloat32EE5ApplyERKS2_:
  168|  6.80k|    {
  169|  6.80k|        Target t;
  170|  6.80k|        t.value = src.value;
  171|  6.80k|        t.status = CommandStatusSpec::to_type(src.status);
  172|  6.80k|        return t;
  173|  6.80k|    }
_ZN8opendnp39ConvertQSINS_11Group41Var4ENS_20AnalogOutputDouble64EE5ApplyERKS2_:
  168|  6.64k|    {
  169|  6.64k|        Target t;
  170|  6.64k|        t.value = src.value;
  171|  6.64k|        t.status = CommandStatusSpec::to_type(src.status);
  172|  6.64k|        return t;
  173|  6.64k|    }

_ZN8opendnp318ConvertGroup12Var15ApplyERKNS_23ControlRelayOutputBlockE:
   76|  3.49k|    {
   77|  3.49k|        Group12Var1 ret;
   78|  3.49k|        ret.code = crob.rawCode;
   79|  3.49k|        ret.count = crob.count;
   80|  3.49k|        ret.onTime = crob.onTimeMS;
   81|  3.49k|        ret.offTime = crob.offTimeMS;
   82|  3.49k|        ret.status = CommandStatusSpec::to_type(crob.status);
   83|  3.49k|        return ret;
   84|  3.49k|    }
_ZN8opendnp318ConvertGroup50Var45ApplyERKNS_15TimeAndIntervalE:
  237|  2.07k|    {
  238|  2.07k|        Group50Var4 ret;
  239|  2.07k|        ret.time = value.time;
  240|  2.07k|        ret.interval = value.interval;
  241|  2.07k|        ret.units = value.units;
  242|  2.07k|        return ret;
  243|  2.07k|    }

_ZN8opendnp316APDUHeaderParser12ParseRequestERKN7ser4cpp4RSeqImEEPNS_6LoggerE:
   34|  8.87k|{
   35|  8.87k|    if (apdu.length() < APDUHeader::REQUEST_SIZE)
  ------------------
  |  Branch (35:9): [True: 1, False: 8.87k]
  ------------------
   36|      1|    {
   37|      1|        FORMAT_LOGGER_BLOCK(logger, flags::WARN, "Request fragment  with insufficient size of %zu bytes",
  ------------------
  |  |   62|      1|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 1, False: 0]
  |  |  |  Branch (62:20): [True: 0, False: 1]
  |  |  ------------------
  |  |   63|      1|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
   38|      1|                            apdu.length());
   39|      1|        return Result<APDUHeader>::Error();
   40|      1|    }
   41|       |
   42|  8.87k|    return Result<APDUHeader>::Ok(APDUHeader(AppControlField(apdu[0]), FunctionCodeSpec::from_type(apdu[1])),
   43|  8.87k|                                  apdu.skip(APDUHeader::REQUEST_SIZE));
   44|  8.87k|}

_ZN8opendnp316APDUHeaderParser6ResultINS_10APDUHeaderEE5ErrorEv:
   50|      1|        {
   51|      1|            return Result();
   52|      1|        }
_ZN8opendnp316APDUHeaderParser6ResultINS_10APDUHeaderEEC2Ev:
   57|      1|        Result() : success(false) {}
_ZN8opendnp316APDUHeaderParser6ResultINS_10APDUHeaderEE2OkERKS2_RKN7ser4cpp4RSeqImEE:
   45|  8.87k|        {
   46|  8.87k|            return Result(header, objects);
   47|  8.87k|        }
_ZN8opendnp316APDUHeaderParser6ResultINS_10APDUHeaderEEC2ERKS2_RKN7ser4cpp4RSeqImEE:
   55|  8.87k|        Result(const T& header, const ser4cpp::rseq_t& objects) : success(true), header(header), objects(objects) {}

_ZN8opendnp310APDUParser5ParseERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEPNS_6LoggerENS_14ParserSettingsE:
   48|  8.81k|{
   49|       |    // do two state parsing process with logging and white-listing first but no handling on the first pass
   50|  8.81k|    auto result = ParseSinglePass(buffer, pLogger, nullptr, &handler, settings);
   51|       |    // if the first pass was successful, do a 2nd pass with the handler but no logging or white-list
   52|  8.81k|    return (result == ParseResult::OK) ? ParseSinglePass(buffer, nullptr, &handler, nullptr, settings) : result;
  ------------------
  |  Branch (52:12): [True: 6.66k, False: 2.15k]
  ------------------
   53|  8.81k|}
_ZN8opendnp310APDUParser15ParseSinglePassERKN7ser4cpp4RSeqImEEPNS_6LoggerEPNS_12IAPDUHandlerEPNS_10IWhiteListERKNS_14ParserSettingsE:
   65|  15.4k|{
   66|  15.4k|    uint32_t count = 0;
   67|  15.4k|    ser4cpp::rseq_t copy(buffer);
   68|   287k|    while (copy.length() > 0)
  ------------------
  |  Branch (68:12): [True: 274k, False: 13.3k]
  ------------------
   69|   274k|    {
   70|   274k|        auto result = ParseHeader(copy, pLogger, count, settings, pHandler, pWhiteList);
   71|   274k|        ++count;
   72|   274k|        if (result != ParseResult::OK)
  ------------------
  |  Branch (72:13): [True: 2.15k, False: 272k]
  ------------------
   73|  2.15k|        {
   74|  2.15k|            return result;
   75|  2.15k|        }
   76|   274k|    }
   77|  13.3k|    return ParseResult::OK;
   78|  15.4k|}
_ZN8opendnp310APDUParser11ParseHeaderERN7ser4cpp4RSeqImEEPNS_6LoggerEjRKNS_14ParserSettingsEPNS_12IAPDUHandlerEPNS_10IWhiteListE:
   86|   274k|{
   87|   274k|    ObjectHeader header;
   88|   274k|    auto result = ObjectHeaderParser::ParseObjectHeader(header, buffer, pLogger);
   89|   274k|    if (result != ParseResult::OK)
  ------------------
  |  Branch (89:9): [True: 188, False: 274k]
  ------------------
   90|    188|    {
   91|    188|        return result;
   92|    188|    }
   93|       |
   94|   274k|    const auto GV = GroupVariationRecord::GetRecord(header.group, header.variation);
   95|       |
   96|   274k|    if (GV.enumeration == GroupVariation::UNKNOWN)
  ------------------
  |  Branch (96:9): [True: 709, False: 273k]
  ------------------
   97|    709|    {
   98|    709|        FORMAT_LOGGER_BLOCK(pLogger, flags::WARN, "Unknown object %i / %i", GV.group, GV.variation);
  ------------------
  |  |   62|    709|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 709, False: 0]
  |  |  |  Branch (62:20): [True: 0, False: 709]
  |  |  ------------------
  |  |   63|    709|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
   99|    709|        return ParseResult::UNKNOWN_OBJECT;
  100|    709|    }
  101|       |
  102|       |    // if a white-list is defined and it doesn't validate, exit early
  103|   273k|    if (pWhiteList && !pWhiteList->IsAllowed(count, GV.enumeration, QualifierCodeSpec::from_type(header.qualifier)))
  ------------------
  |  Branch (103:9): [True: 138k, False: 134k]
  |  Branch (103:23): [True: 82, False: 138k]
  ------------------
  104|     82|    {
  105|     82|        FORMAT_LOGGER_BLOCK(pLogger, flags::WARN, "Header (%i) w/ Object (%i,%i) and qualifier (%i) failed whitelist",
  ------------------
  |  |   62|     82|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 82, False: 0]
  |  |  |  Branch (62:20): [True: 0, False: 82]
  |  |  ------------------
  |  |   63|     82|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
  106|     82|                            count, header.group, header.variation, header.qualifier);
  107|       |
  108|     82|        return ParseResult::NOT_ON_WHITELIST;
  109|     82|    }
  110|       |
  111|   273k|    return APDUParser::ParseQualifier(buffer, pLogger, HeaderRecord(GV, header.qualifier, count), settings, pHandler);
  112|   273k|}
_ZN8opendnp310APDUParser14ParseQualifierERN7ser4cpp4RSeqImEEPNS_6LoggerERKNS_12HeaderRecordERKNS_14ParserSettingsEPNS_12IAPDUHandlerE:
  119|   273k|{
  120|   273k|    switch (record.GetQualifierCode())
  121|   273k|    {
  122|   117k|    case (QualifierCode::ALL_OBJECTS):
  ------------------
  |  Branch (122:5): [True: 117k, False: 156k]
  ------------------
  123|   117k|        return HandleAllObjectsHeader(pLogger, record, settings, pHandler);
  124|       |
  125|  7.63k|    case (QualifierCode::UINT8_CNT):
  ------------------
  |  Branch (125:5): [True: 7.63k, False: 265k]
  ------------------
  126|  7.63k|        return CountParser::ParseHeader(buffer, NumParser::OneByte(), settings, record, pLogger, pHandler);
  127|       |
  128|  1.11k|    case (QualifierCode::UINT16_CNT):
  ------------------
  |  Branch (128:5): [True: 1.11k, False: 272k]
  ------------------
  129|  1.11k|        return CountParser::ParseHeader(buffer, NumParser::TwoByte(), settings, record, pLogger, pHandler);
  130|       |
  131|  56.2k|    case (QualifierCode::UINT8_START_STOP):
  ------------------
  |  Branch (131:5): [True: 56.2k, False: 217k]
  ------------------
  132|  56.2k|        return RangeParser::ParseHeader(buffer, NumParser::OneByte(), settings, record, pLogger, pHandler);
  133|       |
  134|  4.58k|    case (QualifierCode::UINT16_START_STOP):
  ------------------
  |  Branch (134:5): [True: 4.58k, False: 268k]
  ------------------
  135|  4.58k|        return RangeParser::ParseHeader(buffer, NumParser::TwoByte(), settings, record, pLogger, pHandler);
  136|       |
  137|  78.6k|    case (QualifierCode::UINT8_CNT_UINT8_INDEX):
  ------------------
  |  Branch (137:5): [True: 78.6k, False: 194k]
  ------------------
  138|  78.6k|        return CountIndexParser::ParseHeader(buffer, NumParser::OneByte(), settings, record, pLogger, pHandler);
  139|       |
  140|  8.08k|    case (QualifierCode::UINT16_CNT_UINT16_INDEX):
  ------------------
  |  Branch (140:5): [True: 8.08k, False: 265k]
  ------------------
  141|  8.08k|        return CountIndexParser::ParseHeader(buffer, NumParser::TwoByte(), settings, record, pLogger, pHandler);
  142|       |
  143|    139|    default:
  ------------------
  |  Branch (143:5): [True: 139, False: 273k]
  ------------------
  144|    139|        FORMAT_LOGGER_BLOCK(pLogger, flags::WARN, "Unknown qualifier %x", record.qualifier);
  ------------------
  |  |   62|    139|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 139, False: 0]
  |  |  |  Branch (62:20): [True: 0, False: 139]
  |  |  ------------------
  |  |   63|    139|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
  145|    139|        return ParseResult::UNKNOWN_QUALIFIER;
  146|   273k|    }
  147|   273k|}
_ZN8opendnp310APDUParser22HandleAllObjectsHeaderEPNS_6LoggerERKNS_12HeaderRecordERKNS_14ParserSettingsEPNS_12IAPDUHandlerE:
  153|   117k|{
  154|   117k|    FORMAT_LOGGER_BLOCK(pLogger, settings.LoggingLevel(), "%03u,%03u - %s - %s", record.group, record.variation,
  ------------------
  |  |   62|   117k|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 58.7k, False: 58.2k]
  |  |  |  Branch (62:9): [True: 0, False: 117k]
  |  |  |  Branch (62:20): [True: 0, False: 58.7k]
  |  |  ------------------
  |  |   63|   117k|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
  155|   117k|                        GroupVariationSpec::to_human_string(record.enumeration),
  156|   117k|                        QualifierCodeSpec::to_human_string(QualifierCode::ALL_OBJECTS));
  157|       |
  158|   117k|    if (pHandler)
  ------------------
  |  Branch (158:9): [True: 58.2k, False: 58.7k]
  ------------------
  159|  58.2k|    {
  160|  58.2k|        pHandler->OnHeader(AllObjectsHeader(record));
  161|  58.2k|    }
  162|       |
  163|   117k|    return ParseResult::OK;
  164|   117k|}

_ZN8opendnp314NumBytesInBitsEm:
   28|  4.17k|{
   29|  4.17k|    size_t numBytes = numBits / 8;
   30|  4.17k|    return ((numBits % 8) == 0) ? numBytes : numBytes + 1;
  ------------------
  |  Branch (30:12): [True: 319, False: 3.85k]
  ------------------
   31|  4.17k|}
_ZN8opendnp36GetBitERKN7ser4cpp4RSeqImEEm:
   34|    733|{
   35|    733|    size_t byte = position / 8;
   36|    733|    size_t bit = position % 8;
   37|    733|    assert(byte < buffer.length());
  ------------------
  |  Branch (37:5): [True: 733, False: 0]
  ------------------
   38|    733|    return (buffer[byte] & (1 << bit)) != 0;
   39|    733|}
_ZN8opendnp320NumBytesInDoubleBitsEm:
   42|    884|{
   43|    884|    size_t numBytes = numBits / 4;
   44|    884|    return ((numBits % 4) == 0) ? numBytes : numBytes + 1;
  ------------------
  |  Branch (44:12): [True: 429, False: 455]
  ------------------
   45|    884|}

_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group2Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    194|{
   64|    194|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    194|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group2Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    194|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    194|    {
   36|    194|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group2Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    259|{
   64|    259|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    259|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group2Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    259|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    259|    {
   36|    259|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group2Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    260|{
   64|    260|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    260|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group2Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    260|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    260|    {
   36|    260|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group4Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    259|{
   64|    259|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    259|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group4Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    259|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    259|    {
   36|    259|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group4Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    258|{
   64|    258|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    258|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group4Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    258|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    258|    {
   36|    258|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group4Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    259|{
   64|    259|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    259|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group4Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    259|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    259|    {
   36|    259|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18BinaryOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group11Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    163|{
   64|    163|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    163|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18BinaryOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group11Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    163|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    163|    {
   36|    163|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18BinaryOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group11Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    258|{
   64|    258|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    258|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18BinaryOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group11Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    258|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    258|    {
   36|    258|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_23ControlRelayOutputBlockEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group12Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|  1.72k|{
   64|  1.72k|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|  1.72k|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_23ControlRelayOutputBlockEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group12Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|  1.72k|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|  1.72k|    {
   36|  1.72k|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_23ControlRelayOutputBlockEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group12Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|  1.52k|    {
   45|  1.52k|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  6.84k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 5.32k, False: 1.52k]
  ------------------
   48|  5.32k|        {
   49|  5.32k|            visitor.OnValue(readFunc(copy, pos));
   50|  5.32k|        }
   51|  1.52k|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18BinaryCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group13Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    268|{
   64|    268|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    268|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18BinaryCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group13Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    268|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    268|    {
   36|    268|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18BinaryCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group13Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    232|{
   64|    232|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    232|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18BinaryCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group13Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    232|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    232|    {
   36|    232|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_7CounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group22Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    194|{
   64|    194|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    194|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group22Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    194|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    194|    {
   36|    194|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_7CounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group22Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    242|{
   64|    242|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    242|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group22Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    242|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    242|    {
   36|    242|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_7CounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group22Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    292|{
   64|    292|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    292|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group22Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    292|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    292|    {
   36|    292|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_7CounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group22Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    226|{
   64|    226|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    226|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group22Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    226|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    226|    {
   36|    226|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group23Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    197|{
   64|    197|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    197|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group23Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    197|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    197|    {
   36|    197|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group23Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    258|{
   64|    258|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    258|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group23Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    258|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    258|    {
   36|    258|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group23Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    260|{
   64|    260|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    260|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group23Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    260|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    260|    {
   36|    260|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group23Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    258|{
   64|    258|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    258|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group23Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    258|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    258|    {
   36|    258|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    194|{
   64|    194|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    194|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    194|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    194|    {
   36|    194|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    259|{
   64|    259|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    259|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    259|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    259|    {
   36|    259|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    250|{
   64|    250|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    250|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    250|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    250|    {
   36|    250|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    275|{
   64|    275|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    275|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    275|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    275|    {
   36|    275|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    258|{
   64|    258|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    258|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    258|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    258|    {
   36|    258|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    258|{
   64|    258|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    258|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    258|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    258|    {
   36|    258|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    258|{
   64|    258|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    258|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    258|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    258|    {
   36|    258|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    258|{
   64|    258|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    258|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    258|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    258|    {
   36|    258|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_17AnalogOutputInt32EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|  1.81k|{
   64|  1.81k|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|  1.81k|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_17AnalogOutputInt32EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|  1.81k|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|  1.81k|    {
   36|  1.81k|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_17AnalogOutputInt32EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|  1.61k|    {
   45|  1.61k|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  7.20k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 5.59k, False: 1.61k]
  ------------------
   48|  5.59k|        {
   49|  5.59k|            visitor.OnValue(readFunc(copy, pos));
   50|  5.59k|        }
   51|  1.61k|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_17AnalogOutputInt16EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|  2.63k|{
   64|  2.63k|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|  2.63k|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_17AnalogOutputInt16EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|  2.63k|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|  2.63k|    {
   36|  2.63k|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_17AnalogOutputInt16EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|  2.43k|    {
   45|  2.43k|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  24.7k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 22.3k, False: 2.43k]
  ------------------
   48|  22.3k|        {
   49|  22.3k|            visitor.OnValue(readFunc(copy, pos));
   50|  22.3k|        }
   51|  2.43k|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_19AnalogOutputFloat32EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|  2.05k|{
   64|  2.05k|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|  2.05k|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_19AnalogOutputFloat32EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|  2.05k|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|  2.05k|    {
   36|  2.05k|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_19AnalogOutputFloat32EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|  1.79k|    {
   45|  1.79k|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  9.98k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 8.19k, False: 1.79k]
  ------------------
   48|  8.19k|        {
   49|  8.19k|            visitor.OnValue(readFunc(copy, pos));
   50|  8.19k|        }
   51|  1.79k|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_20AnalogOutputDouble64EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|  2.08k|{
   64|  2.08k|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|  2.08k|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_20AnalogOutputDouble64EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|  2.08k|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|  2.08k|    {
   36|  2.08k|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_20AnalogOutputDouble64EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|  1.88k|    {
   45|  1.88k|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  10.6k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 8.75k, False: 1.88k]
  ------------------
   48|  8.75k|        {
   49|  8.75k|            visitor.OnValue(readFunc(copy, pos));
   50|  8.75k|        }
   51|  1.88k|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    321|{
   64|    321|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    321|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    321|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    321|    {
   36|    321|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    388|{
   64|    388|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    388|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    388|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    388|    {
   36|    388|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    414|{
   64|    414|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    414|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    414|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    414|    {
   36|    414|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    258|{
   64|    258|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    258|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    258|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    258|    {
   36|    258|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    266|{
   64|    266|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    266|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    266|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    266|    {
   36|    266|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    226|{
   64|    226|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    226|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    226|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    226|    {
   36|    226|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    226|{
   64|    226|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    226|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    226|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    226|    {
   36|    226|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    258|{
   64|    258|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    258|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    258|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    258|    {
   36|    258|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    194|{
   64|    194|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    194|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    194|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    194|    {
   36|    194|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    258|{
   64|    258|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    258|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    258|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    258|    {
   36|    258|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    259|{
   64|    259|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    259|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    259|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    259|    {
   36|    259|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    414|{
   64|    414|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    414|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    414|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    414|    {
   36|    414|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    199|{
   64|    199|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    199|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    199|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    199|    {
   36|    199|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    258|{
   64|    258|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    258|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    258|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    258|    {
   36|    258|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    259|{
   64|    259|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    259|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    259|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    259|    {
   36|    259|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    258|{
   64|    258|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    258|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    258|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    258|    {
   36|    258|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_15TimeAndIntervalEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group50Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    269|{
   64|    269|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    269|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_15TimeAndIntervalEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group50Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    269|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    269|    {
   36|    269|    }
CountIndexParser.cpp:_ZN8opendnp324CreateBufferedCollectionItZNS_16CountIndexParser19ParseCountOfIndicesERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_9NumParserEtPNS_6LoggerEPNS_12IAPDUHandlerEE3$_0EENS_18BufferedCollectionIT_T0_EERKS4_mRKSJ_:
   63|  20.8k|{
   64|  20.8k|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|  20.8k|}
CountIndexParser.cpp:_ZN8opendnp318BufferedCollectionItZNS_16CountIndexParser19ParseCountOfIndicesERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_9NumParserEtPNS_6LoggerEPNS_12IAPDUHandlerEE3$_0EC2ERKS4_mRKSG_:
   34|  20.8k|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|  20.8k|    {
   36|  20.8k|    }
CountIndexParser.cpp:_ZNK8opendnp318BufferedCollectionItZNS_16CountIndexParser19ParseCountOfIndicesERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_9NumParserEtPNS_6LoggerEPNS_12IAPDUHandlerEE3$_0E7ForeachERNS_8IVisitorItEE:
   44|  19.6k|    {
   45|  19.6k|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  76.4k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 56.7k, False: 19.6k]
  ------------------
   48|  56.7k|        {
   49|  56.7k|            visitor.OnValue(readFunc(copy, pos));
   50|  56.7k|        }
   51|  19.6k|    }
CountIndexParser.cpp:_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_11OctetStringEEEZNS_16CountIndexParser27ParseIndexPrefixedOctetDataERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_9NumParserEjPNS_6LoggerEPNS_12IAPDUHandlerEE3$_0EENS_18BufferedCollectionIT_T0_EERKS7_mRKSM_:
   63|    238|{
   64|    238|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    238|}
CountIndexParser.cpp:_ZN8opendnp318BufferedCollectionINS_7IndexedINS_11OctetStringEEEZNS_16CountIndexParser27ParseIndexPrefixedOctetDataERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_9NumParserEjPNS_6LoggerEPNS_12IAPDUHandlerEE3$_0EC2ERKS7_mRKSJ_:
   34|    238|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    238|    {
   36|    238|    }
_ZN8opendnp324CreateBufferedCollectionINS_11Group50Var1EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EENS_18BufferedCollectionIT_T0_EESB_mRKSI_:
   63|    721|{
   64|    721|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    721|}
_ZN8opendnp318BufferedCollectionINS_11Group50Var1EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EC2ESB_mRKSF_:
   34|    721|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    721|    {
   36|    721|    }
_ZNK8opendnp318BufferedCollectionINS_11Group50Var1EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_E5CountEv:
   39|    321|    {
   40|    321|        return COUNT;
   41|    321|    }
_ZNK8opendnp318BufferedCollectionINS_11Group50Var1EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_E7ForeachERNS_8IVisitorIS1_EE:
   44|     31|    {
   45|     31|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|     62|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 31, False: 31]
  ------------------
   48|     31|        {
   49|     31|            visitor.OnValue(readFunc(copy, pos));
   50|     31|        }
   51|     31|    }
_ZN8opendnp324CreateBufferedCollectionINS_11Group50Var3EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EENS_18BufferedCollectionIT_T0_EESB_mRKSI_:
   63|  1.18k|{
   64|  1.18k|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|  1.18k|}
_ZN8opendnp318BufferedCollectionINS_11Group50Var3EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EC2ESB_mRKSF_:
   34|  1.18k|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|  1.18k|    {
   36|  1.18k|    }
_ZNK8opendnp318BufferedCollectionINS_11Group50Var3EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_E5CountEv:
   39|    797|    {
   40|    797|        return COUNT;
   41|    797|    }
_ZNK8opendnp318BufferedCollectionINS_11Group50Var3EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_E7ForeachERNS_8IVisitorIS1_EE:
   44|    482|    {
   45|    482|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|    964|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 482, False: 482]
  ------------------
   48|    482|        {
   49|    482|            visitor.OnValue(readFunc(copy, pos));
   50|    482|        }
   51|    482|    }
_ZN8opendnp324CreateBufferedCollectionINS_11Group51Var1EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EENS_18BufferedCollectionIT_T0_EESB_mRKSI_:
   63|    228|{
   64|    228|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    228|}
_ZN8opendnp318BufferedCollectionINS_11Group51Var1EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EC2ESB_mRKSF_:
   34|    228|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    228|    {
   36|    228|    }
_ZN8opendnp324CreateBufferedCollectionINS_11Group51Var2EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EENS_18BufferedCollectionIT_T0_EESB_mRKSI_:
   63|    196|{
   64|    196|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    196|}
_ZN8opendnp318BufferedCollectionINS_11Group51Var2EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EC2ESB_mRKSF_:
   34|    196|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    196|    {
   36|    196|    }
_ZN8opendnp324CreateBufferedCollectionINS_11Group52Var1EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EENS_18BufferedCollectionIT_T0_EESB_mRKSI_:
   63|    140|{
   64|    140|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    140|}
_ZN8opendnp318BufferedCollectionINS_11Group52Var1EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EC2ESB_mRKSF_:
   34|    140|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    140|    {
   36|    140|    }
_ZN8opendnp324CreateBufferedCollectionINS_11Group52Var2EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EENS_18BufferedCollectionIT_T0_EESB_mRKSI_:
   63|    258|{
   64|    258|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    258|}
_ZN8opendnp318BufferedCollectionINS_11Group52Var2EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EC2ESB_mRKSF_:
   34|    258|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    258|    {
   36|    258|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_11RangeParser23InvokeRangeBitfieldTypeIS2_EEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSE_jE_EENS_18BufferedCollectionIT_T0_EESG_mRKSN_:
   63|    596|{
   64|    596|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    596|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_11RangeParser23InvokeRangeBitfieldTypeIS2_EEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSE_jE_EC2ESG_mRKSK_:
   34|    596|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    596|    {
   36|    596|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_11RangeParser13InvokeRangeOfINS_10Group1Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    271|{
   64|    271|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    271|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_11RangeParser13InvokeRangeOfINS_10Group1Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    271|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    271|    {
   36|    271|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_11RangeParser29InvokeRangeDoubleBitfieldTypeIS2_EEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSE_mE_EENS_18BufferedCollectionIT_T0_EESG_mRKSN_:
   63|    422|{
   64|    422|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    422|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_11RangeParser29InvokeRangeDoubleBitfieldTypeIS2_EEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSE_mE_EC2ESG_mRKSK_:
   34|    422|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    422|    {
   36|    422|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18BinaryOutputStatusEEEZNS_11RangeParser23InvokeRangeBitfieldTypeIS2_EEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSE_jE_EENS_18BufferedCollectionIT_T0_EESG_mRKSN_:
   63|    289|{
   64|    289|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    289|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18BinaryOutputStatusEEEZNS_11RangeParser23InvokeRangeBitfieldTypeIS2_EEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSE_jE_EC2ESG_mRKSK_:
   34|    289|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    289|    {
   36|    289|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_11RangeParser13InvokeRangeOfINS_10Group3Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    265|{
   64|    265|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    265|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_11RangeParser13InvokeRangeOfINS_10Group3Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    265|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    265|    {
   36|    265|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18BinaryOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group10Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    229|{
   64|    229|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    229|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18BinaryOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group10Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    229|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    229|    {
   36|    229|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_7CounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group20Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    200|{
   64|    200|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    200|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group20Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    200|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    200|    {
   36|    200|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_7CounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group20Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    223|{
   64|    223|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    223|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group20Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    223|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    223|    {
   36|    223|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_7CounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group20Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    227|{
   64|    227|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    227|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group20Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    227|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    227|    {
   36|    227|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_7CounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group20Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    226|{
   64|    226|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    226|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group20Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    226|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    226|    {
   36|    226|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    259|{
   64|    259|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    259|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    259|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    259|    {
   36|    259|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    474|{
   64|    474|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    474|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    474|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    474|    {
   36|    474|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    267|{
   64|    267|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    267|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    267|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    267|    {
   36|    267|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    262|{
   64|    262|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    262|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    262|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    262|    {
   36|    262|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var9EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    263|{
   64|    263|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    263|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var9EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    263|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    263|    {
   36|    263|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_12Group21Var10EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    247|{
   64|    247|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    247|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_12Group21Var10EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    247|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    247|    {
   36|    247|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    211|{
   64|    211|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    211|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    211|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    211|    {
   36|    211|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    413|{
   64|    413|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    413|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    413|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    413|    {
   36|    413|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var3EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    259|{
   64|    259|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    259|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var3EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    259|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    259|    {
   36|    259|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    267|{
   64|    267|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    267|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    267|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    267|    {
   36|    267|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    247|{
   64|    247|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    247|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    247|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    247|    {
   36|    247|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    279|{
   64|    279|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    279|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    279|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    279|    {
   36|    279|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group40Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    262|{
   64|    262|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    262|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group40Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    262|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    262|    {
   36|    262|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group40Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    395|{
   64|    395|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    395|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group40Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    395|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    395|    {
   36|    395|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group40Var3EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    265|{
   64|    265|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    265|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group40Var3EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    265|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    265|    {
   36|    265|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group40Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    245|{
   64|    245|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    245|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group40Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    245|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    245|    {
   36|    245|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_15TimeAndIntervalEEEZNS_11RangeParser13InvokeRangeOfINS_11Group50Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    282|{
   64|    282|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    282|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_15TimeAndIntervalEEEZNS_11RangeParser13InvokeRangeOfINS_11Group50Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    282|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    282|    {
   36|    282|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_8IINValueEEEZNS_11RangeParser23InvokeRangeBitfieldTypeIS2_EEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSE_jE_EENS_18BufferedCollectionIT_T0_EESG_mRKSN_:
   63|  1.08k|{
   64|  1.08k|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|  1.08k|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_8IINValueEEEZNS_11RangeParser23InvokeRangeBitfieldTypeIS2_EEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSE_jE_EC2ESG_mRKSK_:
   34|  1.08k|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|  1.08k|    {
   36|  1.08k|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_8IINValueEEEZNS_11RangeParser23InvokeRangeBitfieldTypeIS2_EEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSE_jE_E5CountEv:
   39|  1.08k|    {
   40|  1.08k|        return COUNT;
   41|  1.08k|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_8IINValueEEEZNS_11RangeParser23InvokeRangeBitfieldTypeIS2_EEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSE_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    733|    {
   45|    733|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.46k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 733, False: 733]
  ------------------
   48|    733|        {
   49|    733|            visitor.OnValue(readFunc(copy, pos));
   50|    733|        }
   51|    733|    }
RangeParser.cpp:_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_11OctetStringEEEZNS_11RangeParser21ParseRangeOfOctetDataERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_5RangeEPNS_6LoggerEPNS_12IAPDUHandlerEE3$_0EENS_18BufferedCollectionIT_T0_EERKS7_mRKSM_:
   63|    264|{
   64|    264|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    264|}
RangeParser.cpp:_ZN8opendnp318BufferedCollectionINS_7IndexedINS_11OctetStringEEEZNS_11RangeParser21ParseRangeOfOctetDataERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_5RangeEPNS_6LoggerEPNS_12IAPDUHandlerEE3$_0EC2ERKS7_mRKSJ_:
   34|    264|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    264|    {
   36|    264|    }

_ZN8opendnp316CountIndexParserC2EtmRKNS_9NumParserEPFvRKNS_12HeaderRecordEtS3_RKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEE:
   40|  44.2k|    : count(count), requiredSize(requiredSize), numparser(numparser), handler(handler)
   41|  44.2k|{
   42|  44.2k|}
_ZN8opendnp316CountIndexParser11ParseHeaderERN7ser4cpp4RSeqImEERKNS_9NumParserERKNS_14ParserSettingsERKNS_12HeaderRecordEPNS_6LoggerEPNS_12IAPDUHandlerE:
   50|  86.7k|{
   51|  86.7k|    uint16_t count;
   52|  86.7k|    auto res = numparser.ParseCount(buffer, count, pLogger);
   53|  86.7k|    if (res == ParseResult::OK)
  ------------------
  |  Branch (53:9): [True: 86.6k, False: 53]
  ------------------
   54|  86.6k|    {
   55|  86.6k|        FORMAT_LOGGER_BLOCK(pLogger, settings.LoggingLevel(), "%03u,%03u %s, %s [%u]", record.group, record.variation,
  ------------------
  |  |   62|  86.6k|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 44.2k, False: 42.4k]
  |  |  |  Branch (62:9): [True: 0, False: 86.6k]
  |  |  |  Branch (62:20): [True: 0, False: 44.2k]
  |  |  ------------------
  |  |   63|  86.6k|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
   56|  86.6k|                            GroupVariationSpec::to_human_string(record.enumeration),
   57|  86.6k|                            QualifierCodeSpec::to_human_string(record.GetQualifierCode()), count);
   58|       |
   59|  86.6k|        if (settings.ExpectsContents())
  ------------------
  |  Branch (59:13): [True: 44.8k, False: 41.8k]
  ------------------
   60|  44.8k|        {
   61|  44.8k|            return ParseCountOfObjects(buffer, record, numparser, count, pLogger, pHandler);
   62|  44.8k|        }
   63|  41.8k|        else
   64|  41.8k|        {
   65|  41.8k|            return ParseCountOfIndices(buffer, record, numparser, count, pLogger, pHandler);
   66|  41.8k|        }
   67|  86.6k|    }
   68|       |
   69|     53|    return res;
   70|  86.7k|}
_ZNK8opendnp316CountIndexParser7ProcessERKNS_12HeaderRecordERN7ser4cpp4RSeqImEEPNS_12IAPDUHandlerEPNS_6LoggerE:
   76|  44.2k|{
   77|  44.2k|    if (buffer.length() < requiredSize)
  ------------------
  |  Branch (77:9): [True: 272, False: 44.0k]
  ------------------
   78|    272|    {
   79|    272|        SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "Not enough data for specified objects");
  ------------------
  |  |   48|    272|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 272, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 272]
  |  |  ------------------
  |  |   49|    272|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
   80|    272|        return ParseResult::NOT_ENOUGH_DATA_FOR_OBJECTS;
   81|    272|    }
   82|       |
   83|  44.0k|    if (pHandler)
  ------------------
  |  Branch (83:9): [True: 21.3k, False: 22.6k]
  ------------------
   84|  21.3k|    {
   85|  21.3k|        handler(record, count, numparser, buffer, *pHandler);
   86|  21.3k|    }
   87|  44.0k|    buffer.advance(requiredSize);
   88|  44.0k|    return ParseResult::OK;
   89|  44.2k|}
_ZN8opendnp316CountIndexParser19ParseCountOfObjectsERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_9NumParserEtPNS_6LoggerEPNS_12IAPDUHandlerE:
   97|  44.8k|{
   98|  44.8k|    switch (record.enumeration)
   99|  44.8k|    {
  100|    406|    case (GroupVariation::Group2Var1):
  ------------------
  |  Branch (100:5): [True: 406, False: 44.4k]
  ------------------
  101|    406|        return CountIndexParser::From<Group2Var1>(count, numparser).Process(record, buffer, pHandler, pLogger);
  102|    523|    case (GroupVariation::Group2Var2):
  ------------------
  |  Branch (102:5): [True: 523, False: 44.2k]
  ------------------
  103|    523|        return CountIndexParser::From<Group2Var2>(count, numparser).Process(record, buffer, pHandler, pLogger);
  104|    524|    case (GroupVariation::Group2Var3):
  ------------------
  |  Branch (104:5): [True: 524, False: 44.2k]
  ------------------
  105|    524|        return CountIndexParser::From<Group2Var3>(count, numparser).Process(record, buffer, pHandler, pLogger);
  106|       |
  107|    596|    case (GroupVariation::Group4Var1):
  ------------------
  |  Branch (107:5): [True: 596, False: 44.2k]
  ------------------
  108|    596|        return CountIndexParser::From<Group4Var1>(count, numparser).Process(record, buffer, pHandler, pLogger);
  109|    524|    case (GroupVariation::Group4Var2):
  ------------------
  |  Branch (109:5): [True: 524, False: 44.2k]
  ------------------
  110|    524|        return CountIndexParser::From<Group4Var2>(count, numparser).Process(record, buffer, pHandler, pLogger);
  111|    523|    case (GroupVariation::Group4Var3):
  ------------------
  |  Branch (111:5): [True: 523, False: 44.2k]
  ------------------
  112|    523|        return CountIndexParser::From<Group4Var3>(count, numparser).Process(record, buffer, pHandler, pLogger);
  113|       |
  114|    333|    case (GroupVariation::Group11Var1):
  ------------------
  |  Branch (114:5): [True: 333, False: 44.4k]
  ------------------
  115|    333|        return CountIndexParser::From<Group11Var1>(count, numparser).Process(record, buffer, pHandler, pLogger);
  116|    520|    case (GroupVariation::Group11Var2):
  ------------------
  |  Branch (116:5): [True: 520, False: 44.2k]
  ------------------
  117|    520|        return CountIndexParser::From<Group11Var2>(count, numparser).Process(record, buffer, pHandler, pLogger);
  118|       |
  119|  3.58k|    case (GroupVariation::Group12Var1):
  ------------------
  |  Branch (119:5): [True: 3.58k, False: 41.2k]
  ------------------
  120|  3.58k|        return CountIndexParser::From<Group12Var1>(count, numparser).Process(record, buffer, pHandler, pLogger);
  121|       |
  122|    544|    case (GroupVariation::Group13Var1):
  ------------------
  |  Branch (122:5): [True: 544, False: 44.2k]
  ------------------
  123|    544|        return CountIndexParser::From<Group13Var1>(count, numparser).Process(record, buffer, pHandler, pLogger);
  124|    564|    case (GroupVariation::Group13Var2):
  ------------------
  |  Branch (124:5): [True: 564, False: 44.2k]
  ------------------
  125|    564|        return CountIndexParser::From<Group13Var2>(count, numparser).Process(record, buffer, pHandler, pLogger);
  126|       |
  127|    393|    case (GroupVariation::Group22Var1):
  ------------------
  |  Branch (127:5): [True: 393, False: 44.4k]
  ------------------
  128|    393|        return CountIndexParser::From<Group22Var1>(count, numparser).Process(record, buffer, pHandler, pLogger);
  129|    488|    case (GroupVariation::Group22Var2):
  ------------------
  |  Branch (129:5): [True: 488, False: 44.3k]
  ------------------
  130|    488|        return CountIndexParser::From<Group22Var2>(count, numparser).Process(record, buffer, pHandler, pLogger);
  131|    614|    case (GroupVariation::Group22Var5):
  ------------------
  |  Branch (131:5): [True: 614, False: 44.1k]
  ------------------
  132|    614|        return CountIndexParser::From<Group22Var5>(count, numparser).Process(record, buffer, pHandler, pLogger);
  133|    456|    case (GroupVariation::Group22Var6):
  ------------------
  |  Branch (133:5): [True: 456, False: 44.3k]
  ------------------
  134|    456|        return CountIndexParser::From<Group22Var6>(count, numparser).Process(record, buffer, pHandler, pLogger);
  135|       |
  136|    452|    case (GroupVariation::Group23Var1):
  ------------------
  |  Branch (136:5): [True: 452, False: 44.3k]
  ------------------
  137|    452|        return CountIndexParser::From<Group23Var1>(count, numparser).Process(record, buffer, pHandler, pLogger);
  138|    529|    case (GroupVariation::Group23Var2):
  ------------------
  |  Branch (138:5): [True: 529, False: 44.2k]
  ------------------
  139|    529|        return CountIndexParser::From<Group23Var2>(count, numparser).Process(record, buffer, pHandler, pLogger);
  140|    525|    case (GroupVariation::Group23Var5):
  ------------------
  |  Branch (140:5): [True: 525, False: 44.2k]
  ------------------
  141|    525|        return CountIndexParser::From<Group23Var5>(count, numparser).Process(record, buffer, pHandler, pLogger);
  142|    520|    case (GroupVariation::Group23Var6):
  ------------------
  |  Branch (142:5): [True: 520, False: 44.2k]
  ------------------
  143|    520|        return CountIndexParser::From<Group23Var6>(count, numparser).Process(record, buffer, pHandler, pLogger);
  144|       |
  145|    392|    case (GroupVariation::Group32Var1):
  ------------------
  |  Branch (145:5): [True: 392, False: 44.4k]
  ------------------
  146|    392|        return CountIndexParser::From<Group32Var1>(count, numparser).Process(record, buffer, pHandler, pLogger);
  147|    522|    case (GroupVariation::Group32Var2):
  ------------------
  |  Branch (147:5): [True: 522, False: 44.2k]
  ------------------
  148|    522|        return CountIndexParser::From<Group32Var2>(count, numparser).Process(record, buffer, pHandler, pLogger);
  149|    504|    case (GroupVariation::Group32Var3):
  ------------------
  |  Branch (149:5): [True: 504, False: 44.3k]
  ------------------
  150|    504|        return CountIndexParser::From<Group32Var3>(count, numparser).Process(record, buffer, pHandler, pLogger);
  151|    554|    case (GroupVariation::Group32Var4):
  ------------------
  |  Branch (151:5): [True: 554, False: 44.2k]
  ------------------
  152|    554|        return CountIndexParser::From<Group32Var4>(count, numparser).Process(record, buffer, pHandler, pLogger);
  153|    520|    case (GroupVariation::Group32Var5):
  ------------------
  |  Branch (153:5): [True: 520, False: 44.2k]
  ------------------
  154|    520|        return CountIndexParser::From<Group32Var5>(count, numparser).Process(record, buffer, pHandler, pLogger);
  155|    520|    case (GroupVariation::Group32Var6):
  ------------------
  |  Branch (155:5): [True: 520, False: 44.2k]
  ------------------
  156|    520|        return CountIndexParser::From<Group32Var6>(count, numparser).Process(record, buffer, pHandler, pLogger);
  157|    522|    case (GroupVariation::Group32Var7):
  ------------------
  |  Branch (157:5): [True: 522, False: 44.2k]
  ------------------
  158|    522|        return CountIndexParser::From<Group32Var7>(count, numparser).Process(record, buffer, pHandler, pLogger);
  159|    548|    case (GroupVariation::Group32Var8):
  ------------------
  |  Branch (159:5): [True: 548, False: 44.2k]
  ------------------
  160|    548|        return CountIndexParser::From<Group32Var8>(count, numparser).Process(record, buffer, pHandler, pLogger);
  161|       |
  162|  3.68k|    case (GroupVariation::Group41Var1):
  ------------------
  |  Branch (162:5): [True: 3.68k, False: 41.1k]
  ------------------
  163|  3.68k|        return CountIndexParser::From<Group41Var1>(count, numparser).Process(record, buffer, pHandler, pLogger);
  164|  5.46k|    case (GroupVariation::Group41Var2):
  ------------------
  |  Branch (164:5): [True: 5.46k, False: 39.3k]
  ------------------
  165|  5.46k|        return CountIndexParser::From<Group41Var2>(count, numparser).Process(record, buffer, pHandler, pLogger);
  166|  4.12k|    case (GroupVariation::Group41Var3):
  ------------------
  |  Branch (166:5): [True: 4.12k, False: 40.6k]
  ------------------
  167|  4.12k|        return CountIndexParser::From<Group41Var3>(count, numparser).Process(record, buffer, pHandler, pLogger);
  168|  4.22k|    case (GroupVariation::Group41Var4):
  ------------------
  |  Branch (168:5): [True: 4.22k, False: 40.5k]
  ------------------
  169|  4.22k|        return CountIndexParser::From<Group41Var4>(count, numparser).Process(record, buffer, pHandler, pLogger);
  170|       |
  171|    648|    case (GroupVariation::Group42Var1):
  ------------------
  |  Branch (171:5): [True: 648, False: 44.1k]
  ------------------
  172|    648|        return CountIndexParser::From<Group42Var1>(count, numparser).Process(record, buffer, pHandler, pLogger);
  173|    881|    case (GroupVariation::Group42Var2):
  ------------------
  |  Branch (173:5): [True: 881, False: 43.9k]
  ------------------
  174|    881|        return CountIndexParser::From<Group42Var2>(count, numparser).Process(record, buffer, pHandler, pLogger);
  175|  1.04k|    case (GroupVariation::Group42Var3):
  ------------------
  |  Branch (175:5): [True: 1.04k, False: 43.7k]
  ------------------
  176|  1.04k|        return CountIndexParser::From<Group42Var3>(count, numparser).Process(record, buffer, pHandler, pLogger);
  177|    552|    case (GroupVariation::Group42Var4):
  ------------------
  |  Branch (177:5): [True: 552, False: 44.2k]
  ------------------
  178|    552|        return CountIndexParser::From<Group42Var4>(count, numparser).Process(record, buffer, pHandler, pLogger);
  179|    562|    case (GroupVariation::Group42Var5):
  ------------------
  |  Branch (179:5): [True: 562, False: 44.2k]
  ------------------
  180|    562|        return CountIndexParser::From<Group42Var5>(count, numparser).Process(record, buffer, pHandler, pLogger);
  181|    516|    case (GroupVariation::Group42Var6):
  ------------------
  |  Branch (181:5): [True: 516, False: 44.2k]
  ------------------
  182|    516|        return CountIndexParser::From<Group42Var6>(count, numparser).Process(record, buffer, pHandler, pLogger);
  183|    456|    case (GroupVariation::Group42Var7):
  ------------------
  |  Branch (183:5): [True: 456, False: 44.3k]
  ------------------
  184|    456|        return CountIndexParser::From<Group42Var7>(count, numparser).Process(record, buffer, pHandler, pLogger);
  185|    521|    case (GroupVariation::Group42Var8):
  ------------------
  |  Branch (185:5): [True: 521, False: 44.2k]
  ------------------
  186|    521|        return CountIndexParser::From<Group42Var8>(count, numparser).Process(record, buffer, pHandler, pLogger);
  187|       |
  188|    393|    case (GroupVariation::Group43Var1):
  ------------------
  |  Branch (188:5): [True: 393, False: 44.4k]
  ------------------
  189|    393|        return CountIndexParser::From<Group43Var1>(count, numparser).Process(record, buffer, pHandler, pLogger);
  190|    520|    case (GroupVariation::Group43Var2):
  ------------------
  |  Branch (190:5): [True: 520, False: 44.2k]
  ------------------
  191|    520|        return CountIndexParser::From<Group43Var2>(count, numparser).Process(record, buffer, pHandler, pLogger);
  192|    522|    case (GroupVariation::Group43Var3):
  ------------------
  |  Branch (192:5): [True: 522, False: 44.2k]
  ------------------
  193|    522|        return CountIndexParser::From<Group43Var3>(count, numparser).Process(record, buffer, pHandler, pLogger);
  194|    866|    case (GroupVariation::Group43Var4):
  ------------------
  |  Branch (194:5): [True: 866, False: 43.9k]
  ------------------
  195|    866|        return CountIndexParser::From<Group43Var4>(count, numparser).Process(record, buffer, pHandler, pLogger);
  196|    425|    case (GroupVariation::Group43Var5):
  ------------------
  |  Branch (196:5): [True: 425, False: 44.3k]
  ------------------
  197|    425|        return CountIndexParser::From<Group43Var5>(count, numparser).Process(record, buffer, pHandler, pLogger);
  198|    524|    case (GroupVariation::Group43Var6):
  ------------------
  |  Branch (198:5): [True: 524, False: 44.2k]
  ------------------
  199|    524|        return CountIndexParser::From<Group43Var6>(count, numparser).Process(record, buffer, pHandler, pLogger);
  200|    522|    case (GroupVariation::Group43Var7):
  ------------------
  |  Branch (200:5): [True: 522, False: 44.2k]
  ------------------
  201|    522|        return CountIndexParser::From<Group43Var7>(count, numparser).Process(record, buffer, pHandler, pLogger);
  202|    549|    case (GroupVariation::Group43Var8):
  ------------------
  |  Branch (202:5): [True: 549, False: 44.2k]
  ------------------
  203|    549|        return CountIndexParser::From<Group43Var8>(count, numparser).Process(record, buffer, pHandler, pLogger);
  204|    578|    case (GroupVariation::Group50Var4):
  ------------------
  |  Branch (204:5): [True: 578, False: 44.2k]
  ------------------
  205|    578|        return CountIndexParser::From<Group50Var4>(count, numparser).Process(record, buffer, pHandler, pLogger);
  206|    501|    case (GroupVariation::Group111Var0):
  ------------------
  |  Branch (206:5): [True: 501, False: 44.3k]
  ------------------
  207|    501|        return ParseIndexPrefixedOctetData(buffer, record, numparser, count, pLogger, pHandler);
  208|       |
  209|     30|    default:
  ------------------
  |  Branch (209:5): [True: 30, False: 44.7k]
  ------------------
  210|       |
  211|     30|        FORMAT_LOGGER_BLOCK(pLogger, flags::WARN, "Unsupported qualifier/object - %s - %i / %i",
  ------------------
  |  |   62|     30|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 30, False: 0]
  |  |  |  Branch (62:20): [True: 0, False: 30]
  |  |  ------------------
  |  |   63|     30|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
  212|     30|                            QualifierCodeSpec::to_human_string(record.GetQualifierCode()), record.group,
  213|     30|                            record.variation);
  214|       |
  215|     30|        return ParseResult::INVALID_OBJECT_QUALIFIER;
  216|  44.8k|    }
  217|  44.8k|}
_ZN8opendnp316CountIndexParser19ParseCountOfIndicesERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_9NumParserEtPNS_6LoggerEPNS_12IAPDUHandlerE:
  225|  41.8k|{
  226|  41.8k|    const auto SIZE = static_cast<size_t>(count) * static_cast<size_t>(numparser.NumBytes());
  227|       |
  228|  41.8k|    if (buffer.length() < SIZE)
  ------------------
  |  Branch (228:9): [True: 13, False: 41.8k]
  ------------------
  229|     13|    {
  230|     13|        SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "Not enough data for specified sequence of indices");
  ------------------
  |  |   48|     13|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 13, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 13]
  |  |  ------------------
  |  |   49|     13|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
  231|     13|        return ParseResult::NOT_ENOUGH_DATA_FOR_OBJECTS;
  232|     13|    }
  233|       |
  234|  41.8k|    if (pHandler)
  ------------------
  |  Branch (234:9): [True: 20.8k, False: 20.9k]
  ------------------
  235|  20.8k|    {
  236|  20.8k|        auto read = [&numparser, record](ser4cpp::rseq_t& buffer, uint32_t pos) -> uint16_t {
  237|  20.8k|            return numparser.ReadNum(buffer);
  238|  20.8k|        };
  239|       |
  240|  20.8k|        auto collection = CreateBufferedCollection<uint16_t>(buffer, count, read);
  241|  20.8k|        pHandler->OnHeader(PrefixHeader(record, count), collection);
  242|  20.8k|    }
  243|       |
  244|  41.8k|    buffer.advance(SIZE);
  245|  41.8k|    return ParseResult::OK;
  246|  41.8k|}
_ZN8opendnp316CountIndexParser27ParseIndexPrefixedOctetDataERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_9NumParserEjPNS_6LoggerEPNS_12IAPDUHandlerE:
  254|    501|{
  255|    501|    if (record.variation == 0)
  ------------------
  |  Branch (255:9): [True: 1, False: 500]
  ------------------
  256|      1|    {
  257|      1|        SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "Octet string variation 0 may only be used in requests");
  ------------------
  |  |   48|      1|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 1, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 1]
  |  |  ------------------
  |  |   49|      1|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
  258|      1|        return ParseResult::INVALID_OBJECT;
  259|      1|    }
  260|       |
  261|    500|    const uint32_t TOTAL_SIZE = count * (numparser.NumBytes() + record.variation);
  262|       |
  263|    500|    if (buffer.length() < TOTAL_SIZE)
  ------------------
  |  Branch (263:9): [True: 12, False: 488]
  ------------------
  264|     12|    {
  265|     12|        SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "Not enough data for specified bitfield objects");
  ------------------
  |  |   48|     12|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 12, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 12]
  |  |  ------------------
  |  |   49|     12|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
  266|     12|        return ParseResult::NOT_ENOUGH_DATA_FOR_OBJECTS;
  267|     12|    }
  268|       |
  269|    488|    if (pHandler)
  ------------------
  |  Branch (269:9): [True: 238, False: 250]
  ------------------
  270|    238|    {
  271|    238|        auto read = [&numparser, record](ser4cpp::rseq_t& buffer, uint32_t pos) -> Indexed<OctetString> {
  272|    238|            auto index = numparser.ReadNum(buffer);
  273|    238|            const auto octetStringSlice = buffer.take(record.variation);
  274|    238|            OctetString octets(Buffer(octetStringSlice, octetStringSlice.length()));
  275|    238|            buffer.advance(record.variation);
  276|    238|            return WithIndex(octets, index);
  277|    238|        };
  278|       |
  279|    238|        auto collection = CreateBufferedCollection<Indexed<OctetString>>(buffer, count, read);
  280|    238|        pHandler->OnHeader(PrefixHeader(record, count), collection);
  281|    238|    }
  282|       |
  283|    488|    buffer.advance(TOTAL_SIZE);
  284|    488|    return ParseResult::OK;
  285|    500|}
CountIndexParser.cpp:_ZZN8opendnp316CountIndexParser19ParseCountOfIndicesERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_9NumParserEtPNS_6LoggerEPNS_12IAPDUHandlerEENK3$_0clES4_j:
  236|  56.7k|        auto read = [&numparser, record](ser4cpp::rseq_t& buffer, uint32_t pos) -> uint16_t {
  237|  56.7k|            return numparser.ReadNum(buffer);
  238|  56.7k|        };

_ZN8opendnp316CountIndexParser4FromINS_10Group2Var1EEES0_tRKNS_9NumParserE:
  111|    406|{
  112|    406|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    406|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    406|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_10Group2Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    194|{
  129|    194|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    194|    {
  131|    194|        Indexed<typename Descriptor::Target> pair;
  132|    194|        pair.index = numparser.ReadNum(buffer);
  133|    194|        Descriptor::ReadTarget(buffer, pair.value);
  134|    194|        return pair;
  135|    194|    };
  136|       |
  137|    194|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    194|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    194|}
_ZN8opendnp316CountIndexParser4FromINS_10Group2Var2EEES0_tRKNS_9NumParserE:
  111|    523|{
  112|    523|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    523|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    523|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_10Group2Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    259|{
  129|    259|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    259|    {
  131|    259|        Indexed<typename Descriptor::Target> pair;
  132|    259|        pair.index = numparser.ReadNum(buffer);
  133|    259|        Descriptor::ReadTarget(buffer, pair.value);
  134|    259|        return pair;
  135|    259|    };
  136|       |
  137|    259|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    259|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    259|}
_ZN8opendnp316CountIndexParser4FromINS_10Group2Var3EEES0_tRKNS_9NumParserE:
  111|    524|{
  112|    524|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    524|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    524|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_10Group2Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    260|{
  129|    260|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    260|    {
  131|    260|        Indexed<typename Descriptor::Target> pair;
  132|    260|        pair.index = numparser.ReadNum(buffer);
  133|    260|        Descriptor::ReadTarget(buffer, pair.value);
  134|    260|        return pair;
  135|    260|    };
  136|       |
  137|    260|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    260|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    260|}
_ZN8opendnp316CountIndexParser4FromINS_10Group4Var1EEES0_tRKNS_9NumParserE:
  111|    596|{
  112|    596|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    596|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    596|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_10Group4Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    259|{
  129|    259|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    259|    {
  131|    259|        Indexed<typename Descriptor::Target> pair;
  132|    259|        pair.index = numparser.ReadNum(buffer);
  133|    259|        Descriptor::ReadTarget(buffer, pair.value);
  134|    259|        return pair;
  135|    259|    };
  136|       |
  137|    259|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    259|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    259|}
_ZN8opendnp316CountIndexParser4FromINS_10Group4Var2EEES0_tRKNS_9NumParserE:
  111|    524|{
  112|    524|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    524|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    524|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_10Group4Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    258|{
  129|    258|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    258|    {
  131|    258|        Indexed<typename Descriptor::Target> pair;
  132|    258|        pair.index = numparser.ReadNum(buffer);
  133|    258|        Descriptor::ReadTarget(buffer, pair.value);
  134|    258|        return pair;
  135|    258|    };
  136|       |
  137|    258|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    258|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    258|}
_ZN8opendnp316CountIndexParser4FromINS_10Group4Var3EEES0_tRKNS_9NumParserE:
  111|    523|{
  112|    523|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    523|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    523|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_10Group4Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    259|{
  129|    259|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    259|    {
  131|    259|        Indexed<typename Descriptor::Target> pair;
  132|    259|        pair.index = numparser.ReadNum(buffer);
  133|    259|        Descriptor::ReadTarget(buffer, pair.value);
  134|    259|        return pair;
  135|    259|    };
  136|       |
  137|    259|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    259|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    259|}
_ZN8opendnp316CountIndexParser4FromINS_11Group11Var1EEES0_tRKNS_9NumParserE:
  111|    333|{
  112|    333|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    333|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    333|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group11Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    163|{
  129|    163|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    163|    {
  131|    163|        Indexed<typename Descriptor::Target> pair;
  132|    163|        pair.index = numparser.ReadNum(buffer);
  133|    163|        Descriptor::ReadTarget(buffer, pair.value);
  134|    163|        return pair;
  135|    163|    };
  136|       |
  137|    163|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    163|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    163|}
_ZN8opendnp316CountIndexParser4FromINS_11Group11Var2EEES0_tRKNS_9NumParserE:
  111|    520|{
  112|    520|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    520|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    520|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group11Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    258|{
  129|    258|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    258|    {
  131|    258|        Indexed<typename Descriptor::Target> pair;
  132|    258|        pair.index = numparser.ReadNum(buffer);
  133|    258|        Descriptor::ReadTarget(buffer, pair.value);
  134|    258|        return pair;
  135|    258|    };
  136|       |
  137|    258|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    258|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    258|}
_ZN8opendnp316CountIndexParser4FromINS_11Group12Var1EEES0_tRKNS_9NumParserE:
  111|  3.58k|{
  112|  3.58k|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|  3.58k|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|  3.58k|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group12Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|  1.72k|{
  129|  1.72k|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|  1.72k|    {
  131|  1.72k|        Indexed<typename Descriptor::Target> pair;
  132|  1.72k|        pair.index = numparser.ReadNum(buffer);
  133|  1.72k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  1.72k|        return pair;
  135|  1.72k|    };
  136|       |
  137|  1.72k|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|  1.72k|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|  1.72k|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group12Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|  5.32k|    {
  131|  5.32k|        Indexed<typename Descriptor::Target> pair;
  132|  5.32k|        pair.index = numparser.ReadNum(buffer);
  133|  5.32k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  5.32k|        return pair;
  135|  5.32k|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group13Var1EEES0_tRKNS_9NumParserE:
  111|    544|{
  112|    544|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    544|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    544|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group13Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    268|{
  129|    268|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    268|    {
  131|    268|        Indexed<typename Descriptor::Target> pair;
  132|    268|        pair.index = numparser.ReadNum(buffer);
  133|    268|        Descriptor::ReadTarget(buffer, pair.value);
  134|    268|        return pair;
  135|    268|    };
  136|       |
  137|    268|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    268|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    268|}
_ZN8opendnp316CountIndexParser4FromINS_11Group13Var2EEES0_tRKNS_9NumParserE:
  111|    564|{
  112|    564|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    564|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    564|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group13Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    232|{
  129|    232|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    232|    {
  131|    232|        Indexed<typename Descriptor::Target> pair;
  132|    232|        pair.index = numparser.ReadNum(buffer);
  133|    232|        Descriptor::ReadTarget(buffer, pair.value);
  134|    232|        return pair;
  135|    232|    };
  136|       |
  137|    232|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    232|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    232|}
_ZN8opendnp316CountIndexParser4FromINS_11Group22Var1EEES0_tRKNS_9NumParserE:
  111|    393|{
  112|    393|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    393|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    393|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group22Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    194|{
  129|    194|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    194|    {
  131|    194|        Indexed<typename Descriptor::Target> pair;
  132|    194|        pair.index = numparser.ReadNum(buffer);
  133|    194|        Descriptor::ReadTarget(buffer, pair.value);
  134|    194|        return pair;
  135|    194|    };
  136|       |
  137|    194|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    194|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    194|}
_ZN8opendnp316CountIndexParser4FromINS_11Group22Var2EEES0_tRKNS_9NumParserE:
  111|    488|{
  112|    488|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    488|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    488|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group22Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    242|{
  129|    242|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    242|    {
  131|    242|        Indexed<typename Descriptor::Target> pair;
  132|    242|        pair.index = numparser.ReadNum(buffer);
  133|    242|        Descriptor::ReadTarget(buffer, pair.value);
  134|    242|        return pair;
  135|    242|    };
  136|       |
  137|    242|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    242|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    242|}
_ZN8opendnp316CountIndexParser4FromINS_11Group22Var5EEES0_tRKNS_9NumParserE:
  111|    614|{
  112|    614|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    614|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    614|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group22Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    292|{
  129|    292|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    292|    {
  131|    292|        Indexed<typename Descriptor::Target> pair;
  132|    292|        pair.index = numparser.ReadNum(buffer);
  133|    292|        Descriptor::ReadTarget(buffer, pair.value);
  134|    292|        return pair;
  135|    292|    };
  136|       |
  137|    292|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    292|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    292|}
_ZN8opendnp316CountIndexParser4FromINS_11Group22Var6EEES0_tRKNS_9NumParserE:
  111|    456|{
  112|    456|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    456|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    456|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group22Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    226|{
  129|    226|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    226|    {
  131|    226|        Indexed<typename Descriptor::Target> pair;
  132|    226|        pair.index = numparser.ReadNum(buffer);
  133|    226|        Descriptor::ReadTarget(buffer, pair.value);
  134|    226|        return pair;
  135|    226|    };
  136|       |
  137|    226|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    226|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    226|}
_ZN8opendnp316CountIndexParser4FromINS_11Group23Var1EEES0_tRKNS_9NumParserE:
  111|    452|{
  112|    452|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    452|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    452|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group23Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    197|{
  129|    197|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    197|    {
  131|    197|        Indexed<typename Descriptor::Target> pair;
  132|    197|        pair.index = numparser.ReadNum(buffer);
  133|    197|        Descriptor::ReadTarget(buffer, pair.value);
  134|    197|        return pair;
  135|    197|    };
  136|       |
  137|    197|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    197|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    197|}
_ZN8opendnp316CountIndexParser4FromINS_11Group23Var2EEES0_tRKNS_9NumParserE:
  111|    529|{
  112|    529|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    529|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    529|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group23Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    258|{
  129|    258|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    258|    {
  131|    258|        Indexed<typename Descriptor::Target> pair;
  132|    258|        pair.index = numparser.ReadNum(buffer);
  133|    258|        Descriptor::ReadTarget(buffer, pair.value);
  134|    258|        return pair;
  135|    258|    };
  136|       |
  137|    258|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    258|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    258|}
_ZN8opendnp316CountIndexParser4FromINS_11Group23Var5EEES0_tRKNS_9NumParserE:
  111|    525|{
  112|    525|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    525|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    525|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group23Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    260|{
  129|    260|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    260|    {
  131|    260|        Indexed<typename Descriptor::Target> pair;
  132|    260|        pair.index = numparser.ReadNum(buffer);
  133|    260|        Descriptor::ReadTarget(buffer, pair.value);
  134|    260|        return pair;
  135|    260|    };
  136|       |
  137|    260|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    260|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    260|}
_ZN8opendnp316CountIndexParser4FromINS_11Group23Var6EEES0_tRKNS_9NumParserE:
  111|    520|{
  112|    520|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    520|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    520|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group23Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    258|{
  129|    258|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    258|    {
  131|    258|        Indexed<typename Descriptor::Target> pair;
  132|    258|        pair.index = numparser.ReadNum(buffer);
  133|    258|        Descriptor::ReadTarget(buffer, pair.value);
  134|    258|        return pair;
  135|    258|    };
  136|       |
  137|    258|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    258|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    258|}
_ZN8opendnp316CountIndexParser4FromINS_11Group32Var1EEES0_tRKNS_9NumParserE:
  111|    392|{
  112|    392|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    392|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    392|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    194|{
  129|    194|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    194|    {
  131|    194|        Indexed<typename Descriptor::Target> pair;
  132|    194|        pair.index = numparser.ReadNum(buffer);
  133|    194|        Descriptor::ReadTarget(buffer, pair.value);
  134|    194|        return pair;
  135|    194|    };
  136|       |
  137|    194|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    194|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    194|}
_ZN8opendnp316CountIndexParser4FromINS_11Group32Var2EEES0_tRKNS_9NumParserE:
  111|    522|{
  112|    522|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    522|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    522|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    259|{
  129|    259|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    259|    {
  131|    259|        Indexed<typename Descriptor::Target> pair;
  132|    259|        pair.index = numparser.ReadNum(buffer);
  133|    259|        Descriptor::ReadTarget(buffer, pair.value);
  134|    259|        return pair;
  135|    259|    };
  136|       |
  137|    259|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    259|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    259|}
_ZN8opendnp316CountIndexParser4FromINS_11Group32Var3EEES0_tRKNS_9NumParserE:
  111|    504|{
  112|    504|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    504|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    504|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    250|{
  129|    250|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    250|    {
  131|    250|        Indexed<typename Descriptor::Target> pair;
  132|    250|        pair.index = numparser.ReadNum(buffer);
  133|    250|        Descriptor::ReadTarget(buffer, pair.value);
  134|    250|        return pair;
  135|    250|    };
  136|       |
  137|    250|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    250|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    250|}
_ZN8opendnp316CountIndexParser4FromINS_11Group32Var4EEES0_tRKNS_9NumParserE:
  111|    554|{
  112|    554|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    554|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    554|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    275|{
  129|    275|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    275|    {
  131|    275|        Indexed<typename Descriptor::Target> pair;
  132|    275|        pair.index = numparser.ReadNum(buffer);
  133|    275|        Descriptor::ReadTarget(buffer, pair.value);
  134|    275|        return pair;
  135|    275|    };
  136|       |
  137|    275|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    275|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    275|}
_ZN8opendnp316CountIndexParser4FromINS_11Group32Var5EEES0_tRKNS_9NumParserE:
  111|    520|{
  112|    520|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    520|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    520|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    258|{
  129|    258|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    258|    {
  131|    258|        Indexed<typename Descriptor::Target> pair;
  132|    258|        pair.index = numparser.ReadNum(buffer);
  133|    258|        Descriptor::ReadTarget(buffer, pair.value);
  134|    258|        return pair;
  135|    258|    };
  136|       |
  137|    258|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    258|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    258|}
_ZN8opendnp316CountIndexParser4FromINS_11Group32Var6EEES0_tRKNS_9NumParserE:
  111|    520|{
  112|    520|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    520|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    520|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    258|{
  129|    258|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    258|    {
  131|    258|        Indexed<typename Descriptor::Target> pair;
  132|    258|        pair.index = numparser.ReadNum(buffer);
  133|    258|        Descriptor::ReadTarget(buffer, pair.value);
  134|    258|        return pair;
  135|    258|    };
  136|       |
  137|    258|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    258|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    258|}
_ZN8opendnp316CountIndexParser4FromINS_11Group32Var7EEES0_tRKNS_9NumParserE:
  111|    522|{
  112|    522|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    522|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    522|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    258|{
  129|    258|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    258|    {
  131|    258|        Indexed<typename Descriptor::Target> pair;
  132|    258|        pair.index = numparser.ReadNum(buffer);
  133|    258|        Descriptor::ReadTarget(buffer, pair.value);
  134|    258|        return pair;
  135|    258|    };
  136|       |
  137|    258|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    258|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    258|}
_ZN8opendnp316CountIndexParser4FromINS_11Group32Var8EEES0_tRKNS_9NumParserE:
  111|    548|{
  112|    548|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    548|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    548|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    258|{
  129|    258|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    258|    {
  131|    258|        Indexed<typename Descriptor::Target> pair;
  132|    258|        pair.index = numparser.ReadNum(buffer);
  133|    258|        Descriptor::ReadTarget(buffer, pair.value);
  134|    258|        return pair;
  135|    258|    };
  136|       |
  137|    258|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    258|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    258|}
_ZN8opendnp316CountIndexParser4FromINS_11Group41Var1EEES0_tRKNS_9NumParserE:
  111|  3.68k|{
  112|  3.68k|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|  3.68k|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|  3.68k|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group41Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|  1.81k|{
  129|  1.81k|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|  1.81k|    {
  131|  1.81k|        Indexed<typename Descriptor::Target> pair;
  132|  1.81k|        pair.index = numparser.ReadNum(buffer);
  133|  1.81k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  1.81k|        return pair;
  135|  1.81k|    };
  136|       |
  137|  1.81k|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|  1.81k|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|  1.81k|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group41Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|  5.59k|    {
  131|  5.59k|        Indexed<typename Descriptor::Target> pair;
  132|  5.59k|        pair.index = numparser.ReadNum(buffer);
  133|  5.59k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  5.59k|        return pair;
  135|  5.59k|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group41Var2EEES0_tRKNS_9NumParserE:
  111|  5.46k|{
  112|  5.46k|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|  5.46k|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|  5.46k|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group41Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|  2.63k|{
  129|  2.63k|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|  2.63k|    {
  131|  2.63k|        Indexed<typename Descriptor::Target> pair;
  132|  2.63k|        pair.index = numparser.ReadNum(buffer);
  133|  2.63k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  2.63k|        return pair;
  135|  2.63k|    };
  136|       |
  137|  2.63k|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|  2.63k|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|  2.63k|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group41Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|  22.3k|    {
  131|  22.3k|        Indexed<typename Descriptor::Target> pair;
  132|  22.3k|        pair.index = numparser.ReadNum(buffer);
  133|  22.3k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  22.3k|        return pair;
  135|  22.3k|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group41Var3EEES0_tRKNS_9NumParserE:
  111|  4.12k|{
  112|  4.12k|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|  4.12k|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|  4.12k|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group41Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|  2.05k|{
  129|  2.05k|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|  2.05k|    {
  131|  2.05k|        Indexed<typename Descriptor::Target> pair;
  132|  2.05k|        pair.index = numparser.ReadNum(buffer);
  133|  2.05k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  2.05k|        return pair;
  135|  2.05k|    };
  136|       |
  137|  2.05k|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|  2.05k|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|  2.05k|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group41Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|  8.19k|    {
  131|  8.19k|        Indexed<typename Descriptor::Target> pair;
  132|  8.19k|        pair.index = numparser.ReadNum(buffer);
  133|  8.19k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  8.19k|        return pair;
  135|  8.19k|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group41Var4EEES0_tRKNS_9NumParserE:
  111|  4.22k|{
  112|  4.22k|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|  4.22k|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|  4.22k|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group41Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|  2.08k|{
  129|  2.08k|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|  2.08k|    {
  131|  2.08k|        Indexed<typename Descriptor::Target> pair;
  132|  2.08k|        pair.index = numparser.ReadNum(buffer);
  133|  2.08k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  2.08k|        return pair;
  135|  2.08k|    };
  136|       |
  137|  2.08k|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|  2.08k|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|  2.08k|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group41Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|  8.75k|    {
  131|  8.75k|        Indexed<typename Descriptor::Target> pair;
  132|  8.75k|        pair.index = numparser.ReadNum(buffer);
  133|  8.75k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  8.75k|        return pair;
  135|  8.75k|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group42Var1EEES0_tRKNS_9NumParserE:
  111|    648|{
  112|    648|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    648|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    648|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    321|{
  129|    321|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    321|    {
  131|    321|        Indexed<typename Descriptor::Target> pair;
  132|    321|        pair.index = numparser.ReadNum(buffer);
  133|    321|        Descriptor::ReadTarget(buffer, pair.value);
  134|    321|        return pair;
  135|    321|    };
  136|       |
  137|    321|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    321|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    321|}
_ZN8opendnp316CountIndexParser4FromINS_11Group42Var2EEES0_tRKNS_9NumParserE:
  111|    881|{
  112|    881|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    881|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    881|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    388|{
  129|    388|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    388|    {
  131|    388|        Indexed<typename Descriptor::Target> pair;
  132|    388|        pair.index = numparser.ReadNum(buffer);
  133|    388|        Descriptor::ReadTarget(buffer, pair.value);
  134|    388|        return pair;
  135|    388|    };
  136|       |
  137|    388|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    388|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    388|}
_ZN8opendnp316CountIndexParser4FromINS_11Group42Var3EEES0_tRKNS_9NumParserE:
  111|  1.04k|{
  112|  1.04k|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|  1.04k|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|  1.04k|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    414|{
  129|    414|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    414|    {
  131|    414|        Indexed<typename Descriptor::Target> pair;
  132|    414|        pair.index = numparser.ReadNum(buffer);
  133|    414|        Descriptor::ReadTarget(buffer, pair.value);
  134|    414|        return pair;
  135|    414|    };
  136|       |
  137|    414|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    414|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    414|}
_ZN8opendnp316CountIndexParser4FromINS_11Group42Var4EEES0_tRKNS_9NumParserE:
  111|    552|{
  112|    552|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    552|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    552|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    258|{
  129|    258|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    258|    {
  131|    258|        Indexed<typename Descriptor::Target> pair;
  132|    258|        pair.index = numparser.ReadNum(buffer);
  133|    258|        Descriptor::ReadTarget(buffer, pair.value);
  134|    258|        return pair;
  135|    258|    };
  136|       |
  137|    258|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    258|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    258|}
_ZN8opendnp316CountIndexParser4FromINS_11Group42Var5EEES0_tRKNS_9NumParserE:
  111|    562|{
  112|    562|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    562|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    562|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    266|{
  129|    266|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    266|    {
  131|    266|        Indexed<typename Descriptor::Target> pair;
  132|    266|        pair.index = numparser.ReadNum(buffer);
  133|    266|        Descriptor::ReadTarget(buffer, pair.value);
  134|    266|        return pair;
  135|    266|    };
  136|       |
  137|    266|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    266|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    266|}
_ZN8opendnp316CountIndexParser4FromINS_11Group42Var6EEES0_tRKNS_9NumParserE:
  111|    516|{
  112|    516|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    516|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    516|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    226|{
  129|    226|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    226|    {
  131|    226|        Indexed<typename Descriptor::Target> pair;
  132|    226|        pair.index = numparser.ReadNum(buffer);
  133|    226|        Descriptor::ReadTarget(buffer, pair.value);
  134|    226|        return pair;
  135|    226|    };
  136|       |
  137|    226|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    226|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    226|}
_ZN8opendnp316CountIndexParser4FromINS_11Group42Var7EEES0_tRKNS_9NumParserE:
  111|    456|{
  112|    456|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    456|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    456|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    226|{
  129|    226|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    226|    {
  131|    226|        Indexed<typename Descriptor::Target> pair;
  132|    226|        pair.index = numparser.ReadNum(buffer);
  133|    226|        Descriptor::ReadTarget(buffer, pair.value);
  134|    226|        return pair;
  135|    226|    };
  136|       |
  137|    226|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    226|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    226|}
_ZN8opendnp316CountIndexParser4FromINS_11Group42Var8EEES0_tRKNS_9NumParserE:
  111|    521|{
  112|    521|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    521|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    521|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    258|{
  129|    258|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    258|    {
  131|    258|        Indexed<typename Descriptor::Target> pair;
  132|    258|        pair.index = numparser.ReadNum(buffer);
  133|    258|        Descriptor::ReadTarget(buffer, pair.value);
  134|    258|        return pair;
  135|    258|    };
  136|       |
  137|    258|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    258|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    258|}
_ZN8opendnp316CountIndexParser4FromINS_11Group43Var1EEES0_tRKNS_9NumParserE:
  111|    393|{
  112|    393|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    393|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    393|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    194|{
  129|    194|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    194|    {
  131|    194|        Indexed<typename Descriptor::Target> pair;
  132|    194|        pair.index = numparser.ReadNum(buffer);
  133|    194|        Descriptor::ReadTarget(buffer, pair.value);
  134|    194|        return pair;
  135|    194|    };
  136|       |
  137|    194|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    194|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    194|}
_ZN8opendnp316CountIndexParser4FromINS_11Group43Var2EEES0_tRKNS_9NumParserE:
  111|    520|{
  112|    520|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    520|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    520|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    258|{
  129|    258|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    258|    {
  131|    258|        Indexed<typename Descriptor::Target> pair;
  132|    258|        pair.index = numparser.ReadNum(buffer);
  133|    258|        Descriptor::ReadTarget(buffer, pair.value);
  134|    258|        return pair;
  135|    258|    };
  136|       |
  137|    258|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    258|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    258|}
_ZN8opendnp316CountIndexParser4FromINS_11Group43Var3EEES0_tRKNS_9NumParserE:
  111|    522|{
  112|    522|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    522|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    522|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    259|{
  129|    259|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    259|    {
  131|    259|        Indexed<typename Descriptor::Target> pair;
  132|    259|        pair.index = numparser.ReadNum(buffer);
  133|    259|        Descriptor::ReadTarget(buffer, pair.value);
  134|    259|        return pair;
  135|    259|    };
  136|       |
  137|    259|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    259|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    259|}
_ZN8opendnp316CountIndexParser4FromINS_11Group43Var4EEES0_tRKNS_9NumParserE:
  111|    866|{
  112|    866|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    866|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    866|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    414|{
  129|    414|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    414|    {
  131|    414|        Indexed<typename Descriptor::Target> pair;
  132|    414|        pair.index = numparser.ReadNum(buffer);
  133|    414|        Descriptor::ReadTarget(buffer, pair.value);
  134|    414|        return pair;
  135|    414|    };
  136|       |
  137|    414|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    414|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    414|}
_ZN8opendnp316CountIndexParser4FromINS_11Group43Var5EEES0_tRKNS_9NumParserE:
  111|    425|{
  112|    425|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    425|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    425|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    199|{
  129|    199|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    199|    {
  131|    199|        Indexed<typename Descriptor::Target> pair;
  132|    199|        pair.index = numparser.ReadNum(buffer);
  133|    199|        Descriptor::ReadTarget(buffer, pair.value);
  134|    199|        return pair;
  135|    199|    };
  136|       |
  137|    199|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    199|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    199|}
_ZN8opendnp316CountIndexParser4FromINS_11Group43Var6EEES0_tRKNS_9NumParserE:
  111|    524|{
  112|    524|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    524|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    524|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    258|{
  129|    258|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    258|    {
  131|    258|        Indexed<typename Descriptor::Target> pair;
  132|    258|        pair.index = numparser.ReadNum(buffer);
  133|    258|        Descriptor::ReadTarget(buffer, pair.value);
  134|    258|        return pair;
  135|    258|    };
  136|       |
  137|    258|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    258|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    258|}
_ZN8opendnp316CountIndexParser4FromINS_11Group43Var7EEES0_tRKNS_9NumParserE:
  111|    522|{
  112|    522|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    522|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    522|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    259|{
  129|    259|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    259|    {
  131|    259|        Indexed<typename Descriptor::Target> pair;
  132|    259|        pair.index = numparser.ReadNum(buffer);
  133|    259|        Descriptor::ReadTarget(buffer, pair.value);
  134|    259|        return pair;
  135|    259|    };
  136|       |
  137|    259|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    259|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    259|}
_ZN8opendnp316CountIndexParser4FromINS_11Group43Var8EEES0_tRKNS_9NumParserE:
  111|    549|{
  112|    549|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    549|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    549|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    258|{
  129|    258|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    258|    {
  131|    258|        Indexed<typename Descriptor::Target> pair;
  132|    258|        pair.index = numparser.ReadNum(buffer);
  133|    258|        Descriptor::ReadTarget(buffer, pair.value);
  134|    258|        return pair;
  135|    258|    };
  136|       |
  137|    258|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    258|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    258|}
_ZN8opendnp316CountIndexParser4FromINS_11Group50Var4EEES0_tRKNS_9NumParserE:
  111|    578|{
  112|    578|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    578|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    578|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group50Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    269|{
  129|    269|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    269|    {
  131|    269|        Indexed<typename Descriptor::Target> pair;
  132|    269|        pair.index = numparser.ReadNum(buffer);
  133|    269|        Descriptor::ReadTarget(buffer, pair.value);
  134|    269|        return pair;
  135|    269|    };
  136|       |
  137|    269|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    269|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    269|}

_ZN8opendnp311CountParserC2EtmPFvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEE:
   30|  5.64k|    : count(count), required_size(required_size), handler(handler)
   31|  5.64k|{
   32|  5.64k|}
_ZNK8opendnp311CountParser7ProcessERKNS_12HeaderRecordERN7ser4cpp4RSeqImEEPNS_12IAPDUHandlerEPNS_6LoggerE:
   38|  5.64k|{
   39|  5.64k|    if (buffer.length() < required_size)
  ------------------
  |  Branch (39:9): [True: 58, False: 5.58k]
  ------------------
   40|     58|    {
   41|     58|        SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "Not enough data for specified objects");
  ------------------
  |  |   48|     58|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 58, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 58]
  |  |  ------------------
  |  |   49|     58|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
   42|     58|        return ParseResult::NOT_ENOUGH_DATA_FOR_OBJECTS;
   43|     58|    }
   44|       |
   45|  5.58k|    if (pHandler)
  ------------------
  |  Branch (45:9): [True: 2.73k, False: 2.85k]
  ------------------
   46|  2.73k|    {
   47|  2.73k|        handler(record, count, buffer, *pHandler);
   48|  2.73k|    }
   49|  5.58k|    buffer.advance(required_size);
   50|  5.58k|    return ParseResult::OK;
   51|  5.64k|}
_ZN8opendnp311CountParser11ParseHeaderERN7ser4cpp4RSeqImEERKNS_9NumParserERKNS_14ParserSettingsERKNS_12HeaderRecordEPNS_6LoggerEPNS_12IAPDUHandlerE:
   59|  8.75k|{
   60|  8.75k|    uint16_t count;
   61|  8.75k|    auto result = numParser.ParseCount(buffer, count, pLogger);
   62|  8.75k|    if (result == ParseResult::OK)
  ------------------
  |  Branch (62:9): [True: 8.73k, False: 20]
  ------------------
   63|  8.73k|    {
   64|  8.73k|        FORMAT_LOGGER_BLOCK(pLogger, settings.LoggingLevel(), "%03u,%03u %s, %s [%u]", record.group, record.variation,
  ------------------
  |  |   62|  8.73k|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 4.50k, False: 4.23k]
  |  |  |  Branch (62:9): [True: 0, False: 8.73k]
  |  |  |  Branch (62:20): [True: 0, False: 4.50k]
  |  |  ------------------
  |  |   63|  8.73k|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
   65|  8.73k|                            GroupVariationSpec::to_human_string(record.enumeration),
   66|  8.73k|                            QualifierCodeSpec::to_human_string(record.GetQualifierCode()), count);
   67|       |
   68|  8.73k|        if (settings.ExpectsContents())
  ------------------
  |  Branch (68:13): [True: 5.66k, False: 3.07k]
  ------------------
   69|  5.66k|        {
   70|  5.66k|            return ParseCountOfObjects(buffer, record, count, pLogger, pHandler);
   71|  5.66k|        }
   72|       |
   73|  3.07k|        if (pHandler)
  ------------------
  |  Branch (73:13): [True: 1.50k, False: 1.56k]
  ------------------
   74|  1.50k|        {
   75|  1.50k|            pHandler->OnHeader(CountHeader(record, count));
   76|  1.50k|        }
   77|       |
   78|  3.07k|        return ParseResult::OK;
   79|  8.73k|    }
   80|     20|    else
   81|     20|    {
   82|     20|        return result;
   83|     20|    }
   84|  8.75k|}
_ZN8opendnp311CountParser19ParseCountOfObjectsERN7ser4cpp4RSeqImEERKNS_12HeaderRecordEtPNS_6LoggerEPNS_12IAPDUHandlerE:
   88|  5.66k|{
   89|  5.66k|    switch (record.enumeration)
   90|  5.66k|    {
   91|  1.47k|    case (GroupVariation::Group50Var1):
  ------------------
  |  Branch (91:5): [True: 1.47k, False: 4.18k]
  ------------------
   92|  1.47k|        return CountParser::From<Group50Var1>(count).Process(record, buffer, pHandler, pLogger);
   93|       |
   94|  2.40k|    case (GroupVariation::Group50Var3):
  ------------------
  |  Branch (94:5): [True: 2.40k, False: 3.26k]
  ------------------
   95|  2.40k|        return CountParser::From<Group50Var3>(count).Process(record, buffer, pHandler, pLogger);
   96|       |
   97|    485|    case (GroupVariation::Group51Var1):
  ------------------
  |  Branch (97:5): [True: 485, False: 5.17k]
  ------------------
   98|    485|        return CountParser::From<Group51Var1>(count).Process(record, buffer, pHandler, pLogger);
   99|       |
  100|    423|    case (GroupVariation::Group51Var2):
  ------------------
  |  Branch (100:5): [True: 423, False: 5.24k]
  ------------------
  101|    423|        return CountParser::From<Group51Var2>(count).Process(record, buffer, pHandler, pLogger);
  102|       |
  103|    305|    case (GroupVariation::Group52Var1):
  ------------------
  |  Branch (103:5): [True: 305, False: 5.35k]
  ------------------
  104|    305|        return CountParser::From<Group52Var1>(count).Process(record, buffer, pHandler, pLogger);
  105|       |
  106|    546|    case (GroupVariation::Group52Var2):
  ------------------
  |  Branch (106:5): [True: 546, False: 5.11k]
  ------------------
  107|    546|        return CountParser::From<Group52Var2>(count).Process(record, buffer, pHandler, pLogger);
  108|       |
  109|     23|    default:
  ------------------
  |  Branch (109:5): [True: 23, False: 5.64k]
  ------------------
  110|     23|        FORMAT_LOGGER_BLOCK(pLogger, flags::WARN, "Unsupported qualifier/object - %s - %i / %i",
  ------------------
  |  |   62|     23|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 23, False: 0]
  |  |  |  Branch (62:20): [True: 0, False: 23]
  |  |  ------------------
  |  |   63|     23|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
  111|     23|                            QualifierCodeSpec::to_human_string(record.GetQualifierCode()), record.group,
  112|     23|                            record.variation);
  113|       |
  114|     23|        return ParseResult::INVALID_OBJECT_QUALIFIER;
  115|  5.66k|    }
  116|  5.66k|}

_ZN8opendnp311CountParser4FromINS_11Group50Var1EEES0_t:
   81|  1.47k|{
   82|  1.47k|    const auto size = static_cast<size_t>(count) * Descriptor::Size();
   83|  1.47k|    return CountParser(count, size, &InvokeCountOf<Descriptor>);
   84|  1.47k|}
_ZN8opendnp311CountParser13InvokeCountOfINS_11Group50Var1EEEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
   91|    721|{
   92|    721|    auto read = [](ser4cpp::rseq_t& buffer, uint32_t) -> T {
   93|    721|        T value;
   94|    721|        T::Read(buffer, value);
   95|    721|        return value;
   96|    721|    };
   97|       |
   98|    721|    auto collection = CreateBufferedCollection<T>(buffer, count, read);
   99|    721|    handler.OnHeader(CountHeader(record, count), collection);
  100|    721|}
_ZZN8opendnp311CountParser13InvokeCountOfINS_11Group50Var1EEEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRS8_jE_clESD_j:
   92|     31|    auto read = [](ser4cpp::rseq_t& buffer, uint32_t) -> T {
   93|     31|        T value;
   94|     31|        T::Read(buffer, value);
   95|     31|        return value;
   96|     31|    };
_ZN8opendnp311CountParser4FromINS_11Group50Var3EEES0_t:
   81|  2.40k|{
   82|  2.40k|    const auto size = static_cast<size_t>(count) * Descriptor::Size();
   83|  2.40k|    return CountParser(count, size, &InvokeCountOf<Descriptor>);
   84|  2.40k|}
_ZN8opendnp311CountParser13InvokeCountOfINS_11Group50Var3EEEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
   91|  1.18k|{
   92|  1.18k|    auto read = [](ser4cpp::rseq_t& buffer, uint32_t) -> T {
   93|  1.18k|        T value;
   94|  1.18k|        T::Read(buffer, value);
   95|  1.18k|        return value;
   96|  1.18k|    };
   97|       |
   98|  1.18k|    auto collection = CreateBufferedCollection<T>(buffer, count, read);
   99|  1.18k|    handler.OnHeader(CountHeader(record, count), collection);
  100|  1.18k|}
_ZZN8opendnp311CountParser13InvokeCountOfINS_11Group50Var3EEEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRS8_jE_clESD_j:
   92|    482|    auto read = [](ser4cpp::rseq_t& buffer, uint32_t) -> T {
   93|    482|        T value;
   94|    482|        T::Read(buffer, value);
   95|    482|        return value;
   96|    482|    };
_ZN8opendnp311CountParser4FromINS_11Group51Var1EEES0_t:
   81|    485|{
   82|    485|    const auto size = static_cast<size_t>(count) * Descriptor::Size();
   83|    485|    return CountParser(count, size, &InvokeCountOf<Descriptor>);
   84|    485|}
_ZN8opendnp311CountParser13InvokeCountOfINS_11Group51Var1EEEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
   91|    228|{
   92|    228|    auto read = [](ser4cpp::rseq_t& buffer, uint32_t) -> T {
   93|    228|        T value;
   94|    228|        T::Read(buffer, value);
   95|    228|        return value;
   96|    228|    };
   97|       |
   98|    228|    auto collection = CreateBufferedCollection<T>(buffer, count, read);
   99|    228|    handler.OnHeader(CountHeader(record, count), collection);
  100|    228|}
_ZN8opendnp311CountParser4FromINS_11Group51Var2EEES0_t:
   81|    423|{
   82|    423|    const auto size = static_cast<size_t>(count) * Descriptor::Size();
   83|    423|    return CountParser(count, size, &InvokeCountOf<Descriptor>);
   84|    423|}
_ZN8opendnp311CountParser13InvokeCountOfINS_11Group51Var2EEEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
   91|    196|{
   92|    196|    auto read = [](ser4cpp::rseq_t& buffer, uint32_t) -> T {
   93|    196|        T value;
   94|    196|        T::Read(buffer, value);
   95|    196|        return value;
   96|    196|    };
   97|       |
   98|    196|    auto collection = CreateBufferedCollection<T>(buffer, count, read);
   99|    196|    handler.OnHeader(CountHeader(record, count), collection);
  100|    196|}
_ZN8opendnp311CountParser4FromINS_11Group52Var1EEES0_t:
   81|    305|{
   82|    305|    const auto size = static_cast<size_t>(count) * Descriptor::Size();
   83|    305|    return CountParser(count, size, &InvokeCountOf<Descriptor>);
   84|    305|}
_ZN8opendnp311CountParser13InvokeCountOfINS_11Group52Var1EEEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
   91|    140|{
   92|    140|    auto read = [](ser4cpp::rseq_t& buffer, uint32_t) -> T {
   93|    140|        T value;
   94|    140|        T::Read(buffer, value);
   95|    140|        return value;
   96|    140|    };
   97|       |
   98|    140|    auto collection = CreateBufferedCollection<T>(buffer, count, read);
   99|    140|    handler.OnHeader(CountHeader(record, count), collection);
  100|    140|}
_ZN8opendnp311CountParser4FromINS_11Group52Var2EEES0_t:
   81|    546|{
   82|    546|    const auto size = static_cast<size_t>(count) * Descriptor::Size();
   83|    546|    return CountParser(count, size, &InvokeCountOf<Descriptor>);
   84|    546|}
_ZN8opendnp311CountParser13InvokeCountOfINS_11Group52Var2EEEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
   91|    258|{
   92|    258|    auto read = [](ser4cpp::rseq_t& buffer, uint32_t) -> T {
   93|    258|        T value;
   94|    258|        T::Read(buffer, value);
   95|    258|        return value;
   96|    258|    };
   97|       |
   98|    258|    auto collection = CreateBufferedCollection<T>(buffer, count, read);
   99|    258|    handler.OnHeader(CountHeader(record, count), collection);
  100|    258|}

_ZN7ser4cpp11serializers9write_oneIN8opendnp37DNPTimeEEEbRNS_4WSeqImEERKT_:
   34|  3.34k|    {
   35|  3.34k|        return UInt48::write_to(dest, UInt48Type(value.value));
   36|  3.34k|    }
_ZN7ser4cpp11serializers8read_oneIN8opendnp37DNPTimeEEEbRNS_4RSeqImEERT_:
   39|    513|    {
   40|    513|        UInt48Type temp;
   41|    513|        bool result = UInt48::read_from(input, temp);
   42|    513|        out.value = temp.Get();
   43|    513|        return result;
   44|    513|    }

_ZN8opendnp312IAPDUHandlerC2Ev:
   25|  8.81k|IAPDUHandler::IAPDUHandler() : numTotalHeaders(0), numIgnoredHeaders(0) {}
_ZNK8opendnp312IAPDUHandler6ErrorsEv:
   35|  6.26k|{
   36|  6.26k|    return errors;
   37|  6.26k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_16AllObjectsHeaderE:
   40|  58.2k|{
   41|  58.2k|    Record(header, this->ProcessHeader(header));
   42|  58.2k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11RangeHeaderE:
   45|  20.4k|{
   46|  20.4k|    Record(header, this->ProcessHeader(header));
   47|  20.4k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11CountHeaderE:
   50|  1.50k|{
   51|  1.50k|    Record(header, this->ProcessHeader(header));
   52|  1.50k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group50Var1EEE:
   55|    721|{
   56|    721|    Record(header, this->ProcessHeader(header, values));
   57|    721|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group50Var3EEE:
   60|  1.18k|{
   61|  1.18k|    Record(header, this->ProcessHeader(header, values));
   62|  1.18k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group51Var1EEE:
   65|    228|{
   66|    228|    Record(header, this->ProcessHeader(header, values));
   67|    228|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group51Var2EEE:
   70|    196|{
   71|    196|    Record(header, this->ProcessHeader(header, values));
   72|    196|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group52Var1EEE:
   75|    140|{
   76|    140|    Record(header, this->ProcessHeader(header, values));
   77|    140|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group52Var2EEE:
   80|    258|{
   81|    258|    Record(header, this->ProcessHeader(header, values));
   82|    258|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_8IINValueEEEEE:
   85|  1.08k|{
   86|  1.08k|    Record(header, this->ProcessHeader(header, values));
   87|  1.08k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_6BinaryEEEEE:
   90|    867|{
   91|    867|    Record(header, this->ProcessHeader(header, values));
   92|    867|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_15DoubleBitBinaryEEEEE:
   95|    687|{
   96|    687|    Record(header, this->ProcessHeader(header, values));
   97|    687|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_18BinaryOutputStatusEEEEE:
  100|    518|{
  101|    518|    Record(header, this->ProcessHeader(header, values));
  102|    518|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_7CounterEEEEE:
  105|    876|{
  106|    876|    Record(header, this->ProcessHeader(header, values));
  107|    876|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_13FrozenCounterEEEEE:
  110|  1.77k|{
  111|  1.77k|    Record(header, this->ProcessHeader(header, values));
  112|  1.77k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_6AnalogEEEEE:
  115|  1.67k|{
  116|  1.67k|    Record(header, this->ProcessHeader(header, values));
  117|  1.67k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_18AnalogOutputStatusEEEEE:
  120|  1.16k|{
  121|  1.16k|    Record(header, this->ProcessHeader(header, values));
  122|  1.16k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_11OctetStringEEEEE:
  125|    264|{
  126|    264|    Record(header, this->ProcessHeader(header, values));
  127|    264|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_15TimeAndIntervalEEEEE:
  130|    282|{
  131|    282|    Record(header, this->ProcessHeader(header, values));
  132|    282|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_6BinaryEEEEE:
  137|    713|{
  138|    713|    Record(header, this->ProcessHeader(header, values));
  139|    713|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_18BinaryOutputStatusEEEEE:
  142|    421|{
  143|    421|    Record(header, this->ProcessHeader(header, values));
  144|    421|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_15DoubleBitBinaryEEEEE:
  147|    776|{
  148|    776|    Record(header, this->ProcessHeader(header, values));
  149|    776|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_7CounterEEEEE:
  152|    954|{
  153|    954|    Record(header, this->ProcessHeader(header, values));
  154|    954|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_13FrozenCounterEEEEE:
  157|    973|{
  158|    973|    Record(header, this->ProcessHeader(header, values));
  159|    973|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_6AnalogEEEEE:
  162|  2.01k|{
  163|  2.01k|    Record(header, this->ProcessHeader(header, values));
  164|  2.01k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_18AnalogOutputStatusEEEEE:
  167|  2.35k|{
  168|  2.35k|    Record(header, this->ProcessHeader(header, values));
  169|  2.35k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_11OctetStringEEEEE:
  172|    238|{
  173|    238|    Record(header, this->ProcessHeader(header, values));
  174|    238|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_15TimeAndIntervalEEEEE:
  177|    269|{
  178|    269|    Record(header, this->ProcessHeader(header, values));
  179|    269|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_18BinaryCommandEventEEEEE:
  182|    500|{
  183|    500|    Record(header, this->ProcessHeader(header, values));
  184|    500|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_18AnalogCommandEventEEEEE:
  187|  2.09k|{
  188|  2.09k|    Record(header, this->ProcessHeader(header, values));
  189|  2.09k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionItEE:
  192|  20.8k|{
  193|  20.8k|    Record(header, this->ProcessHeader(header, values));
  194|  20.8k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_23ControlRelayOutputBlockEEEEE:
  199|  1.72k|{
  200|  1.72k|    Record(header, this->ProcessHeader(header, values));
  201|  1.72k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_17AnalogOutputInt16EEEEE:
  204|  2.63k|{
  205|  2.63k|    Record(header, this->ProcessHeader(header, values));
  206|  2.63k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_17AnalogOutputInt32EEEEE:
  209|  1.81k|{
  210|  1.81k|    Record(header, this->ProcessHeader(header, values));
  211|  1.81k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_19AnalogOutputFloat32EEEEE:
  214|  2.05k|{
  215|  2.05k|    Record(header, this->ProcessHeader(header, values));
  216|  2.05k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_20AnalogOutputDouble64EEEEE:
  219|  2.08k|{
  220|  2.08k|    Record(header, this->ProcessHeader(header, values));
  221|  2.08k|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_16AllObjectsHeaderE:
  224|    781|{
  225|    781|    return ProcessUnsupportedHeader();
  226|    781|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group51Var1EEE:
  251|    228|{
  252|    228|    return ProcessUnsupportedHeader();
  253|    228|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group51Var2EEE:
  256|    196|{
  257|    196|    return ProcessUnsupportedHeader();
  258|    196|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group52Var1EEE:
  261|    140|{
  262|    140|    return ProcessUnsupportedHeader();
  263|    140|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group52Var2EEE:
  266|    258|{
  267|    258|    return ProcessUnsupportedHeader();
  268|    258|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_6BinaryEEEEE:
  278|    867|{
  279|    867|    return ProcessUnsupportedHeader();
  280|    867|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_15DoubleBitBinaryEEEEE:
  284|    687|{
  285|    687|    return ProcessUnsupportedHeader();
  286|    687|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_18BinaryOutputStatusEEEEE:
  290|    518|{
  291|    518|    return ProcessUnsupportedHeader();
  292|    518|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_7CounterEEEEE:
  295|    876|{
  296|    876|    return ProcessUnsupportedHeader();
  297|    876|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_13FrozenCounterEEEEE:
  301|  1.77k|{
  302|  1.77k|    return ProcessUnsupportedHeader();
  303|  1.77k|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_6AnalogEEEEE:
  306|  1.67k|{
  307|  1.67k|    return ProcessUnsupportedHeader();
  308|  1.67k|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_18AnalogOutputStatusEEEEE:
  312|  1.16k|{
  313|  1.16k|    return ProcessUnsupportedHeader();
  314|  1.16k|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_11OctetStringEEEEE:
  317|    264|{
  318|    264|    return ProcessUnsupportedHeader();
  319|    264|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_15TimeAndIntervalEEEEE:
  323|    282|{
  324|    282|    return ProcessUnsupportedHeader();
  325|    282|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_7CounterEEEEE:
  330|    954|{
  331|    954|    return ProcessUnsupportedHeader();
  332|    954|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_13FrozenCounterEEEEE:
  336|    973|{
  337|    973|    return ProcessUnsupportedHeader();
  338|    973|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_6BinaryEEEEE:
  341|    713|{
  342|    713|    return ProcessUnsupportedHeader();
  343|    713|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_18BinaryOutputStatusEEEEE:
  347|    421|{
  348|    421|    return ProcessUnsupportedHeader();
  349|    421|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_15DoubleBitBinaryEEEEE:
  353|    776|{
  354|    776|    return ProcessUnsupportedHeader();
  355|    776|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_6AnalogEEEEE:
  358|  2.01k|{
  359|  2.01k|    return ProcessUnsupportedHeader();
  360|  2.01k|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_18AnalogOutputStatusEEEEE:
  364|  2.35k|{
  365|  2.35k|    return ProcessUnsupportedHeader();
  366|  2.35k|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_11OctetStringEEEEE:
  370|    238|{
  371|    238|    return ProcessUnsupportedHeader();
  372|    238|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_18BinaryCommandEventEEEEE:
  382|    500|{
  383|    500|    return ProcessUnsupportedHeader();
  384|    500|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_18AnalogCommandEventEEEEE:
  388|  2.09k|{
  389|  2.09k|    return ProcessUnsupportedHeader();
  390|  2.09k|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_23ControlRelayOutputBlockEEEEE:
  401|    196|{
  402|    196|    return ProcessUnsupportedHeader();
  403|    196|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_17AnalogOutputInt16EEEEE:
  407|    199|{
  408|    199|    return ProcessUnsupportedHeader();
  409|    199|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_17AnalogOutputInt32EEEEE:
  413|    196|{
  414|    196|    return ProcessUnsupportedHeader();
  415|    196|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_19AnalogOutputFloat32EEEEE:
  419|    258|{
  420|    258|    return ProcessUnsupportedHeader();
  421|    258|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_20AnalogOutputDouble64EEEEE:
  425|    198|{
  426|    198|    return ProcessUnsupportedHeader();
  427|    198|}

_ZN8opendnp312IAPDUHandler14OnHeaderResultERKNS_12HeaderRecordERKNS_8IINFieldE:
  168|   134k|    virtual void OnHeaderResult(const HeaderRecord& record, const IINField& result) {}
_ZN8opendnp312IAPDUHandler6RecordERKNS_12HeaderRecordERKNS_8IINFieldE:
  172|   134k|    {
  173|   134k|        errors |= result;
  174|   134k|        ++numTotalHeaders;
  175|   134k|        this->OnHeaderResult(record, result);
  176|   134k|    }
_ZN8opendnp312IAPDUHandler24ProcessUnsupportedHeaderEv:
  179|  21.8k|    {
  180|  21.8k|        ++numIgnoredHeaders;
  181|  21.8k|        return IINField(IINBit::FUNC_NOT_SUPPORTED);
  182|  21.8k|    }

_ZN8opendnp39NumParserC2EPFtRN7ser4cpp4RSeqImEEEh:
   31|   156k|NumParser::NumParser(ReadFun pReadFun, uint8_t size) : pReadFun(pReadFun), size(size) {}
_ZNK8opendnp39NumParser8NumBytesEv:
   34|  86.6k|{
   35|  86.6k|    return size;
   36|  86.6k|}
_ZNK8opendnp39NumParser10ParseCountERN7ser4cpp4RSeqImEERtPNS_6LoggerE:
   39|  95.4k|{
   40|  95.4k|    if (this->Read(count, buffer))
  ------------------
  |  Branch (40:9): [True: 95.4k, False: 68]
  ------------------
   41|  95.4k|    {
   42|  95.4k|        if (count == 0)
  ------------------
  |  Branch (42:13): [True: 5, False: 95.4k]
  ------------------
   43|      5|        {
   44|      5|            SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "count of 0");
  ------------------
  |  |   48|      5|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 5, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 5]
  |  |  ------------------
  |  |   49|      5|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
   45|      5|            return ParseResult::COUNT_OF_ZERO;
   46|      5|        }
   47|       |
   48|  95.4k|        return ParseResult::OK;
   49|  95.4k|    }
   50|     68|    else
   51|     68|    {
   52|     68|        SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "Not enough data for count");
  ------------------
  |  |   48|     68|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 68, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 68]
  |  |  ------------------
  |  |   49|     68|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
   53|     68|        return ParseResult::NOT_ENOUGH_DATA_FOR_RANGE;
   54|     68|    }
   55|  95.4k|}
_ZNK8opendnp39NumParser10ParseRangeERN7ser4cpp4RSeqImEERNS_5RangeEPNS_6LoggerE:
   58|  60.7k|{
   59|  60.7k|    if (buffer.length() < (2 * static_cast<size_t>(size)))
  ------------------
  |  Branch (59:9): [True: 52, False: 60.7k]
  ------------------
   60|     52|    {
   61|     52|        SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "Not enough data for start / stop");
  ------------------
  |  |   48|     52|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 52, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 52]
  |  |  ------------------
  |  |   49|     52|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
   62|     52|        return ParseResult::NOT_ENOUGH_DATA_FOR_RANGE;
   63|     52|    }
   64|       |
   65|  60.7k|    range.start = this->ReadNum(buffer);
   66|  60.7k|    range.stop = this->ReadNum(buffer);
   67|       |
   68|  60.7k|    if (range.IsValid())
  ------------------
  |  Branch (68:9): [True: 60.7k, False: 26]
  ------------------
   69|  60.7k|    {
   70|  60.7k|        return ParseResult::OK;
   71|  60.7k|    }
   72|       |
   73|     26|    FORMAT_LOGGER_BLOCK(pLogger, flags::WARN, "start (%u) > stop (%u)", range.start, range.stop);
  ------------------
  |  |   62|     26|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 26, False: 0]
  |  |  |  Branch (62:20): [True: 0, False: 26]
  |  |  ------------------
  |  |   63|     26|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
   74|     26|    return ParseResult::BAD_START_STOP;
   75|  60.7k|}
_ZNK8opendnp39NumParser7ReadNumERN7ser4cpp4RSeqImEE:
   78|   228k|{
   79|   228k|    return pReadFun(buffer);
   80|   228k|}
_ZNK8opendnp39NumParser4ReadERtRN7ser4cpp4RSeqImEE:
   83|  95.4k|{
   84|  95.4k|    if (buffer.length() < size)
  ------------------
  |  Branch (84:9): [True: 68, False: 95.4k]
  ------------------
   85|     68|    {
   86|     68|        return false;
   87|     68|    }
   88|       |
   89|  95.4k|    num = pReadFun(buffer);
   90|  95.4k|    return true;
   91|  95.4k|}
_ZN8opendnp39NumParser11ReadOneByteERN7ser4cpp4RSeqImEE:
   94|   292k|{
   95|   292k|    uint8_t result = 0;
   96|   292k|    ser4cpp::UInt8::read_from(buffer, result);
   97|   292k|    return result;
   98|   292k|}
_ZN8opendnp39NumParser12ReadTwoBytesERN7ser4cpp4RSeqImEE:
  101|  31.5k|{
  102|  31.5k|    uint16_t result = 0;
  103|  31.5k|    ser4cpp::UInt16::read_from(buffer, result);
  104|  31.5k|    return result;
  105|  31.5k|}
_ZN8opendnp39NumParser7OneByteEv:
  108|   142k|{
  109|   142k|    return NumParser(&ReadOneByte, 1);
  110|   142k|}
_ZN8opendnp39NumParser7TwoByteEv:
  113|  13.7k|{
  114|  13.7k|    return NumParser(&ReadTwoBytes, 2);
  115|  13.7k|}

_ZN8opendnp312ObjectHeaderC2Ev:
   32|   274k|ObjectHeader::ObjectHeader() : group(0), variation(0), qualifier(0) {}
_ZN8opendnp318ObjectHeaderParser17ParseObjectHeaderERNS_12ObjectHeaderERN7ser4cpp4RSeqImEEPNS_6LoggerE:
   35|   274k|{
   36|   274k|    if (buffer.length() < 3)
  ------------------
  |  Branch (36:9): [True: 188, False: 274k]
  ------------------
   37|    188|    {
   38|    188|        SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "Not enough data for header");
  ------------------
  |  |   48|    188|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 188, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 188]
  |  |  ------------------
  |  |   49|    188|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
   39|    188|        return ParseResult::NOT_ENOUGH_DATA_FOR_HEADER;
   40|    188|    }
   41|       |
   42|   274k|    ser4cpp::UInt8::read_from(buffer, header.group);
   43|   274k|    ser4cpp::UInt8::read_from(buffer, header.variation);
   44|   274k|    ser4cpp::UInt8::read_from(buffer, header.qualifier);
   45|   274k|    return ParseResult::OK;
   46|   274k|}

_ZN8opendnp314ParserSettings10NoContentsENS_8LogLevelE:
   32|  4.85k|    {
   33|  4.85k|        return ParserSettings(false, logLevel);
   34|  4.85k|    }
_ZN8opendnp314ParserSettingsC2EbNS_8LogLevelE:
   58|  8.81k|        : expectContents(expectContents_), logLevel(logLevel_)
   59|  8.81k|    {
   60|  8.81k|    }
_ZN8opendnp314ParserSettings7DefaultENS_8LogLevelE:
   37|  3.96k|    {
   38|  3.96k|        return ParserSettings(true, logLevel);
   39|  3.96k|    }
_ZNK8opendnp314ParserSettings15ExpectsContentsEv:
   47|   156k|    {
   48|   156k|        return expectContents;
   49|   156k|    }
_ZNK8opendnp314ParserSettings12LoggingLevelEv:
   52|   138k|    {
   53|   138k|        return logLevel;
   54|   138k|    }

_ZN8opendnp311RangeParserC2ERKNS_5RangeEmPFvRKNS_12HeaderRecordES3_RKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEE:
   37|  19.2k|    : range(range), requiredSize(requiredSize), handler(handler)
   38|  19.2k|{
   39|  19.2k|}
_ZN8opendnp311RangeParser11ParseHeaderERN7ser4cpp4RSeqImEERKNS_9NumParserERKNS_14ParserSettingsERKNS_12HeaderRecordEPNS_6LoggerEPNS_12IAPDUHandlerE:
   47|  60.7k|{
   48|  60.7k|    Range range;
   49|  60.7k|    auto res = numparser.ParseRange(buffer, range, pLogger);
   50|  60.7k|    if (res != ParseResult::OK)
  ------------------
  |  Branch (50:9): [True: 78, False: 60.7k]
  ------------------
   51|     78|    {
   52|     78|        return res;
   53|     78|    }
   54|       |
   55|  60.7k|    FORMAT_LOGGER_BLOCK(pLogger, settings.LoggingLevel(), "%03u,%03u %s, %s [%u, %u]", record.group, record.variation,
  ------------------
  |  |   62|  60.7k|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 31.1k, False: 29.5k]
  |  |  |  Branch (62:9): [True: 0, False: 60.7k]
  |  |  |  Branch (62:20): [True: 0, False: 31.1k]
  |  |  ------------------
  |  |   63|  60.7k|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
   56|  60.7k|                        GroupVariationSpec::to_human_string(record.enumeration),
   57|  60.7k|                        QualifierCodeSpec::to_human_string(record.GetQualifierCode()), range.start, range.stop);
   58|       |
   59|  60.7k|    if (settings.ExpectsContents())
  ------------------
  |  Branch (59:9): [True: 19.8k, False: 40.8k]
  ------------------
   60|  19.8k|    {
   61|  19.8k|        return ParseRangeOfObjects(buffer, record, range, pLogger, pHandler);
   62|  19.8k|    }
   63|       |
   64|  40.8k|    if (pHandler)
  ------------------
  |  Branch (64:9): [True: 20.4k, False: 20.4k]
  ------------------
   65|  20.4k|    {
   66|  20.4k|        pHandler->OnHeader(RangeHeader(record, range));
   67|  20.4k|    }
   68|  40.8k|    return ParseResult::OK;
   69|  60.7k|}
_ZNK8opendnp311RangeParser7ProcessERKNS_12HeaderRecordERN7ser4cpp4RSeqImEEPNS_12IAPDUHandlerEPNS_6LoggerE:
   75|  19.2k|{
   76|  19.2k|    if (buffer.length() < requiredSize)
  ------------------
  |  Branch (76:9): [True: 419, False: 18.8k]
  ------------------
   77|    419|    {
   78|    419|        SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "Not enough data for specified objects");
  ------------------
  |  |   48|    419|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 419, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 419]
  |  |  ------------------
  |  |   49|    419|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
   79|    419|        return ParseResult::NOT_ENOUGH_DATA_FOR_OBJECTS;
   80|    419|    }
   81|       |
   82|  18.8k|    if (pHandler)
  ------------------
  |  Branch (82:9): [True: 8.92k, False: 9.90k]
  ------------------
   83|  8.92k|    {
   84|  8.92k|        handler(record, range, buffer, *pHandler);
   85|  8.92k|    }
   86|  18.8k|    buffer.advance(requiredSize);
   87|  18.8k|    return ParseResult::OK;
   88|  19.2k|}
_ZN8opendnp311RangeParser19ParseRangeOfObjectsERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_5RangeEPNS_6LoggerEPNS_12IAPDUHandlerE:
   96|  19.8k|{
   97|  19.8k|    switch (record.enumeration)
   98|  19.8k|    {
   99|  1.33k|    case (GroupVariation::Group1Var1):
  ------------------
  |  Branch (99:5): [True: 1.33k, False: 18.5k]
  ------------------
  100|  1.33k|        return RangeParser::FromBitfieldType<Binary>(range).Process(record, buffer, pHandler, pLogger);
  101|       |
  102|    574|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group1Var2);
  ------------------
  |  |   91|    574|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 574, False: 19.2k]
  |  |  ------------------
  |  |   92|    574|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  103|       |
  104|    884|    case (GroupVariation::Group3Var1):
  ------------------
  |  Branch (104:5): [True: 884, False: 18.9k]
  ------------------
  105|    884|        return RangeParser::FromDoubleBitfieldType<DoubleBitBinary>(range).Process(record, buffer, pHandler, pLogger);
  106|    619|    case (GroupVariation::Group10Var1):
  ------------------
  |  Branch (106:5): [True: 619, False: 19.2k]
  ------------------
  107|    619|        return RangeParser::FromBitfieldType<BinaryOutputStatus>(range).Process(record, buffer, pHandler, pLogger);
  108|       |
  109|    607|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group3Var2);
  ------------------
  |  |   91|    607|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 607, False: 19.2k]
  |  |  ------------------
  |  |   92|    607|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  110|    531|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group10Var2);
  ------------------
  |  |   91|    531|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 531, False: 19.3k]
  |  |  ------------------
  |  |   92|    531|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  111|       |
  112|    428|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group20Var1);
  ------------------
  |  |   91|    428|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 428, False: 19.4k]
  |  |  ------------------
  |  |   92|    428|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  113|    469|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group20Var2);
  ------------------
  |  |   91|    469|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 469, False: 19.3k]
  |  |  ------------------
  |  |   92|    469|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  114|    540|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group20Var5);
  ------------------
  |  |   91|    540|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 540, False: 19.3k]
  |  |  ------------------
  |  |   92|    540|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  115|    519|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group20Var6);
  ------------------
  |  |   91|    519|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 519, False: 19.3k]
  |  |  ------------------
  |  |   92|    519|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  116|       |
  117|    562|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group21Var1);
  ------------------
  |  |   91|    562|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 562, False: 19.2k]
  |  |  ------------------
  |  |   92|    562|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  118|  1.03k|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group21Var2);
  ------------------
  |  |   91|  1.03k|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 1.03k, False: 18.8k]
  |  |  ------------------
  |  |   92|  1.03k|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  119|    572|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group21Var5);
  ------------------
  |  |   91|    572|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 572, False: 19.2k]
  |  |  ------------------
  |  |   92|    572|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  120|    607|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group21Var6);
  ------------------
  |  |   91|    607|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 607, False: 19.2k]
  |  |  ------------------
  |  |   92|    607|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  121|    559|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group21Var9);
  ------------------
  |  |   91|    559|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 559, False: 19.3k]
  |  |  ------------------
  |  |   92|    559|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  122|    527|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group21Var10);
  ------------------
  |  |   91|    527|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 527, False: 19.3k]
  |  |  ------------------
  |  |   92|    527|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  123|       |
  124|    466|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group30Var1);
  ------------------
  |  |   91|    466|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 466, False: 19.3k]
  |  |  ------------------
  |  |   92|    466|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  125|    855|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group30Var2);
  ------------------
  |  |   91|    855|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 855, False: 19.0k]
  |  |  ------------------
  |  |   92|    855|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  126|    563|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group30Var3);
  ------------------
  |  |   91|    563|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 563, False: 19.2k]
  |  |  ------------------
  |  |   92|    563|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  127|    570|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group30Var4);
  ------------------
  |  |   91|    570|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 570, False: 19.2k]
  |  |  ------------------
  |  |   92|    570|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  128|    538|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group30Var5);
  ------------------
  |  |   91|    538|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 538, False: 19.3k]
  |  |  ------------------
  |  |   92|    538|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  129|    582|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group30Var6);
  ------------------
  |  |   91|    582|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 582, False: 19.2k]
  |  |  ------------------
  |  |   92|    582|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  130|       |
  131|    567|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group40Var1);
  ------------------
  |  |   91|    567|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 567, False: 19.2k]
  |  |  ------------------
  |  |   92|    567|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  132|    828|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group40Var2);
  ------------------
  |  |   91|    828|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 828, False: 19.0k]
  |  |  ------------------
  |  |   92|    828|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  133|    546|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group40Var3);
  ------------------
  |  |   91|    546|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 546, False: 19.3k]
  |  |  ------------------
  |  |   92|    546|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  134|    542|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group40Var4);
  ------------------
  |  |   91|    542|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 542, False: 19.3k]
  |  |  ------------------
  |  |   92|    542|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  135|       |
  136|    605|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group50Var4);
  ------------------
  |  |   91|    605|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 605, False: 19.2k]
  |  |  ------------------
  |  |   92|    605|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  137|       |
  138|  2.22k|    case (GroupVariation::Group80Var1):
  ------------------
  |  Branch (138:5): [True: 2.22k, False: 17.6k]
  ------------------
  139|  2.22k|        return RangeParser::FromBitfieldType<IINValue>(range).Process(record, buffer, pHandler, pLogger);
  140|       |
  141|    579|    case (GroupVariation::Group110Var0):
  ------------------
  |  Branch (141:5): [True: 579, False: 19.2k]
  ------------------
  142|    579|        return ParseRangeOfOctetData(buffer, record, range, pLogger, pHandler);
  143|       |
  144|     29|    default:
  ------------------
  |  Branch (144:5): [True: 29, False: 19.8k]
  ------------------
  145|     29|        FORMAT_LOGGER_BLOCK(pLogger, flags::WARN, "Unsupported qualifier/object - %s - %i / %i",
  ------------------
  |  |   62|     29|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 29, False: 0]
  |  |  |  Branch (62:20): [True: 0, False: 29]
  |  |  ------------------
  |  |   63|     29|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
  146|     29|                            QualifierCodeSpec::to_human_string(record.GetQualifierCode()), record.group,
  147|     29|                            record.variation);
  148|       |
  149|     29|        return ParseResult::INVALID_OBJECT_QUALIFIER;
  150|  19.8k|    }
  151|  19.8k|}
_ZN8opendnp311RangeParser21ParseRangeOfOctetDataERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_5RangeEPNS_6LoggerEPNS_12IAPDUHandlerE:
  155|    579|{
  156|    579|    if (record.variation > 0)
  ------------------
  |  Branch (156:9): [True: 578, False: 1]
  ------------------
  157|    578|    {
  158|    578|        const auto COUNT = range.Count();
  159|    578|        auto size = record.variation * COUNT;
  160|    578|        if (buffer.length() < size)
  ------------------
  |  Branch (160:13): [True: 27, False: 551]
  ------------------
  161|     27|        {
  162|     27|            SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "Not enough data for specified octet objects");
  ------------------
  |  |   48|     27|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 27, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 27]
  |  |  ------------------
  |  |   49|     27|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
  163|     27|            return ParseResult::NOT_ENOUGH_DATA_FOR_OBJECTS;
  164|     27|        }
  165|       |
  166|    551|        if (pHandler)
  ------------------
  |  Branch (166:13): [True: 264, False: 287]
  ------------------
  167|    264|        {
  168|    264|            auto read = [range, record](ser4cpp::rseq_t& buffer, uint32_t pos) -> Indexed<OctetString> {
  169|    264|                const auto octetData = buffer.take(record.variation);
  170|    264|                OctetString octets(Buffer(octetData, octetData.length()));
  171|    264|                buffer.advance(record.variation);
  172|    264|                return WithIndex(octets, range.start + pos);
  173|    264|            };
  174|       |
  175|    264|            auto collection = CreateBufferedCollection<Indexed<OctetString>>(buffer, COUNT, read);
  176|       |
  177|    264|            pHandler->OnHeader(RangeHeader(record, range), collection);
  178|    264|        }
  179|       |
  180|    551|        buffer.advance(size);
  181|    551|        return ParseResult::OK;
  182|    578|    }
  183|      1|    else
  184|      1|    {
  185|      1|        SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "Octet string variation 0 may only be used in requests");
  ------------------
  |  |   48|      1|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 1, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 1]
  |  |  ------------------
  |  |   49|      1|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
  186|      1|        return ParseResult::INVALID_OBJECT;
  187|      1|    }
  188|    579|}

_ZN8opendnp311RangeParser16FromBitfieldTypeINS_6BinaryEEES0_RKNS_5RangeE:
  166|  1.33k|{
  167|  1.33k|    const auto SIZE = NumBytesInBits(range.Count());
  168|  1.33k|    return RangeParser(range, SIZE, &InvokeRangeBitfieldType<Type>);
  169|  1.33k|}
_ZN8opendnp311RangeParser23InvokeRangeBitfieldTypeINS_6BinaryEEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  176|    596|{
  177|    596|    const auto COUNT = range.Count();
  178|       |
  179|    596|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) -> Indexed<Type> {
  180|    596|        Type value(GetBit(buffer, pos));
  181|    596|        return WithIndex(value, range.start + pos);
  182|    596|    };
  183|       |
  184|    596|    auto collection = CreateBufferedCollection<Indexed<Type>>(buffer, COUNT, read);
  185|       |
  186|    596|    handler.OnHeader(RangeHeader(record, range), collection);
  187|    596|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_10Group1Var2EEES0_RKNS_5RangeE:
  116|    574|{
  117|    574|    const auto size = range.Count() * Descriptor::Size();
  118|    574|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    574|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_10Group1Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    271|{
  133|    271|    const auto COUNT = range.Count();
  134|       |
  135|    271|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    271|        typename Descriptor::Target target;
  137|    271|        Descriptor::ReadTarget(buffer, target);
  138|    271|        return WithIndex(target, range.start + pos);
  139|    271|    };
  140|       |
  141|    271|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    271|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    271|}
_ZN8opendnp311RangeParser22FromDoubleBitfieldTypeINS_15DoubleBitBinaryEEES0_RKNS_5RangeE:
  190|    884|{
  191|    884|    const auto size = NumBytesInDoubleBits(range.Count());
  192|    884|    return RangeParser(range, size, &InvokeRangeDoubleBitfieldType<Type>);
  193|    884|}
_ZN8opendnp311RangeParser29InvokeRangeDoubleBitfieldTypeINS_15DoubleBitBinaryEEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  200|    422|{
  201|    422|    const auto COUNT = range.Count();
  202|       |
  203|    422|    auto read = [range](ser4cpp::rseq_t& buffer, size_t pos) -> Indexed<Type> {
  204|    422|        Type value(GetDoubleBit(buffer, pos));
  205|    422|        return WithIndex(value, static_cast<uint16_t>(range.start + pos));
  206|    422|    };
  207|       |
  208|    422|    auto collection = CreateBufferedCollection<Indexed<Type>>(buffer, COUNT, read);
  209|       |
  210|    422|    handler.OnHeader(RangeHeader(record, range), collection);
  211|    422|}
_ZN8opendnp311RangeParser16FromBitfieldTypeINS_18BinaryOutputStatusEEES0_RKNS_5RangeE:
  166|    619|{
  167|    619|    const auto SIZE = NumBytesInBits(range.Count());
  168|    619|    return RangeParser(range, SIZE, &InvokeRangeBitfieldType<Type>);
  169|    619|}
_ZN8opendnp311RangeParser23InvokeRangeBitfieldTypeINS_18BinaryOutputStatusEEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  176|    289|{
  177|    289|    const auto COUNT = range.Count();
  178|       |
  179|    289|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) -> Indexed<Type> {
  180|    289|        Type value(GetBit(buffer, pos));
  181|    289|        return WithIndex(value, range.start + pos);
  182|    289|    };
  183|       |
  184|    289|    auto collection = CreateBufferedCollection<Indexed<Type>>(buffer, COUNT, read);
  185|       |
  186|    289|    handler.OnHeader(RangeHeader(record, range), collection);
  187|    289|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_10Group3Var2EEES0_RKNS_5RangeE:
  116|    607|{
  117|    607|    const auto size = range.Count() * Descriptor::Size();
  118|    607|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    607|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_10Group3Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    265|{
  133|    265|    const auto COUNT = range.Count();
  134|       |
  135|    265|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    265|        typename Descriptor::Target target;
  137|    265|        Descriptor::ReadTarget(buffer, target);
  138|    265|        return WithIndex(target, range.start + pos);
  139|    265|    };
  140|       |
  141|    265|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    265|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    265|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group10Var2EEES0_RKNS_5RangeE:
  116|    531|{
  117|    531|    const auto size = range.Count() * Descriptor::Size();
  118|    531|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    531|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group10Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    229|{
  133|    229|    const auto COUNT = range.Count();
  134|       |
  135|    229|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    229|        typename Descriptor::Target target;
  137|    229|        Descriptor::ReadTarget(buffer, target);
  138|    229|        return WithIndex(target, range.start + pos);
  139|    229|    };
  140|       |
  141|    229|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    229|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    229|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group20Var1EEES0_RKNS_5RangeE:
  116|    428|{
  117|    428|    const auto size = range.Count() * Descriptor::Size();
  118|    428|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    428|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group20Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    200|{
  133|    200|    const auto COUNT = range.Count();
  134|       |
  135|    200|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    200|        typename Descriptor::Target target;
  137|    200|        Descriptor::ReadTarget(buffer, target);
  138|    200|        return WithIndex(target, range.start + pos);
  139|    200|    };
  140|       |
  141|    200|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    200|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    200|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group20Var2EEES0_RKNS_5RangeE:
  116|    469|{
  117|    469|    const auto size = range.Count() * Descriptor::Size();
  118|    469|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    469|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group20Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    223|{
  133|    223|    const auto COUNT = range.Count();
  134|       |
  135|    223|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    223|        typename Descriptor::Target target;
  137|    223|        Descriptor::ReadTarget(buffer, target);
  138|    223|        return WithIndex(target, range.start + pos);
  139|    223|    };
  140|       |
  141|    223|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    223|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    223|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group20Var5EEES0_RKNS_5RangeE:
  116|    540|{
  117|    540|    const auto size = range.Count() * Descriptor::Size();
  118|    540|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    540|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group20Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    227|{
  133|    227|    const auto COUNT = range.Count();
  134|       |
  135|    227|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    227|        typename Descriptor::Target target;
  137|    227|        Descriptor::ReadTarget(buffer, target);
  138|    227|        return WithIndex(target, range.start + pos);
  139|    227|    };
  140|       |
  141|    227|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    227|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    227|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group20Var6EEES0_RKNS_5RangeE:
  116|    519|{
  117|    519|    const auto size = range.Count() * Descriptor::Size();
  118|    519|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    519|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group20Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    226|{
  133|    226|    const auto COUNT = range.Count();
  134|       |
  135|    226|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    226|        typename Descriptor::Target target;
  137|    226|        Descriptor::ReadTarget(buffer, target);
  138|    226|        return WithIndex(target, range.start + pos);
  139|    226|    };
  140|       |
  141|    226|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    226|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    226|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group21Var1EEES0_RKNS_5RangeE:
  116|    562|{
  117|    562|    const auto size = range.Count() * Descriptor::Size();
  118|    562|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    562|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group21Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    259|{
  133|    259|    const auto COUNT = range.Count();
  134|       |
  135|    259|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    259|        typename Descriptor::Target target;
  137|    259|        Descriptor::ReadTarget(buffer, target);
  138|    259|        return WithIndex(target, range.start + pos);
  139|    259|    };
  140|       |
  141|    259|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    259|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    259|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group21Var2EEES0_RKNS_5RangeE:
  116|  1.03k|{
  117|  1.03k|    const auto size = range.Count() * Descriptor::Size();
  118|  1.03k|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|  1.03k|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group21Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    474|{
  133|    474|    const auto COUNT = range.Count();
  134|       |
  135|    474|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    474|        typename Descriptor::Target target;
  137|    474|        Descriptor::ReadTarget(buffer, target);
  138|    474|        return WithIndex(target, range.start + pos);
  139|    474|    };
  140|       |
  141|    474|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    474|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    474|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group21Var5EEES0_RKNS_5RangeE:
  116|    572|{
  117|    572|    const auto size = range.Count() * Descriptor::Size();
  118|    572|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    572|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group21Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    267|{
  133|    267|    const auto COUNT = range.Count();
  134|       |
  135|    267|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    267|        typename Descriptor::Target target;
  137|    267|        Descriptor::ReadTarget(buffer, target);
  138|    267|        return WithIndex(target, range.start + pos);
  139|    267|    };
  140|       |
  141|    267|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    267|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    267|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group21Var6EEES0_RKNS_5RangeE:
  116|    607|{
  117|    607|    const auto size = range.Count() * Descriptor::Size();
  118|    607|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    607|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group21Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    262|{
  133|    262|    const auto COUNT = range.Count();
  134|       |
  135|    262|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    262|        typename Descriptor::Target target;
  137|    262|        Descriptor::ReadTarget(buffer, target);
  138|    262|        return WithIndex(target, range.start + pos);
  139|    262|    };
  140|       |
  141|    262|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    262|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    262|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group21Var9EEES0_RKNS_5RangeE:
  116|    559|{
  117|    559|    const auto size = range.Count() * Descriptor::Size();
  118|    559|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    559|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group21Var9EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    263|{
  133|    263|    const auto COUNT = range.Count();
  134|       |
  135|    263|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    263|        typename Descriptor::Target target;
  137|    263|        Descriptor::ReadTarget(buffer, target);
  138|    263|        return WithIndex(target, range.start + pos);
  139|    263|    };
  140|       |
  141|    263|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    263|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    263|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_12Group21Var10EEES0_RKNS_5RangeE:
  116|    527|{
  117|    527|    const auto size = range.Count() * Descriptor::Size();
  118|    527|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    527|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_12Group21Var10EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    247|{
  133|    247|    const auto COUNT = range.Count();
  134|       |
  135|    247|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    247|        typename Descriptor::Target target;
  137|    247|        Descriptor::ReadTarget(buffer, target);
  138|    247|        return WithIndex(target, range.start + pos);
  139|    247|    };
  140|       |
  141|    247|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    247|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    247|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group30Var1EEES0_RKNS_5RangeE:
  116|    466|{
  117|    466|    const auto size = range.Count() * Descriptor::Size();
  118|    466|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    466|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group30Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    211|{
  133|    211|    const auto COUNT = range.Count();
  134|       |
  135|    211|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    211|        typename Descriptor::Target target;
  137|    211|        Descriptor::ReadTarget(buffer, target);
  138|    211|        return WithIndex(target, range.start + pos);
  139|    211|    };
  140|       |
  141|    211|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    211|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    211|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group30Var2EEES0_RKNS_5RangeE:
  116|    855|{
  117|    855|    const auto size = range.Count() * Descriptor::Size();
  118|    855|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    855|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group30Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    413|{
  133|    413|    const auto COUNT = range.Count();
  134|       |
  135|    413|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    413|        typename Descriptor::Target target;
  137|    413|        Descriptor::ReadTarget(buffer, target);
  138|    413|        return WithIndex(target, range.start + pos);
  139|    413|    };
  140|       |
  141|    413|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    413|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    413|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group30Var3EEES0_RKNS_5RangeE:
  116|    563|{
  117|    563|    const auto size = range.Count() * Descriptor::Size();
  118|    563|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    563|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group30Var3EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    259|{
  133|    259|    const auto COUNT = range.Count();
  134|       |
  135|    259|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    259|        typename Descriptor::Target target;
  137|    259|        Descriptor::ReadTarget(buffer, target);
  138|    259|        return WithIndex(target, range.start + pos);
  139|    259|    };
  140|       |
  141|    259|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    259|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    259|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group30Var4EEES0_RKNS_5RangeE:
  116|    570|{
  117|    570|    const auto size = range.Count() * Descriptor::Size();
  118|    570|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    570|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group30Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    267|{
  133|    267|    const auto COUNT = range.Count();
  134|       |
  135|    267|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    267|        typename Descriptor::Target target;
  137|    267|        Descriptor::ReadTarget(buffer, target);
  138|    267|        return WithIndex(target, range.start + pos);
  139|    267|    };
  140|       |
  141|    267|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    267|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    267|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group30Var5EEES0_RKNS_5RangeE:
  116|    538|{
  117|    538|    const auto size = range.Count() * Descriptor::Size();
  118|    538|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    538|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group30Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    247|{
  133|    247|    const auto COUNT = range.Count();
  134|       |
  135|    247|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    247|        typename Descriptor::Target target;
  137|    247|        Descriptor::ReadTarget(buffer, target);
  138|    247|        return WithIndex(target, range.start + pos);
  139|    247|    };
  140|       |
  141|    247|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    247|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    247|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group30Var6EEES0_RKNS_5RangeE:
  116|    582|{
  117|    582|    const auto size = range.Count() * Descriptor::Size();
  118|    582|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    582|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group30Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    279|{
  133|    279|    const auto COUNT = range.Count();
  134|       |
  135|    279|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    279|        typename Descriptor::Target target;
  137|    279|        Descriptor::ReadTarget(buffer, target);
  138|    279|        return WithIndex(target, range.start + pos);
  139|    279|    };
  140|       |
  141|    279|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    279|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    279|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group40Var1EEES0_RKNS_5RangeE:
  116|    567|{
  117|    567|    const auto size = range.Count() * Descriptor::Size();
  118|    567|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    567|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group40Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    262|{
  133|    262|    const auto COUNT = range.Count();
  134|       |
  135|    262|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    262|        typename Descriptor::Target target;
  137|    262|        Descriptor::ReadTarget(buffer, target);
  138|    262|        return WithIndex(target, range.start + pos);
  139|    262|    };
  140|       |
  141|    262|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    262|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    262|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group40Var2EEES0_RKNS_5RangeE:
  116|    828|{
  117|    828|    const auto size = range.Count() * Descriptor::Size();
  118|    828|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    828|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group40Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    395|{
  133|    395|    const auto COUNT = range.Count();
  134|       |
  135|    395|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    395|        typename Descriptor::Target target;
  137|    395|        Descriptor::ReadTarget(buffer, target);
  138|    395|        return WithIndex(target, range.start + pos);
  139|    395|    };
  140|       |
  141|    395|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    395|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    395|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group40Var3EEES0_RKNS_5RangeE:
  116|    546|{
  117|    546|    const auto size = range.Count() * Descriptor::Size();
  118|    546|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    546|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group40Var3EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    265|{
  133|    265|    const auto COUNT = range.Count();
  134|       |
  135|    265|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    265|        typename Descriptor::Target target;
  137|    265|        Descriptor::ReadTarget(buffer, target);
  138|    265|        return WithIndex(target, range.start + pos);
  139|    265|    };
  140|       |
  141|    265|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    265|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    265|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group40Var4EEES0_RKNS_5RangeE:
  116|    542|{
  117|    542|    const auto size = range.Count() * Descriptor::Size();
  118|    542|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    542|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group40Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    245|{
  133|    245|    const auto COUNT = range.Count();
  134|       |
  135|    245|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    245|        typename Descriptor::Target target;
  137|    245|        Descriptor::ReadTarget(buffer, target);
  138|    245|        return WithIndex(target, range.start + pos);
  139|    245|    };
  140|       |
  141|    245|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    245|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    245|}
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group50Var4EEES0_RKNS_5RangeE:
  116|    605|{
  117|    605|    const auto size = range.Count() * Descriptor::Size();
  118|    605|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    605|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group50Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    282|{
  133|    282|    const auto COUNT = range.Count();
  134|       |
  135|    282|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    282|        typename Descriptor::Target target;
  137|    282|        Descriptor::ReadTarget(buffer, target);
  138|    282|        return WithIndex(target, range.start + pos);
  139|    282|    };
  140|       |
  141|    282|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    282|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    282|}
_ZN8opendnp311RangeParser16FromBitfieldTypeINS_8IINValueEEES0_RKNS_5RangeE:
  166|  2.22k|{
  167|  2.22k|    const auto SIZE = NumBytesInBits(range.Count());
  168|  2.22k|    return RangeParser(range, SIZE, &InvokeRangeBitfieldType<Type>);
  169|  2.22k|}
_ZN8opendnp311RangeParser23InvokeRangeBitfieldTypeINS_8IINValueEEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  176|  1.08k|{
  177|  1.08k|    const auto COUNT = range.Count();
  178|       |
  179|  1.08k|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) -> Indexed<Type> {
  180|  1.08k|        Type value(GetBit(buffer, pos));
  181|  1.08k|        return WithIndex(value, range.start + pos);
  182|  1.08k|    };
  183|       |
  184|  1.08k|    auto collection = CreateBufferedCollection<Indexed<Type>>(buffer, COUNT, read);
  185|       |
  186|  1.08k|    handler.OnHeader(RangeHeader(record, range), collection);
  187|  1.08k|}
_ZZN8opendnp311RangeParser23InvokeRangeBitfieldTypeINS_8IINValueEEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  179|    733|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) -> Indexed<Type> {
  180|    733|        Type value(GetBit(buffer, pos));
  181|    733|        return WithIndex(value, range.start + pos);
  182|    733|    };

_ZN8opendnp317CommandStatusSpec7to_typeENS_13CommandStatusE:
   38|  34.5k|{
   39|  34.5k|  return static_cast<uint8_t>(arg);
   40|  34.5k|}
_ZN8opendnp317CommandStatusSpec9from_typeEh:
   43|  50.2k|{
   44|  50.2k|  switch(arg)
   45|  50.2k|  {
   46|  7.36k|    case(0):
  ------------------
  |  Branch (46:5): [True: 7.36k, False: 42.8k]
  ------------------
   47|  7.36k|      return CommandStatus::SUCCESS;
   48|  4.86k|    case(1):
  ------------------
  |  Branch (48:5): [True: 4.86k, False: 45.3k]
  ------------------
   49|  4.86k|      return CommandStatus::TIMEOUT;
   50|  3.86k|    case(2):
  ------------------
  |  Branch (50:5): [True: 3.86k, False: 46.3k]
  ------------------
   51|  3.86k|      return CommandStatus::NO_SELECT;
   52|  3.11k|    case(3):
  ------------------
  |  Branch (52:5): [True: 3.11k, False: 47.0k]
  ------------------
   53|  3.11k|      return CommandStatus::FORMAT_ERROR;
   54|  2.10k|    case(4):
  ------------------
  |  Branch (54:5): [True: 2.10k, False: 48.1k]
  ------------------
   55|  2.10k|      return CommandStatus::NOT_SUPPORTED;
   56|  1.27k|    case(5):
  ------------------
  |  Branch (56:5): [True: 1.27k, False: 48.9k]
  ------------------
   57|  1.27k|      return CommandStatus::ALREADY_ACTIVE;
   58|  3.23k|    case(6):
  ------------------
  |  Branch (58:5): [True: 3.23k, False: 46.9k]
  ------------------
   59|  3.23k|      return CommandStatus::HARDWARE_ERROR;
   60|    522|    case(7):
  ------------------
  |  Branch (60:5): [True: 522, False: 49.6k]
  ------------------
   61|    522|      return CommandStatus::LOCAL;
   62|    685|    case(8):
  ------------------
  |  Branch (62:5): [True: 685, False: 49.5k]
  ------------------
   63|    685|      return CommandStatus::TOO_MANY_OPS;
   64|    710|    case(9):
  ------------------
  |  Branch (64:5): [True: 710, False: 49.4k]
  ------------------
   65|    710|      return CommandStatus::NOT_AUTHORIZED;
   66|    829|    case(10):
  ------------------
  |  Branch (66:5): [True: 829, False: 49.3k]
  ------------------
   67|    829|      return CommandStatus::AUTOMATION_INHIBIT;
   68|    495|    case(11):
  ------------------
  |  Branch (68:5): [True: 495, False: 49.7k]
  ------------------
   69|    495|      return CommandStatus::PROCESSING_LIMITED;
   70|    602|    case(12):
  ------------------
  |  Branch (70:5): [True: 602, False: 49.6k]
  ------------------
   71|    602|      return CommandStatus::OUT_OF_RANGE;
   72|    432|    case(13):
  ------------------
  |  Branch (72:5): [True: 432, False: 49.7k]
  ------------------
   73|    432|      return CommandStatus::DOWNSTREAM_LOCAL;
   74|    282|    case(14):
  ------------------
  |  Branch (74:5): [True: 282, False: 49.9k]
  ------------------
   75|    282|      return CommandStatus::ALREADY_COMPLETE;
   76|    524|    case(15):
  ------------------
  |  Branch (76:5): [True: 524, False: 49.6k]
  ------------------
   77|    524|      return CommandStatus::BLOCKED;
   78|    307|    case(16):
  ------------------
  |  Branch (78:5): [True: 307, False: 49.9k]
  ------------------
   79|    307|      return CommandStatus::CANCELLED;
   80|    296|    case(17):
  ------------------
  |  Branch (80:5): [True: 296, False: 49.9k]
  ------------------
   81|    296|      return CommandStatus::BLOCKED_OTHER_MASTER;
   82|    510|    case(18):
  ------------------
  |  Branch (82:5): [True: 510, False: 49.6k]
  ------------------
   83|    510|      return CommandStatus::DOWNSTREAM_FAIL;
   84|    401|    case(126):
  ------------------
  |  Branch (84:5): [True: 401, False: 49.8k]
  ------------------
   85|    401|      return CommandStatus::NON_PARTICIPATING;
   86|  17.7k|    default:
  ------------------
  |  Branch (86:5): [True: 17.7k, False: 32.4k]
  ------------------
   87|  17.7k|      return CommandStatus::UNDEFINED;
   88|  50.2k|  }
   89|  50.2k|}

_ZN8opendnp316FunctionCodeSpec7to_typeENS_12FunctionCodeE:
   38|  8.37k|{
   39|  8.37k|  return static_cast<uint8_t>(arg);
   40|  8.37k|}
_ZN8opendnp316FunctionCodeSpec9from_typeEh:
   43|  8.87k|{
   44|  8.87k|  switch(arg)
   45|  8.87k|  {
   46|      1|    case(0x0):
  ------------------
  |  Branch (46:5): [True: 1, False: 8.87k]
  ------------------
   47|      1|      return FunctionCode::CONFIRM;
   48|  4.71k|    case(0x1):
  ------------------
  |  Branch (48:5): [True: 4.71k, False: 4.15k]
  ------------------
   49|  4.71k|      return FunctionCode::READ;
   50|  2.57k|    case(0x2):
  ------------------
  |  Branch (50:5): [True: 2.57k, False: 6.29k]
  ------------------
   51|  2.57k|      return FunctionCode::WRITE;
   52|    366|    case(0x3):
  ------------------
  |  Branch (52:5): [True: 366, False: 8.51k]
  ------------------
   53|    366|      return FunctionCode::SELECT;
   54|    343|    case(0x4):
  ------------------
  |  Branch (54:5): [True: 343, False: 8.53k]
  ------------------
   55|    343|      return FunctionCode::OPERATE;
   56|    267|    case(0x5):
  ------------------
  |  Branch (56:5): [True: 267, False: 8.61k]
  ------------------
   57|    267|      return FunctionCode::DIRECT_OPERATE;
   58|    424|    case(0x6):
  ------------------
  |  Branch (58:5): [True: 424, False: 8.45k]
  ------------------
   59|    424|      return FunctionCode::DIRECT_OPERATE_NR;
   60|     21|    case(0x7):
  ------------------
  |  Branch (60:5): [True: 21, False: 8.85k]
  ------------------
   61|     21|      return FunctionCode::IMMED_FREEZE;
   62|     34|    case(0x8):
  ------------------
  |  Branch (62:5): [True: 34, False: 8.84k]
  ------------------
   63|     34|      return FunctionCode::IMMED_FREEZE_NR;
   64|     59|    case(0x9):
  ------------------
  |  Branch (64:5): [True: 59, False: 8.81k]
  ------------------
   65|     59|      return FunctionCode::FREEZE_CLEAR;
   66|     20|    case(0xA):
  ------------------
  |  Branch (66:5): [True: 20, False: 8.85k]
  ------------------
   67|     20|      return FunctionCode::FREEZE_CLEAR_NR;
   68|      1|    case(0xB):
  ------------------
  |  Branch (68:5): [True: 1, False: 8.87k]
  ------------------
   69|      1|      return FunctionCode::FREEZE_AT_TIME;
   70|      1|    case(0xC):
  ------------------
  |  Branch (70:5): [True: 1, False: 8.87k]
  ------------------
   71|      1|      return FunctionCode::FREEZE_AT_TIME_NR;
   72|      6|    case(0xD):
  ------------------
  |  Branch (72:5): [True: 6, False: 8.87k]
  ------------------
   73|      6|      return FunctionCode::COLD_RESTART;
   74|      3|    case(0xE):
  ------------------
  |  Branch (74:5): [True: 3, False: 8.87k]
  ------------------
   75|      3|      return FunctionCode::WARM_RESTART;
   76|      1|    case(0xF):
  ------------------
  |  Branch (76:5): [True: 1, False: 8.87k]
  ------------------
   77|      1|      return FunctionCode::INITIALIZE_DATA;
   78|      1|    case(0x10):
  ------------------
  |  Branch (78:5): [True: 1, False: 8.87k]
  ------------------
   79|      1|      return FunctionCode::INITIALIZE_APPLICATION;
   80|      1|    case(0x11):
  ------------------
  |  Branch (80:5): [True: 1, False: 8.87k]
  ------------------
   81|      1|      return FunctionCode::START_APPLICATION;
   82|      1|    case(0x12):
  ------------------
  |  Branch (82:5): [True: 1, False: 8.87k]
  ------------------
   83|      1|      return FunctionCode::STOP_APPLICATION;
   84|      1|    case(0x13):
  ------------------
  |  Branch (84:5): [True: 1, False: 8.87k]
  ------------------
   85|      1|      return FunctionCode::SAVE_CONFIGURATION;
   86|      1|    case(0x14):
  ------------------
  |  Branch (86:5): [True: 1, False: 8.87k]
  ------------------
   87|      1|      return FunctionCode::ENABLE_UNSOLICITED;
   88|      1|    case(0x15):
  ------------------
  |  Branch (88:5): [True: 1, False: 8.87k]
  ------------------
   89|      1|      return FunctionCode::DISABLE_UNSOLICITED;
   90|      1|    case(0x16):
  ------------------
  |  Branch (90:5): [True: 1, False: 8.87k]
  ------------------
   91|      1|      return FunctionCode::ASSIGN_CLASS;
   92|      2|    case(0x17):
  ------------------
  |  Branch (92:5): [True: 2, False: 8.87k]
  ------------------
   93|      2|      return FunctionCode::DELAY_MEASURE;
   94|      8|    case(0x18):
  ------------------
  |  Branch (94:5): [True: 8, False: 8.86k]
  ------------------
   95|      8|      return FunctionCode::RECORD_CURRENT_TIME;
   96|      1|    case(0x19):
  ------------------
  |  Branch (96:5): [True: 1, False: 8.87k]
  ------------------
   97|      1|      return FunctionCode::OPEN_FILE;
   98|      1|    case(0x1A):
  ------------------
  |  Branch (98:5): [True: 1, False: 8.87k]
  ------------------
   99|      1|      return FunctionCode::CLOSE_FILE;
  100|      1|    case(0x1B):
  ------------------
  |  Branch (100:5): [True: 1, False: 8.87k]
  ------------------
  101|      1|      return FunctionCode::DELETE_FILE;
  102|      1|    case(0x1C):
  ------------------
  |  Branch (102:5): [True: 1, False: 8.87k]
  ------------------
  103|      1|      return FunctionCode::GET_FILE_INFO;
  104|      1|    case(0x1D):
  ------------------
  |  Branch (104:5): [True: 1, False: 8.87k]
  ------------------
  105|      1|      return FunctionCode::AUTHENTICATE_FILE;
  106|      2|    case(0x1E):
  ------------------
  |  Branch (106:5): [True: 2, False: 8.87k]
  ------------------
  107|      2|      return FunctionCode::ABORT_FILE;
  108|      1|    case(0x20):
  ------------------
  |  Branch (108:5): [True: 1, False: 8.87k]
  ------------------
  109|      1|      return FunctionCode::AUTH_REQUEST;
  110|      2|    case(0x21):
  ------------------
  |  Branch (110:5): [True: 2, False: 8.87k]
  ------------------
  111|      2|      return FunctionCode::AUTH_REQUEST_NO_ACK;
  112|      1|    case(0x81):
  ------------------
  |  Branch (112:5): [True: 1, False: 8.87k]
  ------------------
  113|      1|      return FunctionCode::RESPONSE;
  114|      2|    case(0x82):
  ------------------
  |  Branch (114:5): [True: 2, False: 8.87k]
  ------------------
  115|      2|      return FunctionCode::UNSOLICITED_RESPONSE;
  116|      1|    case(0x83):
  ------------------
  |  Branch (116:5): [True: 1, False: 8.87k]
  ------------------
  117|      1|      return FunctionCode::AUTH_RESPONSE;
  118|      2|    default:
  ------------------
  |  Branch (118:5): [True: 2, False: 8.87k]
  ------------------
  119|      2|      return FunctionCode::UNKNOWN;
  120|  8.87k|  }
  121|  8.87k|}

_ZN8opendnp318GroupVariationSpec9from_typeEt:
   43|   274k|{
   44|   274k|  switch(arg)
   45|   274k|  {
   46|  6.17k|    case(0x100):
  ------------------
  |  Branch (46:5): [True: 6.17k, False: 268k]
  ------------------
   47|  6.17k|      return GroupVariation::Group1Var0;
   48|  6.27k|    case(0x101):
  ------------------
  |  Branch (48:5): [True: 6.27k, False: 267k]
  ------------------
   49|  6.27k|      return GroupVariation::Group1Var1;
   50|  4.79k|    case(0x102):
  ------------------
  |  Branch (50:5): [True: 4.79k, False: 269k]
  ------------------
   51|  4.79k|      return GroupVariation::Group1Var2;
   52|    610|    case(0x200):
  ------------------
  |  Branch (52:5): [True: 610, False: 273k]
  ------------------
   53|    610|      return GroupVariation::Group2Var0;
   54|  1.21k|    case(0x201):
  ------------------
  |  Branch (54:5): [True: 1.21k, False: 273k]
  ------------------
   55|  1.21k|      return GroupVariation::Group2Var1;
   56|  1.34k|    case(0x202):
  ------------------
  |  Branch (56:5): [True: 1.34k, False: 272k]
  ------------------
   57|  1.34k|      return GroupVariation::Group2Var2;
   58|  1.33k|    case(0x203):
  ------------------
  |  Branch (58:5): [True: 1.33k, False: 272k]
  ------------------
   59|  1.33k|      return GroupVariation::Group2Var3;
   60|  4.19k|    case(0x300):
  ------------------
  |  Branch (60:5): [True: 4.19k, False: 270k]
  ------------------
   61|  4.19k|      return GroupVariation::Group3Var0;
   62|  1.28k|    case(0x301):
  ------------------
  |  Branch (62:5): [True: 1.28k, False: 272k]
  ------------------
   63|  1.28k|      return GroupVariation::Group3Var1;
   64|  5.28k|    case(0x302):
  ------------------
  |  Branch (64:5): [True: 5.28k, False: 268k]
  ------------------
   65|  5.28k|      return GroupVariation::Group3Var2;
   66|  1.29k|    case(0x400):
  ------------------
  |  Branch (66:5): [True: 1.29k, False: 272k]
  ------------------
   67|  1.29k|      return GroupVariation::Group4Var0;
   68|  1.19k|    case(0x401):
  ------------------
  |  Branch (68:5): [True: 1.19k, False: 273k]
  ------------------
   69|  1.19k|      return GroupVariation::Group4Var1;
   70|  1.08k|    case(0x402):
  ------------------
  |  Branch (70:5): [True: 1.08k, False: 273k]
  ------------------
   71|  1.08k|      return GroupVariation::Group4Var2;
   72|  1.41k|    case(0x403):
  ------------------
  |  Branch (72:5): [True: 1.41k, False: 272k]
  ------------------
   73|  1.41k|      return GroupVariation::Group4Var3;
   74|  4.68k|    case(0xA00):
  ------------------
  |  Branch (74:5): [True: 4.68k, False: 269k]
  ------------------
   75|  4.68k|      return GroupVariation::Group10Var0;
   76|  1.75k|    case(0xA01):
  ------------------
  |  Branch (76:5): [True: 1.75k, False: 272k]
  ------------------
   77|  1.75k|      return GroupVariation::Group10Var1;
   78|  5.93k|    case(0xA02):
  ------------------
  |  Branch (78:5): [True: 5.93k, False: 268k]
  ------------------
   79|  5.93k|      return GroupVariation::Group10Var2;
   80|    741|    case(0xB00):
  ------------------
  |  Branch (80:5): [True: 741, False: 273k]
  ------------------
   81|    741|      return GroupVariation::Group11Var0;
   82|  2.00k|    case(0xB01):
  ------------------
  |  Branch (82:5): [True: 2.00k, False: 272k]
  ------------------
   83|  2.00k|      return GroupVariation::Group11Var1;
   84|  1.21k|    case(0xB02):
  ------------------
  |  Branch (84:5): [True: 1.21k, False: 273k]
  ------------------
   85|  1.21k|      return GroupVariation::Group11Var2;
   86|    221|    case(0xC00):
  ------------------
  |  Branch (86:5): [True: 221, False: 273k]
  ------------------
   87|    221|      return GroupVariation::Group12Var0;
   88|  3.76k|    case(0xC01):
  ------------------
  |  Branch (88:5): [True: 3.76k, False: 270k]
  ------------------
   89|  3.76k|      return GroupVariation::Group12Var1;
   90|    815|    case(0xD01):
  ------------------
  |  Branch (90:5): [True: 815, False: 273k]
  ------------------
   91|    815|      return GroupVariation::Group13Var1;
   92|    777|    case(0xD02):
  ------------------
  |  Branch (92:5): [True: 777, False: 273k]
  ------------------
   93|    777|      return GroupVariation::Group13Var2;
   94|  6.19k|    case(0x1400):
  ------------------
  |  Branch (94:5): [True: 6.19k, False: 268k]
  ------------------
   95|  6.19k|      return GroupVariation::Group20Var0;
   96|  6.06k|    case(0x1401):
  ------------------
  |  Branch (96:5): [True: 6.06k, False: 268k]
  ------------------
   97|  6.06k|      return GroupVariation::Group20Var1;
   98|  5.34k|    case(0x1402):
  ------------------
  |  Branch (98:5): [True: 5.34k, False: 268k]
  ------------------
   99|  5.34k|      return GroupVariation::Group20Var2;
  100|  5.00k|    case(0x1405):
  ------------------
  |  Branch (100:5): [True: 5.00k, False: 269k]
  ------------------
  101|  5.00k|      return GroupVariation::Group20Var5;
  102|  4.06k|    case(0x1406):
  ------------------
  |  Branch (102:5): [True: 4.06k, False: 270k]
  ------------------
  103|  4.06k|      return GroupVariation::Group20Var6;
  104|  4.77k|    case(0x1500):
  ------------------
  |  Branch (104:5): [True: 4.77k, False: 269k]
  ------------------
  105|  4.77k|      return GroupVariation::Group21Var0;
  106|  4.66k|    case(0x1501):
  ------------------
  |  Branch (106:5): [True: 4.66k, False: 269k]
  ------------------
  107|  4.66k|      return GroupVariation::Group21Var1;
  108|  5.36k|    case(0x1502):
  ------------------
  |  Branch (108:5): [True: 5.36k, False: 268k]
  ------------------
  109|  5.36k|      return GroupVariation::Group21Var2;
  110|  5.19k|    case(0x1505):
  ------------------
  |  Branch (110:5): [True: 5.19k, False: 269k]
  ------------------
  111|  5.19k|      return GroupVariation::Group21Var5;
  112|  5.46k|    case(0x1506):
  ------------------
  |  Branch (112:5): [True: 5.46k, False: 268k]
  ------------------
  113|  5.46k|      return GroupVariation::Group21Var6;
  114|  4.41k|    case(0x1509):
  ------------------
  |  Branch (114:5): [True: 4.41k, False: 269k]
  ------------------
  115|  4.41k|      return GroupVariation::Group21Var9;
  116|  4.71k|    case(0x150A):
  ------------------
  |  Branch (116:5): [True: 4.71k, False: 269k]
  ------------------
  117|  4.71k|      return GroupVariation::Group21Var10;
  118|  1.22k|    case(0x1600):
  ------------------
  |  Branch (118:5): [True: 1.22k, False: 272k]
  ------------------
  119|  1.22k|      return GroupVariation::Group22Var0;
  120|  1.69k|    case(0x1601):
  ------------------
  |  Branch (120:5): [True: 1.69k, False: 272k]
  ------------------
  121|  1.69k|      return GroupVariation::Group22Var1;
  122|  1.18k|    case(0x1602):
  ------------------
  |  Branch (122:5): [True: 1.18k, False: 273k]
  ------------------
  123|  1.18k|      return GroupVariation::Group22Var2;
  124|  1.61k|    case(0x1605):
  ------------------
  |  Branch (124:5): [True: 1.61k, False: 272k]
  ------------------
  125|  1.61k|      return GroupVariation::Group22Var5;
  126|  1.04k|    case(0x1606):
  ------------------
  |  Branch (126:5): [True: 1.04k, False: 273k]
  ------------------
  127|  1.04k|      return GroupVariation::Group22Var6;
  128|  1.68k|    case(0x1700):
  ------------------
  |  Branch (128:5): [True: 1.68k, False: 272k]
  ------------------
  129|  1.68k|      return GroupVariation::Group23Var0;
  130|  4.01k|    case(0x1701):
  ------------------
  |  Branch (130:5): [True: 4.01k, False: 270k]
  ------------------
  131|  4.01k|      return GroupVariation::Group23Var1;
  132|  1.23k|    case(0x1702):
  ------------------
  |  Branch (132:5): [True: 1.23k, False: 272k]
  ------------------
  133|  1.23k|      return GroupVariation::Group23Var2;
  134|  1.14k|    case(0x1705):
  ------------------
  |  Branch (134:5): [True: 1.14k, False: 273k]
  ------------------
  135|  1.14k|      return GroupVariation::Group23Var5;
  136|  1.20k|    case(0x1706):
  ------------------
  |  Branch (136:5): [True: 1.20k, False: 273k]
  ------------------
  137|  1.20k|      return GroupVariation::Group23Var6;
  138|  5.17k|    case(0x1E00):
  ------------------
  |  Branch (138:5): [True: 5.17k, False: 269k]
  ------------------
  139|  5.17k|      return GroupVariation::Group30Var0;
  140|  4.86k|    case(0x1E01):
  ------------------
  |  Branch (140:5): [True: 4.86k, False: 269k]
  ------------------
  141|  4.86k|      return GroupVariation::Group30Var1;
  142|  5.33k|    case(0x1E02):
  ------------------
  |  Branch (142:5): [True: 5.33k, False: 268k]
  ------------------
  143|  5.33k|      return GroupVariation::Group30Var2;
  144|  4.36k|    case(0x1E03):
  ------------------
  |  Branch (144:5): [True: 4.36k, False: 269k]
  ------------------
  145|  4.36k|      return GroupVariation::Group30Var3;
  146|  4.37k|    case(0x1E04):
  ------------------
  |  Branch (146:5): [True: 4.37k, False: 269k]
  ------------------
  147|  4.37k|      return GroupVariation::Group30Var4;
  148|  4.71k|    case(0x1E05):
  ------------------
  |  Branch (148:5): [True: 4.71k, False: 269k]
  ------------------
  149|  4.71k|      return GroupVariation::Group30Var5;
  150|  4.31k|    case(0x1E06):
  ------------------
  |  Branch (150:5): [True: 4.31k, False: 269k]
  ------------------
  151|  4.31k|      return GroupVariation::Group30Var6;
  152|    584|    case(0x2000):
  ------------------
  |  Branch (152:5): [True: 584, False: 273k]
  ------------------
  153|    584|      return GroupVariation::Group32Var0;
  154|  1.10k|    case(0x2001):
  ------------------
  |  Branch (154:5): [True: 1.10k, False: 273k]
  ------------------
  155|  1.10k|      return GroupVariation::Group32Var1;
  156|  1.22k|    case(0x2002):
  ------------------
  |  Branch (156:5): [True: 1.22k, False: 272k]
  ------------------
  157|  1.22k|      return GroupVariation::Group32Var2;
  158|  1.09k|    case(0x2003):
  ------------------
  |  Branch (158:5): [True: 1.09k, False: 273k]
  ------------------
  159|  1.09k|      return GroupVariation::Group32Var3;
  160|  1.08k|    case(0x2004):
  ------------------
  |  Branch (160:5): [True: 1.08k, False: 273k]
  ------------------
  161|  1.08k|      return GroupVariation::Group32Var4;
  162|    951|    case(0x2005):
  ------------------
  |  Branch (162:5): [True: 951, False: 273k]
  ------------------
  163|    951|      return GroupVariation::Group32Var5;
  164|  1.09k|    case(0x2006):
  ------------------
  |  Branch (164:5): [True: 1.09k, False: 273k]
  ------------------
  165|  1.09k|      return GroupVariation::Group32Var6;
  166|    978|    case(0x2007):
  ------------------
  |  Branch (166:5): [True: 978, False: 273k]
  ------------------
  167|    978|      return GroupVariation::Group32Var7;
  168|  1.10k|    case(0x2008):
  ------------------
  |  Branch (168:5): [True: 1.10k, False: 273k]
  ------------------
  169|  1.10k|      return GroupVariation::Group32Var8;
  170|  4.72k|    case(0x2800):
  ------------------
  |  Branch (170:5): [True: 4.72k, False: 269k]
  ------------------
  171|  4.72k|      return GroupVariation::Group40Var0;
  172|  6.93k|    case(0x2801):
  ------------------
  |  Branch (172:5): [True: 6.93k, False: 267k]
  ------------------
  173|  6.93k|      return GroupVariation::Group40Var1;
  174|  5.09k|    case(0x2802):
  ------------------
  |  Branch (174:5): [True: 5.09k, False: 269k]
  ------------------
  175|  5.09k|      return GroupVariation::Group40Var2;
  176|  4.85k|    case(0x2803):
  ------------------
  |  Branch (176:5): [True: 4.85k, False: 269k]
  ------------------
  177|  4.85k|      return GroupVariation::Group40Var3;
  178|  4.54k|    case(0x2804):
  ------------------
  |  Branch (178:5): [True: 4.54k, False: 269k]
  ------------------
  179|  4.54k|      return GroupVariation::Group40Var4;
  180|    279|    case(0x2900):
  ------------------
  |  Branch (180:5): [True: 279, False: 273k]
  ------------------
  181|    279|      return GroupVariation::Group41Var0;
  182|  3.96k|    case(0x2901):
  ------------------
  |  Branch (182:5): [True: 3.96k, False: 270k]
  ------------------
  183|  3.96k|      return GroupVariation::Group41Var1;
  184|  5.73k|    case(0x2902):
  ------------------
  |  Branch (184:5): [True: 5.73k, False: 268k]
  ------------------
  185|  5.73k|      return GroupVariation::Group41Var2;
  186|  4.32k|    case(0x2903):
  ------------------
  |  Branch (186:5): [True: 4.32k, False: 269k]
  ------------------
  187|  4.32k|      return GroupVariation::Group41Var3;
  188|  4.41k|    case(0x2904):
  ------------------
  |  Branch (188:5): [True: 4.41k, False: 269k]
  ------------------
  189|  4.41k|      return GroupVariation::Group41Var4;
  190|    921|    case(0x2A00):
  ------------------
  |  Branch (190:5): [True: 921, False: 273k]
  ------------------
  191|    921|      return GroupVariation::Group42Var0;
  192|  1.64k|    case(0x2A01):
  ------------------
  |  Branch (192:5): [True: 1.64k, False: 272k]
  ------------------
  193|  1.64k|      return GroupVariation::Group42Var1;
  194|  1.54k|    case(0x2A02):
  ------------------
  |  Branch (194:5): [True: 1.54k, False: 272k]
  ------------------
  195|  1.54k|      return GroupVariation::Group42Var2;
  196|  1.83k|    case(0x2A03):
  ------------------
  |  Branch (196:5): [True: 1.83k, False: 272k]
  ------------------
  197|  1.83k|      return GroupVariation::Group42Var3;
  198|  1.15k|    case(0x2A04):
  ------------------
  |  Branch (198:5): [True: 1.15k, False: 273k]
  ------------------
  199|  1.15k|      return GroupVariation::Group42Var4;
  200|  1.08k|    case(0x2A05):
  ------------------
  |  Branch (200:5): [True: 1.08k, False: 273k]
  ------------------
  201|  1.08k|      return GroupVariation::Group42Var5;
  202|  1.08k|    case(0x2A06):
  ------------------
  |  Branch (202:5): [True: 1.08k, False: 273k]
  ------------------
  203|  1.08k|      return GroupVariation::Group42Var6;
  204|  1.16k|    case(0x2A07):
  ------------------
  |  Branch (204:5): [True: 1.16k, False: 273k]
  ------------------
  205|  1.16k|      return GroupVariation::Group42Var7;
  206|  1.06k|    case(0x2A08):
  ------------------
  |  Branch (206:5): [True: 1.06k, False: 273k]
  ------------------
  207|  1.06k|      return GroupVariation::Group42Var8;
  208|    577|    case(0x2B01):
  ------------------
  |  Branch (208:5): [True: 577, False: 273k]
  ------------------
  209|    577|      return GroupVariation::Group43Var1;
  210|    723|    case(0x2B02):
  ------------------
  |  Branch (210:5): [True: 723, False: 273k]
  ------------------
  211|    723|      return GroupVariation::Group43Var2;
  212|    797|    case(0x2B03):
  ------------------
  |  Branch (212:5): [True: 797, False: 273k]
  ------------------
  213|    797|      return GroupVariation::Group43Var3;
  214|  1.19k|    case(0x2B04):
  ------------------
  |  Branch (214:5): [True: 1.19k, False: 273k]
  ------------------
  215|  1.19k|      return GroupVariation::Group43Var4;
  216|    949|    case(0x2B05):
  ------------------
  |  Branch (216:5): [True: 949, False: 273k]
  ------------------
  217|    949|      return GroupVariation::Group43Var5;
  218|    744|    case(0x2B06):
  ------------------
  |  Branch (218:5): [True: 744, False: 273k]
  ------------------
  219|    744|      return GroupVariation::Group43Var6;
  220|    723|    case(0x2B07):
  ------------------
  |  Branch (220:5): [True: 723, False: 273k]
  ------------------
  221|    723|      return GroupVariation::Group43Var7;
  222|    713|    case(0x2B08):
  ------------------
  |  Branch (222:5): [True: 713, False: 273k]
  ------------------
  223|    713|      return GroupVariation::Group43Var8;
  224|  1.82k|    case(0x3201):
  ------------------
  |  Branch (224:5): [True: 1.82k, False: 272k]
  ------------------
  225|  1.82k|      return GroupVariation::Group50Var1;
  226|  2.60k|    case(0x3203):
  ------------------
  |  Branch (226:5): [True: 2.60k, False: 271k]
  ------------------
  227|  2.60k|      return GroupVariation::Group50Var3;
  228|  5.36k|    case(0x3204):
  ------------------
  |  Branch (228:5): [True: 5.36k, False: 268k]
  ------------------
  229|  5.36k|      return GroupVariation::Group50Var4;
  230|    749|    case(0x3301):
  ------------------
  |  Branch (230:5): [True: 749, False: 273k]
  ------------------
  231|    749|      return GroupVariation::Group51Var1;
  232|    648|    case(0x3302):
  ------------------
  |  Branch (232:5): [True: 648, False: 273k]
  ------------------
  233|    648|      return GroupVariation::Group51Var2;
  234|    924|    case(0x3401):
  ------------------
  |  Branch (234:5): [True: 924, False: 273k]
  ------------------
  235|    924|      return GroupVariation::Group52Var1;
  236|    728|    case(0x3402):
  ------------------
  |  Branch (236:5): [True: 728, False: 273k]
  ------------------
  237|    728|      return GroupVariation::Group52Var2;
  238|  3.70k|    case(0x3C01):
  ------------------
  |  Branch (238:5): [True: 3.70k, False: 270k]
  ------------------
  239|  3.70k|      return GroupVariation::Group60Var1;
  240|    663|    case(0x3C02):
  ------------------
  |  Branch (240:5): [True: 663, False: 273k]
  ------------------
  241|    663|      return GroupVariation::Group60Var2;
  242|    906|    case(0x3C03):
  ------------------
  |  Branch (242:5): [True: 906, False: 273k]
  ------------------
  243|    906|      return GroupVariation::Group60Var3;
  244|    935|    case(0x3C04):
  ------------------
  |  Branch (244:5): [True: 935, False: 273k]
  ------------------
  245|    935|      return GroupVariation::Group60Var4;
  246|    144|    case(0x4601):
  ------------------
  |  Branch (246:5): [True: 144, False: 274k]
  ------------------
  247|    144|      return GroupVariation::Group70Var1;
  248|    268|    case(0x4602):
  ------------------
  |  Branch (248:5): [True: 268, False: 273k]
  ------------------
  249|    268|      return GroupVariation::Group70Var2;
  250|    427|    case(0x4603):
  ------------------
  |  Branch (250:5): [True: 427, False: 273k]
  ------------------
  251|    427|      return GroupVariation::Group70Var3;
  252|    221|    case(0x4604):
  ------------------
  |  Branch (252:5): [True: 221, False: 273k]
  ------------------
  253|    221|      return GroupVariation::Group70Var4;
  254|    451|    case(0x4605):
  ------------------
  |  Branch (254:5): [True: 451, False: 273k]
  ------------------
  255|    451|      return GroupVariation::Group70Var5;
  256|    262|    case(0x4606):
  ------------------
  |  Branch (256:5): [True: 262, False: 273k]
  ------------------
  257|    262|      return GroupVariation::Group70Var6;
  258|    251|    case(0x4607):
  ------------------
  |  Branch (258:5): [True: 251, False: 273k]
  ------------------
  259|    251|      return GroupVariation::Group70Var7;
  260|    213|    case(0x4608):
  ------------------
  |  Branch (260:5): [True: 213, False: 274k]
  ------------------
  261|    213|      return GroupVariation::Group70Var8;
  262|  2.44k|    case(0x5001):
  ------------------
  |  Branch (262:5): [True: 2.44k, False: 271k]
  ------------------
  263|  2.44k|      return GroupVariation::Group80Var1;
  264|  2.71k|    case(0x6E00):
  ------------------
  |  Branch (264:5): [True: 2.71k, False: 271k]
  ------------------
  265|  2.71k|      return GroupVariation::Group110Var0;
  266|    552|    case(0x6F00):
  ------------------
  |  Branch (266:5): [True: 552, False: 273k]
  ------------------
  267|    552|      return GroupVariation::Group111Var0;
  268|    234|    case(0x7000):
  ------------------
  |  Branch (268:5): [True: 234, False: 273k]
  ------------------
  269|    234|      return GroupVariation::Group112Var0;
  270|    277|    case(0x7100):
  ------------------
  |  Branch (270:5): [True: 277, False: 273k]
  ------------------
  271|    277|      return GroupVariation::Group113Var0;
  272|  4.80k|    default:
  ------------------
  |  Branch (272:5): [True: 4.80k, False: 269k]
  ------------------
  273|  4.80k|      return GroupVariation::UNKNOWN;
  274|   274k|  }
  275|   274k|}

_ZN8opendnp317OperationTypeSpec7to_typeENS_13OperationTypeE:
   38|  5.32k|{
   39|  5.32k|  return static_cast<uint8_t>(arg);
   40|  5.32k|}
_ZN8opendnp317OperationTypeSpec9from_typeEh:
   43|  5.32k|{
   44|  5.32k|  switch(arg)
   45|  5.32k|  {
   46|    940|    case(0x0):
  ------------------
  |  Branch (46:5): [True: 940, False: 4.38k]
  ------------------
   47|    940|      return OperationType::NUL;
   48|    697|    case(0x1):
  ------------------
  |  Branch (48:5): [True: 697, False: 4.62k]
  ------------------
   49|    697|      return OperationType::PULSE_ON;
   50|    467|    case(0x2):
  ------------------
  |  Branch (50:5): [True: 467, False: 4.85k]
  ------------------
   51|    467|      return OperationType::PULSE_OFF;
   52|    400|    case(0x3):
  ------------------
  |  Branch (52:5): [True: 400, False: 4.92k]
  ------------------
   53|    400|      return OperationType::LATCH_ON;
   54|    394|    case(0x4):
  ------------------
  |  Branch (54:5): [True: 394, False: 4.93k]
  ------------------
   55|    394|      return OperationType::LATCH_OFF;
   56|  2.42k|    default:
  ------------------
  |  Branch (56:5): [True: 2.42k, False: 2.89k]
  ------------------
   57|  2.42k|      return OperationType::Undefined;
   58|  5.32k|  }
   59|  5.32k|}

_ZN8opendnp317QualifierCodeSpec7to_typeENS_13QualifierCodeE:
   38|  11.9k|{
   39|  11.9k|  return static_cast<uint8_t>(arg);
   40|  11.9k|}
_ZN8opendnp317QualifierCodeSpec9from_typeEh:
   43|   421k|{
   44|   421k|  switch(arg)
   45|   421k|  {
   46|  84.8k|    case(0x0):
  ------------------
  |  Branch (46:5): [True: 84.8k, False: 336k]
  ------------------
   47|  84.8k|      return QualifierCode::UINT8_START_STOP;
   48|  7.08k|    case(0x1):
  ------------------
  |  Branch (48:5): [True: 7.08k, False: 414k]
  ------------------
   49|  7.08k|      return QualifierCode::UINT16_START_STOP;
   50|   175k|    case(0x6):
  ------------------
  |  Branch (50:5): [True: 175k, False: 245k]
  ------------------
   51|   175k|      return QualifierCode::ALL_OBJECTS;
   52|  11.5k|    case(0x7):
  ------------------
  |  Branch (52:5): [True: 11.5k, False: 410k]
  ------------------
   53|  11.5k|      return QualifierCode::UINT8_CNT;
   54|  1.70k|    case(0x8):
  ------------------
  |  Branch (54:5): [True: 1.70k, False: 419k]
  ------------------
   55|  1.70k|      return QualifierCode::UINT16_CNT;
   56|   124k|    case(0x17):
  ------------------
  |  Branch (56:5): [True: 124k, False: 297k]
  ------------------
   57|   124k|      return QualifierCode::UINT8_CNT_UINT8_INDEX;
   58|  15.8k|    case(0x28):
  ------------------
  |  Branch (58:5): [True: 15.8k, False: 405k]
  ------------------
   59|  15.8k|      return QualifierCode::UINT16_CNT_UINT16_INDEX;
   60|    306|    default:
  ------------------
  |  Branch (60:5): [True: 306, False: 421k]
  ------------------
   61|    306|      return QualifierCode::UNDEFINED;
   62|   421k|  }
   63|   421k|}

_ZN8opendnp317TripCloseCodeSpec7to_typeENS_13TripCloseCodeE:
   38|  5.32k|{
   39|  5.32k|  return static_cast<uint8_t>(arg);
   40|  5.32k|}
_ZN8opendnp317TripCloseCodeSpec9from_typeEh:
   43|  5.32k|{
   44|  5.32k|  switch(arg)
   45|  5.32k|  {
   46|  3.57k|    case(0x0):
  ------------------
  |  Branch (46:5): [True: 3.57k, False: 1.74k]
  ------------------
   47|  3.57k|      return TripCloseCode::NUL;
   48|    500|    case(0x1):
  ------------------
  |  Branch (48:5): [True: 500, False: 4.82k]
  ------------------
   49|    500|      return TripCloseCode::CLOSE;
   50|    519|    case(0x2):
  ------------------
  |  Branch (50:5): [True: 519, False: 4.80k]
  ------------------
   51|    519|      return TripCloseCode::TRIP;
   52|    730|    case(0x3):
  ------------------
  |  Branch (52:5): [True: 730, False: 4.59k]
  ------------------
   53|    730|      return TripCloseCode::RESERVED;
   54|      0|    default:
  ------------------
  |  Branch (54:5): [True: 0, False: 5.32k]
  ------------------
   55|      0|      throw new std::invalid_argument("Unknown value");
   56|  5.32k|  }
   57|  5.32k|}

_ZN8opendnp310Group1Var2C2Ev:
   45|  3.52k|Group1Var2::Group1Var2() : flags(0)
   46|  3.52k|{}
_ZN8opendnp310Group1Var25WriteERKS0_RN7ser4cpp4WSeqImEE:
   54|  3.52k|{
   55|  3.52k|  return LittleEndian::write(buffer, arg.flags);
   56|  3.52k|}
_ZN8opendnp310Group1Var211WriteTargetERKNS_6BinaryERN7ser4cpp4WSeqImEE:
   73|  3.52k|{
   74|  3.52k|  return Group1Var2::Write(ConvertGroup1Var2::Apply(value), buff);
   75|  3.52k|}

_ZN8opendnp310Group1Var24SizeEv:
   63|  1.21k|  static size_t Size() { return 1; }
_ZN8opendnp310Group1Var22IDEv:
   59|    638|  static GroupVariationID ID() { return GroupVariationID(1,2); }
_ZN8opendnp310Group1Var24InstEv:
   73|    638|  static DNP3Serializer<Binary> Inst() { return DNP3Serializer<Binary>(ID(), Size(), &ReadTarget, &WriteTarget); }

_ZN8opendnp311Group10Var2C2Ev:
   45|  2.70k|Group10Var2::Group10Var2() : flags(0)
   46|  2.70k|{}
_ZN8opendnp311Group10Var25WriteERKS0_RN7ser4cpp4WSeqImEE:
   54|  2.70k|{
   55|  2.70k|  return LittleEndian::write(buffer, arg.flags);
   56|  2.70k|}
_ZN8opendnp311Group10Var211WriteTargetERKNS_18BinaryOutputStatusERN7ser4cpp4WSeqImEE:
   73|  2.70k|{
   74|  2.70k|  return Group10Var2::Write(ConvertGroup10Var2::Apply(value), buff);
   75|  2.70k|}

_ZN8opendnp311Group10Var24SizeEv:
   62|  1.02k|  static size_t Size() { return 1; }
_ZN8opendnp311Group10Var22IDEv:
   58|    495|  static GroupVariationID ID() { return GroupVariationID(10,2); }
_ZN8opendnp311Group10Var24InstEv:
   72|    495|  static DNP3Serializer<BinaryOutputStatus> Inst() { return DNP3Serializer<BinaryOutputStatus>(ID(), Size(), &ReadTarget, &WriteTarget); }

_ZN8opendnp311Group11Var14SizeEv:
   56|    333|  static size_t Size() { return 1; }
_ZN8opendnp311Group11Var24SizeEv:
   76|    520|  static size_t Size() { return 7; }

_ZN8opendnp311Group12Var1C2Ev:
   45|  8.81k|Group12Var1::Group12Var1() : code(0), count(0), onTime(0), offTime(0), status(0)
   46|  8.81k|{}
_ZN8opendnp311Group12Var14ReadERN7ser4cpp4RSeqImEERS0_:
   49|  5.32k|{
   50|  5.32k|  return LittleEndian::read(buffer, output.code, output.count, output.onTime, output.offTime, output.status);
   51|  5.32k|}
_ZN8opendnp311Group12Var15WriteERKS0_RN7ser4cpp4WSeqImEE:
   54|  3.49k|{
   55|  3.49k|  return LittleEndian::write(buffer, arg.code, arg.count, arg.onTime, arg.offTime, arg.status);
   56|  3.49k|}
_ZN8opendnp311Group12Var110ReadTargetERN7ser4cpp4RSeqImEERNS_23ControlRelayOutputBlockE:
   59|  5.32k|{
   60|  5.32k|  Group12Var1 value;
   61|  5.32k|  if(Read(buff, value))
  ------------------
  |  Branch (61:6): [True: 5.32k, False: 0]
  ------------------
   62|  5.32k|  {
   63|  5.32k|    output = ControlRelayOutputBlockFactory::From(value.code, value.count, value.onTime, value.offTime, value.status);
   64|  5.32k|    return true;
   65|  5.32k|  }
   66|      0|  else
   67|      0|  {
   68|      0|    return false;
   69|      0|  }
   70|  5.32k|}
_ZN8opendnp311Group12Var111WriteTargetERKNS_23ControlRelayOutputBlockERN7ser4cpp4WSeqImEE:
   73|  3.49k|{
   74|  3.49k|  return Group12Var1::Write(ConvertGroup12Var1::Apply(value), buff);
   75|  3.49k|}

_ZN8opendnp311Group12Var14SizeEv:
   56|  5.10k|  static size_t Size() { return 11; }
_ZN8opendnp311Group12Var12IDEv:
   52|  1.52k|  static GroupVariationID ID() { return GroupVariationID(12,1); }
_ZN8opendnp311Group12Var14InstEv:
   69|  1.52k|  static DNP3Serializer<ControlRelayOutputBlock> Inst() { return DNP3Serializer<ControlRelayOutputBlock>(ID(), Size(), &ReadTarget, &WriteTarget); }

_ZN8opendnp311Group13Var14SizeEv:
   50|    544|  static size_t Size() { return 1; }
_ZN8opendnp311Group13Var24SizeEv:
   69|    564|  static size_t Size() { return 7; }

_ZN8opendnp310Group2Var14SizeEv:
   56|    406|  static size_t Size() { return 1; }
_ZN8opendnp310Group2Var24SizeEv:
   76|    523|  static size_t Size() { return 7; }
_ZN8opendnp310Group2Var34SizeEv:
   97|    524|  static size_t Size() { return 3; }

_ZN8opendnp311Group20Var1C2Ev:
   45|  2.02k|Group20Var1::Group20Var1() : flags(0), value(0)
   46|  2.02k|{}
_ZN8opendnp311Group20Var15WriteERKS0_RN7ser4cpp4WSeqImEE:
   54|  2.02k|{
   55|  2.02k|  return LittleEndian::write(buffer, arg.flags, arg.value);
   56|  2.02k|}
_ZN8opendnp311Group20Var111WriteTargetERKNS_7CounterERN7ser4cpp4WSeqImEE:
   73|  2.02k|{
   74|  2.02k|  return Group20Var1::Write(ConvertGroup20Var1::Apply(value), buff);
   75|  2.02k|}
_ZN8opendnp311Group20Var2C2Ev:
   79|    574|Group20Var2::Group20Var2() : flags(0), value(0)
   80|    574|{}
_ZN8opendnp311Group20Var25WriteERKS0_RN7ser4cpp4WSeqImEE:
   88|    574|{
   89|    574|  return LittleEndian::write(buffer, arg.flags, arg.value);
   90|    574|}
_ZN8opendnp311Group20Var211WriteTargetERKNS_7CounterERN7ser4cpp4WSeqImEE:
  107|    574|{
  108|    574|  return Group20Var2::Write(ConvertGroup20Var2::Apply(value), buff);
  109|    574|}
_ZN8opendnp311Group20Var5C2Ev:
  113|    615|Group20Var5::Group20Var5() : value(0)
  114|    615|{}
_ZN8opendnp311Group20Var55WriteERKS0_RN7ser4cpp4WSeqImEE:
  122|    615|{
  123|    615|  return LittleEndian::write(buffer, arg.value);
  124|    615|}
_ZN8opendnp311Group20Var511WriteTargetERKNS_7CounterERN7ser4cpp4WSeqImEE:
  141|    615|{
  142|    615|  return Group20Var5::Write(ConvertGroup20Var5::Apply(value), buff);
  143|    615|}
_ZN8opendnp311Group20Var6C2Ev:
  147|    475|Group20Var6::Group20Var6() : value(0)
  148|    475|{}
_ZN8opendnp311Group20Var65WriteERKS0_RN7ser4cpp4WSeqImEE:
  156|    475|{
  157|    475|  return LittleEndian::write(buffer, arg.value);
  158|    475|}
_ZN8opendnp311Group20Var611WriteTargetERKNS_7CounterERN7ser4cpp4WSeqImEE:
  175|    475|{
  176|    475|  return Group20Var6::Write(ConvertGroup20Var6::Apply(value), buff);
  177|    475|}

_ZN8opendnp311Group20Var14SizeEv:
   56|    800|  static size_t Size() { return 5; }
_ZN8opendnp311Group20Var24SizeEv:
   79|    592|  static size_t Size() { return 3; }
_ZN8opendnp311Group20Var54SizeEv:
  102|    664|  static size_t Size() { return 4; }
_ZN8opendnp311Group20Var64SizeEv:
  124|    631|  static size_t Size() { return 2; }
_ZN8opendnp311Group20Var12IDEv:
   52|    372|  static GroupVariationID ID() { return GroupVariationID(20,1); }
_ZN8opendnp311Group20Var14InstEv:
   68|    372|  static DNP3Serializer<Counter> Inst() { return DNP3Serializer<Counter>(ID(), Size(), &ReadTarget, &WriteTarget); }
_ZN8opendnp311Group20Var22IDEv:
   75|    123|  static GroupVariationID ID() { return GroupVariationID(20,2); }
_ZN8opendnp311Group20Var24InstEv:
   91|    123|  static DNP3Serializer<Counter> Inst() { return DNP3Serializer<Counter>(ID(), Size(), &ReadTarget, &WriteTarget); }
_ZN8opendnp311Group20Var52IDEv:
   98|    124|  static GroupVariationID ID() { return GroupVariationID(20,5); }
_ZN8opendnp311Group20Var54InstEv:
  113|    124|  static DNP3Serializer<Counter> Inst() { return DNP3Serializer<Counter>(ID(), Size(), &ReadTarget, &WriteTarget); }
_ZN8opendnp311Group20Var62IDEv:
  120|    112|  static GroupVariationID ID() { return GroupVariationID(20,6); }
_ZN8opendnp311Group20Var64InstEv:
  135|    112|  static DNP3Serializer<Counter> Inst() { return DNP3Serializer<Counter>(ID(), Size(), &ReadTarget, &WriteTarget); }

_ZN8opendnp311Group21Var1C2Ev:
   45|  2.17k|Group21Var1::Group21Var1() : flags(0), value(0)
   46|  2.17k|{}
_ZN8opendnp311Group21Var15WriteERKS0_RN7ser4cpp4WSeqImEE:
   54|  2.17k|{
   55|  2.17k|  return LittleEndian::write(buffer, arg.flags, arg.value);
   56|  2.17k|}
_ZN8opendnp311Group21Var111WriteTargetERKNS_13FrozenCounterERN7ser4cpp4WSeqImEE:
   73|  2.17k|{
   74|  2.17k|  return Group21Var1::Write(ConvertGroup21Var1::Apply(value), buff);
   75|  2.17k|}
_ZN8opendnp311Group21Var2C2Ev:
   79|    525|Group21Var2::Group21Var2() : flags(0), value(0)
   80|    525|{}
_ZN8opendnp311Group21Var25WriteERKS0_RN7ser4cpp4WSeqImEE:
   88|    525|{
   89|    525|  return LittleEndian::write(buffer, arg.flags, arg.value);
   90|    525|}
_ZN8opendnp311Group21Var211WriteTargetERKNS_13FrozenCounterERN7ser4cpp4WSeqImEE:
  107|    525|{
  108|    525|  return Group21Var2::Write(ConvertGroup21Var2::Apply(value), buff);
  109|    525|}
_ZN8opendnp311Group21Var5C2Ev:
  113|    637|Group21Var5::Group21Var5() : flags(0), value(0), time(0)
  114|    637|{}
_ZN8opendnp311Group21Var55WriteERKS0_RN7ser4cpp4WSeqImEE:
  122|    637|{
  123|    637|  return LittleEndian::write(buffer, arg.flags, arg.value, arg.time);
  124|    637|}
_ZN8opendnp311Group21Var511WriteTargetERKNS_13FrozenCounterERN7ser4cpp4WSeqImEE:
  141|    637|{
  142|    637|  return Group21Var5::Write(ConvertGroup21Var5::Apply(value), buff);
  143|    637|}
_ZN8opendnp311Group21Var6C2Ev:
  147|    630|Group21Var6::Group21Var6() : flags(0), value(0), time(0)
  148|    630|{}
_ZN8opendnp311Group21Var65WriteERKS0_RN7ser4cpp4WSeqImEE:
  156|    630|{
  157|    630|  return LittleEndian::write(buffer, arg.flags, arg.value, arg.time);
  158|    630|}
_ZN8opendnp311Group21Var611WriteTargetERKNS_13FrozenCounterERN7ser4cpp4WSeqImEE:
  175|    630|{
  176|    630|  return Group21Var6::Write(ConvertGroup21Var6::Apply(value), buff);
  177|    630|}
_ZN8opendnp311Group21Var9C2Ev:
  181|    494|Group21Var9::Group21Var9() : value(0)
  182|    494|{}
_ZN8opendnp311Group21Var95WriteERKS0_RN7ser4cpp4WSeqImEE:
  190|    494|{
  191|    494|  return LittleEndian::write(buffer, arg.value);
  192|    494|}
_ZN8opendnp311Group21Var911WriteTargetERKNS_13FrozenCounterERN7ser4cpp4WSeqImEE:
  209|    494|{
  210|    494|  return Group21Var9::Write(ConvertGroup21Var9::Apply(value), buff);
  211|    494|}
_ZN8opendnp312Group21Var10C2Ev:
  215|    438|Group21Var10::Group21Var10() : value(0)
  216|    438|{}
_ZN8opendnp312Group21Var105WriteERKS0_RN7ser4cpp4WSeqImEE:
  224|    438|{
  225|    438|  return LittleEndian::write(buffer, arg.value);
  226|    438|}
_ZN8opendnp312Group21Var1011WriteTargetERKNS_13FrozenCounterERN7ser4cpp4WSeqImEE:
  243|    438|{
  244|    438|  return Group21Var10::Write(ConvertGroup21Var10::Apply(value), buff);
  245|    438|}

_ZN8opendnp311Group21Var14SizeEv:
   56|    956|  static size_t Size() { return 5; }
_ZN8opendnp311Group21Var24SizeEv:
   79|  1.16k|  static size_t Size() { return 3; }
_ZN8opendnp311Group21Var54SizeEv:
  102|    713|  static size_t Size() { return 11; }
_ZN8opendnp311Group21Var64SizeEv:
  126|    749|  static size_t Size() { return 9; }
_ZN8opendnp311Group21Var94SizeEv:
  150|    653|  static size_t Size() { return 4; }
_ZN8opendnp312Group21Var104SizeEv:
  172|    633|  static size_t Size() { return 2; }
_ZN8opendnp311Group21Var12IDEv:
   52|    394|  static GroupVariationID ID() { return GroupVariationID(21,1); }
_ZN8opendnp311Group21Var14InstEv:
   68|    394|  static DNP3Serializer<FrozenCounter> Inst() { return DNP3Serializer<FrozenCounter>(ID(), Size(), &ReadTarget, &WriteTarget); }
_ZN8opendnp311Group21Var22IDEv:
   75|    135|  static GroupVariationID ID() { return GroupVariationID(21,2); }
_ZN8opendnp311Group21Var24InstEv:
   91|    135|  static DNP3Serializer<FrozenCounter> Inst() { return DNP3Serializer<FrozenCounter>(ID(), Size(), &ReadTarget, &WriteTarget); }
_ZN8opendnp311Group21Var52IDEv:
   98|    141|  static GroupVariationID ID() { return GroupVariationID(21,5); }
_ZN8opendnp311Group21Var54InstEv:
  115|    141|  static DNP3Serializer<FrozenCounter> Inst() { return DNP3Serializer<FrozenCounter>(ID(), Size(), &ReadTarget, &WriteTarget); }
_ZN8opendnp311Group21Var62IDEv:
  122|    142|  static GroupVariationID ID() { return GroupVariationID(21,6); }
_ZN8opendnp311Group21Var64InstEv:
  139|    142|  static DNP3Serializer<FrozenCounter> Inst() { return DNP3Serializer<FrozenCounter>(ID(), Size(), &ReadTarget, &WriteTarget); }
_ZN8opendnp311Group21Var92IDEv:
  146|     94|  static GroupVariationID ID() { return GroupVariationID(21,9); }
_ZN8opendnp311Group21Var94InstEv:
  161|     94|  static DNP3Serializer<FrozenCounter> Inst() { return DNP3Serializer<FrozenCounter>(ID(), Size(), &ReadTarget, &WriteTarget); }
_ZN8opendnp312Group21Var102IDEv:
  168|    106|  static GroupVariationID ID() { return GroupVariationID(21,10); }
_ZN8opendnp312Group21Var104InstEv:
  183|    106|  static DNP3Serializer<FrozenCounter> Inst() { return DNP3Serializer<FrozenCounter>(ID(), Size(), &ReadTarget, &WriteTarget); }

_ZN8opendnp311Group22Var14SizeEv:
   56|    393|  static size_t Size() { return 5; }
_ZN8opendnp311Group22Var24SizeEv:
   78|    488|  static size_t Size() { return 3; }
_ZN8opendnp311Group22Var54SizeEv:
  100|    614|  static size_t Size() { return 11; }
_ZN8opendnp311Group22Var64SizeEv:
  123|    456|  static size_t Size() { return 9; }

_ZN8opendnp311Group23Var14SizeEv:
   56|    452|  static size_t Size() { return 5; }
_ZN8opendnp311Group23Var24SizeEv:
   78|    529|  static size_t Size() { return 3; }
_ZN8opendnp311Group23Var54SizeEv:
  100|    525|  static size_t Size() { return 11; }
_ZN8opendnp311Group23Var64SizeEv:
  123|    520|  static size_t Size() { return 9; }

_ZN8opendnp310Group3Var2C2Ev:
   45|  2.68k|Group3Var2::Group3Var2() : flags(0)
   46|  2.68k|{}
_ZN8opendnp310Group3Var25WriteERKS0_RN7ser4cpp4WSeqImEE:
   54|  2.68k|{
   55|  2.68k|  return LittleEndian::write(buffer, arg.flags);
   56|  2.68k|}
_ZN8opendnp310Group3Var211WriteTargetERKNS_15DoubleBitBinaryERN7ser4cpp4WSeqImEE:
   73|  2.68k|{
   74|  2.68k|  return Group3Var2::Write(ConvertGroup3Var2::Apply(value), buff);
   75|  2.68k|}

_ZN8opendnp310Group3Var24SizeEv:
   62|  1.10k|  static size_t Size() { return 1; }
_ZN8opendnp310Group3Var22IDEv:
   58|    497|  static GroupVariationID ID() { return GroupVariationID(3,2); }
_ZN8opendnp310Group3Var24InstEv:
   72|    497|  static DNP3Serializer<DoubleBitBinary> Inst() { return DNP3Serializer<DoubleBitBinary>(ID(), Size(), &ReadTarget, &WriteTarget); }

_ZN8opendnp311Group30Var1C2Ev:
   45|  2.20k|Group30Var1::Group30Var1() : flags(0), value(0)
   46|  2.20k|{}
_ZN8opendnp311Group30Var15WriteERKS0_RN7ser4cpp4WSeqImEE:
   54|  2.20k|{
   55|  2.20k|  return LittleEndian::write(buffer, arg.flags, arg.value);
   56|  2.20k|}
_ZN8opendnp311Group30Var111WriteTargetERKNS_6AnalogERN7ser4cpp4WSeqImEE:
   73|  2.20k|{
   74|  2.20k|  return Group30Var1::Write(ConvertGroup30Var1::Apply(value), buff);
   75|  2.20k|}
_ZN8opendnp311Group30Var2C2Ev:
   79|    510|Group30Var2::Group30Var2() : flags(0), value(0)
   80|    510|{}
_ZN8opendnp311Group30Var25WriteERKS0_RN7ser4cpp4WSeqImEE:
   88|    510|{
   89|    510|  return LittleEndian::write(buffer, arg.flags, arg.value);
   90|    510|}
_ZN8opendnp311Group30Var211WriteTargetERKNS_6AnalogERN7ser4cpp4WSeqImEE:
  107|    510|{
  108|    510|  return Group30Var2::Write(ConvertGroup30Var2::Apply(value), buff);
  109|    510|}
_ZN8opendnp311Group30Var3C2Ev:
  113|    451|Group30Var3::Group30Var3() : value(0)
  114|    451|{}
_ZN8opendnp311Group30Var35WriteERKS0_RN7ser4cpp4WSeqImEE:
  122|    451|{
  123|    451|  return LittleEndian::write(buffer, arg.value);
  124|    451|}
_ZN8opendnp311Group30Var311WriteTargetERKNS_6AnalogERN7ser4cpp4WSeqImEE:
  141|    451|{
  142|    451|  return Group30Var3::Write(ConvertGroup30Var3::Apply(value), buff);
  143|    451|}
_ZN8opendnp311Group30Var4C2Ev:
  147|    514|Group30Var4::Group30Var4() : value(0)
  148|    514|{}
_ZN8opendnp311Group30Var45WriteERKS0_RN7ser4cpp4WSeqImEE:
  156|    514|{
  157|    514|  return LittleEndian::write(buffer, arg.value);
  158|    514|}
_ZN8opendnp311Group30Var411WriteTargetERKNS_6AnalogERN7ser4cpp4WSeqImEE:
  175|    514|{
  176|    514|  return Group30Var4::Write(ConvertGroup30Var4::Apply(value), buff);
  177|    514|}
_ZN8opendnp311Group30Var5C2Ev:
  181|    475|Group30Var5::Group30Var5() : flags(0), value(0.0)
  182|    475|{}
_ZN8opendnp311Group30Var55WriteERKS0_RN7ser4cpp4WSeqImEE:
  190|    475|{
  191|    475|  return LittleEndian::write(buffer, arg.flags, arg.value);
  192|    475|}
_ZN8opendnp311Group30Var511WriteTargetERKNS_6AnalogERN7ser4cpp4WSeqImEE:
  209|    475|{
  210|    475|  return Group30Var5::Write(ConvertGroup30Var5::Apply(value), buff);
  211|    475|}
_ZN8opendnp311Group30Var6C2Ev:
  215|    704|Group30Var6::Group30Var6() : flags(0), value(0.0)
  216|    704|{}
_ZN8opendnp311Group30Var65WriteERKS0_RN7ser4cpp4WSeqImEE:
  224|    704|{
  225|    704|  return LittleEndian::write(buffer, arg.flags, arg.value);
  226|    704|}
_ZN8opendnp311Group30Var611WriteTargetERKNS_6AnalogERN7ser4cpp4WSeqImEE:
  243|    704|{
  244|    704|  return Group30Var6::Write(ConvertGroup30Var6::Apply(value), buff);
  245|    704|}

_ZN8opendnp311Group30Var14SizeEv:
   56|    898|  static size_t Size() { return 5; }
_ZN8opendnp311Group30Var24SizeEv:
   79|    971|  static size_t Size() { return 3; }
_ZN8opendnp311Group30Var34SizeEv:
  102|    671|  static size_t Size() { return 4; }
_ZN8opendnp311Group30Var44SizeEv:
  124|    687|  static size_t Size() { return 2; }
_ZN8opendnp311Group30Var54SizeEv:
  146|    647|  static size_t Size() { return 5; }
_ZN8opendnp311Group30Var64SizeEv:
  169|    758|  static size_t Size() { return 9; }
_ZN8opendnp311Group30Var12IDEv:
   52|    432|  static GroupVariationID ID() { return GroupVariationID(30,1); }
_ZN8opendnp311Group30Var14InstEv:
   68|    432|  static DNP3Serializer<Analog> Inst() { return DNP3Serializer<Analog>(ID(), Size(), &ReadTarget, &WriteTarget); }
_ZN8opendnp311Group30Var22IDEv:
   75|    116|  static GroupVariationID ID() { return GroupVariationID(30,2); }
_ZN8opendnp311Group30Var24InstEv:
   91|    116|  static DNP3Serializer<Analog> Inst() { return DNP3Serializer<Analog>(ID(), Size(), &ReadTarget, &WriteTarget); }
_ZN8opendnp311Group30Var32IDEv:
   98|    108|  static GroupVariationID ID() { return GroupVariationID(30,3); }
_ZN8opendnp311Group30Var34InstEv:
  113|    108|  static DNP3Serializer<Analog> Inst() { return DNP3Serializer<Analog>(ID(), Size(), &ReadTarget, &WriteTarget); }
_ZN8opendnp311Group30Var42IDEv:
  120|    117|  static GroupVariationID ID() { return GroupVariationID(30,4); }
_ZN8opendnp311Group30Var44InstEv:
  135|    117|  static DNP3Serializer<Analog> Inst() { return DNP3Serializer<Analog>(ID(), Size(), &ReadTarget, &WriteTarget); }
_ZN8opendnp311Group30Var52IDEv:
  142|    109|  static GroupVariationID ID() { return GroupVariationID(30,5); }
_ZN8opendnp311Group30Var54InstEv:
  158|    109|  static DNP3Serializer<Analog> Inst() { return DNP3Serializer<Analog>(ID(), Size(), &ReadTarget, &WriteTarget); }
_ZN8opendnp311Group30Var62IDEv:
  165|    176|  static GroupVariationID ID() { return GroupVariationID(30,6); }
_ZN8opendnp311Group30Var64InstEv:
  181|    176|  static DNP3Serializer<Analog> Inst() { return DNP3Serializer<Analog>(ID(), Size(), &ReadTarget, &WriteTarget); }

_ZN8opendnp311Group32Var14SizeEv:
   56|    392|  static size_t Size() { return 5; }
_ZN8opendnp311Group32Var24SizeEv:
   78|    522|  static size_t Size() { return 3; }
_ZN8opendnp311Group32Var34SizeEv:
  100|    504|  static size_t Size() { return 11; }
_ZN8opendnp311Group32Var44SizeEv:
  123|    554|  static size_t Size() { return 9; }
_ZN8opendnp311Group32Var54SizeEv:
  146|    520|  static size_t Size() { return 5; }
_ZN8opendnp311Group32Var64SizeEv:
  168|    520|  static size_t Size() { return 9; }
_ZN8opendnp311Group32Var74SizeEv:
  190|    522|  static size_t Size() { return 11; }
_ZN8opendnp311Group32Var84SizeEv:
  213|    548|  static size_t Size() { return 15; }

_ZN8opendnp310Group4Var14SizeEv:
   56|    596|  static size_t Size() { return 1; }
_ZN8opendnp310Group4Var24SizeEv:
   76|    524|  static size_t Size() { return 7; }
_ZN8opendnp310Group4Var34SizeEv:
   97|    523|  static size_t Size() { return 3; }

_ZN8opendnp311Group40Var1C2Ev:
   45|  2.46k|Group40Var1::Group40Var1() : flags(0), value(0)
   46|  2.46k|{}
_ZN8opendnp311Group40Var15WriteERKS0_RN7ser4cpp4WSeqImEE:
   54|  2.46k|{
   55|  2.46k|  return LittleEndian::write(buffer, arg.flags, arg.value);
   56|  2.46k|}
_ZN8opendnp311Group40Var111WriteTargetERKNS_18AnalogOutputStatusERN7ser4cpp4WSeqImEE:
   73|  2.46k|{
   74|  2.46k|  return Group40Var1::Write(ConvertGroup40Var1::Apply(value), buff);
   75|  2.46k|}
_ZN8opendnp311Group40Var2C2Ev:
   79|    619|Group40Var2::Group40Var2() : flags(0), value(0)
   80|    619|{}
_ZN8opendnp311Group40Var25WriteERKS0_RN7ser4cpp4WSeqImEE:
   88|    619|{
   89|    619|  return LittleEndian::write(buffer, arg.flags, arg.value);
   90|    619|}
_ZN8opendnp311Group40Var211WriteTargetERKNS_18AnalogOutputStatusERN7ser4cpp4WSeqImEE:
  107|    619|{
  108|    619|  return Group40Var2::Write(ConvertGroup40Var2::Apply(value), buff);
  109|    619|}
_ZN8opendnp311Group40Var3C2Ev:
  113|    511|Group40Var3::Group40Var3() : flags(0), value(0.0)
  114|    511|{}
_ZN8opendnp311Group40Var35WriteERKS0_RN7ser4cpp4WSeqImEE:
  122|    511|{
  123|    511|  return LittleEndian::write(buffer, arg.flags, arg.value);
  124|    511|}
_ZN8opendnp311Group40Var311WriteTargetERKNS_18AnalogOutputStatusERN7ser4cpp4WSeqImEE:
  141|    511|{
  142|    511|  return Group40Var3::Write(ConvertGroup40Var3::Apply(value), buff);
  143|    511|}
_ZN8opendnp311Group40Var4C2Ev:
  147|    573|Group40Var4::Group40Var4() : flags(0), value(0.0)
  148|    573|{}
_ZN8opendnp311Group40Var45WriteERKS0_RN7ser4cpp4WSeqImEE:
  156|    573|{
  157|    573|  return LittleEndian::write(buffer, arg.flags, arg.value);
  158|    573|}
_ZN8opendnp311Group40Var411WriteTargetERKNS_18AnalogOutputStatusERN7ser4cpp4WSeqImEE:
  175|    573|{
  176|    573|  return Group40Var4::Write(ConvertGroup40Var4::Apply(value), buff);
  177|    573|}

_ZN8opendnp311Group40Var14SizeEv:
   56|    996|  static size_t Size() { return 5; }
_ZN8opendnp311Group40Var24SizeEv:
   79|    958|  static size_t Size() { return 3; }
_ZN8opendnp311Group40Var34SizeEv:
  102|    667|  static size_t Size() { return 5; }
_ZN8opendnp311Group40Var44SizeEv:
  125|    657|  static size_t Size() { return 9; }
_ZN8opendnp311Group40Var12IDEv:
   52|    429|  static GroupVariationID ID() { return GroupVariationID(40,1); }
_ZN8opendnp311Group40Var14InstEv:
   68|    429|  static DNP3Serializer<AnalogOutputStatus> Inst() { return DNP3Serializer<AnalogOutputStatus>(ID(), Size(), &ReadTarget, &WriteTarget); }
_ZN8opendnp311Group40Var22IDEv:
   75|    130|  static GroupVariationID ID() { return GroupVariationID(40,2); }
_ZN8opendnp311Group40Var24InstEv:
   91|    130|  static DNP3Serializer<AnalogOutputStatus> Inst() { return DNP3Serializer<AnalogOutputStatus>(ID(), Size(), &ReadTarget, &WriteTarget); }
_ZN8opendnp311Group40Var32IDEv:
   98|    121|  static GroupVariationID ID() { return GroupVariationID(40,3); }
_ZN8opendnp311Group40Var34InstEv:
  114|    121|  static DNP3Serializer<AnalogOutputStatus> Inst() { return DNP3Serializer<AnalogOutputStatus>(ID(), Size(), &ReadTarget, &WriteTarget); }
_ZN8opendnp311Group40Var42IDEv:
  121|    115|  static GroupVariationID ID() { return GroupVariationID(40,4); }
_ZN8opendnp311Group40Var44InstEv:
  137|    115|  static DNP3Serializer<AnalogOutputStatus> Inst() { return DNP3Serializer<AnalogOutputStatus>(ID(), Size(), &ReadTarget, &WriteTarget); }

_ZN8opendnp311Group41Var1C2Ev:
   45|  9.84k|Group41Var1::Group41Var1() : value(0), status(0)
   46|  9.84k|{}
_ZN8opendnp311Group41Var14ReadERN7ser4cpp4RSeqImEERS0_:
   49|  5.59k|{
   50|  5.59k|  return LittleEndian::read(buffer, output.value, output.status);
   51|  5.59k|}
_ZN8opendnp311Group41Var15WriteERKS0_RN7ser4cpp4WSeqImEE:
   54|  4.25k|{
   55|  4.25k|  return LittleEndian::write(buffer, arg.value, arg.status);
   56|  4.25k|}
_ZN8opendnp311Group41Var110ReadTargetERN7ser4cpp4RSeqImEERNS_17AnalogOutputInt32E:
   59|  5.59k|{
   60|  5.59k|  Group41Var1 value;
   61|  5.59k|  if(Read(buff, value))
  ------------------
  |  Branch (61:6): [True: 5.59k, False: 0]
  ------------------
   62|  5.59k|  {
   63|  5.59k|    output = AnalogOutputInt32Factory::From(value.value, value.status);
   64|  5.59k|    return true;
   65|  5.59k|  }
   66|      0|  else
   67|      0|  {
   68|      0|    return false;
   69|      0|  }
   70|  5.59k|}
_ZN8opendnp311Group41Var111WriteTargetERKNS_17AnalogOutputInt32ERN7ser4cpp4WSeqImEE:
   73|  4.25k|{
   74|  4.25k|  return Group41Var1::Write(ConvertGroup41Var1::Apply(value), buff);
   75|  4.25k|}
_ZN8opendnp311Group41Var2C2Ev:
   79|  35.6k|Group41Var2::Group41Var2() : value(0), status(0)
   80|  35.6k|{}
_ZN8opendnp311Group41Var24ReadERN7ser4cpp4RSeqImEERS0_:
   83|  22.3k|{
   84|  22.3k|  return LittleEndian::read(buffer, output.value, output.status);
   85|  22.3k|}
_ZN8opendnp311Group41Var25WriteERKS0_RN7ser4cpp4WSeqImEE:
   88|  13.3k|{
   89|  13.3k|  return LittleEndian::write(buffer, arg.value, arg.status);
   90|  13.3k|}
_ZN8opendnp311Group41Var210ReadTargetERN7ser4cpp4RSeqImEERNS_17AnalogOutputInt16E:
   93|  22.3k|{
   94|  22.3k|  Group41Var2 value;
   95|  22.3k|  if(Read(buff, value))
  ------------------
  |  Branch (95:6): [True: 22.3k, False: 0]
  ------------------
   96|  22.3k|  {
   97|  22.3k|    output = AnalogOutputInt16Factory::From(value.value, value.status);
   98|  22.3k|    return true;
   99|  22.3k|  }
  100|      0|  else
  101|      0|  {
  102|      0|    return false;
  103|      0|  }
  104|  22.3k|}
_ZN8opendnp311Group41Var211WriteTargetERKNS_17AnalogOutputInt16ERN7ser4cpp4WSeqImEE:
  107|  13.3k|{
  108|  13.3k|  return Group41Var2::Write(ConvertGroup41Var2::Apply(value), buff);
  109|  13.3k|}
_ZN8opendnp311Group41Var3C2Ev:
  113|  14.9k|Group41Var3::Group41Var3() : value(0.0), status(0)
  114|  14.9k|{}
_ZN8opendnp311Group41Var34ReadERN7ser4cpp4RSeqImEERS0_:
  117|  8.19k|{
  118|  8.19k|  return LittleEndian::read(buffer, output.value, output.status);
  119|  8.19k|}
_ZN8opendnp311Group41Var35WriteERKS0_RN7ser4cpp4WSeqImEE:
  122|  6.80k|{
  123|  6.80k|  return LittleEndian::write(buffer, arg.value, arg.status);
  124|  6.80k|}
_ZN8opendnp311Group41Var310ReadTargetERN7ser4cpp4RSeqImEERNS_19AnalogOutputFloat32E:
  127|  8.19k|{
  128|  8.19k|  Group41Var3 value;
  129|  8.19k|  if(Read(buff, value))
  ------------------
  |  Branch (129:6): [True: 8.19k, False: 0]
  ------------------
  130|  8.19k|  {
  131|  8.19k|    output = AnalogOutputFloat32Factory::From(value.value, value.status);
  132|  8.19k|    return true;
  133|  8.19k|  }
  134|      0|  else
  135|      0|  {
  136|      0|    return false;
  137|      0|  }
  138|  8.19k|}
_ZN8opendnp311Group41Var311WriteTargetERKNS_19AnalogOutputFloat32ERN7ser4cpp4WSeqImEE:
  141|  6.80k|{
  142|  6.80k|  return Group41Var3::Write(ConvertGroup41Var3::Apply(value), buff);
  143|  6.80k|}
_ZN8opendnp311Group41Var4C2Ev:
  147|  15.4k|Group41Var4::Group41Var4() : value(0.0), status(0)
  148|  15.4k|{}
_ZN8opendnp311Group41Var44ReadERN7ser4cpp4RSeqImEERS0_:
  151|  8.75k|{
  152|  8.75k|  return LittleEndian::read(buffer, output.value, output.status);
  153|  8.75k|}
_ZN8opendnp311Group41Var45WriteERKS0_RN7ser4cpp4WSeqImEE:
  156|  6.64k|{
  157|  6.64k|  return LittleEndian::write(buffer, arg.value, arg.status);
  158|  6.64k|}
_ZN8opendnp311Group41Var410ReadTargetERN7ser4cpp4RSeqImEERNS_20AnalogOutputDouble64E:
  161|  8.75k|{
  162|  8.75k|  Group41Var4 value;
  163|  8.75k|  if(Read(buff, value))
  ------------------
  |  Branch (163:6): [True: 8.75k, False: 0]
  ------------------
  164|  8.75k|  {
  165|  8.75k|    output = AnalogOutputDouble64Factory::From(value.value, value.status);
  166|  8.75k|    return true;
  167|  8.75k|  }
  168|      0|  else
  169|      0|  {
  170|      0|    return false;
  171|      0|  }
  172|  8.75k|}
_ZN8opendnp311Group41Var411WriteTargetERKNS_20AnalogOutputDouble64ERN7ser4cpp4WSeqImEE:
  175|  6.64k|{
  176|  6.64k|  return Group41Var4::Write(ConvertGroup41Var4::Apply(value), buff);
  177|  6.64k|}

_ZN8opendnp311Group41Var14SizeEv:
   56|  5.30k|  static size_t Size() { return 5; }
_ZN8opendnp311Group41Var24SizeEv:
   77|  7.90k|  static size_t Size() { return 3; }
_ZN8opendnp311Group41Var34SizeEv:
   98|  5.91k|  static size_t Size() { return 5; }
_ZN8opendnp311Group41Var44SizeEv:
  119|  6.11k|  static size_t Size() { return 9; }
_ZN8opendnp311Group41Var12IDEv:
   52|  1.61k|  static GroupVariationID ID() { return GroupVariationID(41,1); }
_ZN8opendnp311Group41Var14InstEv:
   67|  1.61k|  static DNP3Serializer<AnalogOutputInt32> Inst() { return DNP3Serializer<AnalogOutputInt32>(ID(), Size(), &ReadTarget, &WriteTarget); }
_ZN8opendnp311Group41Var22IDEv:
   73|  2.43k|  static GroupVariationID ID() { return GroupVariationID(41,2); }
_ZN8opendnp311Group41Var24InstEv:
   88|  2.43k|  static DNP3Serializer<AnalogOutputInt16> Inst() { return DNP3Serializer<AnalogOutputInt16>(ID(), Size(), &ReadTarget, &WriteTarget); }
_ZN8opendnp311Group41Var32IDEv:
   94|  1.79k|  static GroupVariationID ID() { return GroupVariationID(41,3); }
_ZN8opendnp311Group41Var34InstEv:
  109|  1.79k|  static DNP3Serializer<AnalogOutputFloat32> Inst() { return DNP3Serializer<AnalogOutputFloat32>(ID(), Size(), &ReadTarget, &WriteTarget); }
_ZN8opendnp311Group41Var42IDEv:
  115|  1.88k|  static GroupVariationID ID() { return GroupVariationID(41,4); }
_ZN8opendnp311Group41Var44InstEv:
  130|  1.88k|  static DNP3Serializer<AnalogOutputDouble64> Inst() { return DNP3Serializer<AnalogOutputDouble64>(ID(), Size(), &ReadTarget, &WriteTarget); }

_ZN8opendnp311Group42Var14SizeEv:
   56|    648|  static size_t Size() { return 5; }
_ZN8opendnp311Group42Var24SizeEv:
   78|    881|  static size_t Size() { return 3; }
_ZN8opendnp311Group42Var34SizeEv:
  100|  1.04k|  static size_t Size() { return 11; }
_ZN8opendnp311Group42Var44SizeEv:
  123|    552|  static size_t Size() { return 9; }
_ZN8opendnp311Group42Var54SizeEv:
  146|    562|  static size_t Size() { return 5; }
_ZN8opendnp311Group42Var64SizeEv:
  168|    516|  static size_t Size() { return 9; }
_ZN8opendnp311Group42Var74SizeEv:
  190|    456|  static size_t Size() { return 11; }
_ZN8opendnp311Group42Var84SizeEv:
  213|    521|  static size_t Size() { return 15; }

_ZN8opendnp311Group43Var14SizeEv:
   50|    393|  static size_t Size() { return 5; }
_ZN8opendnp311Group43Var24SizeEv:
   71|    520|  static size_t Size() { return 3; }
_ZN8opendnp311Group43Var34SizeEv:
   92|    522|  static size_t Size() { return 11; }
_ZN8opendnp311Group43Var44SizeEv:
  114|    866|  static size_t Size() { return 9; }
_ZN8opendnp311Group43Var54SizeEv:
  136|    425|  static size_t Size() { return 5; }
_ZN8opendnp311Group43Var64SizeEv:
  157|    524|  static size_t Size() { return 9; }
_ZN8opendnp311Group43Var74SizeEv:
  178|    522|  static size_t Size() { return 11; }
_ZN8opendnp311Group43Var84SizeEv:
  200|    549|  static size_t Size() { return 15; }

_ZN8opendnp311Group50Var1C2Ev:
   45|    352|Group50Var1::Group50Var1() : time(0)
   46|    352|{}
_ZN8opendnp311Group50Var14ReadERN7ser4cpp4RSeqImEERS0_:
   49|     31|{
   50|     31|  return LittleEndian::read(buffer, output.time);
   51|     31|}
_ZN8opendnp311Group50Var3C2Ev:
   60|  1.27k|Group50Var3::Group50Var3() : time(0)
   61|  1.27k|{}
_ZN8opendnp311Group50Var34ReadERN7ser4cpp4RSeqImEERS0_:
   64|    482|{
   65|    482|  return LittleEndian::read(buffer, output.time);
   66|    482|}
_ZN8opendnp311Group50Var4C2Ev:
   75|  2.07k|Group50Var4::Group50Var4() : time(0), interval(0), units(0)
   76|  2.07k|{}
_ZN8opendnp311Group50Var45WriteERKS0_RN7ser4cpp4WSeqImEE:
   84|  2.07k|{
   85|  2.07k|  return LittleEndian::write(buffer, arg.time, arg.interval, arg.units);
   86|  2.07k|}
_ZN8opendnp311Group50Var411WriteTargetERKNS_15TimeAndIntervalERN7ser4cpp4WSeqImEE:
  103|  2.07k|{
  104|  2.07k|  return Group50Var4::Write(ConvertGroup50Var4::Apply(value), buff);
  105|  2.07k|}

_ZN8opendnp311Group50Var14SizeEv:
   50|  1.47k|  static size_t Size() { return 6; }
_ZN8opendnp311Group50Var34SizeEv:
   64|  2.40k|  static size_t Size() { return 6; }
_ZN8opendnp311Group50Var42IDEv:
   74|    329|  static GroupVariationID ID() { return GroupVariationID(50,4); }
_ZN8opendnp311Group50Var44SizeEv:
   78|  1.51k|  static size_t Size() { return 11; }
_ZN8opendnp311Group50Var44InstEv:
   90|    329|  static DNP3Serializer<TimeAndInterval> Inst() { return DNP3Serializer<TimeAndInterval>(ID(), Size(), &ReadTarget, &WriteTarget); }

_ZN8opendnp311Group51Var14SizeEv:
   48|    485|  static size_t Size() { return 6; }
_ZN8opendnp311Group51Var24SizeEv:
   62|    423|  static size_t Size() { return 6; }

_ZN8opendnp311Group52Var2C2Ev:
   58|      1|Group52Var2::Group52Var2() : time(0)
   59|      1|{}
_ZN8opendnp311Group52Var25WriteERKS0_RN7ser4cpp4WSeqImEE:
   67|      1|{
   68|      1|  return LittleEndian::write(buffer, arg.time);
   69|      1|}

_ZN8opendnp311Group52Var24SizeEv:
   62|    547|  static size_t Size() { return 2; }
_ZN8opendnp311Group52Var22IDEv:
   58|      1|  static GroupVariationID ID() { return GroupVariationID(52,2); }
_ZN8opendnp311Group52Var14SizeEv:
   48|    305|  static size_t Size() { return 2; }

_ZNK8opendnp39Addresses11IsBroadcastEv:
   28|  17.7k|{
   29|  17.7k|    return this->destination == LinkBroadcastAddress::DontConfirm
  ------------------
  |  Branch (29:12): [True: 0, False: 17.7k]
  ------------------
   30|  17.7k|        || this->destination == LinkBroadcastAddress::ShallConfirm
  ------------------
  |  Branch (30:12): [True: 0, False: 17.7k]
  ------------------
   31|  17.7k|        || this->destination == LinkBroadcastAddress::OptionalConfirm;
  ------------------
  |  Branch (31:12): [True: 0, False: 17.7k]
  ------------------
   32|  17.7k|}

_ZN8opendnp33CRC7CalcCrcEPKhm:
   49|  8.61k|{
   50|  8.61k|    uint16_t CRC = 0;
   51|       |
   52|  1.35M|    for (uint32_t i = 0; i < length; ++i)
  ------------------
  |  Branch (52:26): [True: 1.34M, False: 8.61k]
  ------------------
   53|  1.34M|    {
   54|  1.34M|        uint8_t index = (CRC ^ input[i]) & 0xFF;
   55|  1.34M|        CRC = crcTable[index] ^ (CRC >> 8);
   56|  1.34M|    }
   57|       |
   58|  8.61k|    return ~CRC;
   59|  8.61k|}
_ZN8opendnp33CRC7CalcCrcERKN7ser4cpp4RSeqImEE:
   62|  8.61k|{
   63|  8.61k|    return CalcCrc(view, view.length());
   64|  8.61k|}

_ZNK8opendnp314ApplicationIIN5ToIINEv:
   26|  8.37k|{
   27|  8.37k|    IINField ret;
   28|  8.37k|    ret.SetBitToValue(IINBit::NEED_TIME, needTime);
   29|  8.37k|    ret.SetBitToValue(IINBit::LOCAL_CONTROL, localControl);
   30|  8.37k|    ret.SetBitToValue(IINBit::CONFIG_CORRUPT, configCorrupt);
   31|  8.37k|    ret.SetBitToValue(IINBit::DEVICE_TROUBLE, deviceTrouble);
   32|  8.37k|    ret.SetBitToValue(IINBit::EVENT_BUFFER_OVERFLOW, eventBufferOverflow);
   33|  8.37k|    return ret;
   34|  8.37k|}

_ZN8opendnp320CommandActionAdapterC2ERNS_15ICommandHandlerEbRNS_14IUpdateHandlerENS_11OperateTypeE:
   29|  1.05k|    : handler(handler), is_select(is_select), updates(updates), op_type(op_type)
   30|  1.05k|{
   31|  1.05k|}
_ZN8opendnp320CommandActionAdapterD2Ev:
   34|  1.05k|{
   35|  1.05k|    if (this->is_started)
  ------------------
  |  Branch (35:9): [True: 887, False: 166]
  ------------------
   36|    887|    {
   37|    887|        handler.End();
   38|    887|    }
   39|  1.05k|}
_ZN8opendnp320CommandActionAdapter10CheckStartEv:
   42|  37.1k|{
   43|  37.1k|    if (!this->is_started)
  ------------------
  |  Branch (43:9): [True: 887, False: 36.2k]
  ------------------
   44|    887|    {
   45|    887|        this->is_started = true;
   46|    887|        handler.Begin();
   47|    887|    }
   48|  37.1k|}
_ZN8opendnp320CommandActionAdapter6ActionERKNS_23ControlRelayOutputBlockEt:
   51|  4.31k|{
   52|  4.31k|    if (command.IsQUFlagSet())
  ------------------
  |  Branch (52:9): [True: 1.71k, False: 2.59k]
  ------------------
   53|  1.71k|    {
   54|  1.71k|        return CommandStatus::NOT_SUPPORTED;
   55|  1.71k|    }
   56|       |
   57|  2.59k|    return this->ActionT(command, index);
   58|  4.31k|}
_ZN8opendnp320CommandActionAdapter6ActionERKNS_17AnalogOutputInt16Et:
   61|  16.7k|{
   62|  16.7k|    return this->ActionT(command, index);
   63|  16.7k|}
_ZN8opendnp320CommandActionAdapter6ActionERKNS_17AnalogOutputInt32Et:
   66|  4.31k|{
   67|  4.31k|    return this->ActionT(command, index);
   68|  4.31k|}
_ZN8opendnp320CommandActionAdapter6ActionERKNS_19AnalogOutputFloat32Et:
   71|  6.66k|{
   72|  6.66k|    return this->ActionT(command, index);
   73|  6.66k|}
_ZN8opendnp320CommandActionAdapter6ActionERKNS_20AnalogOutputDouble64Et:
   76|  6.83k|{
   77|  6.83k|    return this->ActionT(command, index);
   78|  6.83k|}

_ZN8opendnp320CommandActionAdapter7ActionTINS_23ControlRelayOutputBlockEEENS_13CommandStatusERKT_t:
   53|  2.59k|    {
   54|  2.59k|        this->CheckStart();
   55|  2.59k|        return is_select ? this->handler.Select(command, index)
  ------------------
  |  Branch (55:16): [True: 1.06k, False: 1.52k]
  ------------------
   56|  2.59k|                         : this->handler.Operate(command, index, this->updates, this->op_type);
   57|  2.59k|    }
_ZN8opendnp320CommandActionAdapter7ActionTINS_17AnalogOutputInt16EEENS_13CommandStatusERKT_t:
   53|  16.7k|    {
   54|  16.7k|        this->CheckStart();
   55|  16.7k|        return is_select ? this->handler.Select(command, index)
  ------------------
  |  Branch (55:16): [True: 3.57k, False: 13.2k]
  ------------------
   56|  16.7k|                         : this->handler.Operate(command, index, this->updates, this->op_type);
   57|  16.7k|    }
_ZN8opendnp320CommandActionAdapter7ActionTINS_17AnalogOutputInt32EEENS_13CommandStatusERKT_t:
   53|  4.31k|    {
   54|  4.31k|        this->CheckStart();
   55|  4.31k|        return is_select ? this->handler.Select(command, index)
  ------------------
  |  Branch (55:16): [True: 1.77k, False: 2.54k]
  ------------------
   56|  4.31k|                         : this->handler.Operate(command, index, this->updates, this->op_type);
   57|  4.31k|    }
_ZN8opendnp320CommandActionAdapter7ActionTINS_19AnalogOutputFloat32EEENS_13CommandStatusERKT_t:
   53|  6.66k|    {
   54|  6.66k|        this->CheckStart();
   55|  6.66k|        return is_select ? this->handler.Select(command, index)
  ------------------
  |  Branch (55:16): [True: 1.97k, False: 4.68k]
  ------------------
   56|  6.66k|                         : this->handler.Operate(command, index, this->updates, this->op_type);
   57|  6.66k|    }
_ZN8opendnp320CommandActionAdapter7ActionTINS_20AnalogOutputDouble64EEENS_13CommandStatusERKT_t:
   53|  6.83k|    {
   54|  6.83k|        this->CheckStart();
   55|  6.83k|        return is_select ? this->handler.Select(command, index)
  ------------------
  |  Branch (55:16): [True: 2.83k, False: 3.99k]
  ------------------
   56|  6.83k|                         : this->handler.Operate(command, index, this->updates, this->op_type);
   57|  6.83k|    }

_ZN8opendnp322CommandResponseHandlerC2EjPNS_14ICommandActionEPNS_12HeaderWriterE:
   33|  1.38k|    : pCommandAction(pCommandAction_), numRequests(0), numSuccess(0), maxCommands(maxCommands_), pWriter(pWriter_)
   34|  1.38k|{
   35|  1.38k|}
_ZN8opendnp322CommandResponseHandler9IsAllowedEjNS_14GroupVariationENS_13QualifierCodeE:
   38|  9.82k|{
   39|  9.82k|    if (!(qc == QualifierCode::UINT8_CNT_UINT8_INDEX || qc == QualifierCode::UINT16_CNT_UINT16_INDEX))
  ------------------
  |  Branch (39:11): [True: 6.14k, False: 3.67k]
  |  Branch (39:57): [True: 3.64k, False: 36]
  ------------------
   40|     36|    {
   41|     36|        return false;
   42|     36|    }
   43|       |
   44|  9.79k|    switch (gv)
   45|  9.79k|    {
   46|  1.67k|    case (GroupVariation::Group12Var1): //	CROB
  ------------------
  |  Branch (46:5): [True: 1.67k, False: 8.12k]
  ------------------
   47|  3.35k|    case (GroupVariation::Group41Var1): //	4 kinds of AO
  ------------------
  |  Branch (47:5): [True: 1.68k, False: 8.10k]
  ------------------
   48|  5.99k|    case (GroupVariation::Group41Var2):
  ------------------
  |  Branch (48:5): [True: 2.64k, False: 7.14k]
  ------------------
   49|  7.81k|    case (GroupVariation::Group41Var3):
  ------------------
  |  Branch (49:5): [True: 1.81k, False: 7.97k]
  ------------------
   50|  9.76k|    case (GroupVariation::Group41Var4):
  ------------------
  |  Branch (50:5): [True: 1.95k, False: 7.84k]
  ------------------
   51|  9.76k|        return true;
   52|     31|    default:
  ------------------
  |  Branch (52:5): [True: 31, False: 9.76k]
  ------------------
   53|     31|        return false;
   54|  9.79k|    }
   55|  9.79k|}
_ZN8opendnp322CommandResponseHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_23ControlRelayOutputBlockEEEEE:
   59|  1.52k|{
   60|  1.52k|    return this->ProcessAny(header, meas);
   61|  1.52k|}
_ZN8opendnp322CommandResponseHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_17AnalogOutputInt16EEEEE:
   65|  2.43k|{
   66|  2.43k|    return this->ProcessAny(header, meas);
   67|  2.43k|}
_ZN8opendnp322CommandResponseHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_17AnalogOutputInt32EEEEE:
   71|  1.61k|{
   72|  1.61k|    return this->ProcessAny(header, meas);
   73|  1.61k|}
_ZN8opendnp322CommandResponseHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_19AnalogOutputFloat32EEEEE:
   77|  1.79k|{
   78|  1.79k|    return this->ProcessAny(header, meas);
   79|  1.79k|}
_ZN8opendnp322CommandResponseHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_20AnalogOutputDouble64EEEEE:
   83|  1.88k|{
   84|  1.88k|    return this->ProcessAny(header, meas);
   85|  1.88k|}
_ZN8opendnp322CommandResponseHandler25ProcessIndexPrefixTwoByteERKNS_12HeaderRecordERKNS_11ICollectionINS_7IndexedINS_23ControlRelayOutputBlockEEEEE:
   89|    758|{
   90|    758|    return this->RespondToHeader<ControlRelayOutputBlock, ser4cpp::UInt16>(QualifierCode::UINT16_CNT_UINT16_INDEX,
   91|    758|                                                                           Group12Var1::Inst(), meas);
   92|    758|}
_ZN8opendnp322CommandResponseHandler25ProcessIndexPrefixTwoByteERKNS_12HeaderRecordERKNS_11ICollectionINS_7IndexedINS_17AnalogOutputInt16EEEEE:
   96|    853|{
   97|    853|    return this->RespondToHeader<AnalogOutputInt16, ser4cpp::UInt16>(QualifierCode::UINT16_CNT_UINT16_INDEX,
   98|    853|                                                                     Group41Var2::Inst(), meas);
   99|    853|}
_ZN8opendnp322CommandResponseHandler25ProcessIndexPrefixTwoByteERKNS_12HeaderRecordERKNS_11ICollectionINS_7IndexedINS_17AnalogOutputInt32EEEEE:
  103|    809|{
  104|    809|    return this->RespondToHeader<AnalogOutputInt32, ser4cpp::UInt16>(QualifierCode::UINT16_CNT_UINT16_INDEX,
  105|    809|                                                                     Group41Var1::Inst(), meas);
  106|    809|}
_ZN8opendnp322CommandResponseHandler25ProcessIndexPrefixTwoByteERKNS_12HeaderRecordERKNS_11ICollectionINS_7IndexedINS_19AnalogOutputFloat32EEEEE:
  110|    649|{
  111|    649|    return this->RespondToHeader<AnalogOutputFloat32, ser4cpp::UInt16>(QualifierCode::UINT16_CNT_UINT16_INDEX,
  112|    649|                                                                       Group41Var3::Inst(), meas);
  113|    649|}
_ZN8opendnp322CommandResponseHandler25ProcessIndexPrefixTwoByteERKNS_12HeaderRecordERKNS_11ICollectionINS_7IndexedINS_20AnalogOutputDouble64EEEEE:
  117|    504|{
  118|    504|    return this->RespondToHeader<AnalogOutputDouble64, ser4cpp::UInt16>(QualifierCode::UINT16_CNT_UINT16_INDEX,
  119|    504|                                                                        Group41Var4::Inst(), meas);
  120|    504|}
_ZN8opendnp322CommandResponseHandler25ProcessIndexPrefixOneByteERKNS_12HeaderRecordERKNS_11ICollectionINS_7IndexedINS_23ControlRelayOutputBlockEEEEE:
  124|    767|{
  125|    767|    return this->RespondToHeader<ControlRelayOutputBlock, ser4cpp::UInt8>(QualifierCode::UINT8_CNT_UINT8_INDEX,
  126|    767|                                                                          Group12Var1::Inst(), meas);
  127|    767|}
_ZN8opendnp322CommandResponseHandler25ProcessIndexPrefixOneByteERKNS_12HeaderRecordERKNS_11ICollectionINS_7IndexedINS_17AnalogOutputInt16EEEEE:
  131|  1.58k|{
  132|  1.58k|    return this->RespondToHeader<AnalogOutputInt16, ser4cpp::UInt8>(QualifierCode::UINT8_CNT_UINT8_INDEX,
  133|  1.58k|                                                                    Group41Var2::Inst(), meas);
  134|  1.58k|}
_ZN8opendnp322CommandResponseHandler25ProcessIndexPrefixOneByteERKNS_12HeaderRecordERKNS_11ICollectionINS_7IndexedINS_17AnalogOutputInt32EEEEE:
  138|    808|{
  139|    808|    return this->RespondToHeader<AnalogOutputInt32, ser4cpp::UInt8>(QualifierCode::UINT8_CNT_UINT8_INDEX,
  140|    808|                                                                    Group41Var1::Inst(), meas);
  141|    808|}
_ZN8opendnp322CommandResponseHandler25ProcessIndexPrefixOneByteERKNS_12HeaderRecordERKNS_11ICollectionINS_7IndexedINS_19AnalogOutputFloat32EEEEE:
  145|  1.14k|{
  146|  1.14k|    return this->RespondToHeader<AnalogOutputFloat32, ser4cpp::UInt8>(QualifierCode::UINT8_CNT_UINT8_INDEX,
  147|  1.14k|                                                                      Group41Var3::Inst(), meas);
  148|  1.14k|}
_ZN8opendnp322CommandResponseHandler25ProcessIndexPrefixOneByteERKNS_12HeaderRecordERKNS_11ICollectionINS_7IndexedINS_20AnalogOutputDouble64EEEEE:
  152|  1.38k|{
  153|  1.38k|    return this->RespondToHeader<AnalogOutputDouble64, ser4cpp::UInt8>(QualifierCode::UINT8_CNT_UINT8_INDEX,
  154|  1.38k|                                                                       Group41Var4::Inst(), meas);
  155|  1.38k|}

_ZNK8opendnp322CommandResponseHandler21AllCommandsSuccessfulEv:
   38|    309|    {
   39|    309|        return numRequests == numSuccess;
   40|    309|    }
_ZN8opendnp322CommandResponseHandler10ProcessAnyINS_23ControlRelayOutputBlockEEENS_8IINFieldERKNS_12HeaderRecordERKNS_11ICollectionINS_7IndexedIT_EEEE:
   98|  1.52k|{
   99|  1.52k|    if (record.GetQualifierCode() == QualifierCode::UINT8_CNT_UINT8_INDEX)
  ------------------
  |  Branch (99:9): [True: 767, False: 758]
  ------------------
  100|    767|    {
  101|    767|        return ProcessIndexPrefixOneByte(record, meas);
  102|    767|    }
  103|    758|    else
  104|    758|    {
  105|    758|        return ProcessIndexPrefixTwoByte(record, meas);
  106|    758|    }
  107|  1.52k|}
_ZN8opendnp322CommandResponseHandler10ProcessAnyINS_17AnalogOutputInt16EEENS_8IINFieldERKNS_12HeaderRecordERKNS_11ICollectionINS_7IndexedIT_EEEE:
   98|  2.43k|{
   99|  2.43k|    if (record.GetQualifierCode() == QualifierCode::UINT8_CNT_UINT8_INDEX)
  ------------------
  |  Branch (99:9): [True: 1.58k, False: 853]
  ------------------
  100|  1.58k|    {
  101|  1.58k|        return ProcessIndexPrefixOneByte(record, meas);
  102|  1.58k|    }
  103|    853|    else
  104|    853|    {
  105|    853|        return ProcessIndexPrefixTwoByte(record, meas);
  106|    853|    }
  107|  2.43k|}
_ZN8opendnp322CommandResponseHandler10ProcessAnyINS_17AnalogOutputInt32EEENS_8IINFieldERKNS_12HeaderRecordERKNS_11ICollectionINS_7IndexedIT_EEEE:
   98|  1.61k|{
   99|  1.61k|    if (record.GetQualifierCode() == QualifierCode::UINT8_CNT_UINT8_INDEX)
  ------------------
  |  Branch (99:9): [True: 808, False: 809]
  ------------------
  100|    808|    {
  101|    808|        return ProcessIndexPrefixOneByte(record, meas);
  102|    808|    }
  103|    809|    else
  104|    809|    {
  105|    809|        return ProcessIndexPrefixTwoByte(record, meas);
  106|    809|    }
  107|  1.61k|}
_ZN8opendnp322CommandResponseHandler10ProcessAnyINS_19AnalogOutputFloat32EEENS_8IINFieldERKNS_12HeaderRecordERKNS_11ICollectionINS_7IndexedIT_EEEE:
   98|  1.79k|{
   99|  1.79k|    if (record.GetQualifierCode() == QualifierCode::UINT8_CNT_UINT8_INDEX)
  ------------------
  |  Branch (99:9): [True: 1.14k, False: 649]
  ------------------
  100|  1.14k|    {
  101|  1.14k|        return ProcessIndexPrefixOneByte(record, meas);
  102|  1.14k|    }
  103|    649|    else
  104|    649|    {
  105|    649|        return ProcessIndexPrefixTwoByte(record, meas);
  106|    649|    }
  107|  1.79k|}
_ZN8opendnp322CommandResponseHandler10ProcessAnyINS_20AnalogOutputDouble64EEENS_8IINFieldERKNS_12HeaderRecordERKNS_11ICollectionINS_7IndexedIT_EEEE:
   98|  1.88k|{
   99|  1.88k|    if (record.GetQualifierCode() == QualifierCode::UINT8_CNT_UINT8_INDEX)
  ------------------
  |  Branch (99:9): [True: 1.38k, False: 504]
  ------------------
  100|  1.38k|    {
  101|  1.38k|        return ProcessIndexPrefixOneByte(record, meas);
  102|  1.38k|    }
  103|    504|    else
  104|    504|    {
  105|    504|        return ProcessIndexPrefixTwoByte(record, meas);
  106|    504|    }
  107|  1.88k|}
_ZN8opendnp322CommandResponseHandler15RespondToHeaderINS_23ControlRelayOutputBlockEN7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS9_EEEE:
  161|    758|{
  162|    758|    if (pWriter)
  ------------------
  |  Branch (162:9): [True: 534, False: 224]
  ------------------
  163|    534|    {
  164|    534|        auto iter = pWriter->IterateOverCountWithPrefix<IndexType, Target>(qualifier, serializer);
  165|    534|        return this->RespondToHeaderWithIterator<Target, IndexType>(qualifier, serializer, values, &iter);
  166|    534|    }
  167|    224|    else
  168|    224|    {
  169|    224|        return this->RespondToHeaderWithIterator<Target, IndexType>(qualifier, serializer, values);
  170|    224|    }
  171|    758|}
_ZN8opendnp322CommandResponseHandler27RespondToHeaderWithIteratorINS_23ControlRelayOutputBlockEN7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS9_EEEEPNS_21PrefixedWriteIteratorIT0_S9_EE:
  114|    758|{
  115|    758|    IINField ret;
  116|       |
  117|    758|    auto process = [this, pIterator, &ret](const Indexed<Target>& pair) {
  118|    758|        Target response(pair.value);
  119|    758|        response.status = this->ProcessCommand(pair.value, pair.index);
  120|       |
  121|    758|        switch (response.status)
  122|    758|        {
  123|    758|        case (CommandStatus::SUCCESS):
  124|    758|            ++this->numSuccess;
  125|    758|            break;
  126|    758|        case (CommandStatus::NOT_SUPPORTED):
  127|    758|            ret.SetBit(IINBit::PARAM_ERROR);
  128|    758|            break;
  129|    758|        default:
  130|    758|            break;
  131|    758|        }
  132|       |
  133|    758|        if (pIterator)
  134|    758|        {
  135|    758|            pIterator->Write(response, static_cast<typename IndexType::type_t>(pair.index));
  136|    758|        }
  137|    758|    };
  138|       |
  139|    758|    values.ForeachItem(process);
  140|       |
  141|    758|    return ret;
  142|    758|}
_ZZN8opendnp322CommandResponseHandler27RespondToHeaderWithIteratorINS_23ControlRelayOutputBlockEN7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS9_EEEEPNS_21PrefixedWriteIteratorIT0_S9_EEENKUlRKNSE_IS2_EEE_clESP_:
  117|  2.07k|    auto process = [this, pIterator, &ret](const Indexed<Target>& pair) {
  118|  2.07k|        Target response(pair.value);
  119|  2.07k|        response.status = this->ProcessCommand(pair.value, pair.index);
  120|       |
  121|  2.07k|        switch (response.status)
  122|  2.07k|        {
  123|    796|        case (CommandStatus::SUCCESS):
  ------------------
  |  Branch (123:9): [True: 796, False: 1.27k]
  ------------------
  124|    796|            ++this->numSuccess;
  125|    796|            break;
  126|    513|        case (CommandStatus::NOT_SUPPORTED):
  ------------------
  |  Branch (126:9): [True: 513, False: 1.55k]
  ------------------
  127|    513|            ret.SetBit(IINBit::PARAM_ERROR);
  128|    513|            break;
  129|    763|        default:
  ------------------
  |  Branch (129:9): [True: 763, False: 1.30k]
  ------------------
  130|    763|            break;
  131|  2.07k|        }
  132|       |
  133|  2.07k|        if (pIterator)
  ------------------
  |  Branch (133:13): [True: 1.43k, False: 637]
  ------------------
  134|  1.43k|        {
  135|  1.43k|            pIterator->Write(response, static_cast<typename IndexType::type_t>(pair.index));
  136|  1.43k|        }
  137|  2.07k|    };
_ZN8opendnp322CommandResponseHandler14ProcessCommandINS_23ControlRelayOutputBlockEEENS_13CommandStatusERKT_t:
  145|  5.32k|{
  146|  5.32k|    if (numRequests < maxCommands)
  ------------------
  |  Branch (146:9): [True: 5.32k, False: 0]
  ------------------
  147|  5.32k|    {
  148|  5.32k|        ++numRequests;
  149|  5.32k|        return pCommandAction->Action(command, index);
  150|  5.32k|    }
  151|      0|    else
  152|      0|    {
  153|      0|        return CommandStatus::TOO_MANY_OPS;
  154|      0|    }
  155|  5.32k|}
_ZN8opendnp322CommandResponseHandler15RespondToHeaderINS_17AnalogOutputInt16EN7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS9_EEEE:
  161|    853|{
  162|    853|    if (pWriter)
  ------------------
  |  Branch (162:9): [True: 555, False: 298]
  ------------------
  163|    555|    {
  164|    555|        auto iter = pWriter->IterateOverCountWithPrefix<IndexType, Target>(qualifier, serializer);
  165|    555|        return this->RespondToHeaderWithIterator<Target, IndexType>(qualifier, serializer, values, &iter);
  166|    555|    }
  167|    298|    else
  168|    298|    {
  169|    298|        return this->RespondToHeaderWithIterator<Target, IndexType>(qualifier, serializer, values);
  170|    298|    }
  171|    853|}
_ZN8opendnp322CommandResponseHandler27RespondToHeaderWithIteratorINS_17AnalogOutputInt16EN7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS9_EEEEPNS_21PrefixedWriteIteratorIT0_S9_EE:
  114|    853|{
  115|    853|    IINField ret;
  116|       |
  117|    853|    auto process = [this, pIterator, &ret](const Indexed<Target>& pair) {
  118|    853|        Target response(pair.value);
  119|    853|        response.status = this->ProcessCommand(pair.value, pair.index);
  120|       |
  121|    853|        switch (response.status)
  122|    853|        {
  123|    853|        case (CommandStatus::SUCCESS):
  124|    853|            ++this->numSuccess;
  125|    853|            break;
  126|    853|        case (CommandStatus::NOT_SUPPORTED):
  127|    853|            ret.SetBit(IINBit::PARAM_ERROR);
  128|    853|            break;
  129|    853|        default:
  130|    853|            break;
  131|    853|        }
  132|       |
  133|    853|        if (pIterator)
  134|    853|        {
  135|    853|            pIterator->Write(response, static_cast<typename IndexType::type_t>(pair.index));
  136|    853|        }
  137|    853|    };
  138|       |
  139|    853|    values.ForeachItem(process);
  140|       |
  141|    853|    return ret;
  142|    853|}
_ZZN8opendnp322CommandResponseHandler27RespondToHeaderWithIteratorINS_17AnalogOutputInt16EN7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS9_EEEEPNS_21PrefixedWriteIteratorIT0_S9_EEENKUlRKNSE_IS2_EEE_clESP_:
  117|  4.09k|    auto process = [this, pIterator, &ret](const Indexed<Target>& pair) {
  118|  4.09k|        Target response(pair.value);
  119|  4.09k|        response.status = this->ProcessCommand(pair.value, pair.index);
  120|       |
  121|  4.09k|        switch (response.status)
  122|  4.09k|        {
  123|  1.91k|        case (CommandStatus::SUCCESS):
  ------------------
  |  Branch (123:9): [True: 1.91k, False: 2.18k]
  ------------------
  124|  1.91k|            ++this->numSuccess;
  125|  1.91k|            break;
  126|      0|        case (CommandStatus::NOT_SUPPORTED):
  ------------------
  |  Branch (126:9): [True: 0, False: 4.09k]
  ------------------
  127|      0|            ret.SetBit(IINBit::PARAM_ERROR);
  128|      0|            break;
  129|  2.18k|        default:
  ------------------
  |  Branch (129:9): [True: 2.18k, False: 1.91k]
  ------------------
  130|  2.18k|            break;
  131|  4.09k|        }
  132|       |
  133|  4.09k|        if (pIterator)
  ------------------
  |  Branch (133:13): [True: 2.93k, False: 1.15k]
  ------------------
  134|  2.93k|        {
  135|  2.93k|            pIterator->Write(response, static_cast<typename IndexType::type_t>(pair.index));
  136|  2.93k|        }
  137|  4.09k|    };
_ZN8opendnp322CommandResponseHandler14ProcessCommandINS_17AnalogOutputInt16EEENS_13CommandStatusERKT_t:
  145|  22.3k|{
  146|  22.3k|    if (numRequests < maxCommands)
  ------------------
  |  Branch (146:9): [True: 22.3k, False: 0]
  ------------------
  147|  22.3k|    {
  148|  22.3k|        ++numRequests;
  149|  22.3k|        return pCommandAction->Action(command, index);
  150|  22.3k|    }
  151|      0|    else
  152|      0|    {
  153|      0|        return CommandStatus::TOO_MANY_OPS;
  154|      0|    }
  155|  22.3k|}
_ZN8opendnp322CommandResponseHandler15RespondToHeaderINS_17AnalogOutputInt32EN7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS9_EEEE:
  161|    809|{
  162|    809|    if (pWriter)
  ------------------
  |  Branch (162:9): [True: 509, False: 300]
  ------------------
  163|    509|    {
  164|    509|        auto iter = pWriter->IterateOverCountWithPrefix<IndexType, Target>(qualifier, serializer);
  165|    509|        return this->RespondToHeaderWithIterator<Target, IndexType>(qualifier, serializer, values, &iter);
  166|    509|    }
  167|    300|    else
  168|    300|    {
  169|    300|        return this->RespondToHeaderWithIterator<Target, IndexType>(qualifier, serializer, values);
  170|    300|    }
  171|    809|}
_ZN8opendnp322CommandResponseHandler27RespondToHeaderWithIteratorINS_17AnalogOutputInt32EN7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS9_EEEEPNS_21PrefixedWriteIteratorIT0_S9_EE:
  114|    809|{
  115|    809|    IINField ret;
  116|       |
  117|    809|    auto process = [this, pIterator, &ret](const Indexed<Target>& pair) {
  118|    809|        Target response(pair.value);
  119|    809|        response.status = this->ProcessCommand(pair.value, pair.index);
  120|       |
  121|    809|        switch (response.status)
  122|    809|        {
  123|    809|        case (CommandStatus::SUCCESS):
  124|    809|            ++this->numSuccess;
  125|    809|            break;
  126|    809|        case (CommandStatus::NOT_SUPPORTED):
  127|    809|            ret.SetBit(IINBit::PARAM_ERROR);
  128|    809|            break;
  129|    809|        default:
  130|    809|            break;
  131|    809|        }
  132|       |
  133|    809|        if (pIterator)
  134|    809|        {
  135|    809|            pIterator->Write(response, static_cast<typename IndexType::type_t>(pair.index));
  136|    809|        }
  137|    809|    };
  138|       |
  139|    809|    values.ForeachItem(process);
  140|       |
  141|    809|    return ret;
  142|    809|}
_ZZN8opendnp322CommandResponseHandler27RespondToHeaderWithIteratorINS_17AnalogOutputInt32EN7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS9_EEEEPNS_21PrefixedWriteIteratorIT0_S9_EEENKUlRKNSE_IS2_EEE_clESP_:
  117|  2.56k|    auto process = [this, pIterator, &ret](const Indexed<Target>& pair) {
  118|  2.56k|        Target response(pair.value);
  119|  2.56k|        response.status = this->ProcessCommand(pair.value, pair.index);
  120|       |
  121|  2.56k|        switch (response.status)
  122|  2.56k|        {
  123|  2.01k|        case (CommandStatus::SUCCESS):
  ------------------
  |  Branch (123:9): [True: 2.01k, False: 553]
  ------------------
  124|  2.01k|            ++this->numSuccess;
  125|  2.01k|            break;
  126|      0|        case (CommandStatus::NOT_SUPPORTED):
  ------------------
  |  Branch (126:9): [True: 0, False: 2.56k]
  ------------------
  127|      0|            ret.SetBit(IINBit::PARAM_ERROR);
  128|      0|            break;
  129|    553|        default:
  ------------------
  |  Branch (129:9): [True: 553, False: 2.01k]
  ------------------
  130|    553|            break;
  131|  2.56k|        }
  132|       |
  133|  2.56k|        if (pIterator)
  ------------------
  |  Branch (133:13): [True: 2.08k, False: 485]
  ------------------
  134|  2.08k|        {
  135|  2.08k|            pIterator->Write(response, static_cast<typename IndexType::type_t>(pair.index));
  136|  2.08k|        }
  137|  2.56k|    };
_ZN8opendnp322CommandResponseHandler14ProcessCommandINS_17AnalogOutputInt32EEENS_13CommandStatusERKT_t:
  145|  5.59k|{
  146|  5.59k|    if (numRequests < maxCommands)
  ------------------
  |  Branch (146:9): [True: 5.59k, False: 0]
  ------------------
  147|  5.59k|    {
  148|  5.59k|        ++numRequests;
  149|  5.59k|        return pCommandAction->Action(command, index);
  150|  5.59k|    }
  151|      0|    else
  152|      0|    {
  153|      0|        return CommandStatus::TOO_MANY_OPS;
  154|      0|    }
  155|  5.59k|}
_ZN8opendnp322CommandResponseHandler15RespondToHeaderINS_19AnalogOutputFloat32EN7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS9_EEEE:
  161|    649|{
  162|    649|    if (pWriter)
  ------------------
  |  Branch (162:9): [True: 490, False: 159]
  ------------------
  163|    490|    {
  164|    490|        auto iter = pWriter->IterateOverCountWithPrefix<IndexType, Target>(qualifier, serializer);
  165|    490|        return this->RespondToHeaderWithIterator<Target, IndexType>(qualifier, serializer, values, &iter);
  166|    490|    }
  167|    159|    else
  168|    159|    {
  169|    159|        return this->RespondToHeaderWithIterator<Target, IndexType>(qualifier, serializer, values);
  170|    159|    }
  171|    649|}
_ZN8opendnp322CommandResponseHandler27RespondToHeaderWithIteratorINS_19AnalogOutputFloat32EN7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS9_EEEEPNS_21PrefixedWriteIteratorIT0_S9_EE:
  114|    649|{
  115|    649|    IINField ret;
  116|       |
  117|    649|    auto process = [this, pIterator, &ret](const Indexed<Target>& pair) {
  118|    649|        Target response(pair.value);
  119|    649|        response.status = this->ProcessCommand(pair.value, pair.index);
  120|       |
  121|    649|        switch (response.status)
  122|    649|        {
  123|    649|        case (CommandStatus::SUCCESS):
  124|    649|            ++this->numSuccess;
  125|    649|            break;
  126|    649|        case (CommandStatus::NOT_SUPPORTED):
  127|    649|            ret.SetBit(IINBit::PARAM_ERROR);
  128|    649|            break;
  129|    649|        default:
  130|    649|            break;
  131|    649|        }
  132|       |
  133|    649|        if (pIterator)
  134|    649|        {
  135|    649|            pIterator->Write(response, static_cast<typename IndexType::type_t>(pair.index));
  136|    649|        }
  137|    649|    };
  138|       |
  139|    649|    values.ForeachItem(process);
  140|       |
  141|    649|    return ret;
  142|    649|}
_ZZN8opendnp322CommandResponseHandler27RespondToHeaderWithIteratorINS_19AnalogOutputFloat32EN7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS9_EEEEPNS_21PrefixedWriteIteratorIT0_S9_EEENKUlRKNSE_IS2_EEE_clESP_:
  117|  2.02k|    auto process = [this, pIterator, &ret](const Indexed<Target>& pair) {
  118|  2.02k|        Target response(pair.value);
  119|  2.02k|        response.status = this->ProcessCommand(pair.value, pair.index);
  120|       |
  121|  2.02k|        switch (response.status)
  122|  2.02k|        {
  123|  1.69k|        case (CommandStatus::SUCCESS):
  ------------------
  |  Branch (123:9): [True: 1.69k, False: 334]
  ------------------
  124|  1.69k|            ++this->numSuccess;
  125|  1.69k|            break;
  126|      0|        case (CommandStatus::NOT_SUPPORTED):
  ------------------
  |  Branch (126:9): [True: 0, False: 2.02k]
  ------------------
  127|      0|            ret.SetBit(IINBit::PARAM_ERROR);
  128|      0|            break;
  129|    334|        default:
  ------------------
  |  Branch (129:9): [True: 334, False: 1.69k]
  ------------------
  130|    334|            break;
  131|  2.02k|        }
  132|       |
  133|  2.02k|        if (pIterator)
  ------------------
  |  Branch (133:13): [True: 1.64k, False: 376]
  ------------------
  134|  1.64k|        {
  135|  1.64k|            pIterator->Write(response, static_cast<typename IndexType::type_t>(pair.index));
  136|  1.64k|        }
  137|  2.02k|    };
_ZN8opendnp322CommandResponseHandler14ProcessCommandINS_19AnalogOutputFloat32EEENS_13CommandStatusERKT_t:
  145|  8.19k|{
  146|  8.19k|    if (numRequests < maxCommands)
  ------------------
  |  Branch (146:9): [True: 8.19k, False: 0]
  ------------------
  147|  8.19k|    {
  148|  8.19k|        ++numRequests;
  149|  8.19k|        return pCommandAction->Action(command, index);
  150|  8.19k|    }
  151|      0|    else
  152|      0|    {
  153|      0|        return CommandStatus::TOO_MANY_OPS;
  154|      0|    }
  155|  8.19k|}
_ZN8opendnp322CommandResponseHandler15RespondToHeaderINS_20AnalogOutputDouble64EN7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS9_EEEE:
  161|    504|{
  162|    504|    if (pWriter)
  ------------------
  |  Branch (162:9): [True: 254, False: 250]
  ------------------
  163|    254|    {
  164|    254|        auto iter = pWriter->IterateOverCountWithPrefix<IndexType, Target>(qualifier, serializer);
  165|    254|        return this->RespondToHeaderWithIterator<Target, IndexType>(qualifier, serializer, values, &iter);
  166|    254|    }
  167|    250|    else
  168|    250|    {
  169|    250|        return this->RespondToHeaderWithIterator<Target, IndexType>(qualifier, serializer, values);
  170|    250|    }
  171|    504|}
_ZN8opendnp322CommandResponseHandler27RespondToHeaderWithIteratorINS_20AnalogOutputDouble64EN7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS9_EEEEPNS_21PrefixedWriteIteratorIT0_S9_EE:
  114|    504|{
  115|    504|    IINField ret;
  116|       |
  117|    504|    auto process = [this, pIterator, &ret](const Indexed<Target>& pair) {
  118|    504|        Target response(pair.value);
  119|    504|        response.status = this->ProcessCommand(pair.value, pair.index);
  120|       |
  121|    504|        switch (response.status)
  122|    504|        {
  123|    504|        case (CommandStatus::SUCCESS):
  124|    504|            ++this->numSuccess;
  125|    504|            break;
  126|    504|        case (CommandStatus::NOT_SUPPORTED):
  127|    504|            ret.SetBit(IINBit::PARAM_ERROR);
  128|    504|            break;
  129|    504|        default:
  130|    504|            break;
  131|    504|        }
  132|       |
  133|    504|        if (pIterator)
  134|    504|        {
  135|    504|            pIterator->Write(response, static_cast<typename IndexType::type_t>(pair.index));
  136|    504|        }
  137|    504|    };
  138|       |
  139|    504|    values.ForeachItem(process);
  140|       |
  141|    504|    return ret;
  142|    504|}
_ZZN8opendnp322CommandResponseHandler27RespondToHeaderWithIteratorINS_20AnalogOutputDouble64EN7ser4cpp5Bit16ItLh0ELh1EEEEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS9_EEEEPNS_21PrefixedWriteIteratorIT0_S9_EEENKUlRKNSE_IS2_EEE_clESP_:
  117|  1.99k|    auto process = [this, pIterator, &ret](const Indexed<Target>& pair) {
  118|  1.99k|        Target response(pair.value);
  119|  1.99k|        response.status = this->ProcessCommand(pair.value, pair.index);
  120|       |
  121|  1.99k|        switch (response.status)
  122|  1.99k|        {
  123|  1.24k|        case (CommandStatus::SUCCESS):
  ------------------
  |  Branch (123:9): [True: 1.24k, False: 743]
  ------------------
  124|  1.24k|            ++this->numSuccess;
  125|  1.24k|            break;
  126|      0|        case (CommandStatus::NOT_SUPPORTED):
  ------------------
  |  Branch (126:9): [True: 0, False: 1.99k]
  ------------------
  127|      0|            ret.SetBit(IINBit::PARAM_ERROR);
  128|      0|            break;
  129|    743|        default:
  ------------------
  |  Branch (129:9): [True: 743, False: 1.24k]
  ------------------
  130|    743|            break;
  131|  1.99k|        }
  132|       |
  133|  1.99k|        if (pIterator)
  ------------------
  |  Branch (133:13): [True: 1.30k, False: 689]
  ------------------
  134|  1.30k|        {
  135|  1.30k|            pIterator->Write(response, static_cast<typename IndexType::type_t>(pair.index));
  136|  1.30k|        }
  137|  1.99k|    };
_ZN8opendnp322CommandResponseHandler14ProcessCommandINS_20AnalogOutputDouble64EEENS_13CommandStatusERKT_t:
  145|  8.75k|{
  146|  8.75k|    if (numRequests < maxCommands)
  ------------------
  |  Branch (146:9): [True: 8.75k, False: 0]
  ------------------
  147|  8.75k|    {
  148|  8.75k|        ++numRequests;
  149|  8.75k|        return pCommandAction->Action(command, index);
  150|  8.75k|    }
  151|      0|    else
  152|      0|    {
  153|      0|        return CommandStatus::TOO_MANY_OPS;
  154|      0|    }
  155|  8.75k|}
_ZN8opendnp322CommandResponseHandler15RespondToHeaderINS_23ControlRelayOutputBlockEN7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS8_EEEE:
  161|    767|{
  162|    767|    if (pWriter)
  ------------------
  |  Branch (162:9): [True: 443, False: 324]
  ------------------
  163|    443|    {
  164|    443|        auto iter = pWriter->IterateOverCountWithPrefix<IndexType, Target>(qualifier, serializer);
  165|    443|        return this->RespondToHeaderWithIterator<Target, IndexType>(qualifier, serializer, values, &iter);
  166|    443|    }
  167|    324|    else
  168|    324|    {
  169|    324|        return this->RespondToHeaderWithIterator<Target, IndexType>(qualifier, serializer, values);
  170|    324|    }
  171|    767|}
_ZN8opendnp322CommandResponseHandler27RespondToHeaderWithIteratorINS_23ControlRelayOutputBlockEN7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS8_EEEEPNS_21PrefixedWriteIteratorIT0_S8_EE:
  114|    767|{
  115|    767|    IINField ret;
  116|       |
  117|    767|    auto process = [this, pIterator, &ret](const Indexed<Target>& pair) {
  118|    767|        Target response(pair.value);
  119|    767|        response.status = this->ProcessCommand(pair.value, pair.index);
  120|       |
  121|    767|        switch (response.status)
  122|    767|        {
  123|    767|        case (CommandStatus::SUCCESS):
  124|    767|            ++this->numSuccess;
  125|    767|            break;
  126|    767|        case (CommandStatus::NOT_SUPPORTED):
  127|    767|            ret.SetBit(IINBit::PARAM_ERROR);
  128|    767|            break;
  129|    767|        default:
  130|    767|            break;
  131|    767|        }
  132|       |
  133|    767|        if (pIterator)
  134|    767|        {
  135|    767|            pIterator->Write(response, static_cast<typename IndexType::type_t>(pair.index));
  136|    767|        }
  137|    767|    };
  138|       |
  139|    767|    values.ForeachItem(process);
  140|       |
  141|    767|    return ret;
  142|    767|}
_ZZN8opendnp322CommandResponseHandler27RespondToHeaderWithIteratorINS_23ControlRelayOutputBlockEN7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS8_EEEEPNS_21PrefixedWriteIteratorIT0_S8_EEENKUlRKNSD_IS2_EEE_clESO_:
  117|  3.25k|    auto process = [this, pIterator, &ret](const Indexed<Target>& pair) {
  118|  3.25k|        Target response(pair.value);
  119|  3.25k|        response.status = this->ProcessCommand(pair.value, pair.index);
  120|       |
  121|  3.25k|        switch (response.status)
  122|  3.25k|        {
  123|  1.79k|        case (CommandStatus::SUCCESS):
  ------------------
  |  Branch (123:9): [True: 1.79k, False: 1.45k]
  ------------------
  124|  1.79k|            ++this->numSuccess;
  125|  1.79k|            break;
  126|  1.20k|        case (CommandStatus::NOT_SUPPORTED):
  ------------------
  |  Branch (126:9): [True: 1.20k, False: 2.04k]
  ------------------
  127|  1.20k|            ret.SetBit(IINBit::PARAM_ERROR);
  128|  1.20k|            break;
  129|    251|        default:
  ------------------
  |  Branch (129:9): [True: 251, False: 3.00k]
  ------------------
  130|    251|            break;
  131|  3.25k|        }
  132|       |
  133|  3.25k|        if (pIterator)
  ------------------
  |  Branch (133:13): [True: 2.05k, False: 1.19k]
  ------------------
  134|  2.05k|        {
  135|  2.05k|            pIterator->Write(response, static_cast<typename IndexType::type_t>(pair.index));
  136|  2.05k|        }
  137|  3.25k|    };
_ZN8opendnp322CommandResponseHandler15RespondToHeaderINS_17AnalogOutputInt16EN7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS8_EEEE:
  161|  1.58k|{
  162|  1.58k|    if (pWriter)
  ------------------
  |  Branch (162:9): [True: 1.03k, False: 544]
  ------------------
  163|  1.03k|    {
  164|  1.03k|        auto iter = pWriter->IterateOverCountWithPrefix<IndexType, Target>(qualifier, serializer);
  165|  1.03k|        return this->RespondToHeaderWithIterator<Target, IndexType>(qualifier, serializer, values, &iter);
  166|  1.03k|    }
  167|    544|    else
  168|    544|    {
  169|    544|        return this->RespondToHeaderWithIterator<Target, IndexType>(qualifier, serializer, values);
  170|    544|    }
  171|  1.58k|}
_ZN8opendnp322CommandResponseHandler27RespondToHeaderWithIteratorINS_17AnalogOutputInt16EN7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS8_EEEEPNS_21PrefixedWriteIteratorIT0_S8_EE:
  114|  1.58k|{
  115|  1.58k|    IINField ret;
  116|       |
  117|  1.58k|    auto process = [this, pIterator, &ret](const Indexed<Target>& pair) {
  118|  1.58k|        Target response(pair.value);
  119|  1.58k|        response.status = this->ProcessCommand(pair.value, pair.index);
  120|       |
  121|  1.58k|        switch (response.status)
  122|  1.58k|        {
  123|  1.58k|        case (CommandStatus::SUCCESS):
  124|  1.58k|            ++this->numSuccess;
  125|  1.58k|            break;
  126|  1.58k|        case (CommandStatus::NOT_SUPPORTED):
  127|  1.58k|            ret.SetBit(IINBit::PARAM_ERROR);
  128|  1.58k|            break;
  129|  1.58k|        default:
  130|  1.58k|            break;
  131|  1.58k|        }
  132|       |
  133|  1.58k|        if (pIterator)
  134|  1.58k|        {
  135|  1.58k|            pIterator->Write(response, static_cast<typename IndexType::type_t>(pair.index));
  136|  1.58k|        }
  137|  1.58k|    };
  138|       |
  139|  1.58k|    values.ForeachItem(process);
  140|       |
  141|  1.58k|    return ret;
  142|  1.58k|}
_ZZN8opendnp322CommandResponseHandler27RespondToHeaderWithIteratorINS_17AnalogOutputInt16EN7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS8_EEEEPNS_21PrefixedWriteIteratorIT0_S8_EEENKUlRKNSD_IS2_EEE_clESO_:
  117|  18.2k|    auto process = [this, pIterator, &ret](const Indexed<Target>& pair) {
  118|  18.2k|        Target response(pair.value);
  119|  18.2k|        response.status = this->ProcessCommand(pair.value, pair.index);
  120|       |
  121|  18.2k|        switch (response.status)
  122|  18.2k|        {
  123|  14.8k|        case (CommandStatus::SUCCESS):
  ------------------
  |  Branch (123:9): [True: 14.8k, False: 3.37k]
  ------------------
  124|  14.8k|            ++this->numSuccess;
  125|  14.8k|            break;
  126|      0|        case (CommandStatus::NOT_SUPPORTED):
  ------------------
  |  Branch (126:9): [True: 0, False: 18.2k]
  ------------------
  127|      0|            ret.SetBit(IINBit::PARAM_ERROR);
  128|      0|            break;
  129|  3.37k|        default:
  ------------------
  |  Branch (129:9): [True: 3.37k, False: 14.8k]
  ------------------
  130|  3.37k|            break;
  131|  18.2k|        }
  132|       |
  133|  18.2k|        if (pIterator)
  ------------------
  |  Branch (133:13): [True: 10.3k, False: 7.84k]
  ------------------
  134|  10.3k|        {
  135|  10.3k|            pIterator->Write(response, static_cast<typename IndexType::type_t>(pair.index));
  136|  10.3k|        }
  137|  18.2k|    };
_ZN8opendnp322CommandResponseHandler15RespondToHeaderINS_17AnalogOutputInt32EN7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS8_EEEE:
  161|    808|{
  162|    808|    if (pWriter)
  ------------------
  |  Branch (162:9): [True: 488, False: 320]
  ------------------
  163|    488|    {
  164|    488|        auto iter = pWriter->IterateOverCountWithPrefix<IndexType, Target>(qualifier, serializer);
  165|    488|        return this->RespondToHeaderWithIterator<Target, IndexType>(qualifier, serializer, values, &iter);
  166|    488|    }
  167|    320|    else
  168|    320|    {
  169|    320|        return this->RespondToHeaderWithIterator<Target, IndexType>(qualifier, serializer, values);
  170|    320|    }
  171|    808|}
_ZN8opendnp322CommandResponseHandler27RespondToHeaderWithIteratorINS_17AnalogOutputInt32EN7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS8_EEEEPNS_21PrefixedWriteIteratorIT0_S8_EE:
  114|    808|{
  115|    808|    IINField ret;
  116|       |
  117|    808|    auto process = [this, pIterator, &ret](const Indexed<Target>& pair) {
  118|    808|        Target response(pair.value);
  119|    808|        response.status = this->ProcessCommand(pair.value, pair.index);
  120|       |
  121|    808|        switch (response.status)
  122|    808|        {
  123|    808|        case (CommandStatus::SUCCESS):
  124|    808|            ++this->numSuccess;
  125|    808|            break;
  126|    808|        case (CommandStatus::NOT_SUPPORTED):
  127|    808|            ret.SetBit(IINBit::PARAM_ERROR);
  128|    808|            break;
  129|    808|        default:
  130|    808|            break;
  131|    808|        }
  132|       |
  133|    808|        if (pIterator)
  134|    808|        {
  135|    808|            pIterator->Write(response, static_cast<typename IndexType::type_t>(pair.index));
  136|    808|        }
  137|    808|    };
  138|       |
  139|    808|    values.ForeachItem(process);
  140|       |
  141|    808|    return ret;
  142|    808|}
_ZZN8opendnp322CommandResponseHandler27RespondToHeaderWithIteratorINS_17AnalogOutputInt32EN7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS8_EEEEPNS_21PrefixedWriteIteratorIT0_S8_EEENKUlRKNSD_IS2_EEE_clESO_:
  117|  3.02k|    auto process = [this, pIterator, &ret](const Indexed<Target>& pair) {
  118|  3.02k|        Target response(pair.value);
  119|  3.02k|        response.status = this->ProcessCommand(pair.value, pair.index);
  120|       |
  121|  3.02k|        switch (response.status)
  122|  3.02k|        {
  123|  2.30k|        case (CommandStatus::SUCCESS):
  ------------------
  |  Branch (123:9): [True: 2.30k, False: 724]
  ------------------
  124|  2.30k|            ++this->numSuccess;
  125|  2.30k|            break;
  126|      0|        case (CommandStatus::NOT_SUPPORTED):
  ------------------
  |  Branch (126:9): [True: 0, False: 3.02k]
  ------------------
  127|      0|            ret.SetBit(IINBit::PARAM_ERROR);
  128|      0|            break;
  129|    724|        default:
  ------------------
  |  Branch (129:9): [True: 724, False: 2.30k]
  ------------------
  130|    724|            break;
  131|  3.02k|        }
  132|       |
  133|  3.02k|        if (pIterator)
  ------------------
  |  Branch (133:13): [True: 2.16k, False: 857]
  ------------------
  134|  2.16k|        {
  135|  2.16k|            pIterator->Write(response, static_cast<typename IndexType::type_t>(pair.index));
  136|  2.16k|        }
  137|  3.02k|    };
_ZN8opendnp322CommandResponseHandler15RespondToHeaderINS_19AnalogOutputFloat32EN7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS8_EEEE:
  161|  1.14k|{
  162|  1.14k|    if (pWriter)
  ------------------
  |  Branch (162:9): [True: 863, False: 281]
  ------------------
  163|    863|    {
  164|    863|        auto iter = pWriter->IterateOverCountWithPrefix<IndexType, Target>(qualifier, serializer);
  165|    863|        return this->RespondToHeaderWithIterator<Target, IndexType>(qualifier, serializer, values, &iter);
  166|    863|    }
  167|    281|    else
  168|    281|    {
  169|    281|        return this->RespondToHeaderWithIterator<Target, IndexType>(qualifier, serializer, values);
  170|    281|    }
  171|  1.14k|}
_ZN8opendnp322CommandResponseHandler27RespondToHeaderWithIteratorINS_19AnalogOutputFloat32EN7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS8_EEEEPNS_21PrefixedWriteIteratorIT0_S8_EE:
  114|  1.14k|{
  115|  1.14k|    IINField ret;
  116|       |
  117|  1.14k|    auto process = [this, pIterator, &ret](const Indexed<Target>& pair) {
  118|  1.14k|        Target response(pair.value);
  119|  1.14k|        response.status = this->ProcessCommand(pair.value, pair.index);
  120|       |
  121|  1.14k|        switch (response.status)
  122|  1.14k|        {
  123|  1.14k|        case (CommandStatus::SUCCESS):
  124|  1.14k|            ++this->numSuccess;
  125|  1.14k|            break;
  126|  1.14k|        case (CommandStatus::NOT_SUPPORTED):
  127|  1.14k|            ret.SetBit(IINBit::PARAM_ERROR);
  128|  1.14k|            break;
  129|  1.14k|        default:
  130|  1.14k|            break;
  131|  1.14k|        }
  132|       |
  133|  1.14k|        if (pIterator)
  134|  1.14k|        {
  135|  1.14k|            pIterator->Write(response, static_cast<typename IndexType::type_t>(pair.index));
  136|  1.14k|        }
  137|  1.14k|    };
  138|       |
  139|  1.14k|    values.ForeachItem(process);
  140|       |
  141|  1.14k|    return ret;
  142|  1.14k|}
_ZZN8opendnp322CommandResponseHandler27RespondToHeaderWithIteratorINS_19AnalogOutputFloat32EN7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS8_EEEEPNS_21PrefixedWriteIteratorIT0_S8_EEENKUlRKNSD_IS2_EEE_clESO_:
  117|  6.16k|    auto process = [this, pIterator, &ret](const Indexed<Target>& pair) {
  118|  6.16k|        Target response(pair.value);
  119|  6.16k|        response.status = this->ProcessCommand(pair.value, pair.index);
  120|       |
  121|  6.16k|        switch (response.status)
  122|  6.16k|        {
  123|  4.96k|        case (CommandStatus::SUCCESS):
  ------------------
  |  Branch (123:9): [True: 4.96k, False: 1.20k]
  ------------------
  124|  4.96k|            ++this->numSuccess;
  125|  4.96k|            break;
  126|      0|        case (CommandStatus::NOT_SUPPORTED):
  ------------------
  |  Branch (126:9): [True: 0, False: 6.16k]
  ------------------
  127|      0|            ret.SetBit(IINBit::PARAM_ERROR);
  128|      0|            break;
  129|  1.20k|        default:
  ------------------
  |  Branch (129:9): [True: 1.20k, False: 4.96k]
  ------------------
  130|  1.20k|            break;
  131|  6.16k|        }
  132|       |
  133|  6.16k|        if (pIterator)
  ------------------
  |  Branch (133:13): [True: 5.15k, False: 1.01k]
  ------------------
  134|  5.15k|        {
  135|  5.15k|            pIterator->Write(response, static_cast<typename IndexType::type_t>(pair.index));
  136|  5.15k|        }
  137|  6.16k|    };
_ZN8opendnp322CommandResponseHandler15RespondToHeaderINS_20AnalogOutputDouble64EN7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS8_EEEE:
  161|  1.38k|{
  162|  1.38k|    if (pWriter)
  ------------------
  |  Branch (162:9): [True: 881, False: 501]
  ------------------
  163|    881|    {
  164|    881|        auto iter = pWriter->IterateOverCountWithPrefix<IndexType, Target>(qualifier, serializer);
  165|    881|        return this->RespondToHeaderWithIterator<Target, IndexType>(qualifier, serializer, values, &iter);
  166|    881|    }
  167|    501|    else
  168|    501|    {
  169|    501|        return this->RespondToHeaderWithIterator<Target, IndexType>(qualifier, serializer, values);
  170|    501|    }
  171|  1.38k|}
_ZN8opendnp322CommandResponseHandler27RespondToHeaderWithIteratorINS_20AnalogOutputDouble64EN7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS8_EEEEPNS_21PrefixedWriteIteratorIT0_S8_EE:
  114|  1.38k|{
  115|  1.38k|    IINField ret;
  116|       |
  117|  1.38k|    auto process = [this, pIterator, &ret](const Indexed<Target>& pair) {
  118|  1.38k|        Target response(pair.value);
  119|  1.38k|        response.status = this->ProcessCommand(pair.value, pair.index);
  120|       |
  121|  1.38k|        switch (response.status)
  122|  1.38k|        {
  123|  1.38k|        case (CommandStatus::SUCCESS):
  124|  1.38k|            ++this->numSuccess;
  125|  1.38k|            break;
  126|  1.38k|        case (CommandStatus::NOT_SUPPORTED):
  127|  1.38k|            ret.SetBit(IINBit::PARAM_ERROR);
  128|  1.38k|            break;
  129|  1.38k|        default:
  130|  1.38k|            break;
  131|  1.38k|        }
  132|       |
  133|  1.38k|        if (pIterator)
  134|  1.38k|        {
  135|  1.38k|            pIterator->Write(response, static_cast<typename IndexType::type_t>(pair.index));
  136|  1.38k|        }
  137|  1.38k|    };
  138|       |
  139|  1.38k|    values.ForeachItem(process);
  140|       |
  141|  1.38k|    return ret;
  142|  1.38k|}
_ZZN8opendnp322CommandResponseHandler27RespondToHeaderWithIteratorINS_20AnalogOutputDouble64EN7ser4cpp5UInt8EEENS_8IINFieldENS_13QualifierCodeERKNS_14DNP3SerializerIT_EERKNS_11ICollectionINS_7IndexedIS8_EEEEPNS_21PrefixedWriteIteratorIT0_S8_EEENKUlRKNSD_IS2_EEE_clESO_:
  117|  6.76k|    auto process = [this, pIterator, &ret](const Indexed<Target>& pair) {
  118|  6.76k|        Target response(pair.value);
  119|  6.76k|        response.status = this->ProcessCommand(pair.value, pair.index);
  120|       |
  121|  6.76k|        switch (response.status)
  122|  6.76k|        {
  123|  5.58k|        case (CommandStatus::SUCCESS):
  ------------------
  |  Branch (123:9): [True: 5.58k, False: 1.18k]
  ------------------
  124|  5.58k|            ++this->numSuccess;
  125|  5.58k|            break;
  126|      0|        case (CommandStatus::NOT_SUPPORTED):
  ------------------
  |  Branch (126:9): [True: 0, False: 6.76k]
  ------------------
  127|      0|            ret.SetBit(IINBit::PARAM_ERROR);
  128|      0|            break;
  129|  1.18k|        default:
  ------------------
  |  Branch (129:9): [True: 1.18k, False: 5.58k]
  ------------------
  130|  1.18k|            break;
  131|  6.76k|        }
  132|       |
  133|  6.76k|        if (pIterator)
  ------------------
  |  Branch (133:13): [True: 5.34k, False: 1.42k]
  ------------------
  134|  5.34k|        {
  135|  5.34k|            pIterator->Write(response, static_cast<typename IndexType::type_t>(pair.index));
  136|  5.34k|        }
  137|  6.76k|    };

_ZN8opendnp321ConstantCommandActionC2ENS_13CommandStatusE:
   35|    334|    ConstantCommandAction(CommandStatus status_) : status(status_) {}
_ZN8opendnp321ConstantCommandAction6ActionERKNS_23ControlRelayOutputBlockEt:
   38|  1.01k|    {
   39|  1.01k|        return status;
   40|  1.01k|    }
_ZN8opendnp321ConstantCommandAction6ActionERKNS_17AnalogOutputInt16Et:
   43|  5.56k|    {
   44|  5.56k|        return status;
   45|  5.56k|    }
_ZN8opendnp321ConstantCommandAction6ActionERKNS_17AnalogOutputInt32Et:
   48|  1.27k|    {
   49|  1.27k|        return status;
   50|  1.27k|    }
_ZN8opendnp321ConstantCommandAction6ActionERKNS_19AnalogOutputFloat32Et:
   53|  1.53k|    {
   54|  1.53k|        return status;
   55|  1.53k|    }
_ZN8opendnp321ConstantCommandAction6ActionERKNS_20AnalogOutputDouble64Et:
   58|  1.92k|    {
   59|  1.92k|        return status;
   60|  1.92k|    }

_ZNK8opendnp312ControlState17ValidateSelectionERKNS_11SequenceNumIhLh16EEERKNS_9TimestampERKNS_12TimeDurationERKN7ser4cpp4RSeqImEE:
   45|    334|    {
   46|    334|        if (selected && expectedSeq.Equals(seq))
  ------------------
  |  Branch (46:13): [True: 0, False: 334]
  |  Branch (46:25): [True: 0, False: 0]
  ------------------
   47|      0|        {
   48|      0|            if (selectTime <= now)
  ------------------
  |  Branch (48:17): [True: 0, False: 0]
  ------------------
   49|      0|            {
   50|      0|                auto elapsed = now - selectTime;
   51|      0|                if (elapsed < timeout)
  ------------------
  |  Branch (51:21): [True: 0, False: 0]
  ------------------
   52|      0|                {
   53|      0|                    if (length == objects.length() && digest == CRC::CalcCrc(objects))
  ------------------
  |  Branch (53:25): [True: 0, False: 0]
  |  Branch (53:55): [True: 0, False: 0]
  ------------------
   54|      0|                    {
   55|      0|                        return CommandStatus::SUCCESS;
   56|      0|                    }
   57|      0|                    else
   58|      0|                    {
   59|      0|                        return CommandStatus::NO_SELECT;
   60|      0|                    }
   61|      0|                }
   62|      0|                else
   63|      0|                {
   64|      0|                    return CommandStatus::TIMEOUT;
   65|      0|                }
   66|      0|            }
   67|      0|            else
   68|      0|            {
   69|      0|                return CommandStatus::TIMEOUT;
   70|      0|            }
   71|      0|        }
   72|    334|        else
   73|    334|        {
   74|    334|            return CommandStatus::NO_SELECT;
   75|    334|        }
   76|    334|    }
_ZN8opendnp312ControlState6SelectERKNS_11SequenceNumIhLh16EEERKNS_9TimestampERKN7ser4cpp4RSeqImEE:
   79|    235|    {
   80|    235|        selected = true;
   81|    235|        selectTime = now;
   82|    235|        expectedSeq = currentSeqN.Next();
   83|    235|        digest = CRC::CalcCrc(objects);
   84|    235|        length = objects.length();
   85|    235|    }
_ZN8opendnp312ControlState8UnselectEv:
   88|    334|    {
   89|    334|        selected = false;
   90|    334|    }
_ZN8opendnp312ControlStateC2Ev:
   39|  8.87k|    ControlState() = default;

_ZN8opendnp38DatabaseC2ERKNS_14DatabaseConfigERNS_14IEventReceiverERNS_14IDnpTimeSourceENS_18StaticTypeBitFieldE:
   83|  8.87k|    : event_receiver(event_receiver),
   84|  8.87k|      time_source(time_source),
   85|  8.87k|      allowed_class_zero_types(allowed_class_zero_types),
   86|  8.87k|      binary_input(config.binary_input),
   87|  8.87k|      double_binary(config.double_binary),
   88|  8.87k|      analog_input(config.analog_input),
   89|  8.87k|      counter(config.counter),
   90|  8.87k|      frozen_counter(config.frozen_counter),
   91|  8.87k|      binary_output_status(config.binary_output_status),
   92|  8.87k|      analog_output_status(config.analog_output_status),
   93|  8.87k|      time_and_interval(config.time_and_interval),
   94|  8.87k|      octet_string(config.octet_string)
   95|  8.87k|{
   96|  8.87k|}
_ZN8opendnp38Database9SelectAllENS_14GroupVariationE:
   99|  38.7k|{
  100|  38.7k|    if (gv == GroupVariation::Group60Var1)
  ------------------
  |  Branch (100:9): [True: 1.75k, False: 36.9k]
  ------------------
  101|  1.75k|    {
  102|  1.75k|        this->select_all_class_zero<BinarySpec>(this->binary_input);
  103|  1.75k|        this->select_all_class_zero<DoubleBitBinarySpec>(this->double_binary);
  104|  1.75k|        this->select_all_class_zero<BinaryOutputStatusSpec>(this->binary_output_status);
  105|  1.75k|        this->select_all_class_zero<CounterSpec>(this->counter);
  106|  1.75k|        this->select_all_class_zero<FrozenCounterSpec>(this->frozen_counter);
  107|  1.75k|        this->select_all_class_zero<AnalogSpec>(this->analog_input);
  108|  1.75k|        this->select_all_class_zero<AnalogOutputStatusSpec>(this->analog_output_status);
  109|  1.75k|        this->select_all_class_zero<TimeAndIntervalSpec>(this->time_and_interval);
  110|  1.75k|        this->select_all_class_zero<OctetStringSpec>(this->octet_string);
  111|       |
  112|  1.75k|        return IINField::Empty();
  113|  1.75k|    }
  114|       |
  115|  36.9k|    switch (gv)
  116|  36.9k|    {
  117|  1.29k|    case (GroupVariation::Group1Var0):
  ------------------
  |  Branch (117:5): [True: 1.29k, False: 35.6k]
  ------------------
  118|  1.29k|        return select_all<BinarySpec>(this->binary_input);
  119|  1.23k|    case (GroupVariation::Group1Var1):
  ------------------
  |  Branch (119:5): [True: 1.23k, False: 35.7k]
  ------------------
  120|  1.23k|        return select_all<BinarySpec>(this->binary_input, StaticBinaryVariation::Group1Var1);
  121|    854|    case (GroupVariation::Group1Var2):
  ------------------
  |  Branch (121:5): [True: 854, False: 36.1k]
  ------------------
  122|    854|        return select_all<BinarySpec>(this->binary_input, StaticBinaryVariation::Group1Var2);
  123|       |
  124|  1.07k|    case (GroupVariation::Group3Var0):
  ------------------
  |  Branch (124:5): [True: 1.07k, False: 35.9k]
  ------------------
  125|  1.07k|        return select_all<DoubleBitBinarySpec>(this->double_binary);
  126|    974|    case (GroupVariation::Group3Var2):
  ------------------
  |  Branch (126:5): [True: 974, False: 36.0k]
  ------------------
  127|    974|        return select_all<DoubleBitBinarySpec>(this->double_binary, StaticDoubleBinaryVariation::Group3Var2);
  128|       |
  129|  1.13k|    case (GroupVariation::Group10Var0):
  ------------------
  |  Branch (129:5): [True: 1.13k, False: 35.8k]
  ------------------
  130|  1.13k|        return select_all<BinaryOutputStatusSpec>(this->binary_output_status);
  131|  1.27k|    case (GroupVariation::Group10Var2):
  ------------------
  |  Branch (131:5): [True: 1.27k, False: 35.7k]
  ------------------
  132|  1.27k|        return select_all<BinaryOutputStatusSpec>(this->binary_output_status,
  133|  1.27k|                                                  StaticBinaryOutputStatusVariation::Group10Var2);
  134|       |
  135|  1.30k|    case (GroupVariation::Group20Var0):
  ------------------
  |  Branch (135:5): [True: 1.30k, False: 35.6k]
  ------------------
  136|  1.30k|        return select_all<CounterSpec>(this->counter);
  137|  1.49k|    case (GroupVariation::Group20Var1):
  ------------------
  |  Branch (137:5): [True: 1.49k, False: 35.4k]
  ------------------
  138|  1.49k|        return select_all<CounterSpec>(this->counter, StaticCounterVariation::Group20Var1);
  139|  1.29k|    case (GroupVariation::Group20Var2):
  ------------------
  |  Branch (139:5): [True: 1.29k, False: 35.6k]
  ------------------
  140|  1.29k|        return select_all<CounterSpec>(this->counter, StaticCounterVariation::Group20Var2);
  141|    875|    case (GroupVariation::Group20Var5):
  ------------------
  |  Branch (141:5): [True: 875, False: 36.1k]
  ------------------
  142|    875|        return select_all<CounterSpec>(this->counter, StaticCounterVariation::Group20Var5);
  143|    849|    case (GroupVariation::Group20Var6):
  ------------------
  |  Branch (143:5): [True: 849, False: 36.1k]
  ------------------
  144|    849|        return select_all<CounterSpec>(this->counter, StaticCounterVariation::Group20Var6);
  145|       |
  146|    832|    case (GroupVariation::Group21Var0):
  ------------------
  |  Branch (146:5): [True: 832, False: 36.1k]
  ------------------
  147|    832|        return select_all<FrozenCounterSpec>(this->frozen_counter);
  148|  1.04k|    case (GroupVariation::Group21Var1):
  ------------------
  |  Branch (148:5): [True: 1.04k, False: 35.9k]
  ------------------
  149|  1.04k|        return select_all<FrozenCounterSpec>(this->frozen_counter, StaticFrozenCounterVariation::Group21Var1);
  150|    966|    case (GroupVariation::Group21Var2):
  ------------------
  |  Branch (150:5): [True: 966, False: 36.0k]
  ------------------
  151|    966|        return select_all<FrozenCounterSpec>(this->frozen_counter, StaticFrozenCounterVariation::Group21Var2);
  152|  1.31k|    case (GroupVariation::Group21Var5):
  ------------------
  |  Branch (152:5): [True: 1.31k, False: 35.6k]
  ------------------
  153|  1.31k|        return select_all<FrozenCounterSpec>(this->frozen_counter, StaticFrozenCounterVariation::Group21Var5);
  154|  1.07k|    case (GroupVariation::Group21Var6):
  ------------------
  |  Branch (154:5): [True: 1.07k, False: 35.9k]
  ------------------
  155|  1.07k|        return select_all<FrozenCounterSpec>(this->frozen_counter, StaticFrozenCounterVariation::Group21Var6);
  156|    940|    case (GroupVariation::Group21Var9):
  ------------------
  |  Branch (156:5): [True: 940, False: 36.0k]
  ------------------
  157|    940|        return select_all<FrozenCounterSpec>(this->frozen_counter, StaticFrozenCounterVariation::Group21Var9);
  158|    986|    case (GroupVariation::Group21Var10):
  ------------------
  |  Branch (158:5): [True: 986, False: 35.9k]
  ------------------
  159|    986|        return select_all<FrozenCounterSpec>(this->frozen_counter, StaticFrozenCounterVariation::Group21Var10);
  160|       |
  161|  1.30k|    case (GroupVariation::Group30Var0):
  ------------------
  |  Branch (161:5): [True: 1.30k, False: 35.6k]
  ------------------
  162|  1.30k|        return select_all<AnalogSpec>(this->analog_input);
  163|  1.22k|    case (GroupVariation::Group30Var1):
  ------------------
  |  Branch (163:5): [True: 1.22k, False: 35.7k]
  ------------------
  164|  1.22k|        return select_all<AnalogSpec>(this->analog_input, StaticAnalogVariation::Group30Var1);
  165|  1.15k|    case (GroupVariation::Group30Var2):
  ------------------
  |  Branch (165:5): [True: 1.15k, False: 35.8k]
  ------------------
  166|  1.15k|        return select_all<AnalogSpec>(this->analog_input, StaticAnalogVariation::Group30Var2);
  167|  1.10k|    case (GroupVariation::Group30Var3):
  ------------------
  |  Branch (167:5): [True: 1.10k, False: 35.8k]
  ------------------
  168|  1.10k|        return select_all<AnalogSpec>(this->analog_input, StaticAnalogVariation::Group30Var3);
  169|  1.07k|    case (GroupVariation::Group30Var4):
  ------------------
  |  Branch (169:5): [True: 1.07k, False: 35.9k]
  ------------------
  170|  1.07k|        return select_all<AnalogSpec>(this->analog_input, StaticAnalogVariation::Group30Var4);
  171|    881|    case (GroupVariation::Group30Var5):
  ------------------
  |  Branch (171:5): [True: 881, False: 36.0k]
  ------------------
  172|    881|        return select_all<AnalogSpec>(this->analog_input, StaticAnalogVariation::Group30Var5);
  173|  1.02k|    case (GroupVariation::Group30Var6):
  ------------------
  |  Branch (173:5): [True: 1.02k, False: 35.9k]
  ------------------
  174|  1.02k|        return select_all<AnalogSpec>(this->analog_input, StaticAnalogVariation::Group30Var6);
  175|       |
  176|  1.13k|    case (GroupVariation::Group40Var0):
  ------------------
  |  Branch (176:5): [True: 1.13k, False: 35.8k]
  ------------------
  177|  1.13k|        return select_all<AnalogOutputStatusSpec>(this->analog_output_status);
  178|  1.67k|    case (GroupVariation::Group40Var1):
  ------------------
  |  Branch (178:5): [True: 1.67k, False: 35.3k]
  ------------------
  179|  1.67k|        return select_all<AnalogOutputStatusSpec>(this->analog_output_status,
  180|  1.67k|                                                  StaticAnalogOutputStatusVariation::Group40Var1);
  181|  1.18k|    case (GroupVariation::Group40Var2):
  ------------------
  |  Branch (181:5): [True: 1.18k, False: 35.7k]
  ------------------
  182|  1.18k|        return select_all<AnalogOutputStatusSpec>(this->analog_output_status,
  183|  1.18k|                                                  StaticAnalogOutputStatusVariation::Group40Var2);
  184|  1.08k|    case (GroupVariation::Group40Var3):
  ------------------
  |  Branch (184:5): [True: 1.08k, False: 35.8k]
  ------------------
  185|  1.08k|        return select_all<AnalogOutputStatusSpec>(this->analog_output_status,
  186|  1.08k|                                                  StaticAnalogOutputStatusVariation::Group40Var3);
  187|    847|    case (GroupVariation::Group40Var4):
  ------------------
  |  Branch (187:5): [True: 847, False: 36.1k]
  ------------------
  188|    847|        return select_all<AnalogOutputStatusSpec>(this->analog_output_status,
  189|    847|                                                  StaticAnalogOutputStatusVariation::Group40Var4);
  190|       |
  191|    829|    case (GroupVariation::Group50Var4):
  ------------------
  |  Branch (191:5): [True: 829, False: 36.1k]
  ------------------
  192|    829|        return select_all<TimeAndIntervalSpec>(this->time_and_interval, StaticTimeAndIntervalVariation::Group50Var4);
  193|       |
  194|  1.07k|    case (GroupVariation::Group110Var0):
  ------------------
  |  Branch (194:5): [True: 1.07k, False: 35.9k]
  ------------------
  195|  1.07k|        return select_all<OctetStringSpec>(this->octet_string);
  196|       |
  197|    563|    default:
  ------------------
  |  Branch (197:5): [True: 563, False: 36.4k]
  ------------------
  198|    563|        return IINField(IINBit::FUNC_NOT_SUPPORTED);
  199|  36.9k|    }
  200|  36.9k|}
_ZN8opendnp38Database11SelectRangeENS_14GroupVariationERKNS_5RangeE:
  203|  20.4k|{
  204|  20.4k|    switch (gv)
  205|  20.4k|    {
  206|    882|    case (GroupVariation::Group1Var0):
  ------------------
  |  Branch (206:5): [True: 882, False: 19.5k]
  ------------------
  207|    882|        return select_range<BinarySpec>(this->binary_input, range);
  208|    520|    case (GroupVariation::Group1Var1):
  ------------------
  |  Branch (208:5): [True: 520, False: 19.8k]
  ------------------
  209|    520|        return select_range<BinarySpec>(this->binary_input, range, StaticBinaryVariation::Group1Var1);
  210|    408|    case (GroupVariation::Group1Var2):
  ------------------
  |  Branch (210:5): [True: 408, False: 19.9k]
  ------------------
  211|    408|        return select_range<BinarySpec>(this->binary_input, range, StaticBinaryVariation::Group1Var2);
  212|       |
  213|    359|    case (GroupVariation::Group3Var0):
  ------------------
  |  Branch (213:5): [True: 359, False: 20.0k]
  ------------------
  214|    359|        return select_range<DoubleBitBinarySpec>(this->double_binary, range);
  215|    609|    case (GroupVariation::Group3Var2):
  ------------------
  |  Branch (215:5): [True: 609, False: 19.7k]
  ------------------
  216|    609|        return select_range<DoubleBitBinarySpec>(this->double_binary, range, StaticDoubleBinaryVariation::Group3Var2);
  217|       |
  218|    487|    case (GroupVariation::Group10Var0):
  ------------------
  |  Branch (218:5): [True: 487, False: 19.9k]
  ------------------
  219|    487|        return select_range<BinaryOutputStatusSpec>(this->binary_output_status, range);
  220|    659|    case (GroupVariation::Group10Var2):
  ------------------
  |  Branch (220:5): [True: 659, False: 19.7k]
  ------------------
  221|    659|        return select_range<BinaryOutputStatusSpec>(this->binary_output_status, range,
  222|    659|                                                    StaticBinaryOutputStatusVariation::Group10Var2);
  223|       |
  224|  1.15k|    case (GroupVariation::Group20Var0):
  ------------------
  |  Branch (224:5): [True: 1.15k, False: 19.2k]
  ------------------
  225|  1.15k|        return select_range<CounterSpec>(this->counter, range);
  226|    631|    case (GroupVariation::Group20Var1):
  ------------------
  |  Branch (226:5): [True: 631, False: 19.7k]
  ------------------
  227|    631|        return select_range<CounterSpec>(this->counter, range, StaticCounterVariation::Group20Var1);
  228|    669|    case (GroupVariation::Group20Var2):
  ------------------
  |  Branch (228:5): [True: 669, False: 19.7k]
  ------------------
  229|    669|        return select_range<CounterSpec>(this->counter, range, StaticCounterVariation::Group20Var2);
  230|    869|    case (GroupVariation::Group20Var5):
  ------------------
  |  Branch (230:5): [True: 869, False: 19.5k]
  ------------------
  231|    869|        return select_range<CounterSpec>(this->counter, range, StaticCounterVariation::Group20Var5);
  232|    405|    case (GroupVariation::Group20Var6):
  ------------------
  |  Branch (232:5): [True: 405, False: 20.0k]
  ------------------
  233|    405|        return select_range<CounterSpec>(this->counter, range, StaticCounterVariation::Group20Var6);
  234|       |
  235|    836|    case (GroupVariation::Group21Var0):
  ------------------
  |  Branch (235:5): [True: 836, False: 19.5k]
  ------------------
  236|    836|        return select_range<FrozenCounterSpec>(this->frozen_counter, range);
  237|    538|    case (GroupVariation::Group21Var1):
  ------------------
  |  Branch (237:5): [True: 538, False: 19.8k]
  ------------------
  238|    538|        return select_range<FrozenCounterSpec>(this->frozen_counter, range, StaticFrozenCounterVariation::Group21Var1);
  239|    484|    case (GroupVariation::Group21Var2):
  ------------------
  |  Branch (239:5): [True: 484, False: 19.9k]
  ------------------
  240|    484|        return select_range<FrozenCounterSpec>(this->frozen_counter, range, StaticFrozenCounterVariation::Group21Var2);
  241|    567|    case (GroupVariation::Group21Var5):
  ------------------
  |  Branch (241:5): [True: 567, False: 19.8k]
  ------------------
  242|    567|        return select_range<FrozenCounterSpec>(this->frozen_counter, range, StaticFrozenCounterVariation::Group21Var5);
  243|    869|    case (GroupVariation::Group21Var6):
  ------------------
  |  Branch (243:5): [True: 869, False: 19.5k]
  ------------------
  244|    869|        return select_range<FrozenCounterSpec>(this->frozen_counter, range, StaticFrozenCounterVariation::Group21Var6);
  245|    551|    case (GroupVariation::Group21Var9):
  ------------------
  |  Branch (245:5): [True: 551, False: 19.8k]
  ------------------
  246|    551|        return select_range<FrozenCounterSpec>(this->frozen_counter, range, StaticFrozenCounterVariation::Group21Var9);
  247|    536|    case (GroupVariation::Group21Var10):
  ------------------
  |  Branch (247:5): [True: 536, False: 19.8k]
  ------------------
  248|    536|        return select_range<FrozenCounterSpec>(this->frozen_counter, range, StaticFrozenCounterVariation::Group21Var10);
  249|       |
  250|    491|    case (GroupVariation::Group30Var0):
  ------------------
  |  Branch (250:5): [True: 491, False: 19.9k]
  ------------------
  251|    491|        return select_range<AnalogSpec>(this->analog_input, range);
  252|    316|    case (GroupVariation::Group30Var1):
  ------------------
  |  Branch (252:5): [True: 316, False: 20.0k]
  ------------------
  253|    316|        return select_range<AnalogSpec>(this->analog_input, range, StaticAnalogVariation::Group30Var1);
  254|    434|    case (GroupVariation::Group30Var2):
  ------------------
  |  Branch (254:5): [True: 434, False: 19.9k]
  ------------------
  255|    434|        return select_range<AnalogSpec>(this->analog_input, range, StaticAnalogVariation::Group30Var2);
  256|    395|    case (GroupVariation::Group30Var3):
  ------------------
  |  Branch (256:5): [True: 395, False: 20.0k]
  ------------------
  257|    395|        return select_range<AnalogSpec>(this->analog_input, range, StaticAnalogVariation::Group30Var3);
  258|    330|    case (GroupVariation::Group30Var4):
  ------------------
  |  Branch (258:5): [True: 330, False: 20.0k]
  ------------------
  259|    330|        return select_range<AnalogSpec>(this->analog_input, range, StaticAnalogVariation::Group30Var4);
  260|    722|    case (GroupVariation::Group30Var5):
  ------------------
  |  Branch (260:5): [True: 722, False: 19.6k]
  ------------------
  261|    722|        return select_range<AnalogSpec>(this->analog_input, range, StaticAnalogVariation::Group30Var5);
  262|    498|    case (GroupVariation::Group30Var6):
  ------------------
  |  Branch (262:5): [True: 498, False: 19.9k]
  ------------------
  263|    498|        return select_range<AnalogSpec>(this->analog_input, range, StaticAnalogVariation::Group30Var6);
  264|       |
  265|    718|    case (GroupVariation::Group40Var0):
  ------------------
  |  Branch (265:5): [True: 718, False: 19.6k]
  ------------------
  266|    718|        return select_range<AnalogOutputStatusSpec>(this->analog_output_status, range);
  267|    527|    case (GroupVariation::Group40Var1):
  ------------------
  |  Branch (267:5): [True: 527, False: 19.8k]
  ------------------
  268|    527|        return select_range<AnalogOutputStatusSpec>(this->analog_output_status, range,
  269|    527|                                                    StaticAnalogOutputStatusVariation::Group40Var1);
  270|    452|    case (GroupVariation::Group40Var2):
  ------------------
  |  Branch (270:5): [True: 452, False: 19.9k]
  ------------------
  271|    452|        return select_range<AnalogOutputStatusSpec>(this->analog_output_status, range,
  272|    452|                                                    StaticAnalogOutputStatusVariation::Group40Var2);
  273|    517|    case (GroupVariation::Group40Var3):
  ------------------
  |  Branch (273:5): [True: 517, False: 19.8k]
  ------------------
  274|    517|        return select_range<AnalogOutputStatusSpec>(this->analog_output_status, range,
  275|    517|                                                    StaticAnalogOutputStatusVariation::Group40Var3);
  276|    600|    case (GroupVariation::Group40Var4):
  ------------------
  |  Branch (276:5): [True: 600, False: 19.8k]
  ------------------
  277|    600|        return select_range<AnalogOutputStatusSpec>(this->analog_output_status, range,
  278|    600|                                                    StaticAnalogOutputStatusVariation::Group40Var4);
  279|       |
  280|    728|    case (GroupVariation::Group50Var4):
  ------------------
  |  Branch (280:5): [True: 728, False: 19.6k]
  ------------------
  281|    728|        return select_range<TimeAndIntervalSpec>(this->time_and_interval, range,
  282|    728|                                                 StaticTimeAndIntervalVariation::Group50Var4);
  283|       |
  284|    686|    case (GroupVariation::Group110Var0):
  ------------------
  |  Branch (284:5): [True: 686, False: 19.7k]
  ------------------
  285|    686|        return select_range<OctetStringSpec>(this->octet_string, range, StaticOctetStringVariation::Group110Var0);
  286|       |
  287|    954|    default:
  ------------------
  |  Branch (287:5): [True: 954, False: 19.4k]
  ------------------
  288|    954|        return IINField(IINBit::FUNC_NOT_SUPPORTED);
  289|  20.4k|    }
  290|  20.4k|}
_ZN8opendnp38Database13SelectIndicesENS_14GroupVariationERKNS_11ICollectionItEE:
  293|  20.8k|{
  294|  20.8k|    switch (gv)
  295|  20.8k|    {
  296|    895|    case (GroupVariation::Group1Var0):
  ------------------
  |  Branch (296:5): [True: 895, False: 19.9k]
  ------------------
  297|    895|        return select_indices(this->binary_input, indices);
  298|    697|    case (GroupVariation::Group1Var1):
  ------------------
  |  Branch (298:5): [True: 697, False: 20.1k]
  ------------------
  299|    697|        return select_indices(this->binary_input, indices, StaticBinaryVariation::Group1Var1);
  300|    834|    case (GroupVariation::Group1Var2):
  ------------------
  |  Branch (300:5): [True: 834, False: 20.0k]
  ------------------
  301|    834|        return select_indices(this->binary_input, indices, StaticBinaryVariation::Group1Var2);
  302|       |
  303|    649|    case (GroupVariation::Group3Var0):
  ------------------
  |  Branch (303:5): [True: 649, False: 20.2k]
  ------------------
  304|    649|        return select_indices(this->double_binary, indices);
  305|    729|    case (GroupVariation::Group3Var2):
  ------------------
  |  Branch (305:5): [True: 729, False: 20.1k]
  ------------------
  306|    729|        return select_indices(this->double_binary, indices, StaticDoubleBinaryVariation::Group3Var2);
  307|       |
  308|    651|    case (GroupVariation::Group10Var0):
  ------------------
  |  Branch (308:5): [True: 651, False: 20.2k]
  ------------------
  309|    651|        return select_indices(this->binary_output_status, indices);
  310|    751|    case (GroupVariation::Group10Var2):
  ------------------
  |  Branch (310:5): [True: 751, False: 20.1k]
  ------------------
  311|    751|        return select_indices(this->binary_output_status, indices, StaticBinaryOutputStatusVariation::Group10Var2);
  312|       |
  313|    581|    case (GroupVariation::Group20Var0):
  ------------------
  |  Branch (313:5): [True: 581, False: 20.2k]
  ------------------
  314|    581|        return select_indices(this->counter, indices);
  315|    569|    case (GroupVariation::Group20Var1):
  ------------------
  |  Branch (315:5): [True: 569, False: 20.2k]
  ------------------
  316|    569|        return select_indices(this->counter, indices, StaticCounterVariation::Group20Var1);
  317|    465|    case (GroupVariation::Group20Var2):
  ------------------
  |  Branch (317:5): [True: 465, False: 20.3k]
  ------------------
  318|    465|        return select_indices(this->counter, indices, StaticCounterVariation::Group20Var2);
  319|    482|    case (GroupVariation::Group20Var5):
  ------------------
  |  Branch (319:5): [True: 482, False: 20.3k]
  ------------------
  320|    482|        return select_indices(this->counter, indices, StaticCounterVariation::Group20Var5);
  321|    502|    case (GroupVariation::Group20Var6):
  ------------------
  |  Branch (321:5): [True: 502, False: 20.3k]
  ------------------
  322|    502|        return select_indices(this->counter, indices, StaticCounterVariation::Group20Var6);
  323|       |
  324|    709|    case (GroupVariation::Group21Var0):
  ------------------
  |  Branch (324:5): [True: 709, False: 20.1k]
  ------------------
  325|    709|        return select_indices(this->frozen_counter, indices);
  326|    443|    case (GroupVariation::Group21Var1):
  ------------------
  |  Branch (326:5): [True: 443, False: 20.4k]
  ------------------
  327|    443|        return select_indices(this->frozen_counter, indices, StaticFrozenCounterVariation::Group21Var1);
  328|    710|    case (GroupVariation::Group21Var2):
  ------------------
  |  Branch (328:5): [True: 710, False: 20.1k]
  ------------------
  329|    710|        return select_indices(this->frozen_counter, indices, StaticFrozenCounterVariation::Group21Var2);
  330|    410|    case (GroupVariation::Group21Var5):
  ------------------
  |  Branch (330:5): [True: 410, False: 20.4k]
  ------------------
  331|    410|        return select_indices(this->frozen_counter, indices, StaticFrozenCounterVariation::Group21Var5);
  332|    477|    case (GroupVariation::Group21Var6):
  ------------------
  |  Branch (332:5): [True: 477, False: 20.3k]
  ------------------
  333|    477|        return select_indices(this->frozen_counter, indices, StaticFrozenCounterVariation::Group21Var6);
  334|    435|    case (GroupVariation::Group21Var9):
  ------------------
  |  Branch (334:5): [True: 435, False: 20.4k]
  ------------------
  335|    435|        return select_indices(this->frozen_counter, indices, StaticFrozenCounterVariation::Group21Var9);
  336|    554|    case (GroupVariation::Group21Var10):
  ------------------
  |  Branch (336:5): [True: 554, False: 20.3k]
  ------------------
  337|    554|        return select_indices(this->frozen_counter, indices, StaticFrozenCounterVariation::Group21Var10);
  338|       |
  339|    784|    case (GroupVariation::Group30Var0):
  ------------------
  |  Branch (339:5): [True: 784, False: 20.0k]
  ------------------
  340|    784|        return select_indices<AnalogSpec>(this->analog_input, indices);
  341|    629|    case (GroupVariation::Group30Var1):
  ------------------
  |  Branch (341:5): [True: 629, False: 20.2k]
  ------------------
  342|    629|        return select_indices(this->analog_input, indices, StaticAnalogVariation::Group30Var1);
  343|    591|    case (GroupVariation::Group30Var2):
  ------------------
  |  Branch (343:5): [True: 591, False: 20.2k]
  ------------------
  344|    591|        return select_indices(this->analog_input, indices, StaticAnalogVariation::Group30Var2);
  345|    401|    case (GroupVariation::Group30Var3):
  ------------------
  |  Branch (345:5): [True: 401, False: 20.4k]
  ------------------
  346|    401|        return select_indices(this->analog_input, indices, StaticAnalogVariation::Group30Var3);
  347|    482|    case (GroupVariation::Group30Var4):
  ------------------
  |  Branch (347:5): [True: 482, False: 20.3k]
  ------------------
  348|    482|        return select_indices(this->analog_input, indices, StaticAnalogVariation::Group30Var4);
  349|    479|    case (GroupVariation::Group30Var5):
  ------------------
  |  Branch (349:5): [True: 479, False: 20.3k]
  ------------------
  350|    479|        return select_indices(this->analog_input, indices, StaticAnalogVariation::Group30Var5);
  351|    337|    case (GroupVariation::Group30Var6):
  ------------------
  |  Branch (351:5): [True: 337, False: 20.5k]
  ------------------
  352|    337|        return select_indices(this->analog_input, indices, StaticAnalogVariation::Group30Var6);
  353|       |
  354|    500|    case (GroupVariation::Group40Var0):
  ------------------
  |  Branch (354:5): [True: 500, False: 20.3k]
  ------------------
  355|    500|        return select_indices(this->analog_output_status, indices);
  356|    971|    case (GroupVariation::Group40Var1):
  ------------------
  |  Branch (356:5): [True: 971, False: 19.8k]
  ------------------
  357|    971|        return select_indices(this->analog_output_status, indices, StaticAnalogOutputStatusVariation::Group40Var1);
  358|    499|    case (GroupVariation::Group40Var2):
  ------------------
  |  Branch (358:5): [True: 499, False: 20.3k]
  ------------------
  359|    499|        return select_indices(this->analog_output_status, indices, StaticAnalogOutputStatusVariation::Group40Var2);
  360|    550|    case (GroupVariation::Group40Var3):
  ------------------
  |  Branch (360:5): [True: 550, False: 20.3k]
  ------------------
  361|    550|        return select_indices(this->analog_output_status, indices, StaticAnalogOutputStatusVariation::Group40Var3);
  362|    551|    case (GroupVariation::Group40Var4):
  ------------------
  |  Branch (362:5): [True: 551, False: 20.3k]
  ------------------
  363|    551|        return select_indices(this->analog_output_status, indices, StaticAnalogOutputStatusVariation::Group40Var4);
  364|       |
  365|    528|    case (GroupVariation::Group50Var4):
  ------------------
  |  Branch (365:5): [True: 528, False: 20.3k]
  ------------------
  366|    528|        return select_indices(this->time_and_interval, indices, StaticTimeAndIntervalVariation::Group50Var4);
  367|       |
  368|    833|    case (GroupVariation::Group110Var0):
  ------------------
  |  Branch (368:5): [True: 833, False: 20.0k]
  ------------------
  369|    833|        return select_indices(this->octet_string, indices, StaticOctetStringVariation::Group110Var0);
  370|       |
  371|  1.18k|    default:
  ------------------
  |  Branch (371:5): [True: 1.18k, False: 19.6k]
  ------------------
  372|  1.18k|        return IINField(IINBit::FUNC_NOT_SUPPORTED);
  373|  20.8k|    }
  374|  20.8k|}
_ZN8opendnp38Database8UnselectEv:
  377|  4.71k|{
  378|  4.71k|    this->binary_input.clear_selection();
  379|  4.71k|    this->double_binary.clear_selection();
  380|  4.71k|    this->binary_output_status.clear_selection();
  381|  4.71k|    this->counter.clear_selection();
  382|  4.71k|    this->frozen_counter.clear_selection();
  383|  4.71k|    this->analog_input.clear_selection();
  384|  4.71k|    this->analog_output_status.clear_selection();
  385|  4.71k|    this->time_and_interval.clear_selection();
  386|  4.71k|    this->octet_string.clear_selection();
  387|  4.71k|}
_ZN8opendnp38Database4LoadERNS_12HeaderWriterE:
  444|  4.34k|{
  445|  4.34k|    return load_type(this->binary_input, writer) && load_type(this->double_binary, writer)
  ------------------
  |  Branch (445:12): [True: 4.34k, False: 0]
  |  Branch (445:53): [True: 4.34k, False: 0]
  ------------------
  446|  4.34k|        && load_type(this->analog_input, writer) && load_type(this->counter, writer)
  ------------------
  |  Branch (446:12): [True: 4.34k, False: 0]
  |  Branch (446:53): [True: 4.34k, False: 0]
  ------------------
  447|  4.34k|        && load_type(this->frozen_counter, writer) && load_type(this->binary_output_status, writer)
  ------------------
  |  Branch (447:12): [True: 4.34k, False: 0]
  |  Branch (447:55): [True: 4.34k, False: 0]
  ------------------
  448|  4.34k|        && load_type(this->analog_output_status, writer) && load_type(this->time_and_interval, writer)
  ------------------
  |  Branch (448:12): [True: 4.34k, False: 0]
  |  Branch (448:61): [True: 4.34k, False: 0]
  ------------------
  449|  4.34k|        && load_type(this->octet_string, writer);
  ------------------
  |  Branch (449:12): [True: 4.34k, False: 0]
  ------------------
  450|  4.34k|}
_ZN8opendnp38Database22FreezeSelectedCountersEbNS_9EventModeE:
  524|  2.10k|{
  525|  2.10k|    for (auto c : this->counter)
  ------------------
  |  Branch (525:17): [True: 15.7k, False: 2.10k]
  ------------------
  526|  15.7k|    {
  527|  15.7k|        FrozenCounter new_value(c.second.value.value, c.second.value.flags, time_source.Now());
  528|  15.7k|        this->frozen_counter.update(new_value, c.first, mode, this->event_receiver);
  529|       |
  530|  15.7k|        if (clear)
  ------------------
  |  Branch (530:13): [True: 8.42k, False: 7.30k]
  ------------------
  531|  8.42k|        {
  532|  8.42k|            c.second.value.value = 0;
  533|  8.42k|            c.second.value.time = time_source.Now();
  534|  8.42k|            this->counter.update(c.second.value, c.first, mode, this->event_receiver);
  535|  8.42k|        }
  536|  15.7k|    }
  537|       |
  538|  2.10k|    this->counter.clear_selection();
  539|       |
  540|  2.10k|    return true;
  541|  2.10k|}
_ZN8opendnp38Database21select_all_class_zeroINS_10BinarySpecEEEvRNS_13StaticDataMapIT_EE:
  544|  1.75k|{
  545|  1.75k|    if (this->allowed_class_zero_types.IsSet(Spec::StaticTypeEnum))
  ------------------
  |  Branch (545:9): [True: 1.75k, False: 0]
  ------------------
  546|  1.75k|    {
  547|  1.75k|        select_all<Spec>(map);
  548|  1.75k|    }
  549|  1.75k|}
_ZN8opendnp38Database21select_all_class_zeroINS_19DoubleBitBinarySpecEEEvRNS_13StaticDataMapIT_EE:
  544|  1.75k|{
  545|  1.75k|    if (this->allowed_class_zero_types.IsSet(Spec::StaticTypeEnum))
  ------------------
  |  Branch (545:9): [True: 1.75k, False: 0]
  ------------------
  546|  1.75k|    {
  547|  1.75k|        select_all<Spec>(map);
  548|  1.75k|    }
  549|  1.75k|}
_ZN8opendnp38Database21select_all_class_zeroINS_22BinaryOutputStatusSpecEEEvRNS_13StaticDataMapIT_EE:
  544|  1.75k|{
  545|  1.75k|    if (this->allowed_class_zero_types.IsSet(Spec::StaticTypeEnum))
  ------------------
  |  Branch (545:9): [True: 1.75k, False: 0]
  ------------------
  546|  1.75k|    {
  547|  1.75k|        select_all<Spec>(map);
  548|  1.75k|    }
  549|  1.75k|}
_ZN8opendnp38Database21select_all_class_zeroINS_11CounterSpecEEEvRNS_13StaticDataMapIT_EE:
  544|  1.75k|{
  545|  1.75k|    if (this->allowed_class_zero_types.IsSet(Spec::StaticTypeEnum))
  ------------------
  |  Branch (545:9): [True: 1.75k, False: 0]
  ------------------
  546|  1.75k|    {
  547|  1.75k|        select_all<Spec>(map);
  548|  1.75k|    }
  549|  1.75k|}
_ZN8opendnp38Database21select_all_class_zeroINS_17FrozenCounterSpecEEEvRNS_13StaticDataMapIT_EE:
  544|  1.75k|{
  545|  1.75k|    if (this->allowed_class_zero_types.IsSet(Spec::StaticTypeEnum))
  ------------------
  |  Branch (545:9): [True: 1.75k, False: 0]
  ------------------
  546|  1.75k|    {
  547|  1.75k|        select_all<Spec>(map);
  548|  1.75k|    }
  549|  1.75k|}
_ZN8opendnp38Database21select_all_class_zeroINS_10AnalogSpecEEEvRNS_13StaticDataMapIT_EE:
  544|  1.75k|{
  545|  1.75k|    if (this->allowed_class_zero_types.IsSet(Spec::StaticTypeEnum))
  ------------------
  |  Branch (545:9): [True: 1.75k, False: 0]
  ------------------
  546|  1.75k|    {
  547|  1.75k|        select_all<Spec>(map);
  548|  1.75k|    }
  549|  1.75k|}
_ZN8opendnp38Database21select_all_class_zeroINS_22AnalogOutputStatusSpecEEEvRNS_13StaticDataMapIT_EE:
  544|  1.75k|{
  545|  1.75k|    if (this->allowed_class_zero_types.IsSet(Spec::StaticTypeEnum))
  ------------------
  |  Branch (545:9): [True: 1.75k, False: 0]
  ------------------
  546|  1.75k|    {
  547|  1.75k|        select_all<Spec>(map);
  548|  1.75k|    }
  549|  1.75k|}
_ZN8opendnp38Database21select_all_class_zeroINS_19TimeAndIntervalSpecEEEvRNS_13StaticDataMapIT_EE:
  544|  1.75k|{
  545|  1.75k|    if (this->allowed_class_zero_types.IsSet(Spec::StaticTypeEnum))
  ------------------
  |  Branch (545:9): [True: 1.75k, False: 0]
  ------------------
  546|  1.75k|    {
  547|  1.75k|        select_all<Spec>(map);
  548|  1.75k|    }
  549|  1.75k|}
_ZN8opendnp38Database10select_allINS_19TimeAndIntervalSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EE:
  552|  1.75k|{
  553|  1.75k|    map.select_all();
  554|  1.75k|    return IINField::Empty();
  555|  1.75k|}
_ZN8opendnp38Database21select_all_class_zeroINS_15OctetStringSpecEEEvRNS_13StaticDataMapIT_EE:
  544|  1.75k|{
  545|  1.75k|    if (this->allowed_class_zero_types.IsSet(Spec::StaticTypeEnum))
  ------------------
  |  Branch (545:9): [True: 1.75k, False: 0]
  ------------------
  546|  1.75k|    {
  547|  1.75k|        select_all<Spec>(map);
  548|  1.75k|    }
  549|  1.75k|}
_ZN8opendnp38Database10select_allINS_10BinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EE:
  552|  3.04k|{
  553|  3.04k|    map.select_all();
  554|  3.04k|    return IINField::Empty();
  555|  3.04k|}
_ZN8opendnp38Database10select_allINS_10BinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EENS5_18static_variation_tE:
  559|  2.08k|{
  560|  2.08k|    map.select_all(variation);
  561|  2.08k|    return IINField::Empty();
  562|  2.08k|}
_ZN8opendnp38Database10select_allINS_19DoubleBitBinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EE:
  552|  2.83k|{
  553|  2.83k|    map.select_all();
  554|  2.83k|    return IINField::Empty();
  555|  2.83k|}
_ZN8opendnp38Database10select_allINS_19DoubleBitBinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EENS5_18static_variation_tE:
  559|    974|{
  560|    974|    map.select_all(variation);
  561|    974|    return IINField::Empty();
  562|    974|}
_ZN8opendnp38Database10select_allINS_22BinaryOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EE:
  552|  2.89k|{
  553|  2.89k|    map.select_all();
  554|  2.89k|    return IINField::Empty();
  555|  2.89k|}
_ZN8opendnp38Database10select_allINS_22BinaryOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EENS5_18static_variation_tE:
  559|  1.27k|{
  560|  1.27k|    map.select_all(variation);
  561|  1.27k|    return IINField::Empty();
  562|  1.27k|}
_ZN8opendnp38Database10select_allINS_11CounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EE:
  552|  3.06k|{
  553|  3.06k|    map.select_all();
  554|  3.06k|    return IINField::Empty();
  555|  3.06k|}
_ZN8opendnp38Database10select_allINS_11CounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EENS5_18static_variation_tE:
  559|  4.51k|{
  560|  4.51k|    map.select_all(variation);
  561|  4.51k|    return IINField::Empty();
  562|  4.51k|}
_ZN8opendnp38Database10select_allINS_17FrozenCounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EE:
  552|  2.59k|{
  553|  2.59k|    map.select_all();
  554|  2.59k|    return IINField::Empty();
  555|  2.59k|}
_ZN8opendnp38Database10select_allINS_17FrozenCounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EENS5_18static_variation_tE:
  559|  6.33k|{
  560|  6.33k|    map.select_all(variation);
  561|  6.33k|    return IINField::Empty();
  562|  6.33k|}
_ZN8opendnp38Database10select_allINS_10AnalogSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EE:
  552|  3.06k|{
  553|  3.06k|    map.select_all();
  554|  3.06k|    return IINField::Empty();
  555|  3.06k|}
_ZN8opendnp38Database10select_allINS_10AnalogSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EENS5_18static_variation_tE:
  559|  6.46k|{
  560|  6.46k|    map.select_all(variation);
  561|  6.46k|    return IINField::Empty();
  562|  6.46k|}
_ZN8opendnp38Database10select_allINS_22AnalogOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EE:
  552|  2.89k|{
  553|  2.89k|    map.select_all();
  554|  2.89k|    return IINField::Empty();
  555|  2.89k|}
_ZN8opendnp38Database10select_allINS_22AnalogOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EENS5_18static_variation_tE:
  559|  4.78k|{
  560|  4.78k|    map.select_all(variation);
  561|  4.78k|    return IINField::Empty();
  562|  4.78k|}
_ZN8opendnp38Database10select_allINS_19TimeAndIntervalSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EENS5_18static_variation_tE:
  559|    829|{
  560|    829|    map.select_all(variation);
  561|    829|    return IINField::Empty();
  562|    829|}
_ZN8opendnp38Database10select_allINS_15OctetStringSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EE:
  552|  2.83k|{
  553|  2.83k|    map.select_all();
  554|  2.83k|    return IINField::Empty();
  555|  2.83k|}
_ZN8opendnp38Database12select_rangeINS_10BinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_5RangeE:
  565|    882|{
  566|    882|    const auto count = map.select(range);
  567|    882|    return (count != range.Count()) ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (567:12): [True: 518, False: 364]
  ------------------
  568|    882|}
_ZN8opendnp38Database12select_rangeINS_10BinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_5RangeENS5_18static_variation_tE:
  574|    928|{
  575|    928|    const auto count = map.select(range, variation);
  576|    928|    return (count != range.Count()) ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (576:12): [True: 604, False: 324]
  ------------------
  577|    928|}
_ZN8opendnp38Database12select_rangeINS_19DoubleBitBinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_5RangeE:
  565|    359|{
  566|    359|    const auto count = map.select(range);
  567|    359|    return (count != range.Count()) ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (567:12): [True: 120, False: 239]
  ------------------
  568|    359|}
_ZN8opendnp38Database12select_rangeINS_19DoubleBitBinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_5RangeENS5_18static_variation_tE:
  574|    609|{
  575|    609|    const auto count = map.select(range, variation);
  576|    609|    return (count != range.Count()) ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (576:12): [True: 391, False: 218]
  ------------------
  577|    609|}
_ZN8opendnp38Database12select_rangeINS_22BinaryOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_5RangeE:
  565|    487|{
  566|    487|    const auto count = map.select(range);
  567|    487|    return (count != range.Count()) ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (567:12): [True: 254, False: 233]
  ------------------
  568|    487|}
_ZN8opendnp38Database12select_rangeINS_22BinaryOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_5RangeENS5_18static_variation_tE:
  574|    659|{
  575|    659|    const auto count = map.select(range, variation);
  576|    659|    return (count != range.Count()) ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (576:12): [True: 258, False: 401]
  ------------------
  577|    659|}
_ZN8opendnp38Database12select_rangeINS_11CounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_5RangeE:
  565|  1.15k|{
  566|  1.15k|    const auto count = map.select(range);
  567|  1.15k|    return (count != range.Count()) ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (567:12): [True: 691, False: 467]
  ------------------
  568|  1.15k|}
_ZN8opendnp38Database12select_rangeINS_11CounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_5RangeENS5_18static_variation_tE:
  574|  2.57k|{
  575|  2.57k|    const auto count = map.select(range, variation);
  576|  2.57k|    return (count != range.Count()) ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (576:12): [True: 1.16k, False: 1.40k]
  ------------------
  577|  2.57k|}
_ZN8opendnp38Database12select_rangeINS_17FrozenCounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_5RangeE:
  565|    836|{
  566|    836|    const auto count = map.select(range);
  567|    836|    return (count != range.Count()) ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (567:12): [True: 506, False: 330]
  ------------------
  568|    836|}
_ZN8opendnp38Database12select_rangeINS_17FrozenCounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_5RangeENS5_18static_variation_tE:
  574|  3.54k|{
  575|  3.54k|    const auto count = map.select(range, variation);
  576|  3.54k|    return (count != range.Count()) ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (576:12): [True: 1.97k, False: 1.56k]
  ------------------
  577|  3.54k|}
_ZN8opendnp38Database12select_rangeINS_10AnalogSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_5RangeE:
  565|    491|{
  566|    491|    const auto count = map.select(range);
  567|    491|    return (count != range.Count()) ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (567:12): [True: 250, False: 241]
  ------------------
  568|    491|}
_ZN8opendnp38Database12select_rangeINS_10AnalogSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_5RangeENS5_18static_variation_tE:
  574|  2.69k|{
  575|  2.69k|    const auto count = map.select(range, variation);
  576|  2.69k|    return (count != range.Count()) ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (576:12): [True: 1.31k, False: 1.38k]
  ------------------
  577|  2.69k|}
_ZN8opendnp38Database12select_rangeINS_22AnalogOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_5RangeE:
  565|    718|{
  566|    718|    const auto count = map.select(range);
  567|    718|    return (count != range.Count()) ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (567:12): [True: 449, False: 269]
  ------------------
  568|    718|}
_ZN8opendnp38Database12select_rangeINS_22AnalogOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_5RangeENS5_18static_variation_tE:
  574|  2.09k|{
  575|  2.09k|    const auto count = map.select(range, variation);
  576|  2.09k|    return (count != range.Count()) ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (576:12): [True: 1.08k, False: 1.01k]
  ------------------
  577|  2.09k|}
_ZN8opendnp38Database12select_rangeINS_19TimeAndIntervalSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_5RangeENS5_18static_variation_tE:
  574|    728|{
  575|    728|    const auto count = map.select(range, variation);
  576|    728|    return (count != range.Count()) ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (576:12): [True: 497, False: 231]
  ------------------
  577|    728|}
_ZN8opendnp38Database12select_rangeINS_15OctetStringSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_5RangeENS5_18static_variation_tE:
  574|    686|{
  575|    686|    const auto count = map.select(range, variation);
  576|    686|    return (count != range.Count()) ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (576:12): [True: 372, False: 314]
  ------------------
  577|    686|}
_ZN8opendnp314select_indicesINS_10BinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEE:
   46|    895|{
   47|    895|    auto missing_index = false;
   48|    895|    auto select = [&](uint16_t index) {
   49|    895|        if (!map.select(index))
   50|    895|        {
   51|    895|            missing_index = true;
   52|    895|        }
   53|    895|    };
   54|    895|    indices.ForeachItem(select);
   55|       |
   56|    895|    return missing_index ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (56:12): [True: 344, False: 551]
  ------------------
   57|    895|}
_ZZN8opendnp314select_indicesINS_10BinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEEENKUltE_clEt:
   48|  2.79k|    auto select = [&](uint16_t index) {
   49|  2.79k|        if (!map.select(index))
  ------------------
  |  Branch (49:13): [True: 865, False: 1.93k]
  ------------------
   50|    865|        {
   51|    865|            missing_index = true;
   52|    865|        }
   53|  2.79k|    };
_ZN8opendnp314select_indicesINS_10BinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS4_18static_variation_tE:
   32|  1.53k|{
   33|  1.53k|    auto missing_index = false;
   34|  1.53k|    auto select = [&](uint16_t index) {
   35|  1.53k|        if (!map.select(index, variation))
   36|  1.53k|        {
   37|  1.53k|            missing_index = true;
   38|  1.53k|        }
   39|  1.53k|    };
   40|  1.53k|    indices.ForeachItem(select);
   41|       |
   42|  1.53k|    return missing_index ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (42:12): [True: 826, False: 705]
  ------------------
   43|  1.53k|}
_ZZN8opendnp314select_indicesINS_10BinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS4_18static_variation_tEENKUltE_clEt:
   34|  5.79k|    auto select = [&](uint16_t index) {
   35|  5.79k|        if (!map.select(index, variation))
  ------------------
  |  Branch (35:13): [True: 2.22k, False: 3.56k]
  ------------------
   36|  2.22k|        {
   37|  2.22k|            missing_index = true;
   38|  2.22k|        }
   39|  5.79k|    };
_ZN8opendnp314select_indicesINS_19DoubleBitBinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEE:
   46|    649|{
   47|    649|    auto missing_index = false;
   48|    649|    auto select = [&](uint16_t index) {
   49|    649|        if (!map.select(index))
   50|    649|        {
   51|    649|            missing_index = true;
   52|    649|        }
   53|    649|    };
   54|    649|    indices.ForeachItem(select);
   55|       |
   56|    649|    return missing_index ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (56:12): [True: 356, False: 293]
  ------------------
   57|    649|}
_ZZN8opendnp314select_indicesINS_19DoubleBitBinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEEENKUltE_clEt:
   48|  2.83k|    auto select = [&](uint16_t index) {
   49|  2.83k|        if (!map.select(index))
  ------------------
  |  Branch (49:13): [True: 796, False: 2.04k]
  ------------------
   50|    796|        {
   51|    796|            missing_index = true;
   52|    796|        }
   53|  2.83k|    };
_ZN8opendnp314select_indicesINS_19DoubleBitBinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS4_18static_variation_tE:
   32|    729|{
   33|    729|    auto missing_index = false;
   34|    729|    auto select = [&](uint16_t index) {
   35|    729|        if (!map.select(index, variation))
   36|    729|        {
   37|    729|            missing_index = true;
   38|    729|        }
   39|    729|    };
   40|    729|    indices.ForeachItem(select);
   41|       |
   42|    729|    return missing_index ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (42:12): [True: 454, False: 275]
  ------------------
   43|    729|}
_ZZN8opendnp314select_indicesINS_19DoubleBitBinarySpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS4_18static_variation_tEENKUltE_clEt:
   34|  2.33k|    auto select = [&](uint16_t index) {
   35|  2.33k|        if (!map.select(index, variation))
  ------------------
  |  Branch (35:13): [True: 796, False: 1.53k]
  ------------------
   36|    796|        {
   37|    796|            missing_index = true;
   38|    796|        }
   39|  2.33k|    };
_ZN8opendnp314select_indicesINS_22BinaryOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEE:
   46|    651|{
   47|    651|    auto missing_index = false;
   48|    651|    auto select = [&](uint16_t index) {
   49|    651|        if (!map.select(index))
   50|    651|        {
   51|    651|            missing_index = true;
   52|    651|        }
   53|    651|    };
   54|    651|    indices.ForeachItem(select);
   55|       |
   56|    651|    return missing_index ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (56:12): [True: 274, False: 377]
  ------------------
   57|    651|}
_ZZN8opendnp314select_indicesINS_22BinaryOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEEENKUltE_clEt:
   48|  3.19k|    auto select = [&](uint16_t index) {
   49|  3.19k|        if (!map.select(index))
  ------------------
  |  Branch (49:13): [True: 1.00k, False: 2.18k]
  ------------------
   50|  1.00k|        {
   51|  1.00k|            missing_index = true;
   52|  1.00k|        }
   53|  3.19k|    };
_ZN8opendnp314select_indicesINS_22BinaryOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS4_18static_variation_tE:
   32|    751|{
   33|    751|    auto missing_index = false;
   34|    751|    auto select = [&](uint16_t index) {
   35|    751|        if (!map.select(index, variation))
   36|    751|        {
   37|    751|            missing_index = true;
   38|    751|        }
   39|    751|    };
   40|    751|    indices.ForeachItem(select);
   41|       |
   42|    751|    return missing_index ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (42:12): [True: 382, False: 369]
  ------------------
   43|    751|}
_ZZN8opendnp314select_indicesINS_22BinaryOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS4_18static_variation_tEENKUltE_clEt:
   34|  2.73k|    auto select = [&](uint16_t index) {
   35|  2.73k|        if (!map.select(index, variation))
  ------------------
  |  Branch (35:13): [True: 910, False: 1.82k]
  ------------------
   36|    910|        {
   37|    910|            missing_index = true;
   38|    910|        }
   39|  2.73k|    };
_ZN8opendnp314select_indicesINS_11CounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEE:
   46|    581|{
   47|    581|    auto missing_index = false;
   48|    581|    auto select = [&](uint16_t index) {
   49|    581|        if (!map.select(index))
   50|    581|        {
   51|    581|            missing_index = true;
   52|    581|        }
   53|    581|    };
   54|    581|    indices.ForeachItem(select);
   55|       |
   56|    581|    return missing_index ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (56:12): [True: 309, False: 272]
  ------------------
   57|    581|}
_ZZN8opendnp314select_indicesINS_11CounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEEENKUltE_clEt:
   48|  2.08k|    auto select = [&](uint16_t index) {
   49|  2.08k|        if (!map.select(index))
  ------------------
  |  Branch (49:13): [True: 691, False: 1.39k]
  ------------------
   50|    691|        {
   51|    691|            missing_index = true;
   52|    691|        }
   53|  2.08k|    };
_ZN8opendnp314select_indicesINS_11CounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS4_18static_variation_tE:
   32|  2.01k|{
   33|  2.01k|    auto missing_index = false;
   34|  2.01k|    auto select = [&](uint16_t index) {
   35|  2.01k|        if (!map.select(index, variation))
   36|  2.01k|        {
   37|  2.01k|            missing_index = true;
   38|  2.01k|        }
   39|  2.01k|    };
   40|  2.01k|    indices.ForeachItem(select);
   41|       |
   42|  2.01k|    return missing_index ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (42:12): [True: 915, False: 1.10k]
  ------------------
   43|  2.01k|}
_ZZN8opendnp314select_indicesINS_11CounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS4_18static_variation_tEENKUltE_clEt:
   34|  4.47k|    auto select = [&](uint16_t index) {
   35|  4.47k|        if (!map.select(index, variation))
  ------------------
  |  Branch (35:13): [True: 1.85k, False: 2.62k]
  ------------------
   36|  1.85k|        {
   37|  1.85k|            missing_index = true;
   38|  1.85k|        }
   39|  4.47k|    };
_ZN8opendnp314select_indicesINS_17FrozenCounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEE:
   46|    709|{
   47|    709|    auto missing_index = false;
   48|    709|    auto select = [&](uint16_t index) {
   49|    709|        if (!map.select(index))
   50|    709|        {
   51|    709|            missing_index = true;
   52|    709|        }
   53|    709|    };
   54|    709|    indices.ForeachItem(select);
   55|       |
   56|    709|    return missing_index ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (56:12): [True: 298, False: 411]
  ------------------
   57|    709|}
_ZZN8opendnp314select_indicesINS_17FrozenCounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEEENKUltE_clEt:
   48|  2.07k|    auto select = [&](uint16_t index) {
   49|  2.07k|        if (!map.select(index))
  ------------------
  |  Branch (49:13): [True: 578, False: 1.49k]
  ------------------
   50|    578|        {
   51|    578|            missing_index = true;
   52|    578|        }
   53|  2.07k|    };
_ZN8opendnp314select_indicesINS_17FrozenCounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS4_18static_variation_tE:
   32|  3.02k|{
   33|  3.02k|    auto missing_index = false;
   34|  3.02k|    auto select = [&](uint16_t index) {
   35|  3.02k|        if (!map.select(index, variation))
   36|  3.02k|        {
   37|  3.02k|            missing_index = true;
   38|  3.02k|        }
   39|  3.02k|    };
   40|  3.02k|    indices.ForeachItem(select);
   41|       |
   42|  3.02k|    return missing_index ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (42:12): [True: 1.37k, False: 1.65k]
  ------------------
   43|  3.02k|}
_ZZN8opendnp314select_indicesINS_17FrozenCounterSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS4_18static_variation_tEENKUltE_clEt:
   34|  6.04k|    auto select = [&](uint16_t index) {
   35|  6.04k|        if (!map.select(index, variation))
  ------------------
  |  Branch (35:13): [True: 2.30k, False: 3.74k]
  ------------------
   36|  2.30k|        {
   37|  2.30k|            missing_index = true;
   38|  2.30k|        }
   39|  6.04k|    };
_ZN8opendnp314select_indicesINS_10AnalogSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEE:
   46|    784|{
   47|    784|    auto missing_index = false;
   48|    784|    auto select = [&](uint16_t index) {
   49|    784|        if (!map.select(index))
   50|    784|        {
   51|    784|            missing_index = true;
   52|    784|        }
   53|    784|    };
   54|    784|    indices.ForeachItem(select);
   55|       |
   56|    784|    return missing_index ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (56:12): [True: 368, False: 416]
  ------------------
   57|    784|}
_ZZN8opendnp314select_indicesINS_10AnalogSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEEENKUltE_clEt:
   48|  2.49k|    auto select = [&](uint16_t index) {
   49|  2.49k|        if (!map.select(index))
  ------------------
  |  Branch (49:13): [True: 730, False: 1.76k]
  ------------------
   50|    730|        {
   51|    730|            missing_index = true;
   52|    730|        }
   53|  2.49k|    };
_ZN8opendnp314select_indicesINS_10AnalogSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS4_18static_variation_tE:
   32|  2.91k|{
   33|  2.91k|    auto missing_index = false;
   34|  2.91k|    auto select = [&](uint16_t index) {
   35|  2.91k|        if (!map.select(index, variation))
   36|  2.91k|        {
   37|  2.91k|            missing_index = true;
   38|  2.91k|        }
   39|  2.91k|    };
   40|  2.91k|    indices.ForeachItem(select);
   41|       |
   42|  2.91k|    return missing_index ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (42:12): [True: 1.51k, False: 1.40k]
  ------------------
   43|  2.91k|}
_ZZN8opendnp314select_indicesINS_10AnalogSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS4_18static_variation_tEENKUltE_clEt:
   34|  6.58k|    auto select = [&](uint16_t index) {
   35|  6.58k|        if (!map.select(index, variation))
  ------------------
  |  Branch (35:13): [True: 2.31k, False: 4.27k]
  ------------------
   36|  2.31k|        {
   37|  2.31k|            missing_index = true;
   38|  2.31k|        }
   39|  6.58k|    };
_ZN8opendnp314select_indicesINS_22AnalogOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEE:
   46|    500|{
   47|    500|    auto missing_index = false;
   48|    500|    auto select = [&](uint16_t index) {
   49|    500|        if (!map.select(index))
   50|    500|        {
   51|    500|            missing_index = true;
   52|    500|        }
   53|    500|    };
   54|    500|    indices.ForeachItem(select);
   55|       |
   56|    500|    return missing_index ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (56:12): [True: 246, False: 254]
  ------------------
   57|    500|}
_ZZN8opendnp314select_indicesINS_22AnalogOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEEENKUltE_clEt:
   48|  2.40k|    auto select = [&](uint16_t index) {
   49|  2.40k|        if (!map.select(index))
  ------------------
  |  Branch (49:13): [True: 799, False: 1.60k]
  ------------------
   50|    799|        {
   51|    799|            missing_index = true;
   52|    799|        }
   53|  2.40k|    };
_ZN8opendnp314select_indicesINS_22AnalogOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS4_18static_variation_tE:
   32|  2.57k|{
   33|  2.57k|    auto missing_index = false;
   34|  2.57k|    auto select = [&](uint16_t index) {
   35|  2.57k|        if (!map.select(index, variation))
   36|  2.57k|        {
   37|  2.57k|            missing_index = true;
   38|  2.57k|        }
   39|  2.57k|    };
   40|  2.57k|    indices.ForeachItem(select);
   41|       |
   42|  2.57k|    return missing_index ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (42:12): [True: 1.32k, False: 1.24k]
  ------------------
   43|  2.57k|}
_ZZN8opendnp314select_indicesINS_22AnalogOutputStatusSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS4_18static_variation_tEENKUltE_clEt:
   34|  5.73k|    auto select = [&](uint16_t index) {
   35|  5.73k|        if (!map.select(index, variation))
  ------------------
  |  Branch (35:13): [True: 2.11k, False: 3.61k]
  ------------------
   36|  2.11k|        {
   37|  2.11k|            missing_index = true;
   38|  2.11k|        }
   39|  5.73k|    };
_ZN8opendnp314select_indicesINS_19TimeAndIntervalSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS4_18static_variation_tE:
   32|    528|{
   33|    528|    auto missing_index = false;
   34|    528|    auto select = [&](uint16_t index) {
   35|    528|        if (!map.select(index, variation))
   36|    528|        {
   37|    528|            missing_index = true;
   38|    528|        }
   39|    528|    };
   40|    528|    indices.ForeachItem(select);
   41|       |
   42|    528|    return missing_index ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (42:12): [True: 229, False: 299]
  ------------------
   43|    528|}
_ZZN8opendnp314select_indicesINS_19TimeAndIntervalSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS4_18static_variation_tEENKUltE_clEt:
   34|  2.25k|    auto select = [&](uint16_t index) {
   35|  2.25k|        if (!map.select(index, variation))
  ------------------
  |  Branch (35:13): [True: 740, False: 1.51k]
  ------------------
   36|    740|        {
   37|    740|            missing_index = true;
   38|    740|        }
   39|  2.25k|    };
_ZN8opendnp314select_indicesINS_15OctetStringSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS4_18static_variation_tE:
   32|    833|{
   33|    833|    auto missing_index = false;
   34|    833|    auto select = [&](uint16_t index) {
   35|    833|        if (!map.select(index, variation))
   36|    833|        {
   37|    833|            missing_index = true;
   38|    833|        }
   39|    833|    };
   40|    833|    indices.ForeachItem(select);
   41|       |
   42|    833|    return missing_index ? IINField(IINBit::PARAM_ERROR) : IINField::Empty();
  ------------------
  |  Branch (42:12): [True: 373, False: 460]
  ------------------
   43|    833|}
_ZZN8opendnp314select_indicesINS_15OctetStringSpecEEENS_8IINFieldERNS_13StaticDataMapIT_EERKNS_11ICollectionItEENS4_18static_variation_tEENKUltE_clEt:
   34|  2.89k|    auto select = [&](uint16_t index) {
   35|  2.89k|        if (!map.select(index, variation))
  ------------------
  |  Branch (35:13): [True: 1.00k, False: 1.89k]
  ------------------
   36|  1.00k|        {
   37|  1.00k|            missing_index = true;
   38|  1.00k|        }
   39|  2.89k|    };
_ZN8opendnp39load_typeINS_10BinarySpecEEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
   60|  4.34k|{
   61|  4.97k|    while (true)
  ------------------
  |  Branch (61:12): [True: 4.97k, Folded]
  ------------------
   62|  4.97k|    {
   63|  4.97k|        auto iter = map.begin();
   64|       |
   65|  4.97k|        if (iter == map.end())
  ------------------
  |  Branch (65:13): [True: 4.34k, False: 638]
  ------------------
   66|  4.34k|        {
   67|       |            // there is no data left to write
   68|  4.34k|            return true;
   69|  4.34k|        }
   70|       |
   71|    638|        if (!StaticWriters::get((*iter).second.variation)(map, writer))
  ------------------
  |  Branch (71:13): [True: 0, False: 638]
  ------------------
   72|      0|        {
   73|       |            // the APDU is full
   74|      0|            return false;
   75|      0|        }
   76|    638|    }
   77|  4.34k|}
_ZN8opendnp39load_typeINS_19DoubleBitBinarySpecEEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
   60|  4.34k|{
   61|  4.83k|    while (true)
  ------------------
  |  Branch (61:12): [True: 4.83k, Folded]
  ------------------
   62|  4.83k|    {
   63|  4.83k|        auto iter = map.begin();
   64|       |
   65|  4.83k|        if (iter == map.end())
  ------------------
  |  Branch (65:13): [True: 4.34k, False: 497]
  ------------------
   66|  4.34k|        {
   67|       |            // there is no data left to write
   68|  4.34k|            return true;
   69|  4.34k|        }
   70|       |
   71|    497|        if (!StaticWriters::get((*iter).second.variation)(map, writer))
  ------------------
  |  Branch (71:13): [True: 0, False: 497]
  ------------------
   72|      0|        {
   73|       |            // the APDU is full
   74|      0|            return false;
   75|      0|        }
   76|    497|    }
   77|  4.34k|}
_ZN8opendnp39load_typeINS_10AnalogSpecEEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
   60|  4.34k|{
   61|  5.39k|    while (true)
  ------------------
  |  Branch (61:12): [True: 5.39k, Folded]
  ------------------
   62|  5.39k|    {
   63|  5.39k|        auto iter = map.begin();
   64|       |
   65|  5.39k|        if (iter == map.end())
  ------------------
  |  Branch (65:13): [True: 4.34k, False: 1.05k]
  ------------------
   66|  4.34k|        {
   67|       |            // there is no data left to write
   68|  4.34k|            return true;
   69|  4.34k|        }
   70|       |
   71|  1.05k|        if (!StaticWriters::get((*iter).second.variation)(map, writer))
  ------------------
  |  Branch (71:13): [True: 0, False: 1.05k]
  ------------------
   72|      0|        {
   73|       |            // the APDU is full
   74|      0|            return false;
   75|      0|        }
   76|  1.05k|    }
   77|  4.34k|}
_ZN8opendnp39load_typeINS_11CounterSpecEEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
   60|  4.34k|{
   61|  5.07k|    while (true)
  ------------------
  |  Branch (61:12): [True: 5.07k, Folded]
  ------------------
   62|  5.07k|    {
   63|  5.07k|        auto iter = map.begin();
   64|       |
   65|  5.07k|        if (iter == map.end())
  ------------------
  |  Branch (65:13): [True: 4.34k, False: 731]
  ------------------
   66|  4.34k|        {
   67|       |            // there is no data left to write
   68|  4.34k|            return true;
   69|  4.34k|        }
   70|       |
   71|    731|        if (!StaticWriters::get((*iter).second.variation)(map, writer))
  ------------------
  |  Branch (71:13): [True: 0, False: 731]
  ------------------
   72|      0|        {
   73|       |            // the APDU is full
   74|      0|            return false;
   75|      0|        }
   76|    731|    }
   77|  4.34k|}
_ZN8opendnp39load_typeINS_17FrozenCounterSpecEEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
   60|  4.34k|{
   61|  5.35k|    while (true)
  ------------------
  |  Branch (61:12): [True: 5.35k, Folded]
  ------------------
   62|  5.35k|    {
   63|  5.35k|        auto iter = map.begin();
   64|       |
   65|  5.35k|        if (iter == map.end())
  ------------------
  |  Branch (65:13): [True: 4.34k, False: 1.01k]
  ------------------
   66|  4.34k|        {
   67|       |            // there is no data left to write
   68|  4.34k|            return true;
   69|  4.34k|        }
   70|       |
   71|  1.01k|        if (!StaticWriters::get((*iter).second.variation)(map, writer))
  ------------------
  |  Branch (71:13): [True: 0, False: 1.01k]
  ------------------
   72|      0|        {
   73|       |            // the APDU is full
   74|      0|            return false;
   75|      0|        }
   76|  1.01k|    }
   77|  4.34k|}
_ZN8opendnp39load_typeINS_22BinaryOutputStatusSpecEEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
   60|  4.34k|{
   61|  4.83k|    while (true)
  ------------------
  |  Branch (61:12): [True: 4.83k, Folded]
  ------------------
   62|  4.83k|    {
   63|  4.83k|        auto iter = map.begin();
   64|       |
   65|  4.83k|        if (iter == map.end())
  ------------------
  |  Branch (65:13): [True: 4.34k, False: 495]
  ------------------
   66|  4.34k|        {
   67|       |            // there is no data left to write
   68|  4.34k|            return true;
   69|  4.34k|        }
   70|       |
   71|    495|        if (!StaticWriters::get((*iter).second.variation)(map, writer))
  ------------------
  |  Branch (71:13): [True: 0, False: 495]
  ------------------
   72|      0|        {
   73|       |            // the APDU is full
   74|      0|            return false;
   75|      0|        }
   76|    495|    }
   77|  4.34k|}
_ZN8opendnp39load_typeINS_22AnalogOutputStatusSpecEEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
   60|  4.34k|{
   61|  5.13k|    while (true)
  ------------------
  |  Branch (61:12): [True: 5.13k, Folded]
  ------------------
   62|  5.13k|    {
   63|  5.13k|        auto iter = map.begin();
   64|       |
   65|  5.13k|        if (iter == map.end())
  ------------------
  |  Branch (65:13): [True: 4.34k, False: 795]
  ------------------
   66|  4.34k|        {
   67|       |            // there is no data left to write
   68|  4.34k|            return true;
   69|  4.34k|        }
   70|       |
   71|    795|        if (!StaticWriters::get((*iter).second.variation)(map, writer))
  ------------------
  |  Branch (71:13): [True: 0, False: 795]
  ------------------
   72|      0|        {
   73|       |            // the APDU is full
   74|      0|            return false;
   75|      0|        }
   76|    795|    }
   77|  4.34k|}
_ZN8opendnp39load_typeINS_19TimeAndIntervalSpecEEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
   60|  4.34k|{
   61|  4.67k|    while (true)
  ------------------
  |  Branch (61:12): [True: 4.67k, Folded]
  ------------------
   62|  4.67k|    {
   63|  4.67k|        auto iter = map.begin();
   64|       |
   65|  4.67k|        if (iter == map.end())
  ------------------
  |  Branch (65:13): [True: 4.34k, False: 329]
  ------------------
   66|  4.34k|        {
   67|       |            // there is no data left to write
   68|  4.34k|            return true;
   69|  4.34k|        }
   70|       |
   71|    329|        if (!StaticWriters::get((*iter).second.variation)(map, writer))
  ------------------
  |  Branch (71:13): [True: 0, False: 329]
  ------------------
   72|      0|        {
   73|       |            // the APDU is full
   74|      0|            return false;
   75|      0|        }
   76|    329|    }
   77|  4.34k|}
_ZN8opendnp39load_typeINS_15OctetStringSpecEEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
   60|  4.34k|{
   61|  4.70k|    while (true)
  ------------------
  |  Branch (61:12): [True: 4.70k, Folded]
  ------------------
   62|  4.70k|    {
   63|  4.70k|        auto iter = map.begin();
   64|       |
   65|  4.70k|        if (iter == map.end())
  ------------------
  |  Branch (65:13): [True: 4.34k, False: 359]
  ------------------
   66|  4.34k|        {
   67|       |            // there is no data left to write
   68|  4.34k|            return true;
   69|  4.34k|        }
   70|       |
   71|    359|        if (!StaticWriters::get((*iter).second.variation)(map, writer))
  ------------------
  |  Branch (71:13): [True: 0, False: 359]
  ------------------
   72|      0|        {
   73|       |            // the APDU is full
   74|      0|            return false;
   75|      0|        }
   76|    359|    }
   77|  4.34k|}

_ZN8opendnp314DatabaseConfigC2Et:
   35|  8.87k|{
   36|  8.87k|    initialize(this->binary_input, all_types);
   37|  8.87k|    initialize(this->double_binary, all_types);
   38|  8.87k|    initialize(this->analog_input, all_types);
   39|  8.87k|    initialize(this->counter, all_types);
   40|  8.87k|    initialize(this->frozen_counter, all_types);
   41|  8.87k|    initialize(this->binary_output_status, all_types);
   42|  8.87k|    initialize(this->analog_output_status, all_types);
   43|  8.87k|    initialize(this->time_and_interval, all_types);
   44|  8.87k|    initialize(this->octet_string, all_types);
   45|  8.87k|};
_ZN8opendnp310initializeINS_12BinaryConfigEEEvRNSt3__13mapItT_NS2_4lessItEENS2_9allocatorINS2_4pairIKtS4_EEEEEEt:
   27|  8.87k|{
   28|  97.6k|    for (uint16_t i = 0; i < count; ++i)
  ------------------
  |  Branch (28:26): [True: 88.7k, False: 8.87k]
  ------------------
   29|  88.7k|    {
   30|  88.7k|        map[i] = {};
   31|  88.7k|    }
   32|  8.87k|}
_ZN8opendnp310initializeINS_21DoubleBitBinaryConfigEEEvRNSt3__13mapItT_NS2_4lessItEENS2_9allocatorINS2_4pairIKtS4_EEEEEEt:
   27|  8.87k|{
   28|  97.6k|    for (uint16_t i = 0; i < count; ++i)
  ------------------
  |  Branch (28:26): [True: 88.7k, False: 8.87k]
  ------------------
   29|  88.7k|    {
   30|  88.7k|        map[i] = {};
   31|  88.7k|    }
   32|  8.87k|}
_ZN8opendnp310initializeINS_12AnalogConfigEEEvRNSt3__13mapItT_NS2_4lessItEENS2_9allocatorINS2_4pairIKtS4_EEEEEEt:
   27|  8.87k|{
   28|  97.6k|    for (uint16_t i = 0; i < count; ++i)
  ------------------
  |  Branch (28:26): [True: 88.7k, False: 8.87k]
  ------------------
   29|  88.7k|    {
   30|  88.7k|        map[i] = {};
   31|  88.7k|    }
   32|  8.87k|}
_ZN8opendnp310initializeINS_13CounterConfigEEEvRNSt3__13mapItT_NS2_4lessItEENS2_9allocatorINS2_4pairIKtS4_EEEEEEt:
   27|  8.87k|{
   28|  97.6k|    for (uint16_t i = 0; i < count; ++i)
  ------------------
  |  Branch (28:26): [True: 88.7k, False: 8.87k]
  ------------------
   29|  88.7k|    {
   30|  88.7k|        map[i] = {};
   31|  88.7k|    }
   32|  8.87k|}
_ZN8opendnp310initializeINS_19FrozenCounterConfigEEEvRNSt3__13mapItT_NS2_4lessItEENS2_9allocatorINS2_4pairIKtS4_EEEEEEt:
   27|  8.87k|{
   28|  97.6k|    for (uint16_t i = 0; i < count; ++i)
  ------------------
  |  Branch (28:26): [True: 88.7k, False: 8.87k]
  ------------------
   29|  88.7k|    {
   30|  88.7k|        map[i] = {};
   31|  88.7k|    }
   32|  8.87k|}
_ZN8opendnp310initializeINS_14BOStatusConfigEEEvRNSt3__13mapItT_NS2_4lessItEENS2_9allocatorINS2_4pairIKtS4_EEEEEEt:
   27|  8.87k|{
   28|  97.6k|    for (uint16_t i = 0; i < count; ++i)
  ------------------
  |  Branch (28:26): [True: 88.7k, False: 8.87k]
  ------------------
   29|  88.7k|    {
   30|  88.7k|        map[i] = {};
   31|  88.7k|    }
   32|  8.87k|}
_ZN8opendnp310initializeINS_14AOStatusConfigEEEvRNSt3__13mapItT_NS2_4lessItEENS2_9allocatorINS2_4pairIKtS4_EEEEEEt:
   27|  8.87k|{
   28|  97.6k|    for (uint16_t i = 0; i < count; ++i)
  ------------------
  |  Branch (28:26): [True: 88.7k, False: 8.87k]
  ------------------
   29|  88.7k|    {
   30|  88.7k|        map[i] = {};
   31|  88.7k|    }
   32|  8.87k|}
_ZN8opendnp310initializeINS_21TimeAndIntervalConfigEEEvRNSt3__13mapItT_NS2_4lessItEENS2_9allocatorINS2_4pairIKtS4_EEEEEEt:
   27|  8.87k|{
   28|  97.6k|    for (uint16_t i = 0; i < count; ++i)
  ------------------
  |  Branch (28:26): [True: 88.7k, False: 8.87k]
  ------------------
   29|  88.7k|    {
   30|  88.7k|        map[i] = {};
   31|  88.7k|    }
   32|  8.87k|}
_ZN8opendnp310initializeINS_17OctetStringConfigEEEvRNSt3__13mapItT_NS2_4lessItEENS2_9allocatorINS2_4pairIKtS4_EEEEEEt:
   27|  8.87k|{
   28|  97.6k|    for (uint16_t i = 0; i < count; ++i)
  ------------------
  |  Branch (28:26): [True: 88.7k, False: 8.87k]
  ------------------
   29|  88.7k|    {
   30|  88.7k|        map[i] = {};
   31|  88.7k|    }
   32|  8.87k|}

_ZN8opendnp315DeferredRequestC2Ej:
   25|  8.87k|DeferredRequest::DeferredRequest(uint32_t maxAPDUSize) : isSet(false), buffer(maxAPDUSize) {}
_ZNK8opendnp315DeferredRequest5IsSetEv:
   33|  9.37k|{
   34|  9.37k|    return isSet;
   35|  9.37k|}

_ZN8opendnp317EventBufferConfigC2Etttttttt:
   40|  8.87k|      maxBinaryEvents(maxBinaryEvents),
   41|  8.87k|      maxDoubleBinaryEvents(maxDoubleBinaryEvents),
   42|  8.87k|      maxAnalogEvents(maxAnalogEvents),
   43|  8.87k|      maxCounterEvents(maxCounterEvents),
   44|  8.87k|      maxFrozenCounterEvents(maxFrozenCounterEvents),
   45|  8.87k|      maxBinaryOutputStatusEvents(maxBinaryOutputStatusEvents),
   46|  8.87k|      maxAnalogOutputStatusEvents(maxAnalogOutputStatusEvents),
   47|  8.87k|      maxOctetStringEvents(maxOctetStringEvents)
   48|  8.87k|{
   49|  8.87k|}
_ZNK8opendnp317EventBufferConfig11TotalEventsEv:
   52|  8.87k|{
   53|  8.87k|    return maxBinaryEvents + maxDoubleBinaryEvents + maxAnalogEvents + maxCounterEvents + maxFrozenCounterEvents
   54|  8.87k|        + maxBinaryOutputStatusEvents + maxAnalogOutputStatusEvents + maxOctetStringEvents;
   55|  8.87k|}

_ZN8opendnp320FreezeRequestHandlerC2EbRNS_8DatabaseE:
   30|    133|FreezeRequestHandler::FreezeRequestHandler(bool clear, Database& database) : clear(clear), database(database) {}
_ZN8opendnp320FreezeRequestHandler9IsAllowedEjNS_14GroupVariationENS_13QualifierCodeE:
   33|  2.12k|{
   34|  2.12k|    if (gv != GroupVariation::Group20Var0)
  ------------------
  |  Branch (34:9): [True: 12, False: 2.10k]
  ------------------
   35|     12|        return false;
   36|       |
   37|  2.10k|    switch (qc)
   38|  2.10k|    {
   39|  1.14k|    case QualifierCode::ALL_OBJECTS:
  ------------------
  |  Branch (39:5): [True: 1.14k, False: 967]
  ------------------
   40|  1.99k|    case QualifierCode::UINT8_START_STOP:
  ------------------
  |  Branch (40:5): [True: 850, False: 1.25k]
  ------------------
   41|  2.10k|    case QualifierCode::UINT16_START_STOP:
  ------------------
  |  Branch (41:5): [True: 114, False: 1.99k]
  ------------------
   42|  2.10k|        return true;
   43|      3|    default:
  ------------------
  |  Branch (43:5): [True: 3, False: 2.10k]
  ------------------
   44|      3|        return false;
   45|  2.10k|    }
   46|  2.10k|}
_ZN8opendnp320FreezeRequestHandler13ProcessHeaderERKNS_16AllObjectsHeaderE:
   49|  1.13k|{
   50|  1.13k|    this->database.SelectAll(record.enumeration);
   51|  1.13k|    this->database.FreezeSelectedCounters(clear);
   52|  1.13k|    return IINField::Empty();
   53|  1.13k|}
_ZN8opendnp320FreezeRequestHandler13ProcessHeaderERKNS_11RangeHeaderE:
   56|    961|{
   57|    961|    this->database.SelectRange(header.enumeration, header.range);
   58|    961|    this->database.FreezeSelectedCounters(clear);
   59|    961|    return IINField::Empty();
   60|    961|}

_ZN8opendnp314ICommandActionD2Ev:
   35|  1.38k|    virtual ~ICommandAction() {}

_ZN8opendnp314IEventReceiverD2Ev:
   35|  8.87k|    virtual ~IEventReceiver() {}

_ZN8opendnp318IINFromParseResultENS_11ParseResultE:
   26|  2.55k|{
   27|  2.55k|    switch (result)
   28|  2.55k|    {
   29|    398|    case (ParseResult::OK):
  ------------------
  |  Branch (29:5): [True: 398, False: 2.15k]
  ------------------
   30|    398|        return IINField::Empty();
   31|    709|    case (ParseResult::UNKNOWN_OBJECT):
  ------------------
  |  Branch (31:5): [True: 709, False: 1.84k]
  ------------------
   32|    709|        return IINField(IINBit::OBJECT_UNKNOWN);
   33|  1.44k|    default:
  ------------------
  |  Branch (33:5): [True: 1.44k, False: 1.10k]
  ------------------
   34|  1.44k|        return IINField(IINBit::PARAM_ERROR);
   35|  2.55k|    }
   36|  2.55k|}

_ZN8opendnp310NumRetriesC2Emb:
   27|  8.87k|    : numRetries(0), maxNumRetries(maxNumRetries), isInfinite(isInfinite)
   28|  8.87k|{
   29|  8.87k|}
_ZN8opendnp310NumRetries8InfiniteEv:
   37|  8.87k|{
   38|  8.87k|    return NumRetries(0, true);
   39|  8.87k|}

_ZN8opendnp321OctetStringSerializerC2Ebh:
   26|    359|    : DNP3Serializer(GroupVariationID(isEvent ? 111 : 110, size),
  ------------------
  |  Branch (26:39): [True: 0, False: 359]
  ------------------
   27|    359|                     size,
   28|    359|                     nullptr, // won't be used for reading
   29|    359|                     &OctetStringSerializer::Write)
   30|    359|{
   31|    359|}
_ZN8opendnp321OctetStringSerializer5WriteERKNS_11OctetStringERN7ser4cpp4WSeqImEE:
   34|  2.26k|{
   35|  2.26k|    if (value.Size() > buffer.length())
  ------------------
  |  Branch (35:9): [True: 0, False: 2.26k]
  ------------------
   36|      0|    {
   37|      0|        return false;
   38|      0|    }
   39|  2.26k|    const auto value_buffer = value.ToBuffer();
   40|  2.26k|    const ser4cpp::rseq_t slice(value_buffer.data, value_buffer.length);
   41|  2.26k|    buffer.copy_from(slice);
   42|  2.26k|    return true;
   43|  2.26k|}

_ZN8opendnp318OutstationSolStateC2Ej:
   34|  8.87k|    OutstationSolState(uint32_t maxTxSize) : tx(maxTxSize) {}
_ZN8opendnp320OutstationUnsolStateC2Ej:
   45|  8.87k|    OutstationUnsolState(uint32_t maxTxSize) : completedNull(false), tx(maxTxSize) {}

_ZN8opendnp38OContextC2ERKNS_9AddressesERKNS_16OutstationConfigERKNS_14DatabaseConfigERKNS_6LoggerERKNSt3__110shared_ptrIN7exe4cpp9IExecutorEEENSE_INS_11ILowerLayerEEENSE_INS_15ICommandHandlerEEENSE_INS_22IOutstationApplicationEEE:
   55|  8.87k|      addresses(addresses),
   56|  8.87k|      logger(logger),
   57|  8.87k|      executor(executor),
   58|  8.87k|      lower(std::move(lower)),
   59|  8.87k|      commandHandler(std::move(commandHandler)),
   60|  8.87k|      application(std::move(application)),
   61|  8.87k|      eventBuffer(config.eventBufferConfig),
   62|  8.87k|      database(db_config, eventBuffer, *this->application, config.params.typesAllowedInClass0),
   63|  8.87k|      rspContext(database, eventBuffer),
   64|  8.87k|      params(config.params),
   65|  8.87k|      isOnline(false),
   66|  8.87k|      isTransmitting(false),
   67|  8.87k|      staticIIN(IINBit::DEVICE_RESTART),
   68|  8.87k|      deferred(config.params.maxRxFragSize),
   69|  8.87k|      sol(config.params.maxTxFragSize),
   70|  8.87k|      unsol(config.params.maxTxFragSize),
   71|  8.87k|      unsolRetries(config.params.numUnsolRetries),
   72|  8.87k|      shouldCheckForUnsolicited(false)
   73|  8.87k|{
   74|  8.87k|}
_ZN8opendnp38OContext14OnLowerLayerUpEv:
   77|  8.87k|{
   78|  8.87k|    if (isOnline)
  ------------------
  |  Branch (78:9): [True: 0, False: 8.87k]
  ------------------
   79|      0|    {
   80|      0|        SIMPLE_LOG_BLOCK(logger, flags::ERR, "already online");
  ------------------
  |  |   42|      0|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   43|      0|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
   81|      0|        return false;
   82|      0|    }
   83|       |
   84|  8.87k|    isOnline = true;
   85|  8.87k|    this->shouldCheckForUnsolicited = true;
   86|  8.87k|    this->CheckForTaskStart();
   87|  8.87k|    return true;
   88|  8.87k|}
_ZN8opendnp38OContext9OnReceiveERKNS_7MessageE:
  127|  8.87k|{
  128|  8.87k|    if (!this->isOnline)
  ------------------
  |  Branch (128:9): [True: 0, False: 8.87k]
  ------------------
  129|      0|    {
  130|      0|        SIMPLE_LOG_BLOCK(this->logger, flags::ERR, "ignoring received data while offline");
  ------------------
  |  |   42|      0|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   43|      0|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  131|      0|        return false;
  132|      0|    }
  133|       |
  134|  8.87k|    this->ProcessMessage(message);
  135|       |
  136|  8.87k|    this->CheckForTaskStart();
  137|       |
  138|  8.87k|    return true;
  139|  8.87k|}
_ZN8opendnp38OContext19OnReceiveSolRequestERKNS_13ParsedRequestE:
  142|  8.37k|{
  143|       |    // analyze this request to see how it compares to the last request
  144|  8.37k|    if (this->history.HasLastRequest())
  ------------------
  |  Branch (144:9): [True: 0, False: 8.37k]
  ------------------
  145|      0|    {
  146|      0|        if (this->sol.seq.num.Equals(request.header.control.SEQ))
  ------------------
  |  Branch (146:13): [True: 0, False: 0]
  ------------------
  147|      0|        {
  148|      0|            if (this->history.FullyEqualsLastRequest(request.header, request.objects))
  ------------------
  |  Branch (148:17): [True: 0, False: 0]
  ------------------
  149|      0|            {
  150|      0|                if (request.header.function == FunctionCode::READ)
  ------------------
  |  Branch (150:21): [True: 0, False: 0]
  ------------------
  151|      0|                {
  152|      0|                    return this->state->OnRepeatReadRequest(*this, request);
  153|      0|                }
  154|       |
  155|      0|                return this->state->OnRepeatNonReadRequest(*this, request);
  156|      0|            }
  157|      0|            else // new operation with same SEQ
  158|      0|            {
  159|      0|                return this->ProcessNewRequest(request);
  160|      0|            }
  161|      0|        }
  162|      0|        else // completely new sequence #
  163|      0|        {
  164|      0|            return this->ProcessNewRequest(request);
  165|      0|        }
  166|      0|    }
  167|  8.37k|    else
  168|  8.37k|    {
  169|  8.37k|        return this->ProcessNewRequest(request);
  170|  8.37k|    }
  171|  8.37k|}
_ZN8opendnp38OContext17ProcessNewRequestERKNS_13ParsedRequestE:
  174|  8.37k|{
  175|  8.37k|    this->sol.seq.num = request.header.control.SEQ;
  176|       |
  177|  8.37k|    if (request.header.function == FunctionCode::READ)
  ------------------
  |  Branch (177:9): [True: 4.71k, False: 3.66k]
  ------------------
  178|  4.71k|    {
  179|  4.71k|        return this->state->OnNewReadRequest(*this, request);
  180|  4.71k|    }
  181|       |
  182|  3.66k|    return this->state->OnNewNonReadRequest(*this, request);
  183|  8.37k|}
_ZN8opendnp38OContext14ProcessObjectsERKNS_13ParsedRequestE:
  186|  8.86k|{
  187|  8.86k|    if (request.addresses.IsBroadcast())
  ------------------
  |  Branch (187:9): [True: 0, False: 8.86k]
  ------------------
  188|      0|    {
  189|      0|        this->state = &this->state->OnBroadcastMessage(*this, request);
  190|      0|        return true;
  191|      0|    }
  192|       |
  193|  8.86k|    if (Functions::IsNoAckFuncCode(request.header.function))
  ------------------
  |  Branch (193:9): [True: 479, False: 8.38k]
  ------------------
  194|    479|    {
  195|       |        // this is the only request we process while we are transmitting
  196|       |        // because it doesn't require a response of any kind
  197|    479|        return this->ProcessRequestNoAck(request);
  198|    479|    }
  199|       |
  200|  8.38k|    if (this->isTransmitting)
  ------------------
  |  Branch (200:9): [True: 0, False: 8.38k]
  ------------------
  201|      0|    {
  202|      0|        this->deferred.Set(request);
  203|      0|        return true;
  204|      0|    }
  205|       |
  206|  8.38k|    if (request.header.function == FunctionCode::CONFIRM)
  ------------------
  |  Branch (206:9): [True: 1, False: 8.38k]
  ------------------
  207|      1|    {
  208|      1|        return this->ProcessConfirm(request);
  209|      1|    }
  210|       |
  211|  8.38k|    return this->ProcessRequest(request);
  212|  8.38k|}
_ZN8opendnp38OContext14ProcessRequestERKNS_13ParsedRequestE:
  215|  8.38k|{
  216|  8.38k|    if (request.header.control.UNS)
  ------------------
  |  Branch (216:9): [True: 3, False: 8.37k]
  ------------------
  217|      3|    {
  218|      3|        FORMAT_LOG_BLOCK(this->logger, flags::WARN, "Ignoring unsol with invalid function code: %s",
  ------------------
  |  |   54|      3|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 3]
  |  |  ------------------
  |  |   55|      3|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
  219|      3|                         FunctionCodeSpec::to_human_string(request.header.function));
  220|      3|        return false;
  221|      3|    }
  222|       |
  223|  8.37k|    this->state = &this->OnReceiveSolRequest(request);
  224|  8.37k|    return true;
  225|  8.38k|}
_ZN8opendnp38OContext14ProcessConfirmERKNS_13ParsedRequestE:
  228|      1|{
  229|      1|    this->state = &this->state->OnConfirm(*this, request);
  230|      1|    return true;
  231|      1|}
_ZN8opendnp38OContext15BeginResponseTxEtRNS_12APDUResponseE:
  234|  8.37k|{
  235|  8.37k|    CheckForBroadcastConfirmation(response);
  236|       |
  237|  8.37k|    const auto data = response.ToRSeq();
  238|  8.37k|    this->sol.tx.Record(response.GetControl(), data);
  239|  8.37k|    this->sol.seq.confirmNum = response.GetControl().SEQ;
  240|  8.37k|    this->BeginTx(destination, data);
  241|       |
  242|  8.37k|    if (response.GetControl().CON)
  ------------------
  |  Branch (242:9): [True: 0, False: 8.37k]
  ------------------
  243|      0|    {
  244|      0|        this->RestartSolConfirmTimer();
  245|      0|        return StateSolicitedConfirmWait::Inst();
  246|      0|    }
  247|       |
  248|  8.37k|    return StateIdle::Inst();
  249|  8.37k|}
_ZN8opendnp38OContext7BeginTxEtRKN7ser4cpp4RSeqImEE:
  273|  8.37k|{
  274|  8.37k|    logging::ParseAndLogResponseTx(this->logger, message);
  275|  8.37k|    this->isTransmitting = true;
  276|  8.37k|    this->lower->BeginTransmit(Message(Addresses(this->addresses.source, destination), message));
  277|  8.37k|}
_ZN8opendnp38OContext17CheckForTaskStartEv:
  280|  17.7k|{
  281|       |    // do these checks in order of priority
  282|  17.7k|    this->CheckForDeferredRequest();
  283|  17.7k|    this->CheckForUnsolicitedNull();
  284|  17.7k|    if (this->shouldCheckForUnsolicited)
  ------------------
  |  Branch (284:9): [True: 17.7k, False: 0]
  ------------------
  285|  17.7k|    {
  286|  17.7k|        this->CheckForUnsolicited();
  287|  17.7k|    }
  288|  17.7k|}
_ZN8opendnp38OContext23CheckForDeferredRequestEv:
  291|  17.7k|{
  292|  17.7k|    if (this->CanTransmit() && this->deferred.IsSet())
  ------------------
  |  Branch (292:9): [True: 9.37k, False: 8.37k]
  |  Branch (292:32): [True: 0, False: 9.37k]
  ------------------
  293|      0|    {
  294|      0|        auto handler = [this](const ParsedRequest& request) { return this->ProcessDeferredRequest(request); };
  295|      0|        this->deferred.Process(handler);
  296|      0|    }
  297|  17.7k|}
_ZN8opendnp38OContext23CheckForUnsolicitedNullEv:
  300|  17.7k|{
  301|  17.7k|    if (this->CanTransmit() && this->state->IsIdle() && this->params.allowUnsolicited)
  ------------------
  |  Branch (301:9): [True: 9.37k, False: 8.37k]
  |  Branch (301:32): [True: 9.37k, False: 0]
  |  Branch (301:57): [True: 0, False: 9.37k]
  ------------------
  302|      0|    {
  303|      0|        if (!this->unsol.completedNull)
  ------------------
  |  Branch (303:13): [True: 0, False: 0]
  ------------------
  304|      0|        {
  305|       |            // send a NULL unsolcited message
  306|      0|            auto response = this->unsol.tx.Start();
  307|      0|            build::NullUnsolicited(response, this->unsol.seq.num, this->GetResponseIIN());
  308|      0|            this->RestartUnsolConfirmTimer();
  309|      0|            this->state = this->params.noDefferedReadDuringUnsolicitedNullResponse
  ------------------
  |  Branch (309:27): [True: 0, False: 0]
  ------------------
  310|      0|                ? &StateNullUnsolicitedConfirmWait::Inst()
  311|      0|                : &StateUnsolicitedConfirmWait::Inst();
  312|      0|            this->BeginUnsolTx(response);
  313|      0|        }
  314|      0|    }
  315|  17.7k|}
_ZN8opendnp38OContext19CheckForUnsolicitedEv:
  318|  17.7k|{
  319|  17.7k|    if (this->shouldCheckForUnsolicited && this->CanTransmit() && this->state->IsIdle()
  ------------------
  |  Branch (319:9): [True: 17.7k, False: 0]
  |  Branch (319:44): [True: 9.37k, False: 8.37k]
  |  Branch (319:67): [True: 9.37k, False: 0]
  ------------------
  320|  9.37k|        && this->params.allowUnsolicited)
  ------------------
  |  Branch (320:12): [True: 0, False: 9.37k]
  ------------------
  321|      0|    {
  322|      0|        this->shouldCheckForUnsolicited = false;
  323|       |
  324|      0|        if (this->unsol.completedNull)
  ------------------
  |  Branch (324:13): [True: 0, False: 0]
  ------------------
  325|      0|        {
  326|       |            // are there events to be reported?
  327|      0|            if (this->params.unsolClassMask.Intersects(this->eventBuffer.UnwrittenClassField()))
  ------------------
  |  Branch (327:17): [True: 0, False: 0]
  ------------------
  328|      0|            {
  329|       |
  330|      0|                auto response = this->unsol.tx.Start();
  331|      0|                auto writer = response.GetWriter();
  332|       |
  333|      0|                this->unsolRetries.Reset();
  334|      0|                this->eventBuffer.Unselect();
  335|      0|                this->eventBuffer.SelectAllByClass(this->params.unsolClassMask);
  336|      0|                this->eventBuffer.Load(writer);
  337|       |
  338|      0|                build::NullUnsolicited(response, this->unsol.seq.num, this->GetResponseIIN());
  339|      0|                this->RestartUnsolConfirmTimer();
  340|      0|                this->state = &StateUnsolicitedConfirmWait::Inst();
  341|      0|                this->BeginUnsolTx(response);
  342|      0|            }
  343|      0|        }
  344|      0|    }
  345|  17.7k|}
_ZN8opendnp38OContext23RespondToNonReadRequestERKNS_13ParsedRequestE:
  395|  3.66k|{
  396|  3.66k|    this->history.RecordLastProcessedRequest(request.header, request.objects);
  397|       |
  398|  3.66k|    auto response = this->sol.tx.Start();
  399|  3.66k|    auto writer = response.GetWriter();
  400|  3.66k|    response.SetFunction(FunctionCode::RESPONSE);
  401|  3.66k|    response.SetControl(AppControlField(true, true, false, false, request.header.control.SEQ));
  402|  3.66k|    auto iin = this->HandleNonReadResponse(request.header, request.objects, writer);
  403|  3.66k|    response.SetIIN(iin | this->GetResponseIIN());
  404|  3.66k|    return this->BeginResponseTx(request.addresses.source, response);
  405|  3.66k|}
_ZN8opendnp38OContext20RespondToReadRequestERKNS_13ParsedRequestE:
  408|  4.71k|{
  409|  4.71k|    this->history.RecordLastProcessedRequest(request.header, request.objects);
  410|       |
  411|  4.71k|    auto response = this->sol.tx.Start();
  412|  4.71k|    auto writer = response.GetWriter();
  413|  4.71k|    response.SetFunction(FunctionCode::RESPONSE);
  414|  4.71k|    auto result = this->HandleRead(request.objects, writer);
  415|  4.71k|    result.second.SEQ = request.header.control.SEQ;
  416|  4.71k|    response.SetControl(result.second);
  417|  4.71k|    response.SetIIN(result.first | this->GetResponseIIN());
  418|       |
  419|  4.71k|    return this->BeginResponseTx(request.addresses.source, response);
  420|  4.71k|}
_ZNK8opendnp38OContext11CanTransmitEv:
  436|  53.2k|{
  437|  53.2k|    return isOnline && !isTransmitting;
  ------------------
  |  Branch (437:12): [True: 53.2k, False: 0]
  |  Branch (437:24): [True: 28.1k, False: 25.1k]
  ------------------
  438|  53.2k|}
_ZN8opendnp38OContext14GetResponseIINEv:
  441|  8.37k|{
  442|  8.37k|    return this->staticIIN | this->GetDynamicIIN() | this->application->GetApplicationIIN().ToIIN();
  443|  8.37k|}
_ZN8opendnp38OContext13GetDynamicIINEv:
  446|  8.37k|{
  447|  8.37k|    auto classField = this->eventBuffer.UnwrittenClassField();
  448|       |
  449|  8.37k|    IINField ret;
  450|  8.37k|    ret.SetBitToValue(IINBit::CLASS1_EVENTS, classField.HasClass1());
  451|  8.37k|    ret.SetBitToValue(IINBit::CLASS2_EVENTS, classField.HasClass2());
  452|  8.37k|    ret.SetBitToValue(IINBit::CLASS3_EVENTS, classField.HasClass3());
  453|  8.37k|    ret.SetBitToValue(IINBit::EVENT_BUFFER_OVERFLOW, this->eventBuffer.IsOverflown());
  454|       |
  455|  8.37k|    return ret;
  456|  8.37k|}
_ZN8opendnp38OContext29CheckForBroadcastConfirmationERNS_12APDUResponseE:
  477|  8.37k|{
  478|  8.37k|    if (lastBroadcastMessageReceived.is_set())
  ------------------
  |  Branch (478:9): [True: 0, False: 8.37k]
  ------------------
  479|      0|    {
  480|      0|        response.SetIIN(response.GetIIN() | IINField(IINBit::BROADCAST));
  481|       |
  482|      0|        if (lastBroadcastMessageReceived.get() != LinkBroadcastAddress::ShallConfirm)
  ------------------
  |  Branch (482:13): [True: 0, False: 0]
  ------------------
  483|      0|        {
  484|      0|            lastBroadcastMessageReceived.clear();
  485|      0|        }
  486|      0|        else
  487|      0|        {
  488|       |            // The broadcast address requested a confirmation
  489|      0|            auto control = response.GetControl();
  490|      0|            control.CON = true;
  491|      0|            response.SetControl(control);
  492|      0|        }
  493|      0|    }
  494|  8.37k|}
_ZN8opendnp38OContext14ProcessMessageERKNS_7MessageE:
  497|  8.87k|{
  498|       |    // is the message addressed to this outstation
  499|  8.87k|    if (message.addresses.destination != this->addresses.source && !message.addresses.IsBroadcast())
  ------------------
  |  Branch (499:9): [True: 0, False: 8.87k]
  |  Branch (499:68): [True: 0, False: 0]
  ------------------
  500|      0|    {
  501|      0|        return false;
  502|      0|    }
  503|       |
  504|       |    // is the message coming from the expected master?
  505|  8.87k|    if (!this->params.respondToAnyMaster && (message.addresses.source != this->addresses.destination))
  ------------------
  |  Branch (505:9): [True: 8.87k, False: 0]
  |  Branch (505:45): [True: 0, False: 8.87k]
  ------------------
  506|      0|    {
  507|      0|        return false;
  508|      0|    }
  509|       |
  510|  8.87k|    FORMAT_HEX_BLOCK(this->logger, flags::APP_HEX_RX, message.payload, 18, 18);
  ------------------
  |  |   70|  8.87k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (70:9): [True: 0, False: 8.87k]
  |  |  ------------------
  |  |   71|  8.87k|    {                                                                                                                  \
  |  |   72|      0|        opendnp3::HexLogging::log(logger, levels, buffer, ' ', firstSize, otherSize);                                  \
  |  |   73|      0|    }
  ------------------
  511|       |
  512|  8.87k|    if (message.addresses.IsBroadcast())
  ------------------
  |  Branch (512:9): [True: 0, False: 8.87k]
  ------------------
  513|      0|    {
  514|      0|        UpdateLastBroadcastMessageReceived(message.addresses.destination);
  515|      0|    }
  516|       |
  517|  8.87k|    const auto result = APDUHeaderParser::ParseRequest(message.payload, &this->logger);
  518|  8.87k|    if (!result.success)
  ------------------
  |  Branch (518:9): [True: 1, False: 8.87k]
  ------------------
  519|      1|    {
  520|      1|        return false;
  521|      1|    }
  522|       |
  523|  8.87k|    logging::LogHeader(this->logger, flags::APP_HEADER_RX, result.header);
  524|       |
  525|  8.87k|    if (!result.header.control.IsFirAndFin())
  ------------------
  |  Branch (525:9): [True: 10, False: 8.86k]
  ------------------
  526|     10|    {
  527|     10|        SIMPLE_LOG_BLOCK(this->logger, flags::WARN, "Ignoring fragment. Requests must have FIR/FIN == 1");
  ------------------
  |  |   42|     10|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 10]
  |  |  ------------------
  |  |   43|     10|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  528|     10|        return false;
  529|     10|    }
  530|       |
  531|  8.86k|    if (result.header.control.CON)
  ------------------
  |  Branch (531:9): [True: 5, False: 8.86k]
  ------------------
  532|      5|    {
  533|      5|        SIMPLE_LOG_BLOCK(this->logger, flags::WARN, "Ignoring fragment. Requests cannot request confirmation");
  ------------------
  |  |   42|      5|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 5]
  |  |  ------------------
  |  |   43|      5|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  534|      5|        return false;
  535|      5|    }
  536|       |
  537|  8.86k|    return this->ProcessObjects(ParsedRequest(message.addresses, result.header, result.objects));
  538|  8.86k|}
_ZN8opendnp38OContext19ProcessRequestNoAckERKNS_13ParsedRequestE:
  630|    479|{
  631|    479|    switch (request.header.function)
  632|    479|    {
  633|    424|    case (FunctionCode::DIRECT_OPERATE_NR):
  ------------------
  |  Branch (633:5): [True: 424, False: 55]
  ------------------
  634|    424|        this->HandleDirectOperate(request.objects, OperateType::DirectOperateNoAck,
  635|    424|                                  nullptr); // no object writer, this is a no ack code
  636|    424|        return true;
  637|     34|    case (FunctionCode::IMMED_FREEZE_NR):
  ------------------
  |  Branch (637:5): [True: 34, False: 445]
  ------------------
  638|     34|        this->HandleFreeze(request.objects);
  639|     34|        return true;
  640|     20|    case (FunctionCode::FREEZE_CLEAR_NR):
  ------------------
  |  Branch (640:5): [True: 20, False: 459]
  ------------------
  641|     20|        this->HandleFreezeAndClear(request.objects);
  642|     20|        return true;
  643|      1|    default:
  ------------------
  |  Branch (643:5): [True: 1, False: 478]
  ------------------
  644|      1|        FORMAT_LOG_BLOCK(this->logger, flags::WARN, "Ignoring NR function code: %s",
  ------------------
  |  |   54|      1|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 1]
  |  |  ------------------
  |  |   55|      1|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
  645|      1|                         FunctionCodeSpec::to_human_string(request.header.function));
  646|      1|        return false;
  647|    479|    }
  648|    479|}
_ZN8opendnp38OContext21HandleNonReadResponseERKNS_10APDUHeaderERKN7ser4cpp4RSeqImEERNS_12HeaderWriterE:
  651|  3.66k|{
  652|  3.66k|    switch (header.function)
  653|  3.66k|    {
  654|  2.57k|    case (FunctionCode::WRITE):
  ------------------
  |  Branch (654:5): [True: 2.57k, False: 1.08k]
  ------------------
  655|  2.57k|        return this->HandleWrite(objects);
  656|    366|    case (FunctionCode::SELECT):
  ------------------
  |  Branch (656:5): [True: 366, False: 3.29k]
  ------------------
  657|    366|        return this->HandleSelect(objects, writer);
  658|    343|    case (FunctionCode::OPERATE):
  ------------------
  |  Branch (658:5): [True: 343, False: 3.31k]
  ------------------
  659|    343|        return this->HandleOperate(objects, writer);
  660|    267|    case (FunctionCode::DIRECT_OPERATE):
  ------------------
  |  Branch (660:5): [True: 267, False: 3.39k]
  ------------------
  661|    267|        return this->HandleDirectOperate(objects, OperateType::DirectOperate, &writer);
  662|      6|    case (FunctionCode::COLD_RESTART):
  ------------------
  |  Branch (662:5): [True: 6, False: 3.65k]
  ------------------
  663|      6|        return this->HandleRestart(objects, false, &writer);
  664|      3|    case (FunctionCode::WARM_RESTART):
  ------------------
  |  Branch (664:5): [True: 3, False: 3.65k]
  ------------------
  665|      3|        return this->HandleRestart(objects, true, &writer);
  666|      1|    case (FunctionCode::ASSIGN_CLASS):
  ------------------
  |  Branch (666:5): [True: 1, False: 3.66k]
  ------------------
  667|      1|        return this->HandleAssignClass(objects);
  668|      2|    case (FunctionCode::DELAY_MEASURE):
  ------------------
  |  Branch (668:5): [True: 2, False: 3.65k]
  ------------------
  669|      2|        return this->HandleDelayMeasure(objects, writer);
  670|      8|    case (FunctionCode::RECORD_CURRENT_TIME):
  ------------------
  |  Branch (670:5): [True: 8, False: 3.65k]
  ------------------
  671|      8|        return objects.is_empty() ? this->HandleRecordCurrentTime() : IINField(IINBit::PARAM_ERROR);
  ------------------
  |  Branch (671:16): [True: 1, False: 7]
  ------------------
  672|      1|    case (FunctionCode::DISABLE_UNSOLICITED):
  ------------------
  |  Branch (672:5): [True: 1, False: 3.66k]
  ------------------
  673|      1|        return this->params.allowUnsolicited ? this->HandleDisableUnsolicited(objects, &writer)
  ------------------
  |  Branch (673:16): [True: 0, False: 1]
  ------------------
  674|      1|                                             : IINField(IINBit::FUNC_NOT_SUPPORTED);
  675|      1|    case (FunctionCode::ENABLE_UNSOLICITED):
  ------------------
  |  Branch (675:5): [True: 1, False: 3.66k]
  ------------------
  676|      1|        return this->params.allowUnsolicited ? this->HandleEnableUnsolicited(objects, &writer)
  ------------------
  |  Branch (676:16): [True: 0, False: 1]
  ------------------
  677|      1|                                             : IINField(IINBit::FUNC_NOT_SUPPORTED);
  678|     21|    case (FunctionCode::IMMED_FREEZE):
  ------------------
  |  Branch (678:5): [True: 21, False: 3.64k]
  ------------------
  679|     21|        return this->HandleFreeze(objects);
  680|     58|    case (FunctionCode::FREEZE_CLEAR):
  ------------------
  |  Branch (680:5): [True: 58, False: 3.60k]
  ------------------
  681|     58|        return this->HandleFreezeAndClear(objects);
  682|      6|    default:
  ------------------
  |  Branch (682:5): [True: 6, False: 3.65k]
  ------------------
  683|      6|        return IINField(IINBit::FUNC_NOT_SUPPORTED);
  684|  3.66k|    }
  685|  3.66k|}
_ZN8opendnp38OContext10HandleReadERKN7ser4cpp4RSeqImEERNS_12HeaderWriterE:
  688|  4.71k|{
  689|  4.71k|    this->rspContext.Reset();
  690|  4.71k|    this->eventBuffer.Unselect(); // always un-select any previously selected points when we start a new read request
  691|  4.71k|    this->database.Unselect();
  692|       |
  693|  4.71k|    ReadHandler handler(this->database, this->eventBuffer);
  694|  4.71k|    auto result = APDUParser::Parse(objects, handler, &this->logger,
  695|  4.71k|                                    ParserSettings::NoContents()); // don't expect range/count context on a READ
  696|  4.71k|    if (result == ParseResult::OK)
  ------------------
  |  Branch (696:9): [True: 4.34k, False: 377]
  ------------------
  697|  4.34k|    {
  698|  4.34k|        auto control = this->rspContext.LoadResponse(writer);
  699|  4.34k|        return ser4cpp::Pair<IINField, AppControlField>(handler.Errors(), control);
  700|  4.34k|    }
  701|       |
  702|    377|    this->rspContext.Reset();
  703|    377|    return ser4cpp::Pair<IINField, AppControlField>(IINFromParseResult(result),
  704|    377|                                                    AppControlField(true, true, false, false));
  705|  4.71k|}
_ZN8opendnp38OContext11HandleWriteERKN7ser4cpp4RSeqImEE:
  708|  2.57k|{
  709|  2.57k|    WriteHandler handler(*this->application, this->time, this->sol.seq.num, Timestamp(this->executor->get_time()),
  710|  2.57k|                         &this->staticIIN);
  711|  2.57k|    auto result = APDUParser::Parse(objects, handler, &this->logger);
  712|  2.57k|    return (result == ParseResult::OK) ? handler.Errors() : IINFromParseResult(result);
  ------------------
  |  Branch (712:12): [True: 1.01k, False: 1.56k]
  ------------------
  713|  2.57k|}
_ZN8opendnp38OContext19HandleDirectOperateERKN7ser4cpp4RSeqImEENS_11OperateTypeEPNS_12HeaderWriterE:
  716|    691|{
  717|       |    // since we're echoing, make sure there's enough size before beginning
  718|    691|    if (pWriter && (objects.length() > pWriter->Remaining()))
  ------------------
  |  Branch (718:9): [True: 267, False: 424]
  |  Branch (718:20): [True: 2, False: 265]
  ------------------
  719|      2|    {
  720|      2|        FORMAT_LOG_BLOCK(this->logger, flags::WARN, "Igonring command request due to oversized payload size of %zu",
  ------------------
  |  |   54|      2|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 2]
  |  |  ------------------
  |  |   55|      2|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
  721|      2|                         objects.length());
  722|      2|        return IINField(IINBit::PARAM_ERROR);
  723|      2|    }
  724|       |
  725|    689|    CommandActionAdapter adapter(*this->commandHandler, false, this->database, opType);
  726|    689|    CommandResponseHandler handler(this->params.maxControlsPerRequest, &adapter, pWriter);
  727|    689|    auto result = APDUParser::Parse(objects, handler, &this->logger);
  728|    689|    this->shouldCheckForUnsolicited = true;
  729|    689|    return (result == ParseResult::OK) ? handler.Errors() : IINFromParseResult(result);
  ------------------
  |  Branch (729:12): [True: 598, False: 91]
  ------------------
  730|    691|}
_ZN8opendnp38OContext12HandleSelectERKN7ser4cpp4RSeqImEERNS_12HeaderWriterE:
  733|    366|{
  734|       |    // since we're echoing, make sure there's enough size before beginning
  735|    366|    if (objects.length() > writer.Remaining())
  ------------------
  |  Branch (735:9): [True: 2, False: 364]
  ------------------
  736|      2|    {
  737|      2|        FORMAT_LOG_BLOCK(this->logger, flags::WARN, "Igonring command request due to oversized payload size of %zu",
  ------------------
  |  |   54|      2|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 2]
  |  |  ------------------
  |  |   55|      2|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
  738|      2|                         objects.length());
  739|      2|        return IINField(IINBit::PARAM_ERROR);
  740|      2|    }
  741|       |
  742|       |    // the 'OperateType' is just ignored  since it's a select
  743|    364|    CommandActionAdapter adapter(*this->commandHandler, true, this->database, OperateType::DirectOperate);
  744|    364|    CommandResponseHandler handler(this->params.maxControlsPerRequest, &adapter, &writer);
  745|    364|    auto result = APDUParser::Parse(objects, handler, &this->logger);
  746|    364|    if (result == ParseResult::OK)
  ------------------
  |  Branch (746:9): [True: 309, False: 55]
  ------------------
  747|    309|    {
  748|    309|        if (handler.AllCommandsSuccessful())
  ------------------
  |  Branch (748:13): [True: 235, False: 74]
  ------------------
  749|    235|        {
  750|    235|            this->control.Select(this->sol.seq.num, Timestamp(this->executor->get_time()), objects);
  751|    235|        }
  752|       |
  753|    309|        return handler.Errors();
  754|    309|    }
  755|       |
  756|     55|    return IINFromParseResult(result);
  757|    364|}
_ZN8opendnp38OContext13HandleOperateERKN7ser4cpp4RSeqImEERNS_12HeaderWriterE:
  760|    343|{
  761|       |    // since we're echoing, make sure there's enough size before beginning
  762|    343|    if (objects.length() > writer.Remaining())
  ------------------
  |  Branch (762:9): [True: 9, False: 334]
  ------------------
  763|      9|    {
  764|      9|        FORMAT_LOG_BLOCK(this->logger, flags::WARN, "Igonring command request due to oversized payload size of %zu",
  ------------------
  |  |   54|      9|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 9]
  |  |  ------------------
  |  |   55|      9|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
  765|      9|                         objects.length());
  766|      9|        return IINField(IINBit::PARAM_ERROR);
  767|      9|    }
  768|       |
  769|    334|    auto now = Timestamp(this->executor->get_time());
  770|    334|    auto result = this->control.ValidateSelection(this->sol.seq.num, now, this->params.selectTimeout, objects);
  771|       |
  772|    334|    if (result == CommandStatus::SUCCESS)
  ------------------
  |  Branch (772:9): [True: 0, False: 334]
  ------------------
  773|      0|    {
  774|      0|        CommandActionAdapter adapter(*this->commandHandler, false, this->database, OperateType::SelectBeforeOperate);
  775|      0|        CommandResponseHandler handler(this->params.maxControlsPerRequest, &adapter, &writer);
  776|      0|        auto result = APDUParser::Parse(objects, handler, &this->logger);
  777|      0|        this->shouldCheckForUnsolicited = true;
  778|      0|        return (result == ParseResult::OK) ? handler.Errors() : IINFromParseResult(result);
  ------------------
  |  Branch (778:16): [True: 0, False: 0]
  ------------------
  779|      0|    }
  780|    334|    else
  781|    334|    {
  782|    334|        this->control.Unselect();
  783|    334|    }
  784|       |
  785|    334|    return this->HandleCommandWithConstant(objects, writer, result);
  786|    334|}
_ZN8opendnp38OContext18HandleDelayMeasureERKN7ser4cpp4RSeqImEERNS_12HeaderWriterE:
  789|      2|{
  790|      2|    if (objects.is_empty())
  ------------------
  |  Branch (790:9): [True: 1, False: 1]
  ------------------
  791|      1|    {
  792|      1|        Group52Var2 value;
  793|      1|        value.time = 0; // respond with 0 time delay
  794|      1|        writer.WriteSingleValue<ser4cpp::UInt8, Group52Var2>(QualifierCode::UINT8_CNT, value);
  795|      1|        return IINField::Empty();
  796|      1|    }
  797|       |
  798|       |    // there shouldn't be any trailing headers in delay measure request, no need to even parse
  799|      1|    return IINField(IINBit::PARAM_ERROR);
  800|      2|}
_ZN8opendnp38OContext23HandleRecordCurrentTimeEv:
  803|      1|{
  804|      1|    this->time.RecordCurrentTime(this->sol.seq.num, Timestamp(this->executor->get_time()));
  805|      1|    return IINField::Empty();
  806|      1|}
_ZN8opendnp38OContext13HandleRestartERKN7ser4cpp4RSeqImEEbPNS_12HeaderWriterE:
  809|      9|{
  810|      9|    if (objects.is_not_empty())
  ------------------
  |  Branch (810:9): [True: 7, False: 2]
  ------------------
  811|      7|        return IINField(IINBit::PARAM_ERROR);
  812|       |
  813|      2|    auto mode = isWarmRestart ? this->application->WarmRestartSupport() : this->application->ColdRestartSupport();
  ------------------
  |  Branch (813:17): [True: 1, False: 1]
  ------------------
  814|       |
  815|      2|    switch (mode)
  816|      2|    {
  817|      2|    case (RestartMode::UNSUPPORTED):
  ------------------
  |  Branch (817:5): [True: 2, False: 0]
  ------------------
  818|      2|        return IINField(IINBit::FUNC_NOT_SUPPORTED);
  819|      0|    case (RestartMode::SUPPORTED_DELAY_COARSE):
  ------------------
  |  Branch (819:5): [True: 0, False: 2]
  ------------------
  820|      0|    {
  821|      0|        auto delay = isWarmRestart ? this->application->WarmRestart() : this->application->ColdRestart();
  ------------------
  |  Branch (821:22): [True: 0, False: 0]
  ------------------
  822|      0|        if (pWriter)
  ------------------
  |  Branch (822:13): [True: 0, False: 0]
  ------------------
  823|      0|        {
  824|      0|            Group52Var1 coarse;
  825|      0|            coarse.time = delay;
  826|      0|            pWriter->WriteSingleValue<ser4cpp::UInt8>(QualifierCode::UINT8_CNT, coarse);
  827|      0|        }
  828|      0|        return IINField::Empty();
  829|      0|    }
  830|      0|    default:
  ------------------
  |  Branch (830:5): [True: 0, False: 2]
  ------------------
  831|      0|    {
  832|      0|        auto delay = isWarmRestart ? this->application->WarmRestart() : this->application->ColdRestart();
  ------------------
  |  Branch (832:22): [True: 0, False: 0]
  ------------------
  833|      0|        if (pWriter)
  ------------------
  |  Branch (833:13): [True: 0, False: 0]
  ------------------
  834|      0|        {
  835|      0|            Group52Var2 fine;
  836|      0|            fine.time = delay;
  837|      0|            pWriter->WriteSingleValue<ser4cpp::UInt8>(QualifierCode::UINT8_CNT, fine);
  838|      0|        }
  839|      0|        return IINField::Empty();
  840|      0|    }
  841|      2|    }
  842|      2|}
_ZN8opendnp38OContext17HandleAssignClassERKN7ser4cpp4RSeqImEE:
  845|      1|{
  846|      1|    if (this->application->SupportsAssignClass())
  ------------------
  |  Branch (846:9): [True: 0, False: 1]
  ------------------
  847|      0|    {
  848|      0|        AssignClassHandler handler(*this->application, this->database);
  849|      0|        auto result = APDUParser::Parse(objects, handler, &this->logger, ParserSettings::NoContents());
  850|      0|        return (result == ParseResult::OK) ? handler.Errors() : IINFromParseResult(result);
  ------------------
  |  Branch (850:16): [True: 0, False: 0]
  ------------------
  851|      0|    }
  852|       |
  853|      1|    return IINField(IINBit::FUNC_NOT_SUPPORTED);
  854|      1|}
_ZN8opendnp38OContext25HandleCommandWithConstantERKN7ser4cpp4RSeqImEERNS_12HeaderWriterENS_13CommandStatusE:
  884|    334|{
  885|    334|    ConstantCommandAction constant(status);
  886|    334|    CommandResponseHandler handler(this->params.maxControlsPerRequest, &constant, &writer);
  887|    334|    auto result = APDUParser::Parse(objects, handler, &this->logger);
  888|    334|    return IINFromParseResult(result);
  889|    334|}
_ZN8opendnp38OContext12HandleFreezeERKN7ser4cpp4RSeqImEE:
  892|     55|{
  893|     55|    FreezeRequestHandler handler(false, database);
  894|     55|    auto result = APDUParser::Parse(objects, handler, &this->logger, ParserSettings::NoContents());
  895|     55|    return IINFromParseResult(result);
  896|     55|}
_ZN8opendnp38OContext20HandleFreezeAndClearERKN7ser4cpp4RSeqImEE:
  899|     78|{
  900|     78|    FreezeRequestHandler handler(true, database);
  901|     78|    auto result = APDUParser::Parse(objects, handler, &this->logger, ParserSettings::NoContents());
  902|     78|    return IINFromParseResult(result);
  903|     78|}

_ZN8opendnp316OutstationSeqNumC2Ev:
   36|  17.7k|    OutstationSeqNum() {}

_ZN8opendnp39StateIdle9OnConfirmERNS_8OContextERKNS_13ParsedRequestE:
   36|      1|{
   37|      1|    FORMAT_LOG_BLOCK(ctx.logger, flags::WARN, "unexpected confirm while IDLE with sequence: %u",
  ------------------
  |  |   54|      1|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 1]
  |  |  ------------------
  |  |   55|      1|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
   38|      1|                     request.header.control.SEQ);
   39|      1|    return StateIdle::Inst();
   40|      1|}
_ZN8opendnp39StateIdle16OnNewReadRequestERNS_8OContextERKNS_13ParsedRequestE:
   49|  4.71k|{
   50|  4.71k|    return ctx.RespondToReadRequest(request);
   51|  4.71k|}
_ZN8opendnp39StateIdle19OnNewNonReadRequestERNS_8OContextERKNS_13ParsedRequestE:
   54|  3.66k|{
   55|  3.66k|    return ctx.RespondToNonReadRequest(request);
   56|  3.66k|}

_ZN8opendnp39StateIdle6IsIdleEv:
   65|  18.7k|    {
   66|  18.7k|        return true;
   67|  18.7k|    }
_ZN8opendnp39StateIdle4InstEv:
   75|  17.2k|    {
   76|  17.2k|        return instance;
   77|  17.2k|    }
_ZN8opendnp39StateIdleC2Ev:
   96|      2|    StateIdle() {}
_ZN8opendnp325StateSolicitedConfirmWaitC2Ev:
  133|      2|    StateSolicitedConfirmWait() {}
_ZN8opendnp327StateUnsolicitedConfirmWaitC2Ev:
  170|      4|    StateUnsolicitedConfirmWait() {}
_ZN8opendnp331StateNullUnsolicitedConfirmWaitC2Ev:
  195|      2|    StateNullUnsolicitedConfirmWait() {}

_ZN8opendnp313ParsedRequestC2ERKNS_9AddressesERKNS_10APDUHeaderERKN7ser4cpp4RSeqImEE:
   36|  8.86k|        : addresses(addresses), header(header), objects(objects)
   37|  8.86k|    {
   38|  8.86k|    }

_ZN8opendnp311ReadHandlerC2ERNS_15IStaticSelectorERNS_14IEventSelectorE:
   26|  4.71k|    : pStaticSelector(&staticSelector), pEventSelector(&eventSelector)
   27|  4.71k|{
   28|  4.71k|}
_ZN8opendnp311ReadHandler13ProcessHeaderERKNS_16AllObjectsHeaderE:
   31|  56.3k|{
   32|  56.3k|    switch (header.type)
   33|  56.3k|    {
   34|  37.5k|    case (GroupVariationType::STATIC):
  ------------------
  |  Branch (34:5): [True: 37.5k, False: 18.7k]
  ------------------
   35|  37.5k|        return pStaticSelector->SelectAll(header.enumeration);
   36|  16.7k|    case (GroupVariationType::EVENT):
  ------------------
  |  Branch (36:5): [True: 16.7k, False: 39.6k]
  ------------------
   37|  16.7k|        return pEventSelector->SelectAll(header.enumeration);
   38|  2.04k|    default:
  ------------------
  |  Branch (38:5): [True: 2.04k, False: 54.3k]
  ------------------
   39|  2.04k|        return IINField(IINBit::FUNC_NOT_SUPPORTED);
   40|  56.3k|    }
   41|  56.3k|}
_ZN8opendnp311ReadHandler13ProcessHeaderERKNS_11RangeHeaderE:
   44|  19.4k|{
   45|  19.4k|    return pStaticSelector->SelectRange(header.enumeration, header.range);
   46|  19.4k|}
_ZN8opendnp311ReadHandler13ProcessHeaderERKNS_11CountHeaderE:
   49|  1.50k|{
   50|  1.50k|    return pEventSelector->SelectCount(header.enumeration, header.count);
   51|  1.50k|}
_ZN8opendnp311ReadHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionItEE:
   54|  20.8k|{
   55|  20.8k|    return pStaticSelector->SelectIndices(header.enumeration, indices);
   56|  20.8k|}

_ZN8opendnp311ReadHandler9IsAllowedEjNS_14GroupVariationENS_13QualifierCodeE:
   39|  99.0k|    {
   40|  99.0k|        return true;
   41|  99.0k|    }

_ZN8opendnp314RequestHistoryC2Ev:
   27|  8.87k|RequestHistory::RequestHistory() : hasLast(false), lastDigest(0), lastObjectsLength(0) {}
_ZN8opendnp314RequestHistory26RecordLastProcessedRequestERKNS_10APDUHeaderERKN7ser4cpp4RSeqImEE:
   35|  8.37k|{
   36|  8.37k|    hasLast = true;
   37|  8.37k|    lastHeader = header;
   38|  8.37k|    lastObjectsLength = objects.length();
   39|  8.37k|    lastDigest = CRC::CalcCrc(objects);
   40|  8.37k|}

_ZNK8opendnp314RequestHistory14HasLastRequestEv:
   39|  8.37k|    {
   40|  8.37k|        return hasLast;
   41|  8.37k|    }

_ZN8opendnp315ResponseContextC2ERNS_15IResponseLoaderES2_:
   26|  8.87k|    : fragmentCount(0), pStaticLoader(&staticLoader), pEventLoader(&eventLoader)
   27|  8.87k|{
   28|  8.87k|}
_ZN8opendnp315ResponseContext5ResetEv:
   36|  5.09k|{
   37|  5.09k|    fragmentCount = 0;
   38|  5.09k|}
_ZN8opendnp315ResponseContext12LoadResponseERNS_12HeaderWriterE:
   41|  4.34k|{
   42|  4.34k|    bool fir = fragmentCount == 0;
   43|  4.34k|    ++fragmentCount;
   44|       |
   45|  4.34k|    auto startingSize = writer.Remaining();
   46|  4.34k|    bool notFull = pEventLoader->Load(writer);
   47|  4.34k|    bool someEventsWritten = writer.Remaining() < startingSize;
   48|       |
   49|  4.34k|    if (notFull)
  ------------------
  |  Branch (49:9): [True: 4.34k, False: 0]
  ------------------
   50|  4.34k|    {
   51|  4.34k|        auto fin = pStaticLoader->Load(writer);
   52|  4.34k|        auto con = !fin || someEventsWritten;
  ------------------
  |  Branch (52:20): [True: 0, False: 4.34k]
  |  Branch (52:28): [True: 0, False: 4.34k]
  ------------------
   53|  4.34k|        return AppControlField(fir, fin, con, false);
   54|  4.34k|    }
   55|       |
   56|      0|    return AppControlField(fir, false, true, false);
   57|  4.34k|}

_ZN8opendnp320SimpleCommandHandlerC2ENS_13CommandStatusE:
   26|  8.87k|    : status(status), numOperate(0), numSelect(0), numStart(0), numEnd(0)
   27|  8.87k|{
   28|  8.87k|}
_ZN8opendnp320SimpleCommandHandler5BeginEv:
   31|    887|{
   32|    887|    ++numStart;
   33|    887|}
_ZN8opendnp320SimpleCommandHandler3EndEv:
   36|    887|{
   37|    887|    ++numEnd;
   38|    887|}
_ZN8opendnp320SimpleCommandHandler6SelectERKNS_23ControlRelayOutputBlockEt:
   41|  1.06k|{
   42|  1.06k|    this->DoSelect(command, index);
   43|  1.06k|    ++numSelect;
   44|  1.06k|    return status;
   45|  1.06k|}
_ZN8opendnp320SimpleCommandHandler7OperateERKNS_23ControlRelayOutputBlockEtRNS_14IUpdateHandlerENS_11OperateTypeE:
   50|  1.52k|{
   51|  1.52k|    this->DoOperate(command, index, opType);
   52|  1.52k|    ++numOperate;
   53|  1.52k|    return status;
   54|  1.52k|}
_ZN8opendnp320SimpleCommandHandler6SelectERKNS_17AnalogOutputInt16Et:
   57|  3.57k|{
   58|  3.57k|    this->DoSelect(command, index);
   59|  3.57k|    ++numSelect;
   60|  3.57k|    return status;
   61|  3.57k|}
_ZN8opendnp320SimpleCommandHandler7OperateERKNS_17AnalogOutputInt16EtRNS_14IUpdateHandlerENS_11OperateTypeE:
   66|  13.2k|{
   67|  13.2k|    this->DoOperate(command, index, opType);
   68|  13.2k|    ++numOperate;
   69|  13.2k|    return status;
   70|  13.2k|}
_ZN8opendnp320SimpleCommandHandler6SelectERKNS_17AnalogOutputInt32Et:
   73|  1.77k|{
   74|  1.77k|    this->DoSelect(command, index);
   75|  1.77k|    ++numSelect;
   76|  1.77k|    return status;
   77|  1.77k|}
_ZN8opendnp320SimpleCommandHandler7OperateERKNS_17AnalogOutputInt32EtRNS_14IUpdateHandlerENS_11OperateTypeE:
   82|  2.54k|{
   83|  2.54k|    this->DoOperate(command, index, opType);
   84|  2.54k|    ++numOperate;
   85|  2.54k|    return status;
   86|  2.54k|}
_ZN8opendnp320SimpleCommandHandler6SelectERKNS_19AnalogOutputFloat32Et:
   89|  1.97k|{
   90|  1.97k|    this->DoSelect(command, index);
   91|  1.97k|    ++numSelect;
   92|  1.97k|    return status;
   93|  1.97k|}
_ZN8opendnp320SimpleCommandHandler7OperateERKNS_19AnalogOutputFloat32EtRNS_14IUpdateHandlerENS_11OperateTypeE:
   98|  4.68k|{
   99|  4.68k|    this->DoOperate(command, index, opType);
  100|  4.68k|    ++numOperate;
  101|  4.68k|    return status;
  102|  4.68k|}
_ZN8opendnp320SimpleCommandHandler6SelectERKNS_20AnalogOutputDouble64Et:
  105|  2.83k|{
  106|  2.83k|    this->DoSelect(command, index);
  107|  2.83k|    ++numSelect;
  108|  2.83k|    return status;
  109|  2.83k|}
_ZN8opendnp320SimpleCommandHandler7OperateERKNS_20AnalogOutputDouble64EtRNS_14IUpdateHandlerENS_11OperateTypeE:
  114|  3.99k|{
  115|  3.99k|    this->DoOperate(command, index, opType);
  116|  3.99k|    ++numOperate;
  117|  3.99k|    return status;
  118|  3.99k|}

_ZN8opendnp314StaticDataCellINS_10BinarySpecEEC2ERKNS_12BinaryConfigE:
   58|  88.7k|    StaticDataCell(const typename Spec::config_t& config) : config(config) {}
_ZN8opendnp313SelectedValueINS_10BinarySpecEEC2Ev:
   31|   177k|    SelectedValue() = default;
_ZN8opendnp314StaticDataCellINS_10BinarySpecEEC2Ev:
   53|  88.7k|    StaticDataCell() = default;
_ZN8opendnp314StaticDataCellINS_19DoubleBitBinarySpecEEC2ERKNS_21DoubleBitBinaryConfigE:
   58|  88.7k|    StaticDataCell(const typename Spec::config_t& config) : config(config) {}
_ZN8opendnp313SelectedValueINS_19DoubleBitBinarySpecEEC2Ev:
   31|   177k|    SelectedValue() = default;
_ZN8opendnp314StaticDataCellINS_19DoubleBitBinarySpecEEC2Ev:
   53|  88.7k|    StaticDataCell() = default;
_ZN8opendnp314StaticDataCellINS_10AnalogSpecEEC2ERKNS_12AnalogConfigE:
   58|  88.7k|    StaticDataCell(const typename Spec::config_t& config) : config(config) {}
_ZN8opendnp313SelectedValueINS_10AnalogSpecEEC2Ev:
   31|   177k|    SelectedValue() = default;
_ZN8opendnp314StaticDataCellINS_10AnalogSpecEEC2Ev:
   53|  88.7k|    StaticDataCell() = default;
_ZN8opendnp314StaticDataCellINS_11CounterSpecEEC2ERKNS_13CounterConfigE:
   58|  88.7k|    StaticDataCell(const typename Spec::config_t& config) : config(config) {}
_ZN8opendnp313SelectedValueINS_11CounterSpecEEC2Ev:
   31|   177k|    SelectedValue() = default;
_ZN8opendnp314StaticDataCellINS_11CounterSpecEEC2Ev:
   53|  88.7k|    StaticDataCell() = default;
_ZN8opendnp314StaticDataCellINS_17FrozenCounterSpecEEC2ERKNS_19FrozenCounterConfigE:
   58|  88.7k|    StaticDataCell(const typename Spec::config_t& config) : config(config) {}
_ZN8opendnp313SelectedValueINS_17FrozenCounterSpecEEC2Ev:
   31|   177k|    SelectedValue() = default;
_ZN8opendnp314StaticDataCellINS_17FrozenCounterSpecEEC2Ev:
   53|  88.7k|    StaticDataCell() = default;
_ZN8opendnp314StaticDataCellINS_22BinaryOutputStatusSpecEEC2ERKNS_14BOStatusConfigE:
   58|  88.7k|    StaticDataCell(const typename Spec::config_t& config) : config(config) {}
_ZN8opendnp313SelectedValueINS_22BinaryOutputStatusSpecEEC2Ev:
   31|   177k|    SelectedValue() = default;
_ZN8opendnp314StaticDataCellINS_22BinaryOutputStatusSpecEEC2Ev:
   53|  88.7k|    StaticDataCell() = default;
_ZN8opendnp314StaticDataCellINS_22AnalogOutputStatusSpecEEC2ERKNS_14AOStatusConfigE:
   58|  88.7k|    StaticDataCell(const typename Spec::config_t& config) : config(config) {}
_ZN8opendnp313SelectedValueINS_22AnalogOutputStatusSpecEEC2Ev:
   31|   177k|    SelectedValue() = default;
_ZN8opendnp314StaticDataCellINS_22AnalogOutputStatusSpecEEC2Ev:
   53|  88.7k|    StaticDataCell() = default;
_ZN8opendnp314StaticDataCellINS_19TimeAndIntervalSpecEEC2ERKNS_21TimeAndIntervalConfigE:
   58|  88.7k|    StaticDataCell(const typename Spec::config_t& config) : config(config) {}
_ZN8opendnp313SelectedValueINS_19TimeAndIntervalSpecEEC2Ev:
   31|   177k|    SelectedValue() = default;
_ZN8opendnp314StaticDataCellINS_19TimeAndIntervalSpecEEC2Ev:
   53|  88.7k|    StaticDataCell() = default;
_ZN8opendnp314StaticDataCellINS_15OctetStringSpecEEC2ERKNS_17OctetStringConfigE:
   58|  88.7k|    StaticDataCell(const typename Spec::config_t& config) : config(config) {}
_ZN8opendnp313SelectedValueINS_15OctetStringSpecEEC2Ev:
   31|   177k|    SelectedValue() = default;
_ZN8opendnp314StaticDataCellINS_15OctetStringSpecEEC2Ev:
   53|  88.7k|    StaticDataCell() = default;
_ZN8opendnp313SelectedValueINS_19TimeAndIntervalSpecEEC2EbRKNS_15TimeAndIntervalENS_30StaticTimeAndIntervalVariationE:
   34|  32.1k|        : selected(selected), value(value), variation(variation)
   35|  32.1k|    {
   36|  32.1k|    }
_ZN8opendnp313SelectedValueINS_10BinarySpecEEC2EbRKNS_6BinaryENS_21StaticBinaryVariationE:
   34|  66.9k|        : selected(selected), value(value), variation(variation)
   35|  66.9k|    {
   36|  66.9k|    }
_ZN8opendnp313SelectedValueINS_19DoubleBitBinarySpecEEC2EbRKNS_15DoubleBitBinaryENS_27StaticDoubleBinaryVariationE:
   34|  46.8k|        : selected(selected), value(value), variation(variation)
   35|  46.8k|    {
   36|  46.8k|    }
_ZN8opendnp313SelectedValueINS_22BinaryOutputStatusSpecEEC2EbRKNS_18BinaryOutputStatusENS_33StaticBinaryOutputStatusVariationE:
   34|  52.0k|        : selected(selected), value(value), variation(variation)
   35|  52.0k|    {
   36|  52.0k|    }
_ZN8opendnp313SelectedValueINS_11CounterSpecEEC2EbRKNS_7CounterENS_22StaticCounterVariationE:
   34|  98.3k|        : selected(selected), value(value), variation(variation)
   35|  98.3k|    {
   36|  98.3k|    }
_ZN8opendnp313SelectedValueINS_17FrozenCounterSpecEEC2EbRKNS_13FrozenCounterENS_28StaticFrozenCounterVariationE:
   34|   119k|        : selected(selected), value(value), variation(variation)
   35|   119k|    {
   36|   119k|    }
_ZN8opendnp313SelectedValueINS_10AnalogSpecEEC2EbRKNS_6AnalogENS_21StaticAnalogVariationE:
   34|   117k|        : selected(selected), value(value), variation(variation)
   35|   117k|    {
   36|   117k|    }
_ZN8opendnp313SelectedValueINS_22AnalogOutputStatusSpecEEC2EbRKNS_18AnalogOutputStatusENS_33StaticAnalogOutputStatusVariationE:
   34|  98.2k|        : selected(selected), value(value), variation(variation)
   35|  98.2k|    {
   36|  98.2k|    }
_ZN8opendnp313SelectedValueINS_15OctetStringSpecEEC2EbRKNS_11OctetStringENS_26StaticOctetStringVariationE:
   34|  34.6k|        : selected(selected), value(value), variation(variation)
   35|  34.6k|    {
   36|  34.6k|    }

_ZN8opendnp319check_for_promotionINS_10BinarySpecEEENT_18static_variation_tERKNS2_6meas_tES3_:
   62|  66.9k|{
   63|  66.9k|    if (variation == StaticBinaryVariation::Group1Var1)
  ------------------
  |  Branch (63:9): [True: 16.3k, False: 50.6k]
  ------------------
   64|  16.3k|    {
   65|  16.3k|        return BinarySpec::IsQualityOnlineOnly(value) ? variation : StaticBinaryVariation::Group1Var2;
  ------------------
  |  Branch (65:16): [True: 0, False: 16.3k]
  ------------------
   66|  16.3k|    }
   67|       |
   68|  50.6k|    return variation;
   69|  66.9k|}

_ZN8opendnp313StaticDataMapINS_10BinarySpecEEC2ERKNSt3__13mapItNS_12BinaryConfigENS3_4lessItEENS3_9allocatorINS3_4pairIKtS5_EEEEEE:
  189|  8.87k|{
  190|  8.87k|    for (const auto& item : config)
  ------------------
  |  Branch (190:27): [True: 88.7k, False: 8.87k]
  ------------------
  191|  88.7k|    {
  192|  88.7k|        this->map[item.first] = StaticDataCell<Spec>{item.second};
  193|  88.7k|    }
  194|  8.87k|}
_ZN8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEEC2ERKNSt3__13mapItNS_21DoubleBitBinaryConfigENS3_4lessItEENS3_9allocatorINS3_4pairIKtS5_EEEEEE:
  189|  8.87k|{
  190|  8.87k|    for (const auto& item : config)
  ------------------
  |  Branch (190:27): [True: 88.7k, False: 8.87k]
  ------------------
  191|  88.7k|    {
  192|  88.7k|        this->map[item.first] = StaticDataCell<Spec>{item.second};
  193|  88.7k|    }
  194|  8.87k|}
_ZN8opendnp313StaticDataMapINS_10AnalogSpecEEC2ERKNSt3__13mapItNS_12AnalogConfigENS3_4lessItEENS3_9allocatorINS3_4pairIKtS5_EEEEEE:
  189|  8.87k|{
  190|  8.87k|    for (const auto& item : config)
  ------------------
  |  Branch (190:27): [True: 88.7k, False: 8.87k]
  ------------------
  191|  88.7k|    {
  192|  88.7k|        this->map[item.first] = StaticDataCell<Spec>{item.second};
  193|  88.7k|    }
  194|  8.87k|}
_ZN8opendnp313StaticDataMapINS_11CounterSpecEEC2ERKNSt3__13mapItNS_13CounterConfigENS3_4lessItEENS3_9allocatorINS3_4pairIKtS5_EEEEEE:
  189|  8.87k|{
  190|  8.87k|    for (const auto& item : config)
  ------------------
  |  Branch (190:27): [True: 88.7k, False: 8.87k]
  ------------------
  191|  88.7k|    {
  192|  88.7k|        this->map[item.first] = StaticDataCell<Spec>{item.second};
  193|  88.7k|    }
  194|  8.87k|}
_ZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEEC2ERKNSt3__13mapItNS_19FrozenCounterConfigENS3_4lessItEENS3_9allocatorINS3_4pairIKtS5_EEEEEE:
  189|  8.87k|{
  190|  8.87k|    for (const auto& item : config)
  ------------------
  |  Branch (190:27): [True: 88.7k, False: 8.87k]
  ------------------
  191|  88.7k|    {
  192|  88.7k|        this->map[item.first] = StaticDataCell<Spec>{item.second};
  193|  88.7k|    }
  194|  8.87k|}
_ZN8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEEC2ERKNSt3__13mapItNS_14BOStatusConfigENS3_4lessItEENS3_9allocatorINS3_4pairIKtS5_EEEEEE:
  189|  8.87k|{
  190|  8.87k|    for (const auto& item : config)
  ------------------
  |  Branch (190:27): [True: 88.7k, False: 8.87k]
  ------------------
  191|  88.7k|    {
  192|  88.7k|        this->map[item.first] = StaticDataCell<Spec>{item.second};
  193|  88.7k|    }
  194|  8.87k|}
_ZN8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEEC2ERKNSt3__13mapItNS_14AOStatusConfigENS3_4lessItEENS3_9allocatorINS3_4pairIKtS5_EEEEEE:
  189|  8.87k|{
  190|  8.87k|    for (const auto& item : config)
  ------------------
  |  Branch (190:27): [True: 88.7k, False: 8.87k]
  ------------------
  191|  88.7k|    {
  192|  88.7k|        this->map[item.first] = StaticDataCell<Spec>{item.second};
  193|  88.7k|    }
  194|  8.87k|}
_ZN8opendnp313StaticDataMapINS_19TimeAndIntervalSpecEEC2ERKNSt3__13mapItNS_21TimeAndIntervalConfigENS3_4lessItEENS3_9allocatorINS3_4pairIKtS5_EEEEEE:
  189|  8.87k|{
  190|  8.87k|    for (const auto& item : config)
  ------------------
  |  Branch (190:27): [True: 88.7k, False: 8.87k]
  ------------------
  191|  88.7k|    {
  192|  88.7k|        this->map[item.first] = StaticDataCell<Spec>{item.second};
  193|  88.7k|    }
  194|  8.87k|}
_ZN8opendnp313StaticDataMapINS_15OctetStringSpecEEC2ERKNSt3__13mapItNS_17OctetStringConfigENS3_4lessItEENS3_9allocatorINS3_4pairIKtS5_EEEEEE:
  189|  8.87k|{
  190|  8.87k|    for (const auto& item : config)
  ------------------
  |  Branch (190:27): [True: 88.7k, False: 8.87k]
  ------------------
  191|  88.7k|    {
  192|  88.7k|        this->map[item.first] = StaticDataCell<Spec>{item.second};
  193|  88.7k|    }
  194|  8.87k|}
_ZN8opendnp313StaticDataMapINS_19TimeAndIntervalSpecEE10select_allEv:
  131|  1.75k|    {
  132|  1.75k|        return this->select_all([](auto var) { return var; }); // use the default
  133|  1.75k|    }
_ZN8opendnp313StaticDataMapINS_19TimeAndIntervalSpecEE10select_allIZNS2_10select_allEvEUlT_E_EEmS4_:
  293|  1.75k|{
  294|  1.75k|    if (map.empty())
  ------------------
  |  Branch (294:9): [True: 0, False: 1.75k]
  ------------------
  295|      0|    {
  296|      0|        return 0;
  297|      0|    }
  298|  1.75k|    else
  299|  1.75k|    {
  300|  1.75k|        this->selected = Range::From(map.begin()->first, map.rbegin()->first);
  301|       |
  302|  1.75k|        for (auto& iter : this->map)
  ------------------
  |  Branch (302:25): [True: 17.5k, False: 1.75k]
  ------------------
  303|  17.5k|        {
  304|  17.5k|            iter.second.selection = SelectedValue<Spec>{
  305|  17.5k|                true, iter.second.value,
  306|  17.5k|                check_for_promotion<Spec>(iter.second.value, get_variation(iter.second.config.svariation))};
  307|  17.5k|        }
  308|       |
  309|  1.75k|        return this->map.size();
  310|  1.75k|    }
  311|  1.75k|}
_ZN8opendnp319check_for_promotionINS_19TimeAndIntervalSpecEEENT_18static_variation_tERKNS2_6meas_tES3_:
   42|  32.1k|{
   43|  32.1k|    return variation;
   44|  32.1k|}
_ZZN8opendnp313StaticDataMapINS_19TimeAndIntervalSpecEE10select_allEvENKUlT_E_clINS_30StaticTimeAndIntervalVariationEEEDaS3_:
  132|  17.5k|        return this->select_all([](auto var) { return var; }); // use the default
_ZN8opendnp313StaticDataMapINS_10BinarySpecEE10select_allEv:
  131|  3.04k|    {
  132|  3.04k|        return this->select_all([](auto var) { return var; }); // use the default
  133|  3.04k|    }
_ZN8opendnp313StaticDataMapINS_10BinarySpecEE10select_allIZNS2_10select_allEvEUlT_E_EEmS4_:
  293|  3.04k|{
  294|  3.04k|    if (map.empty())
  ------------------
  |  Branch (294:9): [True: 0, False: 3.04k]
  ------------------
  295|      0|    {
  296|      0|        return 0;
  297|      0|    }
  298|  3.04k|    else
  299|  3.04k|    {
  300|  3.04k|        this->selected = Range::From(map.begin()->first, map.rbegin()->first);
  301|       |
  302|  3.04k|        for (auto& iter : this->map)
  ------------------
  |  Branch (302:25): [True: 30.4k, False: 3.04k]
  ------------------
  303|  30.4k|        {
  304|  30.4k|            iter.second.selection = SelectedValue<Spec>{
  305|  30.4k|                true, iter.second.value,
  306|  30.4k|                check_for_promotion<Spec>(iter.second.value, get_variation(iter.second.config.svariation))};
  307|  30.4k|        }
  308|       |
  309|  3.04k|        return this->map.size();
  310|  3.04k|    }
  311|  3.04k|}
_ZZN8opendnp313StaticDataMapINS_10BinarySpecEE10select_allEvENKUlT_E_clINS_21StaticBinaryVariationEEEDaS3_:
  132|  30.4k|        return this->select_all([](auto var) { return var; }); // use the default
_ZN8opendnp313StaticDataMapINS_10BinarySpecEE10select_allENS_21StaticBinaryVariationE:
  136|  2.08k|    {
  137|  2.08k|        return this->select_all([variation](auto var) { return variation; }); // override default
  138|  2.08k|    }
_ZN8opendnp313StaticDataMapINS_10BinarySpecEE10select_allIZNS2_10select_allENS_21StaticBinaryVariationEEUlT_E_EEmS5_:
  293|  2.08k|{
  294|  2.08k|    if (map.empty())
  ------------------
  |  Branch (294:9): [True: 0, False: 2.08k]
  ------------------
  295|      0|    {
  296|      0|        return 0;
  297|      0|    }
  298|  2.08k|    else
  299|  2.08k|    {
  300|  2.08k|        this->selected = Range::From(map.begin()->first, map.rbegin()->first);
  301|       |
  302|  2.08k|        for (auto& iter : this->map)
  ------------------
  |  Branch (302:25): [True: 20.8k, False: 2.08k]
  ------------------
  303|  20.8k|        {
  304|  20.8k|            iter.second.selection = SelectedValue<Spec>{
  305|  20.8k|                true, iter.second.value,
  306|  20.8k|                check_for_promotion<Spec>(iter.second.value, get_variation(iter.second.config.svariation))};
  307|  20.8k|        }
  308|       |
  309|  2.08k|        return this->map.size();
  310|  2.08k|    }
  311|  2.08k|}
_ZZN8opendnp313StaticDataMapINS_10BinarySpecEE10select_allENS_21StaticBinaryVariationEENKUlT_E_clIS3_EEDaS4_:
  137|  20.8k|        return this->select_all([variation](auto var) { return variation; }); // override default
_ZN8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEE10select_allEv:
  131|  2.83k|    {
  132|  2.83k|        return this->select_all([](auto var) { return var; }); // use the default
  133|  2.83k|    }
_ZN8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEE10select_allIZNS2_10select_allEvEUlT_E_EEmS4_:
  293|  2.83k|{
  294|  2.83k|    if (map.empty())
  ------------------
  |  Branch (294:9): [True: 0, False: 2.83k]
  ------------------
  295|      0|    {
  296|      0|        return 0;
  297|      0|    }
  298|  2.83k|    else
  299|  2.83k|    {
  300|  2.83k|        this->selected = Range::From(map.begin()->first, map.rbegin()->first);
  301|       |
  302|  2.83k|        for (auto& iter : this->map)
  ------------------
  |  Branch (302:25): [True: 28.3k, False: 2.83k]
  ------------------
  303|  28.3k|        {
  304|  28.3k|            iter.second.selection = SelectedValue<Spec>{
  305|  28.3k|                true, iter.second.value,
  306|  28.3k|                check_for_promotion<Spec>(iter.second.value, get_variation(iter.second.config.svariation))};
  307|  28.3k|        }
  308|       |
  309|  2.83k|        return this->map.size();
  310|  2.83k|    }
  311|  2.83k|}
_ZN8opendnp319check_for_promotionINS_19DoubleBitBinarySpecEEENT_18static_variation_tERKNS2_6meas_tES3_:
   42|  46.8k|{
   43|  46.8k|    return variation;
   44|  46.8k|}
_ZZN8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEE10select_allEvENKUlT_E_clINS_27StaticDoubleBinaryVariationEEEDaS3_:
  132|  28.3k|        return this->select_all([](auto var) { return var; }); // use the default
_ZN8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEE10select_allENS_27StaticDoubleBinaryVariationE:
  136|    974|    {
  137|    974|        return this->select_all([variation](auto var) { return variation; }); // override default
  138|    974|    }
_ZN8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEE10select_allIZNS2_10select_allENS_27StaticDoubleBinaryVariationEEUlT_E_EEmS5_:
  293|    974|{
  294|    974|    if (map.empty())
  ------------------
  |  Branch (294:9): [True: 0, False: 974]
  ------------------
  295|      0|    {
  296|      0|        return 0;
  297|      0|    }
  298|    974|    else
  299|    974|    {
  300|    974|        this->selected = Range::From(map.begin()->first, map.rbegin()->first);
  301|       |
  302|    974|        for (auto& iter : this->map)
  ------------------
  |  Branch (302:25): [True: 9.74k, False: 974]
  ------------------
  303|  9.74k|        {
  304|  9.74k|            iter.second.selection = SelectedValue<Spec>{
  305|  9.74k|                true, iter.second.value,
  306|  9.74k|                check_for_promotion<Spec>(iter.second.value, get_variation(iter.second.config.svariation))};
  307|  9.74k|        }
  308|       |
  309|    974|        return this->map.size();
  310|    974|    }
  311|    974|}
_ZZN8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEE10select_allENS_27StaticDoubleBinaryVariationEENKUlT_E_clIS3_EEDaS4_:
  137|  9.74k|        return this->select_all([variation](auto var) { return variation; }); // override default
_ZN8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEE10select_allEv:
  131|  2.89k|    {
  132|  2.89k|        return this->select_all([](auto var) { return var; }); // use the default
  133|  2.89k|    }
_ZN8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEE10select_allIZNS2_10select_allEvEUlT_E_EEmS4_:
  293|  2.89k|{
  294|  2.89k|    if (map.empty())
  ------------------
  |  Branch (294:9): [True: 0, False: 2.89k]
  ------------------
  295|      0|    {
  296|      0|        return 0;
  297|      0|    }
  298|  2.89k|    else
  299|  2.89k|    {
  300|  2.89k|        this->selected = Range::From(map.begin()->first, map.rbegin()->first);
  301|       |
  302|  2.89k|        for (auto& iter : this->map)
  ------------------
  |  Branch (302:25): [True: 28.9k, False: 2.89k]
  ------------------
  303|  28.9k|        {
  304|  28.9k|            iter.second.selection = SelectedValue<Spec>{
  305|  28.9k|                true, iter.second.value,
  306|  28.9k|                check_for_promotion<Spec>(iter.second.value, get_variation(iter.second.config.svariation))};
  307|  28.9k|        }
  308|       |
  309|  2.89k|        return this->map.size();
  310|  2.89k|    }
  311|  2.89k|}
_ZN8opendnp319check_for_promotionINS_22BinaryOutputStatusSpecEEENT_18static_variation_tERKNS2_6meas_tES3_:
   42|  52.0k|{
   43|  52.0k|    return variation;
   44|  52.0k|}
_ZZN8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEE10select_allEvENKUlT_E_clINS_33StaticBinaryOutputStatusVariationEEEDaS3_:
  132|  28.9k|        return this->select_all([](auto var) { return var; }); // use the default
_ZN8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEE10select_allENS_33StaticBinaryOutputStatusVariationE:
  136|  1.27k|    {
  137|  1.27k|        return this->select_all([variation](auto var) { return variation; }); // override default
  138|  1.27k|    }
_ZN8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEE10select_allIZNS2_10select_allENS_33StaticBinaryOutputStatusVariationEEUlT_E_EEmS5_:
  293|  1.27k|{
  294|  1.27k|    if (map.empty())
  ------------------
  |  Branch (294:9): [True: 0, False: 1.27k]
  ------------------
  295|      0|    {
  296|      0|        return 0;
  297|      0|    }
  298|  1.27k|    else
  299|  1.27k|    {
  300|  1.27k|        this->selected = Range::From(map.begin()->first, map.rbegin()->first);
  301|       |
  302|  1.27k|        for (auto& iter : this->map)
  ------------------
  |  Branch (302:25): [True: 12.7k, False: 1.27k]
  ------------------
  303|  12.7k|        {
  304|  12.7k|            iter.second.selection = SelectedValue<Spec>{
  305|  12.7k|                true, iter.second.value,
  306|  12.7k|                check_for_promotion<Spec>(iter.second.value, get_variation(iter.second.config.svariation))};
  307|  12.7k|        }
  308|       |
  309|  1.27k|        return this->map.size();
  310|  1.27k|    }
  311|  1.27k|}
_ZZN8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEE10select_allENS_33StaticBinaryOutputStatusVariationEENKUlT_E_clIS3_EEDaS4_:
  137|  12.7k|        return this->select_all([variation](auto var) { return variation; }); // override default
_ZN8opendnp313StaticDataMapINS_11CounterSpecEE10select_allEv:
  131|  3.06k|    {
  132|  3.06k|        return this->select_all([](auto var) { return var; }); // use the default
  133|  3.06k|    }
_ZN8opendnp313StaticDataMapINS_11CounterSpecEE10select_allIZNS2_10select_allEvEUlT_E_EEmS4_:
  293|  3.06k|{
  294|  3.06k|    if (map.empty())
  ------------------
  |  Branch (294:9): [True: 0, False: 3.06k]
  ------------------
  295|      0|    {
  296|      0|        return 0;
  297|      0|    }
  298|  3.06k|    else
  299|  3.06k|    {
  300|  3.06k|        this->selected = Range::From(map.begin()->first, map.rbegin()->first);
  301|       |
  302|  3.06k|        for (auto& iter : this->map)
  ------------------
  |  Branch (302:25): [True: 30.6k, False: 3.06k]
  ------------------
  303|  30.6k|        {
  304|  30.6k|            iter.second.selection = SelectedValue<Spec>{
  305|  30.6k|                true, iter.second.value,
  306|  30.6k|                check_for_promotion<Spec>(iter.second.value, get_variation(iter.second.config.svariation))};
  307|  30.6k|        }
  308|       |
  309|  3.06k|        return this->map.size();
  310|  3.06k|    }
  311|  3.06k|}
_ZN8opendnp319check_for_promotionINS_11CounterSpecEEENT_18static_variation_tERKNS2_6meas_tES3_:
   42|  98.3k|{
   43|  98.3k|    return variation;
   44|  98.3k|}
_ZZN8opendnp313StaticDataMapINS_11CounterSpecEE10select_allEvENKUlT_E_clINS_22StaticCounterVariationEEEDaS3_:
  132|  30.6k|        return this->select_all([](auto var) { return var; }); // use the default
_ZN8opendnp313StaticDataMapINS_11CounterSpecEE10select_allENS_22StaticCounterVariationE:
  136|  4.51k|    {
  137|  4.51k|        return this->select_all([variation](auto var) { return variation; }); // override default
  138|  4.51k|    }
_ZN8opendnp313StaticDataMapINS_11CounterSpecEE10select_allIZNS2_10select_allENS_22StaticCounterVariationEEUlT_E_EEmS5_:
  293|  4.51k|{
  294|  4.51k|    if (map.empty())
  ------------------
  |  Branch (294:9): [True: 0, False: 4.51k]
  ------------------
  295|      0|    {
  296|      0|        return 0;
  297|      0|    }
  298|  4.51k|    else
  299|  4.51k|    {
  300|  4.51k|        this->selected = Range::From(map.begin()->first, map.rbegin()->first);
  301|       |
  302|  4.51k|        for (auto& iter : this->map)
  ------------------
  |  Branch (302:25): [True: 45.1k, False: 4.51k]
  ------------------
  303|  45.1k|        {
  304|  45.1k|            iter.second.selection = SelectedValue<Spec>{
  305|  45.1k|                true, iter.second.value,
  306|  45.1k|                check_for_promotion<Spec>(iter.second.value, get_variation(iter.second.config.svariation))};
  307|  45.1k|        }
  308|       |
  309|  4.51k|        return this->map.size();
  310|  4.51k|    }
  311|  4.51k|}
_ZZN8opendnp313StaticDataMapINS_11CounterSpecEE10select_allENS_22StaticCounterVariationEENKUlT_E_clIS3_EEDaS4_:
  137|  45.1k|        return this->select_all([variation](auto var) { return variation; }); // override default
_ZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE10select_allEv:
  131|  2.59k|    {
  132|  2.59k|        return this->select_all([](auto var) { return var; }); // use the default
  133|  2.59k|    }
_ZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE10select_allIZNS2_10select_allEvEUlT_E_EEmS4_:
  293|  2.59k|{
  294|  2.59k|    if (map.empty())
  ------------------
  |  Branch (294:9): [True: 0, False: 2.59k]
  ------------------
  295|      0|    {
  296|      0|        return 0;
  297|      0|    }
  298|  2.59k|    else
  299|  2.59k|    {
  300|  2.59k|        this->selected = Range::From(map.begin()->first, map.rbegin()->first);
  301|       |
  302|  2.59k|        for (auto& iter : this->map)
  ------------------
  |  Branch (302:25): [True: 25.9k, False: 2.59k]
  ------------------
  303|  25.9k|        {
  304|  25.9k|            iter.second.selection = SelectedValue<Spec>{
  305|  25.9k|                true, iter.second.value,
  306|  25.9k|                check_for_promotion<Spec>(iter.second.value, get_variation(iter.second.config.svariation))};
  307|  25.9k|        }
  308|       |
  309|  2.59k|        return this->map.size();
  310|  2.59k|    }
  311|  2.59k|}
_ZN8opendnp319check_for_promotionINS_17FrozenCounterSpecEEENT_18static_variation_tERKNS2_6meas_tES3_:
   42|   119k|{
   43|   119k|    return variation;
   44|   119k|}
_ZZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE10select_allEvENKUlT_E_clINS_28StaticFrozenCounterVariationEEEDaS3_:
  132|  25.9k|        return this->select_all([](auto var) { return var; }); // use the default
_ZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE10select_allENS_28StaticFrozenCounterVariationE:
  136|  6.33k|    {
  137|  6.33k|        return this->select_all([variation](auto var) { return variation; }); // override default
  138|  6.33k|    }
_ZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE10select_allIZNS2_10select_allENS_28StaticFrozenCounterVariationEEUlT_E_EEmS5_:
  293|  6.33k|{
  294|  6.33k|    if (map.empty())
  ------------------
  |  Branch (294:9): [True: 0, False: 6.33k]
  ------------------
  295|      0|    {
  296|      0|        return 0;
  297|      0|    }
  298|  6.33k|    else
  299|  6.33k|    {
  300|  6.33k|        this->selected = Range::From(map.begin()->first, map.rbegin()->first);
  301|       |
  302|  6.33k|        for (auto& iter : this->map)
  ------------------
  |  Branch (302:25): [True: 63.3k, False: 6.33k]
  ------------------
  303|  63.3k|        {
  304|  63.3k|            iter.second.selection = SelectedValue<Spec>{
  305|  63.3k|                true, iter.second.value,
  306|  63.3k|                check_for_promotion<Spec>(iter.second.value, get_variation(iter.second.config.svariation))};
  307|  63.3k|        }
  308|       |
  309|  6.33k|        return this->map.size();
  310|  6.33k|    }
  311|  6.33k|}
_ZZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE10select_allENS_28StaticFrozenCounterVariationEENKUlT_E_clIS3_EEDaS4_:
  137|  63.3k|        return this->select_all([variation](auto var) { return variation; }); // override default
_ZN8opendnp313StaticDataMapINS_10AnalogSpecEE10select_allEv:
  131|  3.06k|    {
  132|  3.06k|        return this->select_all([](auto var) { return var; }); // use the default
  133|  3.06k|    }
_ZN8opendnp313StaticDataMapINS_10AnalogSpecEE10select_allIZNS2_10select_allEvEUlT_E_EEmS4_:
  293|  3.06k|{
  294|  3.06k|    if (map.empty())
  ------------------
  |  Branch (294:9): [True: 0, False: 3.06k]
  ------------------
  295|      0|    {
  296|      0|        return 0;
  297|      0|    }
  298|  3.06k|    else
  299|  3.06k|    {
  300|  3.06k|        this->selected = Range::From(map.begin()->first, map.rbegin()->first);
  301|       |
  302|  3.06k|        for (auto& iter : this->map)
  ------------------
  |  Branch (302:25): [True: 30.6k, False: 3.06k]
  ------------------
  303|  30.6k|        {
  304|  30.6k|            iter.second.selection = SelectedValue<Spec>{
  305|  30.6k|                true, iter.second.value,
  306|  30.6k|                check_for_promotion<Spec>(iter.second.value, get_variation(iter.second.config.svariation))};
  307|  30.6k|        }
  308|       |
  309|  3.06k|        return this->map.size();
  310|  3.06k|    }
  311|  3.06k|}
_ZN8opendnp319check_for_promotionINS_10AnalogSpecEEENT_18static_variation_tERKNS2_6meas_tES3_:
   42|   117k|{
   43|   117k|    return variation;
   44|   117k|}
_ZZN8opendnp313StaticDataMapINS_10AnalogSpecEE10select_allEvENKUlT_E_clINS_21StaticAnalogVariationEEEDaS3_:
  132|  30.6k|        return this->select_all([](auto var) { return var; }); // use the default
_ZN8opendnp313StaticDataMapINS_10AnalogSpecEE10select_allENS_21StaticAnalogVariationE:
  136|  6.46k|    {
  137|  6.46k|        return this->select_all([variation](auto var) { return variation; }); // override default
  138|  6.46k|    }
_ZN8opendnp313StaticDataMapINS_10AnalogSpecEE10select_allIZNS2_10select_allENS_21StaticAnalogVariationEEUlT_E_EEmS5_:
  293|  6.46k|{
  294|  6.46k|    if (map.empty())
  ------------------
  |  Branch (294:9): [True: 0, False: 6.46k]
  ------------------
  295|      0|    {
  296|      0|        return 0;
  297|      0|    }
  298|  6.46k|    else
  299|  6.46k|    {
  300|  6.46k|        this->selected = Range::From(map.begin()->first, map.rbegin()->first);
  301|       |
  302|  6.46k|        for (auto& iter : this->map)
  ------------------
  |  Branch (302:25): [True: 64.6k, False: 6.46k]
  ------------------
  303|  64.6k|        {
  304|  64.6k|            iter.second.selection = SelectedValue<Spec>{
  305|  64.6k|                true, iter.second.value,
  306|  64.6k|                check_for_promotion<Spec>(iter.second.value, get_variation(iter.second.config.svariation))};
  307|  64.6k|        }
  308|       |
  309|  6.46k|        return this->map.size();
  310|  6.46k|    }
  311|  6.46k|}
_ZZN8opendnp313StaticDataMapINS_10AnalogSpecEE10select_allENS_21StaticAnalogVariationEENKUlT_E_clIS3_EEDaS4_:
  137|  64.6k|        return this->select_all([variation](auto var) { return variation; }); // override default
_ZN8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEE10select_allEv:
  131|  2.89k|    {
  132|  2.89k|        return this->select_all([](auto var) { return var; }); // use the default
  133|  2.89k|    }
_ZN8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEE10select_allIZNS2_10select_allEvEUlT_E_EEmS4_:
  293|  2.89k|{
  294|  2.89k|    if (map.empty())
  ------------------
  |  Branch (294:9): [True: 0, False: 2.89k]
  ------------------
  295|      0|    {
  296|      0|        return 0;
  297|      0|    }
  298|  2.89k|    else
  299|  2.89k|    {
  300|  2.89k|        this->selected = Range::From(map.begin()->first, map.rbegin()->first);
  301|       |
  302|  2.89k|        for (auto& iter : this->map)
  ------------------
  |  Branch (302:25): [True: 28.9k, False: 2.89k]
  ------------------
  303|  28.9k|        {
  304|  28.9k|            iter.second.selection = SelectedValue<Spec>{
  305|  28.9k|                true, iter.second.value,
  306|  28.9k|                check_for_promotion<Spec>(iter.second.value, get_variation(iter.second.config.svariation))};
  307|  28.9k|        }
  308|       |
  309|  2.89k|        return this->map.size();
  310|  2.89k|    }
  311|  2.89k|}
_ZN8opendnp319check_for_promotionINS_22AnalogOutputStatusSpecEEENT_18static_variation_tERKNS2_6meas_tES3_:
   42|  98.2k|{
   43|  98.2k|    return variation;
   44|  98.2k|}
_ZZN8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEE10select_allEvENKUlT_E_clINS_33StaticAnalogOutputStatusVariationEEEDaS3_:
  132|  28.9k|        return this->select_all([](auto var) { return var; }); // use the default
_ZN8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEE10select_allENS_33StaticAnalogOutputStatusVariationE:
  136|  4.78k|    {
  137|  4.78k|        return this->select_all([variation](auto var) { return variation; }); // override default
  138|  4.78k|    }
_ZN8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEE10select_allIZNS2_10select_allENS_33StaticAnalogOutputStatusVariationEEUlT_E_EEmS5_:
  293|  4.78k|{
  294|  4.78k|    if (map.empty())
  ------------------
  |  Branch (294:9): [True: 0, False: 4.78k]
  ------------------
  295|      0|    {
  296|      0|        return 0;
  297|      0|    }
  298|  4.78k|    else
  299|  4.78k|    {
  300|  4.78k|        this->selected = Range::From(map.begin()->first, map.rbegin()->first);
  301|       |
  302|  4.78k|        for (auto& iter : this->map)
  ------------------
  |  Branch (302:25): [True: 47.8k, False: 4.78k]
  ------------------
  303|  47.8k|        {
  304|  47.8k|            iter.second.selection = SelectedValue<Spec>{
  305|  47.8k|                true, iter.second.value,
  306|  47.8k|                check_for_promotion<Spec>(iter.second.value, get_variation(iter.second.config.svariation))};
  307|  47.8k|        }
  308|       |
  309|  4.78k|        return this->map.size();
  310|  4.78k|    }
  311|  4.78k|}
_ZZN8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEE10select_allENS_33StaticAnalogOutputStatusVariationEENKUlT_E_clIS3_EEDaS4_:
  137|  47.8k|        return this->select_all([variation](auto var) { return variation; }); // override default
_ZN8opendnp313StaticDataMapINS_19TimeAndIntervalSpecEE10select_allENS_30StaticTimeAndIntervalVariationE:
  136|    829|    {
  137|    829|        return this->select_all([variation](auto var) { return variation; }); // override default
  138|    829|    }
_ZN8opendnp313StaticDataMapINS_19TimeAndIntervalSpecEE10select_allIZNS2_10select_allENS_30StaticTimeAndIntervalVariationEEUlT_E_EEmS5_:
  293|    829|{
  294|    829|    if (map.empty())
  ------------------
  |  Branch (294:9): [True: 0, False: 829]
  ------------------
  295|      0|    {
  296|      0|        return 0;
  297|      0|    }
  298|    829|    else
  299|    829|    {
  300|    829|        this->selected = Range::From(map.begin()->first, map.rbegin()->first);
  301|       |
  302|    829|        for (auto& iter : this->map)
  ------------------
  |  Branch (302:25): [True: 8.29k, False: 829]
  ------------------
  303|  8.29k|        {
  304|  8.29k|            iter.second.selection = SelectedValue<Spec>{
  305|  8.29k|                true, iter.second.value,
  306|  8.29k|                check_for_promotion<Spec>(iter.second.value, get_variation(iter.second.config.svariation))};
  307|  8.29k|        }
  308|       |
  309|    829|        return this->map.size();
  310|    829|    }
  311|    829|}
_ZZN8opendnp313StaticDataMapINS_19TimeAndIntervalSpecEE10select_allENS_30StaticTimeAndIntervalVariationEENKUlT_E_clIS3_EEDaS4_:
  137|  8.29k|        return this->select_all([variation](auto var) { return variation; }); // override default
_ZN8opendnp313StaticDataMapINS_15OctetStringSpecEE10select_allEv:
  131|  2.83k|    {
  132|  2.83k|        return this->select_all([](auto var) { return var; }); // use the default
  133|  2.83k|    }
_ZN8opendnp313StaticDataMapINS_15OctetStringSpecEE10select_allIZNS2_10select_allEvEUlT_E_EEmS4_:
  293|  2.83k|{
  294|  2.83k|    if (map.empty())
  ------------------
  |  Branch (294:9): [True: 0, False: 2.83k]
  ------------------
  295|      0|    {
  296|      0|        return 0;
  297|      0|    }
  298|  2.83k|    else
  299|  2.83k|    {
  300|  2.83k|        this->selected = Range::From(map.begin()->first, map.rbegin()->first);
  301|       |
  302|  2.83k|        for (auto& iter : this->map)
  ------------------
  |  Branch (302:25): [True: 28.3k, False: 2.83k]
  ------------------
  303|  28.3k|        {
  304|  28.3k|            iter.second.selection = SelectedValue<Spec>{
  305|  28.3k|                true, iter.second.value,
  306|  28.3k|                check_for_promotion<Spec>(iter.second.value, get_variation(iter.second.config.svariation))};
  307|  28.3k|        }
  308|       |
  309|  2.83k|        return this->map.size();
  310|  2.83k|    }
  311|  2.83k|}
_ZN8opendnp319check_for_promotionINS_15OctetStringSpecEEENT_18static_variation_tERKNS2_6meas_tES3_:
   42|  34.6k|{
   43|  34.6k|    return variation;
   44|  34.6k|}
_ZZN8opendnp313StaticDataMapINS_15OctetStringSpecEE10select_allEvENKUlT_E_clINS_26StaticOctetStringVariationEEEDaS3_:
  132|  28.3k|        return this->select_all([](auto var) { return var; }); // use the default
_ZN8opendnp313StaticDataMapINS_10BinarySpecEE6selectENS_5RangeE:
  141|  3.68k|    {
  142|  3.68k|        return this->select(range, [](auto var) { return var; }); // use the default
  143|  3.68k|    }
_ZN8opendnp313StaticDataMapINS_10BinarySpecEE6selectIZNS2_6selectENS_5RangeEEUlT_E_EEmS4_S5_:
  314|  3.68k|{
  315|  3.68k|    if (!range.IsValid())
  ------------------
  |  Branch (315:9): [True: 0, False: 3.68k]
  ------------------
  316|      0|    {
  317|      0|        return 0;
  318|      0|    }
  319|       |
  320|  3.68k|    const auto start = this->map.lower_bound(range.start);
  321|       |
  322|  3.68k|    if (start == this->map.end())
  ------------------
  |  Branch (322:9): [True: 901, False: 2.78k]
  ------------------
  323|    901|    {
  324|    901|        return 0;
  325|    901|    }
  326|       |
  327|  2.78k|    if (!range.Contains(start->first))
  ------------------
  |  Branch (327:9): [True: 0, False: 2.78k]
  ------------------
  328|      0|    {
  329|      0|        return 0;
  330|      0|    }
  331|       |
  332|  2.78k|    uint16_t stop = 0;
  333|  2.78k|    size_t count = 0;
  334|       |
  335|  10.4k|    for (auto iter = start; iter != this->map.end(); ++iter)
  ------------------
  |  Branch (335:29): [True: 9.59k, False: 831]
  ------------------
  336|  9.59k|    {
  337|  9.59k|        if (!range.Contains(iter->first))
  ------------------
  |  Branch (337:13): [True: 1.94k, False: 7.64k]
  ------------------
  338|  1.94k|        {
  339|  1.94k|            break;
  340|  1.94k|        }
  341|       |
  342|  7.64k|        stop = iter->first;
  343|  7.64k|        iter->second.selection = SelectedValue<Spec>{
  344|  7.64k|            true, iter->second.value,
  345|  7.64k|            check_for_promotion<Spec>(iter->second.value, get_variation(iter->second.config.svariation))};
  346|  7.64k|        ++count;
  347|  7.64k|    }
  348|       |
  349|  2.78k|    this->selected = this->selected.Union(Range::From(start->first, stop));
  350|       |
  351|  2.78k|    return count;
  352|  2.78k|}
_ZZN8opendnp313StaticDataMapINS_10BinarySpecEE6selectENS_5RangeEENKUlT_E_clINS_21StaticBinaryVariationEEEDaS4_:
  142|  7.64k|        return this->select(range, [](auto var) { return var; }); // use the default
_ZN8opendnp313StaticDataMapINS_10BinarySpecEE6selectENS_5RangeENS_21StaticBinaryVariationE:
  156|  6.71k|    {
  157|  6.71k|        return this->select(range, [variation](auto var) { return variation; }); // override default
  158|  6.71k|    }
_ZN8opendnp313StaticDataMapINS_10BinarySpecEE6selectIZNS2_6selectENS_5RangeENS_21StaticBinaryVariationEEUlT_E_EEmS4_S6_:
  314|  6.71k|{
  315|  6.71k|    if (!range.IsValid())
  ------------------
  |  Branch (315:9): [True: 0, False: 6.71k]
  ------------------
  316|      0|    {
  317|      0|        return 0;
  318|      0|    }
  319|       |
  320|  6.71k|    const auto start = this->map.lower_bound(range.start);
  321|       |
  322|  6.71k|    if (start == this->map.end())
  ------------------
  |  Branch (322:9): [True: 2.57k, False: 4.14k]
  ------------------
  323|  2.57k|    {
  324|  2.57k|        return 0;
  325|  2.57k|    }
  326|       |
  327|  4.14k|    if (!range.Contains(start->first))
  ------------------
  |  Branch (327:9): [True: 0, False: 4.14k]
  ------------------
  328|      0|    {
  329|      0|        return 0;
  330|      0|    }
  331|       |
  332|  4.14k|    uint16_t stop = 0;
  333|  4.14k|    size_t count = 0;
  334|       |
  335|  12.1k|    for (auto iter = start; iter != this->map.end(); ++iter)
  ------------------
  |  Branch (335:29): [True: 11.4k, False: 625]
  ------------------
  336|  11.4k|    {
  337|  11.4k|        if (!range.Contains(iter->first))
  ------------------
  |  Branch (337:13): [True: 3.51k, False: 7.97k]
  ------------------
  338|  3.51k|        {
  339|  3.51k|            break;
  340|  3.51k|        }
  341|       |
  342|  7.97k|        stop = iter->first;
  343|  7.97k|        iter->second.selection = SelectedValue<Spec>{
  344|  7.97k|            true, iter->second.value,
  345|  7.97k|            check_for_promotion<Spec>(iter->second.value, get_variation(iter->second.config.svariation))};
  346|  7.97k|        ++count;
  347|  7.97k|    }
  348|       |
  349|  4.14k|    this->selected = this->selected.Union(Range::From(start->first, stop));
  350|       |
  351|  4.14k|    return count;
  352|  4.14k|}
_ZZN8opendnp313StaticDataMapINS_10BinarySpecEE6selectENS_5RangeENS_21StaticBinaryVariationEENKUlT_E_clIS4_EEDaS5_:
  157|  7.97k|        return this->select(range, [variation](auto var) { return variation; }); // override default
_ZN8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEE6selectENS_5RangeE:
  141|  3.19k|    {
  142|  3.19k|        return this->select(range, [](auto var) { return var; }); // use the default
  143|  3.19k|    }
_ZN8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEE6selectIZNS2_6selectENS_5RangeEEUlT_E_EEmS4_S5_:
  314|  3.19k|{
  315|  3.19k|    if (!range.IsValid())
  ------------------
  |  Branch (315:9): [True: 0, False: 3.19k]
  ------------------
  316|      0|    {
  317|      0|        return 0;
  318|      0|    }
  319|       |
  320|  3.19k|    const auto start = this->map.lower_bound(range.start);
  321|       |
  322|  3.19k|    if (start == this->map.end())
  ------------------
  |  Branch (322:9): [True: 811, False: 2.38k]
  ------------------
  323|    811|    {
  324|    811|        return 0;
  325|    811|    }
  326|       |
  327|  2.38k|    if (!range.Contains(start->first))
  ------------------
  |  Branch (327:9): [True: 0, False: 2.38k]
  ------------------
  328|      0|    {
  329|      0|        return 0;
  330|      0|    }
  331|       |
  332|  2.38k|    uint16_t stop = 0;
  333|  2.38k|    size_t count = 0;
  334|       |
  335|  6.00k|    for (auto iter = start; iter != this->map.end(); ++iter)
  ------------------
  |  Branch (335:29): [True: 5.67k, False: 331]
  ------------------
  336|  5.67k|    {
  337|  5.67k|        if (!range.Contains(iter->first))
  ------------------
  |  Branch (337:13): [True: 2.05k, False: 3.61k]
  ------------------
  338|  2.05k|        {
  339|  2.05k|            break;
  340|  2.05k|        }
  341|       |
  342|  3.61k|        stop = iter->first;
  343|  3.61k|        iter->second.selection = SelectedValue<Spec>{
  344|  3.61k|            true, iter->second.value,
  345|  3.61k|            check_for_promotion<Spec>(iter->second.value, get_variation(iter->second.config.svariation))};
  346|  3.61k|        ++count;
  347|  3.61k|    }
  348|       |
  349|  2.38k|    this->selected = this->selected.Union(Range::From(start->first, stop));
  350|       |
  351|  2.38k|    return count;
  352|  2.38k|}
_ZZN8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEE6selectENS_5RangeEENKUlT_E_clINS_27StaticDoubleBinaryVariationEEEDaS4_:
  142|  3.61k|        return this->select(range, [](auto var) { return var; }); // use the default
_ZN8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEE6selectENS_5RangeENS_27StaticDoubleBinaryVariationE:
  156|  2.94k|    {
  157|  2.94k|        return this->select(range, [variation](auto var) { return variation; }); // override default
  158|  2.94k|    }
_ZN8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEE6selectIZNS2_6selectENS_5RangeENS_27StaticDoubleBinaryVariationEEUlT_E_EEmS4_S6_:
  314|  2.94k|{
  315|  2.94k|    if (!range.IsValid())
  ------------------
  |  Branch (315:9): [True: 0, False: 2.94k]
  ------------------
  316|      0|    {
  317|      0|        return 0;
  318|      0|    }
  319|       |
  320|  2.94k|    const auto start = this->map.lower_bound(range.start);
  321|       |
  322|  2.94k|    if (start == this->map.end())
  ------------------
  |  Branch (322:9): [True: 847, False: 2.09k]
  ------------------
  323|    847|    {
  324|    847|        return 0;
  325|    847|    }
  326|       |
  327|  2.09k|    if (!range.Contains(start->first))
  ------------------
  |  Branch (327:9): [True: 0, False: 2.09k]
  ------------------
  328|      0|    {
  329|      0|        return 0;
  330|      0|    }
  331|       |
  332|  2.09k|    uint16_t stop = 0;
  333|  2.09k|    size_t count = 0;
  334|       |
  335|  7.27k|    for (auto iter = start; iter != this->map.end(); ++iter)
  ------------------
  |  Branch (335:29): [True: 6.71k, False: 558]
  ------------------
  336|  6.71k|    {
  337|  6.71k|        if (!range.Contains(iter->first))
  ------------------
  |  Branch (337:13): [True: 1.53k, False: 5.17k]
  ------------------
  338|  1.53k|        {
  339|  1.53k|            break;
  340|  1.53k|        }
  341|       |
  342|  5.17k|        stop = iter->first;
  343|  5.17k|        iter->second.selection = SelectedValue<Spec>{
  344|  5.17k|            true, iter->second.value,
  345|  5.17k|            check_for_promotion<Spec>(iter->second.value, get_variation(iter->second.config.svariation))};
  346|  5.17k|        ++count;
  347|  5.17k|    }
  348|       |
  349|  2.09k|    this->selected = this->selected.Union(Range::From(start->first, stop));
  350|       |
  351|  2.09k|    return count;
  352|  2.09k|}
_ZZN8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEE6selectENS_5RangeENS_27StaticDoubleBinaryVariationEENKUlT_E_clIS4_EEDaS5_:
  157|  5.17k|        return this->select(range, [variation](auto var) { return variation; }); // override default
_ZN8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEE6selectENS_5RangeE:
  141|  3.68k|    {
  142|  3.68k|        return this->select(range, [](auto var) { return var; }); // use the default
  143|  3.68k|    }
_ZN8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEE6selectIZNS2_6selectENS_5RangeEEUlT_E_EEmS4_S5_:
  314|  3.68k|{
  315|  3.68k|    if (!range.IsValid())
  ------------------
  |  Branch (315:9): [True: 0, False: 3.68k]
  ------------------
  316|      0|    {
  317|      0|        return 0;
  318|      0|    }
  319|       |
  320|  3.68k|    const auto start = this->map.lower_bound(range.start);
  321|       |
  322|  3.68k|    if (start == this->map.end())
  ------------------
  |  Branch (322:9): [True: 1.03k, False: 2.64k]
  ------------------
  323|  1.03k|    {
  324|  1.03k|        return 0;
  325|  1.03k|    }
  326|       |
  327|  2.64k|    if (!range.Contains(start->first))
  ------------------
  |  Branch (327:9): [True: 0, False: 2.64k]
  ------------------
  328|      0|    {
  329|      0|        return 0;
  330|      0|    }
  331|       |
  332|  2.64k|    uint16_t stop = 0;
  333|  2.64k|    size_t count = 0;
  334|       |
  335|  7.88k|    for (auto iter = start; iter != this->map.end(); ++iter)
  ------------------
  |  Branch (335:29): [True: 7.46k, False: 420]
  ------------------
  336|  7.46k|    {
  337|  7.46k|        if (!range.Contains(iter->first))
  ------------------
  |  Branch (337:13): [True: 2.22k, False: 5.23k]
  ------------------
  338|  2.22k|        {
  339|  2.22k|            break;
  340|  2.22k|        }
  341|       |
  342|  5.23k|        stop = iter->first;
  343|  5.23k|        iter->second.selection = SelectedValue<Spec>{
  344|  5.23k|            true, iter->second.value,
  345|  5.23k|            check_for_promotion<Spec>(iter->second.value, get_variation(iter->second.config.svariation))};
  346|  5.23k|        ++count;
  347|  5.23k|    }
  348|       |
  349|  2.64k|    this->selected = this->selected.Union(Range::From(start->first, stop));
  350|       |
  351|  2.64k|    return count;
  352|  2.64k|}
_ZZN8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEE6selectENS_5RangeEENKUlT_E_clINS_33StaticBinaryOutputStatusVariationEEEDaS4_:
  142|  5.23k|        return this->select(range, [](auto var) { return var; }); // use the default
_ZN8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEE6selectENS_5RangeENS_33StaticBinaryOutputStatusVariationE:
  156|  3.39k|    {
  157|  3.39k|        return this->select(range, [variation](auto var) { return variation; }); // override default
  158|  3.39k|    }
_ZN8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEE6selectIZNS2_6selectENS_5RangeENS_33StaticBinaryOutputStatusVariationEEUlT_E_EEmS4_S6_:
  314|  3.39k|{
  315|  3.39k|    if (!range.IsValid())
  ------------------
  |  Branch (315:9): [True: 0, False: 3.39k]
  ------------------
  316|      0|    {
  317|      0|        return 0;
  318|      0|    }
  319|       |
  320|  3.39k|    const auto start = this->map.lower_bound(range.start);
  321|       |
  322|  3.39k|    if (start == this->map.end())
  ------------------
  |  Branch (322:9): [True: 927, False: 2.46k]
  ------------------
  323|    927|    {
  324|    927|        return 0;
  325|    927|    }
  326|       |
  327|  2.46k|    if (!range.Contains(start->first))
  ------------------
  |  Branch (327:9): [True: 0, False: 2.46k]
  ------------------
  328|      0|    {
  329|      0|        return 0;
  330|      0|    }
  331|       |
  332|  2.46k|    uint16_t stop = 0;
  333|  2.46k|    size_t count = 0;
  334|       |
  335|  7.63k|    for (auto iter = start; iter != this->map.end(); ++iter)
  ------------------
  |  Branch (335:29): [True: 7.09k, False: 539]
  ------------------
  336|  7.09k|    {
  337|  7.09k|        if (!range.Contains(iter->first))
  ------------------
  |  Branch (337:13): [True: 1.92k, False: 5.17k]
  ------------------
  338|  1.92k|        {
  339|  1.92k|            break;
  340|  1.92k|        }
  341|       |
  342|  5.17k|        stop = iter->first;
  343|  5.17k|        iter->second.selection = SelectedValue<Spec>{
  344|  5.17k|            true, iter->second.value,
  345|  5.17k|            check_for_promotion<Spec>(iter->second.value, get_variation(iter->second.config.svariation))};
  346|  5.17k|        ++count;
  347|  5.17k|    }
  348|       |
  349|  2.46k|    this->selected = this->selected.Union(Range::From(start->first, stop));
  350|       |
  351|  2.46k|    return count;
  352|  2.46k|}
_ZZN8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEE6selectENS_5RangeENS_33StaticBinaryOutputStatusVariationEENKUlT_E_clIS4_EEDaS5_:
  157|  5.17k|        return this->select(range, [variation](auto var) { return variation; }); // override default
_ZN8opendnp313StaticDataMapINS_11CounterSpecEE6selectENS_5RangeENS_22StaticCounterVariationE:
  156|  7.05k|    {
  157|  7.05k|        return this->select(range, [variation](auto var) { return variation; }); // override default
  158|  7.05k|    }
_ZN8opendnp313StaticDataMapINS_11CounterSpecEE6selectIZNS2_6selectENS_5RangeENS_22StaticCounterVariationEEUlT_E_EEmS4_S6_:
  314|  7.05k|{
  315|  7.05k|    if (!range.IsValid())
  ------------------
  |  Branch (315:9): [True: 0, False: 7.05k]
  ------------------
  316|      0|    {
  317|      0|        return 0;
  318|      0|    }
  319|       |
  320|  7.05k|    const auto start = this->map.lower_bound(range.start);
  321|       |
  322|  7.05k|    if (start == this->map.end())
  ------------------
  |  Branch (322:9): [True: 1.96k, False: 5.09k]
  ------------------
  323|  1.96k|    {
  324|  1.96k|        return 0;
  325|  1.96k|    }
  326|       |
  327|  5.09k|    if (!range.Contains(start->first))
  ------------------
  |  Branch (327:9): [True: 0, False: 5.09k]
  ------------------
  328|      0|    {
  329|      0|        return 0;
  330|      0|    }
  331|       |
  332|  5.09k|    uint16_t stop = 0;
  333|  5.09k|    size_t count = 0;
  334|       |
  335|  21.0k|    for (auto iter = start; iter != this->map.end(); ++iter)
  ------------------
  |  Branch (335:29): [True: 19.6k, False: 1.40k]
  ------------------
  336|  19.6k|    {
  337|  19.6k|        if (!range.Contains(iter->first))
  ------------------
  |  Branch (337:13): [True: 3.69k, False: 15.9k]
  ------------------
  338|  3.69k|        {
  339|  3.69k|            break;
  340|  3.69k|        }
  341|       |
  342|  15.9k|        stop = iter->first;
  343|  15.9k|        iter->second.selection = SelectedValue<Spec>{
  344|  15.9k|            true, iter->second.value,
  345|  15.9k|            check_for_promotion<Spec>(iter->second.value, get_variation(iter->second.config.svariation))};
  346|  15.9k|        ++count;
  347|  15.9k|    }
  348|       |
  349|  5.09k|    this->selected = this->selected.Union(Range::From(start->first, stop));
  350|       |
  351|  5.09k|    return count;
  352|  5.09k|}
_ZZN8opendnp313StaticDataMapINS_11CounterSpecEE6selectENS_5RangeENS_22StaticCounterVariationEENKUlT_E_clIS4_EEDaS5_:
  157|  15.9k|        return this->select(range, [variation](auto var) { return variation; }); // override default
_ZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE6selectENS_5RangeE:
  141|  2.91k|    {
  142|  2.91k|        return this->select(range, [](auto var) { return var; }); // use the default
  143|  2.91k|    }
_ZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE6selectIZNS2_6selectENS_5RangeEEUlT_E_EEmS4_S5_:
  314|  2.91k|{
  315|  2.91k|    if (!range.IsValid())
  ------------------
  |  Branch (315:9): [True: 0, False: 2.91k]
  ------------------
  316|      0|    {
  317|      0|        return 0;
  318|      0|    }
  319|       |
  320|  2.91k|    const auto start = this->map.lower_bound(range.start);
  321|       |
  322|  2.91k|    if (start == this->map.end())
  ------------------
  |  Branch (322:9): [True: 607, False: 2.30k]
  ------------------
  323|    607|    {
  324|    607|        return 0;
  325|    607|    }
  326|       |
  327|  2.30k|    if (!range.Contains(start->first))
  ------------------
  |  Branch (327:9): [True: 0, False: 2.30k]
  ------------------
  328|      0|    {
  329|      0|        return 0;
  330|      0|    }
  331|       |
  332|  2.30k|    uint16_t stop = 0;
  333|  2.30k|    size_t count = 0;
  334|       |
  335|  9.52k|    for (auto iter = start; iter != this->map.end(); ++iter)
  ------------------
  |  Branch (335:29): [True: 8.82k, False: 706]
  ------------------
  336|  8.82k|    {
  337|  8.82k|        if (!range.Contains(iter->first))
  ------------------
  |  Branch (337:13): [True: 1.59k, False: 7.22k]
  ------------------
  338|  1.59k|        {
  339|  1.59k|            break;
  340|  1.59k|        }
  341|       |
  342|  7.22k|        stop = iter->first;
  343|  7.22k|        iter->second.selection = SelectedValue<Spec>{
  344|  7.22k|            true, iter->second.value,
  345|  7.22k|            check_for_promotion<Spec>(iter->second.value, get_variation(iter->second.config.svariation))};
  346|  7.22k|        ++count;
  347|  7.22k|    }
  348|       |
  349|  2.30k|    this->selected = this->selected.Union(Range::From(start->first, stop));
  350|       |
  351|  2.30k|    return count;
  352|  2.30k|}
_ZZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE6selectENS_5RangeEENKUlT_E_clINS_28StaticFrozenCounterVariationEEEDaS4_:
  142|  7.22k|        return this->select(range, [](auto var) { return var; }); // use the default
_ZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE6selectENS_5RangeENS_28StaticFrozenCounterVariationE:
  156|  9.59k|    {
  157|  9.59k|        return this->select(range, [variation](auto var) { return variation; }); // override default
  158|  9.59k|    }
_ZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE6selectIZNS2_6selectENS_5RangeENS_28StaticFrozenCounterVariationEEUlT_E_EEmS4_S6_:
  314|  9.59k|{
  315|  9.59k|    if (!range.IsValid())
  ------------------
  |  Branch (315:9): [True: 0, False: 9.59k]
  ------------------
  316|      0|    {
  317|      0|        return 0;
  318|      0|    }
  319|       |
  320|  9.59k|    const auto start = this->map.lower_bound(range.start);
  321|       |
  322|  9.59k|    if (start == this->map.end())
  ------------------
  |  Branch (322:9): [True: 2.46k, False: 7.12k]
  ------------------
  323|  2.46k|    {
  324|  2.46k|        return 0;
  325|  2.46k|    }
  326|       |
  327|  7.12k|    if (!range.Contains(start->first))
  ------------------
  |  Branch (327:9): [True: 0, False: 7.12k]
  ------------------
  328|      0|    {
  329|      0|        return 0;
  330|      0|    }
  331|       |
  332|  7.12k|    uint16_t stop = 0;
  333|  7.12k|    size_t count = 0;
  334|       |
  335|  30.5k|    for (auto iter = start; iter != this->map.end(); ++iter)
  ------------------
  |  Branch (335:29): [True: 28.5k, False: 2.07k]
  ------------------
  336|  28.5k|    {
  337|  28.5k|        if (!range.Contains(iter->first))
  ------------------
  |  Branch (337:13): [True: 5.05k, False: 23.4k]
  ------------------
  338|  5.05k|        {
  339|  5.05k|            break;
  340|  5.05k|        }
  341|       |
  342|  23.4k|        stop = iter->first;
  343|  23.4k|        iter->second.selection = SelectedValue<Spec>{
  344|  23.4k|            true, iter->second.value,
  345|  23.4k|            check_for_promotion<Spec>(iter->second.value, get_variation(iter->second.config.svariation))};
  346|  23.4k|        ++count;
  347|  23.4k|    }
  348|       |
  349|  7.12k|    this->selected = this->selected.Union(Range::From(start->first, stop));
  350|       |
  351|  7.12k|    return count;
  352|  7.12k|}
_ZZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE6selectENS_5RangeENS_28StaticFrozenCounterVariationEENKUlT_E_clIS4_EEDaS5_:
  157|  23.4k|        return this->select(range, [variation](auto var) { return variation; }); // override default
_ZN8opendnp313StaticDataMapINS_10AnalogSpecEE6selectENS_5RangeE:
  141|  2.99k|    {
  142|  2.99k|        return this->select(range, [](auto var) { return var; }); // use the default
  143|  2.99k|    }
_ZN8opendnp313StaticDataMapINS_10AnalogSpecEE6selectIZNS2_6selectENS_5RangeEEUlT_E_EEmS4_S5_:
  314|  2.99k|{
  315|  2.99k|    if (!range.IsValid())
  ------------------
  |  Branch (315:9): [True: 0, False: 2.99k]
  ------------------
  316|      0|    {
  317|      0|        return 0;
  318|      0|    }
  319|       |
  320|  2.99k|    const auto start = this->map.lower_bound(range.start);
  321|       |
  322|  2.99k|    if (start == this->map.end())
  ------------------
  |  Branch (322:9): [True: 773, False: 2.21k]
  ------------------
  323|    773|    {
  324|    773|        return 0;
  325|    773|    }
  326|       |
  327|  2.21k|    if (!range.Contains(start->first))
  ------------------
  |  Branch (327:9): [True: 0, False: 2.21k]
  ------------------
  328|      0|    {
  329|      0|        return 0;
  330|      0|    }
  331|       |
  332|  2.21k|    uint16_t stop = 0;
  333|  2.21k|    size_t count = 0;
  334|       |
  335|  7.08k|    for (auto iter = start; iter != this->map.end(); ++iter)
  ------------------
  |  Branch (335:29): [True: 6.66k, False: 421]
  ------------------
  336|  6.66k|    {
  337|  6.66k|        if (!range.Contains(iter->first))
  ------------------
  |  Branch (337:13): [True: 1.79k, False: 4.87k]
  ------------------
  338|  1.79k|        {
  339|  1.79k|            break;
  340|  1.79k|        }
  341|       |
  342|  4.87k|        stop = iter->first;
  343|  4.87k|        iter->second.selection = SelectedValue<Spec>{
  344|  4.87k|            true, iter->second.value,
  345|  4.87k|            check_for_promotion<Spec>(iter->second.value, get_variation(iter->second.config.svariation))};
  346|  4.87k|        ++count;
  347|  4.87k|    }
  348|       |
  349|  2.21k|    this->selected = this->selected.Union(Range::From(start->first, stop));
  350|       |
  351|  2.21k|    return count;
  352|  2.21k|}
_ZZN8opendnp313StaticDataMapINS_10AnalogSpecEE6selectENS_5RangeEENKUlT_E_clINS_21StaticAnalogVariationEEEDaS4_:
  142|  4.87k|        return this->select(range, [](auto var) { return var; }); // use the default
_ZN8opendnp313StaticDataMapINS_10AnalogSpecEE6selectENS_5RangeENS_21StaticAnalogVariationE:
  156|  9.27k|    {
  157|  9.27k|        return this->select(range, [variation](auto var) { return variation; }); // override default
  158|  9.27k|    }
_ZN8opendnp313StaticDataMapINS_10AnalogSpecEE6selectIZNS2_6selectENS_5RangeENS_21StaticAnalogVariationEEUlT_E_EEmS4_S6_:
  314|  9.27k|{
  315|  9.27k|    if (!range.IsValid())
  ------------------
  |  Branch (315:9): [True: 0, False: 9.27k]
  ------------------
  316|      0|    {
  317|      0|        return 0;
  318|      0|    }
  319|       |
  320|  9.27k|    const auto start = this->map.lower_bound(range.start);
  321|       |
  322|  9.27k|    if (start == this->map.end())
  ------------------
  |  Branch (322:9): [True: 2.56k, False: 6.71k]
  ------------------
  323|  2.56k|    {
  324|  2.56k|        return 0;
  325|  2.56k|    }
  326|       |
  327|  6.71k|    if (!range.Contains(start->first))
  ------------------
  |  Branch (327:9): [True: 0, False: 6.71k]
  ------------------
  328|      0|    {
  329|      0|        return 0;
  330|      0|    }
  331|       |
  332|  6.71k|    uint16_t stop = 0;
  333|  6.71k|    size_t count = 0;
  334|       |
  335|  24.3k|    for (auto iter = start; iter != this->map.end(); ++iter)
  ------------------
  |  Branch (335:29): [True: 23.0k, False: 1.29k]
  ------------------
  336|  23.0k|    {
  337|  23.0k|        if (!range.Contains(iter->first))
  ------------------
  |  Branch (337:13): [True: 5.41k, False: 17.6k]
  ------------------
  338|  5.41k|        {
  339|  5.41k|            break;
  340|  5.41k|        }
  341|       |
  342|  17.6k|        stop = iter->first;
  343|  17.6k|        iter->second.selection = SelectedValue<Spec>{
  344|  17.6k|            true, iter->second.value,
  345|  17.6k|            check_for_promotion<Spec>(iter->second.value, get_variation(iter->second.config.svariation))};
  346|  17.6k|        ++count;
  347|  17.6k|    }
  348|       |
  349|  6.71k|    this->selected = this->selected.Union(Range::From(start->first, stop));
  350|       |
  351|  6.71k|    return count;
  352|  6.71k|}
_ZZN8opendnp313StaticDataMapINS_10AnalogSpecEE6selectENS_5RangeENS_21StaticAnalogVariationEENKUlT_E_clIS4_EEDaS5_:
  157|  17.6k|        return this->select(range, [variation](auto var) { return variation; }); // override default
_ZN8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEE6selectENS_5RangeE:
  141|  3.12k|    {
  142|  3.12k|        return this->select(range, [](auto var) { return var; }); // use the default
  143|  3.12k|    }
_ZN8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEE6selectIZNS2_6selectENS_5RangeEEUlT_E_EEmS4_S5_:
  314|  3.12k|{
  315|  3.12k|    if (!range.IsValid())
  ------------------
  |  Branch (315:9): [True: 0, False: 3.12k]
  ------------------
  316|      0|    {
  317|      0|        return 0;
  318|      0|    }
  319|       |
  320|  3.12k|    const auto start = this->map.lower_bound(range.start);
  321|       |
  322|  3.12k|    if (start == this->map.end())
  ------------------
  |  Branch (322:9): [True: 810, False: 2.31k]
  ------------------
  323|    810|    {
  324|    810|        return 0;
  325|    810|    }
  326|       |
  327|  2.31k|    if (!range.Contains(start->first))
  ------------------
  |  Branch (327:9): [True: 0, False: 2.31k]
  ------------------
  328|      0|    {
  329|      0|        return 0;
  330|      0|    }
  331|       |
  332|  2.31k|    uint16_t stop = 0;
  333|  2.31k|    size_t count = 0;
  334|       |
  335|  8.96k|    for (auto iter = start; iter != this->map.end(); ++iter)
  ------------------
  |  Branch (335:29): [True: 7.99k, False: 976]
  ------------------
  336|  7.99k|    {
  337|  7.99k|        if (!range.Contains(iter->first))
  ------------------
  |  Branch (337:13): [True: 1.33k, False: 6.65k]
  ------------------
  338|  1.33k|        {
  339|  1.33k|            break;
  340|  1.33k|        }
  341|       |
  342|  6.65k|        stop = iter->first;
  343|  6.65k|        iter->second.selection = SelectedValue<Spec>{
  344|  6.65k|            true, iter->second.value,
  345|  6.65k|            check_for_promotion<Spec>(iter->second.value, get_variation(iter->second.config.svariation))};
  346|  6.65k|        ++count;
  347|  6.65k|    }
  348|       |
  349|  2.31k|    this->selected = this->selected.Union(Range::From(start->first, stop));
  350|       |
  351|  2.31k|    return count;
  352|  2.31k|}
_ZZN8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEE6selectENS_5RangeEENKUlT_E_clINS_33StaticAnalogOutputStatusVariationEEEDaS4_:
  142|  6.65k|        return this->select(range, [](auto var) { return var; }); // use the default
_ZN8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEE6selectENS_5RangeENS_33StaticAnalogOutputStatusVariationE:
  156|  7.82k|    {
  157|  7.82k|        return this->select(range, [variation](auto var) { return variation; }); // override default
  158|  7.82k|    }
_ZN8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEE6selectIZNS2_6selectENS_5RangeENS_33StaticAnalogOutputStatusVariationEEUlT_E_EEmS4_S6_:
  314|  7.82k|{
  315|  7.82k|    if (!range.IsValid())
  ------------------
  |  Branch (315:9): [True: 0, False: 7.82k]
  ------------------
  316|      0|    {
  317|      0|        return 0;
  318|      0|    }
  319|       |
  320|  7.82k|    const auto start = this->map.lower_bound(range.start);
  321|       |
  322|  7.82k|    if (start == this->map.end())
  ------------------
  |  Branch (322:9): [True: 2.37k, False: 5.45k]
  ------------------
  323|  2.37k|    {
  324|  2.37k|        return 0;
  325|  2.37k|    }
  326|       |
  327|  5.45k|    if (!range.Contains(start->first))
  ------------------
  |  Branch (327:9): [True: 0, False: 5.45k]
  ------------------
  328|      0|    {
  329|      0|        return 0;
  330|      0|    }
  331|       |
  332|  5.45k|    uint16_t stop = 0;
  333|  5.45k|    size_t count = 0;
  334|       |
  335|  20.2k|    for (auto iter = start; iter != this->map.end(); ++iter)
  ------------------
  |  Branch (335:29): [True: 19.1k, False: 1.07k]
  ------------------
  336|  19.1k|    {
  337|  19.1k|        if (!range.Contains(iter->first))
  ------------------
  |  Branch (337:13): [True: 4.37k, False: 14.7k]
  ------------------
  338|  4.37k|        {
  339|  4.37k|            break;
  340|  4.37k|        }
  341|       |
  342|  14.7k|        stop = iter->first;
  343|  14.7k|        iter->second.selection = SelectedValue<Spec>{
  344|  14.7k|            true, iter->second.value,
  345|  14.7k|            check_for_promotion<Spec>(iter->second.value, get_variation(iter->second.config.svariation))};
  346|  14.7k|        ++count;
  347|  14.7k|    }
  348|       |
  349|  5.45k|    this->selected = this->selected.Union(Range::From(start->first, stop));
  350|       |
  351|  5.45k|    return count;
  352|  5.45k|}
_ZZN8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEE6selectENS_5RangeENS_33StaticAnalogOutputStatusVariationEENKUlT_E_clIS4_EEDaS5_:
  157|  14.7k|        return this->select(range, [variation](auto var) { return variation; }); // override default
_ZN8opendnp313StaticDataMapINS_19TimeAndIntervalSpecEE6selectENS_5RangeENS_30StaticTimeAndIntervalVariationE:
  156|  2.98k|    {
  157|  2.98k|        return this->select(range, [variation](auto var) { return variation; }); // override default
  158|  2.98k|    }
_ZN8opendnp313StaticDataMapINS_19TimeAndIntervalSpecEE6selectIZNS2_6selectENS_5RangeENS_30StaticTimeAndIntervalVariationEEUlT_E_EEmS4_S6_:
  314|  2.98k|{
  315|  2.98k|    if (!range.IsValid())
  ------------------
  |  Branch (315:9): [True: 0, False: 2.98k]
  ------------------
  316|      0|    {
  317|      0|        return 0;
  318|      0|    }
  319|       |
  320|  2.98k|    const auto start = this->map.lower_bound(range.start);
  321|       |
  322|  2.98k|    if (start == this->map.end())
  ------------------
  |  Branch (322:9): [True: 782, False: 2.20k]
  ------------------
  323|    782|    {
  324|    782|        return 0;
  325|    782|    }
  326|       |
  327|  2.20k|    if (!range.Contains(start->first))
  ------------------
  |  Branch (327:9): [True: 0, False: 2.20k]
  ------------------
  328|      0|    {
  329|      0|        return 0;
  330|      0|    }
  331|       |
  332|  2.20k|    uint16_t stop = 0;
  333|  2.20k|    size_t count = 0;
  334|       |
  335|  8.51k|    for (auto iter = start; iter != this->map.end(); ++iter)
  ------------------
  |  Branch (335:29): [True: 7.80k, False: 713]
  ------------------
  336|  7.80k|    {
  337|  7.80k|        if (!range.Contains(iter->first))
  ------------------
  |  Branch (337:13): [True: 1.49k, False: 6.31k]
  ------------------
  338|  1.49k|        {
  339|  1.49k|            break;
  340|  1.49k|        }
  341|       |
  342|  6.31k|        stop = iter->first;
  343|  6.31k|        iter->second.selection = SelectedValue<Spec>{
  344|  6.31k|            true, iter->second.value,
  345|  6.31k|            check_for_promotion<Spec>(iter->second.value, get_variation(iter->second.config.svariation))};
  346|  6.31k|        ++count;
  347|  6.31k|    }
  348|       |
  349|  2.20k|    this->selected = this->selected.Union(Range::From(start->first, stop));
  350|       |
  351|  2.20k|    return count;
  352|  2.20k|}
_ZZN8opendnp313StaticDataMapINS_19TimeAndIntervalSpecEE6selectENS_5RangeENS_30StaticTimeAndIntervalVariationEENKUlT_E_clIS4_EEDaS5_:
  157|  6.31k|        return this->select(range, [variation](auto var) { return variation; }); // override default
_ZN8opendnp313StaticDataMapINS_15OctetStringSpecEE6selectENS_5RangeENS_26StaticOctetStringVariationE:
  156|  3.58k|    {
  157|  3.58k|        return this->select(range, [variation](auto var) { return variation; }); // override default
  158|  3.58k|    }
_ZN8opendnp313StaticDataMapINS_15OctetStringSpecEE6selectIZNS2_6selectENS_5RangeENS_26StaticOctetStringVariationEEUlT_E_EEmS4_S6_:
  314|  3.58k|{
  315|  3.58k|    if (!range.IsValid())
  ------------------
  |  Branch (315:9): [True: 0, False: 3.58k]
  ------------------
  316|      0|    {
  317|      0|        return 0;
  318|      0|    }
  319|       |
  320|  3.58k|    const auto start = this->map.lower_bound(range.start);
  321|       |
  322|  3.58k|    if (start == this->map.end())
  ------------------
  |  Branch (322:9): [True: 1.02k, False: 2.55k]
  ------------------
  323|  1.02k|    {
  324|  1.02k|        return 0;
  325|  1.02k|    }
  326|       |
  327|  2.55k|    if (!range.Contains(start->first))
  ------------------
  |  Branch (327:9): [True: 0, False: 2.55k]
  ------------------
  328|      0|    {
  329|      0|        return 0;
  330|      0|    }
  331|       |
  332|  2.55k|    uint16_t stop = 0;
  333|  2.55k|    size_t count = 0;
  334|       |
  335|  8.87k|    for (auto iter = start; iter != this->map.end(); ++iter)
  ------------------
  |  Branch (335:29): [True: 8.39k, False: 485]
  ------------------
  336|  8.39k|    {
  337|  8.39k|        if (!range.Contains(iter->first))
  ------------------
  |  Branch (337:13): [True: 2.07k, False: 6.31k]
  ------------------
  338|  2.07k|        {
  339|  2.07k|            break;
  340|  2.07k|        }
  341|       |
  342|  6.31k|        stop = iter->first;
  343|  6.31k|        iter->second.selection = SelectedValue<Spec>{
  344|  6.31k|            true, iter->second.value,
  345|  6.31k|            check_for_promotion<Spec>(iter->second.value, get_variation(iter->second.config.svariation))};
  346|  6.31k|        ++count;
  347|  6.31k|    }
  348|       |
  349|  2.55k|    this->selected = this->selected.Union(Range::From(start->first, stop));
  350|       |
  351|  2.55k|    return count;
  352|  2.55k|}
_ZZN8opendnp313StaticDataMapINS_15OctetStringSpecEE6selectENS_5RangeENS_26StaticOctetStringVariationEENKUlT_E_clIS4_EEDaS5_:
  157|  6.31k|        return this->select(range, [variation](auto var) { return variation; }); // override default
_ZN8opendnp313StaticDataMapINS_10BinarySpecEE6selectEt:
  151|  2.79k|    {
  152|  2.79k|        return this->select(Range::From(index, index)) == 1;
  153|  2.79k|    }
_ZN8opendnp313StaticDataMapINS_10BinarySpecEE6selectEtNS_21StaticBinaryVariationE:
  146|  5.79k|    {
  147|  5.79k|        return this->select(Range::From(index, index), variation);
  148|  5.79k|    }
_ZN8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEE6selectEt:
  151|  2.83k|    {
  152|  2.83k|        return this->select(Range::From(index, index)) == 1;
  153|  2.83k|    }
_ZN8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEE6selectEtNS_27StaticDoubleBinaryVariationE:
  146|  2.33k|    {
  147|  2.33k|        return this->select(Range::From(index, index), variation);
  148|  2.33k|    }
_ZN8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEE6selectEt:
  151|  3.19k|    {
  152|  3.19k|        return this->select(Range::From(index, index)) == 1;
  153|  3.19k|    }
_ZN8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEE6selectEtNS_33StaticBinaryOutputStatusVariationE:
  146|  2.73k|    {
  147|  2.73k|        return this->select(Range::From(index, index), variation);
  148|  2.73k|    }
_ZN8opendnp313StaticDataMapINS_11CounterSpecEE6selectEt:
  151|  2.08k|    {
  152|  2.08k|        return this->select(Range::From(index, index)) == 1;
  153|  2.08k|    }
_ZN8opendnp313StaticDataMapINS_11CounterSpecEE6selectEtNS_22StaticCounterVariationE:
  146|  4.47k|    {
  147|  4.47k|        return this->select(Range::From(index, index), variation);
  148|  4.47k|    }
_ZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE6selectEt:
  151|  2.07k|    {
  152|  2.07k|        return this->select(Range::From(index, index)) == 1;
  153|  2.07k|    }
_ZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE6selectEtNS_28StaticFrozenCounterVariationE:
  146|  6.04k|    {
  147|  6.04k|        return this->select(Range::From(index, index), variation);
  148|  6.04k|    }
_ZN8opendnp313StaticDataMapINS_10AnalogSpecEE6selectEt:
  151|  2.49k|    {
  152|  2.49k|        return this->select(Range::From(index, index)) == 1;
  153|  2.49k|    }
_ZN8opendnp313StaticDataMapINS_10AnalogSpecEE6selectEtNS_21StaticAnalogVariationE:
  146|  6.58k|    {
  147|  6.58k|        return this->select(Range::From(index, index), variation);
  148|  6.58k|    }
_ZN8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEE6selectEt:
  151|  2.40k|    {
  152|  2.40k|        return this->select(Range::From(index, index)) == 1;
  153|  2.40k|    }
_ZN8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEE6selectEtNS_33StaticAnalogOutputStatusVariationE:
  146|  5.73k|    {
  147|  5.73k|        return this->select(Range::From(index, index), variation);
  148|  5.73k|    }
_ZN8opendnp313StaticDataMapINS_19TimeAndIntervalSpecEE6selectEtNS_30StaticTimeAndIntervalVariationE:
  146|  2.25k|    {
  147|  2.25k|        return this->select(Range::From(index, index), variation);
  148|  2.25k|    }
_ZN8opendnp313StaticDataMapINS_15OctetStringSpecEE6selectEtNS_26StaticOctetStringVariationE:
  146|  2.89k|    {
  147|  2.89k|        return this->select(Range::From(index, index), variation);
  148|  2.89k|    }
_ZN8opendnp313StaticDataMapINS_10BinarySpecEE15clear_selectionEv:
  225|  4.71k|{
  226|       |    // the act of iterating clears the selection
  227|  4.71k|    for (auto iter = this->begin(); iter != this->end(); ++iter)
  ------------------
  |  Branch (227:37): [True: 0, False: 4.71k]
  ------------------
  228|      0|    {
  229|      0|    }
  230|  4.71k|}
_ZN8opendnp313StaticDataMapINS_10BinarySpecEE5beginEv:
  375|  10.3k|{
  376|  10.3k|    if (!this->selected.IsValid())
  ------------------
  |  Branch (376:9): [True: 9.05k, False: 1.27k]
  ------------------
  377|  9.05k|    {
  378|  9.05k|        return iterator(this->map.end(), this->map.end(), this->selected);
  379|  9.05k|    }
  380|       |
  381|  1.27k|    const auto begin = this->map.lower_bound(this->selected.start);
  382|       |
  383|  1.27k|    return iterator(begin, this->map.end(), this->selected);
  384|  10.3k|}
_ZN8opendnp313StaticDataMapINS_10BinarySpecEE8iteratorC2ENSt3__114__map_iteratorINS4_15__tree_iteratorINS4_12__value_typeItNS_14StaticDataCellIS1_EEEEPNS4_11__tree_nodeISA_PvEElEEEESG_RNS_5RangeE:
   64|  20.6k|        explicit iterator(map_iter_t begin, map_iter_t end, Range& range) : iter(begin), end(end), range(range) {}
_ZN8opendnp313StaticDataMapINS_10BinarySpecEE8iteratorneERKS3_:
   77|  8.87k|        {
   78|  8.87k|            return this->iter != rhs.iter;
   79|  8.87k|        }
_ZN8opendnp313StaticDataMapINS_10BinarySpecEE3endEv:
  387|  10.3k|{
  388|  10.3k|    return iterator(this->map.end(), this->map.end(), this->selected);
  389|  10.3k|}
_ZN8opendnp313StaticDataMapINS_10BinarySpecEE8iteratorppEv:
   82|  3.52k|        {
   83|       |            // unselect the point
   84|  3.52k|            this->iter->second.selection.selected = false;
   85|       |
   86|  4.55k|            while (true)
  ------------------
  |  Branch (86:20): [True: 4.55k, Folded]
  ------------------
   87|  4.55k|            {
   88|  4.55k|                iter++;
   89|       |
   90|  4.55k|                if (iter == this->end)
  ------------------
  |  Branch (90:21): [True: 514, False: 4.03k]
  ------------------
   91|    514|                {
   92|    514|                    this->range = Range::Invalid();
   93|    514|                    return;
   94|    514|                }
   95|       |
   96|       |                // shorten the range
   97|  4.03k|                this->range.start = iter->first;
   98|       |
   99|  4.03k|                if (iter->second.selection.selected)
  ------------------
  |  Branch (99:21): [True: 3.00k, False: 1.03k]
  ------------------
  100|  3.00k|                {
  101|  3.00k|                    return;
  102|  3.00k|                }
  103|  4.03k|            }
  104|  3.52k|        }
_ZN8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEE15clear_selectionEv:
  225|  4.71k|{
  226|       |    // the act of iterating clears the selection
  227|  4.71k|    for (auto iter = this->begin(); iter != this->end(); ++iter)
  ------------------
  |  Branch (227:37): [True: 0, False: 4.71k]
  ------------------
  228|      0|    {
  229|      0|    }
  230|  4.71k|}
_ZN8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEE5beginEv:
  375|  10.0k|{
  376|  10.0k|    if (!this->selected.IsValid())
  ------------------
  |  Branch (376:9): [True: 9.05k, False: 994]
  ------------------
  377|  9.05k|    {
  378|  9.05k|        return iterator(this->map.end(), this->map.end(), this->selected);
  379|  9.05k|    }
  380|       |
  381|    994|    const auto begin = this->map.lower_bound(this->selected.start);
  382|       |
  383|    994|    return iterator(begin, this->map.end(), this->selected);
  384|  10.0k|}
_ZN8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEE8iteratorC2ENSt3__114__map_iteratorINS4_15__tree_iteratorINS4_12__value_typeItNS_14StaticDataCellIS1_EEEEPNS4_11__tree_nodeISA_PvEElEEEESG_RNS_5RangeE:
   64|  20.1k|        explicit iterator(map_iter_t begin, map_iter_t end, Range& range) : iter(begin), end(end), range(range) {}
_ZN8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEE8iteratorneERKS3_:
   77|  7.89k|        {
   78|  7.89k|            return this->iter != rhs.iter;
   79|  7.89k|        }
_ZN8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEE3endEv:
  387|  10.0k|{
  388|  10.0k|    return iterator(this->map.end(), this->map.end(), this->selected);
  389|  10.0k|}
_ZN8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEE8iteratorppEv:
   82|  2.68k|        {
   83|       |            // unselect the point
   84|  2.68k|            this->iter->second.selection.selected = false;
   85|       |
   86|  3.50k|            while (true)
  ------------------
  |  Branch (86:20): [True: 3.50k, Folded]
  ------------------
   87|  3.50k|            {
   88|  3.50k|                iter++;
   89|       |
   90|  3.50k|                if (iter == this->end)
  ------------------
  |  Branch (90:21): [True: 394, False: 3.10k]
  ------------------
   91|    394|                {
   92|    394|                    this->range = Range::Invalid();
   93|    394|                    return;
   94|    394|                }
   95|       |
   96|       |                // shorten the range
   97|  3.10k|                this->range.start = iter->first;
   98|       |
   99|  3.10k|                if (iter->second.selection.selected)
  ------------------
  |  Branch (99:21): [True: 2.29k, False: 818]
  ------------------
  100|  2.29k|                {
  101|  2.29k|                    return;
  102|  2.29k|                }
  103|  3.10k|            }
  104|  2.68k|        }
_ZN8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEE15clear_selectionEv:
  225|  4.71k|{
  226|       |    // the act of iterating clears the selection
  227|  4.71k|    for (auto iter = this->begin(); iter != this->end(); ++iter)
  ------------------
  |  Branch (227:37): [True: 0, False: 4.71k]
  ------------------
  228|      0|    {
  229|      0|    }
  230|  4.71k|}
_ZN8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEE5beginEv:
  375|  10.0k|{
  376|  10.0k|    if (!this->selected.IsValid())
  ------------------
  |  Branch (376:9): [True: 9.05k, False: 990]
  ------------------
  377|  9.05k|    {
  378|  9.05k|        return iterator(this->map.end(), this->map.end(), this->selected);
  379|  9.05k|    }
  380|       |
  381|    990|    const auto begin = this->map.lower_bound(this->selected.start);
  382|       |
  383|    990|    return iterator(begin, this->map.end(), this->selected);
  384|  10.0k|}
_ZN8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEE8iteratorC2ENSt3__114__map_iteratorINS4_15__tree_iteratorINS4_12__value_typeItNS_14StaticDataCellIS1_EEEEPNS4_11__tree_nodeISA_PvEElEEEESG_RNS_5RangeE:
   64|  20.0k|        explicit iterator(map_iter_t begin, map_iter_t end, Range& range) : iter(begin), end(end), range(range) {}
_ZN8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEE8iteratorneERKS3_:
   77|  7.91k|        {
   78|  7.91k|            return this->iter != rhs.iter;
   79|  7.91k|        }
_ZN8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEE3endEv:
  387|  10.0k|{
  388|  10.0k|    return iterator(this->map.end(), this->map.end(), this->selected);
  389|  10.0k|}
_ZN8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEE8iteratorppEv:
   82|  2.70k|        {
   83|       |            // unselect the point
   84|  2.70k|            this->iter->second.selection.selected = false;
   85|       |
   86|  3.57k|            while (true)
  ------------------
  |  Branch (86:20): [True: 3.57k, Folded]
  ------------------
   87|  3.57k|            {
   88|  3.57k|                iter++;
   89|       |
   90|  3.57k|                if (iter == this->end)
  ------------------
  |  Branch (90:21): [True: 401, False: 3.17k]
  ------------------
   91|    401|                {
   92|    401|                    this->range = Range::Invalid();
   93|    401|                    return;
   94|    401|                }
   95|       |
   96|       |                // shorten the range
   97|  3.17k|                this->range.start = iter->first;
   98|       |
   99|  3.17k|                if (iter->second.selection.selected)
  ------------------
  |  Branch (99:21): [True: 2.30k, False: 874]
  ------------------
  100|  2.30k|                {
  101|  2.30k|                    return;
  102|  2.30k|                }
  103|  3.17k|            }
  104|  2.70k|        }
_ZN8opendnp313StaticDataMapINS_11CounterSpecEE15clear_selectionEv:
  225|  6.81k|{
  226|       |    // the act of iterating clears the selection
  227|  6.81k|    for (auto iter = this->begin(); iter != this->end(); ++iter)
  ------------------
  |  Branch (227:37): [True: 0, False: 6.81k]
  ------------------
  228|      0|    {
  229|      0|    }
  230|  6.81k|}
_ZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE15clear_selectionEv:
  225|  4.71k|{
  226|       |    // the act of iterating clears the selection
  227|  4.71k|    for (auto iter = this->begin(); iter != this->end(); ++iter)
  ------------------
  |  Branch (227:37): [True: 0, False: 4.71k]
  ------------------
  228|      0|    {
  229|      0|    }
  230|  4.71k|}
_ZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE5beginEv:
  375|  11.0k|{
  376|  11.0k|    if (!this->selected.IsValid())
  ------------------
  |  Branch (376:9): [True: 9.05k, False: 2.02k]
  ------------------
  377|  9.05k|    {
  378|  9.05k|        return iterator(this->map.end(), this->map.end(), this->selected);
  379|  9.05k|    }
  380|       |
  381|  2.02k|    const auto begin = this->map.lower_bound(this->selected.start);
  382|       |
  383|  2.02k|    return iterator(begin, this->map.end(), this->selected);
  384|  11.0k|}
_ZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE8iteratorC2ENSt3__114__map_iteratorINS4_15__tree_iteratorINS4_12__value_typeItNS_14StaticDataCellIS1_EEEEPNS4_11__tree_nodeISA_PvEElEEEESG_RNS_5RangeE:
   64|  22.1k|        explicit iterator(map_iter_t begin, map_iter_t end, Range& range) : iter(begin), end(end), range(range) {}
_ZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE8iteratorneERKS3_:
   77|  10.6k|        {
   78|  10.6k|            return this->iter != rhs.iter;
   79|  10.6k|        }
_ZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE3endEv:
  387|  11.0k|{
  388|  11.0k|    return iterator(this->map.end(), this->map.end(), this->selected);
  389|  11.0k|}
_ZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE8iteratorppEv:
   82|  4.89k|        {
   83|       |            // unselect the point
   84|  4.89k|            this->iter->second.selection.selected = false;
   85|       |
   86|  6.18k|            while (true)
  ------------------
  |  Branch (86:20): [True: 6.18k, Folded]
  ------------------
   87|  6.18k|            {
   88|  6.18k|                iter++;
   89|       |
   90|  6.18k|                if (iter == this->end)
  ------------------
  |  Branch (90:21): [True: 692, False: 5.49k]
  ------------------
   91|    692|                {
   92|    692|                    this->range = Range::Invalid();
   93|    692|                    return;
   94|    692|                }
   95|       |
   96|       |                // shorten the range
   97|  5.49k|                this->range.start = iter->first;
   98|       |
   99|  5.49k|                if (iter->second.selection.selected)
  ------------------
  |  Branch (99:21): [True: 4.20k, False: 1.28k]
  ------------------
  100|  4.20k|                {
  101|  4.20k|                    return;
  102|  4.20k|                }
  103|  5.49k|            }
  104|  4.89k|        }
_ZN8opendnp313StaticDataMapINS_10AnalogSpecEE15clear_selectionEv:
  225|  4.71k|{
  226|       |    // the act of iterating clears the selection
  227|  4.71k|    for (auto iter = this->begin(); iter != this->end(); ++iter)
  ------------------
  |  Branch (227:37): [True: 0, False: 4.71k]
  ------------------
  228|      0|    {
  229|      0|    }
  230|  4.71k|}
_ZN8opendnp313StaticDataMapINS_10AnalogSpecEE5beginEv:
  375|  11.1k|{
  376|  11.1k|    if (!this->selected.IsValid())
  ------------------
  |  Branch (376:9): [True: 9.05k, False: 2.11k]
  ------------------
  377|  9.05k|    {
  378|  9.05k|        return iterator(this->map.end(), this->map.end(), this->selected);
  379|  9.05k|    }
  380|       |
  381|  2.11k|    const auto begin = this->map.lower_bound(this->selected.start);
  382|       |
  383|  2.11k|    return iterator(begin, this->map.end(), this->selected);
  384|  11.1k|}
_ZN8opendnp313StaticDataMapINS_10AnalogSpecEE8iteratorC2ENSt3__114__map_iteratorINS4_15__tree_iteratorINS4_12__value_typeItNS_14StaticDataCellIS1_EEEEPNS4_11__tree_nodeISA_PvEElEEEESG_RNS_5RangeE:
   64|  22.3k|        explicit iterator(map_iter_t begin, map_iter_t end, Range& range) : iter(begin), end(end), range(range) {}
_ZN8opendnp313StaticDataMapINS_10AnalogSpecEE8iteratorneERKS3_:
   77|  10.6k|        {
   78|  10.6k|            return this->iter != rhs.iter;
   79|  10.6k|        }
_ZN8opendnp313StaticDataMapINS_10AnalogSpecEE3endEv:
  387|  11.1k|{
  388|  11.1k|    return iterator(this->map.end(), this->map.end(), this->selected);
  389|  11.1k|}
_ZN8opendnp313StaticDataMapINS_10AnalogSpecEE8iteratorppEv:
   82|  4.85k|        {
   83|       |            // unselect the point
   84|  4.85k|            this->iter->second.selection.selected = false;
   85|       |
   86|  6.23k|            while (true)
  ------------------
  |  Branch (86:20): [True: 6.23k, Folded]
  ------------------
   87|  6.23k|            {
   88|  6.23k|                iter++;
   89|       |
   90|  6.23k|                if (iter == this->end)
  ------------------
  |  Branch (90:21): [True: 697, False: 5.53k]
  ------------------
   91|    697|                {
   92|    697|                    this->range = Range::Invalid();
   93|    697|                    return;
   94|    697|                }
   95|       |
   96|       |                // shorten the range
   97|  5.53k|                this->range.start = iter->first;
   98|       |
   99|  5.53k|                if (iter->second.selection.selected)
  ------------------
  |  Branch (99:21): [True: 4.15k, False: 1.38k]
  ------------------
  100|  4.15k|                {
  101|  4.15k|                    return;
  102|  4.15k|                }
  103|  5.53k|            }
  104|  4.85k|        }
_ZN8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEE15clear_selectionEv:
  225|  4.71k|{
  226|       |    // the act of iterating clears the selection
  227|  4.71k|    for (auto iter = this->begin(); iter != this->end(); ++iter)
  ------------------
  |  Branch (227:37): [True: 0, False: 4.71k]
  ------------------
  228|      0|    {
  229|      0|    }
  230|  4.71k|}
_ZN8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEE5beginEv:
  375|  10.6k|{
  376|  10.6k|    if (!this->selected.IsValid())
  ------------------
  |  Branch (376:9): [True: 9.05k, False: 1.59k]
  ------------------
  377|  9.05k|    {
  378|  9.05k|        return iterator(this->map.end(), this->map.end(), this->selected);
  379|  9.05k|    }
  380|       |
  381|  1.59k|    const auto begin = this->map.lower_bound(this->selected.start);
  382|       |
  383|  1.59k|    return iterator(begin, this->map.end(), this->selected);
  384|  10.6k|}
_ZN8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEE8iteratorC2ENSt3__114__map_iteratorINS4_15__tree_iteratorINS4_12__value_typeItNS_14StaticDataCellIS1_EEEEPNS4_11__tree_nodeISA_PvEElEEEESG_RNS_5RangeE:
   64|  21.2k|        explicit iterator(map_iter_t begin, map_iter_t end, Range& range) : iter(begin), end(end), range(range) {}
_ZN8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEE8iteratorneERKS3_:
   77|  9.68k|        {
   78|  9.68k|            return this->iter != rhs.iter;
   79|  9.68k|        }
_ZN8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEE3endEv:
  387|  10.6k|{
  388|  10.6k|    return iterator(this->map.end(), this->map.end(), this->selected);
  389|  10.6k|}
_ZN8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEE8iteratorppEv:
   82|  4.17k|        {
   83|       |            // unselect the point
   84|  4.17k|            this->iter->second.selection.selected = false;
   85|       |
   86|  5.19k|            while (true)
  ------------------
  |  Branch (86:20): [True: 5.19k, Folded]
  ------------------
   87|  5.19k|            {
   88|  5.19k|                iter++;
   89|       |
   90|  5.19k|                if (iter == this->end)
  ------------------
  |  Branch (90:21): [True: 578, False: 4.61k]
  ------------------
   91|    578|                {
   92|    578|                    this->range = Range::Invalid();
   93|    578|                    return;
   94|    578|                }
   95|       |
   96|       |                // shorten the range
   97|  4.61k|                this->range.start = iter->first;
   98|       |
   99|  4.61k|                if (iter->second.selection.selected)
  ------------------
  |  Branch (99:21): [True: 3.59k, False: 1.02k]
  ------------------
  100|  3.59k|                {
  101|  3.59k|                    return;
  102|  3.59k|                }
  103|  4.61k|            }
  104|  4.17k|        }
_ZN8opendnp313StaticDataMapINS_19TimeAndIntervalSpecEE15clear_selectionEv:
  225|  4.71k|{
  226|       |    // the act of iterating clears the selection
  227|  4.71k|    for (auto iter = this->begin(); iter != this->end(); ++iter)
  ------------------
  |  Branch (227:37): [True: 0, False: 4.71k]
  ------------------
  228|      0|    {
  229|      0|    }
  230|  4.71k|}
_ZN8opendnp313StaticDataMapINS_19TimeAndIntervalSpecEE5beginEv:
  375|  9.71k|{
  376|  9.71k|    if (!this->selected.IsValid())
  ------------------
  |  Branch (376:9): [True: 9.05k, False: 658]
  ------------------
  377|  9.05k|    {
  378|  9.05k|        return iterator(this->map.end(), this->map.end(), this->selected);
  379|  9.05k|    }
  380|       |
  381|    658|    const auto begin = this->map.lower_bound(this->selected.start);
  382|       |
  383|    658|    return iterator(begin, this->map.end(), this->selected);
  384|  9.71k|}
_ZN8opendnp313StaticDataMapINS_19TimeAndIntervalSpecEE8iteratorC2ENSt3__114__map_iteratorINS4_15__tree_iteratorINS4_12__value_typeItNS_14StaticDataCellIS1_EEEEPNS4_11__tree_nodeISA_PvEElEEEESG_RNS_5RangeE:
   64|  19.4k|        explicit iterator(map_iter_t begin, map_iter_t end, Range& range) : iter(begin), end(end), range(range) {}
_ZN8opendnp313StaticDataMapINS_19TimeAndIntervalSpecEE8iteratorneERKS3_:
   77|  7.12k|        {
   78|  7.12k|            return this->iter != rhs.iter;
   79|  7.12k|        }
_ZN8opendnp313StaticDataMapINS_19TimeAndIntervalSpecEE3endEv:
  387|  9.71k|{
  388|  9.71k|    return iterator(this->map.end(), this->map.end(), this->selected);
  389|  9.71k|}
_ZN8opendnp313StaticDataMapINS_19TimeAndIntervalSpecEE8iteratorppEv:
   82|  2.07k|        {
   83|       |            // unselect the point
   84|  2.07k|            this->iter->second.selection.selected = false;
   85|       |
   86|  2.49k|            while (true)
  ------------------
  |  Branch (86:20): [True: 2.49k, Folded]
  ------------------
   87|  2.49k|            {
   88|  2.49k|                iter++;
   89|       |
   90|  2.49k|                if (iter == this->end)
  ------------------
  |  Branch (90:21): [True: 271, False: 2.22k]
  ------------------
   91|    271|                {
   92|    271|                    this->range = Range::Invalid();
   93|    271|                    return;
   94|    271|                }
   95|       |
   96|       |                // shorten the range
   97|  2.22k|                this->range.start = iter->first;
   98|       |
   99|  2.22k|                if (iter->second.selection.selected)
  ------------------
  |  Branch (99:21): [True: 1.80k, False: 424]
  ------------------
  100|  1.80k|                {
  101|  1.80k|                    return;
  102|  1.80k|                }
  103|  2.22k|            }
  104|  2.07k|        }
_ZN8opendnp313StaticDataMapINS_15OctetStringSpecEE15clear_selectionEv:
  225|  4.71k|{
  226|       |    // the act of iterating clears the selection
  227|  4.71k|    for (auto iter = this->begin(); iter != this->end(); ++iter)
  ------------------
  |  Branch (227:37): [True: 0, False: 4.71k]
  ------------------
  228|      0|    {
  229|      0|    }
  230|  4.71k|}
_ZN8opendnp313StaticDataMapINS_15OctetStringSpecEE5beginEv:
  375|  10.1k|{
  376|  10.1k|    if (!this->selected.IsValid())
  ------------------
  |  Branch (376:9): [True: 9.05k, False: 1.07k]
  ------------------
  377|  9.05k|    {
  378|  9.05k|        return iterator(this->map.end(), this->map.end(), this->selected);
  379|  9.05k|    }
  380|       |
  381|  1.07k|    const auto begin = this->map.lower_bound(this->selected.start);
  382|       |
  383|  1.07k|    return iterator(begin, this->map.end(), this->selected);
  384|  10.1k|}
_ZN8opendnp313StaticDataMapINS_15OctetStringSpecEE8iteratorC2ENSt3__114__map_iteratorINS4_15__tree_iteratorINS4_12__value_typeItNS_14StaticDataCellIS1_EEEEPNS4_11__tree_nodeISA_PvEElEEEESG_RNS_5RangeE:
   64|  19.9k|        explicit iterator(map_iter_t begin, map_iter_t end, Range& range) : iter(begin), end(end), range(range) {}
_ZN8opendnp313StaticDataMapINS_15OctetStringSpecEE8iteratorneERKS3_:
   77|  7.34k|        {
   78|  7.34k|            return this->iter != rhs.iter;
   79|  7.34k|        }
_ZN8opendnp313StaticDataMapINS_15OctetStringSpecEE3endEv:
  387|  9.77k|{
  388|  9.77k|    return iterator(this->map.end(), this->map.end(), this->selected);
  389|  9.77k|}
_ZN8opendnp313StaticDataMapINS_15OctetStringSpecEE8iteratorppEv:
   82|  2.26k|        {
   83|       |            // unselect the point
   84|  2.26k|            this->iter->second.selection.selected = false;
   85|       |
   86|  2.73k|            while (true)
  ------------------
  |  Branch (86:20): [True: 2.73k, Folded]
  ------------------
   87|  2.73k|            {
   88|  2.73k|                iter++;
   89|       |
   90|  2.73k|                if (iter == this->end)
  ------------------
  |  Branch (90:21): [True: 302, False: 2.43k]
  ------------------
   91|    302|                {
   92|    302|                    this->range = Range::Invalid();
   93|    302|                    return;
   94|    302|                }
   95|       |
   96|       |                // shorten the range
   97|  2.43k|                this->range.start = iter->first;
   98|       |
   99|  2.43k|                if (iter->second.selection.selected)
  ------------------
  |  Branch (99:21): [True: 1.96k, False: 464]
  ------------------
  100|  1.96k|                {
  101|  1.96k|                    return;
  102|  1.96k|                }
  103|  2.43k|            }
  104|  2.26k|        }
_ZN8opendnp313StaticDataMapINS_10BinarySpecEE8iteratoreqERKS3_:
   73|  4.97k|        {
   74|  4.97k|            return this->iter == rhs.iter;
   75|  4.97k|        }
_ZN8opendnp313StaticDataMapINS_10BinarySpecEE8iteratordeEv:
  107|  4.28k|        {
  108|  4.28k|            return reference(iter->first, iter->second.selection);
  109|  4.28k|        }
_ZN8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEE8iteratoreqERKS3_:
   73|  4.83k|        {
   74|  4.83k|            return this->iter == rhs.iter;
   75|  4.83k|        }
_ZN8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEE8iteratordeEv:
  107|  3.28k|        {
  108|  3.28k|            return reference(iter->first, iter->second.selection);
  109|  3.28k|        }
_ZN8opendnp313StaticDataMapINS_10AnalogSpecEE8iteratoreqERKS3_:
   73|  5.39k|        {
   74|  5.39k|            return this->iter == rhs.iter;
   75|  5.39k|        }
_ZN8opendnp313StaticDataMapINS_10AnalogSpecEE8iteratordeEv:
  107|  6.27k|        {
  108|  6.27k|            return reference(iter->first, iter->second.selection);
  109|  6.27k|        }
_ZN8opendnp313StaticDataMapINS_11CounterSpecEE8iteratoreqERKS3_:
   73|  5.07k|        {
   74|  5.07k|            return this->iter == rhs.iter;
   75|  5.07k|        }
_ZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE8iteratoreqERKS3_:
   73|  5.35k|        {
   74|  5.35k|            return this->iter == rhs.iter;
   75|  5.35k|        }
_ZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE8iteratordeEv:
  107|  6.23k|        {
  108|  6.23k|            return reference(iter->first, iter->second.selection);
  109|  6.23k|        }
_ZN8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEE8iteratoreqERKS3_:
   73|  4.83k|        {
   74|  4.83k|            return this->iter == rhs.iter;
   75|  4.83k|        }
_ZN8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEE8iteratordeEv:
  107|  3.29k|        {
  108|  3.29k|            return reference(iter->first, iter->second.selection);
  109|  3.29k|        }
_ZN8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEE8iteratoreqERKS3_:
   73|  5.13k|        {
   74|  5.13k|            return this->iter == rhs.iter;
   75|  5.13k|        }
_ZN8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEE8iteratordeEv:
  107|  5.18k|        {
  108|  5.18k|            return reference(iter->first, iter->second.selection);
  109|  5.18k|        }
_ZN8opendnp313StaticDataMapINS_19TimeAndIntervalSpecEE8iteratoreqERKS3_:
   73|  4.67k|        {
   74|  4.67k|            return this->iter == rhs.iter;
   75|  4.67k|        }
_ZN8opendnp313StaticDataMapINS_19TimeAndIntervalSpecEE8iteratordeEv:
  107|  2.46k|        {
  108|  2.46k|            return reference(iter->first, iter->second.selection);
  109|  2.46k|        }
_ZN8opendnp313StaticDataMapINS_15OctetStringSpecEE8iteratoreqERKS3_:
   73|  4.70k|        {
   74|  4.70k|            return this->iter == rhs.iter;
   75|  4.70k|        }
_ZN8opendnp313StaticDataMapINS_15OctetStringSpecEE8iteratordeEv:
  107|  3.04k|        {
  108|  3.04k|            return reference(iter->first, iter->second.selection);
  109|  3.04k|        }
_ZN8opendnp313StaticDataMapINS_11CounterSpecEE6updateERKNS_7CounterEtNS_9EventModeERNS_14IEventReceiverE:
  220|  8.42k|{
  221|  8.42k|    return update(this->map.find(index), value, mode, receiver);
  222|  8.42k|}
_ZN8opendnp313StaticDataMapINS_11CounterSpecEE6updateERKNSt3__114__map_iteratorINS3_15__tree_iteratorINS3_12__value_typeItNS_14StaticDataCellIS1_EEEEPNS3_11__tree_nodeIS9_PvEElEEEERKNS_7CounterENS_9EventModeERNS_14IEventReceiverE:
  242|  8.42k|{
  243|  8.42k|    if (iter == this->map.end())
  ------------------
  |  Branch (243:9): [True: 0, False: 8.42k]
  ------------------
  244|      0|    {
  245|      0|        return false;
  246|      0|    }
  247|       |
  248|  8.42k|    if (mode != EventMode::EventOnly)
  ------------------
  |  Branch (248:9): [True: 8.42k, False: 0]
  ------------------
  249|  8.42k|    {
  250|  8.42k|        iter->second.value = new_value;
  251|  8.42k|    }
  252|       |
  253|  8.42k|    if (mode == EventMode::Force || mode == EventMode::EventOnly || Spec::IsEvent(iter->second.event.lastEvent, new_value, iter->second.config))
  ------------------
  |  Branch (253:9): [True: 0, False: 8.42k]
  |  Branch (253:37): [True: 0, False: 8.42k]
  |  Branch (253:69): [True: 0, False: 8.42k]
  ------------------
  254|      0|    {
  255|      0|        iter->second.event.lastEvent = new_value;
  256|      0|        if (mode != EventMode::Suppress)
  ------------------
  |  Branch (256:13): [True: 0, False: 0]
  ------------------
  257|      0|        {
  258|      0|            EventClass ec;
  259|      0|            if (convert_to_event_class(iter->second.config.clazz, ec))
  ------------------
  |  Branch (259:17): [True: 0, False: 0]
  ------------------
  260|      0|            {
  261|      0|                receiver.Update(Event<Spec>(new_value, iter->first, ec, iter->second.config.evariation));
  262|      0|            }
  263|      0|        }
  264|      0|    }
  265|       |
  266|  8.42k|    return true;
  267|  8.42k|}
_ZN8opendnp313StaticDataMapINS_11CounterSpecEE6selectENS_5RangeE:
  141|  3.24k|    {
  142|  3.24k|        return this->select(range, [](auto var) { return var; }); // use the default
  143|  3.24k|    }
_ZN8opendnp313StaticDataMapINS_11CounterSpecEE6selectIZNS2_6selectENS_5RangeEEUlT_E_EEmS4_S5_:
  314|  3.24k|{
  315|  3.24k|    if (!range.IsValid())
  ------------------
  |  Branch (315:9): [True: 0, False: 3.24k]
  ------------------
  316|      0|    {
  317|      0|        return 0;
  318|      0|    }
  319|       |
  320|  3.24k|    const auto start = this->map.lower_bound(range.start);
  321|       |
  322|  3.24k|    if (start == this->map.end())
  ------------------
  |  Branch (322:9): [True: 1.03k, False: 2.21k]
  ------------------
  323|  1.03k|    {
  324|  1.03k|        return 0;
  325|  1.03k|    }
  326|       |
  327|  2.21k|    if (!range.Contains(start->first))
  ------------------
  |  Branch (327:9): [True: 0, False: 2.21k]
  ------------------
  328|      0|    {
  329|      0|        return 0;
  330|      0|    }
  331|       |
  332|  2.21k|    uint16_t stop = 0;
  333|  2.21k|    size_t count = 0;
  334|       |
  335|  8.88k|    for (auto iter = start; iter != this->map.end(); ++iter)
  ------------------
  |  Branch (335:29): [True: 8.17k, False: 708]
  ------------------
  336|  8.17k|    {
  337|  8.17k|        if (!range.Contains(iter->first))
  ------------------
  |  Branch (337:13): [True: 1.50k, False: 6.67k]
  ------------------
  338|  1.50k|        {
  339|  1.50k|            break;
  340|  1.50k|        }
  341|       |
  342|  6.67k|        stop = iter->first;
  343|  6.67k|        iter->second.selection = SelectedValue<Spec>{
  344|  6.67k|            true, iter->second.value,
  345|  6.67k|            check_for_promotion<Spec>(iter->second.value, get_variation(iter->second.config.svariation))};
  346|  6.67k|        ++count;
  347|  6.67k|    }
  348|       |
  349|  2.21k|    this->selected = this->selected.Union(Range::From(start->first, stop));
  350|       |
  351|  2.21k|    return count;
  352|  2.21k|}
_ZZN8opendnp313StaticDataMapINS_11CounterSpecEE6selectENS_5RangeEENKUlT_E_clINS_22StaticCounterVariationEEEDaS4_:
  142|  6.67k|        return this->select(range, [](auto var) { return var; }); // use the default
_ZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE6updateERKNSt3__114__map_iteratorINS3_15__tree_iteratorINS3_12__value_typeItNS_14StaticDataCellIS1_EEEEPNS3_11__tree_nodeIS9_PvEElEEEERKNS_13FrozenCounterENS_9EventModeERNS_14IEventReceiverE:
  242|  15.7k|{
  243|  15.7k|    if (iter == this->map.end())
  ------------------
  |  Branch (243:9): [True: 0, False: 15.7k]
  ------------------
  244|      0|    {
  245|      0|        return false;
  246|      0|    }
  247|       |
  248|  15.7k|    if (mode != EventMode::EventOnly)
  ------------------
  |  Branch (248:9): [True: 15.7k, False: 0]
  ------------------
  249|  15.7k|    {
  250|  15.7k|        iter->second.value = new_value;
  251|  15.7k|    }
  252|       |
  253|  15.7k|    if (mode == EventMode::Force || mode == EventMode::EventOnly || Spec::IsEvent(iter->second.event.lastEvent, new_value, iter->second.config))
  ------------------
  |  Branch (253:9): [True: 0, False: 15.7k]
  |  Branch (253:37): [True: 0, False: 15.7k]
  |  Branch (253:69): [True: 0, False: 15.7k]
  ------------------
  254|      0|    {
  255|      0|        iter->second.event.lastEvent = new_value;
  256|      0|        if (mode != EventMode::Suppress)
  ------------------
  |  Branch (256:13): [True: 0, False: 0]
  ------------------
  257|      0|        {
  258|      0|            EventClass ec;
  259|      0|            if (convert_to_event_class(iter->second.config.clazz, ec))
  ------------------
  |  Branch (259:17): [True: 0, False: 0]
  ------------------
  260|      0|            {
  261|      0|                receiver.Update(Event<Spec>(new_value, iter->first, ec, iter->second.config.evariation));
  262|      0|            }
  263|      0|        }
  264|      0|    }
  265|       |
  266|  15.7k|    return true;
  267|  15.7k|}
_ZN8opendnp313StaticDataMapINS_11CounterSpecEE5beginEv:
  375|  14.7k|{
  376|  14.7k|    if (!this->selected.IsValid())
  ------------------
  |  Branch (376:9): [True: 11.4k, False: 3.22k]
  ------------------
  377|  11.4k|    {
  378|  11.4k|        return iterator(this->map.end(), this->map.end(), this->selected);
  379|  11.4k|    }
  380|       |
  381|  3.22k|    const auto begin = this->map.lower_bound(this->selected.start);
  382|       |
  383|  3.22k|    return iterator(begin, this->map.end(), this->selected);
  384|  14.7k|}
_ZN8opendnp313StaticDataMapINS_11CounterSpecEE8iteratorC2ENSt3__114__map_iteratorINS4_15__tree_iteratorINS4_12__value_typeItNS_14StaticDataCellIS1_EEEEPNS4_11__tree_nodeISA_PvEElEEEESG_RNS_5RangeE:
   64|  29.4k|        explicit iterator(map_iter_t begin, map_iter_t end, Range& range) : iter(begin), end(end), range(range) {}
_ZN8opendnp313StaticDataMapINS_11CounterSpecEE3endEv:
  387|  14.7k|{
  388|  14.7k|    return iterator(this->map.end(), this->map.end(), this->selected);
  389|  14.7k|}
_ZN8opendnp313StaticDataMapINS_11CounterSpecEE8iteratorneERKS3_:
   77|  29.0k|        {
   78|  29.0k|            return this->iter != rhs.iter;
   79|  29.0k|        }
_ZN8opendnp313StaticDataMapINS_11CounterSpecEE8iteratorppEv:
   82|  19.4k|        {
   83|       |            // unselect the point
   84|  19.4k|            this->iter->second.selection.selected = false;
   85|       |
   86|  21.3k|            while (true)
  ------------------
  |  Branch (86:20): [True: 21.3k, Folded]
  ------------------
   87|  21.3k|            {
   88|  21.3k|                iter++;
   89|       |
   90|  21.3k|                if (iter == this->end)
  ------------------
  |  Branch (90:21): [True: 2.28k, False: 19.1k]
  ------------------
   91|  2.28k|                {
   92|  2.28k|                    this->range = Range::Invalid();
   93|  2.28k|                    return;
   94|  2.28k|                }
   95|       |
   96|       |                // shorten the range
   97|  19.1k|                this->range.start = iter->first;
   98|       |
   99|  19.1k|                if (iter->second.selection.selected)
  ------------------
  |  Branch (99:21): [True: 17.1k, False: 1.97k]
  ------------------
  100|  17.1k|                {
  101|  17.1k|                    return;
  102|  17.1k|                }
  103|  19.1k|            }
  104|  19.4k|        }
_ZN8opendnp313StaticDataMapINS_11CounterSpecEE8iteratordeEv:
  107|  20.3k|        {
  108|  20.3k|            return reference(iter->first, iter->second.selection);
  109|  20.3k|        }
_ZN8opendnp313StaticDataMapINS_17FrozenCounterSpecEE6updateERKNS_13FrozenCounterEtNS_9EventModeERNS_14IEventReceiverE:
  220|  15.7k|{
  221|  15.7k|    return update(this->map.find(index), value, mode, receiver);
  222|  15.7k|}
_ZNK8opendnp313StaticDataMapINS_10BinarySpecEE18get_selected_rangeEv:
  126|  1.27k|    {
  127|  1.27k|        return this->selected;
  128|  1.27k|    }
_ZNK8opendnp313StaticDataMapINS_19DoubleBitBinarySpecEE18get_selected_rangeEv:
  126|    994|    {
  127|    994|        return this->selected;
  128|    994|    }
_ZNK8opendnp313StaticDataMapINS_10AnalogSpecEE18get_selected_rangeEv:
  126|  2.11k|    {
  127|  2.11k|        return this->selected;
  128|  2.11k|    }
_ZNK8opendnp313StaticDataMapINS_11CounterSpecEE18get_selected_rangeEv:
  126|  1.46k|    {
  127|  1.46k|        return this->selected;
  128|  1.46k|    }
_ZNK8opendnp313StaticDataMapINS_17FrozenCounterSpecEE18get_selected_rangeEv:
  126|  2.02k|    {
  127|  2.02k|        return this->selected;
  128|  2.02k|    }
_ZNK8opendnp313StaticDataMapINS_22BinaryOutputStatusSpecEE18get_selected_rangeEv:
  126|    990|    {
  127|    990|        return this->selected;
  128|    990|    }
_ZNK8opendnp313StaticDataMapINS_22AnalogOutputStatusSpecEE18get_selected_rangeEv:
  126|  1.59k|    {
  127|  1.59k|        return this->selected;
  128|  1.59k|    }
_ZNK8opendnp313StaticDataMapINS_19TimeAndIntervalSpecEE18get_selected_rangeEv:
  126|    658|    {
  127|    658|        return this->selected;
  128|    658|    }
_ZNK8opendnp313StaticDataMapINS_15OctetStringSpecEE18get_selected_rangeEv:
  126|    359|    {
  127|    359|        return this->selected;
  128|    359|    }

_ZN8opendnp313StaticWriters3getENS_21StaticBinaryVariationE:
  132|    638|{
  133|    638|    switch (variation)
  134|    638|    {
  135|      0|    case (StaticBinaryVariation::Group1Var1):
  ------------------
  |  Branch (135:5): [True: 0, False: 638]
  ------------------
  136|      0|        return &WriteSingleBitfield<BinarySpec, Group1Var1>;
  137|    638|    default:
  ------------------
  |  Branch (137:5): [True: 638, False: 0]
  ------------------
  138|    638|        return &WriteWithSerializer<BinarySpec, Group1Var2>;
  139|    638|    }
  140|    638|}
_ZN8opendnp313StaticWriters3getENS_27StaticDoubleBinaryVariationE:
  143|    497|{
  144|    497|    switch (variation)
  145|    497|    {
  146|    497|    case (StaticDoubleBinaryVariation::Group3Var2):
  ------------------
  |  Branch (146:5): [True: 497, False: 0]
  ------------------
  147|    497|        return &WriteWithSerializer<DoubleBitBinarySpec, Group3Var2>;
  148|      0|    default:
  ------------------
  |  Branch (148:5): [True: 0, False: 497]
  ------------------
  149|      0|        return &WriteWithSerializer<DoubleBitBinarySpec, Group3Var2>;
  150|    497|    }
  151|    497|}
_ZN8opendnp313StaticWriters3getENS_21StaticAnalogVariationE:
  154|  1.05k|{
  155|  1.05k|    switch (variation)
  156|  1.05k|    {
  157|    432|    case (StaticAnalogVariation::Group30Var1):
  ------------------
  |  Branch (157:5): [True: 432, False: 626]
  ------------------
  158|    432|        return &WriteWithSerializer<AnalogSpec, Group30Var1>;
  159|    116|    case (StaticAnalogVariation::Group30Var2):
  ------------------
  |  Branch (159:5): [True: 116, False: 942]
  ------------------
  160|    116|        return &WriteWithSerializer<AnalogSpec, Group30Var2>;
  161|    108|    case (StaticAnalogVariation::Group30Var3):
  ------------------
  |  Branch (161:5): [True: 108, False: 950]
  ------------------
  162|    108|        return &WriteWithSerializer<AnalogSpec, Group30Var3>;
  163|    117|    case (StaticAnalogVariation::Group30Var4):
  ------------------
  |  Branch (163:5): [True: 117, False: 941]
  ------------------
  164|    117|        return &WriteWithSerializer<AnalogSpec, Group30Var4>;
  165|    109|    case (StaticAnalogVariation::Group30Var5):
  ------------------
  |  Branch (165:5): [True: 109, False: 949]
  ------------------
  166|    109|        return &WriteWithSerializer<AnalogSpec, Group30Var5>;
  167|    176|    case (StaticAnalogVariation::Group30Var6):
  ------------------
  |  Branch (167:5): [True: 176, False: 882]
  ------------------
  168|    176|        return &WriteWithSerializer<AnalogSpec, Group30Var6>;
  169|      0|    default:
  ------------------
  |  Branch (169:5): [True: 0, False: 1.05k]
  ------------------
  170|      0|        return &WriteWithSerializer<AnalogSpec, Group30Var1>;
  171|  1.05k|    }
  172|  1.05k|}
_ZN8opendnp313StaticWriters3getENS_22StaticCounterVariationE:
  175|    731|{
  176|    731|    switch (variation)
  177|    731|    {
  178|    372|    case (StaticCounterVariation::Group20Var1):
  ------------------
  |  Branch (178:5): [True: 372, False: 359]
  ------------------
  179|    372|        return &WriteWithSerializer<CounterSpec, Group20Var1>;
  180|    123|    case (StaticCounterVariation::Group20Var2):
  ------------------
  |  Branch (180:5): [True: 123, False: 608]
  ------------------
  181|    123|        return &WriteWithSerializer<CounterSpec, Group20Var2>;
  182|    124|    case (StaticCounterVariation::Group20Var5):
  ------------------
  |  Branch (182:5): [True: 124, False: 607]
  ------------------
  183|    124|        return &WriteWithSerializer<CounterSpec, Group20Var5>;
  184|    112|    case (StaticCounterVariation::Group20Var6):
  ------------------
  |  Branch (184:5): [True: 112, False: 619]
  ------------------
  185|    112|        return &WriteWithSerializer<CounterSpec, Group20Var6>;
  186|      0|    default:
  ------------------
  |  Branch (186:5): [True: 0, False: 731]
  ------------------
  187|      0|        return &WriteWithSerializer<CounterSpec, Group20Var1>;
  188|    731|    }
  189|    731|}
_ZN8opendnp313StaticWriters3getENS_28StaticFrozenCounterVariationE:
  192|  1.01k|{
  193|  1.01k|    switch (variation)
  194|  1.01k|    {
  195|    394|    case (StaticFrozenCounterVariation::Group21Var1):
  ------------------
  |  Branch (195:5): [True: 394, False: 618]
  ------------------
  196|    394|        return &WriteWithSerializer<FrozenCounterSpec, Group21Var1>;
  197|    135|    case (StaticFrozenCounterVariation::Group21Var2):
  ------------------
  |  Branch (197:5): [True: 135, False: 877]
  ------------------
  198|    135|        return &WriteWithSerializer<FrozenCounterSpec, Group21Var2>;
  199|    141|    case (StaticFrozenCounterVariation::Group21Var5):
  ------------------
  |  Branch (199:5): [True: 141, False: 871]
  ------------------
  200|    141|        return &WriteWithSerializer<FrozenCounterSpec, Group21Var5>;
  201|    142|    case (StaticFrozenCounterVariation::Group21Var6):
  ------------------
  |  Branch (201:5): [True: 142, False: 870]
  ------------------
  202|    142|        return &WriteWithSerializer<FrozenCounterSpec, Group21Var6>;
  203|     94|    case (StaticFrozenCounterVariation::Group21Var9):
  ------------------
  |  Branch (203:5): [True: 94, False: 918]
  ------------------
  204|     94|        return &WriteWithSerializer<FrozenCounterSpec, Group21Var9>;
  205|    106|    case (StaticFrozenCounterVariation::Group21Var10):
  ------------------
  |  Branch (205:5): [True: 106, False: 906]
  ------------------
  206|    106|        return &WriteWithSerializer<FrozenCounterSpec, Group21Var10>;
  207|      0|    default:
  ------------------
  |  Branch (207:5): [True: 0, False: 1.01k]
  ------------------
  208|      0|        return &WriteWithSerializer<FrozenCounterSpec, Group21Var1>;
  209|  1.01k|    }
  210|  1.01k|}
_ZN8opendnp313StaticWriters3getENS_33StaticBinaryOutputStatusVariationE:
  213|    495|{
  214|    495|    switch (variation)
  215|    495|    {
  216|    495|    case (StaticBinaryOutputStatusVariation::Group10Var2):
  ------------------
  |  Branch (216:5): [True: 495, False: 0]
  ------------------
  217|    495|        return &WriteWithSerializer<BinaryOutputStatusSpec, Group10Var2>;
  218|      0|    default:
  ------------------
  |  Branch (218:5): [True: 0, False: 495]
  ------------------
  219|      0|        return &WriteWithSerializer<BinaryOutputStatusSpec, Group10Var2>;
  220|    495|    }
  221|    495|}
_ZN8opendnp313StaticWriters3getENS_33StaticAnalogOutputStatusVariationE:
  224|    795|{
  225|    795|    switch (variation)
  226|    795|    {
  227|    429|    case (StaticAnalogOutputStatusVariation::Group40Var1):
  ------------------
  |  Branch (227:5): [True: 429, False: 366]
  ------------------
  228|    429|        return &WriteWithSerializer<AnalogOutputStatusSpec, Group40Var1>;
  229|    130|    case (StaticAnalogOutputStatusVariation::Group40Var2):
  ------------------
  |  Branch (229:5): [True: 130, False: 665]
  ------------------
  230|    130|        return &WriteWithSerializer<AnalogOutputStatusSpec, Group40Var2>;
  231|    121|    case (StaticAnalogOutputStatusVariation::Group40Var3):
  ------------------
  |  Branch (231:5): [True: 121, False: 674]
  ------------------
  232|    121|        return &WriteWithSerializer<AnalogOutputStatusSpec, Group40Var3>;
  233|    115|    case (StaticAnalogOutputStatusVariation::Group40Var4):
  ------------------
  |  Branch (233:5): [True: 115, False: 680]
  ------------------
  234|    115|        return &WriteWithSerializer<AnalogOutputStatusSpec, Group40Var4>;
  235|      0|    default:
  ------------------
  |  Branch (235:5): [True: 0, False: 795]
  ------------------
  236|      0|        return &WriteWithSerializer<AnalogOutputStatusSpec, Group40Var1>;
  237|    795|    }
  238|    795|}
_ZN8opendnp313StaticWriters3getENS_26StaticOctetStringVariationE:
  243|    359|{
  244|    359|    return write_octet_strings;
  245|    359|}
_ZN8opendnp313StaticWriters3getENS_30StaticTimeAndIntervalVariationE:
  248|    329|{
  249|    329|    return &WriteWithSerializer<TimeAndIntervalSpec, Group50Var4>;
  250|    329|}
_ZN8opendnp319write_octet_stringsERNS_13StaticDataMapINS_15OctetStringSpecEEERNS_12HeaderWriterE:
  288|    359|{
  289|    359|    const auto range = map.get_selected_range();
  290|       |
  291|    359|    const uint8_t starting_size = (*map.begin()).second.value.Size();
  292|    359|    const OctetStringSerializer serializer(false, starting_size);
  293|       |
  294|    359|    if (range.IsOneByte())
  ------------------
  |  Branch (294:9): [True: 359, False: 0]
  ------------------
  295|    359|    {
  296|    359|        auto iter = writer.IterateOverRange<ser4cpp::UInt8>(QualifierCode::UINT8_START_STOP, serializer,
  297|    359|                                                            static_cast<uint8_t>(range.start));
  298|    359|        return write_some_octet_strings(map, iter);
  299|    359|    }
  300|       |
  301|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16>(QualifierCode::UINT16_START_STOP, serializer, range.start);
  302|      0|    return write_some_octet_strings(map, iter);
  303|    359|}
_ZN8opendnp319WriteWithSerializerINS_10BinarySpecENS_10Group1Var2EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|    638|{
  117|    638|    const auto range = map.get_selected_range();
  118|       |
  119|    638|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 638, False: 0]
  ------------------
  120|    638|    {
  121|    638|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|    638|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|    638|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|    638|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|    638|}
_ZN8opendnp321LoadWithRangeIteratorINS_10BinarySpecEN7ser4cpp5UInt8EEEbRNS_13StaticDataMapIT_EERNS_18RangeWriteIteratorIT0_NS5_6meas_tEEENS5_18static_variation_tE:
   39|    638|{
   40|    638|    auto next_index = map.get_selected_range().start;
   41|       |
   42|    638|    for (const auto& elem : map)
  ------------------
  |  Branch (42:27): [True: 3.64k, False: 514]
  ------------------
   43|  3.64k|    {
   44|  3.64k|        if (elem.second.variation != variation)
  ------------------
  |  Branch (44:13): [True: 0, False: 3.64k]
  ------------------
   45|      0|        {
   46|       |            // the variation has changed
   47|      0|            return true;
   48|      0|        }
   49|       |
   50|  3.64k|        if (elem.first != next_index)
  ------------------
  |  Branch (50:13): [True: 124, False: 3.52k]
  ------------------
   51|    124|        {
   52|       |            // we've loaded all we can with a contiguous range
   53|    124|            return true;
   54|    124|        }
   55|       |
   56|  3.52k|        if (!writer.Write(elem.second.value))
  ------------------
  |  Branch (56:13): [True: 0, False: 3.52k]
  ------------------
   57|      0|        {
   58|      0|            return false;
   59|      0|        }
   60|       |
   61|  3.52k|        ++next_index;
   62|  3.52k|    }
   63|       |
   64|    514|    return true;
   65|    638|}
_ZN8opendnp319WriteWithSerializerINS_19DoubleBitBinarySpecENS_10Group3Var2EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|    497|{
  117|    497|    const auto range = map.get_selected_range();
  118|       |
  119|    497|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 497, False: 0]
  ------------------
  120|    497|    {
  121|    497|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|    497|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|    497|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|    497|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|    497|}
_ZN8opendnp321LoadWithRangeIteratorINS_19DoubleBitBinarySpecEN7ser4cpp5UInt8EEEbRNS_13StaticDataMapIT_EERNS_18RangeWriteIteratorIT0_NS5_6meas_tEEENS5_18static_variation_tE:
   39|    497|{
   40|    497|    auto next_index = map.get_selected_range().start;
   41|       |
   42|    497|    for (const auto& elem : map)
  ------------------
  |  Branch (42:27): [True: 2.78k, False: 394]
  ------------------
   43|  2.78k|    {
   44|  2.78k|        if (elem.second.variation != variation)
  ------------------
  |  Branch (44:13): [True: 0, False: 2.78k]
  ------------------
   45|      0|        {
   46|       |            // the variation has changed
   47|      0|            return true;
   48|      0|        }
   49|       |
   50|  2.78k|        if (elem.first != next_index)
  ------------------
  |  Branch (50:13): [True: 103, False: 2.68k]
  ------------------
   51|    103|        {
   52|       |            // we've loaded all we can with a contiguous range
   53|    103|            return true;
   54|    103|        }
   55|       |
   56|  2.68k|        if (!writer.Write(elem.second.value))
  ------------------
  |  Branch (56:13): [True: 0, False: 2.68k]
  ------------------
   57|      0|        {
   58|      0|            return false;
   59|      0|        }
   60|       |
   61|  2.68k|        ++next_index;
   62|  2.68k|    }
   63|       |
   64|    394|    return true;
   65|    497|}
_ZN8opendnp319WriteWithSerializerINS_10AnalogSpecENS_11Group30Var1EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|    432|{
  117|    432|    const auto range = map.get_selected_range();
  118|       |
  119|    432|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 432, False: 0]
  ------------------
  120|    432|    {
  121|    432|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|    432|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|    432|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|    432|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|    432|}
_ZN8opendnp321LoadWithRangeIteratorINS_10AnalogSpecEN7ser4cpp5UInt8EEEbRNS_13StaticDataMapIT_EERNS_18RangeWriteIteratorIT0_NS5_6meas_tEEENS5_18static_variation_tE:
   39|  1.05k|{
   40|  1.05k|    auto next_index = map.get_selected_range().start;
   41|       |
   42|  1.05k|    for (const auto& elem : map)
  ------------------
  |  Branch (42:27): [True: 5.21k, False: 697]
  ------------------
   43|  5.21k|    {
   44|  5.21k|        if (elem.second.variation != variation)
  ------------------
  |  Branch (44:13): [True: 211, False: 5.00k]
  ------------------
   45|    211|        {
   46|       |            // the variation has changed
   47|    211|            return true;
   48|    211|        }
   49|       |
   50|  5.00k|        if (elem.first != next_index)
  ------------------
  |  Branch (50:13): [True: 150, False: 4.85k]
  ------------------
   51|    150|        {
   52|       |            // we've loaded all we can with a contiguous range
   53|    150|            return true;
   54|    150|        }
   55|       |
   56|  4.85k|        if (!writer.Write(elem.second.value))
  ------------------
  |  Branch (56:13): [True: 0, False: 4.85k]
  ------------------
   57|      0|        {
   58|      0|            return false;
   59|      0|        }
   60|       |
   61|  4.85k|        ++next_index;
   62|  4.85k|    }
   63|       |
   64|    697|    return true;
   65|  1.05k|}
_ZN8opendnp319WriteWithSerializerINS_10AnalogSpecENS_11Group30Var2EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|    116|{
  117|    116|    const auto range = map.get_selected_range();
  118|       |
  119|    116|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 116, False: 0]
  ------------------
  120|    116|    {
  121|    116|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|    116|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|    116|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|    116|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|    116|}
_ZN8opendnp319WriteWithSerializerINS_10AnalogSpecENS_11Group30Var3EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|    108|{
  117|    108|    const auto range = map.get_selected_range();
  118|       |
  119|    108|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 108, False: 0]
  ------------------
  120|    108|    {
  121|    108|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|    108|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|    108|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|    108|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|    108|}
_ZN8opendnp319WriteWithSerializerINS_10AnalogSpecENS_11Group30Var4EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|    117|{
  117|    117|    const auto range = map.get_selected_range();
  118|       |
  119|    117|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 117, False: 0]
  ------------------
  120|    117|    {
  121|    117|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|    117|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|    117|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|    117|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|    117|}
_ZN8opendnp319WriteWithSerializerINS_10AnalogSpecENS_11Group30Var5EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|    109|{
  117|    109|    const auto range = map.get_selected_range();
  118|       |
  119|    109|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 109, False: 0]
  ------------------
  120|    109|    {
  121|    109|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|    109|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|    109|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|    109|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|    109|}
_ZN8opendnp319WriteWithSerializerINS_10AnalogSpecENS_11Group30Var6EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|    176|{
  117|    176|    const auto range = map.get_selected_range();
  118|       |
  119|    176|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 176, False: 0]
  ------------------
  120|    176|    {
  121|    176|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|    176|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|    176|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|    176|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|    176|}
_ZN8opendnp319WriteWithSerializerINS_11CounterSpecENS_11Group20Var1EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|    372|{
  117|    372|    const auto range = map.get_selected_range();
  118|       |
  119|    372|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 372, False: 0]
  ------------------
  120|    372|    {
  121|    372|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|    372|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|    372|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|    372|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|    372|}
_ZN8opendnp321LoadWithRangeIteratorINS_11CounterSpecEN7ser4cpp5UInt8EEEbRNS_13StaticDataMapIT_EERNS_18RangeWriteIteratorIT0_NS5_6meas_tEEENS5_18static_variation_tE:
   39|    731|{
   40|    731|    auto next_index = map.get_selected_range().start;
   41|       |
   42|    731|    for (const auto& elem : map)
  ------------------
  |  Branch (42:27): [True: 3.90k, False: 519]
  ------------------
   43|  3.90k|    {
   44|  3.90k|        if (elem.second.variation != variation)
  ------------------
  |  Branch (44:13): [True: 100, False: 3.80k]
  ------------------
   45|    100|        {
   46|       |            // the variation has changed
   47|    100|            return true;
   48|    100|        }
   49|       |
   50|  3.80k|        if (elem.first != next_index)
  ------------------
  |  Branch (50:13): [True: 112, False: 3.68k]
  ------------------
   51|    112|        {
   52|       |            // we've loaded all we can with a contiguous range
   53|    112|            return true;
   54|    112|        }
   55|       |
   56|  3.68k|        if (!writer.Write(elem.second.value))
  ------------------
  |  Branch (56:13): [True: 0, False: 3.68k]
  ------------------
   57|      0|        {
   58|      0|            return false;
   59|      0|        }
   60|       |
   61|  3.68k|        ++next_index;
   62|  3.68k|    }
   63|       |
   64|    519|    return true;
   65|    731|}
_ZN8opendnp319WriteWithSerializerINS_11CounterSpecENS_11Group20Var2EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|    123|{
  117|    123|    const auto range = map.get_selected_range();
  118|       |
  119|    123|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 123, False: 0]
  ------------------
  120|    123|    {
  121|    123|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|    123|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|    123|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|    123|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|    123|}
_ZN8opendnp319WriteWithSerializerINS_11CounterSpecENS_11Group20Var5EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|    124|{
  117|    124|    const auto range = map.get_selected_range();
  118|       |
  119|    124|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 124, False: 0]
  ------------------
  120|    124|    {
  121|    124|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|    124|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|    124|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|    124|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|    124|}
_ZN8opendnp319WriteWithSerializerINS_11CounterSpecENS_11Group20Var6EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|    112|{
  117|    112|    const auto range = map.get_selected_range();
  118|       |
  119|    112|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 112, False: 0]
  ------------------
  120|    112|    {
  121|    112|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|    112|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|    112|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|    112|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|    112|}
_ZN8opendnp319WriteWithSerializerINS_17FrozenCounterSpecENS_11Group21Var1EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|    394|{
  117|    394|    const auto range = map.get_selected_range();
  118|       |
  119|    394|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 394, False: 0]
  ------------------
  120|    394|    {
  121|    394|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|    394|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|    394|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|    394|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|    394|}
_ZN8opendnp321LoadWithRangeIteratorINS_17FrozenCounterSpecEN7ser4cpp5UInt8EEEbRNS_13StaticDataMapIT_EERNS_18RangeWriteIteratorIT0_NS5_6meas_tEEENS5_18static_variation_tE:
   39|  1.01k|{
   40|  1.01k|    auto next_index = map.get_selected_range().start;
   41|       |
   42|  1.01k|    for (const auto& elem : map)
  ------------------
  |  Branch (42:27): [True: 5.21k, False: 692]
  ------------------
   43|  5.21k|    {
   44|  5.21k|        if (elem.second.variation != variation)
  ------------------
  |  Branch (44:13): [True: 178, False: 5.04k]
  ------------------
   45|    178|        {
   46|       |            // the variation has changed
   47|    178|            return true;
   48|    178|        }
   49|       |
   50|  5.04k|        if (elem.first != next_index)
  ------------------
  |  Branch (50:13): [True: 142, False: 4.89k]
  ------------------
   51|    142|        {
   52|       |            // we've loaded all we can with a contiguous range
   53|    142|            return true;
   54|    142|        }
   55|       |
   56|  4.89k|        if (!writer.Write(elem.second.value))
  ------------------
  |  Branch (56:13): [True: 0, False: 4.89k]
  ------------------
   57|      0|        {
   58|      0|            return false;
   59|      0|        }
   60|       |
   61|  4.89k|        ++next_index;
   62|  4.89k|    }
   63|       |
   64|    692|    return true;
   65|  1.01k|}
_ZN8opendnp319WriteWithSerializerINS_17FrozenCounterSpecENS_11Group21Var2EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|    135|{
  117|    135|    const auto range = map.get_selected_range();
  118|       |
  119|    135|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 135, False: 0]
  ------------------
  120|    135|    {
  121|    135|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|    135|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|    135|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|    135|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|    135|}
_ZN8opendnp319WriteWithSerializerINS_17FrozenCounterSpecENS_11Group21Var5EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|    141|{
  117|    141|    const auto range = map.get_selected_range();
  118|       |
  119|    141|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 141, False: 0]
  ------------------
  120|    141|    {
  121|    141|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|    141|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|    141|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|    141|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|    141|}
_ZN8opendnp319WriteWithSerializerINS_17FrozenCounterSpecENS_11Group21Var6EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|    142|{
  117|    142|    const auto range = map.get_selected_range();
  118|       |
  119|    142|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 142, False: 0]
  ------------------
  120|    142|    {
  121|    142|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|    142|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|    142|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|    142|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|    142|}
_ZN8opendnp319WriteWithSerializerINS_17FrozenCounterSpecENS_11Group21Var9EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|     94|{
  117|     94|    const auto range = map.get_selected_range();
  118|       |
  119|     94|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 94, False: 0]
  ------------------
  120|     94|    {
  121|     94|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|     94|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|     94|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|     94|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|     94|}
_ZN8opendnp319WriteWithSerializerINS_17FrozenCounterSpecENS_12Group21Var10EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|    106|{
  117|    106|    const auto range = map.get_selected_range();
  118|       |
  119|    106|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 106, False: 0]
  ------------------
  120|    106|    {
  121|    106|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|    106|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|    106|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|    106|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|    106|}
_ZN8opendnp319WriteWithSerializerINS_22BinaryOutputStatusSpecENS_11Group10Var2EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|    495|{
  117|    495|    const auto range = map.get_selected_range();
  118|       |
  119|    495|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 495, False: 0]
  ------------------
  120|    495|    {
  121|    495|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|    495|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|    495|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|    495|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|    495|}
_ZN8opendnp321LoadWithRangeIteratorINS_22BinaryOutputStatusSpecEN7ser4cpp5UInt8EEEbRNS_13StaticDataMapIT_EERNS_18RangeWriteIteratorIT0_NS5_6meas_tEEENS5_18static_variation_tE:
   39|    495|{
   40|    495|    auto next_index = map.get_selected_range().start;
   41|       |
   42|    495|    for (const auto& elem : map)
  ------------------
  |  Branch (42:27): [True: 2.79k, False: 401]
  ------------------
   43|  2.79k|    {
   44|  2.79k|        if (elem.second.variation != variation)
  ------------------
  |  Branch (44:13): [True: 0, False: 2.79k]
  ------------------
   45|      0|        {
   46|       |            // the variation has changed
   47|      0|            return true;
   48|      0|        }
   49|       |
   50|  2.79k|        if (elem.first != next_index)
  ------------------
  |  Branch (50:13): [True: 94, False: 2.70k]
  ------------------
   51|     94|        {
   52|       |            // we've loaded all we can with a contiguous range
   53|     94|            return true;
   54|     94|        }
   55|       |
   56|  2.70k|        if (!writer.Write(elem.second.value))
  ------------------
  |  Branch (56:13): [True: 0, False: 2.70k]
  ------------------
   57|      0|        {
   58|      0|            return false;
   59|      0|        }
   60|       |
   61|  2.70k|        ++next_index;
   62|  2.70k|    }
   63|       |
   64|    401|    return true;
   65|    495|}
_ZN8opendnp319WriteWithSerializerINS_22AnalogOutputStatusSpecENS_11Group40Var1EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|    429|{
  117|    429|    const auto range = map.get_selected_range();
  118|       |
  119|    429|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 429, False: 0]
  ------------------
  120|    429|    {
  121|    429|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|    429|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|    429|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|    429|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|    429|}
_ZN8opendnp321LoadWithRangeIteratorINS_22AnalogOutputStatusSpecEN7ser4cpp5UInt8EEEbRNS_13StaticDataMapIT_EERNS_18RangeWriteIteratorIT0_NS5_6meas_tEEENS5_18static_variation_tE:
   39|    795|{
   40|    795|    auto next_index = map.get_selected_range().start;
   41|       |
   42|    795|    for (const auto& elem : map)
  ------------------
  |  Branch (42:27): [True: 4.38k, False: 578]
  ------------------
   43|  4.38k|    {
   44|  4.38k|        if (elem.second.variation != variation)
  ------------------
  |  Branch (44:13): [True: 97, False: 4.29k]
  ------------------
   45|     97|        {
   46|       |            // the variation has changed
   47|     97|            return true;
   48|     97|        }
   49|       |
   50|  4.29k|        if (elem.first != next_index)
  ------------------
  |  Branch (50:13): [True: 120, False: 4.17k]
  ------------------
   51|    120|        {
   52|       |            // we've loaded all we can with a contiguous range
   53|    120|            return true;
   54|    120|        }
   55|       |
   56|  4.17k|        if (!writer.Write(elem.second.value))
  ------------------
  |  Branch (56:13): [True: 0, False: 4.17k]
  ------------------
   57|      0|        {
   58|      0|            return false;
   59|      0|        }
   60|       |
   61|  4.17k|        ++next_index;
   62|  4.17k|    }
   63|       |
   64|    578|    return true;
   65|    795|}
_ZN8opendnp319WriteWithSerializerINS_22AnalogOutputStatusSpecENS_11Group40Var2EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|    130|{
  117|    130|    const auto range = map.get_selected_range();
  118|       |
  119|    130|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 130, False: 0]
  ------------------
  120|    130|    {
  121|    130|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|    130|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|    130|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|    130|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|    130|}
_ZN8opendnp319WriteWithSerializerINS_22AnalogOutputStatusSpecENS_11Group40Var3EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|    121|{
  117|    121|    const auto range = map.get_selected_range();
  118|       |
  119|    121|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 121, False: 0]
  ------------------
  120|    121|    {
  121|    121|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|    121|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|    121|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|    121|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|    121|}
_ZN8opendnp319WriteWithSerializerINS_22AnalogOutputStatusSpecENS_11Group40Var4EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|    115|{
  117|    115|    const auto range = map.get_selected_range();
  118|       |
  119|    115|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 115, False: 0]
  ------------------
  120|    115|    {
  121|    115|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|    115|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|    115|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|    115|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|    115|}
_ZN8opendnp319WriteWithSerializerINS_19TimeAndIntervalSpecENS_11Group50Var4EEEbRNS_13StaticDataMapIT_EERNS_12HeaderWriterE:
  116|    329|{
  117|    329|    const auto range = map.get_selected_range();
  118|       |
  119|    329|    if (range.IsOneByte())
  ------------------
  |  Branch (119:9): [True: 329, False: 0]
  ------------------
  120|    329|    {
  121|    329|        auto iter = writer.IterateOverRange<ser4cpp::UInt8, typename Serializer::Target>(
  122|    329|            QualifierCode::UINT8_START_STOP, Serializer::Inst(), static_cast<uint8_t>(range.start));
  123|    329|        return LoadWithRangeIterator<Spec, ser4cpp::UInt8>(map, iter, Serializer::svariation);
  124|    329|    }
  125|       |
  126|      0|    auto iter = writer.IterateOverRange<ser4cpp::UInt16, typename Serializer::Target>(QualifierCode::UINT16_START_STOP,
  127|      0|                                                                                      Serializer::Inst(), range.start);
  128|      0|    return LoadWithRangeIterator<Spec, ser4cpp::UInt16>(map, iter, Serializer::svariation);
  129|    329|}
_ZN8opendnp321LoadWithRangeIteratorINS_19TimeAndIntervalSpecEN7ser4cpp5UInt8EEEbRNS_13StaticDataMapIT_EERNS_18RangeWriteIteratorIT0_NS5_6meas_tEEENS5_18static_variation_tE:
   39|    329|{
   40|    329|    auto next_index = map.get_selected_range().start;
   41|       |
   42|    329|    for (const auto& elem : map)
  ------------------
  |  Branch (42:27): [True: 2.13k, False: 271]
  ------------------
   43|  2.13k|    {
   44|  2.13k|        if (elem.second.variation != variation)
  ------------------
  |  Branch (44:13): [True: 0, False: 2.13k]
  ------------------
   45|      0|        {
   46|       |            // the variation has changed
   47|      0|            return true;
   48|      0|        }
   49|       |
   50|  2.13k|        if (elem.first != next_index)
  ------------------
  |  Branch (50:13): [True: 58, False: 2.07k]
  ------------------
   51|     58|        {
   52|       |            // we've loaded all we can with a contiguous range
   53|     58|            return true;
   54|     58|        }
   55|       |
   56|  2.07k|        if (!writer.Write(elem.second.value))
  ------------------
  |  Branch (56:13): [True: 0, False: 2.07k]
  ------------------
   57|      0|        {
   58|      0|            return false;
   59|      0|        }
   60|       |
   61|  2.07k|        ++next_index;
   62|  2.07k|    }
   63|       |
   64|    271|    return true;
   65|    329|}
_ZN8opendnp324write_some_octet_stringsINS_18RangeWriteIteratorIN7ser4cpp5UInt8ENS_11OctetStringEEEEEbRNS_13StaticDataMapINS_15OctetStringSpecEEERT_:
  253|    359|{
  254|    359|    bool first = true;
  255|    359|    uint8_t last_length = 0;
  256|    359|    uint16_t next_index = 0;
  257|       |
  258|    359|    for (const auto& elem : map)
  ------------------
  |  Branch (258:27): [True: 2.32k, False: 302]
  ------------------
  259|  2.32k|    {
  260|       |
  261|  2.32k|        if(!first) {
  ------------------
  |  Branch (261:12): [True: 1.96k, False: 359]
  ------------------
  262|       |
  263|  1.96k|            if(next_index != elem.first) {
  ------------------
  |  Branch (263:16): [True: 57, False: 1.91k]
  ------------------
  264|       |                // discontiguous indices
  265|     57|                return true;
  266|     57|            }
  267|       |
  268|  1.91k|            if(last_length != elem.second.value.Size()) {
  ------------------
  |  Branch (268:16): [True: 0, False: 1.91k]
  ------------------
  269|       |                // different lengths
  270|      0|                return true;
  271|      0|            }
  272|  1.91k|        }
  273|       |
  274|  2.26k|        first = false;
  275|  2.26k|        next_index = elem.first + 1;
  276|  2.26k|        last_length = elem.second.value.Size();
  277|       |
  278|  2.26k|        if (!writer.Write(elem.second.value))
  ------------------
  |  Branch (278:13): [True: 0, False: 2.26k]
  ------------------
  279|      0|        {
  280|      0|            return false;
  281|      0|        }
  282|  2.26k|    }
  283|       |
  284|    302|    return true;
  285|    359|}

_ZN8opendnp313TimeSyncStateC2Ev:
   37|  8.87k|    TimeSyncState() {}
_ZN8opendnp313TimeSyncState17RecordCurrentTimeERKNS_11SequenceNumIhLh16EEERKNS_9TimestampE:
   40|      1|    {
   41|      1|        valid = true;
   42|      1|        time = now;
   43|      1|        expectedSeqNum = seq.Next();
   44|      1|    }
_ZN8opendnp313TimeSyncState18CalcTimeDifferenceERKNS_11SequenceNumIhLh16EEERKNS_9TimestampE:
   47|    482|    {
   48|    482|        if (!valid)
  ------------------
  |  Branch (48:13): [True: 482, False: 0]
  ------------------
   49|    482|            return false;
   50|      0|        if (!expectedSeqNum.Equals(seq))
  ------------------
  |  Branch (50:13): [True: 0, False: 0]
  ------------------
   51|      0|            return false;
   52|      0|        if (now < time)
  ------------------
  |  Branch (52:13): [True: 0, False: 0]
  ------------------
   53|      0|            return false;
   54|       |
   55|      0|        this->difference = now - time;
   56|      0|        this->valid = false;
   57|       |
   58|      0|        return true;
   59|      0|    }

_ZN8opendnp312WriteHandlerC2ERNS_22IOutstationApplicationERNS_13TimeSyncStateENS_11SequenceNumIhLh16EEENS_9TimestampEPNS_8IINFieldE:
   29|  2.57k|    : application(&application), timeSyncState(&timeSyncState), seq(seq), now(now), writeIIN(writeIIN)
   30|  2.57k|{
   31|  2.57k|}
_ZN8opendnp312WriteHandler13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_8IINValueEEEEE:
   34|  1.08k|{
   35|  1.08k|    Indexed<IINValue> pair;
   36|       |
   37|  1.08k|    if (!values.ReadOnlyValue(pair))
  ------------------
  |  Branch (37:9): [True: 351, False: 733]
  ------------------
   38|    351|    {
   39|    351|        return IINBit::PARAM_ERROR;
   40|    351|    }
   41|       |
   42|    733|    if (wroteIIN)
  ------------------
  |  Branch (42:9): [True: 194, False: 539]
  ------------------
   43|    194|    {
   44|    194|        return IINBit::PARAM_ERROR;
   45|    194|    }
   46|       |
   47|    539|    if (pair.index != static_cast<uint16_t>(IINBit::DEVICE_RESTART))
  ------------------
  |  Branch (47:9): [True: 336, False: 203]
  ------------------
   48|    336|    {
   49|    336|        return IINBit::PARAM_ERROR;
   50|    336|    }
   51|       |
   52|    203|    if (pair.value.value)
  ------------------
  |  Branch (52:9): [True: 194, False: 9]
  ------------------
   53|    194|    {
   54|    194|        return IINBit::PARAM_ERROR;
   55|    194|    }
   56|       |
   57|      9|    wroteIIN = true;
   58|      9|    writeIIN->ClearBit(IINBit::DEVICE_RESTART);
   59|      9|    return IINField();
   60|    203|}
_ZN8opendnp312WriteHandler13ProcessHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group50Var1EEE:
   63|    721|{
   64|    721|    if (this->wroteTime)
  ------------------
  |  Branch (64:9): [True: 400, False: 321]
  ------------------
   65|    400|        return IINBit::PARAM_ERROR;
   66|       |
   67|    321|    if (!application->SupportsWriteAbsoluteTime())
  ------------------
  |  Branch (67:9): [True: 0, False: 321]
  ------------------
   68|      0|        return IINBit::FUNC_NOT_SUPPORTED;
   69|       |
   70|    321|    Group50Var1 value;
   71|    321|    if (!values.ReadOnlyValue(value))
  ------------------
  |  Branch (71:9): [True: 290, False: 31]
  ------------------
   72|    290|        return IINBit::PARAM_ERROR;
   73|       |
   74|     31|    this->wroteTime = true;
   75|     31|    return application->WriteAbsoluteTime(UTCTimestamp(value.time.value)) ? IINField::Empty() : IINBit::PARAM_ERROR;
  ------------------
  |  Branch (75:12): [True: 31, False: 0]
  ------------------
   76|    321|}
_ZN8opendnp312WriteHandler13ProcessHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group50Var3EEE:
   79|  1.18k|{
   80|  1.18k|    if (this->wroteTime)
  ------------------
  |  Branch (80:9): [True: 390, False: 797]
  ------------------
   81|    390|        return IINBit::PARAM_ERROR;
   82|       |
   83|    797|    if (!application->SupportsWriteAbsoluteTime())
  ------------------
  |  Branch (83:9): [True: 0, False: 797]
  ------------------
   84|      0|        return IINBit::FUNC_NOT_SUPPORTED;
   85|       |
   86|    797|    Group50Var3 value;
   87|    797|    if (!values.ReadOnlyValue(value))
  ------------------
  |  Branch (87:9): [True: 315, False: 482]
  ------------------
   88|    315|        return IINBit::PARAM_ERROR;
   89|       |
   90|    482|    if (!this->timeSyncState->CalcTimeDifference(this->seq, this->now))
  ------------------
  |  Branch (90:9): [True: 482, False: 0]
  ------------------
   91|    482|        return IINBit::PARAM_ERROR;
   92|       |
   93|      0|    const UTCTimestamp time(
   94|      0|        value.time.value
   95|      0|        + std::chrono::duration_cast<std::chrono::milliseconds>(this->timeSyncState->GetDifference().value).count());
   96|       |
   97|      0|    this->wroteTime = true;
   98|      0|    return application->WriteAbsoluteTime(time) ? IINField::Empty() : IINBit::PARAM_ERROR;
  ------------------
  |  Branch (98:12): [True: 0, False: 0]
  ------------------
   99|    482|}
_ZN8opendnp312WriteHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_15TimeAndIntervalEEEEE:
  103|    269|{
  104|    269|    if (!application->SupportsWriteTimeAndInterval())
  ------------------
  |  Branch (104:9): [True: 269, False: 0]
  ------------------
  105|    269|    {
  106|    269|        return IINBit::FUNC_NOT_SUPPORTED;
  107|    269|    }
  108|       |
  109|      0|    return application->WriteTimeAndInterval(values) ? IINField::Empty() : IINBit::PARAM_ERROR;
  ------------------
  |  Branch (109:12): [True: 0, False: 0]
  ------------------
  110|    269|}

_ZN8opendnp312WriteHandler9IsAllowedEjNS_14GroupVariationENS_13QualifierCodeE:
   44|  27.9k|    {
   45|  27.9k|        return true;
   46|  27.9k|    }

_ZN8opendnp321ASDUEventWriteHandlerC2ERKNS_12HeaderWriterE:
   36|  4.34k|    explicit ASDUEventWriteHandler(const HeaderWriter& writer) : writer(writer) {}

_ZN8opendnp310ClazzCount5ResetEv:
   35|  4.71k|    {
   36|  4.71k|        this->num_class_1 = 0;
   37|  4.71k|        this->num_class_2 = 0;
   38|  4.71k|        this->num_class_3 = 0;
   39|  4.71k|    }
_ZNK8opendnp310ClazzCount3GetENS_10EventClassE:
   42|  50.2k|    {
   43|  50.2k|        switch (clazz)
   44|  50.2k|        {
   45|  16.7k|        case (EventClass::EC1):
  ------------------
  |  Branch (45:9): [True: 16.7k, False: 33.5k]
  ------------------
   46|  16.7k|            return num_class_1;
   47|  16.7k|        case (EventClass::EC2):
  ------------------
  |  Branch (47:9): [True: 16.7k, False: 33.5k]
  ------------------
   48|  16.7k|            return num_class_2;
   49|      0|            break;
   50|  16.7k|        default:
  ------------------
  |  Branch (50:9): [True: 16.7k, False: 33.5k]
  ------------------
   51|  16.7k|            return num_class_3;
   52|  50.2k|        }
   53|  50.2k|    }
_ZN8opendnp318EventClassCounters11ResetOnFailEv:
  124|  4.71k|    {
  125|  4.71k|        this->selected = 0;
  126|  4.71k|        this->written.Reset();
  127|  4.71k|    }

_ZN8opendnp311EventBufferC2ERKNS_17EventBufferConfigE:
   27|  8.87k|EventBuffer::EventBuffer(const EventBufferConfig& config) : storage(config) {}
_ZN8opendnp311EventBuffer8UnselectEv:
   70|  4.71k|{
   71|  4.71k|    this->storage.Unselect();
   72|  4.71k|}
_ZN8opendnp311EventBuffer9SelectAllENS_14GroupVariationE:
   75|  16.7k|{
   76|  16.7k|    return SelectMaxCount(gv, std::numeric_limits<uint32_t>::max());
   77|  16.7k|}
_ZN8opendnp311EventBuffer11SelectCountENS_14GroupVariationEt:
   80|  1.50k|{
   81|  1.50k|    return SelectMaxCount(gv, count);
   82|  1.50k|}
_ZN8opendnp311EventBuffer14SelectMaxCountENS_14GroupVariationEj:
   85|  18.2k|{
   86|  18.2k|    switch (gv)
   87|  18.2k|    {
   88|    288|    case (GroupVariation::Group2Var0):
  ------------------
  |  Branch (88:5): [True: 288, False: 17.9k]
  ------------------
   89|    288|        return this->SelectByType(maximum, EventType::Binary);
   90|    382|    case (GroupVariation::Group2Var1):
  ------------------
  |  Branch (90:5): [True: 382, False: 17.8k]
  ------------------
   91|    382|        return this->SelectByType(maximum, EventBinaryVariation::Group2Var1);
   92|    387|    case (GroupVariation::Group2Var2):
  ------------------
  |  Branch (92:5): [True: 387, False: 17.8k]
  ------------------
   93|    387|        return this->SelectByType(maximum, EventBinaryVariation::Group2Var2);
   94|    386|    case (GroupVariation::Group2Var3):
  ------------------
  |  Branch (94:5): [True: 386, False: 17.8k]
  ------------------
   95|    386|        return this->SelectByType(maximum, EventBinaryVariation::Group2Var3);
   96|       |
   97|    438|    case (GroupVariation::Group4Var0):
  ------------------
  |  Branch (97:5): [True: 438, False: 17.7k]
  ------------------
   98|    438|        return this->SelectByType(maximum, EventType::DoubleBitBinary);
   99|    281|    case (GroupVariation::Group4Var1):
  ------------------
  |  Branch (99:5): [True: 281, False: 17.9k]
  ------------------
  100|    281|        return this->SelectByType(maximum, EventDoubleBinaryVariation::Group4Var1);
  101|    250|    case (GroupVariation::Group4Var2):
  ------------------
  |  Branch (101:5): [True: 250, False: 17.9k]
  ------------------
  102|    250|        return this->SelectByType(maximum, EventDoubleBinaryVariation::Group4Var2);
  103|    440|    case (GroupVariation::Group4Var3):
  ------------------
  |  Branch (103:5): [True: 440, False: 17.7k]
  ------------------
  104|    440|        return this->SelectByType(maximum, EventDoubleBinaryVariation::Group4Var3);
  105|       |
  106|    310|    case (GroupVariation::Group11Var0):
  ------------------
  |  Branch (106:5): [True: 310, False: 17.9k]
  ------------------
  107|    310|        return this->SelectByType(maximum, EventType::BinaryOutputStatus);
  108|    832|    case (GroupVariation::Group11Var1):
  ------------------
  |  Branch (108:5): [True: 832, False: 17.3k]
  ------------------
  109|    832|        return this->SelectByType(maximum, EventBinaryOutputStatusVariation::Group11Var1);
  110|    333|    case (GroupVariation::Group11Var2):
  ------------------
  |  Branch (110:5): [True: 333, False: 17.8k]
  ------------------
  111|    333|        return this->SelectByType(maximum, EventBinaryOutputStatusVariation::Group11Var2);
  112|       |
  113|    593|    case (GroupVariation::Group22Var0):
  ------------------
  |  Branch (113:5): [True: 593, False: 17.6k]
  ------------------
  114|    593|        return this->SelectByType(maximum, EventType::Counter);
  115|    614|    case (GroupVariation::Group22Var1):
  ------------------
  |  Branch (115:5): [True: 614, False: 17.6k]
  ------------------
  116|    614|        return this->SelectByType(maximum, EventCounterVariation::Group22Var1);
  117|    278|    case (GroupVariation::Group22Var2):
  ------------------
  |  Branch (117:5): [True: 278, False: 17.9k]
  ------------------
  118|    278|        return this->SelectByType(maximum, EventCounterVariation::Group22Var2);
  119|    442|    case (GroupVariation::Group22Var5):
  ------------------
  |  Branch (119:5): [True: 442, False: 17.7k]
  ------------------
  120|    442|        return this->SelectByType(maximum, EventCounterVariation::Group22Var5);
  121|    270|    case (GroupVariation::Group22Var6):
  ------------------
  |  Branch (121:5): [True: 270, False: 17.9k]
  ------------------
  122|    270|        return this->SelectByType(maximum, EventCounterVariation::Group22Var6);
  123|       |
  124|    418|    case (GroupVariation::Group23Var0):
  ------------------
  |  Branch (124:5): [True: 418, False: 17.8k]
  ------------------
  125|    418|        return this->SelectByType(maximum, EventType::FrozenCounter);
  126|  1.51k|    case (GroupVariation::Group23Var1):
  ------------------
  |  Branch (126:5): [True: 1.51k, False: 16.7k]
  ------------------
  127|  1.51k|        return this->SelectByType(maximum, EventFrozenCounterVariation::Group23Var1);
  128|    309|    case (GroupVariation::Group23Var2):
  ------------------
  |  Branch (128:5): [True: 309, False: 17.9k]
  ------------------
  129|    309|        return this->SelectByType(maximum, EventFrozenCounterVariation::Group23Var2);
  130|    292|    case (GroupVariation::Group23Var5):
  ------------------
  |  Branch (130:5): [True: 292, False: 17.9k]
  ------------------
  131|    292|        return this->SelectByType(maximum, EventFrozenCounterVariation::Group23Var5);
  132|    297|    case (GroupVariation::Group23Var6):
  ------------------
  |  Branch (132:5): [True: 297, False: 17.9k]
  ------------------
  133|    297|        return this->SelectByType(maximum, EventFrozenCounterVariation::Group23Var6);
  134|       |
  135|    289|    case (GroupVariation::Group32Var0):
  ------------------
  |  Branch (135:5): [True: 289, False: 17.9k]
  ------------------
  136|    289|        return this->SelectByType(maximum, EventType::Analog);
  137|    313|    case (GroupVariation::Group32Var1):
  ------------------
  |  Branch (137:5): [True: 313, False: 17.9k]
  ------------------
  138|    313|        return this->SelectByType(maximum, EventAnalogVariation::Group32Var1);
  139|    329|    case (GroupVariation::Group32Var2):
  ------------------
  |  Branch (139:5): [True: 329, False: 17.8k]
  ------------------
  140|    329|        return this->SelectByType(maximum, EventAnalogVariation::Group32Var2);
  141|    287|    case (GroupVariation::Group32Var3):
  ------------------
  |  Branch (141:5): [True: 287, False: 17.9k]
  ------------------
  142|    287|        return this->SelectByType(maximum, EventAnalogVariation::Group32Var3);
  143|    261|    case (GroupVariation::Group32Var4):
  ------------------
  |  Branch (143:5): [True: 261, False: 17.9k]
  ------------------
  144|    261|        return this->SelectByType(maximum, EventAnalogVariation::Group32Var4);
  145|    212|    case (GroupVariation::Group32Var5):
  ------------------
  |  Branch (145:5): [True: 212, False: 18.0k]
  ------------------
  146|    212|        return this->SelectByType(maximum, EventAnalogVariation::Group32Var5);
  147|    279|    case (GroupVariation::Group32Var6):
  ------------------
  |  Branch (147:5): [True: 279, False: 17.9k]
  ------------------
  148|    279|        return this->SelectByType(maximum, EventAnalogVariation::Group32Var6);
  149|    225|    case (GroupVariation::Group32Var7):
  ------------------
  |  Branch (149:5): [True: 225, False: 18.0k]
  ------------------
  150|    225|        return this->SelectByType(maximum, EventAnalogVariation::Group32Var7);
  151|    276|    case (GroupVariation::Group32Var8):
  ------------------
  |  Branch (151:5): [True: 276, False: 17.9k]
  ------------------
  152|    276|        return this->SelectByType(maximum, EventAnalogVariation::Group32Var8);
  153|       |
  154|    446|    case (GroupVariation::Group42Var0):
  ------------------
  |  Branch (154:5): [True: 446, False: 17.7k]
  ------------------
  155|    446|        return this->SelectByType(maximum, EventType::AnalogOutputStatus);
  156|    355|    case (GroupVariation::Group42Var1):
  ------------------
  |  Branch (156:5): [True: 355, False: 17.8k]
  ------------------
  157|    355|        return this->SelectByType(maximum, EventAnalogOutputStatusVariation::Group42Var1);
  158|    280|    case (GroupVariation::Group42Var2):
  ------------------
  |  Branch (158:5): [True: 280, False: 17.9k]
  ------------------
  159|    280|        return this->SelectByType(maximum, EventAnalogOutputStatusVariation::Group42Var2);
  160|    383|    case (GroupVariation::Group42Var3):
  ------------------
  |  Branch (160:5): [True: 383, False: 17.8k]
  ------------------
  161|    383|        return this->SelectByType(maximum, EventAnalogOutputStatusVariation::Group42Var3);
  162|    290|    case (GroupVariation::Group42Var4):
  ------------------
  |  Branch (162:5): [True: 290, False: 17.9k]
  ------------------
  163|    290|        return this->SelectByType(maximum, EventAnalogOutputStatusVariation::Group42Var4);
  164|    260|    case (GroupVariation::Group42Var5):
  ------------------
  |  Branch (164:5): [True: 260, False: 17.9k]
  ------------------
  165|    260|        return this->SelectByType(maximum, EventAnalogOutputStatusVariation::Group42Var5);
  166|    275|    case (GroupVariation::Group42Var6):
  ------------------
  |  Branch (166:5): [True: 275, False: 17.9k]
  ------------------
  167|    275|        return this->SelectByType(maximum, EventAnalogOutputStatusVariation::Group42Var6);
  168|    352|    case (GroupVariation::Group42Var7):
  ------------------
  |  Branch (168:5): [True: 352, False: 17.8k]
  ------------------
  169|    352|        return this->SelectByType(maximum, EventAnalogOutputStatusVariation::Group42Var7);
  170|    264|    case (GroupVariation::Group42Var8):
  ------------------
  |  Branch (170:5): [True: 264, False: 17.9k]
  ------------------
  171|    264|        return this->SelectByType(maximum, EventAnalogOutputStatusVariation::Group42Var8);
  172|       |
  173|    314|    case (GroupVariation::Group60Var2):
  ------------------
  |  Branch (173:5): [True: 314, False: 17.9k]
  ------------------
  174|    314|        return this->SelectByClass(maximum, EventClass::EC1);
  175|    447|    case (GroupVariation::Group60Var3):
  ------------------
  |  Branch (175:5): [True: 447, False: 17.7k]
  ------------------
  176|    447|        return this->SelectByClass(maximum, EventClass::EC2);
  177|    437|    case (GroupVariation::Group60Var4):
  ------------------
  |  Branch (177:5): [True: 437, False: 17.7k]
  ------------------
  178|    437|        return this->SelectByClass(maximum, EventClass::EC3);
  179|       |
  180|    386|    case (GroupVariation::Group111Var0):
  ------------------
  |  Branch (180:5): [True: 386, False: 17.8k]
  ------------------
  181|    386|        return this->SelectByType(maximum, EventOctetStringVariation::Group111Var0);
  182|       |
  183|  1.91k|    default:
  ------------------
  |  Branch (183:5): [True: 1.91k, False: 16.3k]
  ------------------
  184|  1.91k|        return IINBit::FUNC_NOT_SUPPORTED;
  185|  18.2k|    }
  186|  18.2k|}
_ZN8opendnp311EventBuffer4LoadERNS_12HeaderWriterE:
  195|  4.34k|{
  196|  4.34k|    ASDUEventWriteHandler handler(writer);
  197|  4.34k|    this->storage.Write(handler);
  198|       |    // all selected events were written?
  199|  4.34k|    return this->storage.NumSelected() == 0;
  200|  4.34k|}
_ZNK8opendnp311EventBuffer19UnwrittenClassFieldEv:
  203|  8.37k|{
  204|  8.37k|    return ClassField(false, storage.NumUnwritten(EventClass::EC1) > 0, storage.NumUnwritten(EventClass::EC2) > 0,
  205|  8.37k|                      storage.NumUnwritten(EventClass::EC3) > 0);
  206|  8.37k|}
_ZN8opendnp311EventBuffer11IsOverflownEv:
  209|  8.37k|{
  210|  8.37k|    if (overflow && !this->storage.IsAnyTypeFull())
  ------------------
  |  Branch (210:9): [True: 0, False: 8.37k]
  |  Branch (210:21): [True: 0, False: 0]
  ------------------
  211|      0|    {
  212|      0|        overflow = false;
  213|      0|    }
  214|       |
  215|  8.37k|    return overflow;
  216|  8.37k|}

_ZN8opendnp311EventBuffer13SelectByClassEjNS_10EventClassE:
  109|  1.19k|    {
  110|  1.19k|        this->storage.SelectByClass(clazz, max);
  111|  1.19k|        return IINField::Empty();
  112|  1.19k|    }
_ZN8opendnp311EventBuffer12SelectByTypeINS_9EventTypeEEENS_8IINFieldEjT_:
   95|  2.78k|    {
   96|  2.78k|        this->storage.SelectByType(type, max);
   97|  2.78k|        return IINField::Empty();
   98|  2.78k|    }
_ZN8opendnp311EventBuffer12SelectByTypeINS_20EventBinaryVariationEEENS_8IINFieldEjT_:
   95|  1.15k|    {
   96|  1.15k|        this->storage.SelectByType(type, max);
   97|  1.15k|        return IINField::Empty();
   98|  1.15k|    }
_ZN8opendnp311EventBuffer12SelectByTypeINS_26EventDoubleBinaryVariationEEENS_8IINFieldEjT_:
   95|    971|    {
   96|    971|        this->storage.SelectByType(type, max);
   97|    971|        return IINField::Empty();
   98|    971|    }
_ZN8opendnp311EventBuffer12SelectByTypeINS_32EventBinaryOutputStatusVariationEEENS_8IINFieldEjT_:
   95|  1.16k|    {
   96|  1.16k|        this->storage.SelectByType(type, max);
   97|  1.16k|        return IINField::Empty();
   98|  1.16k|    }
_ZN8opendnp311EventBuffer12SelectByTypeINS_21EventCounterVariationEEENS_8IINFieldEjT_:
   95|  1.60k|    {
   96|  1.60k|        this->storage.SelectByType(type, max);
   97|  1.60k|        return IINField::Empty();
   98|  1.60k|    }
_ZN8opendnp311EventBuffer12SelectByTypeINS_27EventFrozenCounterVariationEEENS_8IINFieldEjT_:
   95|  2.41k|    {
   96|  2.41k|        this->storage.SelectByType(type, max);
   97|  2.41k|        return IINField::Empty();
   98|  2.41k|    }
_ZN8opendnp311EventBuffer12SelectByTypeINS_20EventAnalogVariationEEENS_8IINFieldEjT_:
   95|  2.18k|    {
   96|  2.18k|        this->storage.SelectByType(type, max);
   97|  2.18k|        return IINField::Empty();
   98|  2.18k|    }
_ZN8opendnp311EventBuffer12SelectByTypeINS_32EventAnalogOutputStatusVariationEEENS_8IINFieldEjT_:
   95|  2.45k|    {
   96|  2.45k|        this->storage.SelectByType(type, max);
   97|  2.45k|        return IINField::Empty();
   98|  2.45k|    }
_ZN8opendnp311EventBuffer12SelectByTypeINS_25EventOctetStringVariationEEENS_8IINFieldEjT_:
   95|    386|    {
   96|    386|        this->storage.SelectByType(type, max);
   97|    386|        return IINField::Empty();
   98|    386|    }

_ZN8opendnp310EventListsC2ERKNS_17EventBufferConfigE:
   27|  8.87k|    : events(config.TotalEvents()),
   28|  8.87k|      binary(config.maxBinaryEvents),
   29|  8.87k|      doubleBinary(config.maxDoubleBinaryEvents),
   30|  8.87k|      analog(config.maxAnalogEvents),
   31|  8.87k|      counter(config.maxCounterEvents),
   32|  8.87k|      frozenCounter(config.maxFrozenCounterEvents),
   33|  8.87k|      binaryOutputStatus(config.maxBinaryOutputStatusEvents),
   34|  8.87k|      analogOutputStatus(config.maxAnalogOutputStatusEvents),
   35|  8.87k|      octetString(config.maxOctetStringEvents)
   36|  8.87k|{
   37|  8.87k|}
_ZN8opendnp310EventLists7GetListINS_10BinarySpecEEERNS_4ListINS_16TypedEventRecordIT_EEEEv:
   48|  1.44k|{
   49|  1.44k|    return this->binary;
   50|  1.44k|}
_ZN8opendnp310EventLists7GetListINS_19DoubleBitBinarySpecEEERNS_4ListINS_16TypedEventRecordIT_EEEEv:
   53|  1.40k|{
   54|  1.40k|    return this->doubleBinary;
   55|  1.40k|}
_ZN8opendnp310EventLists7GetListINS_11CounterSpecEEERNS_4ListINS_16TypedEventRecordIT_EEEEv:
   58|  2.19k|{
   59|  2.19k|    return this->counter;
   60|  2.19k|}
_ZN8opendnp310EventLists7GetListINS_17FrozenCounterSpecEEERNS_4ListINS_16TypedEventRecordIT_EEEEv:
   63|  2.82k|{
   64|  2.82k|    return this->frozenCounter;
   65|  2.82k|}
_ZN8opendnp310EventLists7GetListINS_10AnalogSpecEEERNS_4ListINS_16TypedEventRecordIT_EEEEv:
   68|  2.47k|{
   69|  2.47k|    return this->analog;
   70|  2.47k|}
_ZN8opendnp310EventLists7GetListINS_22BinaryOutputStatusSpecEEERNS_4ListINS_16TypedEventRecordIT_EEEEv:
   73|  1.47k|{
   74|  1.47k|    return this->binaryOutputStatus;
   75|  1.47k|}
_ZN8opendnp310EventLists7GetListINS_22AnalogOutputStatusSpecEEERNS_4ListINS_16TypedEventRecordIT_EEEEv:
   78|  2.90k|{
   79|  2.90k|    return this->analogOutputStatus;
   80|  2.90k|}
_ZN8opendnp310EventLists7GetListINS_15OctetStringSpecEEERNS_4ListINS_16TypedEventRecordIT_EEEEv:
   83|    386|{
   84|    386|    return this->octetString;
   85|    386|}

_ZN8opendnp314EventSelection13SelectByClassERNS_10EventListsERKNS_10ClassFieldEj:
   27|  1.19k|{
   28|  1.19k|    uint32_t num_selected = 0;
   29|  1.19k|    auto iter = lists.events.Iterate();
   30|       |
   31|  1.19k|    while (iter.HasNext() && num_selected < max)
  ------------------
  |  Branch (31:12): [True: 0, False: 1.19k]
  |  Branch (31:30): [True: 0, False: 0]
  ------------------
   32|      0|    {
   33|      0|        auto node = iter.Next();
   34|      0|        if (node->value.state == EventState::unselected && clazz.HasEventType(node->value.clazz))
  ------------------
  |  Branch (34:13): [True: 0, False: 0]
  |  Branch (34:60): [True: 0, False: 0]
  ------------------
   35|      0|        {
   36|       |            // if not previously selected
   37|      0|            node->value.state = EventState::selected;
   38|       |            // TODO - set the storage to use the default variation
   39|       |            // node->value.selectedVariation = useDefaultVariation ? node->value.defaultVariation : variation;
   40|      0|            ++num_selected;
   41|      0|            lists.counters.OnSelect();
   42|      0|        }
   43|      0|    }
   44|       |
   45|  1.19k|    return num_selected;
   46|  1.19k|}

_ZN8opendnp314EventSelection12SelectByTypeINS_10BinarySpecEEEjRNS_10EventListsENT_17event_variation_tEj:
   39|  1.15k|    {
   40|  1.15k|        return SelectByTypeGeneric<T>(lists, false, variation, max);
   41|  1.15k|    }
_ZN8opendnp314EventSelection19SelectByTypeGenericINS_10BinarySpecEEEjRNS_10EventListsEbNT_17event_variation_tEj:
   58|  1.44k|{
   59|  1.44k|    auto& list = lists.GetList<T>();
   60|       |
   61|  1.44k|    uint32_t num_selected = 0;
   62|       |
   63|  1.44k|    auto select = [&](TypedEventRecord<T>& node) -> bool {
   64|  1.44k|        if (num_selected == max)
   65|  1.44k|            return false;
   66|       |
   67|  1.44k|        if (node.record->value.state == EventState::unselected)
   68|  1.44k|        {
   69|  1.44k|            node.record->value.state = EventState::selected;
   70|  1.44k|            node.selectedVariation = useDefaultVariation ? node.defaultVariation : variation;
   71|  1.44k|            lists.counters.OnSelect();
   72|  1.44k|            ++num_selected;
   73|  1.44k|        }
   74|       |
   75|  1.44k|        return true;
   76|  1.44k|    };
   77|       |
   78|  1.44k|    list.ForeachWhile(select);
   79|       |
   80|  1.44k|    return num_selected;
   81|  1.44k|}
_ZN8opendnp314EventSelection12SelectByTypeINS_19DoubleBitBinarySpecEEEjRNS_10EventListsENT_17event_variation_tEj:
   39|    971|    {
   40|    971|        return SelectByTypeGeneric<T>(lists, false, variation, max);
   41|    971|    }
_ZN8opendnp314EventSelection19SelectByTypeGenericINS_19DoubleBitBinarySpecEEEjRNS_10EventListsEbNT_17event_variation_tEj:
   58|  1.40k|{
   59|  1.40k|    auto& list = lists.GetList<T>();
   60|       |
   61|  1.40k|    uint32_t num_selected = 0;
   62|       |
   63|  1.40k|    auto select = [&](TypedEventRecord<T>& node) -> bool {
   64|  1.40k|        if (num_selected == max)
   65|  1.40k|            return false;
   66|       |
   67|  1.40k|        if (node.record->value.state == EventState::unselected)
   68|  1.40k|        {
   69|  1.40k|            node.record->value.state = EventState::selected;
   70|  1.40k|            node.selectedVariation = useDefaultVariation ? node.defaultVariation : variation;
   71|  1.40k|            lists.counters.OnSelect();
   72|  1.40k|            ++num_selected;
   73|  1.40k|        }
   74|       |
   75|  1.40k|        return true;
   76|  1.40k|    };
   77|       |
   78|  1.40k|    list.ForeachWhile(select);
   79|       |
   80|  1.40k|    return num_selected;
   81|  1.40k|}
_ZN8opendnp314EventSelection12SelectByTypeINS_10AnalogSpecEEEjRNS_10EventListsENT_17event_variation_tEj:
   39|  2.18k|    {
   40|  2.18k|        return SelectByTypeGeneric<T>(lists, false, variation, max);
   41|  2.18k|    }
_ZN8opendnp314EventSelection19SelectByTypeGenericINS_10AnalogSpecEEEjRNS_10EventListsEbNT_17event_variation_tEj:
   58|  2.47k|{
   59|  2.47k|    auto& list = lists.GetList<T>();
   60|       |
   61|  2.47k|    uint32_t num_selected = 0;
   62|       |
   63|  2.47k|    auto select = [&](TypedEventRecord<T>& node) -> bool {
   64|  2.47k|        if (num_selected == max)
   65|  2.47k|            return false;
   66|       |
   67|  2.47k|        if (node.record->value.state == EventState::unselected)
   68|  2.47k|        {
   69|  2.47k|            node.record->value.state = EventState::selected;
   70|  2.47k|            node.selectedVariation = useDefaultVariation ? node.defaultVariation : variation;
   71|  2.47k|            lists.counters.OnSelect();
   72|  2.47k|            ++num_selected;
   73|  2.47k|        }
   74|       |
   75|  2.47k|        return true;
   76|  2.47k|    };
   77|       |
   78|  2.47k|    list.ForeachWhile(select);
   79|       |
   80|  2.47k|    return num_selected;
   81|  2.47k|}
_ZN8opendnp314EventSelection12SelectByTypeINS_11CounterSpecEEEjRNS_10EventListsENT_17event_variation_tEj:
   39|  1.60k|    {
   40|  1.60k|        return SelectByTypeGeneric<T>(lists, false, variation, max);
   41|  1.60k|    }
_ZN8opendnp314EventSelection19SelectByTypeGenericINS_11CounterSpecEEEjRNS_10EventListsEbNT_17event_variation_tEj:
   58|  2.19k|{
   59|  2.19k|    auto& list = lists.GetList<T>();
   60|       |
   61|  2.19k|    uint32_t num_selected = 0;
   62|       |
   63|  2.19k|    auto select = [&](TypedEventRecord<T>& node) -> bool {
   64|  2.19k|        if (num_selected == max)
   65|  2.19k|            return false;
   66|       |
   67|  2.19k|        if (node.record->value.state == EventState::unselected)
   68|  2.19k|        {
   69|  2.19k|            node.record->value.state = EventState::selected;
   70|  2.19k|            node.selectedVariation = useDefaultVariation ? node.defaultVariation : variation;
   71|  2.19k|            lists.counters.OnSelect();
   72|  2.19k|            ++num_selected;
   73|  2.19k|        }
   74|       |
   75|  2.19k|        return true;
   76|  2.19k|    };
   77|       |
   78|  2.19k|    list.ForeachWhile(select);
   79|       |
   80|  2.19k|    return num_selected;
   81|  2.19k|}
_ZN8opendnp314EventSelection12SelectByTypeINS_17FrozenCounterSpecEEEjRNS_10EventListsENT_17event_variation_tEj:
   39|  2.41k|    {
   40|  2.41k|        return SelectByTypeGeneric<T>(lists, false, variation, max);
   41|  2.41k|    }
_ZN8opendnp314EventSelection19SelectByTypeGenericINS_17FrozenCounterSpecEEEjRNS_10EventListsEbNT_17event_variation_tEj:
   58|  2.82k|{
   59|  2.82k|    auto& list = lists.GetList<T>();
   60|       |
   61|  2.82k|    uint32_t num_selected = 0;
   62|       |
   63|  2.82k|    auto select = [&](TypedEventRecord<T>& node) -> bool {
   64|  2.82k|        if (num_selected == max)
   65|  2.82k|            return false;
   66|       |
   67|  2.82k|        if (node.record->value.state == EventState::unselected)
   68|  2.82k|        {
   69|  2.82k|            node.record->value.state = EventState::selected;
   70|  2.82k|            node.selectedVariation = useDefaultVariation ? node.defaultVariation : variation;
   71|  2.82k|            lists.counters.OnSelect();
   72|  2.82k|            ++num_selected;
   73|  2.82k|        }
   74|       |
   75|  2.82k|        return true;
   76|  2.82k|    };
   77|       |
   78|  2.82k|    list.ForeachWhile(select);
   79|       |
   80|  2.82k|    return num_selected;
   81|  2.82k|}
_ZN8opendnp314EventSelection12SelectByTypeINS_22BinaryOutputStatusSpecEEEjRNS_10EventListsENT_17event_variation_tEj:
   39|  1.16k|    {
   40|  1.16k|        return SelectByTypeGeneric<T>(lists, false, variation, max);
   41|  1.16k|    }
_ZN8opendnp314EventSelection19SelectByTypeGenericINS_22BinaryOutputStatusSpecEEEjRNS_10EventListsEbNT_17event_variation_tEj:
   58|  1.47k|{
   59|  1.47k|    auto& list = lists.GetList<T>();
   60|       |
   61|  1.47k|    uint32_t num_selected = 0;
   62|       |
   63|  1.47k|    auto select = [&](TypedEventRecord<T>& node) -> bool {
   64|  1.47k|        if (num_selected == max)
   65|  1.47k|            return false;
   66|       |
   67|  1.47k|        if (node.record->value.state == EventState::unselected)
   68|  1.47k|        {
   69|  1.47k|            node.record->value.state = EventState::selected;
   70|  1.47k|            node.selectedVariation = useDefaultVariation ? node.defaultVariation : variation;
   71|  1.47k|            lists.counters.OnSelect();
   72|  1.47k|            ++num_selected;
   73|  1.47k|        }
   74|       |
   75|  1.47k|        return true;
   76|  1.47k|    };
   77|       |
   78|  1.47k|    list.ForeachWhile(select);
   79|       |
   80|  1.47k|    return num_selected;
   81|  1.47k|}
_ZN8opendnp314EventSelection12SelectByTypeINS_22AnalogOutputStatusSpecEEEjRNS_10EventListsENT_17event_variation_tEj:
   39|  2.45k|    {
   40|  2.45k|        return SelectByTypeGeneric<T>(lists, false, variation, max);
   41|  2.45k|    }
_ZN8opendnp314EventSelection19SelectByTypeGenericINS_22AnalogOutputStatusSpecEEEjRNS_10EventListsEbNT_17event_variation_tEj:
   58|  2.90k|{
   59|  2.90k|    auto& list = lists.GetList<T>();
   60|       |
   61|  2.90k|    uint32_t num_selected = 0;
   62|       |
   63|  2.90k|    auto select = [&](TypedEventRecord<T>& node) -> bool {
   64|  2.90k|        if (num_selected == max)
   65|  2.90k|            return false;
   66|       |
   67|  2.90k|        if (node.record->value.state == EventState::unselected)
   68|  2.90k|        {
   69|  2.90k|            node.record->value.state = EventState::selected;
   70|  2.90k|            node.selectedVariation = useDefaultVariation ? node.defaultVariation : variation;
   71|  2.90k|            lists.counters.OnSelect();
   72|  2.90k|            ++num_selected;
   73|  2.90k|        }
   74|       |
   75|  2.90k|        return true;
   76|  2.90k|    };
   77|       |
   78|  2.90k|    list.ForeachWhile(select);
   79|       |
   80|  2.90k|    return num_selected;
   81|  2.90k|}
_ZN8opendnp314EventSelection12SelectByTypeINS_15OctetStringSpecEEEjRNS_10EventListsENT_17event_variation_tEj:
   39|    386|    {
   40|    386|        return SelectByTypeGeneric<T>(lists, false, variation, max);
   41|    386|    }
_ZN8opendnp314EventSelection19SelectByTypeGenericINS_15OctetStringSpecEEEjRNS_10EventListsEbNT_17event_variation_tEj:
   58|    386|{
   59|    386|    auto& list = lists.GetList<T>();
   60|       |
   61|    386|    uint32_t num_selected = 0;
   62|       |
   63|    386|    auto select = [&](TypedEventRecord<T>& node) -> bool {
   64|    386|        if (num_selected == max)
   65|    386|            return false;
   66|       |
   67|    386|        if (node.record->value.state == EventState::unselected)
   68|    386|        {
   69|    386|            node.record->value.state = EventState::selected;
   70|    386|            node.selectedVariation = useDefaultVariation ? node.defaultVariation : variation;
   71|    386|            lists.counters.OnSelect();
   72|    386|            ++num_selected;
   73|    386|        }
   74|       |
   75|    386|        return true;
   76|    386|    };
   77|       |
   78|    386|    list.ForeachWhile(select);
   79|       |
   80|    386|    return num_selected;
   81|    386|}
_ZN8opendnp314EventSelection12SelectByTypeINS_10BinarySpecEEEjRNS_10EventListsEj:
   33|    288|    {
   34|    288|        return SelectByTypeGeneric<T>(lists, true, static_cast<typename T::event_variation_t>(0), max);
   35|    288|    }
_ZN8opendnp314EventSelection12SelectByTypeINS_19DoubleBitBinarySpecEEEjRNS_10EventListsEj:
   33|    438|    {
   34|    438|        return SelectByTypeGeneric<T>(lists, true, static_cast<typename T::event_variation_t>(0), max);
   35|    438|    }
_ZN8opendnp314EventSelection12SelectByTypeINS_11CounterSpecEEEjRNS_10EventListsEj:
   33|    593|    {
   34|    593|        return SelectByTypeGeneric<T>(lists, true, static_cast<typename T::event_variation_t>(0), max);
   35|    593|    }
_ZN8opendnp314EventSelection12SelectByTypeINS_17FrozenCounterSpecEEEjRNS_10EventListsEj:
   33|    418|    {
   34|    418|        return SelectByTypeGeneric<T>(lists, true, static_cast<typename T::event_variation_t>(0), max);
   35|    418|    }
_ZN8opendnp314EventSelection12SelectByTypeINS_10AnalogSpecEEEjRNS_10EventListsEj:
   33|    289|    {
   34|    289|        return SelectByTypeGeneric<T>(lists, true, static_cast<typename T::event_variation_t>(0), max);
   35|    289|    }
_ZN8opendnp314EventSelection12SelectByTypeINS_22BinaryOutputStatusSpecEEEjRNS_10EventListsEj:
   33|    310|    {
   34|    310|        return SelectByTypeGeneric<T>(lists, true, static_cast<typename T::event_variation_t>(0), max);
   35|    310|    }
_ZN8opendnp314EventSelection12SelectByTypeINS_22AnalogOutputStatusSpecEEEjRNS_10EventListsEj:
   33|    446|    {
   34|    446|        return SelectByTypeGeneric<T>(lists, true, static_cast<typename T::event_variation_t>(0), max);
   35|    446|    }

_ZN8opendnp312EventStorageC2ERKNS_17EventBufferConfigE:
   30|  8.87k|EventStorage::EventStorage(const EventBufferConfig& config) : state(config) {}
_ZNK8opendnp312EventStorage11NumSelectedEv:
   38|  4.34k|{
   39|  4.34k|    return this->state.counters.selected;
   40|  4.34k|}
_ZNK8opendnp312EventStorage12NumUnwrittenENS_10EventClassE:
   43|  25.1k|{
   44|  25.1k|    return this->state.counters.total.Get(clazz) - this->state.counters.written.Get(clazz);
   45|  25.1k|}
_ZN8opendnp312EventStorage12SelectByTypeENS_20EventBinaryVariationEj:
   88|  1.15k|{
   89|  1.15k|    return EventSelection::SelectByType<BinarySpec>(this->state, variation, max);
   90|  1.15k|}
_ZN8opendnp312EventStorage12SelectByTypeENS_26EventDoubleBinaryVariationEj:
   93|    971|{
   94|    971|    return EventSelection::SelectByType<DoubleBitBinarySpec>(this->state, variation, max);
   95|    971|}
_ZN8opendnp312EventStorage12SelectByTypeENS_20EventAnalogVariationEj:
   98|  2.18k|{
   99|  2.18k|    return EventSelection::SelectByType<AnalogSpec>(this->state, variation, max);
  100|  2.18k|}
_ZN8opendnp312EventStorage12SelectByTypeENS_21EventCounterVariationEj:
  103|  1.60k|{
  104|  1.60k|    return EventSelection::SelectByType<CounterSpec>(this->state, variation, max);
  105|  1.60k|}
_ZN8opendnp312EventStorage12SelectByTypeENS_27EventFrozenCounterVariationEj:
  108|  2.41k|{
  109|  2.41k|    return EventSelection::SelectByType<FrozenCounterSpec>(this->state, variation, max);
  110|  2.41k|}
_ZN8opendnp312EventStorage12SelectByTypeENS_32EventBinaryOutputStatusVariationEj:
  113|  1.16k|{
  114|  1.16k|    return EventSelection::SelectByType<BinaryOutputStatusSpec>(this->state, variation, max);
  115|      0|    return 0;
  116|  1.16k|}
_ZN8opendnp312EventStorage12SelectByTypeENS_32EventAnalogOutputStatusVariationEj:
  119|  2.45k|{
  120|  2.45k|    return EventSelection::SelectByType<AnalogOutputStatusSpec>(this->state, variation, max);
  121|  2.45k|}
_ZN8opendnp312EventStorage12SelectByTypeENS_25EventOctetStringVariationEj:
  124|    386|{
  125|    386|    return EventSelection::SelectByType<OctetStringSpec>(this->state, variation, max);
  126|    386|}
_ZN8opendnp312EventStorage12SelectByTypeENS_9EventTypeEj:
  129|  2.78k|{
  130|  2.78k|    switch (type)
  131|  2.78k|    {
  132|    288|    case (EventType::Binary):
  ------------------
  |  Branch (132:5): [True: 288, False: 2.49k]
  ------------------
  133|    288|        return EventSelection::SelectByType<BinarySpec>(this->state, max);
  134|    438|    case (EventType::DoubleBitBinary):
  ------------------
  |  Branch (134:5): [True: 438, False: 2.34k]
  ------------------
  135|    438|        return EventSelection::SelectByType<DoubleBitBinarySpec>(this->state, max);
  136|    593|    case (EventType::Counter):
  ------------------
  |  Branch (136:5): [True: 593, False: 2.18k]
  ------------------
  137|    593|        return EventSelection::SelectByType<CounterSpec>(this->state, max);
  138|    418|    case (EventType::FrozenCounter):
  ------------------
  |  Branch (138:5): [True: 418, False: 2.36k]
  ------------------
  139|    418|        return EventSelection::SelectByType<FrozenCounterSpec>(this->state, max);
  140|    289|    case (EventType::Analog):
  ------------------
  |  Branch (140:5): [True: 289, False: 2.49k]
  ------------------
  141|    289|        return EventSelection::SelectByType<AnalogSpec>(this->state, max);
  142|    310|    case (EventType::BinaryOutputStatus):
  ------------------
  |  Branch (142:5): [True: 310, False: 2.47k]
  ------------------
  143|    310|        return EventSelection::SelectByType<BinaryOutputStatusSpec>(this->state, max);
  144|    446|    case (EventType::AnalogOutputStatus):
  ------------------
  |  Branch (144:5): [True: 446, False: 2.33k]
  ------------------
  145|    446|        return EventSelection::SelectByType<AnalogOutputStatusSpec>(this->state, max);
  146|      0|    case (EventType::OctetString):
  ------------------
  |  Branch (146:5): [True: 0, False: 2.78k]
  ------------------
  147|      0|        return EventSelection::SelectByType<OctetStringSpec>(this->state, max);
  148|      0|    default:
  ------------------
  |  Branch (148:5): [True: 0, False: 2.78k]
  ------------------
  149|      0|        return 0;
  150|  2.78k|    }
  151|  2.78k|}
_ZN8opendnp312EventStorage13SelectByClassERKNS_10EventClassEj:
  159|  1.19k|{
  160|  1.19k|    return EventSelection::SelectByClass(this->state, ClassField(clazz), max);
  161|  1.19k|}
_ZN8opendnp312EventStorage5WriteERNS_18IEventWriteHandlerE:
  174|  4.34k|{
  175|  4.34k|    return EventWriting::Write(this->state, handler);
  176|  4.34k|}
_ZN8opendnp312EventStorage8UnselectEv:
  195|  4.71k|{
  196|  4.71k|    auto clear = [](EventRecord& record) -> void { record.state = EventState::unselected; };
  197|       |
  198|  4.71k|    this->state.events.Foreach(clear);
  199|       |
  200|       |    // keep the total, but clear the selected/written
  201|  4.71k|    this->state.counters.ResetOnFail();
  202|  4.71k|}

_ZN8opendnp313EventTypeImplINS_10BinarySpecEEC2Ev:
   36|      2|    EventTypeImpl() : IEventType(T::EventTypeEnum) {}
_ZN8opendnp313EventTypeImplINS_19DoubleBitBinarySpecEEC2Ev:
   36|      2|    EventTypeImpl() : IEventType(T::EventTypeEnum) {}
_ZN8opendnp313EventTypeImplINS_10AnalogSpecEEC2Ev:
   36|      2|    EventTypeImpl() : IEventType(T::EventTypeEnum) {}
_ZN8opendnp313EventTypeImplINS_11CounterSpecEEC2Ev:
   36|      2|    EventTypeImpl() : IEventType(T::EventTypeEnum) {}
_ZN8opendnp313EventTypeImplINS_17FrozenCounterSpecEEC2Ev:
   36|      2|    EventTypeImpl() : IEventType(T::EventTypeEnum) {}
_ZN8opendnp313EventTypeImplINS_22BinaryOutputStatusSpecEEC2Ev:
   36|      2|    EventTypeImpl() : IEventType(T::EventTypeEnum) {}
_ZN8opendnp313EventTypeImplINS_22AnalogOutputStatusSpecEEC2Ev:
   36|      2|    EventTypeImpl() : IEventType(T::EventTypeEnum) {}
_ZN8opendnp313EventTypeImplINS_15OctetStringSpecEEC2Ev:
   36|      2|    EventTypeImpl() : IEventType(T::EventTypeEnum) {}

_ZN8opendnp312EventWriting5WriteERNS_10EventListsERNS_18IEventWriteHandlerE:
   30|  4.34k|{
   31|  4.34k|    uint32_t total_num_written = 0;
   32|       |
   33|  4.34k|    auto iterator = lists.events.Iterate();
   34|       |
   35|  4.34k|    while (true)
  ------------------
  |  Branch (35:12): [True: 4.34k, Folded]
  ------------------
   36|  4.34k|    {
   37|       |        // continue calling WriteSome(..) until it fails to make progress
   38|  4.34k|        auto num_written = WriteSome(iterator, lists, handler);
   39|       |
   40|  4.34k|        if (num_written == 0)
  ------------------
  |  Branch (40:13): [True: 4.34k, False: 0]
  ------------------
   41|  4.34k|        {
   42|  4.34k|            return total_num_written;
   43|  4.34k|        }
   44|       |
   45|      0|        total_num_written += num_written;
   46|      0|    }
   47|  4.34k|}
_ZN8opendnp312EventWriting9WriteSomeERNS_4ListINS_11EventRecordEE8IteratorERNS_10EventListsERNS_18IEventWriteHandlerE:
   68|  4.34k|{
   69|       |    // don't bother searching
   70|  4.34k|    if (lists.counters.selected == 0)
  ------------------
  |  Branch (70:9): [True: 4.34k, False: 0]
  ------------------
   71|  4.34k|        return 0;
   72|       |
   73|      0|    const auto value = iterator.Find([](const EventRecord& record) { return record.state == EventState::selected; });
   74|       |
   75|      0|    if (!value)
  ------------------
  |  Branch (75:9): [True: 0, False: 0]
  ------------------
   76|      0|        return 0; // no match
   77|       |
   78|      0|    return value->type->WriteSome(iterator, lists, handler);
   79|      0|}

_ZN8opendnp310IEventTypeC2ENS_9EventTypeE:
   52|     16|    IEventType(EventType value) : value(value) {}

_ZN8opendnp34ListINS_16TypedEventRecordINS_10BinarySpecEEEE12ForeachWhileIZNS_14EventSelection19SelectByTypeGenericIS2_EEjRNS_10EventListsEbNT_17event_variation_tEjEUlRS3_E_EEvRKSA_:
  142|  1.44k|{
  143|  1.44k|    auto iter = this->Iterate();
  144|  1.44k|    bool result = true;
  145|  1.44k|    while (result && iter.HasNext())
  ------------------
  |  Branch (145:12): [True: 1.44k, False: 0]
  |  Branch (145:22): [True: 0, False: 1.44k]
  ------------------
  146|      0|    {
  147|      0|        result = select(iter.Next()->value);
  148|      0|    }
  149|  1.44k|}
_ZNK8opendnp34ListINS_16TypedEventRecordINS_10BinarySpecEEEE7IterateEv:
  106|  1.44k|    {
  107|  1.44k|        return Iterator::From(this->head);
  108|  1.44k|    }
_ZN8opendnp34ListINS_16TypedEventRecordINS_10BinarySpecEEEE8Iterator4FromEPNS_4NodeIS3_EE:
   54|  1.44k|        {
   55|  1.44k|            return Iterator(start);
   56|  1.44k|        }
_ZN8opendnp34ListINS_16TypedEventRecordINS_10BinarySpecEEEE8IteratorC2EPNS_4NodeIS3_EE:
   85|  1.44k|        Iterator(Node<T>* start) : current(start) {}
_ZNK8opendnp34ListINS_16TypedEventRecordINS_10BinarySpecEEEE8Iterator7HasNextEv:
   61|  1.44k|        {
   62|  1.44k|            return this->current;
   63|  1.44k|        }
_ZN8opendnp34ListINS_16TypedEventRecordINS_19DoubleBitBinarySpecEEEE12ForeachWhileIZNS_14EventSelection19SelectByTypeGenericIS2_EEjRNS_10EventListsEbNT_17event_variation_tEjEUlRS3_E_EEvRKSA_:
  142|  1.40k|{
  143|  1.40k|    auto iter = this->Iterate();
  144|  1.40k|    bool result = true;
  145|  1.40k|    while (result && iter.HasNext())
  ------------------
  |  Branch (145:12): [True: 1.40k, False: 0]
  |  Branch (145:22): [True: 0, False: 1.40k]
  ------------------
  146|      0|    {
  147|      0|        result = select(iter.Next()->value);
  148|      0|    }
  149|  1.40k|}
_ZNK8opendnp34ListINS_16TypedEventRecordINS_19DoubleBitBinarySpecEEEE7IterateEv:
  106|  1.40k|    {
  107|  1.40k|        return Iterator::From(this->head);
  108|  1.40k|    }
_ZN8opendnp34ListINS_16TypedEventRecordINS_19DoubleBitBinarySpecEEEE8Iterator4FromEPNS_4NodeIS3_EE:
   54|  1.40k|        {
   55|  1.40k|            return Iterator(start);
   56|  1.40k|        }
_ZN8opendnp34ListINS_16TypedEventRecordINS_19DoubleBitBinarySpecEEEE8IteratorC2EPNS_4NodeIS3_EE:
   85|  1.40k|        Iterator(Node<T>* start) : current(start) {}
_ZNK8opendnp34ListINS_16TypedEventRecordINS_19DoubleBitBinarySpecEEEE8Iterator7HasNextEv:
   61|  1.40k|        {
   62|  1.40k|            return this->current;
   63|  1.40k|        }
_ZN8opendnp34ListINS_16TypedEventRecordINS_10AnalogSpecEEEE12ForeachWhileIZNS_14EventSelection19SelectByTypeGenericIS2_EEjRNS_10EventListsEbNT_17event_variation_tEjEUlRS3_E_EEvRKSA_:
  142|  2.47k|{
  143|  2.47k|    auto iter = this->Iterate();
  144|  2.47k|    bool result = true;
  145|  2.47k|    while (result && iter.HasNext())
  ------------------
  |  Branch (145:12): [True: 2.47k, False: 0]
  |  Branch (145:22): [True: 0, False: 2.47k]
  ------------------
  146|      0|    {
  147|      0|        result = select(iter.Next()->value);
  148|      0|    }
  149|  2.47k|}
_ZNK8opendnp34ListINS_16TypedEventRecordINS_10AnalogSpecEEEE7IterateEv:
  106|  2.47k|    {
  107|  2.47k|        return Iterator::From(this->head);
  108|  2.47k|    }
_ZN8opendnp34ListINS_16TypedEventRecordINS_10AnalogSpecEEEE8Iterator4FromEPNS_4NodeIS3_EE:
   54|  2.47k|        {
   55|  2.47k|            return Iterator(start);
   56|  2.47k|        }
_ZN8opendnp34ListINS_16TypedEventRecordINS_10AnalogSpecEEEE8IteratorC2EPNS_4NodeIS3_EE:
   85|  2.47k|        Iterator(Node<T>* start) : current(start) {}
_ZNK8opendnp34ListINS_16TypedEventRecordINS_10AnalogSpecEEEE8Iterator7HasNextEv:
   61|  2.47k|        {
   62|  2.47k|            return this->current;
   63|  2.47k|        }
_ZN8opendnp34ListINS_16TypedEventRecordINS_11CounterSpecEEEE12ForeachWhileIZNS_14EventSelection19SelectByTypeGenericIS2_EEjRNS_10EventListsEbNT_17event_variation_tEjEUlRS3_E_EEvRKSA_:
  142|  2.19k|{
  143|  2.19k|    auto iter = this->Iterate();
  144|  2.19k|    bool result = true;
  145|  2.19k|    while (result && iter.HasNext())
  ------------------
  |  Branch (145:12): [True: 2.19k, False: 0]
  |  Branch (145:22): [True: 0, False: 2.19k]
  ------------------
  146|      0|    {
  147|      0|        result = select(iter.Next()->value);
  148|      0|    }
  149|  2.19k|}
_ZNK8opendnp34ListINS_16TypedEventRecordINS_11CounterSpecEEEE7IterateEv:
  106|  2.19k|    {
  107|  2.19k|        return Iterator::From(this->head);
  108|  2.19k|    }
_ZN8opendnp34ListINS_16TypedEventRecordINS_11CounterSpecEEEE8Iterator4FromEPNS_4NodeIS3_EE:
   54|  2.19k|        {
   55|  2.19k|            return Iterator(start);
   56|  2.19k|        }
_ZN8opendnp34ListINS_16TypedEventRecordINS_11CounterSpecEEEE8IteratorC2EPNS_4NodeIS3_EE:
   85|  2.19k|        Iterator(Node<T>* start) : current(start) {}
_ZNK8opendnp34ListINS_16TypedEventRecordINS_11CounterSpecEEEE8Iterator7HasNextEv:
   61|  2.19k|        {
   62|  2.19k|            return this->current;
   63|  2.19k|        }
_ZN8opendnp34ListINS_16TypedEventRecordINS_17FrozenCounterSpecEEEE12ForeachWhileIZNS_14EventSelection19SelectByTypeGenericIS2_EEjRNS_10EventListsEbNT_17event_variation_tEjEUlRS3_E_EEvRKSA_:
  142|  2.82k|{
  143|  2.82k|    auto iter = this->Iterate();
  144|  2.82k|    bool result = true;
  145|  2.82k|    while (result && iter.HasNext())
  ------------------
  |  Branch (145:12): [True: 2.82k, False: 0]
  |  Branch (145:22): [True: 0, False: 2.82k]
  ------------------
  146|      0|    {
  147|      0|        result = select(iter.Next()->value);
  148|      0|    }
  149|  2.82k|}
_ZNK8opendnp34ListINS_16TypedEventRecordINS_17FrozenCounterSpecEEEE7IterateEv:
  106|  2.82k|    {
  107|  2.82k|        return Iterator::From(this->head);
  108|  2.82k|    }
_ZN8opendnp34ListINS_16TypedEventRecordINS_17FrozenCounterSpecEEEE8Iterator4FromEPNS_4NodeIS3_EE:
   54|  2.82k|        {
   55|  2.82k|            return Iterator(start);
   56|  2.82k|        }
_ZN8opendnp34ListINS_16TypedEventRecordINS_17FrozenCounterSpecEEEE8IteratorC2EPNS_4NodeIS3_EE:
   85|  2.82k|        Iterator(Node<T>* start) : current(start) {}
_ZNK8opendnp34ListINS_16TypedEventRecordINS_17FrozenCounterSpecEEEE8Iterator7HasNextEv:
   61|  2.82k|        {
   62|  2.82k|            return this->current;
   63|  2.82k|        }
_ZN8opendnp34ListINS_16TypedEventRecordINS_22BinaryOutputStatusSpecEEEE12ForeachWhileIZNS_14EventSelection19SelectByTypeGenericIS2_EEjRNS_10EventListsEbNT_17event_variation_tEjEUlRS3_E_EEvRKSA_:
  142|  1.47k|{
  143|  1.47k|    auto iter = this->Iterate();
  144|  1.47k|    bool result = true;
  145|  1.47k|    while (result && iter.HasNext())
  ------------------
  |  Branch (145:12): [True: 1.47k, False: 0]
  |  Branch (145:22): [True: 0, False: 1.47k]
  ------------------
  146|      0|    {
  147|      0|        result = select(iter.Next()->value);
  148|      0|    }
  149|  1.47k|}
_ZNK8opendnp34ListINS_16TypedEventRecordINS_22BinaryOutputStatusSpecEEEE7IterateEv:
  106|  1.47k|    {
  107|  1.47k|        return Iterator::From(this->head);
  108|  1.47k|    }
_ZN8opendnp34ListINS_16TypedEventRecordINS_22BinaryOutputStatusSpecEEEE8Iterator4FromEPNS_4NodeIS3_EE:
   54|  1.47k|        {
   55|  1.47k|            return Iterator(start);
   56|  1.47k|        }
_ZN8opendnp34ListINS_16TypedEventRecordINS_22BinaryOutputStatusSpecEEEE8IteratorC2EPNS_4NodeIS3_EE:
   85|  1.47k|        Iterator(Node<T>* start) : current(start) {}
_ZNK8opendnp34ListINS_16TypedEventRecordINS_22BinaryOutputStatusSpecEEEE8Iterator7HasNextEv:
   61|  1.47k|        {
   62|  1.47k|            return this->current;
   63|  1.47k|        }
_ZN8opendnp34ListINS_16TypedEventRecordINS_22AnalogOutputStatusSpecEEEE12ForeachWhileIZNS_14EventSelection19SelectByTypeGenericIS2_EEjRNS_10EventListsEbNT_17event_variation_tEjEUlRS3_E_EEvRKSA_:
  142|  2.90k|{
  143|  2.90k|    auto iter = this->Iterate();
  144|  2.90k|    bool result = true;
  145|  2.90k|    while (result && iter.HasNext())
  ------------------
  |  Branch (145:12): [True: 2.90k, False: 0]
  |  Branch (145:22): [True: 0, False: 2.90k]
  ------------------
  146|      0|    {
  147|      0|        result = select(iter.Next()->value);
  148|      0|    }
  149|  2.90k|}
_ZNK8opendnp34ListINS_16TypedEventRecordINS_22AnalogOutputStatusSpecEEEE7IterateEv:
  106|  2.90k|    {
  107|  2.90k|        return Iterator::From(this->head);
  108|  2.90k|    }
_ZN8opendnp34ListINS_16TypedEventRecordINS_22AnalogOutputStatusSpecEEEE8Iterator4FromEPNS_4NodeIS3_EE:
   54|  2.90k|        {
   55|  2.90k|            return Iterator(start);
   56|  2.90k|        }
_ZN8opendnp34ListINS_16TypedEventRecordINS_22AnalogOutputStatusSpecEEEE8IteratorC2EPNS_4NodeIS3_EE:
   85|  2.90k|        Iterator(Node<T>* start) : current(start) {}
_ZNK8opendnp34ListINS_16TypedEventRecordINS_22AnalogOutputStatusSpecEEEE8Iterator7HasNextEv:
   61|  2.90k|        {
   62|  2.90k|            return this->current;
   63|  2.90k|        }
_ZN8opendnp34ListINS_16TypedEventRecordINS_15OctetStringSpecEEEE12ForeachWhileIZNS_14EventSelection19SelectByTypeGenericIS2_EEjRNS_10EventListsEbNT_17event_variation_tEjEUlRS3_E_EEvRKSA_:
  142|    386|{
  143|    386|    auto iter = this->Iterate();
  144|    386|    bool result = true;
  145|    386|    while (result && iter.HasNext())
  ------------------
  |  Branch (145:12): [True: 386, False: 0]
  |  Branch (145:22): [True: 0, False: 386]
  ------------------
  146|      0|    {
  147|      0|        result = select(iter.Next()->value);
  148|      0|    }
  149|    386|}
_ZNK8opendnp34ListINS_16TypedEventRecordINS_15OctetStringSpecEEEE7IterateEv:
  106|    386|    {
  107|    386|        return Iterator::From(this->head);
  108|    386|    }
_ZN8opendnp34ListINS_16TypedEventRecordINS_15OctetStringSpecEEEE8Iterator4FromEPNS_4NodeIS3_EE:
   54|    386|        {
   55|    386|            return Iterator(start);
   56|    386|        }
_ZN8opendnp34ListINS_16TypedEventRecordINS_15OctetStringSpecEEEE8IteratorC2EPNS_4NodeIS3_EE:
   85|    386|        Iterator(Node<T>* start) : current(start) {}
_ZNK8opendnp34ListINS_16TypedEventRecordINS_15OctetStringSpecEEEE8Iterator7HasNextEv:
   61|    386|        {
   62|    386|            return this->current;
   63|    386|        }
_ZNK8opendnp34ListINS_11EventRecordEE7IterateEv:
  106|  10.2k|    {
  107|  10.2k|        return Iterator::From(this->head);
  108|  10.2k|    }
_ZN8opendnp34ListINS_11EventRecordEE8Iterator4FromEPNS_4NodeIS1_EE:
   54|  10.2k|        {
   55|  10.2k|            return Iterator(start);
   56|  10.2k|        }
_ZN8opendnp34ListINS_11EventRecordEE8IteratorC2EPNS_4NodeIS1_EE:
   85|  10.2k|        Iterator(Node<T>* start) : current(start) {}
EventStorage.cpp:_ZN8opendnp34ListINS_11EventRecordEE7ForeachIZNS_12EventStorage8UnselectEvE3$_0EEvRKT_:
  152|  4.71k|{
  153|  4.71k|    auto iter = this->Iterate();
  154|  4.71k|    while (iter.HasNext())
  ------------------
  |  Branch (154:12): [True: 0, False: 4.71k]
  ------------------
  155|      0|    {
  156|      0|        action(iter.Next()->value);
  157|      0|    }
  158|  4.71k|}
_ZNK8opendnp34ListINS_11EventRecordEE8Iterator7HasNextEv:
   61|  5.91k|        {
   62|  5.91k|            return this->current;
   63|  5.91k|        }
_ZN8opendnp34ListINS_11EventRecordEEC2Ej:
   90|  8.87k|    List(list_size_type_t maxSize) : ser4cpp::HasLength<list_size_type_t>(0), underlying(maxSize)
   91|  8.87k|    {
   92|  8.87k|        Initialize();
   93|  8.87k|    }
_ZN8opendnp34ListINS_11EventRecordEE10InitializeEv:
  251|  8.87k|{
  252|  8.87k|    if (underlying.is_empty())
  ------------------
  |  Branch (252:9): [True: 8.87k, False: 0]
  ------------------
  253|  8.87k|        return;
  254|       |
  255|      0|    this->free = &underlying[0];
  256|      0|    for (list_size_type_t i = 1; i < underlying.length(); ++i)
  ------------------
  |  Branch (256:34): [True: 0, False: 0]
  ------------------
  257|      0|    {
  258|      0|        Link(&underlying[i - 1], &underlying[i]);
  259|      0|    }
  260|      0|}
_ZN8opendnp34ListINS_16TypedEventRecordINS_10BinarySpecEEEEC2Ej:
   90|  8.87k|    List(list_size_type_t maxSize) : ser4cpp::HasLength<list_size_type_t>(0), underlying(maxSize)
   91|  8.87k|    {
   92|  8.87k|        Initialize();
   93|  8.87k|    }
_ZN8opendnp34ListINS_16TypedEventRecordINS_10BinarySpecEEEE10InitializeEv:
  251|  8.87k|{
  252|  8.87k|    if (underlying.is_empty())
  ------------------
  |  Branch (252:9): [True: 8.87k, False: 0]
  ------------------
  253|  8.87k|        return;
  254|       |
  255|      0|    this->free = &underlying[0];
  256|      0|    for (list_size_type_t i = 1; i < underlying.length(); ++i)
  ------------------
  |  Branch (256:34): [True: 0, False: 0]
  ------------------
  257|      0|    {
  258|      0|        Link(&underlying[i - 1], &underlying[i]);
  259|      0|    }
  260|      0|}
_ZN8opendnp34ListINS_16TypedEventRecordINS_19DoubleBitBinarySpecEEEEC2Ej:
   90|  8.87k|    List(list_size_type_t maxSize) : ser4cpp::HasLength<list_size_type_t>(0), underlying(maxSize)
   91|  8.87k|    {
   92|  8.87k|        Initialize();
   93|  8.87k|    }
_ZN8opendnp34ListINS_16TypedEventRecordINS_19DoubleBitBinarySpecEEEE10InitializeEv:
  251|  8.87k|{
  252|  8.87k|    if (underlying.is_empty())
  ------------------
  |  Branch (252:9): [True: 8.87k, False: 0]
  ------------------
  253|  8.87k|        return;
  254|       |
  255|      0|    this->free = &underlying[0];
  256|      0|    for (list_size_type_t i = 1; i < underlying.length(); ++i)
  ------------------
  |  Branch (256:34): [True: 0, False: 0]
  ------------------
  257|      0|    {
  258|      0|        Link(&underlying[i - 1], &underlying[i]);
  259|      0|    }
  260|      0|}
_ZN8opendnp34ListINS_16TypedEventRecordINS_10AnalogSpecEEEEC2Ej:
   90|  8.87k|    List(list_size_type_t maxSize) : ser4cpp::HasLength<list_size_type_t>(0), underlying(maxSize)
   91|  8.87k|    {
   92|  8.87k|        Initialize();
   93|  8.87k|    }
_ZN8opendnp34ListINS_16TypedEventRecordINS_10AnalogSpecEEEE10InitializeEv:
  251|  8.87k|{
  252|  8.87k|    if (underlying.is_empty())
  ------------------
  |  Branch (252:9): [True: 8.87k, False: 0]
  ------------------
  253|  8.87k|        return;
  254|       |
  255|      0|    this->free = &underlying[0];
  256|      0|    for (list_size_type_t i = 1; i < underlying.length(); ++i)
  ------------------
  |  Branch (256:34): [True: 0, False: 0]
  ------------------
  257|      0|    {
  258|      0|        Link(&underlying[i - 1], &underlying[i]);
  259|      0|    }
  260|      0|}
_ZN8opendnp34ListINS_16TypedEventRecordINS_11CounterSpecEEEEC2Ej:
   90|  8.87k|    List(list_size_type_t maxSize) : ser4cpp::HasLength<list_size_type_t>(0), underlying(maxSize)
   91|  8.87k|    {
   92|  8.87k|        Initialize();
   93|  8.87k|    }
_ZN8opendnp34ListINS_16TypedEventRecordINS_11CounterSpecEEEE10InitializeEv:
  251|  8.87k|{
  252|  8.87k|    if (underlying.is_empty())
  ------------------
  |  Branch (252:9): [True: 8.87k, False: 0]
  ------------------
  253|  8.87k|        return;
  254|       |
  255|      0|    this->free = &underlying[0];
  256|      0|    for (list_size_type_t i = 1; i < underlying.length(); ++i)
  ------------------
  |  Branch (256:34): [True: 0, False: 0]
  ------------------
  257|      0|    {
  258|      0|        Link(&underlying[i - 1], &underlying[i]);
  259|      0|    }
  260|      0|}
_ZN8opendnp34ListINS_16TypedEventRecordINS_17FrozenCounterSpecEEEEC2Ej:
   90|  8.87k|    List(list_size_type_t maxSize) : ser4cpp::HasLength<list_size_type_t>(0), underlying(maxSize)
   91|  8.87k|    {
   92|  8.87k|        Initialize();
   93|  8.87k|    }
_ZN8opendnp34ListINS_16TypedEventRecordINS_17FrozenCounterSpecEEEE10InitializeEv:
  251|  8.87k|{
  252|  8.87k|    if (underlying.is_empty())
  ------------------
  |  Branch (252:9): [True: 8.87k, False: 0]
  ------------------
  253|  8.87k|        return;
  254|       |
  255|      0|    this->free = &underlying[0];
  256|      0|    for (list_size_type_t i = 1; i < underlying.length(); ++i)
  ------------------
  |  Branch (256:34): [True: 0, False: 0]
  ------------------
  257|      0|    {
  258|      0|        Link(&underlying[i - 1], &underlying[i]);
  259|      0|    }
  260|      0|}
_ZN8opendnp34ListINS_16TypedEventRecordINS_22BinaryOutputStatusSpecEEEEC2Ej:
   90|  8.87k|    List(list_size_type_t maxSize) : ser4cpp::HasLength<list_size_type_t>(0), underlying(maxSize)
   91|  8.87k|    {
   92|  8.87k|        Initialize();
   93|  8.87k|    }
_ZN8opendnp34ListINS_16TypedEventRecordINS_22BinaryOutputStatusSpecEEEE10InitializeEv:
  251|  8.87k|{
  252|  8.87k|    if (underlying.is_empty())
  ------------------
  |  Branch (252:9): [True: 8.87k, False: 0]
  ------------------
  253|  8.87k|        return;
  254|       |
  255|      0|    this->free = &underlying[0];
  256|      0|    for (list_size_type_t i = 1; i < underlying.length(); ++i)
  ------------------
  |  Branch (256:34): [True: 0, False: 0]
  ------------------
  257|      0|    {
  258|      0|        Link(&underlying[i - 1], &underlying[i]);
  259|      0|    }
  260|      0|}
_ZN8opendnp34ListINS_16TypedEventRecordINS_22AnalogOutputStatusSpecEEEEC2Ej:
   90|  8.87k|    List(list_size_type_t maxSize) : ser4cpp::HasLength<list_size_type_t>(0), underlying(maxSize)
   91|  8.87k|    {
   92|  8.87k|        Initialize();
   93|  8.87k|    }
_ZN8opendnp34ListINS_16TypedEventRecordINS_22AnalogOutputStatusSpecEEEE10InitializeEv:
  251|  8.87k|{
  252|  8.87k|    if (underlying.is_empty())
  ------------------
  |  Branch (252:9): [True: 8.87k, False: 0]
  ------------------
  253|  8.87k|        return;
  254|       |
  255|      0|    this->free = &underlying[0];
  256|      0|    for (list_size_type_t i = 1; i < underlying.length(); ++i)
  ------------------
  |  Branch (256:34): [True: 0, False: 0]
  ------------------
  257|      0|    {
  258|      0|        Link(&underlying[i - 1], &underlying[i]);
  259|      0|    }
  260|      0|}
_ZN8opendnp34ListINS_16TypedEventRecordINS_15OctetStringSpecEEEEC2Ej:
   90|  8.87k|    List(list_size_type_t maxSize) : ser4cpp::HasLength<list_size_type_t>(0), underlying(maxSize)
   91|  8.87k|    {
   92|  8.87k|        Initialize();
   93|  8.87k|    }
_ZN8opendnp34ListINS_16TypedEventRecordINS_15OctetStringSpecEEEE10InitializeEv:
  251|  8.87k|{
  252|  8.87k|    if (underlying.is_empty())
  ------------------
  |  Branch (252:9): [True: 8.87k, False: 0]
  ------------------
  253|  8.87k|        return;
  254|       |
  255|      0|    this->free = &underlying[0];
  256|      0|    for (list_size_type_t i = 1; i < underlying.length(); ++i)
  ------------------
  |  Branch (256:34): [True: 0, False: 0]
  ------------------
  257|      0|    {
  258|      0|        Link(&underlying[i - 1], &underlying[i]);
  259|      0|    }
  260|      0|}

_ZN8opendnp312TimeDuration7SecondsEl:
   68|  8.88k|{
   69|  8.88k|    return FromValue<std::chrono::seconds>(seconds);
   70|  8.88k|}
_ZN8opendnp312TimeDurationC2Ev:
   78|  8.87k|TimeDuration::TimeDuration() : value(std::chrono::milliseconds(0)) {}
_ZN8opendnp312TimeDurationC2ENSt3__16chrono8durationIxNS1_5ratioILl1ELl1000000000EEEEE:
  124|  8.88k|TimeDuration::TimeDuration(exe4cpp::duration_t value) : value(value) {}
_ZN8opendnp312TimeDuration9FromValueINSt3__16chrono8durationIxNS2_5ratioILl1ELl1EEEEEEES0_l:
   43|  8.88k|{
   44|       |    // > this will overflow when converting to nanos
   45|  8.88k|    const auto MAX = std::chrono::duration_cast<T>(std::chrono::steady_clock::duration::max()).count();
   46|  8.88k|    const auto MIN = std::chrono::duration_cast<T>(std::chrono::steady_clock::duration::min()).count();
   47|       |
   48|  8.88k|    if (value > MAX)
  ------------------
  |  Branch (48:9): [True: 0, False: 8.88k]
  ------------------
   49|      0|    {
   50|      0|        return TimeDuration(std::chrono::steady_clock::duration::max());
   51|      0|    }
   52|       |
   53|  8.88k|    if (value < MIN)
  ------------------
  |  Branch (53:9): [True: 0, False: 8.88k]
  ------------------
   54|      0|    {
   55|      0|        return TimeDuration(std::chrono::steady_clock::duration::min());
   56|      0|    }
   57|       |
   58|  8.88k|    return TimeDuration(T(value));
   59|  8.88k|}

_ZN8opendnp39TimestampC2Ev:
   47|  17.7k|Timestamp::Timestamp() : value(exe4cpp::steady_time_t::min()) {}
_ZN8opendnp39TimestampC2ENSt3__16chrono10time_pointINS2_12steady_clockENS2_8durationIxNS1_5ratioILl1ELl1000000000EEEEEEE:
   49|  3.14k|Timestamp::Timestamp(exe4cpp::steady_time_t value) : value(value) {}

_ZN18MockCommandHandlerC2EN8opendnp313CommandStatusE:
   43|  8.87k|        : opendnp3::SimpleCommandHandler(status)
   44|  8.87k|    {
   45|  8.87k|    }
_ZN18MockCommandHandler9DoOperateERKN8opendnp323ControlRelayOutputBlockEtNS0_11OperateTypeE:
   71|  1.52k|    {
   72|  1.52k|        this->crobOps.push_back(Operation<opendnp3::ControlRelayOutputBlock>(command, index, opType));
   73|  1.52k|    }
_ZN9OperationIN8opendnp323ControlRelayOutputBlockEEC2ES1_tNS0_11OperateTypeE:
   32|  1.52k|        : opendnp3::Indexed<T>(value, index), opType(opType_)
   33|  1.52k|    {
   34|  1.52k|    }
_ZN18MockCommandHandler9DoOperateERKN8opendnp317AnalogOutputInt16EtNS0_11OperateTypeE:
   78|  13.2k|    {
   79|  13.2k|        this->aoInt16Ops.push_back(Operation<opendnp3::AnalogOutputInt16>(command, index, opType));
   80|  13.2k|    }
_ZN9OperationIN8opendnp317AnalogOutputInt16EEC2ES1_tNS0_11OperateTypeE:
   32|  13.2k|        : opendnp3::Indexed<T>(value, index), opType(opType_)
   33|  13.2k|    {
   34|  13.2k|    }
_ZN18MockCommandHandler9DoOperateERKN8opendnp317AnalogOutputInt32EtNS0_11OperateTypeE:
   85|  2.54k|    {
   86|  2.54k|        this->aoInt32Ops.push_back(Operation<opendnp3::AnalogOutputInt32>(command, index, opType));
   87|  2.54k|    }
_ZN9OperationIN8opendnp317AnalogOutputInt32EEC2ES1_tNS0_11OperateTypeE:
   32|  2.54k|        : opendnp3::Indexed<T>(value, index), opType(opType_)
   33|  2.54k|    {
   34|  2.54k|    }
_ZN18MockCommandHandler9DoOperateERKN8opendnp319AnalogOutputFloat32EtNS0_11OperateTypeE:
   92|  4.68k|    {
   93|  4.68k|        this->aoFloat32Ops.push_back(Operation<opendnp3::AnalogOutputFloat32>(command, index, opType));
   94|  4.68k|    }
_ZN9OperationIN8opendnp319AnalogOutputFloat32EEC2ES1_tNS0_11OperateTypeE:
   32|  4.68k|        : opendnp3::Indexed<T>(value, index), opType(opType_)
   33|  4.68k|    {
   34|  4.68k|    }
_ZN18MockCommandHandler9DoOperateERKN8opendnp320AnalogOutputDouble64EtNS0_11OperateTypeE:
   99|  3.99k|    {
  100|  3.99k|        this->aoDouble64Ops.push_back(Operation<opendnp3::AnalogOutputDouble64>(command, index, opType));
  101|  3.99k|    }
_ZN9OperationIN8opendnp320AnalogOutputDouble64EEC2ES1_tNS0_11OperateTypeE:
   32|  3.99k|        : opendnp3::Indexed<T>(value, index), opType(opType_)
   33|  3.99k|    {
   34|  3.99k|    }

_ZN25MockOutstationApplicationC2Ev:
   40|  8.87k|        : currentTime(opendnp3::DNPTime(0, opendnp3::TimestampQuality::INVALID)),
   41|  8.87k|          supportsTimeWrite(true),
   42|  8.87k|          supportsAssignClass(false),
   43|  8.87k|          supportsWriteTimeAndInterval(false),
   44|  8.87k|          allowTimeWrite(true),
   45|  8.87k|          warmRestartSupport(opendnp3::RestartMode::UNSUPPORTED),
   46|  8.87k|          coldRestartSupport(opendnp3::RestartMode::UNSUPPORTED),
   47|  8.87k|          warmRestartTimeDelay(0),
   48|  8.87k|          coldRestartTimeDelay(0)
   49|  8.87k|    {
   50|  8.87k|    }
_ZN25MockOutstationApplication25SupportsWriteAbsoluteTimeEv:
   60|  1.11k|    {
   61|  1.11k|        return supportsTimeWrite;
   62|  1.11k|    }
_ZN25MockOutstationApplication17WriteAbsoluteTimeERKN8opendnp312UTCTimestampE:
   65|     31|    {
   66|     31|        if (allowTimeWrite)
  ------------------
  |  Branch (66:13): [True: 31, False: 0]
  ------------------
   67|     31|        {
   68|     31|            timestamps.push_back(timestamp);
   69|     31|            return true;
   70|     31|        }
   71|      0|        else
   72|      0|        {
   73|      0|            return false;
   74|      0|        }
   75|     31|    }
_ZN25MockOutstationApplication28SupportsWriteTimeAndIntervalEv:
   78|    269|    {
   79|    269|        return supportsWriteTimeAndInterval;
   80|    269|    }
_ZN25MockOutstationApplication19SupportsAssignClassEv:
   93|      1|    {
   94|      1|        return supportsAssignClass;
   95|      1|    }
_ZNK25MockOutstationApplication17GetApplicationIINEv:
  106|  8.37k|    {
  107|  8.37k|        return appIIN;
  108|  8.37k|    }
_ZNK25MockOutstationApplication18ColdRestartSupportEv:
  111|      1|    {
  112|      1|        return coldRestartSupport;
  113|      1|    }
_ZNK25MockOutstationApplication18WarmRestartSupportEv:
  116|      1|    {
  117|      1|        return warmRestartSupport;
  118|      1|    }
_ZN25MockOutstationApplication3NowEv:
   53|  24.1k|    {
   54|  24.1k|        return currentTime;
   55|  24.1k|    }

_ZN14MockLowerLayer13BeginTransmitERKN8opendnp37MessageE:
   52|  8.37k|{
   53|  8.37k|    this->sendQueue.push(message);
   54|  8.37k|    return true;
   55|  8.37k|}

_ZNK10NullLogger10get_loggerEv:
   19|  8.87k|    opendnp3::Logger get_logger() const {
   20|  8.87k|        return opendnp3::Logger(this->handler, opendnp3::ModuleId(0), "logger", opendnp3::LogLevels(~0));
   21|  8.87k|    }

LLVMFuzzerTestOneInput:
   72|  8.87k|{
   73|  8.87k|    ser4cpp::rseq_t buffer(Data, Size);
   74|       |
   75|  8.87k|    opendnp3::OutstationConfig config;
   76|  8.87k|    OutstationTestObject t(config);
   77|  8.87k|    t.LowerLayerUp();
   78|  8.87k|    t.SendToOutstation(buffer);
   79|  8.87k|    return 0;
   80|  8.87k|}
_ZN20OutstationTestObjectC2ERKN8opendnp316OutstationConfigERKNS0_14DatabaseConfigE:
   40|  8.87k|        : logger(),
   41|  8.87k|          exe(std::make_shared<exe4cpp::MockExecutor>()),
   42|  8.87k|          lower(std::make_shared<MockLowerLayer>()),
   43|  8.87k|          cmdHandler(std::make_shared<MockCommandHandler>(opendnp3::CommandStatus::SUCCESS)),
   44|  8.87k|          application(std::make_shared<MockOutstationApplication>()),
   45|  8.87k|          context(opendnp3::Addresses(), config, database, logger.get_logger(), exe, lower, cmdHandler, application)
   46|  8.87k|    {
   47|  8.87k|        lower->SetUpperLayer(context);
   48|  8.87k|    }
_ZN20OutstationTestObject12LowerLayerUpEv:
   57|  8.87k|    {
   58|  8.87k|        context.OnLowerLayerUp();
   59|  8.87k|        return exe->run_many();
   60|  8.87k|    }
_ZN20OutstationTestObject16SendToOutstationERKN7ser4cpp4RSeqImEE:
   51|  8.87k|    {
   52|  8.87k|        context.OnReceive(opendnp3::Message(opendnp3::Addresses(), buffer));
   53|  8.87k|        return exe->run_many();
   54|  8.87k|    }

