_ZN7httplib6detail18parse_range_headerERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERNS1_6vectorINS1_4pairIllEENS5_ISC_EEEE:
 7812|    533|inline bool parse_range_header(const std::string &s, Ranges &ranges) try {
 7813|    533|#endif
 7814|    533|  auto is_valid = [](const std::string &str) {
 7815|    533|    return std::all_of(str.cbegin(), str.cend(),
 7816|    533|                       [](unsigned char c) { return std::isdigit(c); });
 7817|    533|  };
 7818|       |
 7819|    533|  if (s.size() > 7 && s.compare(0, 6, "bytes=") == 0) {
  ------------------
  |  Branch (7819:7): [True: 528, False: 5]
  |  Branch (7819:23): [True: 494, False: 34]
  ------------------
 7820|    494|    const auto pos = static_cast<size_t>(6);
 7821|    494|    const auto len = static_cast<size_t>(s.size() - 6);
 7822|    494|    auto all_valid_ranges = true;
 7823|    494|    split(&s[pos], &s[pos + len], ',', [&](const char *b, const char *e) {
 7824|    494|      if (!all_valid_ranges) { return; }
 7825|       |
 7826|    494|      const auto it = std::find(b, e, '-');
 7827|    494|      if (it == e) {
 7828|    494|        all_valid_ranges = false;
 7829|    494|        return;
 7830|    494|      }
 7831|       |
 7832|    494|      const auto lhs = std::string(b, it);
 7833|    494|      const auto rhs = std::string(it + 1, e);
 7834|    494|      if (!is_valid(lhs) || !is_valid(rhs)) {
 7835|    494|        all_valid_ranges = false;
 7836|    494|        return;
 7837|    494|      }
 7838|       |
 7839|    494|      ssize_t first = -1;
 7840|    494|      if (!lhs.empty()) {
 7841|    494|        ssize_t v;
 7842|    494|        auto res = detail::from_chars(lhs.data(), lhs.data() + lhs.size(), v);
 7843|    494|        if (res.ec == std::errc{}) { first = v; }
 7844|    494|      }
 7845|       |
 7846|    494|      ssize_t last = -1;
 7847|    494|      if (!rhs.empty()) {
 7848|    494|        ssize_t v;
 7849|    494|        auto res = detail::from_chars(rhs.data(), rhs.data() + rhs.size(), v);
 7850|    494|        if (res.ec == std::errc{}) { last = v; }
 7851|    494|      }
 7852|       |
 7853|    494|      if ((first == -1 && last == -1) ||
 7854|    494|          (first != -1 && last != -1 && first > last)) {
 7855|    494|        all_valid_ranges = false;
 7856|    494|        return;
 7857|    494|      }
 7858|       |
 7859|    494|      ranges.emplace_back(first, last);
 7860|    494|    });
 7861|    494|    return all_valid_ranges && !ranges.empty();
  ------------------
  |  Branch (7861:12): [True: 274, False: 220]
  |  Branch (7861:32): [True: 273, False: 1]
  ------------------
 7862|    494|  }
 7863|     39|  return false;
 7864|       |#ifdef CPPHTTPLIB_NO_EXCEPTIONS
 7865|       |}
 7866|       |#else
 7867|    533|} catch (...) { return false; }
_ZN7httplib6detail5splitEPKcS2_cNSt3__18functionIFvS2_S2_EEE:
 5239|  27.6k|                  std::function<void(const char *, const char *)> fn) {
 5240|  27.6k|  return split(b, e, d, (std::numeric_limits<size_t>::max)(), std::move(fn));
 5241|  27.6k|}
_ZN7httplib6detail5splitEPKcS2_cmNSt3__18functionIFvS2_S2_EEE:
 5244|  27.6k|                  std::function<void(const char *, const char *)> fn) {
 5245|  27.6k|  size_t i = 0;
 5246|  27.6k|  size_t beg = 0;
 5247|  27.6k|  size_t count = 1;
 5248|       |
 5249|  97.4M|  while (e ? (b + i < e) : (b[i] != '\0')) {
  ------------------
  |  Branch (5249:10): [True: 97.4M, False: 0]
  |  Branch (5249:10): [True: 97.4M, False: 27.6k]
  ------------------
 5250|  97.4M|    if (b[i] == d && count < m) {
  ------------------
  |  Branch (5250:9): [True: 9.39M, False: 88.0M]
  |  Branch (5250:22): [True: 9.39M, False: 0]
  ------------------
 5251|  9.39M|      auto r = trim(b, e, beg, i);
 5252|  9.39M|      if (r.first < r.second) { fn(&b[r.first], &b[r.second]); }
  ------------------
  |  Branch (5252:11): [True: 4.21M, False: 5.17M]
  ------------------
 5253|  9.39M|      beg = i + 1;
 5254|  9.39M|      count++;
 5255|  9.39M|    }
 5256|  97.4M|    i++;
 5257|  97.4M|  }
 5258|       |
 5259|  27.6k|  if (i) {
  ------------------
  |  Branch (5259:7): [True: 27.6k, False: 5]
  ------------------
 5260|  27.6k|    auto r = trim(b, e, beg, i);
 5261|  27.6k|    if (r.first < r.second) { fn(&b[r.first], &b[r.second]); }
  ------------------
  |  Branch (5261:9): [True: 26.8k, False: 817]
  ------------------
 5262|  27.6k|  }
 5263|  27.6k|}
_ZN7httplib6detail4trimEPKcS2_mm:
 5195|  32.1M|                                      size_t right) {
 5196|  35.4M|  while (b + left < e && is_space_or_tab(b[left])) {
  ------------------
  |  Branch (5196:10): [True: 35.4M, False: 3.97k]
  |  Branch (5196:26): [True: 3.27M, False: 32.1M]
  ------------------
 5197|  3.27M|    left++;
 5198|  3.27M|  }
 5199|  35.4M|  while (right > 0 && is_space_or_tab(b[right - 1])) {
  ------------------
  |  Branch (5199:10): [True: 35.4M, False: 1.57k]
  |  Branch (5199:23): [True: 3.29M, False: 32.1M]
  ------------------
 5200|  3.29M|    right--;
 5201|  3.29M|  }
 5202|  32.1M|  return std::make_pair(left, right);
 5203|  32.1M|}
_ZN7httplib6detail15is_space_or_tabEc:
 5050|  70.8M|inline bool is_space_or_tab(char c) { return c == ' ' || c == '\t'; }
  ------------------
  |  Branch (5050:46): [True: 6.56M, False: 64.3M]
  |  Branch (5050:58): [True: 3.41k, False: 64.3M]
  ------------------
_ZZN7httplib6detail18parse_range_headerERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERNS1_6vectorINS1_4pairIllEENS5_ISC_EEEEENKUlPKcSH_E_clESH_SH_:
 7823|  72.7k|    split(&s[pos], &s[pos + len], ',', [&](const char *b, const char *e) {
 7824|  72.7k|      if (!all_valid_ranges) { return; }
  ------------------
  |  Branch (7824:11): [True: 9.65k, False: 63.0k]
  ------------------
 7825|       |
 7826|  63.0k|      const auto it = std::find(b, e, '-');
 7827|  63.0k|      if (it == e) {
  ------------------
  |  Branch (7827:11): [True: 23, False: 63.0k]
  ------------------
 7828|     23|        all_valid_ranges = false;
 7829|     23|        return;
 7830|     23|      }
 7831|       |
 7832|  63.0k|      const auto lhs = std::string(b, it);
 7833|  63.0k|      const auto rhs = std::string(it + 1, e);
 7834|  63.0k|      if (!is_valid(lhs) || !is_valid(rhs)) {
  ------------------
  |  Branch (7834:11): [True: 6, False: 63.0k]
  |  Branch (7834:29): [True: 8, False: 63.0k]
  ------------------
 7835|     14|        all_valid_ranges = false;
 7836|     14|        return;
 7837|     14|      }
 7838|       |
 7839|  63.0k|      ssize_t first = -1;
 7840|  63.0k|      if (!lhs.empty()) {
  ------------------
  |  Branch (7840:11): [True: 33.7k, False: 29.2k]
  ------------------
 7841|  33.7k|        ssize_t v;
 7842|  33.7k|        auto res = detail::from_chars(lhs.data(), lhs.data() + lhs.size(), v);
 7843|  33.7k|        if (res.ec == std::errc{}) { first = v; }
  ------------------
  |  Branch (7843:13): [True: 4.87k, False: 28.9k]
  ------------------
 7844|  33.7k|      }
 7845|       |
 7846|  63.0k|      ssize_t last = -1;
 7847|  63.0k|      if (!rhs.empty()) {
  ------------------
  |  Branch (7847:11): [True: 58.9k, False: 4.12k]
  ------------------
 7848|  58.9k|        ssize_t v;
 7849|  58.9k|        auto res = detail::from_chars(rhs.data(), rhs.data() + rhs.size(), v);
 7850|  58.9k|        if (res.ec == std::errc{}) { last = v; }
  ------------------
  |  Branch (7850:13): [True: 58.5k, False: 352]
  ------------------
 7851|  58.9k|      }
 7852|       |
 7853|  63.0k|      if ((first == -1 && last == -1) ||
  ------------------
  |  Branch (7853:12): [True: 58.1k, False: 4.87k]
  |  Branch (7853:27): [True: 90, False: 58.0k]
  ------------------
 7854|  62.9k|          (first != -1 && last != -1 && first > last)) {
  ------------------
  |  Branch (7854:12): [True: 4.87k, False: 58.0k]
  |  Branch (7854:27): [True: 488, False: 4.38k]
  |  Branch (7854:41): [True: 93, False: 395]
  ------------------
 7855|    183|        all_valid_ranges = false;
 7856|    183|        return;
 7857|    183|      }
 7858|       |
 7859|  62.8k|      ranges.emplace_back(first, last);
 7860|  62.8k|    });
_ZZN7httplib6detail18parse_range_headerERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERNS1_6vectorINS1_4pairIllEENS5_ISC_EEEEENKUlS9_E_clES9_:
 7814|   126k|  auto is_valid = [](const std::string &str) {
 7815|   126k|    return std::all_of(str.cbegin(), str.cend(),
 7816|   126k|                       [](unsigned char c) { return std::isdigit(c); });
 7817|   126k|  };
_ZZZN7httplib6detail18parse_range_headerERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERNS1_6vectorINS1_4pairIllEENS5_ISC_EEEEENKUlS9_E_clES9_ENKUlhE_clEh:
 7816|  1.34M|                       [](unsigned char c) { return std::isdigit(c); });
_ZN7httplib6detail10from_charsIlEENS0_17from_chars_resultIT_EEPKcS6_RS3_i:
  649|  92.6k|                                       T &value, int base = 10) {
  650|  92.6k|  value = 0;
  651|  92.6k|  const char *p = first;
  652|  92.6k|  bool negative = false;
  653|       |
  654|  92.6k|  if (p != last && *p == '-') {
  ------------------
  |  Branch (654:7): [True: 92.6k, False: 0]
  |  Branch (654:20): [True: 0, False: 92.6k]
  ------------------
  655|      0|    negative = true;
  656|      0|    ++p;
  657|      0|  }
  658|  92.6k|  if (p == last) { return {first, std::errc::invalid_argument}; }
  ------------------
  |  Branch (658:7): [True: 0, False: 92.6k]
  ------------------
  659|       |
  660|  92.6k|  T result = 0;
  661|   802k|  for (; p != last; ++p) {
  ------------------
  |  Branch (661:10): [True: 739k, False: 63.4k]
  ------------------
  662|   739k|    char c = *p;
  663|   739k|    int digit = -1;
  664|   739k|    if ('0' <= c && c <= '9') {
  ------------------
  |  Branch (664:9): [True: 739k, False: 0]
  |  Branch (664:21): [True: 739k, False: 0]
  ------------------
  665|   739k|      digit = c - '0';
  666|   739k|    } else if ('a' <= c && c <= 'z') {
  ------------------
  |  Branch (666:16): [True: 0, False: 0]
  |  Branch (666:28): [True: 0, False: 0]
  ------------------
  667|      0|      digit = c - 'a' + 10;
  668|      0|    } else if ('A' <= c && c <= 'Z') {
  ------------------
  |  Branch (668:16): [True: 0, False: 0]
  |  Branch (668:28): [True: 0, False: 0]
  ------------------
  669|      0|      digit = c - 'A' + 10;
  670|      0|    } else {
  671|      0|      break;
  672|      0|    }
  673|       |
  674|   739k|    if (digit < 0 || digit >= base) { break; }
  ------------------
  |  Branch (674:9): [True: 0, False: 739k]
  |  Branch (674:22): [True: 0, False: 739k]
  ------------------
  675|   739k|    if (result > ((std::numeric_limits<T>::max)() - digit) / base) {
  ------------------
  |  Branch (675:9): [True: 29.2k, False: 709k]
  ------------------
  676|  29.2k|      return {p, std::errc::result_out_of_range};
  677|  29.2k|    }
  678|   709k|    result = result * base + digit;
  679|   709k|  }
  680|       |
  681|  63.4k|  if (p == first || (negative && p == first + 1)) {
  ------------------
  |  Branch (681:7): [True: 0, False: 63.4k]
  |  Branch (681:22): [True: 0, False: 63.4k]
  |  Branch (681:34): [True: 0, False: 0]
  ------------------
  682|      0|    return {first, std::errc::invalid_argument};
  683|      0|  }
  684|       |
  685|  63.4k|  value = negative ? -result : result;
  ------------------
  |  Branch (685:11): [True: 0, False: 63.4k]
  ------------------
  686|  63.4k|  return {p, std::errc{}};
  687|  63.4k|}
_ZN7httplib6detail19parse_accept_headerERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERNS1_6vectorIS7_NS5_IS7_EEEE:
 7871|  1.30k|                                std::vector<std::string> &content_types) {
 7872|  1.30k|  content_types.clear();
 7873|       |
 7874|       |  // Empty string is considered valid (no preference)
 7875|  1.30k|  if (s.empty()) { return true; }
  ------------------
  |  Branch (7875:7): [True: 0, False: 1.30k]
  ------------------
 7876|       |
 7877|       |  // Check for invalid patterns: leading/trailing commas or consecutive commas
 7878|  1.30k|  if (s.front() == ',' || s.back() == ',' ||
  ------------------
  |  Branch (7878:7): [True: 2, False: 1.29k]
  |  Branch (7878:27): [True: 1, False: 1.29k]
  ------------------
 7879|  1.29k|      s.find(",,") != std::string::npos) {
  ------------------
  |  Branch (7879:7): [True: 27, False: 1.27k]
  ------------------
 7880|     30|    return false;
 7881|     30|  }
 7882|       |
 7883|  1.27k|  struct AcceptEntry {
 7884|  1.27k|    std::string media_type;
 7885|  1.27k|    double quality;
 7886|  1.27k|    int order;
 7887|  1.27k|  };
 7888|       |
 7889|  1.27k|  std::vector<AcceptEntry> entries;
 7890|  1.27k|  int order = 0;
 7891|  1.27k|  bool has_invalid_entry = false;
 7892|       |
 7893|       |  // Split by comma and parse each entry
 7894|  1.27k|  split(s.data(), s.data() + s.size(), ',', [&](const char *b, const char *e) {
 7895|  1.27k|    std::string entry(b, e);
 7896|  1.27k|    entry = trim_copy(entry);
 7897|       |
 7898|  1.27k|    if (entry.empty()) {
 7899|  1.27k|      has_invalid_entry = true;
 7900|  1.27k|      return;
 7901|  1.27k|    }
 7902|       |
 7903|  1.27k|    AcceptEntry accept_entry;
 7904|  1.27k|    accept_entry.order = order++;
 7905|       |
 7906|  1.27k|    if (!parse_quality(entry.data(), entry.data() + entry.size(),
 7907|  1.27k|                       accept_entry.media_type, accept_entry.quality)) {
 7908|  1.27k|      has_invalid_entry = true;
 7909|  1.27k|      return;
 7910|  1.27k|    }
 7911|       |
 7912|       |    // Remove additional parameters from media type
 7913|  1.27k|    accept_entry.media_type = extract_media_type(accept_entry.media_type);
 7914|       |
 7915|       |    // Basic validation of media type format
 7916|  1.27k|    if (accept_entry.media_type.empty()) {
 7917|  1.27k|      has_invalid_entry = true;
 7918|  1.27k|      return;
 7919|  1.27k|    }
 7920|       |
 7921|       |    // Check for basic media type format (should contain '/' or be '*')
 7922|  1.27k|    if (accept_entry.media_type != "*" &&
 7923|  1.27k|        accept_entry.media_type.find('/') == std::string::npos) {
 7924|  1.27k|      has_invalid_entry = true;
 7925|  1.27k|      return;
 7926|  1.27k|    }
 7927|       |
 7928|  1.27k|    entries.push_back(std::move(accept_entry));
 7929|  1.27k|  });
 7930|       |
 7931|       |  // Return false if any invalid entry was found
 7932|  1.27k|  if (has_invalid_entry) { return false; }
  ------------------
  |  Branch (7932:7): [True: 495, False: 775]
  ------------------
 7933|       |
 7934|       |  // Sort by quality (descending), then by original order (ascending)
 7935|    775|  std::sort(entries.begin(), entries.end(),
 7936|    775|            [](const AcceptEntry &a, const AcceptEntry &b) {
 7937|    775|              if (a.quality != b.quality) {
 7938|    775|                return a.quality > b.quality; // Higher quality first
 7939|    775|              }
 7940|    775|              return a.order < b.order; // Earlier order first for same quality
 7941|    775|            });
 7942|       |
 7943|       |  // Extract sorted media types
 7944|    775|  content_types.reserve(entries.size());
 7945|  3.98M|  for (auto &entry : entries) {
  ------------------
  |  Branch (7945:20): [True: 3.98M, False: 775]
  ------------------
 7946|  3.98M|    content_types.push_back(std::move(entry.media_type));
 7947|  3.98M|  }
 7948|       |
 7949|    775|  return true;
 7950|  1.27k|}
_ZZN7httplib6detail19parse_accept_headerERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERNS1_6vectorIS7_NS5_IS7_EEEEENKUlPKcSF_E_clESF_SF_:
 7894|  4.11M|  split(s.data(), s.data() + s.size(), ',', [&](const char *b, const char *e) {
 7895|  4.11M|    std::string entry(b, e);
 7896|  4.11M|    entry = trim_copy(entry);
 7897|       |
 7898|  4.11M|    if (entry.empty()) {
  ------------------
  |  Branch (7898:9): [True: 0, False: 4.11M]
  ------------------
 7899|      0|      has_invalid_entry = true;
 7900|      0|      return;
 7901|      0|    }
 7902|       |
 7903|  4.11M|    AcceptEntry accept_entry;
 7904|  4.11M|    accept_entry.order = order++;
 7905|       |
 7906|  4.11M|    if (!parse_quality(entry.data(), entry.data() + entry.size(),
  ------------------
  |  Branch (7906:9): [True: 1.91k, False: 4.11M]
  ------------------
 7907|  4.11M|                       accept_entry.media_type, accept_entry.quality)) {
 7908|  1.91k|      has_invalid_entry = true;
 7909|  1.91k|      return;
 7910|  1.91k|    }
 7911|       |
 7912|       |    // Remove additional parameters from media type
 7913|  4.11M|    accept_entry.media_type = extract_media_type(accept_entry.media_type);
 7914|       |
 7915|       |    // Basic validation of media type format
 7916|  4.11M|    if (accept_entry.media_type.empty()) {
  ------------------
  |  Branch (7916:9): [True: 0, False: 4.11M]
  ------------------
 7917|      0|      has_invalid_entry = true;
 7918|      0|      return;
 7919|      0|    }
 7920|       |
 7921|       |    // Check for basic media type format (should contain '/' or be '*')
 7922|  4.11M|    if (accept_entry.media_type != "*" &&
  ------------------
  |  Branch (7922:9): [True: 3.92M, False: 192k]
  ------------------
 7923|  3.92M|        accept_entry.media_type.find('/') == std::string::npos) {
  ------------------
  |  Branch (7923:9): [True: 1.44k, False: 3.92M]
  ------------------
 7924|  1.44k|      has_invalid_entry = true;
 7925|  1.44k|      return;
 7926|  1.44k|    }
 7927|       |
 7928|  4.11M|    entries.push_back(std::move(accept_entry));
 7929|  4.11M|  });
_ZN7httplib6detail9trim_copyERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
 5205|  8.24M|inline std::string trim_copy(const std::string &s) {
 5206|  8.24M|  auto r = trim(s.data(), s.data() + s.size(), 0, s.size());
 5207|  8.24M|  return s.substr(r.first, r.second - r.first);
 5208|  8.24M|}
_ZN7httplib6detail13parse_qualityEPKcS2_RNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERd:
 6597|  4.11M|                          double &quality) {
 6598|  4.11M|  quality = 1.0;
 6599|  4.11M|  token.clear();
 6600|       |
 6601|       |  // Split on first ';': left = token name, right = parameters
 6602|  4.11M|  const char *params_b = nullptr;
 6603|  4.11M|  std::size_t params_len = 0;
 6604|       |
 6605|  4.11M|  divide(
 6606|  4.11M|      b, static_cast<std::size_t>(e - b), ';',
 6607|  4.11M|      [&](const char *lb, std::size_t llen, const char *rb, std::size_t rlen) {
 6608|  4.11M|        auto r = trim(lb, lb + llen, 0, llen);
 6609|  4.11M|        if (r.first < r.second) { token.assign(lb + r.first, lb + r.second); }
 6610|  4.11M|        params_b = rb;
 6611|  4.11M|        params_len = rlen;
 6612|  4.11M|      });
 6613|       |
 6614|  4.11M|  if (token.empty()) { return false; }
  ------------------
  |  Branch (6614:7): [True: 248, False: 4.11M]
  ------------------
 6615|  4.11M|  if (params_len == 0) { return true; }
  ------------------
  |  Branch (6615:7): [True: 4.08M, False: 36.4k]
  ------------------
 6616|       |
 6617|       |  // Scan parameters for q= (stops on first match)
 6618|  36.4k|  bool invalid = false;
 6619|  36.4k|  split_find(params_b, params_b + params_len, ';',
 6620|  36.4k|             (std::numeric_limits<size_t>::max)(),
 6621|  36.4k|             [&](const char *pb, const char *pe) -> bool {
 6622|       |               // Match exactly "q=" or "Q=" (not "query=" etc.)
 6623|  36.4k|               auto len = static_cast<size_t>(pe - pb);
 6624|  36.4k|               if (len < 2) { return false; }
 6625|  36.4k|               if ((pb[0] != 'q' && pb[0] != 'Q') || pb[1] != '=') {
 6626|  36.4k|                 return false;
 6627|  36.4k|               }
 6628|       |
 6629|       |               // Trim the value portion
 6630|  36.4k|               auto r = trim(pb, pe, 2, len);
 6631|  36.4k|               if (r.first >= r.second) {
 6632|  36.4k|                 invalid = true;
 6633|  36.4k|                 return true;
 6634|  36.4k|               }
 6635|       |
 6636|  36.4k|               double v = 0.0;
 6637|  36.4k|               auto res = from_chars(pb + r.first, pb + r.second, v);
 6638|  36.4k|               if (res.ec != std::errc{} || v < 0.0 || v > 1.0) {
 6639|  36.4k|                 invalid = true;
 6640|  36.4k|                 return true;
 6641|  36.4k|               }
 6642|  36.4k|               quality = v;
 6643|  36.4k|               return true;
 6644|  36.4k|             });
 6645|       |
 6646|  36.4k|  return !invalid;
 6647|  4.11M|}
_ZN7httplib6detail6divideEPKcmcNSt3__18functionIFvS2_mS2_mEEE:
 5220|  4.11M|           fn) {
 5221|  4.11M|  const auto it = std::find(data, data + size, d);
 5222|  4.11M|  const auto found = static_cast<std::size_t>(it != data + size);
 5223|  4.11M|  const auto lhs_data = data;
 5224|  4.11M|  const auto lhs_size = static_cast<std::size_t>(it - data);
 5225|  4.11M|  const auto rhs_data = it + found;
 5226|  4.11M|  const auto rhs_size = size - lhs_size - found;
 5227|       |
 5228|  4.11M|  fn(lhs_data, lhs_size, rhs_data, rhs_size);
 5229|  4.11M|}
_ZZN7httplib6detail13parse_qualityEPKcS2_RNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERdENKUlS2_mS2_mE_clES2_mS2_m:
 6607|  4.11M|      [&](const char *lb, std::size_t llen, const char *rb, std::size_t rlen) {
 6608|  4.11M|        auto r = trim(lb, lb + llen, 0, llen);
 6609|  4.11M|        if (r.first < r.second) { token.assign(lb + r.first, lb + r.second); }
  ------------------
  |  Branch (6609:13): [True: 4.11M, False: 248]
  ------------------
 6610|  4.11M|        params_b = rb;
 6611|  4.11M|        params_len = rlen;
 6612|  4.11M|      });
_ZN7httplib6detail10split_findEPKcS2_cmNSt3__18functionIFbS2_S2_EEE:
 5266|  36.4k|                       std::function<bool(const char *, const char *)> fn) {
 5267|  36.4k|  size_t i = 0;
 5268|  36.4k|  size_t beg = 0;
 5269|  36.4k|  size_t count = 1;
 5270|       |
 5271|  20.5M|  while (e ? (b + i < e) : (b[i] != '\0')) {
  ------------------
  |  Branch (5271:10): [True: 20.5M, False: 0]
  |  Branch (5271:10): [True: 20.5M, False: 34.1k]
  ------------------
 5272|  20.5M|    if (b[i] == d && count < m) {
  ------------------
  |  Branch (5272:9): [True: 10.3M, False: 10.2M]
  |  Branch (5272:22): [True: 10.3M, False: 0]
  ------------------
 5273|  10.3M|      auto r = trim(b, e, beg, i);
 5274|  10.3M|      if (r.first < r.second) {
  ------------------
  |  Branch (5274:11): [True: 1.48M, False: 8.82M]
  ------------------
 5275|  1.48M|        auto found = fn(&b[r.first], &b[r.second]);
 5276|  1.48M|        if (found) { return true; }
  ------------------
  |  Branch (5276:13): [True: 2.30k, False: 1.48M]
  ------------------
 5277|  1.48M|      }
 5278|  10.3M|      beg = i + 1;
 5279|  10.3M|      count++;
 5280|  10.3M|    }
 5281|  20.5M|    i++;
 5282|  20.5M|  }
 5283|       |
 5284|  34.1k|  if (i) {
  ------------------
  |  Branch (5284:7): [True: 34.1k, False: 0]
  ------------------
 5285|  34.1k|    auto r = trim(b, e, beg, i);
 5286|  34.1k|    if (r.first < r.second) {
  ------------------
  |  Branch (5286:9): [True: 31.7k, False: 2.35k]
  ------------------
 5287|  31.7k|      auto found = fn(&b[r.first], &b[r.second]);
 5288|  31.7k|      if (found) { return true; }
  ------------------
  |  Branch (5288:11): [True: 21.1k, False: 10.6k]
  ------------------
 5289|  31.7k|    }
 5290|  34.1k|  }
 5291|       |
 5292|  12.9k|  return false;
 5293|  34.1k|}
_ZZN7httplib6detail13parse_qualityEPKcS2_RNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERdENKUlS2_S2_E_clES2_S2_:
 6621|  1.51M|             [&](const char *pb, const char *pe) -> bool {
 6622|       |               // Match exactly "q=" or "Q=" (not "query=" etc.)
 6623|  1.51M|               auto len = static_cast<size_t>(pe - pb);
 6624|  1.51M|               if (len < 2) { return false; }
  ------------------
  |  Branch (6624:20): [True: 1.47M, False: 39.9k]
  ------------------
 6625|  39.9k|               if ((pb[0] != 'q' && pb[0] != 'Q') || pb[1] != '=') {
  ------------------
  |  Branch (6625:21): [True: 31.7k, False: 8.19k]
  |  Branch (6625:37): [True: 14.5k, False: 17.2k]
  |  Branch (6625:54): [True: 1.97k, False: 23.4k]
  ------------------
 6626|  16.5k|                 return false;
 6627|  16.5k|               }
 6628|       |
 6629|       |               // Trim the value portion
 6630|  23.4k|               auto r = trim(pb, pe, 2, len);
 6631|  23.4k|               if (r.first >= r.second) {
  ------------------
  |  Branch (6631:20): [True: 400, False: 23.0k]
  ------------------
 6632|    400|                 invalid = true;
 6633|    400|                 return true;
 6634|    400|               }
 6635|       |
 6636|  23.0k|               double v = 0.0;
 6637|  23.0k|               auto res = from_chars(pb + r.first, pb + r.second, v);
 6638|  23.0k|               if (res.ec != std::errc{} || v < 0.0 || v > 1.0) {
  ------------------
  |  Branch (6638:20): [True: 680, False: 22.3k]
  |  Branch (6638:45): [True: 328, False: 22.0k]
  |  Branch (6638:56): [True: 255, False: 21.8k]
  ------------------
 6639|  1.26k|                 invalid = true;
 6640|  1.26k|                 return true;
 6641|  1.26k|               }
 6642|  21.8k|               quality = v;
 6643|  21.8k|               return true;
 6644|  23.0k|             });
_ZN7httplib6detail10from_charsEPKcS2_Rd:
  691|  23.0k|                                            double &value) {
  692|  23.0k|  std::string s(first, last);
  693|  23.0k|  char *endptr = nullptr;
  694|  23.0k|  errno = 0;
  695|  23.0k|  value = std::strtod(s.c_str(), &endptr);
  696|  23.0k|  if (endptr == s.c_str()) { return {first, std::errc::invalid_argument}; }
  ------------------
  |  Branch (696:7): [True: 379, False: 22.6k]
  ------------------
  697|  22.6k|  if (errno == ERANGE) {
  ------------------
  |  Branch (697:7): [True: 301, False: 22.3k]
  ------------------
  698|    301|    return {first + (endptr - s.c_str()), std::errc::result_out_of_range};
  699|    301|  }
  700|  22.3k|  return {first + (endptr - s.c_str()), std::errc{}};
  701|  22.6k|}
_ZZN7httplib6detail19parse_accept_headerERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERNS1_6vectorIS7_NS5_IS7_EEEEENKUlRKZNS0_19parse_accept_headerES9_SD_E11AcceptEntrySG_E_clESG_SG_:
 7936|   102M|            [](const AcceptEntry &a, const AcceptEntry &b) {
 7937|   102M|              if (a.quality != b.quality) {
  ------------------
  |  Branch (7937:19): [True: 953k, False: 101M]
  ------------------
 7938|   953k|                return a.quality > b.quality; // Higher quality first
 7939|   953k|              }
 7940|   101M|              return a.order < b.order; // Earlier order first for same quality
 7941|   102M|            });
_ZN7httplib6detail18extract_media_typeERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEPNS1_3mapIS7_S7_NS1_4lessIS7_EENS5_INS1_4pairIS8_S7_EEEEEE:
 6538|  4.11M|                   std::map<std::string, std::string> *params = nullptr) {
 6539|       |  // Extract type/subtype from Content-Type value (RFC 2045)
 6540|       |  // e.g. "application/json; charset=utf-8" -> "application/json"
 6541|  4.11M|  auto media_type = content_type;
 6542|  4.11M|  auto semicolon_pos = media_type.find(';');
 6543|  4.11M|  if (semicolon_pos != std::string::npos) {
  ------------------
  |  Branch (6543:7): [True: 197, False: 4.11M]
  ------------------
 6544|    197|    auto param_str = media_type.substr(semicolon_pos + 1);
 6545|    197|    media_type = media_type.substr(0, semicolon_pos);
 6546|       |
 6547|    197|    if (params) {
  ------------------
  |  Branch (6547:9): [True: 176, False: 21]
  ------------------
 6548|       |      // Parse parameters: key=value pairs separated by ';'
 6549|    176|      split(param_str.data(), param_str.data() + param_str.size(), ';',
 6550|    176|            [&](const char *b, const char *e) {
 6551|    176|              std::string key;
 6552|    176|              std::string val;
 6553|    176|              split(b, e, '=', [&](const char *b2, const char *e2) {
 6554|    176|                if (key.empty()) {
 6555|    176|                  key.assign(b2, e2);
 6556|    176|                } else {
 6557|    176|                  val.assign(b2, e2);
 6558|    176|                }
 6559|    176|              });
 6560|    176|              if (!key.empty()) {
 6561|    176|                params->emplace(trim_copy(key), trim_double_quotes_copy(val));
 6562|    176|              }
 6563|    176|            });
 6564|    176|    }
 6565|    197|  }
 6566|       |
 6567|       |  // Trim whitespace from media type
 6568|  4.11M|  return trim_copy(media_type);
 6569|  4.11M|}
_ZZN7httplib6detail18extract_media_typeERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEPNS1_3mapIS7_S7_NS1_4lessIS7_EENS5_INS1_4pairIS8_S7_EEEEEEENKUlPKcSJ_E_clESJ_SJ_:
 6550|  13.9k|            [&](const char *b, const char *e) {
 6551|  13.9k|              std::string key;
 6552|  13.9k|              std::string val;
 6553|  13.9k|              split(b, e, '=', [&](const char *b2, const char *e2) {
 6554|  13.9k|                if (key.empty()) {
 6555|  13.9k|                  key.assign(b2, e2);
 6556|  13.9k|                } else {
 6557|  13.9k|                  val.assign(b2, e2);
 6558|  13.9k|                }
 6559|  13.9k|              });
 6560|  13.9k|              if (!key.empty()) {
  ------------------
  |  Branch (6560:19): [True: 13.6k, False: 283]
  ------------------
 6561|  13.6k|                params->emplace(trim_copy(key), trim_double_quotes_copy(val));
 6562|  13.6k|              }
 6563|  13.9k|            });
_ZZZN7httplib6detail18extract_media_typeERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEPNS1_3mapIS7_S7_NS1_4lessIS7_EENS5_INS1_4pairIS8_S7_EEEEEEENKUlPKcSJ_E_clESJ_SJ_ENKUlSJ_SJ_E_clESJ_SJ_:
 6553|  14.4k|              split(b, e, '=', [&](const char *b2, const char *e2) {
 6554|  14.4k|                if (key.empty()) {
  ------------------
  |  Branch (6554:21): [True: 13.6k, False: 744]
  ------------------
 6555|  13.6k|                  key.assign(b2, e2);
 6556|  13.6k|                } else {
 6557|    744|                  val.assign(b2, e2);
 6558|    744|                }
 6559|  14.4k|              });
_ZN7httplib6detail23trim_double_quotes_copyERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
 5210|  35.6k|inline std::string trim_double_quotes_copy(const std::string &s) {
 5211|  35.6k|  if (s.length() >= 2 && s.front() == '"' && s.back() == '"') {
  ------------------
  |  Branch (5211:7): [True: 7.36k, False: 28.2k]
  |  Branch (5211:26): [True: 630, False: 6.73k]
  |  Branch (5211:46): [True: 261, False: 369]
  ------------------
 5212|    261|    return s.substr(1, s.size() - 2);
 5213|    261|  }
 5214|  35.3k|  return s;
 5215|  35.6k|}
_ZN7httplib6detail24parse_multipart_boundaryERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERS7_:
 7776|    148|                                     std::string &boundary) {
 7777|    148|  std::map<std::string, std::string> params;
 7778|    148|  extract_media_type(content_type, &params);
 7779|    148|  auto it = params.find("boundary");
 7780|    148|  if (it == params.end()) { return false; }
  ------------------
  |  Branch (7780:7): [True: 146, False: 2]
  ------------------
 7781|      2|  boundary = it->second;
 7782|      2|  return !boundary.empty();
 7783|    148|}
_ZN7httplib6detail24parse_disposition_paramsERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERNS1_8multimapIS7_S7_NS1_4lessIS7_EENS5_INS1_4pairIS8_S7_EEEEEE:
 7785|    568|inline void parse_disposition_params(const std::string &s, Params &params) {
 7786|    568|  std::set<std::string> cache;
 7787|    568|  split(s.data(), s.data() + s.size(), ';', [&](const char *b, const char *e) {
 7788|    568|    std::string kv(b, e);
 7789|    568|    if (cache.find(kv) != cache.end()) { return; }
 7790|    568|    cache.insert(kv);
 7791|       |
 7792|    568|    std::string key;
 7793|    568|    std::string val;
 7794|    568|    split(b, e, '=', [&](const char *b2, const char *e2) {
 7795|    568|      if (key.empty()) {
 7796|    568|        key.assign(b2, e2);
 7797|    568|      } else {
 7798|    568|        val.assign(b2, e2);
 7799|    568|      }
 7800|    568|    });
 7801|       |
 7802|    568|    if (!key.empty()) {
 7803|    568|      params.emplace(trim_double_quotes_copy((key)),
 7804|    568|                     trim_double_quotes_copy((val)));
 7805|    568|    }
 7806|    568|  });
 7807|    568|}
_ZZN7httplib6detail24parse_disposition_paramsERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERNS1_8multimapIS7_S7_NS1_4lessIS7_EENS5_INS1_4pairIS8_S7_EEEEEEENKUlPKcSJ_E_clESJ_SJ_:
 7787|  14.2k|  split(s.data(), s.data() + s.size(), ';', [&](const char *b, const char *e) {
 7788|  14.2k|    std::string kv(b, e);
 7789|  14.2k|    if (cache.find(kv) != cache.end()) { return; }
  ------------------
  |  Branch (7789:9): [True: 3.08k, False: 11.1k]
  ------------------
 7790|  11.1k|    cache.insert(kv);
 7791|       |
 7792|  11.1k|    std::string key;
 7793|  11.1k|    std::string val;
 7794|  11.1k|    split(b, e, '=', [&](const char *b2, const char *e2) {
 7795|  11.1k|      if (key.empty()) {
 7796|  11.1k|        key.assign(b2, e2);
 7797|  11.1k|      } else {
 7798|  11.1k|        val.assign(b2, e2);
 7799|  11.1k|      }
 7800|  11.1k|    });
 7801|       |
 7802|  11.1k|    if (!key.empty()) {
  ------------------
  |  Branch (7802:9): [True: 10.9k, False: 167]
  ------------------
 7803|  10.9k|      params.emplace(trim_double_quotes_copy((key)),
 7804|  10.9k|                     trim_double_quotes_copy((val)));
 7805|  10.9k|    }
 7806|  11.1k|  });
_ZZZN7httplib6detail24parse_disposition_paramsERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERNS1_8multimapIS7_S7_NS1_4lessIS7_EENS5_INS1_4pairIS8_S7_EEEEEEENKUlPKcSJ_E_clESJ_SJ_ENKUlSJ_SJ_E_clESJ_SJ_:
 7794|  12.9k|    split(b, e, '=', [&](const char *b2, const char *e2) {
 7795|  12.9k|      if (key.empty()) {
  ------------------
  |  Branch (7795:11): [True: 10.9k, False: 2.00k]
  ------------------
 7796|  10.9k|        key.assign(b2, e2);
 7797|  10.9k|      } else {
 7798|  2.00k|        val.assign(b2, e2);
 7799|  2.00k|      }
 7800|  12.9k|    });
_ZN7httplib6detail15parse_http_dateERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
 4484|      3|inline time_t parse_http_date(const std::string &date_str) {
 4485|      3|  struct tm tm_buf;
 4486|       |
 4487|       |  // Create a classic locale object once for all parsing attempts
 4488|      3|  const std::locale classic_locale = std::locale::classic();
 4489|       |
 4490|       |  // Try to parse using std::get_time (C++11, cross-platform)
 4491|      3|  auto try_parse = [&](const char *fmt) -> bool {
 4492|      3|    std::istringstream ss(date_str);
 4493|      3|    ss.imbue(classic_locale);
 4494|       |
 4495|      3|    memset(&tm_buf, 0, sizeof(tm_buf));
 4496|      3|    ss >> std::get_time(&tm_buf, fmt);
 4497|       |
 4498|      3|    return !ss.fail();
 4499|      3|  };
 4500|       |
 4501|       |  // RFC 9110 preferred format (HTTP-date): "Sun, 06 Nov 1994 08:49:37 GMT"
 4502|      3|  if (!try_parse("%a, %d %b %Y %H:%M:%S")) {
  ------------------
  |  Branch (4502:7): [True: 2, False: 1]
  ------------------
 4503|       |    // RFC 850 format: "Sunday, 06-Nov-94 08:49:37 GMT"
 4504|      2|    if (!try_parse("%A, %d-%b-%y %H:%M:%S")) {
  ------------------
  |  Branch (4504:9): [True: 2, False: 0]
  ------------------
 4505|       |      // asctime format: "Sun Nov  6 08:49:37 1994"
 4506|      2|      if (!try_parse("%a %b %d %H:%M:%S %Y")) {
  ------------------
  |  Branch (4506:11): [True: 2, False: 0]
  ------------------
 4507|      2|        return static_cast<time_t>(-1);
 4508|      2|      }
 4509|      2|    }
 4510|      2|  }
 4511|       |
 4512|       |#ifdef _WIN32
 4513|       |  return _mkgmtime(&tm_buf);
 4514|       |#elif defined _AIX
 4515|       |  return mktime(&tm_buf);
 4516|       |#else
 4517|      1|  return timegm(&tm_buf);
 4518|      3|#endif
 4519|      3|}
_ZZN7httplib6detail15parse_http_dateERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEENKUlPKcE_clESB_:
 4491|      7|  auto try_parse = [&](const char *fmt) -> bool {
 4492|      7|    std::istringstream ss(date_str);
 4493|      7|    ss.imbue(classic_locale);
 4494|       |
 4495|      7|    memset(&tm_buf, 0, sizeof(tm_buf));
 4496|      7|    ss >> std::get_time(&tm_buf, fmt);
 4497|       |
 4498|      7|    return !ss.fail();
 4499|      7|  };
_ZN7httplib6detail25can_compress_content_typeERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
 6571|    699|inline bool can_compress_content_type(const std::string &content_type) {
 6572|    699|  using udl::operator""_t;
 6573|       |
 6574|    699|  auto mime_type = extract_media_type(content_type);
 6575|    699|  auto tag = str2tag(mime_type);
 6576|       |
 6577|    699|  switch (tag) {
 6578|      1|  case "image/svg+xml"_t:
  ------------------
  |  Branch (6578:3): [True: 1, False: 698]
  ------------------
 6579|      2|  case "application/javascript"_t:
  ------------------
  |  Branch (6579:3): [True: 1, False: 698]
  ------------------
 6580|      3|  case "application/x-javascript"_t:
  ------------------
  |  Branch (6580:3): [True: 1, False: 698]
  ------------------
 6581|      4|  case "application/json"_t:
  ------------------
  |  Branch (6581:3): [True: 1, False: 698]
  ------------------
 6582|      5|  case "application/ld+json"_t:
  ------------------
  |  Branch (6582:3): [True: 1, False: 698]
  ------------------
 6583|      6|  case "application/xml"_t:
  ------------------
  |  Branch (6583:3): [True: 1, False: 698]
  ------------------
 6584|      7|  case "application/xhtml+xml"_t:
  ------------------
  |  Branch (6584:3): [True: 1, False: 698]
  ------------------
 6585|      8|  case "application/rss+xml"_t:
  ------------------
  |  Branch (6585:3): [True: 1, False: 698]
  ------------------
 6586|      9|  case "application/atom+xml"_t:
  ------------------
  |  Branch (6586:3): [True: 1, False: 698]
  ------------------
 6587|     10|  case "application/xslt+xml"_t:
  ------------------
  |  Branch (6587:3): [True: 1, False: 698]
  ------------------
 6588|     11|  case "application/protobuf"_t: return true;
  ------------------
  |  Branch (6588:3): [True: 1, False: 698]
  ------------------
 6589|       |
 6590|      1|  case "text/event-stream"_t: return false;
  ------------------
  |  Branch (6590:3): [True: 1, False: 698]
  ------------------
 6591|       |
 6592|    687|  default: return !mime_type.rfind("text/", 0);
  ------------------
  |  Branch (6592:3): [True: 687, False: 12]
  ------------------
 6593|    699|  }
 6594|    699|}
_ZN7httplib6detail7str2tagERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
 6449|    699|inline unsigned int str2tag(const std::string &s) {
 6450|       |  // Iterative form of str2tag_core: the recursive constexpr version is kept
 6451|       |  // for compile-time UDL evaluation of short string literals, but at runtime
 6452|       |  // we may receive arbitrarily long inputs (e.g. fuzzed Content-Type) that
 6453|       |  // would blow the stack with one frame per character.
 6454|    699|  unsigned int h = 0;
 6455|  6.73M|  for (auto c : s) {
  ------------------
  |  Branch (6455:15): [True: 6.73M, False: 699]
  ------------------
 6456|  6.73M|    h = (((std::numeric_limits<unsigned int>::max)() >> 6) & h * 33) ^
 6457|  6.73M|        static_cast<unsigned char>(c);
 6458|  6.73M|  }
 6459|    699|  return h;
 6460|    699|}

LLVMFuzzerTestOneInput:
    7|  3.28k|extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
    8|  3.28k|  if (size < 2) return 0;
  ------------------
  |  Branch (8:7): [True: 1, False: 3.28k]
  ------------------
    9|       |
   10|  3.28k|  uint8_t selector = data[0];
   11|  3.28k|  const char *payload = reinterpret_cast<const char *>(data + 1);
   12|  3.28k|  size_t payload_size = size - 1;
   13|  3.28k|  std::string input(payload, payload_size);
   14|       |
   15|  3.28k|  switch (selector % 7) {
  ------------------
  |  Branch (15:11): [True: 3.28k, False: 0]
  ------------------
   16|    533|  case 0: {
  ------------------
  |  Branch (16:3): [True: 533, False: 2.75k]
  ------------------
   17|       |    // parse_range_header
   18|    533|    httplib::Ranges ranges;
   19|    533|    httplib::detail::parse_range_header(input, ranges);
   20|    533|    break;
   21|      0|  }
   22|  1.30k|  case 1: {
  ------------------
  |  Branch (22:3): [True: 1.30k, False: 1.98k]
  ------------------
   23|       |    // parse_accept_header
   24|  1.30k|    std::vector<std::string> content_types;
   25|  1.30k|    httplib::detail::parse_accept_header(input, content_types);
   26|  1.30k|    break;
   27|      0|  }
   28|     33|  case 2: {
  ------------------
  |  Branch (28:3): [True: 33, False: 3.25k]
  ------------------
   29|       |    // extract_media_type with params
   30|     33|    std::map<std::string, std::string> params;
   31|     33|    httplib::detail::extract_media_type(input, &params);
   32|     33|    break;
   33|      0|  }
   34|    148|  case 3: {
  ------------------
  |  Branch (34:3): [True: 148, False: 3.13k]
  ------------------
   35|       |    // parse_multipart_boundary
   36|    148|    std::string boundary;
   37|    148|    httplib::detail::parse_multipart_boundary(input, boundary);
   38|    148|    break;
   39|      0|  }
   40|    568|  case 4: {
  ------------------
  |  Branch (40:3): [True: 568, False: 2.71k]
  ------------------
   41|       |    // parse_disposition_params
   42|    568|    httplib::Params params;
   43|    568|    httplib::detail::parse_disposition_params(input, params);
   44|    568|    break;
   45|      0|  }
   46|      3|  case 5: {
  ------------------
  |  Branch (46:3): [True: 3, False: 3.28k]
  ------------------
   47|       |    // parse_http_date
   48|      3|    httplib::detail::parse_http_date(input);
   49|      3|    break;
   50|      0|  }
   51|    699|  case 6: {
  ------------------
  |  Branch (51:3): [True: 699, False: 2.58k]
  ------------------
   52|       |    // can_compress_content_type
   53|    699|    httplib::detail::can_compress_content_type(input);
   54|    699|    break;
   55|      0|  }
   56|  3.28k|  }
   57|       |
   58|  3.28k|  return 0;
   59|  3.28k|}

