Curl_altsvc_init:
  325|  2.53k|{
  326|  2.53k|  struct altsvcinfo *asi = curlx_calloc(1, sizeof(struct altsvcinfo));
  ------------------
  |  | 1473|  2.53k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
  327|  2.53k|  if(!asi)
  ------------------
  |  Branch (327:6): [True: 0, False: 2.53k]
  ------------------
  328|      0|    return NULL;
  329|  2.53k|  Curl_llist_init(&asi->list, NULL);
  330|       |
  331|       |  /* set default behavior */
  332|  2.53k|  asi->flags = CURLALTSVC_H1
  ------------------
  |  | 1045|  2.53k|#define CURLALTSVC_H1           (1L << 3)
  ------------------
  333|  2.53k|#ifdef USE_HTTP2
  334|  2.53k|    | CURLALTSVC_H2
  ------------------
  |  | 1046|  2.53k|#define CURLALTSVC_H2           (1L << 4)
  ------------------
  335|  2.53k|#endif
  336|       |#ifdef USE_HTTP3
  337|       |    | CURLALTSVC_H3
  338|       |#endif
  339|  2.53k|    ;
  340|  2.53k|  return asi;
  341|  2.53k|}
Curl_altsvc_load:
  347|  2.53k|{
  348|  2.53k|  DEBUGASSERT(asi);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (348:3): [True: 0, False: 2.53k]
  |  Branch (348:3): [True: 2.53k, False: 0]
  ------------------
  349|  2.53k|  return altsvc_load(asi, file);
  350|  2.53k|}
Curl_altsvc_cleanup:
  375|  5.07k|{
  376|  5.07k|  if(*asi) {
  ------------------
  |  Branch (376:6): [True: 2.53k, False: 2.53k]
  ------------------
  377|  2.53k|    struct Curl_llist_node *e;
  378|  2.53k|    struct Curl_llist_node *n;
  379|  2.53k|    struct altsvcinfo *altsvc = *asi;
  380|  2.53k|    for(e = Curl_llist_head(&altsvc->list); e; e = n) {
  ------------------
  |  Branch (380:45): [True: 0, False: 2.53k]
  ------------------
  381|      0|      struct altsvc *as = Curl_node_elem(e);
  382|      0|      n = Curl_node_next(e);
  383|      0|      altsvc_free(as);
  ------------------
  |  |   87|      0|#define altsvc_free(x) curlx_free(x)
  |  |  ------------------
  |  |  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  ------------------
  384|      0|    }
  385|  2.53k|    curlx_free(altsvc->filename);
  ------------------
  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  386|  2.53k|    curlx_free(altsvc);
  ------------------
  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  387|       |    *asi = NULL; /* clear the pointer */
  388|  2.53k|  }
  389|  5.07k|}
Curl_altsvc_save:
  396|  5.07k|{
  397|  5.07k|  CURLcode result = CURLE_OK;
  398|  5.07k|  FILE *out;
  399|  5.07k|  char *tempstore = NULL;
  400|       |
  401|  5.07k|  if(!asi)
  ------------------
  |  Branch (401:6): [True: 2.53k, False: 2.53k]
  ------------------
  402|       |    /* no cache activated */
  403|  2.53k|    return CURLE_OK;
  404|       |
  405|       |  /* if not new name is given, use the one we stored from the load */
  406|  2.53k|  if(!file && asi->filename)
  ------------------
  |  Branch (406:6): [True: 0, False: 2.53k]
  |  Branch (406:15): [True: 0, False: 0]
  ------------------
  407|      0|    file = asi->filename;
  408|       |
  409|  2.53k|  if((asi->flags & CURLALTSVC_READONLYFILE) || !file || !file[0])
  ------------------
  |  | 1044|  2.53k|#define CURLALTSVC_READONLYFILE (1L << 2)
  ------------------
  |  Branch (409:6): [True: 0, False: 2.53k]
  |  Branch (409:48): [True: 0, False: 2.53k]
  |  Branch (409:57): [True: 0, False: 2.53k]
  ------------------
  410|       |    /* marked as read-only, no file or zero length filename */
  411|      0|    return CURLE_OK;
  412|       |
  413|  2.53k|  result = Curl_fopen(data, file, &out, &tempstore);
  414|  2.53k|  if(!result) {
  ------------------
  |  Branch (414:6): [True: 2.53k, False: 0]
  ------------------
  415|  2.53k|    struct Curl_llist_node *e;
  416|  2.53k|    struct Curl_llist_node *n;
  417|  2.53k|    fputs("# Your alt-svc cache. https://curl.se/docs/alt-svc.html\n"
  418|  2.53k|          "# This file was generated by libcurl! Edit at your own risk.\n",
  419|  2.53k|          out);
  420|  2.53k|    for(e = Curl_llist_head(&asi->list); e; e = n) {
  ------------------
  |  Branch (420:42): [True: 0, False: 2.53k]
  ------------------
  421|      0|      struct altsvc *as = Curl_node_elem(e);
  422|      0|      n = Curl_node_next(e);
  423|      0|      result = altsvc_out(as, out);
  424|      0|      if(result)
  ------------------
  |  Branch (424:10): [True: 0, False: 0]
  ------------------
  425|      0|        break;
  426|      0|    }
  427|  2.53k|    curlx_fclose(out);
  ------------------
  |  |   81|  2.53k|#define curlx_fclose(file)      curl_dbg_fclose(file, __LINE__, __FILE__)
  ------------------
  428|  2.53k|    if(!result && tempstore && curlx_rename(tempstore, file))
  ------------------
  |  |   72|      0|#define curlx_rename            rename
  ------------------
  |  Branch (428:8): [True: 2.53k, False: 0]
  |  Branch (428:19): [True: 0, False: 2.53k]
  |  Branch (428:32): [True: 0, False: 0]
  ------------------
  429|      0|      result = CURLE_WRITE_ERROR;
  430|       |
  431|  2.53k|    if(result && tempstore)
  ------------------
  |  Branch (431:8): [True: 0, False: 2.53k]
  |  Branch (431:18): [True: 0, False: 0]
  ------------------
  432|      0|      unlink(tempstore);
  433|  2.53k|  }
  434|  2.53k|  curlx_free(tempstore);
  ------------------
  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  435|  2.53k|  return result;
  436|  2.53k|}
altsvc.c:altsvc_load:
  238|  2.53k|{
  239|  2.53k|  CURLcode result = CURLE_OK;
  240|  2.53k|  FILE *fp;
  241|       |
  242|       |  /* we need a private copy of the filename so that the altsvc cache file
  243|       |     name survives an easy handle reset */
  244|  2.53k|  curlx_free(asi->filename);
  ------------------
  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  245|  2.53k|  asi->filename = curlx_strdup(file);
  ------------------
  |  | 1470|  2.53k|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
  246|  2.53k|  if(!asi->filename)
  ------------------
  |  Branch (246:6): [True: 0, False: 2.53k]
  ------------------
  247|      0|    return CURLE_OUT_OF_MEMORY;
  248|       |
  249|  2.53k|  fp = curlx_fopen(file, FOPEN_READTEXT);
  ------------------
  |  |   76|  2.53k|#define curlx_fopen(file, mode) curl_dbg_fopen(file, mode, __LINE__, __FILE__)
  ------------------
  250|  2.53k|  if(fp) {
  ------------------
  |  Branch (250:6): [True: 2.53k, False: 0]
  ------------------
  251|  2.53k|    curlx_struct_stat stat;
  ------------------
  |  |   65|  2.53k|#define curlx_struct_stat       struct stat
  ------------------
  252|  2.53k|    if((curlx_fstat(fileno(fp), &stat) == -1) || !S_ISDIR(stat.st_mode)) {
  ------------------
  |  |   64|  2.53k|#define curlx_fstat             fstat
  ------------------
  |  Branch (252:8): [True: 0, False: 2.53k]
  |  Branch (252:50): [True: 2.53k, False: 0]
  ------------------
  253|  2.53k|      bool eof = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  254|  2.53k|      struct dynbuf buf;
  255|  2.53k|      curlx_dyn_init(&buf, MAX_ALTSVC_LINE);
  ------------------
  |  |   41|  2.53k|#define MAX_ALTSVC_LINE    4095
  ------------------
  256|  2.53k|      do {
  257|  2.53k|        result = Curl_get_line(&buf, fp, &eof);
  258|  2.53k|        if(!result) {
  ------------------
  |  Branch (258:12): [True: 2.53k, False: 0]
  ------------------
  259|  2.53k|          const char *lineptr = curlx_dyn_ptr(&buf);
  260|  2.53k|          curlx_str_passblanks(&lineptr);
  261|  2.53k|          if(curlx_str_single(&lineptr, '#'))
  ------------------
  |  Branch (261:14): [True: 2.53k, False: 0]
  ------------------
  262|  2.53k|            altsvc_add(asi, lineptr);
  263|  2.53k|        }
  264|  2.53k|      } while(!result && !eof);
  ------------------
  |  Branch (264:15): [True: 2.53k, False: 0]
  |  Branch (264:26): [True: 0, False: 2.53k]
  ------------------
  265|  2.53k|      curlx_dyn_free(&buf); /* free the line buffer */
  266|  2.53k|    }
  267|  2.53k|    curlx_fclose(fp);
  ------------------
  |  |   81|  2.53k|#define curlx_fclose(file)      curl_dbg_fclose(file, __LINE__, __FILE__)
  ------------------
  268|  2.53k|  }
  269|  2.53k|  return result;
  270|  2.53k|}
altsvc.c:altsvc_add:
  169|  2.53k|{
  170|       |  /* Example line:
  171|       |     h2 example.com 443 h3 shiny.example.com 8443 "20191231 10:00:00" 1
  172|       |   */
  173|  2.53k|  struct Curl_str srchost;
  174|  2.53k|  struct Curl_str dsthost;
  175|  2.53k|  struct Curl_str srcalpn;
  176|  2.53k|  struct Curl_str dstalpn;
  177|  2.53k|  struct Curl_str date;
  178|  2.53k|  curl_off_t srcport;
  179|  2.53k|  curl_off_t dstport;
  180|  2.53k|  curl_off_t persist;
  181|  2.53k|  curl_off_t prio;
  182|       |
  183|  2.53k|  if(curlx_str_word(&line, &srcalpn, MAX_ALTSVC_ALPNLEN) ||
  ------------------
  |  |   44|  2.53k|#define MAX_ALTSVC_ALPNLEN 10
  ------------------
  |  Branch (183:6): [True: 0, False: 2.53k]
  ------------------
  184|  2.53k|     curlx_str_singlespace(&line) ||
  ------------------
  |  Branch (184:6): [True: 2.53k, False: 0]
  ------------------
  185|      0|     curlx_str_word(&line, &srchost, MAX_ALTSVC_HOSTLEN) ||
  ------------------
  |  |   43|      0|#define MAX_ALTSVC_HOSTLEN 2048
  ------------------
  |  Branch (185:6): [True: 0, False: 0]
  ------------------
  186|      0|     curlx_str_singlespace(&line) ||
  ------------------
  |  Branch (186:6): [True: 0, False: 0]
  ------------------
  187|      0|     curlx_str_number(&line, &srcport, 65535) ||
  ------------------
  |  Branch (187:6): [True: 0, False: 0]
  ------------------
  188|      0|     curlx_str_singlespace(&line) ||
  ------------------
  |  Branch (188:6): [True: 0, False: 0]
  ------------------
  189|      0|     curlx_str_word(&line, &dstalpn, MAX_ALTSVC_ALPNLEN) ||
  ------------------
  |  |   44|      0|#define MAX_ALTSVC_ALPNLEN 10
  ------------------
  |  Branch (189:6): [True: 0, False: 0]
  ------------------
  190|      0|     curlx_str_singlespace(&line) ||
  ------------------
  |  Branch (190:6): [True: 0, False: 0]
  ------------------
  191|      0|     curlx_str_word(&line, &dsthost, MAX_ALTSVC_HOSTLEN) ||
  ------------------
  |  |   43|      0|#define MAX_ALTSVC_HOSTLEN 2048
  ------------------
  |  Branch (191:6): [True: 0, False: 0]
  ------------------
  192|      0|     curlx_str_singlespace(&line) ||
  ------------------
  |  Branch (192:6): [True: 0, False: 0]
  ------------------
  193|      0|     curlx_str_number(&line, &dstport, 65535) ||
  ------------------
  |  Branch (193:6): [True: 0, False: 0]
  ------------------
  194|      0|     curlx_str_singlespace(&line) ||
  ------------------
  |  Branch (194:6): [True: 0, False: 0]
  ------------------
  195|      0|     curlx_str_quotedword(&line, &date, MAX_ALTSVC_DATELEN) ||
  ------------------
  |  |   42|      0|#define MAX_ALTSVC_DATELEN 17
  ------------------
  |  Branch (195:6): [True: 0, False: 0]
  ------------------
  196|      0|     curlx_str_singlespace(&line) ||
  ------------------
  |  Branch (196:6): [True: 0, False: 0]
  ------------------
  197|      0|     curlx_str_number(&line, &persist, 1) ||
  ------------------
  |  Branch (197:6): [True: 0, False: 0]
  ------------------
  198|      0|     curlx_str_singlespace(&line) ||
  ------------------
  |  Branch (198:6): [True: 0, False: 0]
  ------------------
  199|      0|     curlx_str_number(&line, &prio, 0) ||
  ------------------
  |  Branch (199:6): [True: 0, False: 0]
  ------------------
  200|      0|     curlx_str_newline(&line))
  ------------------
  |  Branch (200:6): [True: 0, False: 0]
  ------------------
  201|  2.53k|    ;
  202|      0|  else {
  203|      0|    char dbuf[MAX_ALTSVC_DATELEN + 1];
  204|      0|    time_t expires = 0;
  205|      0|    time_t now = time(NULL);
  ------------------
  |  |   63|      0|#define time(x) altsvc_debugtime(x)
  ------------------
  206|       |
  207|       |    /* The date parser works on a null-terminated string. The maximum length
  208|       |       is upheld by curlx_str_quotedword(). */
  209|      0|    memcpy(dbuf, curlx_str(&date), curlx_strlen(&date));
  ------------------
  |  |   49|      0|#define curlx_str(x)    ((x)->str)
  ------------------
                  memcpy(dbuf, curlx_str(&date), curlx_strlen(&date));
  ------------------
  |  |   50|      0|#define curlx_strlen(x) ((x)->len)
  ------------------
  210|      0|    dbuf[curlx_strlen(&date)] = 0;
  ------------------
  |  |   50|      0|#define curlx_strlen(x) ((x)->len)
  ------------------
  211|      0|    Curl_getdate_capped(dbuf, &expires);
  212|       |
  213|      0|    if(now < expires) {
  ------------------
  |  Branch (213:8): [True: 0, False: 0]
  ------------------
  214|      0|      struct altsvc *as = altsvc_create(&srchost, &dsthost, &srcalpn, &dstalpn,
  215|      0|                                        (size_t)srcport, (size_t)dstport);
  216|      0|      if(as) {
  ------------------
  |  Branch (216:10): [True: 0, False: 0]
  ------------------
  217|      0|        as->expires = expires;
  218|      0|        as->persist = persist ? 1 : 0;
  ------------------
  |  Branch (218:23): [True: 0, False: 0]
  ------------------
  219|      0|        altsvc_append(asi, as);
  220|      0|      }
  221|      0|      else
  222|      0|        return CURLE_OUT_OF_MEMORY;
  223|      0|    }
  224|      0|  }
  225|       |
  226|  2.53k|  return CURLE_OK;
  227|  2.53k|}

Curl_eapi_enter:
  184|  75.5k|{
  185|  75.5k|  struct Curl_easy *data = curl;
  186|  75.5k|  const struct Curl_eapi_fn_props *fn_props;
  187|  75.5k|  CURLcode result = CURLE_OK;
  188|       |
  189|  75.5k|  guard->depth = 0;
  190|       |
  191|       |  /* Verify that we got an easy handle we can work with. */
  192|  75.5k|  if(!GOOD_EASY_HANDLE(data)) {
  ------------------
  |  |   34|  75.5k|  (((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER)) ? TRUE : \
  |  |  ------------------
  |  |  |  |   28|  75.5k|#define CURLEASY_MAGIC_NUMBER 0xc0dedbadU
  |  |  ------------------
  |  |                 (((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER)) ? TRUE : \
  |  |  ------------------
  |  |  |  | 1045|  75.5k|#define TRUE true
  |  |  ------------------
  |  |  |  Branch (34:5): [True: 75.5k, False: 0]
  |  |  |  Branch (34:12): [True: 75.5k, False: 0]
  |  |  ------------------
  |  |   35|  75.5k|   (DEBUGASSERT(!(x)), FALSE))
  |  |  ------------------
  |  |  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |                  (DEBUGASSERT(!(x)), FALSE))
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  ------------------
  |  Branch (192:6): [True: 0, False: 75.5k]
  |  Branch (192:7): [True: 0, False: 0]
  |  Branch (192:7): [True: 0, False: 0]
  ------------------
  193|      0|    result = CURLE_BAD_FUNCTION_ARGUMENT;
  194|      0|    goto out;
  195|      0|  }
  196|       |  /* verify that is either not added to a multi handle OR has a
  197|       |   * GOOD multi handle that knows `data` for `data->mid`. */
  198|  75.5k|  if(data->mid != UINT32_MAX) {
  ------------------
  |  Branch (198:6): [True: 0, False: 75.5k]
  ------------------
  199|      0|    if(GOOD_MULTI_HANDLE(data->multi)) {
  ------------------
  |  |   48|      0|  (((x) && (x)->magic == CURLMULTI_MAGIC_NUMBER) ? TRUE : \
  |  |  ------------------
  |  |  |  |   41|      0|#define CURLMULTI_MAGIC_NUMBER 0x000bab1e
  |  |  ------------------
  |  |                 (((x) && (x)->magic == CURLMULTI_MAGIC_NUMBER) ? TRUE : \
  |  |  ------------------
  |  |  |  | 1045|      0|#define TRUE true
  |  |  ------------------
  |  |  |  Branch (48:3): [True: 0, False: 0]
  |  |  |  Branch (48:5): [True: 0, False: 0]
  |  |  |  Branch (48:12): [True: 0, False: 0]
  |  |  ------------------
  |  |   49|      0|  (DEBUGASSERT(!(x)), FALSE))
  |  |  ------------------
  |  |  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |                 (DEBUGASSERT(!(x)), FALSE))
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  ------------------
  |  Branch (199:8): [True: 0, False: 0]
  |  Branch (199:8): [True: 0, False: 0]
  ------------------
  200|      0|      if(!Curl_multi_knows_easy(data->multi, data)) {
  ------------------
  |  Branch (200:10): [True: 0, False: 0]
  ------------------
  201|       |        /* But multi does not know it, something is fishy, better deny call */
  202|      0|        DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (202:9): [Folded, False: 0]
  |  Branch (202:9): [Folded, False: 0]
  ------------------
  203|      0|        result = CURLE_BAD_FUNCTION_ARGUMENT;
  204|      0|        goto out;
  205|      0|      }
  206|      0|    }
  207|      0|    else {
  208|      0|      DEBUGASSERT(0); /* data needs to have a GOOD multi handle */
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (208:7): [Folded, False: 0]
  |  Branch (208:7): [Folded, False: 0]
  ------------------
  209|      0|      result = CURLE_BAD_FUNCTION_ARGUMENT;
  210|      0|      goto out;
  211|      0|    }
  212|      0|  }
  213|  75.5k|  else if(data->multi) {
  ------------------
  |  Branch (213:11): [True: 0, False: 75.5k]
  ------------------
  214|      0|    DEBUGASSERT(0); /* data should not have a multi handle */
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (214:5): [Folded, False: 0]
  |  Branch (214:5): [Folded, False: 0]
  ------------------
  215|      0|    result = CURLE_BAD_FUNCTION_ARGUMENT;
  216|      0|    goto out;
  217|      0|  }
  218|       |  /* verify that the call `fn` we're about to enter is known
  219|       |   * and check call properties to be admitting. */
  220|  75.5k|  if(fn >= CURL_EAPI_FN_LAST) {
  ------------------
  |  Branch (220:6): [True: 0, False: 75.5k]
  ------------------
  221|      0|    result = CURLE_BAD_FUNCTION_ARGUMENT;
  222|      0|    goto out;
  223|      0|  }
  224|  75.5k|  fn_props = &eapi_fn_props[fn];
  225|  75.5k|  DEBUGASSERT(fn_props->fn == fn);
  ------------------
  |  | 1075|  75.5k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (225:3): [True: 0, False: 75.5k]
  |  Branch (225:3): [True: 75.5k, False: 0]
  ------------------
  226|  75.5k|  if(!fn_props->recurse) {
  ------------------
  |  Branch (226:6): [True: 2.53k, False: 72.9k]
  ------------------
  227|  2.53k|    if(data->callstack.count) {
  ------------------
  |  Branch (227:8): [True: 0, False: 2.53k]
  ------------------
  228|      0|#ifdef CURLVERBOSE
  229|      0|      DEBUGF(curl_mfprintf(stderr,
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  ------------------
  230|      0|        "EAPI guard: calling %hu with call to %u ongoing\n", (uint16_t)fn,
  231|      0|        data->callstack.calls[data->callstack.count-1]));
  232|      0|#endif
  233|      0|      result = CURLE_RECURSIVE_API_CALL;
  234|      0|      goto out;
  235|      0|    }
  236|  2.53k|    if(data->multi && data->multi->callstack.count) {
  ------------------
  |  Branch (236:8): [True: 0, False: 2.53k]
  |  Branch (236:23): [True: 0, False: 0]
  ------------------
  237|      0|#ifdef CURLVERBOSE
  238|       |
  239|      0|      DEBUGF(curl_mfprintf(stderr,
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  ------------------
  240|      0|        "EAPI guard: calling %hu with multi call to %u ongoing\n",
  241|      0|        (uint16_t)fn,
  242|      0|        data->multi->callstack.calls[data->multi->callstack.count-1]));
  243|      0|#endif
  244|      0|      result = CURLE_RECURSIVE_API_CALL;
  245|      0|      goto out;
  246|      0|    }
  247|  2.53k|  }
  248|       |
  249|  75.5k|  if(fn_props->no_event_cb && eapi_in_event_cb(data)) {
  ------------------
  |  Branch (249:6): [True: 0, False: 75.5k]
  |  Branch (249:31): [True: 0, False: 0]
  ------------------
  250|       |    /* Not allowed to be invoked while an event cb is ongoing */
  251|      0|#ifdef CURLVERBOSE
  252|      0|      DEBUGF(curl_mfprintf(stderr,
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  ------------------
  253|      0|        "EAPI guard: calling %hu while event callback ongoing\n",
  254|      0|        (uint16_t)fn));
  255|      0|#endif
  256|      0|    result = CURLE_RECURSIVE_API_CALL;
  257|      0|    goto out;
  258|      0|  }
  259|       |
  260|  75.5k|#if defined(USE_SSL) && defined(USE_MUTEX)
  261|  75.5k|  if(fn_props->no_scache_lock &&
  ------------------
  |  Branch (261:6): [True: 0, False: 75.5k]
  ------------------
  262|      0|     Curl_ssl_scache_is_locked_by_current_thread(data)) {
  ------------------
  |  Branch (262:6): [True: 0, False: 0]
  ------------------
  263|      0|#ifdef CURLVERBOSE
  264|      0|      DEBUGF(curl_mfprintf(stderr,
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  ------------------
  265|      0|        "EAPI guard: calling %hu while vtls_scache is locked by "
  266|      0|        "current thread\n", (uint16_t)fn));
  267|      0|#endif
  268|      0|    result = CURLE_RECURSIVE_API_CALL;
  269|      0|    goto out;
  270|      0|  }
  271|  75.5k|#endif
  272|       |
  273|       |  /* all fine, add to data's callstack */
  274|  75.5k|  if(data->callstack.count >= CURL_EAPI_MAX_RECURSION) {
  ------------------
  |  |  139|  75.5k|#define CURL_EAPI_MAX_RECURSION       7
  ------------------
  |  Branch (274:6): [True: 0, False: 75.5k]
  ------------------
  275|      0|    result = CURLE_RECURSIVE_API_CALL;
  276|      0|    goto out;
  277|      0|  }
  278|  75.5k|  data->callstack.calls[data->callstack.count] = (uint16_t)fn;
  279|  75.5k|  ++data->callstack.count;
  280|  75.5k|  guard->depth = data->callstack.count;
  281|  75.5k|  guard->data = fn_props->data_is_killed ? NULL : data;
  ------------------
  |  Branch (281:17): [True: 2.53k, False: 72.9k]
  ------------------
  282|       |
  283|  75.5k|out:
  284|  75.5k|  if(presult)
  ------------------
  |  Branch (284:6): [True: 72.9k, False: 2.53k]
  ------------------
  285|  72.9k|    *presult = result;
  286|  75.5k|  return guard->depth > 0;
  287|  75.5k|}
Curl_eapi_leave:
  290|  75.5k|{
  291|  75.5k|  if(guard->depth) {
  ------------------
  |  Branch (291:6): [True: 75.5k, False: 0]
  ------------------
  292|       |    /* guard->data is set when handle is supposed to stay alive during call */
  293|  75.5k|    if(guard->data && GOOD_EASY_HANDLE(guard->data)) {
  ------------------
  |  |   34|  72.9k|  (((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER)) ? TRUE : \
  |  |  ------------------
  |  |  |  |   28|  72.9k|#define CURLEASY_MAGIC_NUMBER 0xc0dedbadU
  |  |  ------------------
  |  |                 (((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER)) ? TRUE : \
  |  |  ------------------
  |  |  |  | 1045|  72.9k|#define TRUE true
  |  |  ------------------
  |  |  |  Branch (34:3): [True: 72.9k, False: 0]
  |  |  |  Branch (34:5): [True: 72.9k, False: 0]
  |  |  |  Branch (34:12): [True: 72.9k, False: 0]
  |  |  ------------------
  |  |   35|  72.9k|   (DEBUGASSERT(!(x)), FALSE))
  |  |  ------------------
  |  |  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |                  (DEBUGASSERT(!(x)), FALSE))
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  ------------------
  |  Branch (293:8): [True: 72.9k, False: 2.53k]
  |  Branch (293:23): [True: 0, False: 0]
  |  Branch (293:23): [True: 0, False: 0]
  ------------------
  294|  72.9k|      if(guard->depth > guard->data->callstack.count) {
  ------------------
  |  Branch (294:10): [True: 0, False: 72.9k]
  ------------------
  295|      0|        DEBUGASSERT(0); /* something very wrong */
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (295:9): [Folded, False: 0]
  |  Branch (295:9): [Folded, False: 0]
  ------------------
  296|      0|      }
  297|  72.9k|      else {
  298|  72.9k|        if(guard->depth < guard->data->callstack.count) {
  ------------------
  |  Branch (298:12): [True: 0, False: 72.9k]
  ------------------
  299|      0|          DEBUGASSERT(0); /* someone forgot to clean up */
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (299:11): [Folded, False: 0]
  |  Branch (299:11): [Folded, False: 0]
  ------------------
  300|      0|        }
  301|       |        /* reset to depth the guard was entered in */
  302|  72.9k|        guard->data->callstack.count = (uint16_t)(guard->depth - 1);
  303|  72.9k|      }
  304|  72.9k|    }
  305|  75.5k|  }
  306|  75.5k|}
Curl_mapi_enter:
  330|  15.2k|{
  331|  15.2k|  struct Curl_multi *multi = m;
  332|  15.2k|  const struct Curl_mapi_fn_props *fn_props;
  333|  15.2k|  CURLMcode mresult = CURLM_OK;
  334|       |
  335|  15.2k|  guard->depth = 0;
  336|       |
  337|       |  /* Verify that we got an easy handle we can work with. */
  338|  15.2k|  if(!GOOD_MULTI_HANDLE(multi)) {
  ------------------
  |  |   48|  15.2k|  (((x) && (x)->magic == CURLMULTI_MAGIC_NUMBER) ? TRUE : \
  |  |  ------------------
  |  |  |  |   41|  15.2k|#define CURLMULTI_MAGIC_NUMBER 0x000bab1e
  |  |  ------------------
  |  |                 (((x) && (x)->magic == CURLMULTI_MAGIC_NUMBER) ? TRUE : \
  |  |  ------------------
  |  |  |  | 1045|  15.2k|#define TRUE true
  |  |  ------------------
  |  |  |  Branch (48:5): [True: 15.2k, False: 0]
  |  |  |  Branch (48:12): [True: 15.2k, False: 0]
  |  |  ------------------
  |  |   49|  15.2k|  (DEBUGASSERT(!(x)), FALSE))
  |  |  ------------------
  |  |  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |                 (DEBUGASSERT(!(x)), FALSE))
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  ------------------
  |  Branch (338:6): [True: 0, False: 15.2k]
  |  Branch (338:7): [True: 0, False: 0]
  |  Branch (338:7): [True: 0, False: 0]
  ------------------
  339|      0|    mresult = CURLM_BAD_HANDLE;
  340|      0|    goto out;
  341|      0|  }
  342|  15.2k|  if(fn >= CURL_MAPI_FN_LAST) {
  ------------------
  |  Branch (342:6): [True: 0, False: 15.2k]
  ------------------
  343|      0|    mresult = CURLM_BAD_FUNCTION_ARGUMENT;
  344|      0|    goto out;
  345|      0|  }
  346|  15.2k|  fn_props = &mapi_fn_props[fn];
  347|  15.2k|  DEBUGASSERT(fn_props->fn == fn);
  ------------------
  |  | 1075|  15.2k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (347:3): [True: 0, False: 15.2k]
  |  Branch (347:3): [True: 15.2k, False: 0]
  ------------------
  348|  15.2k|  if(fn_props->allow_ntfy_cb && mapi_in_ntfy_cb(multi)) {
  ------------------
  |  Branch (348:6): [True: 10.1k, False: 5.07k]
  |  Branch (348:33): [True: 0, False: 10.1k]
  ------------------
  349|       |    /* explicitly allowed, even though normal recursion may not */
  350|      0|  }
  351|  15.2k|  else if(!fn_props->recurse && multi->callstack.count) {
  ------------------
  |  Branch (351:11): [True: 10.1k, False: 5.07k]
  |  Branch (351:33): [True: 0, False: 10.1k]
  ------------------
  352|      0|#ifdef CURLVERBOSE
  353|      0|      DEBUGF(curl_mfprintf(stderr,
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  ------------------
  354|      0|        "MAPI guard: calling %hu with call to %u ongoing\n", (uint16_t)fn,
  355|      0|        multi->callstack.calls[multi->callstack.count-1]));
  356|      0|#endif
  357|      0|    mresult = CURLM_RECURSIVE_API_CALL;
  358|      0|    goto out;
  359|      0|  }
  360|       |
  361|  15.2k|#if defined(USE_SSL) && defined(USE_MUTEX)
  362|  15.2k|  if(fn_props->no_scache_lock && multi->ssl_scache &&
  ------------------
  |  Branch (362:6): [True: 5.07k, False: 10.1k]
  |  Branch (362:34): [True: 5.07k, False: 0]
  ------------------
  363|  5.07k|     Curl_ssl_scache_is_locked_by_current_thread(multi->admin)) {
  ------------------
  |  Branch (363:6): [True: 0, False: 5.07k]
  ------------------
  364|      0|#ifdef CURLVERBOSE
  365|      0|      DEBUGF(curl_mfprintf(stderr,
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  ------------------
  366|      0|        "MAPI guard: calling %hu while its vtls_scache is locked by "
  367|      0|        "current thread\n", (uint16_t)fn));
  368|      0|#endif
  369|      0|    mresult = CURLM_RECURSIVE_API_CALL;
  370|      0|    goto out;
  371|      0|  }
  372|  15.2k|#endif
  373|       |
  374|       |  /* all fine, add to data's callstack */
  375|  15.2k|  if(multi->callstack.count >= CURL_MAPI_MAX_RECURSION) {
  ------------------
  |  |  169|  15.2k|#define CURL_MAPI_MAX_RECURSION       15
  ------------------
  |  Branch (375:6): [True: 0, False: 15.2k]
  ------------------
  376|      0|    mresult = CURLM_RECURSIVE_API_CALL;
  377|      0|    goto out;
  378|      0|  }
  379|  15.2k|  multi->callstack.calls[multi->callstack.count] = (uint16_t)fn;
  380|  15.2k|  ++multi->callstack.count;
  381|  15.2k|  guard->depth = multi->callstack.count;
  382|  15.2k|  guard->multi = fn_props->multi_is_killed ? NULL : multi;
  ------------------
  |  Branch (382:18): [True: 2.53k, False: 12.6k]
  ------------------
  383|       |
  384|  15.2k|out:
  385|  15.2k|  if(pmresult)
  ------------------
  |  Branch (385:6): [True: 10.1k, False: 5.07k]
  ------------------
  386|  10.1k|    *pmresult = mresult;
  387|  15.2k|  return guard->depth > 0;
  388|  15.2k|}
Curl_mapi_leave:
  391|   310k|{
  392|   310k|  if(guard->depth) {
  ------------------
  |  Branch (392:6): [True: 310k, False: 96]
  ------------------
  393|       |    /* guard->data is set when handle is supposed to stay alive during call */
  394|   310k|    if(guard->multi && GOOD_MULTI_HANDLE(guard->multi)) {
  ------------------
  |  |   48|   308k|  (((x) && (x)->magic == CURLMULTI_MAGIC_NUMBER) ? TRUE : \
  |  |  ------------------
  |  |  |  |   41|   308k|#define CURLMULTI_MAGIC_NUMBER 0x000bab1e
  |  |  ------------------
  |  |                 (((x) && (x)->magic == CURLMULTI_MAGIC_NUMBER) ? TRUE : \
  |  |  ------------------
  |  |  |  | 1045|   308k|#define TRUE true
  |  |  ------------------
  |  |  |  Branch (48:3): [True: 308k, False: 0]
  |  |  |  Branch (48:5): [True: 308k, False: 0]
  |  |  |  Branch (48:12): [True: 308k, False: 0]
  |  |  ------------------
  |  |   49|   308k|  (DEBUGASSERT(!(x)), FALSE))
  |  |  ------------------
  |  |  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |                 (DEBUGASSERT(!(x)), FALSE))
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  ------------------
  |  Branch (394:8): [True: 308k, False: 2.53k]
  |  Branch (394:24): [True: 0, False: 0]
  |  Branch (394:24): [True: 0, False: 0]
  ------------------
  395|   308k|      if(guard->depth > guard->multi->callstack.count) {
  ------------------
  |  Branch (395:10): [True: 0, False: 308k]
  ------------------
  396|      0|        DEBUGASSERT(0); /* something very wrong */
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (396:9): [Folded, False: 0]
  |  Branch (396:9): [Folded, False: 0]
  ------------------
  397|      0|      }
  398|   308k|      else {
  399|   308k|        if(guard->depth < guard->multi->callstack.count) {
  ------------------
  |  Branch (399:12): [True: 0, False: 308k]
  ------------------
  400|      0|          DEBUGASSERT(0); /* someone forgot to clean up */
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (400:11): [Folded, False: 0]
  |  Branch (400:11): [Folded, False: 0]
  ------------------
  401|      0|        }
  402|       |        /* reset to depth the guard was entered in */
  403|   308k|        guard->multi->callstack.count = (uint16_t)(guard->depth - 1);
  404|   308k|      }
  405|   308k|    }
  406|   310k|  }
  407|   310k|}
Curl_cbapi_enter:
  413|   295k|{
  414|   295k|  guard->depth = 0;
  415|       |
  416|   295k|  if(!multi)
  ------------------
  |  Branch (416:6): [True: 295k, False: 0]
  ------------------
  417|   295k|    multi = data ? data->multi : NULL;
  ------------------
  |  Branch (417:13): [True: 295k, False: 0]
  ------------------
  418|       |  /* if not multi is involved here, just leave */
  419|   295k|  if(!multi)
  ------------------
  |  Branch (419:6): [True: 96, False: 295k]
  ------------------
  420|     96|    return;
  421|       |  /* invalid callback specifier? */
  422|   295k|  if((fn >= CURL_CBAPI_FN_LAST) || (fn < CURL_CBAPI_FN_START)) {
  ------------------
  |  |  102|   295k|#define CURL_CBAPI_FN_START        (16 * 1024)
  ------------------
  |  Branch (422:6): [True: 0, False: 295k]
  |  Branch (422:36): [True: 0, False: 295k]
  ------------------
  423|      0|    DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (423:5): [Folded, False: 0]
  |  Branch (423:5): [Folded, False: 0]
  ------------------
  424|      0|    return;
  425|      0|  }
  426|   295k|  DEBUGASSERT(cbapi_fn_props[fn - CURL_CBAPI_FN_START].fn == fn);
  ------------------
  |  | 1075|   295k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (426:3): [True: 0, False: 295k]
  |  Branch (426:3): [True: 295k, False: 0]
  ------------------
  427|   295k|  if(multi->callstack.count) {
  ------------------
  |  Branch (427:6): [True: 295k, False: 0]
  ------------------
  428|   295k|    size_t i;
  429|   590k|    for(i = multi->callstack.count; i; --i) {
  ------------------
  |  Branch (429:37): [True: 295k, False: 295k]
  ------------------
  430|   295k|      if(multi->callstack.calls[i - 1] == fn) {
  ------------------
  |  Branch (430:10): [True: 0, False: 295k]
  ------------------
  431|       |        /* recursive invocation of the same callback */
  432|      0|        DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (432:9): [Folded, False: 0]
  |  Branch (432:9): [Folded, False: 0]
  ------------------
  433|      0|        return;
  434|      0|      }
  435|   295k|    }
  436|   295k|  }
  437|       |
  438|       |  /* all fine, add to data's callstack */
  439|       |  /* if multi callstack already at max depth, leave */
  440|   295k|  if(multi->callstack.count >= CURL_MAPI_MAX_RECURSION)
  ------------------
  |  |  169|   295k|#define CURL_MAPI_MAX_RECURSION       15
  ------------------
  |  Branch (440:6): [True: 0, False: 295k]
  ------------------
  441|      0|    return;
  442|   295k|  multi->callstack.calls[multi->callstack.count] = (uint16_t)fn;
  443|   295k|  ++multi->callstack.count;
  444|   295k|  guard->depth = multi->callstack.count;
  445|   295k|  guard->multi = multi;
  446|   295k|}
Curl_cbapi_leave:
  449|   295k|{
  450|   295k|  Curl_mapi_leave(guard);
  451|   295k|}
api.c:mapi_in_ntfy_cb:
  149|  10.1k|{
  150|  10.1k|  if(multi && multi->callstack.count) {
  ------------------
  |  Branch (150:6): [True: 10.1k, False: 0]
  |  Branch (150:15): [True: 0, False: 10.1k]
  ------------------
  151|      0|    size_t i;
  152|      0|    for(i = 0; i < multi->callstack.count; ++i) {
  ------------------
  |  Branch (152:16): [True: 0, False: 0]
  ------------------
  153|      0|      if(multi->callstack.calls[i] == CURL_CBAPI_FN_multi_ntfy_cb)
  ------------------
  |  Branch (153:10): [True: 0, False: 0]
  ------------------
  154|      0|        return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  155|      0|    }
  156|      0|  }
  157|  10.1k|  return FALSE;
  ------------------
  |  | 1048|  10.1k|#define FALSE false
  ------------------
  158|  10.1k|}

Curl_bufq_init2:
  220|  2.03k|{
  221|       |  bufq_init(q, NULL, chunk_size, max_chunks, opts);
  222|  2.03k|}
Curl_bufq_free:
  236|  2.03k|{
  237|  2.03k|  chunk_list_free(&q->head);
  238|  2.03k|  chunk_list_free(&q->spare);
  239|       |  q->tail = NULL;
  240|  2.03k|  q->chunk_count = 0;
  241|  2.03k|}
Curl_bufq_is_empty:
  267|  3.95k|{
  268|  3.95k|  return !q->head || chunk_is_empty(q->head);
  ------------------
  |  Branch (268:10): [True: 3.95k, False: 0]
  |  Branch (268:22): [True: 0, False: 0]
  ------------------
  269|  3.95k|}
bufq.c:chunk_list_free:
  137|  4.07k|{
  138|  4.07k|  struct buf_chunk *chunk;
  139|  4.07k|  while(*anchor) {
  ------------------
  |  Branch (139:9): [True: 0, False: 4.07k]
  ------------------
  140|      0|    chunk = *anchor;
  141|      0|    *anchor = chunk->next;
  142|      0|    curlx_free(chunk);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  143|      0|  }
  144|  4.07k|}
bufq.c:bufq_init:
  208|  2.03k|{
  209|  2.03k|  DEBUGASSERT(chunk_size > 0);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (209:3): [True: 0, False: 2.03k]
  |  Branch (209:3): [True: 2.03k, False: 0]
  ------------------
  210|  2.03k|  DEBUGASSERT(max_chunks > 0);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (210:3): [True: 0, False: 2.03k]
  |  Branch (210:3): [True: 2.03k, False: 0]
  ------------------
  211|  2.03k|  memset(q, 0, sizeof(*q));
  212|  2.03k|  q->chunk_size = chunk_size;
  213|  2.03k|  q->max_chunks = max_chunks;
  214|  2.03k|  q->pool = pool;
  215|  2.03k|  q->opts = opts;
  216|  2.03k|}

Curl_bufref_init:
   38|  10.1k|{
   39|  10.1k|  DEBUGASSERT(br);
  ------------------
  |  | 1075|  10.1k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (39:3): [True: 0, False: 10.1k]
  |  Branch (39:3): [True: 10.1k, False: 0]
  ------------------
   40|  10.1k|  br->dtor = NULL;
   41|  10.1k|  br->ptr = NULL;
   42|  10.1k|  br->len = 0;
   43|       |
   44|  10.1k|#ifdef DEBUGBUILD
   45|  10.1k|  br->signature = SIGNATURE;
  ------------------
  |  |   31|  10.1k|#define SIGNATURE 0x5c48e9b2    /* Random pattern. */
  ------------------
   46|  10.1k|#endif
   47|  10.1k|}
Curl_bufref_free:
   55|  25.0k|{
   56|  25.0k|  DEBUGASSERT(br);
  ------------------
  |  | 1075|  25.0k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (56:3): [True: 0, False: 25.0k]
  |  Branch (56:3): [True: 25.0k, False: 0]
  ------------------
   57|  25.0k|  DEBUGASSERT(br->signature == SIGNATURE);
  ------------------
  |  | 1075|  25.0k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (57:3): [True: 0, False: 25.0k]
  |  Branch (57:3): [True: 25.0k, False: 0]
  ------------------
   58|  25.0k|  DEBUGASSERT(br->ptr || !br->len);
  ------------------
  |  | 1075|  25.0k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (58:3): [True: 25.0k, False: 0]
  |  Branch (58:3): [True: 0, False: 0]
  |  Branch (58:3): [True: 7.26k, False: 17.7k]
  |  Branch (58:3): [True: 17.7k, False: 0]
  ------------------
   59|       |
   60|  25.0k|  if(br->ptr && br->dtor)
  ------------------
  |  Branch (60:6): [True: 7.26k, False: 17.7k]
  |  Branch (60:17): [True: 2.18k, False: 5.07k]
  ------------------
   61|  2.18k|    br->dtor(CURL_UNCONST(br->ptr));
  ------------------
  |  |  856|  2.18k|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
   62|       |
   63|  25.0k|  br->dtor = NULL;
   64|       |  br->ptr = NULL;
   65|  25.0k|  br->len = 0;
   66|  25.0k|}
Curl_bufref_set:
   74|  7.26k|{
   75|  7.26k|  DEBUGASSERT(ptr || !len);
  ------------------
  |  | 1075|  7.26k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (75:3): [True: 7.26k, False: 0]
  |  Branch (75:3): [True: 0, False: 0]
  |  Branch (75:3): [True: 7.26k, False: 0]
  |  Branch (75:3): [True: 0, False: 0]
  ------------------
   76|  7.26k|  DEBUGASSERT(len <= CURL_MAX_INPUT_LENGTH);
  ------------------
  |  | 1075|  7.26k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (76:3): [True: 0, False: 7.26k]
  |  Branch (76:3): [True: 7.26k, False: 0]
  ------------------
   77|       |
   78|  7.26k|  Curl_bufref_free(br);
   79|  7.26k|  br->ptr = (const unsigned char *)ptr;
   80|  7.26k|  br->len = len;
   81|  7.26k|  br->dtor = dtor;
   82|  7.26k|}
Curl_bufref_ptr:
  100|  5.07k|{
  101|  5.07k|  DEBUGASSERT(br);
  ------------------
  |  | 1075|  5.07k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (101:3): [True: 0, False: 5.07k]
  |  Branch (101:3): [True: 5.07k, False: 0]
  ------------------
  102|  5.07k|  DEBUGASSERT(br->signature == SIGNATURE);
  ------------------
  |  | 1075|  5.07k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (102:3): [True: 0, False: 5.07k]
  |  Branch (102:3): [True: 5.07k, False: 0]
  ------------------
  103|  5.07k|  DEBUGASSERT(br->ptr || !br->len);
  ------------------
  |  | 1075|  5.07k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (103:3): [True: 5.07k, False: 0]
  |  Branch (103:3): [True: 0, False: 0]
  |  Branch (103:3): [True: 5.07k, False: 0]
  |  Branch (103:3): [True: 0, False: 0]
  ------------------
  104|       |
  105|  5.07k|  return (const char *)br->ptr;
  106|  5.07k|}

Curl_cf_ip_happy_insert_after:
 1009|  2.03k|{
 1010|  2.03k|  struct Curl_cfilter *cf;
 1011|  2.03k|  CURLcode result;
 1012|       |
 1013|       |  /* Need to be first */
 1014|  2.03k|  DEBUGASSERT(cf_at);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1014:3): [True: 0, False: 2.03k]
  |  Branch (1014:3): [True: 2.03k, False: 0]
  ------------------
 1015|  2.03k|  result = cf_ip_happy_create(&cf, data, origin, peer, transport_peer,
 1016|  2.03k|                              cf_at->conn, tunnel_peer, tunnel_transport);
 1017|  2.03k|  if(result)
  ------------------
  |  Branch (1017:6): [True: 0, False: 2.03k]
  ------------------
 1018|      0|    return result;
 1019|       |
 1020|  2.03k|  Curl_conn_cf_insert_after(cf_at, cf);
 1021|  2.03k|  return CURLE_OK;
 1022|  2.03k|}
cf-ip-happy.c:cf_ip_happy_destroy:
  937|  2.03k|{
  938|  2.03k|  struct cf_ip_happy_ctx *ctx = cf->ctx;
  939|       |
  940|  2.03k|  CURL_TRC_CF(data, cf, "destroy");
  ------------------
  |  |  153|  2.03k|  do {                                          \
  |  |  154|  2.03k|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|  2.03k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|  2.03k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 2.03k, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|  2.03k|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  941|  2.03k|  if(ctx) {
  ------------------
  |  Branch (941:6): [True: 2.03k, False: 0]
  ------------------
  942|  2.03k|    cf_ip_happy_ctx_clear(ctx, data);
  943|  2.03k|    cf_ip_happy_ctx_destroy(ctx, data);
  944|  2.03k|  }
  945|  2.03k|}
cf-ip-happy.c:cf_ip_happy_ctx_clear:
  772|  6.10k|{
  773|  6.10k|  DEBUGASSERT(ctx);
  ------------------
  |  | 1075|  6.10k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (773:3): [True: 0, False: 6.10k]
  |  Branch (773:3): [True: 6.10k, False: 0]
  ------------------
  774|  6.10k|  if(ctx)
  ------------------
  |  Branch (774:6): [True: 6.10k, False: 0]
  ------------------
  775|  6.10k|    cf_ip_ballers_clear(data, &ctx->ballers);
  776|  6.10k|}
cf-ip-happy.c:cf_ip_ballers_clear:
  321|  6.10k|{
  322|  6.10k|  while(bs->running) {
  ------------------
  |  Branch (322:9): [True: 0, False: 6.10k]
  ------------------
  323|      0|    struct cf_ip_attempt *a = bs->running;
  324|      0|    bs->running = a->next;
  325|      0|    cf_ip_attempt_free(a, data);
  326|      0|  }
  327|  6.10k|  cf_ip_attempt_free(bs->winner, data);
  328|       |  bs->winner = NULL;
  329|  6.10k|  Curl_peer_unlink(&bs->origin);
  330|  6.10k|  Curl_peer_unlink(&bs->peer);
  331|  6.10k|  Curl_peer_unlink(&bs->tunnel_peer);
  332|  6.10k|}
cf-ip-happy.c:cf_ip_attempt_free:
  182|  6.10k|{
  183|  6.10k|  if(a) {
  ------------------
  |  Branch (183:6): [True: 2.03k, False: 4.07k]
  ------------------
  184|  2.03k|    if(a->cf)
  ------------------
  |  Branch (184:8): [True: 0, False: 2.03k]
  ------------------
  185|      0|      Curl_conn_cf_discard_chain(&a->cf, data);
  186|  2.03k|    Curl_peer_unlink(&a->origin);
  187|  2.03k|    Curl_peer_unlink(&a->peer);
  188|  2.03k|    Curl_peer_unlink(&a->tunnel_peer);
  189|  2.03k|    curlx_free(a);
  ------------------
  |  | 1476|  2.03k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  190|  2.03k|  }
  191|  6.10k|}
cf-ip-happy.c:cf_ip_happy_ctx_destroy:
  780|  2.03k|{
  781|  2.03k|  if(ctx) {
  ------------------
  |  Branch (781:6): [True: 2.03k, False: 0]
  ------------------
  782|  2.03k|    cf_ip_happy_ctx_clear(ctx, data);
  783|  2.03k|    curlx_free(ctx);
  ------------------
  |  | 1476|  2.03k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  784|  2.03k|  }
  785|  2.03k|}
cf-ip-happy.c:cf_ip_happy_connect:
  823|  2.03k|{
  824|  2.03k|  struct cf_ip_happy_ctx *ctx = cf->ctx;
  825|  2.03k|  CURLcode result = CURLE_OK;
  826|       |
  827|       |  /* -Werror=null-dereference finds false positives suddenly. */
  828|  2.03k|  if(!data)
  ------------------
  |  Branch (828:6): [True: 0, False: 2.03k]
  ------------------
  829|      0|    return CURLE_FAILED_INIT;
  830|       |
  831|  2.03k|  if(cf->connected) {
  ------------------
  |  Branch (831:6): [True: 0, False: 2.03k]
  ------------------
  832|      0|    *done = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  833|      0|    return CURLE_OK;
  834|      0|  }
  835|       |
  836|  2.03k|  DEBUGASSERT(ctx);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (836:3): [True: 0, False: 2.03k]
  |  Branch (836:3): [True: 2.03k, False: 0]
  ------------------
  837|  2.03k|  *done = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  838|       |
  839|  2.03k|  if(!ctx->dns_resolved) {
  ------------------
  |  Branch (839:6): [True: 2.03k, False: 0]
  ------------------
  840|  2.03k|    result = Curl_conn_dns_addr_result(cf->conn, cf->sockindex,
  841|  2.03k|                                       ctx->ballers.peer);
  842|  2.03k|    if(!result)
  ------------------
  |  Branch (842:8): [True: 2.03k, False: 0]
  ------------------
  843|  2.03k|      ctx->dns_resolved = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  844|      0|    else if(result == CURLE_AGAIN) {
  ------------------
  |  Branch (844:13): [True: 0, False: 0]
  ------------------
  845|      0|      result = CURLE_OK;
  846|      0|    }
  847|      0|    else /* real error */
  848|      0|      goto out;
  849|  2.03k|  }
  850|       |
  851|  2.03k|  switch(ctx->state) {
  ------------------
  |  Branch (851:10): [True: 2.03k, False: 0]
  ------------------
  852|  2.03k|  case SCFST_INIT:
  ------------------
  |  Branch (852:3): [True: 2.03k, False: 0]
  ------------------
  853|  2.03k|    DEBUGASSERT(CURL_SOCKET_BAD == Curl_conn_cf_get_socket(cf, data));
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (853:5): [True: 0, False: 2.03k]
  |  Branch (853:5): [True: 2.03k, False: 0]
  ------------------
  854|  2.03k|    DEBUGASSERT(!cf->connected);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (854:5): [True: 0, False: 2.03k]
  |  Branch (854:5): [True: 2.03k, False: 0]
  ------------------
  855|  2.03k|    result = cf_ip_happy_init(cf, data);
  856|  2.03k|    if(result)
  ------------------
  |  Branch (856:8): [True: 0, False: 2.03k]
  ------------------
  857|      0|      goto out;
  858|  2.03k|    ctx->state = SCFST_WAITING;
  859|  2.03k|    FALLTHROUGH();
  ------------------
  |  |  815|  2.03k|#  define FALLTHROUGH()  __attribute__((fallthrough))
  ------------------
  860|  2.03k|  case SCFST_WAITING:
  ------------------
  |  Branch (860:3): [True: 0, False: 2.03k]
  ------------------
  861|  2.03k|    result = is_connected(cf, data, done);
  862|  2.03k|    if(!result && *done) {
  ------------------
  |  Branch (862:8): [True: 2.03k, False: 0]
  |  Branch (862:19): [True: 2.03k, False: 0]
  ------------------
  863|  2.03k|      DEBUGASSERT(ctx->ballers.winner);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (863:7): [True: 0, False: 2.03k]
  |  Branch (863:7): [True: 2.03k, False: 0]
  ------------------
  864|  2.03k|      DEBUGASSERT(ctx->ballers.winner->cf);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (864:7): [True: 0, False: 2.03k]
  |  Branch (864:7): [True: 2.03k, False: 0]
  ------------------
  865|  2.03k|      DEBUGASSERT(ctx->ballers.winner->cf->connected);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (865:7): [True: 0, False: 2.03k]
  |  Branch (865:7): [True: 2.03k, False: 0]
  ------------------
  866|       |      /* we have a winner. Install and activate it.
  867|       |       * close/free all others. */
  868|  2.03k|      ctx->state = SCFST_DONE;
  869|  2.03k|      cf->connected = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  870|  2.03k|      cf->next = ctx->ballers.winner->cf;
  871|  2.03k|      ctx->ballers.winner->cf = NULL;
  872|       |
  873|  2.03k|      if(cf->conn->scheme->protocol & PROTO_FAMILY_SSH)
  ------------------
  |  |   90|  2.03k|#define PROTO_FAMILY_SSH  (CURLPROTO_SCP | CURLPROTO_SFTP)
  |  |  ------------------
  |  |  |  | 1092|  2.03k|#define CURLPROTO_SCP     (1L << 4)
  |  |  ------------------
  |  |               #define PROTO_FAMILY_SSH  (CURLPROTO_SCP | CURLPROTO_SFTP)
  |  |  ------------------
  |  |  |  | 1093|  2.03k|#define CURLPROTO_SFTP    (1L << 5)
  |  |  ------------------
  ------------------
  |  Branch (873:10): [True: 0, False: 2.03k]
  ------------------
  874|      0|        Curl_pgrsTime(data, TIMER_APPCONNECT); /* we are connected already */
  875|  2.03k|#ifdef CURLVERBOSE
  876|  2.03k|      if(Curl_trc_cf_is_verbose(cf, data)) {
  ------------------
  |  |  326|  2.03k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  ------------------
  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  327|  2.03k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  ------------------
  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  ------------------
  |  |  |  Branch (327:4): [True: 2.03k, False: 0]
  |  |  |  Branch (327:12): [True: 0, False: 2.03k]
  |  |  ------------------
  ------------------
  877|      0|        struct ip_quadruple ipquad;
  878|      0|        bool is_ipv6;
  879|      0|        if(!Curl_conn_cf_get_ip_info(cf->next, data, &is_ipv6, &ipquad)) {
  ------------------
  |  Branch (879:12): [True: 0, False: 0]
  ------------------
  880|      0|          CURL_TRC_CF(data, cf, "Connected to %s (%s) port %u",
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  881|      0|                      ctx->ballers.peer->hostname,
  882|      0|                      ipquad.remote_ip, ipquad.remote_port);
  883|      0|        }
  884|      0|      }
  885|  2.03k|#endif
  886|  2.03k|      cf_ip_happy_ctx_clear(ctx, data);
  887|  2.03k|      Curl_expire_clear(data, EXPIRE_HAPPY_EYEBALLS);
  888|       |      /* whatever errors were reported by ballers, clear our errorbuf */
  889|  2.03k|      Curl_reset_fail(data);
  890|  2.03k|      data->info.numconnects++; /* to track the # of connections made */
  891|  2.03k|    }
  892|  2.03k|    break;
  893|  2.03k|  case SCFST_DONE:
  ------------------
  |  Branch (893:3): [True: 0, False: 2.03k]
  ------------------
  894|      0|    *done = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  895|      0|    break;
  896|  2.03k|  }
  897|  2.03k|out:
  898|  2.03k|  return result;
  899|  2.03k|}
cf-ip-happy.c:cf_ip_happy_init:
  741|  2.03k|{
  742|  2.03k|  struct cf_ip_happy_ctx *ctx = cf->ctx;
  743|       |
  744|  2.03k|  if(Curl_timeleft_ms(data) < 0) {
  ------------------
  |  Branch (744:6): [True: 0, False: 2.03k]
  ------------------
  745|       |    /* a precaution, no need to continue if time already is up */
  746|      0|    failf(data, "Connection time-out");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  747|      0|    return CURLE_OPERATION_TIMEDOUT;
  748|      0|  }
  749|       |
  750|  2.03k|  if(ctx->ballers.transport_peer == TRNSPRT_UNIX) {
  ------------------
  |  |  241|  2.03k|#define TRNSPRT_UNIX 6
  ------------------
  |  Branch (750:6): [True: 0, False: 2.03k]
  ------------------
  751|      0|#ifdef USE_UNIX_SOCKETS
  752|      0|    cf_ai_iter_init(&ctx->ballers.addr_iter, cf, ctx->ballers.peer, AF_UNIX);
  753|       |#else
  754|       |    return CURLE_UNSUPPORTED_PROTOCOL;
  755|       |#endif
  756|      0|  }
  757|  2.03k|  else { /* TCP/UDP/QUIC */
  758|  2.03k|#ifdef USE_IPV6
  759|  2.03k|    cf_ai_iter_init(&ctx->ballers.ipv6_iter, cf, ctx->ballers.peer, AF_INET6);
  760|  2.03k|#endif
  761|  2.03k|    cf_ai_iter_init(&ctx->ballers.addr_iter, cf, ctx->ballers.peer, AF_INET);
  762|  2.03k|  }
  763|       |
  764|  2.03k|  CURL_TRC_CF(data, cf, "init ip ballers for transport %u",
  ------------------
  |  |  153|  2.03k|  do {                                          \
  |  |  154|  2.03k|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|  2.03k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|  2.03k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 2.03k, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|  2.03k|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  765|  2.03k|              ctx->ballers.transport_peer);
  766|  2.03k|  ctx->started = *Curl_pgrs_now(data);
  767|  2.03k|  return CURLE_OK;
  768|  2.03k|}
cf-ip-happy.c:cf_ai_iter_init:
  130|  4.07k|{
  131|  4.07k|  iter->cf = cf;
  132|  4.07k|  iter->peer = peer; /* not linked, ctx->ballers owns and has same lifetime */
  133|  4.07k|  iter->ai_family = ai_family;
  134|  4.07k|  iter->n = 0;
  135|  4.07k|}
cf-ip-happy.c:is_connected:
  681|  2.03k|{
  682|  2.03k|  struct cf_ip_happy_ctx *ctx = cf->ctx;
  683|  2.03k|  struct connectdata *conn = cf->conn;
  684|  2.03k|  CURLcode result;
  685|       |
  686|  2.03k|  result = cf_ip_ballers_run(&ctx->ballers, cf, data,
  687|  2.03k|                             (bool)ctx->dns_resolved, connected);
  688|       |
  689|  2.03k|  if(!result)
  ------------------
  |  Branch (689:6): [True: 2.03k, False: 0]
  ------------------
  690|  2.03k|    return CURLE_OK;
  691|      0|  else {
  692|      0|    struct Curl_peer *peer = NULL, *proxy_peer = NULL;
  693|      0|    char viamsg[160];
  694|       |
  695|      0|    peer = Curl_conn_get_first_peer(conn, cf->sockindex);
  696|      0|    if(!conn->origin || !peer)
  ------------------
  |  Branch (696:8): [True: 0, False: 0]
  |  Branch (696:25): [True: 0, False: 0]
  ------------------
  697|      0|      return CURLE_FAILED_INIT;
  698|       |
  699|      0|#ifndef CURL_DISABLE_PROXY
  700|      0|    if(conn->socks_proxy.peer)
  ------------------
  |  Branch (700:8): [True: 0, False: 0]
  ------------------
  701|      0|      proxy_peer = conn->socks_proxy.peer;
  702|      0|    else if(conn->http_proxy.peer)
  ------------------
  |  Branch (702:13): [True: 0, False: 0]
  ------------------
  703|      0|      proxy_peer = conn->http_proxy.peer;
  704|      0|#endif
  705|       |
  706|      0|    viamsg[0] = 0;
  707|      0|    if(!Curl_peer_equal(peer, conn->origin) &&
  ------------------
  |  Branch (707:8): [True: 0, False: 0]
  ------------------
  708|      0|       !Curl_peer_equal(peer, proxy_peer)) {
  ------------------
  |  Branch (708:8): [True: 0, False: 0]
  ------------------
  709|      0|#ifdef USE_UNIX_SOCKETS
  710|      0|      if(peer->unix_socket)
  ------------------
  |  Branch (710:10): [True: 0, False: 0]
  ------------------
  711|      0|        curl_msnprintf(viamsg, sizeof(viamsg), " over unix://%s",
  712|      0|                       peer->hostname);
  713|      0|      else
  714|      0|#endif
  715|      0|      curl_msnprintf(viamsg, sizeof(viamsg), " via %s:%u",
  716|      0|                     peer->hostname, peer->port);
  717|      0|    }
  718|       |
  719|      0|    failf(data, "Failed to connect to %s:%u%s %s%s%safter "
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  720|      0|          "%" FMT_TIMEDIFF_T " ms: %s",
  721|      0|          conn->origin->hostname, conn->origin->port, viamsg,
  722|      0|          proxy_peer ? "over proxy " : "",
  ------------------
  |  Branch (722:11): [True: 0, False: 0]
  ------------------
  723|      0|          proxy_peer ? proxy_peer->hostname : "",
  ------------------
  |  Branch (723:11): [True: 0, False: 0]
  ------------------
  724|      0|          proxy_peer ? " " : "",
  ------------------
  |  Branch (724:11): [True: 0, False: 0]
  ------------------
  725|      0|          Curl_pgrs_since_ms(data, NULL, TIMER_STARTSINGLE),
  726|      0|          curl_easy_strerror(result));
  727|       |
  728|      0|#ifdef SOCKETIMEDOUT
  729|      0|    if(SOCKETIMEDOUT == data->state.os_errno)
  ------------------
  |  | 1129|      0|#define SOCKETIMEDOUT     ETIMEDOUT
  ------------------
  |  Branch (729:8): [True: 0, False: 0]
  ------------------
  730|      0|      result = CURLE_OPERATION_TIMEDOUT;
  731|      0|#endif
  732|       |
  733|      0|    return result;
  734|      0|  }
  735|  2.03k|}
cf-ip-happy.c:cf_ip_ballers_run:
  396|  2.03k|{
  397|  2.03k|  CURLcode result = CURLE_OK;
  398|  2.03k|  struct cf_ip_attempt *a = NULL, **panchor;
  399|  2.03k|  bool do_more;
  400|  2.03k|  timediff_t next_expire_ms;
  401|  2.03k|  uint32_t inconclusive, ongoing;
  402|  2.03k|  VERBOSE(int i);
  ------------------
  |  | 1611|  2.03k|#define VERBOSE(x) x
  ------------------
  403|       |
  404|  2.03k|  if(bs->winner)
  ------------------
  |  Branch (404:6): [True: 0, False: 2.03k]
  ------------------
  405|      0|    return CURLE_OK;
  406|       |
  407|  4.07k|evaluate:
  408|  4.07k|  ongoing = inconclusive = 0;
  409|       |
  410|       |  /* check if a running baller connects now */
  411|  4.07k|  VERBOSE(i = -1);
  ------------------
  |  | 1611|  4.07k|#define VERBOSE(x) x
  ------------------
  412|  4.07k|  for(panchor = &bs->running; *panchor; panchor = &(*panchor)->next) {
  ------------------
  |  Branch (412:31): [True: 2.03k, False: 2.03k]
  ------------------
  413|  2.03k|    VERBOSE(++i);
  ------------------
  |  | 1611|  2.03k|#define VERBOSE(x) x
  ------------------
  414|  2.03k|    a = *panchor;
  415|  2.03k|    a->result = cf_ip_attempt_connect(a, data, connected);
  416|  2.03k|    if(!a->result) {
  ------------------
  |  Branch (416:8): [True: 2.03k, False: 0]
  ------------------
  417|  2.03k|      if(*connected) {
  ------------------
  |  Branch (417:10): [True: 2.03k, False: 0]
  ------------------
  418|       |        /* connected, declare the winner, remove from running,
  419|       |         * clear remaining running list. */
  420|  2.03k|        CURL_TRC_CF(data, cf, "connect attempt #%d successful", i);
  ------------------
  |  |  153|  2.03k|  do {                                          \
  |  |  154|  2.03k|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|  2.03k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|  2.03k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 2.03k, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|  2.03k|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  421|  2.03k|        bs->winner = a;
  422|  2.03k|        *panchor = a->next;
  423|  2.03k|        a->next = NULL;
  424|  2.03k|        while(bs->running) {
  ------------------
  |  Branch (424:15): [True: 0, False: 2.03k]
  ------------------
  425|      0|          a = bs->running;
  426|      0|          bs->running = a->next;
  427|      0|          cf_ip_attempt_free(a, data);
  428|      0|        }
  429|  2.03k|        return CURLE_OK;
  430|  2.03k|      }
  431|       |      /* still running */
  432|      0|      ++ongoing;
  433|      0|    }
  434|      0|    else if(a->inconclusive) /* failed, but inconclusive */
  ------------------
  |  Branch (434:13): [True: 0, False: 0]
  ------------------
  435|      0|      ++inconclusive;
  436|  2.03k|  }
  437|  2.03k|  if(bs->running)
  ------------------
  |  Branch (437:6): [True: 0, False: 2.03k]
  ------------------
  438|      0|    CURL_TRC_CF(data, cf, "checked connect attempts: "
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  439|  2.03k|                "%u ongoing, %u inconclusive", ongoing, inconclusive);
  440|       |
  441|       |  /* no attempt connected yet, start another one? */
  442|  2.03k|  if(!ongoing) {
  ------------------
  |  Branch (442:6): [True: 2.03k, False: 0]
  ------------------
  443|  2.03k|    if(!bs->started.tv_sec && !bs->started.tv_usec)
  ------------------
  |  Branch (443:8): [True: 2.03k, False: 0]
  |  Branch (443:31): [True: 2.03k, False: 0]
  ------------------
  444|  2.03k|      bs->started = *Curl_pgrs_now(data);
  445|  2.03k|    do_more = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  446|  2.03k|  }
  447|      0|  else {
  448|      0|    bool more_possible = cf_ai_iter_has_more(&bs->addr_iter, data);
  449|      0|#ifdef USE_IPV6
  450|      0|    if(!more_possible)
  ------------------
  |  Branch (450:8): [True: 0, False: 0]
  ------------------
  451|      0|      more_possible = cf_ai_iter_has_more(&bs->ipv6_iter, data);
  452|      0|#endif
  453|      0|    do_more = more_possible &&
  ------------------
  |  Branch (453:15): [True: 0, False: 0]
  ------------------
  454|      0|      (curlx_ptimediff_ms(Curl_pgrs_now(data), &bs->last_attempt_started) >=
  ------------------
  |  Branch (454:7): [True: 0, False: 0]
  ------------------
  455|      0|       bs->attempt_delay_ms);
  456|      0|    if(do_more)
  ------------------
  |  Branch (456:8): [True: 0, False: 0]
  ------------------
  457|      0|      CURL_TRC_CF(data, cf, "happy eyeballs timeout expired, "
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  458|      0|                  "start next attempt");
  459|      0|  }
  460|       |
  461|  2.03k|  if(do_more) {
  ------------------
  |  Branch (461:6): [True: 2.03k, False: 0]
  ------------------
  462|       |    /* start the next attempt if there is another ip address to try.
  463|       |     * Alternate between address families when possible. */
  464|  2.03k|    const struct Curl_addrinfo *ai = NULL;
  465|  2.03k|    int ai_family = 0;
  466|  2.03k|    CURL_TRC_CF(data, cf, "want to do more");
  ------------------
  |  |  153|  2.03k|  do {                                          \
  |  |  154|  2.03k|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|  2.03k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|  2.03k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 2.03k, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|  2.03k|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  467|  2.03k|#ifdef USE_IPV6
  468|  2.03k|    if((bs->last_attempt_ai_family == AF_INET) ||
  ------------------
  |  Branch (468:8): [True: 2.03k, False: 0]
  ------------------
  469|  2.03k|       !cf_ai_iter_has_more(&bs->addr_iter, data)) {
  ------------------
  |  Branch (469:8): [True: 0, False: 0]
  ------------------
  470|  2.03k|      ai = cf_ai_iter_next(&bs->ipv6_iter, data);
  471|  2.03k|      ai_family = bs->ipv6_iter.ai_family;
  472|  2.03k|      CURL_TRC_CF(data, cf, "check for next AAAA address: %s",
  ------------------
  |  |  153|  2.03k|  do {                                          \
  |  |  154|  2.03k|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|  2.03k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|  2.03k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 2.03k, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|  2.03k|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  ------------------
  |  |  |  Branch (155:35): [True: 0, False: 0]
  |  |  ------------------
  |  |  156|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  473|  2.03k|                  ai ? "found" : "none");
  474|  2.03k|    }
  475|  2.03k|#endif
  476|  2.03k|    if(!ai) {
  ------------------
  |  Branch (476:8): [True: 2.03k, False: 0]
  ------------------
  477|  2.03k|      ai = cf_ai_iter_next(&bs->addr_iter, data);
  478|  2.03k|      ai_family = bs->addr_iter.ai_family;
  479|  2.03k|      CURL_TRC_CF(data, cf, "check for next A address: %s",
  ------------------
  |  |  153|  2.03k|  do {                                          \
  |  |  154|  2.03k|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|  2.03k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|  2.03k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 2.03k, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|  2.03k|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  ------------------
  |  |  |  Branch (155:35): [True: 0, False: 0]
  |  |  ------------------
  |  |  156|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  480|  2.03k|                  ai ? "found" : "none");
  481|  2.03k|    }
  482|       |    /* We are (re-)starting attempts. We are not interested in
  483|       |     * keeping old failure information. The new attempt will either
  484|       |     * succeed or persist new failure. */
  485|  2.03k|    Curl_reset_fail(data);
  486|       |
  487|  2.03k|    if(ai) {  /* try another address */
  ------------------
  |  Branch (487:8): [True: 2.03k, False: 0]
  ------------------
  488|  2.03k|      struct Curl_sockaddr_ex addr;
  489|       |
  490|       |      /* Discard oldest to make room for new attempt */
  491|  2.03k|      if(bs->max_concurrent)
  ------------------
  |  Branch (491:10): [True: 2.03k, False: 0]
  ------------------
  492|  2.03k|        cf_ip_ballers_prune(bs, cf, data, bs->max_concurrent - 1);
  493|       |
  494|  2.03k|      result = Curl_socket_addr_from_ai(&addr, ai, bs->transport_peer);
  495|  2.03k|      if(result)
  ------------------
  |  Branch (495:10): [True: 0, False: 2.03k]
  ------------------
  496|      0|        goto out;
  497|       |
  498|  2.03k|      result = cf_ip_attempt_new(&a, data, cf, bs->origin, bs->peer,
  499|  2.03k|                                 bs->transport_peer, &addr, ai_family,
  500|  2.03k|                                 bs->tunnel_peer, bs->tunnel_transport,
  501|  2.03k|                                 bs->cf_create);
  502|  2.03k|      CURL_TRC_CF(data, cf, "starting %s attempt for ipv%s -> %d",
  ------------------
  |  |  153|  2.03k|  do {                                          \
  |  |  154|  2.03k|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|  2.03k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|  2.03k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 2.03k, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|  2.03k|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  ------------------
  |  |  |  Branch (155:35): [True: 0, False: 0]
  |  |  |  Branch (155:35): [True: 0, False: 0]
  |  |  ------------------
  |  |  156|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  503|  2.03k|                  bs->running ? "next" : "first",
  504|  2.03k|                  (ai_family == AF_INET) ? "4" : "6", (int)result);
  505|  2.03k|      if(result)
  ------------------
  |  Branch (505:10): [True: 0, False: 2.03k]
  ------------------
  506|      0|        goto out;
  507|  2.03k|      DEBUGASSERT(a);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (507:7): [True: 0, False: 2.03k]
  |  Branch (507:7): [True: 2.03k, False: 0]
  ------------------
  508|       |
  509|       |      /* append to running list */
  510|  2.03k|      panchor = &bs->running;
  511|  2.03k|      while(*panchor)
  ------------------
  |  Branch (511:13): [True: 0, False: 2.03k]
  ------------------
  512|      0|        panchor = &(*panchor)->next;
  513|  2.03k|      *panchor = a;
  514|  2.03k|      bs->last_attempt_started = *Curl_pgrs_now(data);
  515|  2.03k|      bs->last_attempt_ai_family = ai_family;
  516|       |      /* and run everything again */
  517|  2.03k|      goto evaluate;
  518|  2.03k|    }
  519|      0|    else if(inconclusive) {
  ------------------
  |  Branch (519:13): [True: 0, False: 0]
  ------------------
  520|       |      /* tried all addresses, no success but some where inconclusive.
  521|       |       * Let's restart the inconclusive ones. */
  522|      0|      timediff_t since_ms =
  523|      0|        curlx_ptimediff_ms(Curl_pgrs_now(data), &bs->last_attempt_started);
  524|      0|      timediff_t delay_ms = bs->attempt_delay_ms - since_ms;
  525|      0|      if(delay_ms <= 0) {
  ------------------
  |  Branch (525:10): [True: 0, False: 0]
  ------------------
  526|      0|        CURL_TRC_CF(data, cf, "all attempts inconclusive, restarting one");
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  527|      0|        VERBOSE(i = -1);
  ------------------
  |  | 1611|      0|#define VERBOSE(x) x
  ------------------
  528|      0|        for(a = bs->running; a; a = a->next) {
  ------------------
  |  Branch (528:30): [True: 0, False: 0]
  ------------------
  529|      0|          VERBOSE(++i);
  ------------------
  |  | 1611|      0|#define VERBOSE(x) x
  ------------------
  530|      0|          if(!a->inconclusive)
  ------------------
  |  Branch (530:14): [True: 0, False: 0]
  ------------------
  531|      0|            continue;
  532|      0|          result = cf_ip_attempt_restart(a, cf, data);
  533|      0|          CURL_TRC_CF(data, cf, "restarted baller %d -> %d", i, (int)result);
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  534|      0|          if(result) /* serious failure */
  ------------------
  |  Branch (534:14): [True: 0, False: 0]
  ------------------
  535|      0|            goto out;
  536|      0|          bs->last_attempt_started = *Curl_pgrs_now(data);
  537|      0|          goto evaluate;
  538|      0|        }
  539|      0|        DEBUGASSERT(0); /* should not come here */
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (539:9): [Folded, False: 0]
  |  Branch (539:9): [Folded, False: 0]
  ------------------
  540|      0|      }
  541|      0|      else {
  542|       |        /* let's wait some more before restarting */
  543|      0|        infof(data, "connect attempts inconclusive, retrying "
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  544|      0|                    "in %" FMT_TIMEDIFF_T "ms", delay_ms);
  545|      0|        Curl_expire(data, delay_ms, EXPIRE_HAPPY_EYEBALLS);
  546|      0|      }
  547|       |      /* attempt timeout for restart has not expired yet */
  548|      0|      goto out;
  549|      0|    }
  550|      0|    else if(!ongoing && dns_resolved) {
  ------------------
  |  Branch (550:13): [True: 0, False: 0]
  |  Branch (550:25): [True: 0, False: 0]
  ------------------
  551|       |      /* no more addresses, no inconclusive attempts */
  552|      0|      CURL_TRC_CF(data, cf, "no more attempts to try");
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  553|      0|      result = CURLE_COULDNT_CONNECT;
  554|      0|      VERBOSE(i = 0);
  ------------------
  |  | 1611|      0|#define VERBOSE(x) x
  ------------------
  555|      0|      for(a = bs->running; a; a = a->next) {
  ------------------
  |  Branch (555:28): [True: 0, False: 0]
  ------------------
  556|      0|        CURL_TRC_CF(data, cf, "baller %d: result=%d", i, (int)a->result);
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  557|      0|        if(a->result)
  ------------------
  |  Branch (557:12): [True: 0, False: 0]
  ------------------
  558|      0|          result = a->result;
  559|      0|      }
  560|      0|    }
  561|  2.03k|  }
  562|       |
  563|      0|out:
  564|      0|  if(!result) {
  ------------------
  |  Branch (564:6): [True: 0, False: 0]
  ------------------
  565|      0|    bool more_possible;
  566|       |
  567|       |    /* when do we need to be called again? */
  568|      0|    next_expire_ms = Curl_timeleft_ms(data);
  569|      0|    if(next_expire_ms < 0) {
  ------------------
  |  Branch (569:8): [True: 0, False: 0]
  ------------------
  570|      0|      failf(data, "Connection timeout after %" FMT_OFF_T " ms",
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  571|      0|            Curl_pgrs_since_ms(data, NULL, TIMER_STARTSINGLE));
  572|      0|      return CURLE_OPERATION_TIMEDOUT;
  573|      0|    }
  574|       |
  575|      0|    more_possible = cf_ai_iter_has_more(&bs->addr_iter, data);
  576|      0|#ifdef USE_IPV6
  577|      0|    if(!more_possible)
  ------------------
  |  Branch (577:8): [True: 0, False: 0]
  ------------------
  578|      0|      more_possible = cf_ai_iter_has_more(&bs->ipv6_iter, data);
  579|      0|#endif
  580|      0|    if(more_possible) {
  ------------------
  |  Branch (580:8): [True: 0, False: 0]
  ------------------
  581|      0|      timediff_t expire_ms, elapsed_ms;
  582|      0|      elapsed_ms =
  583|      0|        curlx_ptimediff_ms(Curl_pgrs_now(data), &bs->last_attempt_started);
  584|      0|      expire_ms = CURLMAX(bs->attempt_delay_ms - elapsed_ms, 0);
  ------------------
  |  | 1287|      0|#define CURLMAX(x, y) ((x) > (y) ? (x) : (y))
  |  |  ------------------
  |  |  |  Branch (1287:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  585|      0|      next_expire_ms = CURLMIN(next_expire_ms, expire_ms);
  ------------------
  |  | 1288|      0|#define CURLMIN(x, y) ((x) < (y) ? (x) : (y))
  |  |  ------------------
  |  |  |  Branch (1288:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  586|      0|      if(next_expire_ms <= 0) {
  ------------------
  |  Branch (586:10): [True: 0, False: 0]
  ------------------
  587|      0|        CURL_TRC_CF(data, cf, "HAPPY_EYEBALLS timeout due, re-evaluate");
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  588|      0|        goto evaluate;
  589|      0|      }
  590|      0|      CURL_TRC_CF(data, cf, "next HAPPY_EYEBALLS timeout in %" FMT_TIMEDIFF_T
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  591|      0|                  "ms", next_expire_ms);
  592|      0|      Curl_expire(data, next_expire_ms, EXPIRE_HAPPY_EYEBALLS);
  593|      0|    }
  594|      0|  }
  595|      0|  return result;
  596|      0|}
cf-ip-happy.c:cf_ip_attempt_connect:
  248|  2.03k|{
  249|  2.03k|  *connected = (bool)a->connected;
  250|  2.03k|  if(!a->result && !*connected) {
  ------------------
  |  Branch (250:6): [True: 2.03k, False: 0]
  |  Branch (250:20): [True: 2.03k, False: 0]
  ------------------
  251|       |    /* evaluate again */
  252|  2.03k|    a->result = Curl_conn_cf_connect(a->cf, data, connected);
  253|       |
  254|  2.03k|    if(!a->result) {
  ------------------
  |  Branch (254:8): [True: 2.03k, False: 0]
  ------------------
  255|  2.03k|      if(*connected) {
  ------------------
  |  Branch (255:10): [True: 2.03k, False: 0]
  ------------------
  256|  2.03k|        a->connected = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  257|  2.03k|      }
  258|  2.03k|    }
  259|      0|    else {
  260|      0|      if(a->result == CURLE_WEIRD_SERVER_REPLY)
  ------------------
  |  Branch (260:10): [True: 0, False: 0]
  ------------------
  261|      0|        a->inconclusive = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  262|      0|      if(a->cf)
  ------------------
  |  Branch (262:10): [True: 0, False: 0]
  ------------------
  263|      0|        Curl_conn_cf_discard_chain(&a->cf, data);
  264|      0|    }
  265|  2.03k|  }
  266|  2.03k|  return a->result;
  267|  2.03k|}
cf-ip-happy.c:cf_ai_iter_next:
  139|  4.07k|{
  140|  4.07k|  const struct Curl_addrinfo *addr;
  141|       |
  142|  4.07k|  if(!iter->cf)
  ------------------
  |  Branch (142:6): [True: 0, False: 4.07k]
  ------------------
  143|      0|    return NULL;
  144|       |
  145|  4.07k|  addr = Curl_conn_dns_get_ai(data, iter->peer, iter->cf->sockindex,
  146|  4.07k|                              iter->ai_family, iter->n);
  147|  4.07k|  if(addr)
  ------------------
  |  Branch (147:6): [True: 2.03k, False: 2.03k]
  ------------------
  148|  2.03k|    iter->n++;
  149|  4.07k|  return addr;
  150|  4.07k|}
cf-ip-happy.c:cf_ip_ballers_prune:
  366|  2.03k|{
  367|  2.03k|  struct cf_ip_attempt *a = NULL, **panchor;
  368|  2.03k|  uint32_t ongoing = 0;
  369|       |
  370|  2.03k|  for(a = bs->running; a; a = a->next) {
  ------------------
  |  Branch (370:24): [True: 0, False: 2.03k]
  ------------------
  371|      0|    if(!a->result && !a->connected)
  ------------------
  |  Branch (371:8): [True: 0, False: 0]
  |  Branch (371:22): [True: 0, False: 0]
  ------------------
  372|      0|      ++ongoing;
  373|      0|  }
  374|       |
  375|  2.03k|  panchor = &bs->running;
  376|  2.03k|  while(*panchor && (ongoing > max_concurrent)) {
  ------------------
  |  Branch (376:9): [True: 0, False: 2.03k]
  |  Branch (376:21): [True: 0, False: 0]
  ------------------
  377|      0|    a = *panchor;
  378|      0|    if(!a->result && !a->connected) {
  ------------------
  |  Branch (378:8): [True: 0, False: 0]
  |  Branch (378:22): [True: 0, False: 0]
  ------------------
  379|      0|      *panchor = a->next;
  380|      0|      a->next = NULL;
  381|      0|      cf_ip_attempt_free(a, data);
  382|      0|      --ongoing;
  383|      0|      CURL_TRC_CF(data, cf, "discarding oldest attempt to keep limit");
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  384|      0|    }
  385|      0|    else {
  386|      0|      panchor = &a->next;
  387|      0|    }
  388|      0|  }
  389|  2.03k|}
cf-ip-happy.c:cf_ip_attempt_new:
  204|  2.03k|{
  205|  2.03k|  struct Curl_cfilter *wcf;
  206|  2.03k|  struct cf_ip_attempt *a;
  207|  2.03k|  CURLcode result = CURLE_OK;
  208|       |
  209|  2.03k|  *pa = NULL;
  210|  2.03k|  a = curlx_calloc(1, sizeof(*a));
  ------------------
  |  | 1473|  2.03k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
  211|  2.03k|  if(!a)
  ------------------
  |  Branch (211:6): [True: 0, False: 2.03k]
  ------------------
  212|      0|    return CURLE_OUT_OF_MEMORY;
  213|       |
  214|  2.03k|  Curl_peer_link(&a->origin, origin);
  215|  2.03k|  Curl_peer_link(&a->peer, peer);
  216|  2.03k|  a->transport_peer = transport_peer;
  217|  2.03k|  Curl_peer_link(&a->tunnel_peer, tunnel_peer);
  218|  2.03k|  a->tunnel_transport = tunnel_transport;
  219|  2.03k|  a->addr = *addr;
  220|  2.03k|  a->ai_family = ai_family;
  221|  2.03k|  a->result = CURLE_OK;
  222|  2.03k|  a->cf_create = cf_create;
  223|  2.03k|  *pa = a;
  224|       |
  225|  2.03k|  result = a->cf_create(&a->cf, data, a->origin, a->peer, a->transport_peer,
  226|  2.03k|                        cf->conn, &a->addr, a->tunnel_peer,
  227|  2.03k|                        a->tunnel_transport);
  228|  2.03k|  if(result)
  ------------------
  |  Branch (228:6): [True: 0, False: 2.03k]
  ------------------
  229|      0|    goto out;
  230|       |
  231|       |  /* the new filter might have sub-filters */
  232|  4.07k|  for(wcf = a->cf; wcf; wcf = wcf->next) {
  ------------------
  |  Branch (232:20): [True: 2.03k, False: 2.03k]
  ------------------
  233|  2.03k|    wcf->conn = cf->conn;
  234|  2.03k|    wcf->sockindex = cf->sockindex;
  235|  2.03k|  }
  236|       |
  237|  2.03k|out:
  238|  2.03k|  if(result) {
  ------------------
  |  Branch (238:6): [True: 0, False: 2.03k]
  ------------------
  239|      0|    cf_ip_attempt_free(a, data);
  240|       |    *pa = NULL;
  241|      0|  }
  242|  2.03k|  return result;
  243|  2.03k|}
cf-ip-happy.c:cf_ip_happy_query:
  915|  4.07k|{
  916|  4.07k|  struct cf_ip_happy_ctx *ctx = cf->ctx;
  917|       |
  918|  4.07k|  if(!cf->connected) {
  ------------------
  |  Branch (918:6): [True: 2.03k, False: 2.03k]
  ------------------
  919|  2.03k|    switch(query) {
  920|      0|    case CF_QUERY_CONNECT_REPLY_MS: {
  ------------------
  |  |  168|      0|#define CF_QUERY_CONNECT_REPLY_MS   2  /* number     -        */
  ------------------
  |  Branch (920:5): [True: 0, False: 2.03k]
  ------------------
  921|      0|      *pres1 = cf_ip_ballers_min_reply_ms(&ctx->ballers, data);
  922|      0|      CURL_TRC_CF(data, cf, "query connect reply: %dms", *pres1);
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  923|      0|      return CURLE_OK;
  924|      0|    }
  925|  2.03k|    default:
  ------------------
  |  Branch (925:5): [True: 2.03k, False: 0]
  ------------------
  926|  2.03k|      break;
  927|  2.03k|    }
  928|  2.03k|  }
  929|       |
  930|  4.07k|  return cf->next ?
  ------------------
  |  Branch (930:10): [True: 2.03k, False: 2.03k]
  ------------------
  931|  2.03k|    cf->next->cft->query(cf->next, data, query, pres1, pres2) :
  932|  4.07k|    CURLE_UNKNOWN_OPTION;
  933|  4.07k|}
cf-ip-happy.c:cf_ip_happy_create:
  972|  2.03k|{
  973|  2.03k|  struct cf_ip_happy_ctx *ctx = NULL;
  974|  2.03k|  CURLcode result;
  975|       |
  976|  2.03k|  (void)data;
  977|  2.03k|  (void)conn;
  978|  2.03k|  *pcf = NULL;
  979|  2.03k|  ctx = curlx_calloc(1, sizeof(*ctx));
  ------------------
  |  | 1473|  2.03k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
  980|  2.03k|  if(!ctx) {
  ------------------
  |  Branch (980:6): [True: 0, False: 2.03k]
  ------------------
  981|      0|    result = CURLE_OUT_OF_MEMORY;
  982|      0|    goto out;
  983|      0|  }
  984|  2.03k|  result = cf_ip_ballers_init(&ctx->ballers, data,
  985|  2.03k|                              origin, peer, transport_peer,
  986|  2.03k|                              tunnel_peer, tunnel_transport,
  987|  2.03k|                              data->set.happy_eyeballs_timeout,
  988|  2.03k|                              IP_HE_MAX_CONCURRENT_ATTEMPTS);
  ------------------
  |  |  737|  2.03k|#define IP_HE_MAX_CONCURRENT_ATTEMPTS     6
  ------------------
  989|  2.03k|  if(result)
  ------------------
  |  Branch (989:6): [True: 0, False: 2.03k]
  ------------------
  990|      0|    goto out;
  991|       |
  992|  2.03k|  result = Curl_cf_create(pcf, &Curl_cft_ip_happy, ctx);
  993|       |
  994|  2.03k|out:
  995|  2.03k|  if(result) {
  ------------------
  |  Branch (995:6): [True: 0, False: 2.03k]
  ------------------
  996|       |    curlx_safefree(*pcf);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  997|      0|    cf_ip_happy_ctx_destroy(ctx, data);
  998|      0|  }
  999|  2.03k|  return result;
 1000|  2.03k|}
cf-ip-happy.c:cf_ip_ballers_init:
  343|  2.03k|{
  344|  2.03k|  memset(bs, 0, sizeof(*bs));
  345|  2.03k|  bs->cf_create = get_cf_create(transport_peer, !!tunnel_peer);
  346|  2.03k|  if(!bs->cf_create) {
  ------------------
  |  Branch (346:6): [True: 0, False: 2.03k]
  ------------------
  347|      0|    failf(data, "unsupported transport type %u%s",
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  348|      0|          transport_peer, tunnel_peer ? " to proxy" : "");
  ------------------
  |  Branch (348:27): [True: 0, False: 0]
  ------------------
  349|      0|    return CURLE_UNSUPPORTED_PROTOCOL;
  350|      0|  }
  351|  2.03k|  Curl_peer_link(&bs->origin, origin);
  352|  2.03k|  Curl_peer_link(&bs->peer, peer);
  353|  2.03k|  bs->transport_peer = transport_peer;
  354|  2.03k|  Curl_peer_link(&bs->tunnel_peer, tunnel_peer);
  355|  2.03k|  bs->tunnel_transport = tunnel_transport;
  356|  2.03k|  bs->attempt_delay_ms = attempt_delay_ms;
  357|  2.03k|  bs->max_concurrent = max_concurrent;
  358|       |  bs->last_attempt_ai_family = AF_INET; /* so AF_INET6 is next */
  359|  2.03k|  return CURLE_OK;
  360|  2.03k|}
cf-ip-happy.c:get_cf_create:
   93|  2.03k|{
   94|  2.03k|  size_t i;
   95|  2.03k|  for(i = 0; i < CURL_ARRAYSIZE(transport_providers); ++i) {
  ------------------
  |  | 1299|  2.03k|#define CURL_ARRAYSIZE(A) (sizeof(A) / sizeof((A)[0]))
  ------------------
  |  Branch (95:14): [True: 2.03k, False: 0]
  ------------------
   96|  2.03k|    if((transport == transport_providers[i].transport) &&
  ------------------
  |  Branch (96:8): [True: 2.03k, False: 0]
  ------------------
   97|  2.03k|       (tunnel == transport_providers[i].tunnel))
  ------------------
  |  Branch (97:8): [True: 2.03k, False: 0]
  ------------------
   98|  2.03k|      return transport_providers[i].cf_create;
   99|  2.03k|  }
  100|      0|  return NULL;
  101|  2.03k|}

Curl_cf_setup_add:
  451|  2.03k|{
  452|  2.03k|  struct Curl_cfilter *cf;
  453|  2.03k|  CURLcode result = CURLE_OK;
  454|       |
  455|  2.03k|  DEBUGASSERT(data);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (455:3): [True: 0, False: 2.03k]
  |  Branch (455:3): [True: 2.03k, False: 0]
  ------------------
  456|  2.03k|  result = cf_setup_create(&cf, data, transport, ssl_mode);
  457|  2.03k|  if(result)
  ------------------
  |  Branch (457:6): [True: 0, False: 2.03k]
  ------------------
  458|      0|    goto out;
  459|  2.03k|  Curl_conn_cf_add(data, conn, sockindex, cf);
  460|  2.03k|out:
  461|  2.03k|  return result;
  462|  2.03k|}
cf-setup.c:cf_setup_destroy:
  390|  2.03k|{
  391|  2.03k|  struct cf_setup_ctx *ctx = cf->ctx;
  392|       |
  393|  2.03k|  CURL_TRC_CF(data, cf, "destroy");
  ------------------
  |  |  153|  2.03k|  do {                                          \
  |  |  154|  2.03k|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|  2.03k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|  2.03k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 2.03k, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|  2.03k|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  394|       |  curlx_safefree(ctx);
  ------------------
  |  | 1332|  2.03k|  do {                      \
  |  | 1333|  2.03k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  2.03k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.03k|    (ptr) = NULL;           \
  |  | 1335|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  395|  2.03k|}
cf-setup.c:cf_setup_connect:
  364|  2.03k|{
  365|  2.03k|  struct cf_setup_ctx *ctx = cf->ctx;
  366|  2.03k|  CURLcode result;
  367|       |
  368|       |  /* In some situations, a server/proxy may close the connection and
  369|       |   * we need to connect again (HTTP/1.x proxy auth, for example).
  370|       |   * We used to close the filters and reuse them for another attempt,
  371|       |   * however that complicates filter code and it is simpler to tear them
  372|       |   * all down and start over. */
  373|  2.03k|retry:
  374|  2.03k|  result = cf_setup_connect_steps(cf, data, done);
  375|       |
  376|  2.03k|  if(result == CURLE_AGAIN) {
  ------------------
  |  Branch (376:6): [True: 0, False: 2.03k]
  ------------------
  377|      0|    ++ctx->retry_count;
  378|      0|    if(ctx->retry_count > 5) /* arbitrary limit, better just timeout? */
  ------------------
  |  Branch (378:8): [True: 0, False: 0]
  ------------------
  379|      0|      return CURLE_COULDNT_CONNECT;
  380|       |
  381|      0|    CURL_TRC_CF(data, cf, "retrying connect, %d. time", ctx->retry_count);
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  382|      0|    Curl_conn_cf_discard_chain(&cf->next, data);
  383|      0|    ctx->state = CF_SETUP_INIT;
  384|      0|    goto retry;
  385|      0|  }
  386|  2.03k|  return result;
  387|  2.03k|}
cf-setup.c:cf_setup_connect_steps:
  302|  2.03k|{
  303|  2.03k|  struct cf_setup_ctx *ctx = cf->ctx;
  304|  2.03k|  CURLcode result = CURLE_OK;
  305|       |
  306|  2.03k|  if(cf->connected) {
  ------------------
  |  Branch (306:6): [True: 0, False: 2.03k]
  ------------------
  307|      0|    *done = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  308|      0|    return CURLE_OK;
  309|      0|  }
  310|       |
  311|       |  /* connect current sub-chain */
  312|  4.07k|connect_sub_chain:
  313|  4.07k|  VERBOSE(Curl_conn_trc_filters(data, cf->sockindex, "cf_setup_connect"));
  ------------------
  |  | 1611|  4.07k|#define VERBOSE(x) x
  ------------------
  314|       |
  315|  4.07k|  if(cf->next && !cf->next->connected) {
  ------------------
  |  Branch (315:6): [True: 2.03k, False: 2.03k]
  |  Branch (315:18): [True: 2.03k, False: 0]
  ------------------
  316|  2.03k|    result = Curl_conn_cf_connect(cf->next, data, done);
  317|  2.03k|    if(result || !*done)
  ------------------
  |  Branch (317:8): [True: 0, False: 2.03k]
  |  Branch (317:18): [True: 0, False: 2.03k]
  ------------------
  318|      0|      return result;
  319|  2.03k|  }
  320|       |
  321|  4.07k|  result = cf_setup_add_ip_happy(cf, data);
  322|  4.07k|  if(result)
  ------------------
  |  Branch (322:6): [True: 0, False: 4.07k]
  ------------------
  323|      0|    return result;
  324|  4.07k|  if(!cf->next || !cf->next->connected)
  ------------------
  |  Branch (324:6): [True: 0, False: 4.07k]
  |  Branch (324:19): [True: 2.03k, False: 2.03k]
  ------------------
  325|  2.03k|    goto connect_sub_chain;
  326|       |
  327|  2.03k|#ifndef CURL_DISABLE_PROXY
  328|  2.03k|  result = cf_setup_add_socks(cf, data);
  329|  2.03k|  if(result)
  ------------------
  |  Branch (329:6): [True: 0, False: 2.03k]
  ------------------
  330|      0|    return result;
  331|  2.03k|  if(!cf->next || !cf->next->connected)
  ------------------
  |  Branch (331:6): [True: 0, False: 2.03k]
  |  Branch (331:19): [True: 0, False: 2.03k]
  ------------------
  332|      0|    goto connect_sub_chain;
  333|       |
  334|  2.03k|#ifndef CURL_DISABLE_HTTP
  335|  2.03k|  result = cf_setup_add_http_proxy(cf, data);
  336|  2.03k|  if(result)
  ------------------
  |  Branch (336:6): [True: 0, False: 2.03k]
  ------------------
  337|      0|    return result;
  338|  2.03k|  if(!cf->next || !cf->next->connected)
  ------------------
  |  Branch (338:6): [True: 0, False: 2.03k]
  |  Branch (338:19): [True: 0, False: 2.03k]
  ------------------
  339|      0|    goto connect_sub_chain;
  340|  2.03k|#endif /* !CURL_DISABLE_HTTP */
  341|       |
  342|  2.03k|  result = cf_setup_add_haproxy(cf, data);
  343|  2.03k|  if(result)
  ------------------
  |  Branch (343:6): [True: 0, False: 2.03k]
  ------------------
  344|      0|    return result;
  345|  2.03k|  if(!cf->next || !cf->next->connected)
  ------------------
  |  Branch (345:6): [True: 0, False: 2.03k]
  |  Branch (345:19): [True: 0, False: 2.03k]
  ------------------
  346|      0|    goto connect_sub_chain;
  347|  2.03k|#endif /* !CURL_DISABLE_PROXY */
  348|       |
  349|  2.03k|  result = cf_setup_add_origin_filters(cf, data);
  350|  2.03k|  if(result)
  ------------------
  |  Branch (350:6): [True: 0, False: 2.03k]
  ------------------
  351|      0|    return result;
  352|  2.03k|  if(!cf->next || !cf->next->connected)
  ------------------
  |  Branch (352:6): [True: 0, False: 2.03k]
  |  Branch (352:19): [True: 0, False: 2.03k]
  ------------------
  353|      0|    goto connect_sub_chain;
  354|       |
  355|  2.03k|  ctx->state = CF_SETUP_DONE;
  356|  2.03k|  cf->connected = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  357|       |  *done = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  358|  2.03k|  return CURLE_OK;
  359|  2.03k|}
cf-setup.c:cf_setup_add_ip_happy:
  175|  4.07k|{
  176|  4.07k|  struct cf_setup_ctx *ctx = cf->ctx;
  177|  4.07k|  CURLcode result = CURLE_OK;
  178|       |
  179|  4.07k|  if(ctx->state < CF_SETUP_CNNCT_EYEBALLS) {
  ------------------
  |  Branch (179:6): [True: 2.03k, False: 2.03k]
  ------------------
  180|       |    /* What is the first hop we directly connect to and what transport
  181|       |     * do we use for it? Only on the first hop we can do Happy Eyeballs.
  182|       |     * first_origin and first_peer differ on --connect-to. */
  183|  2.03k|    struct Curl_peer *first_origin =
  184|  2.03k|      conn_get_first_origin(cf->conn, cf->sockindex);
  185|  2.03k|    struct Curl_peer *first_peer =
  186|  2.03k|      Curl_conn_get_first_peer(cf->conn, cf->sockindex);
  187|  2.03k|    struct Curl_peer *tunnel_peer = NULL;
  188|  2.03k|    uint8_t first_transport = ctx->transport;
  189|       |
  190|  2.03k|    if(!first_peer)
  ------------------
  |  Branch (190:8): [True: 0, False: 2.03k]
  ------------------
  191|      0|      return CURLE_FAILED_INIT;
  192|       |
  193|  2.03k|#if !defined(CURL_DISABLE_PROXY) && !defined(CURL_DISABLE_HTTP)
  194|  2.03k|    if(cf->conn->http_proxy.peer && !cf->conn->bits.origin_is_proxy) {
  ------------------
  |  Branch (194:8): [True: 0, False: 2.03k]
  |  Branch (194:37): [True: 0, False: 0]
  ------------------
  195|      0|      first_transport =
  196|      0|        Curl_http_proxy_transport(cf->conn->http_proxy.proxytype);
  197|      0|      tunnel_peer = Curl_conn_get_destination(cf->conn, cf->sockindex);
  198|      0|      if((first_transport == TRNSPRT_QUIC) && cf->conn->socks_proxy.peer) {
  ------------------
  |  |  240|      0|#define TRNSPRT_QUIC 5
  ------------------
  |  Branch (198:10): [True: 0, False: 0]
  |  Branch (198:47): [True: 0, False: 0]
  ------------------
  199|      0|        failf(data, "HTTP/3 proxy not possible via SOCKS");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  200|      0|        return CURLE_UNSUPPORTED_PROTOCOL;
  201|      0|      }
  202|      0|    }
  203|  2.03k|#endif /* !CURL_DISABLE_PROXY && !CURL_DISABLE_HTTP */
  204|       |
  205|  2.03k|    result = Curl_cf_ip_happy_insert_after(cf, data, first_origin, first_peer,
  206|  2.03k|                                           first_transport,
  207|  2.03k|                                           tunnel_peer, ctx->transport);
  208|  2.03k|    if(result) {
  ------------------
  |  Branch (208:8): [True: 0, False: 2.03k]
  ------------------
  209|      0|      CURL_TRC_CF(data, cf, "adding happy eyeballs failed -> %d", (int)result);
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  210|      0|      return result;
  211|      0|    }
  212|       |
  213|  2.03k|    if(tunnel_peer && (first_transport == TRNSPRT_QUIC)) {
  ------------------
  |  |  240|      0|#define TRNSPRT_QUIC 5
  ------------------
  |  Branch (213:8): [True: 0, False: 2.03k]
  |  Branch (213:23): [True: 0, False: 0]
  ------------------
  214|      0|      CURL_TRC_CF(data, cf, "happy eyeballing to HTTP/3 proxy %s:%u",
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  215|      0|                  first_peer->hostname, first_peer->port);
  216|      0|      ctx->state = CF_SETUP_CNNCT_HTTP_PROXY;
  217|      0|    }
  218|  2.03k|    else {
  219|  2.03k|      CURL_TRC_CF(data, cf, "happy eyeballing to %s %s:%u",
  ------------------
  |  |  153|  2.03k|  do {                                          \
  |  |  154|  2.03k|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|  2.03k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|  2.03k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 2.03k, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|  2.03k|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  ------------------
  |  |  |  Branch (155:35): [True: 0, False: 0]
  |  |  ------------------
  |  |  156|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  220|  2.03k|                  tunnel_peer ? "proxy" : "origin",
  221|  2.03k|                  first_peer->hostname, first_peer->port);
  222|  2.03k|      ctx->state = CF_SETUP_CNNCT_EYEBALLS;
  223|  2.03k|    }
  224|  2.03k|  }
  225|  4.07k|  return result;
  226|  4.07k|}
cf-setup.c:conn_get_first_origin:
  163|  2.03k|{
  164|  2.03k|#ifndef CURL_DISABLE_PROXY
  165|  2.03k|  if(conn->socks_proxy.peer)
  ------------------
  |  Branch (165:6): [True: 0, False: 2.03k]
  ------------------
  166|      0|    return conn->socks_proxy.peer;
  167|  2.03k|  if(conn->http_proxy.peer)
  ------------------
  |  Branch (167:6): [True: 0, False: 2.03k]
  ------------------
  168|      0|    return conn->http_proxy.peer;
  169|  2.03k|#endif
  170|  2.03k|  return (sockindex == SECONDARYSOCKET) ? conn->origin2 : conn->origin;
  ------------------
  |  |  235|  2.03k|#define SECONDARYSOCKET 1
  ------------------
  |  Branch (170:10): [True: 0, False: 2.03k]
  ------------------
  171|  2.03k|}
cf-setup.c:cf_setup_add_socks:
   86|  2.03k|{
   87|  2.03k|  struct cf_setup_ctx *ctx = cf->ctx;
   88|  2.03k|  CURLcode result = CURLE_OK;
   89|  2.03k|  if(ctx->state < CF_SETUP_CNNCT_SOCKS && cf->conn->socks_proxy.peer) {
  ------------------
  |  Branch (89:6): [True: 2.03k, False: 0]
  |  Branch (89:43): [True: 0, False: 2.03k]
  ------------------
   90|       |    /* Add a SOCKS proxy to go through `first_peer` to `second_peer`*/
   91|      0|    struct Curl_peer *second_peer;
   92|       |
   93|      0|    if(cf->conn->http_proxy.peer)
  ------------------
  |  Branch (93:8): [True: 0, False: 0]
  ------------------
   94|      0|      second_peer = cf->conn->http_proxy.peer;
   95|      0|    else
   96|      0|      second_peer = Curl_conn_get_destination(cf->conn, cf->sockindex);
   97|      0|    if(!second_peer)
  ------------------
  |  Branch (97:8): [True: 0, False: 0]
  ------------------
   98|      0|      return CURLE_FAILED_INIT;
   99|       |
  100|      0|    result = Curl_cf_socks_proxy_insert_after(
  101|      0|      cf, data, second_peer, cf->conn->ip_version,
  102|      0|      cf->conn->socks_proxy.proxytype,
  103|      0|      cf->conn->socks_proxy.creds);
  104|      0|    if(result) {
  ------------------
  |  Branch (104:8): [True: 0, False: 0]
  ------------------
  105|      0|      CURL_TRC_CF(data, cf, "adding SOCKS filter failed -> %d", (int)result);
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  106|      0|      return result;
  107|      0|    }
  108|       |
  109|      0|    CURL_TRC_CF(data, cf, "added SOCKS filter to %s:%u",
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  110|      0|                second_peer->hostname, second_peer->port);
  111|      0|    ctx->state = CF_SETUP_CNNCT_SOCKS;
  112|      0|  }
  113|  2.03k|  return result;
  114|  2.03k|}
cf-setup.c:cf_setup_add_http_proxy:
  119|  2.03k|{
  120|  2.03k|  struct cf_setup_ctx *ctx = cf->ctx;
  121|  2.03k|  CURLcode result = CURLE_OK;
  122|       |
  123|  2.03k|  if(ctx->state < CF_SETUP_CNNCT_HTTP_PROXY &&
  ------------------
  |  Branch (123:6): [True: 2.03k, False: 0]
  ------------------
  124|  2.03k|     cf->conn->http_proxy.peer && !cf->conn->bits.origin_is_proxy) {
  ------------------
  |  Branch (124:6): [True: 0, False: 2.03k]
  |  Branch (124:35): [True: 0, False: 0]
  ------------------
  125|      0|    struct Curl_peer *peer = cf->conn->http_proxy.peer;
  126|      0|    struct Curl_peer *tunnel_peer =
  127|      0|      Curl_conn_get_destination(cf->conn, cf->sockindex);
  128|       |
  129|      0|#ifdef USE_SSL
  130|      0|    if(CURL_PROXY_IS_HTTPS(cf->conn->http_proxy.proxytype) &&
  ------------------
  |  |   42|      0|  (((t) == CURLPROXY_HTTPS) ||  \
  |  |  ------------------
  |  |  |  |  796|      0|#define CURLPROXY_HTTPS           2L /* HTTPS but stick to HTTP/1
  |  |  ------------------
  |  |  |  Branch (42:4): [True: 0, False: 0]
  |  |  ------------------
  |  |   43|      0|   ((t) == CURLPROXY_HTTPS2) || \
  |  |  ------------------
  |  |  |  |  798|      0|#define CURLPROXY_HTTPS2          3L /* HTTPS and attempt HTTP/2
  |  |  ------------------
  |  |  |  Branch (43:4): [True: 0, False: 0]
  |  |  ------------------
  |  |   44|      0|   ((t) == CURLPROXY_HTTPS3))
  |  |  ------------------
  |  |  |  |  807|      0|#define CURLPROXY_HTTPS3          8L /* HTTPS and attempt HTTP/3
  |  |  ------------------
  |  |  |  Branch (44:4): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  131|      0|       !Curl_conn_is_ssl(cf->conn, cf->sockindex)) {
  ------------------
  |  Branch (131:8): [True: 0, False: 0]
  ------------------
  132|      0|      result = Curl_cf_ssl_proxy_insert_after(
  133|      0|        cf, data, cf->conn->http_proxy.peer);
  134|      0|      if(result) {
  ------------------
  |  Branch (134:10): [True: 0, False: 0]
  ------------------
  135|      0|        CURL_TRC_CF(data, cf, "adding SSL filter for HTTP proxy failed -> %d",
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  136|      0|                    (int)result);
  137|      0|        return result;
  138|      0|      }
  139|      0|      CURL_TRC_CF(data, cf, "added SSL filter for HTTP proxy");
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  140|      0|    }
  141|      0|#endif /* USE_SSL */
  142|       |
  143|      0|    result = Curl_cf_http_proxy_insert_after(
  144|      0|      cf, data, peer, tunnel_peer,
  145|      0|      ctx->transport, cf->conn->http_proxy.proxytype);
  146|      0|    if(result) {
  ------------------
  |  Branch (146:8): [True: 0, False: 0]
  ------------------
  147|      0|      CURL_TRC_CF(data, cf, "adding HTTP proxy tunnel filter failed -> %d",
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  148|      0|                  (int)result);
  149|      0|      return result;
  150|      0|    }
  151|      0|    CURL_TRC_CF(data, cf, "added HTTP proxy tunnel filter");
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  152|      0|    ctx->state = CF_SETUP_CNNCT_HTTP_PROXY;
  153|      0|  }
  154|  2.03k|  return result;
  155|  2.03k|}
cf-setup.c:cf_setup_add_haproxy:
   61|  2.03k|{
   62|  2.03k|  struct cf_setup_ctx *ctx = cf->ctx;
   63|  2.03k|  CURLcode result = CURLE_OK;
   64|       |
   65|  2.03k|  if(ctx->state < CF_SETUP_CNNCT_HAPROXY) {
  ------------------
  |  Branch (65:6): [True: 2.03k, False: 0]
  ------------------
   66|  2.03k|    if(data->set.haproxyprotocol) {
  ------------------
  |  Branch (66:8): [True: 0, False: 2.03k]
  ------------------
   67|      0|      if(ctx->transport == TRNSPRT_QUIC) {
  ------------------
  |  |  240|      0|#define TRNSPRT_QUIC 5
  ------------------
  |  Branch (67:10): [True: 0, False: 0]
  ------------------
   68|      0|        failf(data, "haproxy protocol does not support QUIC");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
   69|      0|        return CURLE_UNSUPPORTED_PROTOCOL;
   70|      0|      }
   71|      0|      result = Curl_cf_haproxy_insert_after(cf, data);
   72|      0|      if(result) {
  ------------------
  |  Branch (72:10): [True: 0, False: 0]
  ------------------
   73|      0|        CURL_TRC_CF(data, cf, "adding HAPROXY filter failed -> %d",
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
   74|      0|                    (int)result);
   75|      0|        return result;
   76|      0|      }
   77|      0|      CURL_TRC_CF(data, cf, "added HAPROXY filter");
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
   78|      0|    }
   79|  2.03k|    ctx->state = CF_SETUP_CNNCT_HAPROXY;
   80|  2.03k|  }
   81|  2.03k|  return result;
   82|  2.03k|}
cf-setup.c:cf_setup_add_origin_filters:
  230|  2.03k|{
  231|  2.03k|  struct cf_setup_ctx *ctx = cf->ctx;
  232|  2.03k|  CURLcode result = CURLE_OK;
  233|       |
  234|  2.03k|  (void)data; /* not used in all builds */
  235|  2.03k|  if(ctx->state < CF_SETUP_CNNCT_SSL) {
  ------------------
  |  Branch (235:6): [True: 2.03k, False: 0]
  ------------------
  236|       |#if !defined(CURL_DISABLE_HTTP) && defined(USE_HTTP3) && \
  237|       |    !defined(CURL_DISABLE_PROXY)
  238|       |
  239|       |    /* Wanting QUIC with an HTTP tunneling filter, we now need to add
  240|       |     * the QUIC filter on top. Without tunneling, this has already
  241|       |     * happened in the Happy Eyeball filter. */
  242|       |    if(ctx->transport == TRNSPRT_QUIC &&
  243|       |       cf->conn->http_proxy.peer && !cf->conn->bits.origin_is_proxy) {
  244|       |      struct Curl_peer *origin = Curl_conn_get_origin(cf->conn, cf->sockindex);
  245|       |      struct Curl_peer *peer =
  246|       |        Curl_conn_get_destination(cf->conn, cf->sockindex);
  247|       |
  248|       |      result = Curl_cf_capsule_insert_after(cf, data);
  249|       |      if(result) {
  250|       |        CURL_TRC_CF(data, cf, "adding capsule filter failed -> %d",
  251|       |                    (int)result);
  252|       |        return result;
  253|       |      }
  254|       |      result = Curl_cf_quic_insert_after(cf, data, origin, peer);
  255|       |      if(result) {
  256|       |        CURL_TRC_CF(data, cf, "adding QUIC filter failed -> %d", (int)result);
  257|       |        return result;
  258|       |      }
  259|       |      CURL_TRC_CF(data, cf, "added QUIC filter for origin");
  260|       |    }
  261|       |    else
  262|       |#endif /* !CURL_DISABLE_HTTP && USE_HTTP3 && CURL_DISABLE_PROXY */
  263|  2.03k|#ifdef USE_SSL
  264|  2.03k|    if((ctx->ssl_mode == CURL_CF_SSL_ENABLE ||
  ------------------
  |  |  366|  4.07k|#define CURL_CF_SSL_ENABLE   1
  ------------------
  |  Branch (264:9): [True: 0, False: 2.03k]
  ------------------
  265|  2.03k|        (ctx->ssl_mode != CURL_CF_SSL_DISABLE &&
  ------------------
  |  |  365|  4.07k|#define CURL_CF_SSL_DISABLE  0
  ------------------
  |  Branch (265:10): [True: 2.03k, False: 0]
  ------------------
  266|  2.03k|         cf->conn->scheme->flags & PROTOPT_SSL)) && /* we want SSL */
  ------------------
  |  |  207|  2.03k|#define PROTOPT_SSL (1 << 0)       /* uses SSL */
  ------------------
  |  Branch (266:10): [True: 0, False: 2.03k]
  ------------------
  267|      0|       !Curl_conn_is_ssl(cf->conn, cf->sockindex)) { /* it is missing */
  ------------------
  |  Branch (267:8): [True: 0, False: 0]
  ------------------
  268|       |
  269|      0|#ifndef CURL_DISABLE_PROXY
  270|      0|      if(cf->conn->bits.origin_is_proxy) {
  ------------------
  |  Branch (270:10): [True: 0, False: 0]
  ------------------
  271|      0|        result = Curl_cf_ssl_proxy_insert_after(cf, data, cf->conn->origin);
  272|      0|      }
  273|      0|      else
  274|      0|#endif
  275|      0|      {
  276|       |        /* FTP is a bitch. Wherever we really connect to on the DATA
  277|       |         * (secondary) connection, many servers require TLS sessions reuse
  278|       |         * to prove they are talking to the same client.
  279|       |         * For the TLS session lookup to work, we need to instantiate
  280|       |         * the SSL filter with the same peers as FIRSTSOCKET. See #22225
  281|       |         * Meaning: cf->sockindex does not matter here. */
  282|      0|        result = Curl_cf_ssl_insert_after(cf, data,
  283|      0|          Curl_conn_get_origin(cf->conn, FIRSTSOCKET),
  ------------------
  |  |  234|      0|#define FIRSTSOCKET     0
  ------------------
  284|      0|          Curl_conn_get_destination(cf->conn, FIRSTSOCKET));
  ------------------
  |  |  234|      0|#define FIRSTSOCKET     0
  ------------------
  285|      0|      }
  286|      0|      if(result) {
  ------------------
  |  Branch (286:10): [True: 0, False: 0]
  ------------------
  287|      0|        CURL_TRC_CF(data, cf, "adding SSL filter for origin failed -> %d",
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  288|      0|                    (int)result);
  289|      0|        return result;
  290|      0|      }
  291|      0|      CURL_TRC_CF(data, cf, "added SSL filter for origin");
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  292|      0|    }
  293|  2.03k|#endif /* USE_SSL */
  294|  2.03k|    ctx->state = CF_SETUP_CNNCT_SSL;
  295|  2.03k|  }
  296|  2.03k|  return result;
  297|  2.03k|}
cf-setup.c:cf_setup_create:
  418|  2.03k|{
  419|  2.03k|  struct Curl_cfilter *cf = NULL;
  420|  2.03k|  struct cf_setup_ctx *ctx;
  421|  2.03k|  CURLcode result = CURLE_OK;
  422|       |
  423|  2.03k|  (void)data;
  424|  2.03k|  ctx = curlx_calloc(1, sizeof(*ctx));
  ------------------
  |  | 1473|  2.03k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
  425|  2.03k|  if(!ctx) {
  ------------------
  |  Branch (425:6): [True: 0, False: 2.03k]
  ------------------
  426|      0|    result = CURLE_OUT_OF_MEMORY;
  427|      0|    goto out;
  428|      0|  }
  429|  2.03k|  ctx->state = CF_SETUP_INIT;
  430|  2.03k|  ctx->ssl_mode = ssl_mode;
  431|  2.03k|  ctx->transport = transport;
  432|       |
  433|  2.03k|  result = Curl_cf_create(&cf, &Curl_cft_setup, ctx);
  434|  2.03k|  if(result)
  ------------------
  |  Branch (434:6): [True: 0, False: 2.03k]
  ------------------
  435|      0|    goto out;
  436|  2.03k|  ctx = NULL;
  437|       |
  438|  2.03k|out:
  439|  2.03k|  *pcf = result ? NULL : cf;
  ------------------
  |  Branch (439:10): [True: 0, False: 2.03k]
  ------------------
  440|  2.03k|  if(ctx) {
  ------------------
  |  Branch (440:6): [True: 0, False: 2.03k]
  ------------------
  441|      0|    curlx_free(ctx);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  442|      0|  }
  443|  2.03k|  return result;
  444|  2.03k|}

sockaddr2string:
   98|  6.10k|{
   99|  6.10k|  CURLcode result;
  100|  6.10k|  struct sockaddr_in *si = NULL;
  101|  6.10k|#ifdef USE_IPV6
  102|  6.10k|  struct sockaddr_in6 *si6 = NULL;
  103|  6.10k|#endif
  104|  6.10k|#ifdef USE_UNIX_SOCKETS
  105|  6.10k|  struct sockaddr_un *su = NULL;
  106|       |#else
  107|       |  (void)salen;
  108|       |#endif
  109|       |
  110|  6.10k|  switch(sa->sa_family) {
  111|  2.03k|  case AF_INET:
  ------------------
  |  Branch (111:3): [True: 2.03k, False: 4.07k]
  ------------------
  112|  2.03k|    si = (struct sockaddr_in *)(void *)sa;
  113|  2.03k|    result = curlx_inet_ntop(sa->sa_family, &si->sin_addr, addr,
  114|  2.03k|                             MAX_IPADR_LEN);
  ------------------
  |  |   41|  2.03k|#define MAX_IPADR_LEN sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")
  ------------------
  115|  2.03k|    if(!result) {
  ------------------
  |  Branch (115:8): [True: 2.03k, False: 0]
  ------------------
  116|  2.03k|      *port = ntohs(si->sin_port);
  117|  2.03k|      return result;
  118|  2.03k|    }
  119|      0|    break;
  120|      0|#ifdef USE_IPV6
  121|      0|  case AF_INET6:
  ------------------
  |  Branch (121:3): [True: 0, False: 6.10k]
  ------------------
  122|      0|    si6 = (struct sockaddr_in6 *)(void *)sa;
  123|      0|    result = curlx_inet_ntop(sa->sa_family, &si6->sin6_addr, addr,
  124|      0|                             MAX_IPADR_LEN);
  ------------------
  |  |   41|      0|#define MAX_IPADR_LEN sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")
  ------------------
  125|      0|    if(!result) {
  ------------------
  |  Branch (125:8): [True: 0, False: 0]
  ------------------
  126|      0|      *port = ntohs(si6->sin6_port);
  127|      0|      return result;
  128|      0|    }
  129|      0|    break;
  130|      0|#endif
  131|      0|#ifdef USE_UNIX_SOCKETS
  132|  4.07k|  case AF_UNIX:
  ------------------
  |  Branch (132:3): [True: 4.07k, False: 2.03k]
  ------------------
  133|  4.07k|    if(salen > (curl_socklen_t)sizeof(CURL_SA_FAMILY_T)) {
  ------------------
  |  Branch (133:8): [True: 0, False: 4.07k]
  ------------------
  134|      0|      su = (struct sockaddr_un *)sa;
  135|      0|      curl_msnprintf(addr, MAX_IPADR_LEN, "%s", su->sun_path);
  ------------------
  |  |   41|      0|#define MAX_IPADR_LEN sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")
  ------------------
  136|      0|    }
  137|  4.07k|    else
  138|  4.07k|      addr[0] = 0; /* socket with no name */
  139|  4.07k|    *port = 0;
  140|  4.07k|    return CURLE_OK;
  141|      0|#endif
  142|      0|  default:
  ------------------
  |  Branch (142:3): [True: 0, False: 6.10k]
  ------------------
  143|      0|    result = CURLE_UNSUPPORTED_PROTOCOL;
  144|      0|    break;
  145|  6.10k|  }
  146|       |
  147|      0|  addr[0] = '\0';
  148|      0|  *port = 0;
  149|      0|  return result;
  150|  6.10k|}
Curl_socket_addr_from_ai:
  347|  2.03k|{
  348|       |  /*
  349|       |   * The Curl_sockaddr_ex structure is libcurl's external API
  350|       |   * curl_sockaddr structure with enough space available to directly hold
  351|       |   * any protocol-specific address structures. The variable declared here
  352|       |   * will be used to pass / receive data to/from the fopensocket callback
  353|       |   * if this has been set, before that, it is initialized from parameters.
  354|       |   */
  355|  2.03k|  addr->family = ai->ai_family;
  356|  2.03k|  addr->socktype = Curl_socktype_for_transport(transport);
  357|  2.03k|  addr->protocol = Curl_protocol_for_transport(transport);
  358|  2.03k|  addr->addrlen = (unsigned int)ai->ai_addrlen;
  359|       |
  360|  2.03k|  DEBUGASSERT(addr->addrlen <= sizeof(addr->curl_sa_addrbuf));
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (360:3): [True: 0, False: 2.03k]
  |  Branch (360:3): [True: 2.03k, False: 0]
  ------------------
  361|  2.03k|  if(addr->addrlen > sizeof(addr->curl_sa_addrbuf))
  ------------------
  |  |   36|  2.03k|#define curl_sa_addrbuf addr.buf
  ------------------
  |  Branch (361:6): [True: 0, False: 2.03k]
  ------------------
  362|      0|    return CURLE_TOO_LARGE;
  363|       |
  364|  2.03k|  memcpy(&addr->curl_sa_addrbuf, ai->ai_addr, addr->addrlen);
  ------------------
  |  |   36|  2.03k|#define curl_sa_addrbuf addr.buf
  ------------------
  365|  2.03k|  return CURLE_OK;
  366|  2.03k|}
Curl_cf_tcp_create:
 1872|  2.03k|{
 1873|  2.03k|  struct cf_socket_ctx *ctx = NULL;
 1874|  2.03k|  struct Curl_cfilter *cf = NULL;
 1875|  2.03k|  CURLcode result;
 1876|       |
 1877|  2.03k|  (void)data;
 1878|  2.03k|  (void)origin;
 1879|  2.03k|  (void)conn;
 1880|  2.03k|  (void)tunnel_peer;
 1881|  2.03k|  (void)tunnel_transport;
 1882|  2.03k|  DEBUGASSERT(transport_peer == TRNSPRT_TCP);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1882:3): [True: 0, False: 2.03k]
  |  Branch (1882:3): [True: 2.03k, False: 0]
  ------------------
 1883|  2.03k|  if(!addr) {
  ------------------
  |  Branch (1883:6): [True: 0, False: 2.03k]
  ------------------
 1884|      0|    result = CURLE_BAD_FUNCTION_ARGUMENT;
 1885|      0|    goto out;
 1886|      0|  }
 1887|       |
 1888|  2.03k|  ctx = curlx_calloc(1, sizeof(*ctx));
  ------------------
  |  | 1473|  2.03k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
 1889|  2.03k|  if(!ctx) {
  ------------------
  |  Branch (1889:6): [True: 0, False: 2.03k]
  ------------------
 1890|      0|    result = CURLE_OUT_OF_MEMORY;
 1891|      0|    goto out;
 1892|      0|  }
 1893|       |
 1894|  2.03k|  result = cf_socket_ctx_init(ctx, peer, addr, transport_peer);
 1895|  2.03k|  if(result)
  ------------------
  |  Branch (1895:6): [True: 0, False: 2.03k]
  ------------------
 1896|      0|    goto out;
 1897|       |
 1898|  2.03k|  result = Curl_cf_create(&cf, &Curl_cft_tcp, ctx);
 1899|       |
 1900|  2.03k|out:
 1901|  2.03k|  *pcf = (!result) ? cf : NULL;
  ------------------
  |  Branch (1901:10): [True: 2.03k, False: 0]
  ------------------
 1902|  2.03k|  if(result) {
  ------------------
  |  Branch (1902:6): [True: 0, False: 2.03k]
  ------------------
 1903|      0|    curlx_safefree(cf);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1904|      0|    cf_socket_ctx_free(ctx);
 1905|      0|  }
 1906|       |
 1907|  2.03k|  return result;
 1908|  2.03k|}
cf-socket.c:socket_open:
  423|  2.03k|{
  424|  2.03k|  char errbuf[STRERROR_LEN];
  425|       |
  426|  2.03k|#ifdef SOCK_CLOEXEC
  427|  2.03k|  addr->socktype |= SOCK_CLOEXEC;
  428|  2.03k|#endif
  429|       |
  430|  2.03k|  DEBUGASSERT(data);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (430:3): [True: 0, False: 2.03k]
  |  Branch (430:3): [True: 2.03k, False: 0]
  ------------------
  431|  2.03k|  DEBUGASSERT(data->conn);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (431:3): [True: 0, False: 2.03k]
  |  Branch (431:3): [True: 2.03k, False: 0]
  ------------------
  432|  2.03k|  if(data->set.fopensocket) {
  ------------------
  |  Branch (432:6): [True: 2.03k, False: 0]
  ------------------
  433|       |    /*
  434|       |     * If the opensocket callback is set, all the destination address
  435|       |     * information is passed to the callback. Depending on this information the
  436|       |     * callback may opt to abort the connection, this is indicated returning
  437|       |     * CURL_SOCKET_BAD; otherwise it will return a not-connected socket. When
  438|       |     * the callback returns a valid socket the destination address information
  439|       |     * might have been changed and this 'new' address will actually be used
  440|       |     * here to connect.
  441|       |     */
  442|  2.03k|    struct Curl_mapi_guard guard;
  443|  2.03k|    CURL_CBAPI_START(&guard, data, easy_fopensocket);
  ------------------
  |  |  201|  2.03k|  Curl_cbapi_enter((g), (d), NULL, CURL_CBAPI_FN_##fn)
  ------------------
  444|  2.03k|    *sockfd = data->set.fopensocket(data->set.opensocket_client,
  445|  2.03k|                                    CURLSOCKTYPE_IPCXN,
  446|  2.03k|                                    (struct curl_sockaddr *)addr);
  447|  2.03k|    CURL_CBAPI_END(&guard);
  ------------------
  |  |  205|  2.03k|  Curl_cbapi_leave(g)
  ------------------
  448|  2.03k|  }
  449|      0|  else {
  450|       |    /* opensocket callback not set, so create the socket now */
  451|      0|#ifdef DEBUGBUILD
  452|      0|    if((addr->family == AF_INET6) && getenv("CURL_DBG_SOCK_FAIL_IPV6")) {
  ------------------
  |  Branch (452:8): [True: 0, False: 0]
  |  Branch (452:38): [True: 0, False: 0]
  ------------------
  453|      0|      failf(data, "CURL_DBG_SOCK_FAIL_IPV6: failed to open socket");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  454|      0|      return CURLE_COULDNT_CONNECT;
  455|      0|    }
  456|      0|#endif
  457|      0|    *sockfd = CURL_SOCKET(addr->family, addr->socktype, addr->protocol);
  ------------------
  |  | 1429|      0|  curl_dbg_socket((int)(domain), type, protocol, __LINE__, __FILE__)
  ------------------
  458|      0|    if((*sockfd == CURL_SOCKET_BAD) && (SOCKERRNO == SOCKENOMEM))
  ------------------
  |  |  147|      0|#define CURL_SOCKET_BAD (-1)
  ------------------
                  if((*sockfd == CURL_SOCKET_BAD) && (SOCKERRNO == SOCKENOMEM))
  ------------------
  |  | 1089|      0|#define SOCKERRNO         errno
  ------------------
                  if((*sockfd == CURL_SOCKET_BAD) && (SOCKERRNO == SOCKENOMEM))
  ------------------
  |  | 1127|      0|#define SOCKENOMEM        ENOMEM
  ------------------
  |  Branch (458:8): [True: 0, False: 0]
  |  Branch (458:40): [True: 0, False: 0]
  ------------------
  459|      0|      return CURLE_OUT_OF_MEMORY;
  460|      0|  }
  461|       |
  462|  2.03k|  if(*sockfd == CURL_SOCKET_BAD) {
  ------------------
  |  |  147|  2.03k|#define CURL_SOCKET_BAD (-1)
  ------------------
  |  Branch (462:6): [True: 0, False: 2.03k]
  ------------------
  463|       |    /* no socket, no connection */
  464|      0|    failf(data, "failed to open socket: %s",
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  465|      0|          curlx_strerror(SOCKERRNO, errbuf, sizeof(errbuf)));
  ------------------
  |  | 1089|      0|#define SOCKERRNO         errno
  ------------------
  466|      0|    return CURLE_COULDNT_CONNECT;
  467|      0|  }
  468|       |
  469|       |#ifdef USE_SO_NOSIGPIPE
  470|       |  if(Curl_sock_nosigpipe(*sockfd) < 0) {
  471|       |    failf(data, "setsockopt enable SO_NOSIGPIPE: %s",
  472|       |          curlx_strerror(SOCKERRNO, errbuf, sizeof(errbuf)));
  473|       |    sclose(*sockfd);
  474|       |    *sockfd = CURL_SOCKET_BAD;
  475|       |    return CURLE_COULDNT_CONNECT;
  476|       |  }
  477|       |#endif /* USE_SO_NOSIGPIPE */
  478|       |
  479|       |#if defined(HAVE_FCNTL) && !defined(SOCK_CLOEXEC)
  480|       |  if(fcntl(*sockfd, F_SETFD, FD_CLOEXEC) < 0) {
  481|       |    failf(data, "fcntl set CLOEXEC: %s",
  482|       |          curlx_strerror(SOCKERRNO, errbuf, sizeof(errbuf)));
  483|       |    sclose(*sockfd);
  484|       |    *sockfd = CURL_SOCKET_BAD;
  485|       |    return CURLE_COULDNT_CONNECT;
  486|       |  }
  487|       |#endif
  488|       |
  489|  2.03k|#if defined(USE_IPV6) && defined(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID)
  490|  2.03k|  if(addr->family == AF_INET6) {
  ------------------
  |  Branch (490:6): [True: 0, False: 2.03k]
  ------------------
  491|      0|    struct sockaddr_in6 * const sa6 = (void *)&addr->curl_sa_addr;
  ------------------
  |  |   35|      0|#define curl_sa_addr    addr.sa
  ------------------
  492|      0|    sa6->sin6_scope_id = get_scope_id(data, sa6);
  493|      0|  }
  494|  2.03k|#endif
  495|  2.03k|  return CURLE_OK;
  496|  2.03k|}
cf-socket.c:socket_close:
  529|  2.03k|{
  530|  2.03k|  if(sock == CURL_SOCKET_BAD)
  ------------------
  |  |  147|  2.03k|#define CURL_SOCKET_BAD (-1)
  ------------------
  |  Branch (530:6): [True: 0, False: 2.03k]
  ------------------
  531|      0|    return 0;
  532|       |
  533|  2.03k|  if(use_callback && conn && conn->fclosesocket) {
  ------------------
  |  Branch (533:6): [True: 2.03k, False: 0]
  |  Branch (533:22): [True: 2.03k, False: 0]
  |  Branch (533:30): [True: 0, False: 2.03k]
  ------------------
  534|      0|    struct Curl_mapi_guard guard;
  535|      0|    int rc;
  536|      0|    Curl_multi_will_close(data, sock);
  537|      0|    CURL_CBAPI_START(&guard, data, easy_closesocket);
  ------------------
  |  |  201|      0|  Curl_cbapi_enter((g), (d), NULL, CURL_CBAPI_FN_##fn)
  ------------------
  538|      0|    rc = conn->fclosesocket(conn->closesocket_client, sock);
  539|      0|    CURL_CBAPI_END(&guard);
  ------------------
  |  |  205|      0|  Curl_cbapi_leave(g)
  ------------------
  540|      0|    return rc;
  541|      0|  }
  542|       |
  543|  2.03k|  if(conn)
  ------------------
  |  Branch (543:6): [True: 2.03k, False: 0]
  ------------------
  544|       |    /* tell the multi-socket code about this */
  545|  2.03k|    Curl_multi_will_close(data, sock);
  546|       |
  547|  2.03k|  sclose(sock);
  ------------------
  |  | 1421|  2.03k|#define sclose(sockfd) curl_dbg_sclose(sockfd, __LINE__, __FILE__)
  ------------------
  548|       |
  549|  2.03k|  return 0;
  550|  2.03k|}
cf-socket.c:cf_socket_destroy:
 1070|  2.03k|{
 1071|  2.03k|  struct cf_socket_ctx *ctx = cf->ctx;
 1072|       |
 1073|  2.03k|  CURL_TRC_CF(data, cf, "destroy");
  ------------------
  |  |  153|  2.03k|  do {                                          \
  |  |  154|  2.03k|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|  2.03k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 2.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|  2.03k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|  2.03k|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
 1074|  2.03k|  if(ctx) {
  ------------------
  |  Branch (1074:6): [True: 2.03k, False: 0]
  ------------------
 1075|  2.03k|    if(ctx->sock != CURL_SOCKET_BAD) {
  ------------------
  |  |  147|  2.03k|#define CURL_SOCKET_BAD (-1)
  ------------------
  |  Branch (1075:8): [True: 2.03k, False: 0]
  ------------------
 1076|  2.03k|      CURL_TRC_CF(data, cf, "cf_socket_close, fd=%" FMT_SOCKET_T, ctx->sock);
  ------------------
  |  |  153|  2.03k|  do {                                          \
  |  |  154|  2.03k|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|  2.03k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 2.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|  2.03k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|  2.03k|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
 1077|  2.03k|      if(ctx->sock == cf->conn->sock[cf->sockindex])
  ------------------
  |  Branch (1077:10): [True: 2.03k, False: 0]
  ------------------
 1078|  2.03k|        cf->conn->sock[cf->sockindex] = CURL_SOCKET_BAD;
  ------------------
  |  |  147|  2.03k|#define CURL_SOCKET_BAD (-1)
  ------------------
 1079|  2.03k|      socket_close(data, cf->conn, !ctx->accepted, ctx->sock);
 1080|  2.03k|    }
 1081|  2.03k|    cf_socket_ctx_free(ctx);
 1082|  2.03k|  }
 1083|  2.03k|}
cf-socket.c:cf_tcp_connect:
 1413|  2.03k|{
 1414|  2.03k|  struct cf_socket_ctx *ctx = cf->ctx;
 1415|  2.03k|  CURLcode result = CURLE_COULDNT_CONNECT;
 1416|  2.03k|  int rc = 0;
 1417|       |
 1418|  2.03k|  if(cf->connected) {
  ------------------
  |  Branch (1418:6): [True: 0, False: 2.03k]
  ------------------
 1419|      0|    *done = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 1420|      0|    return CURLE_OK;
 1421|      0|  }
 1422|       |
 1423|  2.03k|  *done = FALSE; /* a negative world view is best */
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
 1424|  2.03k|  if(ctx->sock == CURL_SOCKET_BAD) {
  ------------------
  |  |  147|  2.03k|#define CURL_SOCKET_BAD (-1)
  ------------------
  |  Branch (1424:6): [True: 2.03k, False: 0]
  ------------------
 1425|  2.03k|    int sockerr;
 1426|       |
 1427|  2.03k|    result = cf_socket_open(cf, data);
 1428|  2.03k|    if(result)
  ------------------
  |  Branch (1428:8): [True: 0, False: 2.03k]
  ------------------
 1429|      0|      goto out;
 1430|       |
 1431|  2.03k|    if(cf->connected) {
  ------------------
  |  Branch (1431:8): [True: 2.03k, False: 0]
  ------------------
 1432|  2.03k|      *done = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
 1433|  2.03k|      return CURLE_OK;
 1434|  2.03k|    }
 1435|       |
 1436|       |    /* Connect TCP socket */
 1437|      0|    rc = do_connect(cf, data, (bool)cf->conn->bits.tcp_fastopen);
 1438|      0|    sockerr = SOCKERRNO;
  ------------------
  |  | 1089|      0|#define SOCKERRNO         errno
  ------------------
 1439|      0|    set_local_ip(cf, data);
 1440|      0|    CURL_TRC_CF(data, cf, "local address %s port %d...",
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1441|      0|                ctx->ip.local_ip, ctx->ip.local_port);
 1442|      0|    if(rc == -1) {
  ------------------
  |  Branch (1442:8): [True: 0, False: 0]
  ------------------
 1443|      0|      ctx->sockerr = sockerr;
 1444|      0|      result = socket_connect_result(data, ctx->ip.remote_ip, sockerr);
 1445|      0|      goto out;
 1446|      0|    }
 1447|      0|  }
 1448|       |
 1449|       |#ifdef mpeix
 1450|       |  /* Call this function once now, and ignore the results. We do this to
 1451|       |     "clear" the error state on the socket so that we can later read it
 1452|       |     reliably. This is reported necessary on the MPE/iX operating
 1453|       |     system. */
 1454|       |  (void)verifyconnect(ctx->sock, NULL);
 1455|       |#endif
 1456|       |  /* check socket for connect */
 1457|      0|  rc = SOCKET_WRITABLE(ctx->sock, 0);
  ------------------
  |  |   79|      0|  Curl_socket_check(CURL_SOCKET_BAD, CURL_SOCKET_BAD, x, z)
  |  |  ------------------
  |  |  |  |  147|      0|#define CURL_SOCKET_BAD (-1)
  |  |  ------------------
  |  |                 Curl_socket_check(CURL_SOCKET_BAD, CURL_SOCKET_BAD, x, z)
  |  |  ------------------
  |  |  |  |  147|      0|#define CURL_SOCKET_BAD (-1)
  |  |  ------------------
  ------------------
 1458|       |
 1459|      0|  if(rc == 0) { /* no connection yet */
  ------------------
  |  Branch (1459:6): [True: 0, False: 0]
  ------------------
 1460|      0|    CURL_TRC_CF(data, cf, "not connected yet on fd=%" FMT_SOCKET_T, ctx->sock);
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1461|      0|    return CURLE_OK;
 1462|      0|  }
 1463|      0|  else if(rc == CURL_CSELECT_OUT || cf->conn->bits.tcp_fastopen) {
  ------------------
  |  |  291|      0|#define CURL_CSELECT_OUT  0x02
  ------------------
  |  Branch (1463:11): [True: 0, False: 0]
  |  Branch (1463:37): [True: 0, False: 0]
  ------------------
 1464|      0|    if(verifyconnect(ctx->sock, &ctx->sockerr)) {
  ------------------
  |  Branch (1464:8): [True: 0, False: 0]
  ------------------
 1465|       |      /* we are connected with TCP, awesome! */
 1466|      0|      ctx->connected_at = *Curl_pgrs_now(data);
 1467|      0|      set_local_ip(cf, data);
 1468|      0|      *done = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 1469|      0|      cf->connected = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 1470|      0|      CURL_TRC_CF(data, cf, "connected on fd=%" FMT_SOCKET_T, ctx->sock);
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1471|      0|      return CURLE_OK;
 1472|      0|    }
 1473|      0|  }
 1474|      0|  else if(rc & CURL_CSELECT_ERR) {
  ------------------
  |  |  292|      0|#define CURL_CSELECT_ERR  0x04
  ------------------
  |  Branch (1474:11): [True: 0, False: 0]
  ------------------
 1475|      0|    CURL_TRC_CF(data, cf, "poll/select error on fd=%" FMT_SOCKET_T, ctx->sock);
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1476|      0|    (void)verifyconnect(ctx->sock, &ctx->sockerr);
 1477|      0|    result = CURLE_COULDNT_CONNECT;
 1478|      0|  }
 1479|       |
 1480|      0|out:
 1481|      0|  if(result) {
  ------------------
  |  Branch (1481:6): [True: 0, False: 0]
  ------------------
 1482|      0|    VERBOSE(char buffer[STRERROR_LEN]);
  ------------------
  |  | 1611|      0|#define VERBOSE(x) x
  ------------------
 1483|      0|    set_local_ip(cf, data);
 1484|      0|    if(ctx->sockerr) {
  ------------------
  |  Branch (1484:8): [True: 0, False: 0]
  ------------------
 1485|      0|      data->state.os_errno = ctx->sockerr;
 1486|      0|      SET_SOCKERRNO(ctx->sockerr);
  ------------------
  |  | 1090|      0|#define SET_SOCKERRNO(x)  (errno = (x))
  ------------------
 1487|      0|      VERBOSE(curlx_strerror(ctx->sockerr, buffer, sizeof(buffer)));
  ------------------
  |  | 1611|      0|#define VERBOSE(x) x
  ------------------
 1488|      0|    }
 1489|      0|    else {
 1490|      0|      VERBOSE(curlx_strcopy(buffer, sizeof(buffer), STRCONST("peer closed")));
  ------------------
  |  | 1611|      0|#define VERBOSE(x) x
  ------------------
 1491|      0|    }
 1492|      0|    if(ctx->sock != CURL_SOCKET_BAD) {
  ------------------
  |  |  147|      0|#define CURL_SOCKET_BAD (-1)
  ------------------
  |  Branch (1492:8): [True: 0, False: 0]
  ------------------
 1493|      0|      socket_close(data, cf->conn, TRUE, ctx->sock);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 1494|      0|      ctx->sock = CURL_SOCKET_BAD;
  ------------------
  |  |  147|      0|#define CURL_SOCKET_BAD (-1)
  ------------------
 1495|      0|    }
 1496|      0|    infof(data, "connect to %s port %u from %s port %d failed: %s",
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1497|      0|          ctx->ip.remote_ip, ctx->ip.remote_port,
 1498|      0|          ctx->ip.local_ip, ctx->ip.local_port,
 1499|      0|          curlx_strerror(ctx->sockerr, buffer, sizeof(buffer)));
 1500|       |    *done = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 1501|      0|  }
 1502|      0|  return result;
 1503|      0|}
cf-socket.c:cf_socket_open:
 1197|  2.03k|{
 1198|  2.03k|  struct cf_socket_ctx *ctx = cf->ctx;
 1199|  2.03k|  int error = 0;
 1200|  2.03k|  bool isconnected = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
 1201|  2.03k|  CURLcode result = CURLE_COULDNT_CONNECT;
 1202|  2.03k|  bool is_tcp;
 1203|       |
 1204|  2.03k|  DEBUGASSERT(ctx->sock == CURL_SOCKET_BAD);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1204:3): [True: 0, False: 2.03k]
  |  Branch (1204:3): [True: 2.03k, False: 0]
  ------------------
 1205|  2.03k|  ctx->started_at = *Curl_pgrs_now(data);
 1206|  2.03k|#ifdef CURL_USE_SOCK_NONBLOCK
 1207|       |  /* Do not tuck SOCK_NONBLOCK into socktype when opensocket callback is set
 1208|       |   * because we would not know how socktype is about to be used in the
 1209|       |   * callback, SOCK_NONBLOCK might get factored out before calling socket().
 1210|       |   */
 1211|  2.03k|  if(!data->set.fopensocket)
  ------------------
  |  Branch (1211:6): [True: 0, False: 2.03k]
  ------------------
 1212|      0|    ctx->addr.socktype |= SOCK_NONBLOCK;
 1213|  2.03k|#endif
 1214|  2.03k|  result = socket_open(data, &ctx->addr, &ctx->sock);
 1215|  2.03k|#ifdef CURL_USE_SOCK_NONBLOCK
 1216|       |  /* Restore the socktype after the socket is created. */
 1217|  2.03k|  if(!data->set.fopensocket)
  ------------------
  |  Branch (1217:6): [True: 0, False: 2.03k]
  ------------------
 1218|      0|    ctx->addr.socktype &= ~SOCK_NONBLOCK;
 1219|  2.03k|#endif
 1220|  2.03k|  if(result)
  ------------------
  |  Branch (1220:6): [True: 0, False: 2.03k]
  ------------------
 1221|      0|    goto out;
 1222|       |
 1223|  2.03k|  result = set_remote_ip(cf, data);
 1224|  2.03k|  if(result)
  ------------------
  |  Branch (1224:6): [True: 0, False: 2.03k]
  ------------------
 1225|      0|    goto out;
 1226|       |
 1227|  2.03k|#ifdef USE_IPV6
 1228|  2.03k|  if(ctx->addr.family == AF_INET6) {
  ------------------
  |  Branch (1228:6): [True: 0, False: 2.03k]
  ------------------
 1229|       |#ifdef USE_WINSOCK
 1230|       |    /* Turn on support for IPv4-mapped IPv6 addresses.
 1231|       |     * Linux kernel, NetBSD, FreeBSD, Darwin, lwIP: default is off;
 1232|       |     * Windows Vista and later: default is on;
 1233|       |     * DragonFly BSD: acts like off, and dummy setting;
 1234|       |     * OpenBSD and earlier Windows: unsupported.
 1235|       |     * Linux: controlled by /proc/sys/net/ipv6/bindv6only.
 1236|       |     */
 1237|       |    int on = 0;
 1238|       |    (void)setsockopt(ctx->sock, IPPROTO_IPV6, IPV6_V6ONLY,
 1239|       |                     (void *)&on, sizeof(on));
 1240|       |#endif
 1241|      0|#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
 1242|      0|    {
 1243|      0|      struct sockaddr_in6 *sa6 = (void *)&ctx->addr.curl_sa_addr;
  ------------------
  |  |   35|      0|#define curl_sa_addr    addr.sa
  ------------------
 1244|      0|      if(sa6->sin6_scope_id)
  ------------------
  |  Branch (1244:10): [True: 0, False: 0]
  ------------------
 1245|      0|        infof(data, "  Trying [%s]:%d scope_id=%lu...",
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1246|      0|              ctx->ip.remote_ip, ctx->ip.remote_port,
 1247|      0|              (unsigned long)sa6->sin6_scope_id);
 1248|      0|      else
 1249|      0|#endif
 1250|      0|        infof(data, "  Trying [%s]:%d...",
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1251|      0|              ctx->ip.remote_ip, ctx->ip.remote_port);
 1252|      0|#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
 1253|      0|    }
 1254|      0|#endif
 1255|      0|  }
 1256|  2.03k|  else
 1257|  2.03k|#endif
 1258|  2.03k|    infof(data, "  Trying %s:%d...", ctx->ip.remote_ip, ctx->ip.remote_port);
  ------------------
  |  |  143|  2.03k|  do {                               \
  |  |  144|  2.03k|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|  2.03k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|  2.03k|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|  2.03k|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
 1259|       |
 1260|  2.03k|#ifdef USE_IPV6
 1261|  2.03k|  is_tcp = (ctx->addr.family == AF_INET ||
  ------------------
  |  Branch (1261:13): [True: 2.03k, False: 0]
  ------------------
 1262|      0|            ctx->addr.family == AF_INET6) &&
  ------------------
  |  Branch (1262:13): [True: 0, False: 0]
  ------------------
 1263|  2.03k|    cf_socktype(ctx->addr.socktype) == SOCK_STREAM;
  ------------------
  |  Branch (1263:5): [True: 2.03k, False: 0]
  ------------------
 1264|       |#else
 1265|       |  is_tcp = (ctx->addr.family == AF_INET) &&
 1266|       |    cf_socktype(ctx->addr.socktype) == SOCK_STREAM;
 1267|       |#endif
 1268|  2.03k|  if(is_tcp) {
  ------------------
  |  Branch (1268:6): [True: 2.03k, False: 0]
  ------------------
 1269|  2.03k|    if(data->set.tcp_nodelay)
  ------------------
  |  Branch (1269:8): [True: 2.03k, False: 0]
  ------------------
 1270|  2.03k|      tcpnodelay(cf, data, ctx->sock);
 1271|       |
 1272|  2.03k|    if(data->set.tcp_keepalive)
  ------------------
  |  Branch (1272:8): [True: 0, False: 2.03k]
  ------------------
 1273|      0|      tcpkeepalive(cf, data, ctx->sock);
 1274|       |
 1275|  2.03k|    tcplocalhost(cf, ctx->sock);
 1276|  2.03k|  }
 1277|       |
 1278|  2.03k|  if(data->set.fsockopt) {
  ------------------
  |  Branch (1278:6): [True: 2.03k, False: 0]
  ------------------
 1279|       |    /* activate callback for setting socket options */
 1280|  2.03k|    struct Curl_mapi_guard guard;
 1281|  2.03k|    CURL_CBAPI_START(&guard, data, easy_fsockopt);
  ------------------
  |  |  201|  2.03k|  Curl_cbapi_enter((g), (d), NULL, CURL_CBAPI_FN_##fn)
  ------------------
 1282|  2.03k|    error = data->set.fsockopt(data->set.sockopt_client,
 1283|  2.03k|                               ctx->sock,
 1284|  2.03k|                               CURLSOCKTYPE_IPCXN);
 1285|  2.03k|    CURL_CBAPI_END(&guard);
  ------------------
  |  |  205|  2.03k|  Curl_cbapi_leave(g)
  ------------------
 1286|       |
 1287|  2.03k|    if(error == CURL_SOCKOPT_ALREADY_CONNECTED)
  ------------------
  |  |  423|  2.03k|#define CURL_SOCKOPT_ALREADY_CONNECTED 2
  ------------------
  |  Branch (1287:8): [True: 2.03k, False: 0]
  ------------------
 1288|  2.03k|      isconnected = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
 1289|      0|    else if(error) {
  ------------------
  |  Branch (1289:13): [True: 0, False: 0]
  ------------------
 1290|      0|      result = CURLE_ABORTED_BY_CALLBACK;
 1291|      0|      goto out;
 1292|      0|    }
 1293|  2.03k|  }
 1294|       |
 1295|  2.03k|#ifndef CURL_DISABLE_BINDLOCAL
 1296|       |  /* possibly bind the local end to an IP, interface or port */
 1297|  2.03k|  if(ctx->addr.family == AF_INET
  ------------------
  |  Branch (1297:6): [True: 2.03k, False: 0]
  ------------------
 1298|      0|#ifdef USE_IPV6
 1299|      0|     || ctx->addr.family == AF_INET6
  ------------------
  |  Branch (1299:9): [True: 0, False: 0]
  ------------------
 1300|  2.03k|#endif
 1301|  2.03k|    ) {
 1302|  2.03k|    result = bindlocal(data, cf->conn, ctx->sock, ctx->addr.family,
 1303|  2.03k|                       Curl_ipv6_scope(&ctx->addr.curl_sa_addr),
  ------------------
  |  |   35|  2.03k|#define curl_sa_addr    addr.sa
  ------------------
 1304|  2.03k|                       ctx->transport);
 1305|  2.03k|    if(result) {
  ------------------
  |  Branch (1305:8): [True: 0, False: 2.03k]
  ------------------
 1306|      0|      if(result == CURLE_UNSUPPORTED_PROTOCOL) {
  ------------------
  |  Branch (1306:10): [True: 0, False: 0]
  ------------------
 1307|       |        /* The address family is not supported on this interface.
 1308|       |           We can continue trying addresses */
 1309|      0|        result = CURLE_COULDNT_CONNECT;
 1310|      0|      }
 1311|      0|      goto out;
 1312|      0|    }
 1313|  2.03k|  }
 1314|  2.03k|#endif
 1315|       |
 1316|       |#ifndef CURL_USE_SOCK_NONBLOCK
 1317|       |  /* Set socket non-blocking, must be a non-blocking socket for
 1318|       |   * a non-blocking connect. */
 1319|       |  error = curlx_nonblock(ctx->sock, TRUE);
 1320|       |  if(error < 0) {
 1321|       |    result = CURLE_UNSUPPORTED_PROTOCOL;
 1322|       |    ctx->sockerr = SOCKERRNO;
 1323|       |    goto out;
 1324|       |  }
 1325|       |#else
 1326|  2.03k|  if(data->set.fopensocket) {
  ------------------
  |  Branch (1326:6): [True: 2.03k, False: 0]
  ------------------
 1327|       |    /* Set socket non-blocking, must be a non-blocking socket for
 1328|       |     * a non-blocking connect. */
 1329|  2.03k|    error = curlx_nonblock(ctx->sock, TRUE);
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
 1330|  2.03k|    if(error < 0) {
  ------------------
  |  Branch (1330:8): [True: 0, False: 2.03k]
  ------------------
 1331|      0|      result = CURLE_UNSUPPORTED_PROTOCOL;
 1332|      0|      ctx->sockerr = SOCKERRNO;
  ------------------
  |  | 1089|      0|#define SOCKERRNO         errno
  ------------------
 1333|      0|      goto out;
 1334|      0|    }
 1335|  2.03k|  }
 1336|  2.03k|#endif
 1337|  2.03k|  ctx->sock_connected = (cf_socktype(ctx->addr.socktype) != SOCK_DGRAM);
 1338|  2.03k|out:
 1339|  2.03k|  if(result) {
  ------------------
  |  Branch (1339:6): [True: 0, False: 2.03k]
  ------------------
 1340|      0|    if(ctx->sock != CURL_SOCKET_BAD) {
  ------------------
  |  |  147|      0|#define CURL_SOCKET_BAD (-1)
  ------------------
  |  Branch (1340:8): [True: 0, False: 0]
  ------------------
 1341|      0|      socket_close(data, cf->conn, TRUE, ctx->sock);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 1342|      0|      ctx->sock = CURL_SOCKET_BAD;
  ------------------
  |  |  147|      0|#define CURL_SOCKET_BAD (-1)
  ------------------
 1343|      0|    }
 1344|      0|  }
 1345|  2.03k|  else if(isconnected) {
  ------------------
  |  Branch (1345:11): [True: 2.03k, False: 0]
  ------------------
 1346|  2.03k|    set_local_ip(cf, data);
 1347|  2.03k|    ctx->connected_at = *Curl_pgrs_now(data);
 1348|  2.03k|    cf->connected = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
 1349|  2.03k|  }
 1350|  2.03k|  CURL_TRC_CF(data, cf, "cf_socket_open() -> %d, fd=%" FMT_SOCKET_T,
  ------------------
  |  |  153|  2.03k|  do {                                          \
  |  |  154|  2.03k|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|  2.03k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|  2.03k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 2.03k, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|  2.03k|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
 1351|  2.03k|              (int)result, ctx->sock);
 1352|  2.03k|  return result;
 1353|  2.03k|}
cf-socket.c:set_remote_ip:
 1120|  2.03k|{
 1121|  2.03k|  struct cf_socket_ctx *ctx = cf->ctx;
 1122|  2.03k|  CURLcode result;
 1123|       |
 1124|       |  /* store remote address and port used in this connection attempt */
 1125|  2.03k|  ctx->ip.transport = ctx->transport;
 1126|  2.03k|  result = sockaddr2string(&ctx->addr.curl_sa_addr,
  ------------------
  |  |   35|  2.03k|#define curl_sa_addr    addr.sa
  ------------------
 1127|  2.03k|                           (curl_socklen_t)ctx->addr.addrlen,
 1128|  2.03k|                           ctx->ip.remote_ip, &ctx->ip.remote_port);
 1129|  2.03k|  if(result) {
  ------------------
  |  Branch (1129:6): [True: 0, False: 2.03k]
  ------------------
 1130|      0|    ctx->sockerr = SOCKEAFNOSUPPORT;
  ------------------
  |  | 1118|      0|#define SOCKEAFNOSUPPORT  EAFNOSUPPORT
  ------------------
 1131|       |    /* malformed address or bug in inet_ntop, try next address */
 1132|      0|    failf(data, "curl_sa_addr inet_ntop() failed with %d", (int)result);
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
 1133|      0|    return CURLE_FAILED_INIT;
 1134|      0|  }
 1135|  2.03k|  return CURLE_OK;
 1136|  2.03k|}
cf-socket.c:cf_socktype:
 1141|  4.07k|{
 1142|  4.07k|#ifdef SOCK_CLOEXEC
 1143|  4.07k|  x &= ~SOCK_CLOEXEC;
 1144|  4.07k|#endif
 1145|  4.07k|#ifdef CURL_USE_SOCK_NONBLOCK
 1146|       |  x &= ~SOCK_NONBLOCK;
 1147|  4.07k|#endif
 1148|  4.07k|  return x;
 1149|  4.07k|}
cf-socket.c:tcpnodelay:
  155|  2.03k|{
  156|  2.03k|#if defined(TCP_NODELAY) && defined(CURL_TCP_NODELAY_SUPPORTED)
  157|  2.03k|  curl_socklen_t onoff = (curl_socklen_t)1;
  158|  2.03k|  int level = IPPROTO_TCP;
  159|  2.03k|  VERBOSE(char buffer[STRERROR_LEN]);
  ------------------
  |  | 1611|  2.03k|#define VERBOSE(x) x
  ------------------
  160|       |
  161|  2.03k|  if(setsockopt(sockfd, level, TCP_NODELAY, (void *)&onoff, sizeof(onoff)) < 0)
  ------------------
  |  Branch (161:6): [True: 2.03k, False: 0]
  ------------------
  162|  2.03k|    CURL_TRC_CF(data, cf, "Could not set TCP_NODELAY: %s",
  ------------------
  |  |  153|  2.03k|  do {                                          \
  |  |  154|  2.03k|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|  2.03k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|  2.03k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 2.03k, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|  2.03k|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  163|  2.03k|                curlx_strerror(SOCKERRNO, buffer, sizeof(buffer)));
  164|       |#else
  165|       |  (void)cf;
  166|       |  (void)data;
  167|       |  (void)sockfd;
  168|       |#endif
  169|  2.03k|}
cf-socket.c:bindlocal:
  647|  2.03k|{
  648|  2.03k|  struct Curl_sockaddr_storage sa;
  649|  2.03k|  struct sockaddr *sock = (struct sockaddr *)&sa;  /* bind to this address */
  650|  2.03k|  curl_socklen_t sizeof_sa = 0; /* size of the data sock points to */
  651|  2.03k|  struct sockaddr_in *si4 = (struct sockaddr_in *)&sa;
  652|  2.03k|#ifdef USE_IPV6
  653|  2.03k|  struct sockaddr_in6 *si6 = (struct sockaddr_in6 *)&sa;
  654|  2.03k|#endif
  655|       |
  656|  2.03k|  struct Curl_dns_entry *h = NULL;
  657|  2.03k|  unsigned short port = data->set.localport; /* use this port number, 0 for
  658|       |                                                "random" */
  659|       |  /* how many port numbers to try to bind to, increasing one at a time */
  660|  2.03k|  int portnum = data->set.localportrange;
  661|  2.03k|  const char *dev = CURL_EASY_STR(data, STRING_DEVICE);
  ------------------
  |  | 1228|  2.03k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
  662|  2.03k|  const char *iface_input = CURL_EASY_STR(data, STRING_INTERFACE);
  ------------------
  |  | 1228|  2.03k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
  663|  2.03k|  const char *host_input = CURL_EASY_STR(data, STRING_BINDHOST);
  ------------------
  |  | 1228|  2.03k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
  664|  2.03k|  const char *iface = iface_input ? iface_input : dev;
  ------------------
  |  Branch (664:23): [True: 0, False: 2.03k]
  ------------------
  665|  2.03k|  const char *host = host_input ? host_input : dev;
  ------------------
  |  Branch (665:22): [True: 0, False: 2.03k]
  ------------------
  666|  2.03k|  int sockerr;
  667|  2.03k|#ifdef IP_BIND_ADDRESS_NO_PORT
  668|  2.03k|  int on = 1;
  669|  2.03k|#endif
  670|       |#ifndef USE_IPV6
  671|       |  (void)scope;
  672|       |#endif
  673|       |
  674|       |  /*************************************************************
  675|       |   * Select device to bind socket to
  676|       |   *************************************************************/
  677|  2.03k|  if(!iface && !host && !port)
  ------------------
  |  Branch (677:6): [True: 2.03k, False: 0]
  |  Branch (677:16): [True: 2.03k, False: 0]
  |  Branch (677:25): [True: 2.03k, False: 0]
  ------------------
  678|       |    /* no local kind of binding was requested */
  679|  2.03k|    return CURLE_OK;
  680|      0|  else if(iface && (strlen(iface) >= 255))
  ------------------
  |  Branch (680:11): [True: 0, False: 0]
  |  Branch (680:20): [True: 0, False: 0]
  ------------------
  681|      0|    return CURLE_BAD_FUNCTION_ARGUMENT;
  682|       |
  683|      0|  memset(&sa, 0, sizeof(struct Curl_sockaddr_storage));
  684|       |
  685|      0|  if(iface || host) {
  ------------------
  |  Branch (685:6): [True: 0, False: 0]
  |  Branch (685:15): [True: 0, False: 0]
  ------------------
  686|      0|    char myhost[256] = "";
  687|      0|    int done = 0; /* -1 for error, 1 for address found */
  688|      0|    if2ip_result_t if2ip_result = IF2IP_NOT_FOUND;
  689|       |
  690|      0|#ifdef SO_BINDTODEVICE
  691|      0|    if(iface) {
  ------------------
  |  Branch (691:8): [True: 0, False: 0]
  ------------------
  692|       |      /*
  693|       |       * This binds the local socket to a particular interface. This will
  694|       |       * force even requests to other local interfaces to go out the external
  695|       |       * interface. Only bind to the interface when specified as interface,
  696|       |       * not as a hostname or ip address.
  697|       |       *
  698|       |       * The interface might be a VRF, eg: vrf-blue, which means it cannot be
  699|       |       * converted to an IP address and would fail Curl_if2ip. Try to
  700|       |       * use it straight away.
  701|       |       */
  702|      0|      if(setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE,
  ------------------
  |  Branch (702:10): [True: 0, False: 0]
  ------------------
  703|      0|                    iface, (curl_socklen_t)strlen(iface) + 1) == 0) {
  704|       |        /* This is often "errno 1, error: Operation not permitted" if you are
  705|       |         * not running as root or another suitable privileged user. If it
  706|       |         * succeeds it means the parameter was a valid interface and not an IP
  707|       |         * address. Return immediately.
  708|       |         */
  709|      0|        if(!host_input) {
  ------------------
  |  Branch (709:12): [True: 0, False: 0]
  ------------------
  710|      0|          infof(data, "socket successfully bound to interface '%s'", iface);
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  711|      0|          return CURLE_OK;
  712|      0|        }
  713|      0|      }
  714|      0|    }
  715|      0|#endif
  716|      0|    if(!host_input) {
  ------------------
  |  Branch (716:8): [True: 0, False: 0]
  ------------------
  717|       |      /* Discover IP from input device, then bind to it */
  718|      0|      if2ip_result = Curl_if2ip(af,
  719|      0|#ifdef USE_IPV6
  720|      0|                                scope, conn->scope_id,
  721|      0|#endif
  722|      0|                                iface, myhost, sizeof(myhost));
  723|      0|    }
  724|      0|    switch(if2ip_result) {
  ------------------
  |  Branch (724:12): [True: 0, False: 0]
  ------------------
  725|      0|    case IF2IP_NOT_FOUND:
  ------------------
  |  Branch (725:5): [True: 0, False: 0]
  ------------------
  726|      0|      if(iface_input && !host_input) {
  ------------------
  |  Branch (726:10): [True: 0, False: 0]
  |  Branch (726:25): [True: 0, False: 0]
  ------------------
  727|       |        /* Do not fall back to treating it as a hostname */
  728|      0|        char buffer[STRERROR_LEN];
  729|      0|        data->state.os_errno = sockerr = SOCKERRNO;
  ------------------
  |  | 1089|      0|#define SOCKERRNO         errno
  ------------------
  730|      0|        failf(data, "Could not bind to interface '%s' with errno %d: %s",
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  731|      0|              iface, sockerr, curlx_strerror(sockerr, buffer, sizeof(buffer)));
  732|      0|        return CURLE_INTERFACE_FAILED;
  733|      0|      }
  734|      0|      break;
  735|      0|    case IF2IP_AF_NOT_SUPPORTED:
  ------------------
  |  Branch (735:5): [True: 0, False: 0]
  ------------------
  736|       |      /* Signal the caller to try another address family if available */
  737|      0|      return CURLE_UNSUPPORTED_PROTOCOL;
  738|      0|    case IF2IP_FOUND:
  ------------------
  |  Branch (738:5): [True: 0, False: 0]
  ------------------
  739|       |      /*
  740|       |       * We now have the numerical IP address in the 'myhost' buffer
  741|       |       */
  742|      0|      host = myhost;
  743|      0|      infof(data, "Local Interface %s is ip %s using address family %d",
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  744|      0|            iface, host, af);
  745|      0|      done = 1;
  746|      0|      break;
  747|      0|    }
  748|      0|    if(!iface_input || host_input) {
  ------------------
  |  Branch (748:8): [True: 0, False: 0]
  |  Branch (748:24): [True: 0, False: 0]
  ------------------
  749|       |      /*
  750|       |       * This was not an interface, resolve the name as a hostname
  751|       |       * or IP number
  752|       |       *
  753|       |       * Temporarily force name resolution to use only the address type
  754|       |       * of the connection. The resolve functions should really be changed
  755|       |       * to take a type parameter instead.
  756|       |       */
  757|      0|      uint8_t dns_queries = (af == AF_INET) ?
  ------------------
  |  Branch (757:29): [True: 0, False: 0]
  ------------------
  758|      0|                            CURL_DNSQ_A : (CURL_DNSQ_A | CURL_DNSQ_AAAA);
  ------------------
  |  |   51|      0|#define CURL_DNSQ_A           (1U << 0)
  ------------------
                                          CURL_DNSQ_A : (CURL_DNSQ_A | CURL_DNSQ_AAAA);
  ------------------
  |  |   51|      0|#define CURL_DNSQ_A           (1U << 0)
  ------------------
                                          CURL_DNSQ_A : (CURL_DNSQ_A | CURL_DNSQ_AAAA);
  ------------------
  |  |   52|      0|#define CURL_DNSQ_AAAA        (1U << 1)
  ------------------
  759|      0|#ifdef USE_IPV6
  760|      0|      if(af == AF_INET6)
  ------------------
  |  Branch (760:10): [True: 0, False: 0]
  ------------------
  761|      0|        dns_queries = CURL_DNSQ_AAAA;
  ------------------
  |  |   52|      0|#define CURL_DNSQ_AAAA        (1U << 1)
  ------------------
  762|      0|#endif
  763|       |
  764|      0|      (void)Curl_resolv_blocking(data, dns_queries, host, 80, transport, &h);
  765|      0|      if(h) {
  ------------------
  |  Branch (765:10): [True: 0, False: 0]
  ------------------
  766|      0|        int h_af = h->addr->ai_family;
  767|       |        /* convert the resolved address, sizeof myhost >= INET_ADDRSTRLEN */
  768|      0|        Curl_printable_address(h->addr, myhost, sizeof(myhost));
  769|      0|        infof(data, "Name '%s' family %d resolved to '%s' family %d",
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  770|      0|              host, af, myhost, h_af);
  771|      0|        Curl_dns_entry_unlink(data, &h); /* this will NULL, potential free h */
  772|      0|        if(af != h_af) {
  ------------------
  |  Branch (772:12): [True: 0, False: 0]
  ------------------
  773|       |          /* bad IP version combo, signal the caller to try another address
  774|       |             family if available */
  775|      0|          return CURLE_UNSUPPORTED_PROTOCOL;
  776|      0|        }
  777|      0|        done = 1;
  778|      0|      }
  779|      0|      else {
  780|       |        /*
  781|       |         * provided dev was no interface (or interfaces are not supported
  782|       |         * e.g. Solaris) no ip address and no domain we fail here
  783|       |         */
  784|      0|        done = -1;
  785|      0|      }
  786|      0|    }
  787|       |
  788|      0|    if(done > 0) {
  ------------------
  |  Branch (788:8): [True: 0, False: 0]
  ------------------
  789|      0|#ifdef USE_IPV6
  790|       |      /* IPv6 address */
  791|      0|      if(af == AF_INET6) {
  ------------------
  |  Branch (791:10): [True: 0, False: 0]
  ------------------
  792|      0|#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
  793|      0|        char *scope_ptr = strchr(myhost, '%');
  794|      0|        if(scope_ptr)
  ------------------
  |  Branch (794:12): [True: 0, False: 0]
  ------------------
  795|      0|          *(scope_ptr++) = '\0';
  796|      0|#endif
  797|      0|        if(curlx_inet_pton(AF_INET6, myhost, &si6->sin6_addr) > 0) {
  ------------------
  |  Branch (797:12): [True: 0, False: 0]
  ------------------
  798|      0|          si6->sin6_family = AF_INET6;
  799|      0|          si6->sin6_port = htons(port);
  800|      0|#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
  801|      0|          if(scope_ptr) {
  ------------------
  |  Branch (801:14): [True: 0, False: 0]
  ------------------
  802|       |            /* The "myhost" string either comes from Curl_if2ip or from
  803|       |               Curl_printable_address. The latter returns only numeric scope
  804|       |               IDs and the former returns none at all. Making the scope ID,
  805|       |               if present, known to be numeric */
  806|      0|            curl_off_t scope_id;
  807|      0|            if(curlx_str_number((const char **)CURL_UNCONST(&scope_ptr),
  ------------------
  |  |  856|      0|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
  |  Branch (807:16): [True: 0, False: 0]
  ------------------
  808|      0|                                &scope_id, UINT_MAX))
  809|      0|              return CURLE_UNSUPPORTED_PROTOCOL;
  810|      0|            si6->sin6_scope_id = (unsigned int)scope_id;
  811|      0|          }
  812|      0|#endif
  813|      0|        }
  814|      0|        sizeof_sa = sizeof(struct sockaddr_in6);
  815|      0|      }
  816|      0|      else
  817|      0|#endif
  818|       |      /* IPv4 address */
  819|      0|      if((af == AF_INET) &&
  ------------------
  |  Branch (819:10): [True: 0, False: 0]
  ------------------
  820|      0|         (curlx_inet_pton(AF_INET, myhost, &si4->sin_addr) > 0)) {
  ------------------
  |  Branch (820:10): [True: 0, False: 0]
  ------------------
  821|      0|        si4->sin_family = AF_INET;
  822|      0|        si4->sin_port = htons(port);
  823|      0|        sizeof_sa = sizeof(struct sockaddr_in);
  824|      0|      }
  825|      0|    }
  826|       |
  827|      0|    if(done < 1) {
  ------------------
  |  Branch (827:8): [True: 0, False: 0]
  ------------------
  828|       |      /* errorbuf is set false so failf will overwrite any message already in
  829|       |         the error buffer, so the user receives this error message instead of a
  830|       |         generic resolve error. */
  831|      0|      char buffer[STRERROR_LEN];
  832|      0|      data->state.errorbuf = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  833|      0|      data->state.os_errno = sockerr = SOCKERRNO;
  ------------------
  |  | 1089|      0|#define SOCKERRNO         errno
  ------------------
  834|      0|      failf(data, "Could not bind to '%s' with errno %d: %s", host,
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  835|      0|            sockerr, curlx_strerror(sockerr, buffer, sizeof(buffer)));
  836|      0|      return CURLE_INTERFACE_FAILED;
  837|      0|    }
  838|      0|  }
  839|      0|  else {
  840|       |    /* no device was given, prepare sa to match af's needs */
  841|      0|#ifdef USE_IPV6
  842|      0|    if(af == AF_INET6) {
  ------------------
  |  Branch (842:8): [True: 0, False: 0]
  ------------------
  843|      0|      si6->sin6_family = AF_INET6;
  844|      0|      si6->sin6_port = htons(port);
  845|      0|      sizeof_sa = sizeof(struct sockaddr_in6);
  846|      0|    }
  847|      0|    else
  848|      0|#endif
  849|      0|    if(af == AF_INET) {
  ------------------
  |  Branch (849:8): [True: 0, False: 0]
  ------------------
  850|      0|      si4->sin_family = AF_INET;
  851|      0|      si4->sin_port = htons(port);
  852|      0|      sizeof_sa = sizeof(struct sockaddr_in);
  853|      0|    }
  854|      0|  }
  855|      0|#ifdef IP_BIND_ADDRESS_NO_PORT
  856|      0|  (void)setsockopt(sockfd, SOL_IP, IP_BIND_ADDRESS_NO_PORT, &on, sizeof(on));
  857|      0|#endif
  858|      0|  for(;;) {
  859|      0|    if(bind(sockfd, sock, sizeof_sa) >= 0) {
  ------------------
  |  Branch (859:8): [True: 0, False: 0]
  ------------------
  860|       |      /* we succeeded to bind */
  861|      0|      infof(data, "Local port: %hu", port);
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  862|      0|      conn->bits.bound = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  863|      0|      return CURLE_OK;
  864|      0|    }
  865|       |
  866|      0|    if(--portnum > 0) {
  ------------------
  |  Branch (866:8): [True: 0, False: 0]
  ------------------
  867|      0|      port++; /* try next port */
  868|      0|      if(port == 0)
  ------------------
  |  Branch (868:10): [True: 0, False: 0]
  ------------------
  869|      0|        break;
  870|      0|      infof(data, "Bind to local port %d failed, trying next", port - 1);
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  871|       |      /* We reuse/clobber the port variable here below */
  872|      0|      if(sock->sa_family == AF_INET)
  ------------------
  |  Branch (872:10): [True: 0, False: 0]
  ------------------
  873|      0|        si4->sin_port = htons(port);
  874|      0|#ifdef USE_IPV6
  875|      0|      else
  876|      0|        si6->sin6_port = htons(port);
  877|      0|#endif
  878|      0|    }
  879|      0|    else
  880|      0|      break;
  881|      0|  }
  882|      0|  {
  883|      0|    char buffer[STRERROR_LEN];
  884|      0|    data->state.os_errno = sockerr = SOCKERRNO;
  ------------------
  |  | 1089|      0|#define SOCKERRNO         errno
  ------------------
  885|      0|    failf(data, "bind failed with errno %d: %s",
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  886|      0|          sockerr, curlx_strerror(sockerr, buffer, sizeof(buffer)));
  887|      0|  }
  888|       |
  889|      0|  return CURLE_INTERFACE_FAILED;
  890|      0|}
cf-socket.c:cf_socket_shutdown:
 1050|  2.03k|{
 1051|  2.03k|  if(cf->connected) {
  ------------------
  |  Branch (1051:6): [True: 2.03k, False: 0]
  ------------------
 1052|  2.03k|    struct cf_socket_ctx *ctx = cf->ctx;
 1053|       |
 1054|  2.03k|    CURL_TRC_CF(data, cf, "cf_socket_shutdown, fd=%" FMT_SOCKET_T, ctx->sock);
  ------------------
  |  |  153|  2.03k|  do {                                          \
  |  |  154|  2.03k|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|  2.03k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 2.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|  2.03k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|  2.03k|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
 1055|       |    /* On TCP, and when the socket looks well and non-blocking mode
 1056|       |     * can be enabled, receive dangling bytes before close to avoid
 1057|       |     * entering RST states unnecessarily. */
 1058|  2.03k|    if(ctx->sock != CURL_SOCKET_BAD &&
  ------------------
  |  |  147|  4.07k|#define CURL_SOCKET_BAD (-1)
  ------------------
  |  Branch (1058:8): [True: 2.03k, False: 0]
  ------------------
 1059|  2.03k|       ctx->transport == TRNSPRT_TCP &&
  ------------------
  |  |  238|  4.07k|#define TRNSPRT_TCP  3
  ------------------
  |  Branch (1059:8): [True: 2.03k, False: 0]
  ------------------
 1060|  2.03k|       (curlx_nonblock(ctx->sock, TRUE) >= 0)) {
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  |  Branch (1060:8): [True: 2.03k, False: 0]
  ------------------
 1061|  2.03k|      unsigned char buf[1024];
 1062|  2.03k|      (void)sread(ctx->sock, buf, sizeof(buf));
  ------------------
  |  |  944|  2.03k|#define sread(x, y, z) (ssize_t)recv((RECV_TYPE_ARG1)(x), \
  |  |  945|  2.03k|                                     (RECV_TYPE_ARG2)(y), \
  |  |  946|  2.03k|                                     (RECV_TYPE_ARG3)(z), \
  |  |  947|  2.03k|                                     (RECV_TYPE_ARG4)(0))
  ------------------
 1063|  2.03k|    }
 1064|  2.03k|  }
 1065|       |  *done = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
 1066|  2.03k|  return CURLE_OK;
 1067|  2.03k|}
cf-socket.c:cf_socket_send:
 1567|    292|{
 1568|    292|  struct cf_socket_ctx *ctx = cf->ctx;
 1569|    292|  curl_socket_t fdsave;
 1570|    292|  ssize_t rv;
 1571|    292|  CURLcode result = CURLE_OK;
 1572|    292|  VERBOSE(size_t orig_len = len);
  ------------------
  |  | 1611|    292|#define VERBOSE(x) x
  ------------------
 1573|       |
 1574|    292|  (void)eos;
 1575|    292|  *pnwritten = 0;
 1576|    292|  fdsave = cf->conn->sock[cf->sockindex];
 1577|    292|  cf->conn->sock[cf->sockindex] = ctx->sock;
 1578|       |
 1579|    292|#ifdef DEBUGBUILD
 1580|       |  /* simulate network blocking/partial writes */
 1581|    292|  if(ctx->wblock_percent > 0) {
  ------------------
  |  Branch (1581:6): [True: 0, False: 292]
  ------------------
 1582|      0|    unsigned char c = 0;
 1583|      0|    Curl_rand_bytes(data, FALSE, &c, 1);
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 1584|      0|    if(c >= ((100 - ctx->wblock_percent) * 256 / 100)) {
  ------------------
  |  Branch (1584:8): [True: 0, False: 0]
  ------------------
 1585|      0|      CURL_TRC_CF(data, cf, "send(len=%zu) SIMULATE EWOULDBLOCK", orig_len);
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1586|      0|      cf->conn->sock[cf->sockindex] = fdsave;
 1587|      0|      return CURLE_AGAIN;
 1588|      0|    }
 1589|      0|  }
 1590|    292|  if(cf->cft != &Curl_cft_udp && ctx->wpartial_percent > 0 && len > 8) {
  ------------------
  |  Branch (1590:6): [True: 292, False: 0]
  |  Branch (1590:34): [True: 0, False: 292]
  |  Branch (1590:63): [True: 0, False: 0]
  ------------------
 1591|      0|    len = len * ctx->wpartial_percent / 100;
 1592|      0|    if(!len)
  ------------------
  |  Branch (1592:8): [True: 0, False: 0]
  ------------------
 1593|      0|      len = 1;
 1594|      0|    CURL_TRC_CF(data, cf, "send(len=%zu) SIMULATE partial write of %zu bytes",
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1595|      0|                orig_len, len);
 1596|      0|  }
 1597|    292|#endif
 1598|       |
 1599|       |#if defined(MSG_FASTOPEN) && !defined(TCP_FASTOPEN_CONNECT) /* Linux */
 1600|       |  if(cf->conn->bits.tcp_fastopen) {
 1601|       |    rv = sendto(ctx->sock, buf, len, MSG_FASTOPEN,
 1602|       |                &ctx->addr.curl_sa_addr, ctx->addr.addrlen);
 1603|       |    cf->conn->bits.tcp_fastopen = FALSE;
 1604|       |  }
 1605|       |  else
 1606|       |#endif
 1607|    292|    rv = swrite(ctx->sock, buf, len);
  ------------------
  |  |  966|    292|#define swrite(x, y, z) (ssize_t)send((SEND_TYPE_ARG1)(x), \
  |  |  967|    292|                                      (const SEND_TYPE_ARG2)(y), \
  |  |  968|    292|                                      (SEND_TYPE_ARG3)(z), \
  |  |  969|    292|                                      (SEND_TYPE_ARG4)(SEND_4TH_ARG))
  |  |  ------------------
  |  |  |  |  909|    292|#define SEND_4TH_ARG MSG_NOSIGNAL
  |  |  ------------------
  ------------------
 1608|       |
 1609|    292|  if(!curlx_sztouz(rv, pnwritten)) {
  ------------------
  |  Branch (1609:6): [True: 0, False: 292]
  ------------------
 1610|      0|    int sockerr = SOCKERRNO;
  ------------------
  |  | 1089|      0|#define SOCKERRNO         errno
  ------------------
 1611|      0|    if(SOCK_EAGAIN(sockerr)
  ------------------
  |  | 1140|      0|#define SOCK_EAGAIN(e) ((e) == SOCKEWOULDBLOCK)
  |  |  ------------------
  |  |  |  | 1131|      0|#define SOCKEWOULDBLOCK   EWOULDBLOCK
  |  |  ------------------
  |  |  |  Branch (1140:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1612|      0|#ifndef USE_WINSOCK
 1613|      0|       || (sockerr == SOCKEINTR) || (sockerr == SOCKEINPROGRESS)
  ------------------
  |  | 1123|      0|#define SOCKEINTR         EINTR
  ------------------
                     || (sockerr == SOCKEINTR) || (sockerr == SOCKEINPROGRESS)
  ------------------
  |  | 1122|      0|#define SOCKEINPROGRESS   EINPROGRESS
  ------------------
  |  Branch (1613:11): [True: 0, False: 0]
  |  Branch (1613:37): [True: 0, False: 0]
  ------------------
 1614|      0|#endif
 1615|      0|      ) {
 1616|      0|      result = CURLE_AGAIN;  /* EWOULDBLOCK */
 1617|      0|    }
 1618|      0|    else {
 1619|      0|      char buffer[STRERROR_LEN];
 1620|      0|      failf(data, "Send failure: %s",
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
 1621|      0|            curlx_strerror(sockerr, buffer, sizeof(buffer)));
 1622|      0|      data->state.os_errno = sockerr;
 1623|      0|      result = CURLE_SEND_ERROR;
 1624|      0|    }
 1625|      0|  }
 1626|       |
 1627|       |#ifdef USE_WINSOCK
 1628|       |  if(!result)
 1629|       |    win_update_sndbuf_size(data, ctx);
 1630|       |#endif
 1631|       |
 1632|    292|  CURL_TRC_CF(data, cf, "send(len=%zu) -> %d, %zu",
  ------------------
  |  |  153|    292|  do {                                          \
  |  |  154|    292|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|    292|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|    584|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 292, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 292, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|    584|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 292, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|    292|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|    292|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|    292|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 292, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 292]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|    292|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|    292|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 292]
  |  |  ------------------
  ------------------
 1633|    292|              orig_len, (int)result, *pnwritten);
 1634|    292|  cf->conn->sock[cf->sockindex] = fdsave;
 1635|    292|  return result;
 1636|    292|}
cf-socket.c:cf_socket_recv:
 1640|  2.86k|{
 1641|  2.86k|  struct cf_socket_ctx *ctx = cf->ctx;
 1642|  2.86k|  CURLcode result = CURLE_OK;
 1643|  2.86k|  ssize_t rv;
 1644|       |
 1645|  2.86k|  *pnread = 0;
 1646|  2.86k|#ifdef DEBUGBUILD
 1647|       |  /* simulate network blocking/partial reads */
 1648|  2.86k|  if(cf->cft != &Curl_cft_udp && ctx->rblock_percent > 0) {
  ------------------
  |  Branch (1648:6): [True: 2.86k, False: 0]
  |  Branch (1648:34): [True: 0, False: 2.86k]
  ------------------
 1649|      0|    unsigned char c = 0;
 1650|      0|    Curl_rand(data, &c, 1);
  ------------------
  |  |   33|      0|#define Curl_rand(a, b, c) Curl_rand_bytes(a, TRUE, b, c)
  |  |  ------------------
  |  |  |  | 1045|      0|#define TRUE true
  |  |  ------------------
  ------------------
 1651|      0|    if(c >= ((100 - ctx->rblock_percent) * 256 / 100)) {
  ------------------
  |  Branch (1651:8): [True: 0, False: 0]
  ------------------
 1652|      0|      CURL_TRC_CF(data, cf, "recv(len=%zu) SIMULATE EWOULDBLOCK", len);
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1653|      0|      return CURLE_AGAIN;
 1654|      0|    }
 1655|      0|  }
 1656|  2.86k|  if(cf->cft != &Curl_cft_udp && ctx->recv_max && ctx->recv_max < len) {
  ------------------
  |  Branch (1656:6): [True: 2.86k, False: 0]
  |  Branch (1656:34): [True: 0, False: 2.86k]
  |  Branch (1656:51): [True: 0, False: 0]
  ------------------
 1657|      0|    CURL_TRC_CF(data, cf, "recv(len=%zu) SIMULATE max read of %zu bytes",
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1658|      0|                len, ctx->recv_max);
 1659|      0|    len = ctx->recv_max;
 1660|      0|  }
 1661|  2.86k|#endif
 1662|       |
 1663|  2.86k|  rv = sread(ctx->sock, buf, len);
  ------------------
  |  |  944|  2.86k|#define sread(x, y, z) (ssize_t)recv((RECV_TYPE_ARG1)(x), \
  |  |  945|  2.86k|                                     (RECV_TYPE_ARG2)(y), \
  |  |  946|  2.86k|                                     (RECV_TYPE_ARG3)(z), \
  |  |  947|  2.86k|                                     (RECV_TYPE_ARG4)(0))
  ------------------
 1664|       |
 1665|  2.86k|  if(!curlx_sztouz(rv, pnread)) {
  ------------------
  |  Branch (1665:6): [True: 0, False: 2.86k]
  ------------------
 1666|      0|    int sockerr = SOCKERRNO;
  ------------------
  |  | 1089|      0|#define SOCKERRNO         errno
  ------------------
 1667|      0|    if(SOCK_EAGAIN(sockerr)
  ------------------
  |  | 1140|      0|#define SOCK_EAGAIN(e) ((e) == SOCKEWOULDBLOCK)
  |  |  ------------------
  |  |  |  | 1131|      0|#define SOCKEWOULDBLOCK   EWOULDBLOCK
  |  |  ------------------
  |  |  |  Branch (1140:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1668|      0|#ifndef USE_WINSOCK
 1669|      0|       || (sockerr == SOCKEINTR)
  ------------------
  |  | 1123|      0|#define SOCKEINTR         EINTR
  ------------------
  |  Branch (1669:11): [True: 0, False: 0]
  ------------------
 1670|      0|#endif
 1671|      0|      ) {
 1672|      0|      result = CURLE_AGAIN;  /* EWOULDBLOCK */
 1673|      0|    }
 1674|      0|    else {
 1675|      0|      char buffer[STRERROR_LEN];
 1676|      0|      failf(data, "Recv failure: %s",
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
 1677|      0|            curlx_strerror(sockerr, buffer, sizeof(buffer)));
 1678|      0|      data->state.os_errno = sockerr;
 1679|      0|      result = CURLE_RECV_ERROR;
 1680|      0|    }
 1681|      0|  }
 1682|       |
 1683|  2.86k|  CURL_TRC_CF(data, cf, "recv(len=%zu) -> %d, %zu", len, (int)result, *pnread);
  ------------------
  |  |  153|  2.86k|  do {                                          \
  |  |  154|  2.86k|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|  2.86k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  5.72k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 2.86k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 2.86k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  5.72k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 2.86k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  2.86k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|  2.86k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  2.86k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 2.86k, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 2.86k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|  2.86k|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|  2.86k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 2.86k]
  |  |  ------------------
  ------------------
 1684|  2.86k|  if(!result && !ctx->got_first_byte) {
  ------------------
  |  Branch (1684:6): [True: 2.86k, False: 0]
  |  Branch (1684:17): [True: 1.92k, False: 938]
  ------------------
 1685|  1.92k|    ctx->first_byte_at = *Curl_pgrs_now(data);
 1686|       |    ctx->got_first_byte = TRUE;
  ------------------
  |  | 1045|  1.92k|#define TRUE true
  ------------------
 1687|  1.92k|  }
 1688|  2.86k|  return result;
 1689|  2.86k|}
cf-socket.c:cf_socket_cntrl:
 1718|  6.10k|{
 1719|  6.10k|  struct cf_socket_ctx *ctx = cf->ctx;
 1720|       |
 1721|  6.10k|  (void)arg1;
 1722|  6.10k|  (void)arg2;
 1723|  6.10k|  switch(event) {
  ------------------
  |  Branch (1723:10): [True: 4.07k, False: 2.03k]
  ------------------
 1724|  2.03k|  case CF_CTRL_CONN_INFO_UPDATE:
  ------------------
  |  |  121|  2.03k|#define CF_CTRL_CONN_INFO_UPDATE (256 + 0) /* 0          NULL     ignored */
  ------------------
  |  Branch (1724:3): [True: 2.03k, False: 4.07k]
  ------------------
 1725|  2.03k|    cf_socket_active(cf, data);
 1726|  2.03k|    cf_socket_update_data(cf, data);
 1727|  2.03k|    break;
 1728|      0|  case CF_CTRL_DATA_SETUP:
  ------------------
  |  |  115|      0|#define CF_CTRL_DATA_SETUP              4  /* 0          NULL     first fail */
  ------------------
  |  Branch (1728:3): [True: 0, False: 6.10k]
  ------------------
 1729|      0|    cf_socket_update_data(cf, data);
 1730|      0|    break;
 1731|      0|  case CF_CTRL_FORGET_SOCKET:
  ------------------
  |  |  122|      0|#define CF_CTRL_FORGET_SOCKET    (256 + 1) /* 0          NULL     ignored */
  ------------------
  |  Branch (1731:3): [True: 0, False: 6.10k]
  ------------------
 1732|      0|    ctx->sock = CURL_SOCKET_BAD;
  ------------------
  |  |  147|      0|#define CURL_SOCKET_BAD (-1)
  ------------------
 1733|      0|    break;
 1734|  2.03k|  case CF_CTRL_REPORT_STATS:
  ------------------
  |  |  124|  2.03k|#define CF_CTRL_REPORT_STATS     (256 + 3) /* 0          NULL     ignored */
  ------------------
  |  Branch (1734:3): [True: 2.03k, False: 4.07k]
  ------------------
 1735|  2.03k|    if(cf->connected && !ctx->stats_reported) {
  ------------------
  |  Branch (1735:8): [True: 2.03k, False: 0]
  |  Branch (1735:25): [True: 2.03k, False: 0]
  ------------------
 1736|  2.03k|      struct curltime *ts = NULL;
 1737|  2.03k|      switch(ctx->transport) {
 1738|      0|      case TRNSPRT_UDP:
  ------------------
  |  |  239|      0|#define TRNSPRT_UDP  4
  ------------------
  |  Branch (1738:7): [True: 0, False: 2.03k]
  ------------------
 1739|      0|      case TRNSPRT_QUIC:
  ------------------
  |  |  240|      0|#define TRNSPRT_QUIC 5
  ------------------
  |  Branch (1739:7): [True: 0, False: 2.03k]
  ------------------
 1740|       |        /* Since UDP connected sockets work different from TCP, we use the
 1741|       |         * time of the first byte from the peer as the "connect" time. */
 1742|      0|        if(ctx->got_first_byte)
  ------------------
  |  Branch (1742:12): [True: 0, False: 0]
  ------------------
 1743|      0|          ts = &ctx->first_byte_at;
 1744|      0|        break;
 1745|  2.03k|      default:
  ------------------
  |  Branch (1745:7): [True: 2.03k, False: 0]
  ------------------
 1746|  2.03k|        ts = &ctx->connected_at;
 1747|  2.03k|        break;
 1748|  2.03k|      }
 1749|  2.03k|      if(ts) {
  ------------------
  |  Branch (1749:10): [True: 2.03k, False: 0]
  ------------------
 1750|  2.03k|        Curl_pgrsTimeWas(data, TIMER_CONNECT, *ts);
 1751|  2.03k|        ctx->stats_reported = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
 1752|  2.03k|      }
 1753|  2.03k|    }
 1754|  6.10k|  }
 1755|  6.10k|  return CURLE_OK;
 1756|  6.10k|}
cf-socket.c:cf_socket_active:
 1702|  2.03k|{
 1703|  2.03k|  struct cf_socket_ctx *ctx = cf->ctx;
 1704|       |
 1705|       |  /* use this socket from now on */
 1706|  2.03k|  cf->conn->sock[cf->sockindex] = ctx->sock;
 1707|  2.03k|  set_local_ip(cf, data);
 1708|  2.03k|#ifdef USE_IPV6
 1709|  2.03k|  if(cf->sockindex == FIRSTSOCKET)
  ------------------
  |  |  234|  2.03k|#define FIRSTSOCKET     0
  ------------------
  |  Branch (1709:6): [True: 2.03k, False: 0]
  ------------------
 1710|  2.03k|    cf->conn->bits.ipv6 = (ctx->addr.family == AF_INET6);
 1711|  2.03k|#endif
 1712|       |  ctx->active = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
 1713|  2.03k|}
cf-socket.c:cf_socket_update_data:
 1693|  2.03k|{
 1694|       |  /* Update the IP info held in the transfer, if we have that. */
 1695|  2.03k|  if(cf->connected && (cf->sockindex == FIRSTSOCKET)) {
  ------------------
  |  |  234|  2.03k|#define FIRSTSOCKET     0
  ------------------
  |  Branch (1695:6): [True: 2.03k, False: 0]
  |  Branch (1695:23): [True: 2.03k, False: 0]
  ------------------
 1696|  2.03k|    struct cf_socket_ctx *ctx = cf->ctx;
 1697|  2.03k|    data->info.primary = ctx->ip;
 1698|  2.03k|  }
 1699|  2.03k|}
cf-socket.c:cf_socket_query:
 1798|  4.07k|{
 1799|  4.07k|  struct cf_socket_ctx *ctx = cf->ctx;
 1800|       |
 1801|  4.07k|  switch(query) {
 1802|      0|  case CF_QUERY_SOCKET:
  ------------------
  |  |  169|      0|#define CF_QUERY_SOCKET             3  /* -          curl_socket_t */
  ------------------
  |  Branch (1802:3): [True: 0, False: 4.07k]
  ------------------
 1803|      0|    DEBUGASSERT(pres2);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1803:5): [True: 0, False: 0]
  |  Branch (1803:5): [True: 0, False: 0]
  ------------------
 1804|      0|    *((curl_socket_t *)pres2) = ctx->sock;
 1805|      0|    return CURLE_OK;
 1806|      0|  case CF_QUERY_TRANSPORT:
  ------------------
  |  |  181|      0|#define CF_QUERY_TRANSPORT         14  /* TRNSPRT_*  - * */
  ------------------
  |  Branch (1806:3): [True: 0, False: 4.07k]
  ------------------
 1807|      0|    DEBUGASSERT(pres1);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1807:5): [True: 0, False: 0]
  |  Branch (1807:5): [True: 0, False: 0]
  ------------------
 1808|      0|    *pres1 = ctx->transport;
 1809|      0|    return CURLE_OK;
 1810|      0|  case CF_QUERY_REMOTE_ADDR:
  ------------------
  |  |  177|      0|#define CF_QUERY_REMOTE_ADDR       10  /* -          `Curl_sockaddr_ex *` */
  ------------------
  |  Branch (1810:3): [True: 0, False: 4.07k]
  ------------------
 1811|      0|    DEBUGASSERT(pres2);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1811:5): [True: 0, False: 0]
  |  Branch (1811:5): [True: 0, False: 0]
  ------------------
 1812|      0|    *((const struct Curl_sockaddr_ex **)pres2) = cf->connected ?
  ------------------
  |  Branch (1812:50): [True: 0, False: 0]
  ------------------
 1813|      0|                                                 &ctx->addr : NULL;
 1814|      0|    return CURLE_OK;
 1815|      0|  case CF_QUERY_CONNECT_REPLY_MS:
  ------------------
  |  |  168|      0|#define CF_QUERY_CONNECT_REPLY_MS   2  /* number     -        */
  ------------------
  |  Branch (1815:3): [True: 0, False: 4.07k]
  ------------------
 1816|      0|    if(ctx->got_first_byte) {
  ------------------
  |  Branch (1816:8): [True: 0, False: 0]
  ------------------
 1817|      0|      timediff_t ms = curlx_ptimediff_ms(&ctx->first_byte_at,
 1818|      0|                                         &ctx->started_at);
 1819|      0|      *pres1 = (ms < INT_MAX) ? (int)ms : INT_MAX;
  ------------------
  |  Branch (1819:16): [True: 0, False: 0]
  ------------------
 1820|      0|    }
 1821|      0|    else
 1822|      0|      *pres1 = -1;
 1823|      0|    return CURLE_OK;
 1824|  2.03k|  case CF_QUERY_IP_INFO:
  ------------------
  |  |  173|  2.03k|#define CF_QUERY_IP_INFO            8  /* TRUE/FALSE struct ip_quadruple */
  ------------------
  |  Branch (1824:3): [True: 2.03k, False: 2.03k]
  ------------------
 1825|  2.03k|#ifdef USE_IPV6
 1826|  2.03k|    *pres1 = (ctx->addr.family == AF_INET6);
 1827|       |#else
 1828|       |    *pres1 = FALSE;
 1829|       |#endif
 1830|  2.03k|    *(struct ip_quadruple *)pres2 = ctx->ip;
 1831|  2.03k|    return CURLE_OK;
 1832|      0|  case CF_QUERY_REALLY_CONNECTED:
  ------------------
  |  |  183|      0|#define CF_QUERY_REALLY_CONNECTED  16  /* TRUE/FALSE - */
  ------------------
  |  Branch (1832:3): [True: 0, False: 4.07k]
  ------------------
 1833|      0|    if(cf->cft != &Curl_cft_udp)
  ------------------
  |  Branch (1833:8): [True: 0, False: 0]
  ------------------
 1834|      0|      *pres1 = cf->connected;
 1835|      0|    else
 1836|      0|      *pres1 = ctx->got_first_byte;
 1837|      0|    return CURLE_OK;
 1838|  2.03k|  default:
  ------------------
  |  Branch (1838:3): [True: 2.03k, False: 2.03k]
  ------------------
 1839|  2.03k|    break;
 1840|  4.07k|  }
 1841|  2.03k|  return cf->next ?
  ------------------
  |  Branch (1841:10): [True: 0, False: 2.03k]
  ------------------
 1842|      0|    cf->next->cft->query(cf->next, data, query, pres1, pres2) :
 1843|  2.03k|    CURLE_UNKNOWN_OPTION;
 1844|  4.07k|}
cf-socket.c:cf_socket_ctx_init:
 1000|  2.03k|{
 1001|  2.03k|  memset(ctx, 0, sizeof(*ctx));
 1002|  2.03k|  Curl_peer_link(&ctx->peer, peer);
 1003|  2.03k|  ctx->sock = CURL_SOCKET_BAD;
  ------------------
  |  |  147|  2.03k|#define CURL_SOCKET_BAD (-1)
  ------------------
 1004|  2.03k|  ctx->transport = transport;
 1005|  2.03k|  ctx->addr = *addr;
 1006|       |
 1007|  2.03k|#ifdef DEBUGBUILD
 1008|  2.03k|  {
 1009|  2.03k|    const char *p = getenv("CURL_DBG_SOCK_WBLOCK");
 1010|  2.03k|    if(p) {
  ------------------
  |  Branch (1010:8): [True: 0, False: 2.03k]
  ------------------
 1011|      0|      curl_off_t l;
 1012|      0|      if(!curlx_str_number(&p, &l, 100))
  ------------------
  |  Branch (1012:10): [True: 0, False: 0]
  ------------------
 1013|      0|        ctx->wblock_percent = (int)l;
 1014|      0|    }
 1015|  2.03k|    p = getenv("CURL_DBG_SOCK_WPARTIAL");
 1016|  2.03k|    if(p) {
  ------------------
  |  Branch (1016:8): [True: 0, False: 2.03k]
  ------------------
 1017|      0|      curl_off_t l;
 1018|      0|      if(!curlx_str_number(&p, &l, 100))
  ------------------
  |  Branch (1018:10): [True: 0, False: 0]
  ------------------
 1019|      0|        ctx->wpartial_percent = (int)l;
 1020|      0|    }
 1021|  2.03k|    p = getenv("CURL_DBG_SOCK_RBLOCK");
 1022|  2.03k|    if(p) {
  ------------------
  |  Branch (1022:8): [True: 0, False: 2.03k]
  ------------------
 1023|      0|      curl_off_t l;
 1024|      0|      if(!curlx_str_number(&p, &l, 100))
  ------------------
  |  Branch (1024:10): [True: 0, False: 0]
  ------------------
 1025|      0|        ctx->rblock_percent = (int)l;
 1026|      0|    }
 1027|  2.03k|    p = getenv("CURL_DBG_SOCK_RMAX");
 1028|  2.03k|    if(p) {
  ------------------
  |  Branch (1028:8): [True: 0, False: 2.03k]
  ------------------
 1029|      0|      curl_off_t l;
 1030|      0|      if(!curlx_str_number(&p, &l, CURL_OFF_T_MAX))
  ------------------
  |  |  588|      0|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  ------------------
  |  Branch (1030:10): [True: 0, False: 0]
  ------------------
 1031|      0|        ctx->recv_max = (size_t)l;
 1032|      0|    }
 1033|  2.03k|  }
 1034|  2.03k|#endif
 1035|       |
 1036|  2.03k|  return CURLE_OK;
 1037|  2.03k|}
cf-socket.c:cf_socket_ctx_free:
 1040|  2.03k|{
 1041|  2.03k|  if(ctx) {
  ------------------
  |  Branch (1041:6): [True: 2.03k, False: 0]
  ------------------
 1042|  2.03k|    Curl_peer_unlink(&ctx->peer);
 1043|  2.03k|    curlx_free(ctx);
  ------------------
  |  | 1476|  2.03k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1044|  2.03k|  }
 1045|  2.03k|}
cf-socket.c:set_local_ip:
 1087|  4.07k|{
 1088|  4.07k|  struct cf_socket_ctx *ctx = cf->ctx;
 1089|  4.07k|  ctx->ip.local_ip[0] = 0;
 1090|  4.07k|  ctx->ip.local_port = 0;
 1091|       |
 1092|  4.07k|#ifdef HAVE_GETSOCKNAME
 1093|  4.07k|  if((ctx->sock != CURL_SOCKET_BAD) &&
  ------------------
  |  |  147|  4.07k|#define CURL_SOCKET_BAD (-1)
  ------------------
  |  Branch (1093:6): [True: 4.07k, False: 0]
  ------------------
 1094|  4.07k|     !(data->conn->scheme->protocol & CURLPROTO_TFTP)) {
  ------------------
  |  | 1099|  4.07k|#define CURLPROTO_TFTP    (1L << 11)
  ------------------
  |  Branch (1094:6): [True: 4.07k, False: 0]
  ------------------
 1095|       |    /* TFTP does not connect, so it cannot get the IP like this */
 1096|  4.07k|    struct Curl_sockaddr_storage ssloc;
 1097|  4.07k|    curl_socklen_t slen = sizeof(struct Curl_sockaddr_storage);
 1098|       |
 1099|  4.07k|    memset(&ssloc, 0, sizeof(ssloc));
 1100|  4.07k|    if(getsockname(ctx->sock, (struct sockaddr *)&ssloc, &slen)) {
  ------------------
  |  Branch (1100:8): [True: 0, False: 4.07k]
  ------------------
 1101|      0|      VERBOSE(char buffer[STRERROR_LEN]);
  ------------------
  |  | 1611|      0|#define VERBOSE(x) x
  ------------------
 1102|      0|      VERBOSE(int sockerr = SOCKERRNO);
  ------------------
  |  | 1611|      0|#define VERBOSE(x) x
  ------------------
 1103|      0|      infof(data, "getsockname() failed with errno %d: %s",
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1104|      0|            sockerr, curlx_strerror(sockerr, buffer, sizeof(buffer)));
 1105|      0|    }
 1106|  4.07k|    else {
 1107|  4.07k|      CURLcode result = sockaddr2string((struct sockaddr *)&ssloc, slen,
 1108|  4.07k|                                        ctx->ip.local_ip, &ctx->ip.local_port);
 1109|  4.07k|      if(result)
  ------------------
  |  Branch (1109:10): [True: 0, False: 4.07k]
  ------------------
 1110|      0|        infof(data, "ssloc inet_ntop() failed with %d", (int)result);
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1111|  4.07k|    }
 1112|  4.07k|  }
 1113|       |#else
 1114|       |  (void)data;
 1115|       |#endif
 1116|  4.07k|}

Curl_cf_def_query:
  123|  8.14k|{
  124|  8.14k|  return cf->next ?
  ------------------
  |  Branch (124:10): [True: 6.10k, False: 2.03k]
  ------------------
  125|  6.10k|    cf->next->cft->query(cf->next, data, query, pres1, pres2) :
  126|  8.14k|    CURLE_UNKNOWN_OPTION;
  127|  8.14k|}
Curl_conn_trc_filters:
  132|  8.14k|{
  133|  8.14k|  if(CURL_TRC_M_is_verbose(data) && data->conn) {
  ------------------
  |  |  135|  8.14k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  ------------------
  |  |  |  |  329|  16.2k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  16.2k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 8.14k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 8.14k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  16.2k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 8.14k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  8.14k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  330|  16.2k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  8.14k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (330:4): [True: 0, False: 8.14k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (133:37): [True: 0, False: 0]
  ------------------
  134|      0|    struct Curl_cfilter *cf = data->conn->cfilter[sockindex];
  135|       |
  136|      0|    if(cf) {
  ------------------
  |  Branch (136:8): [True: 0, False: 0]
  ------------------
  137|      0|      char msg[256], *buf;
  138|      0|      int blen, n;
  139|       |
  140|      0|      buf = msg;
  141|      0|      blen = sizeof(msg) - 1;
  142|      0|      n = curl_msnprintf(buf, blen, "%s [%d]", info, sockindex);
  143|      0|      buf += n;
  144|      0|      blen -= n;
  145|      0|      for(; cf && blen; cf = cf->next) {
  ------------------
  |  Branch (145:13): [True: 0, False: 0]
  |  Branch (145:19): [True: 0, False: 0]
  ------------------
  146|      0|        n = curl_msnprintf(buf, blen, "[%s%s]",
  147|      0|                           cf->connected ? "" : "!", cf->cft->name);
  ------------------
  |  Branch (147:28): [True: 0, False: 0]
  ------------------
  148|      0|        buf += n;
  149|      0|        blen -= n;
  150|      0|      }
  151|      0|      CURL_TRC_M(data, "%s%s", msg, blen ? "" : "...");
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  ------------------
  |  |  |  Branch (150:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  152|      0|    }
  153|      0|    else
  154|      0|      CURL_TRC_M(data, "%s [%d][-]", info, sockindex);
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  155|      0|  }
  156|  8.14k|}
Curl_conn_cf_discard_chain:
  161|  8.14k|{
  162|  8.14k|  struct Curl_cfilter *cfn, *cf = *pcf;
  163|       |
  164|  8.14k|  if(cf) {
  ------------------
  |  Branch (164:6): [True: 2.03k, False: 6.10k]
  ------------------
  165|  2.03k|    *pcf = NULL;
  166|  4.07k|    while(cf) {
  ------------------
  |  Branch (166:11): [True: 2.03k, False: 2.03k]
  ------------------
  167|  2.03k|      cfn = cf->next;
  168|       |      /* prevent destroying filter to mess with its sub-chain, since
  169|       |       * we have the reference now and will call destroy on it.
  170|       |       */
  171|  2.03k|      cf->next = NULL;
  172|  2.03k|      cf->cft->destroy(cf, data);
  173|  2.03k|      curlx_free(cf);
  ------------------
  |  | 1476|  2.03k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  174|  2.03k|      cf = cfn;
  175|  2.03k|    }
  176|  2.03k|  }
  177|  8.14k|}
Curl_conn_cf_discard_all:
  181|  8.14k|{
  182|  8.14k|  struct curltime *pt = &conn->shutdown.start[sockindex];
  183|  8.14k|  memset(pt, 0, sizeof(*pt));
  184|  8.14k|  Curl_conn_cf_discard_chain(&conn->cfilter[sockindex], data);
  185|  8.14k|}
Curl_conn_shutdown:
  189|  2.03k|{
  190|  2.03k|  struct Curl_cfilter *cf;
  191|  2.03k|  CURLcode result = CURLE_OK;
  192|  2.03k|  timediff_t timeout_ms;
  193|       |
  194|  2.03k|  DEBUGASSERT(data->conn);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (194:3): [True: 0, False: 2.03k]
  |  Branch (194:3): [True: 2.03k, False: 0]
  ------------------
  195|       |
  196|  2.03k|  if(!CONN_SOCK_IDX_VALID(sockindex))
  ------------------
  |  |  311|  2.03k|#define CONN_SOCK_IDX_VALID(i)    (((i) >= 0) && ((i) < 2))
  |  |  ------------------
  |  |  |  Branch (311:36): [True: 2.03k, False: 0]
  |  |  |  Branch (311:50): [True: 2.03k, False: 0]
  |  |  ------------------
  ------------------
  197|      0|    return CURLE_BAD_FUNCTION_ARGUMENT;
  198|       |
  199|       |  /* Get the first connected filter that is not shut down already. */
  200|  2.03k|  cf = data->conn->cfilter[sockindex];
  201|  2.03k|  while(cf && (!cf->connected || cf->shutdown))
  ------------------
  |  Branch (201:9): [True: 2.03k, False: 0]
  |  Branch (201:16): [True: 0, False: 2.03k]
  |  Branch (201:34): [True: 0, False: 2.03k]
  ------------------
  202|      0|    cf = cf->next;
  203|       |
  204|  2.03k|  if(!cf) {
  ------------------
  |  Branch (204:6): [True: 0, False: 2.03k]
  ------------------
  205|      0|    *done = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  206|      0|    return CURLE_OK;
  207|      0|  }
  208|       |
  209|  2.03k|  *done = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  210|  2.03k|  if(!Curl_shutdown_started(data->conn, sockindex)) {
  ------------------
  |  Branch (210:6): [True: 0, False: 2.03k]
  ------------------
  211|      0|    Curl_shutdown_start(data, sockindex, 0);
  212|      0|  }
  213|  2.03k|  else {
  214|  2.03k|    timeout_ms = Curl_shutdown_timeleft(data, data->conn, sockindex);
  215|  2.03k|    if(timeout_ms < 0) {
  ------------------
  |  Branch (215:8): [True: 0, False: 2.03k]
  ------------------
  216|       |      /* info message, since this might be regarded as acceptable */
  217|      0|      infof(data, "shutdown timeout");
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  218|      0|      return CURLE_OPERATION_TIMEDOUT;
  219|      0|    }
  220|  2.03k|  }
  221|       |
  222|  4.07k|  while(cf) {
  ------------------
  |  Branch (222:9): [True: 2.03k, False: 2.03k]
  ------------------
  223|  2.03k|    if(!cf->shutdown) {
  ------------------
  |  Branch (223:8): [True: 2.03k, False: 0]
  ------------------
  224|  2.03k|      bool cfdone = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  225|  2.03k|      result = cf->cft->do_shutdown(cf, data, &cfdone);
  226|  2.03k|      if(result) {
  ------------------
  |  Branch (226:10): [True: 0, False: 2.03k]
  ------------------
  227|      0|        CURL_TRC_CF(data, cf, "shut down failed with %d", (int)result);
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  228|      0|        return result;
  229|      0|      }
  230|  2.03k|      else if(!cfdone) {
  ------------------
  |  Branch (230:15): [True: 0, False: 2.03k]
  ------------------
  231|      0|        CURL_TRC_CF(data, cf, "shut down not done yet");
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  232|      0|        return CURLE_OK;
  233|      0|      }
  234|  2.03k|      CURL_TRC_CF(data, cf, "shut down successfully");
  ------------------
  |  |  153|  2.03k|  do {                                          \
  |  |  154|  2.03k|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|  2.03k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 2.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|  2.03k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|  2.03k|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  235|  2.03k|      cf->shutdown = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  236|  2.03k|    }
  237|  2.03k|    cf = cf->next;
  238|  2.03k|  }
  239|  2.03k|  *done = (!result);
  240|  2.03k|  return result;
  241|  2.03k|}
Curl_cf_recv:
  245|  2.86k|{
  246|  2.86k|  struct Curl_cfilter *cf;
  247|       |
  248|  2.86k|  DEBUGASSERT(data);
  ------------------
  |  | 1075|  2.86k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (248:3): [True: 0, False: 2.86k]
  |  Branch (248:3): [True: 2.86k, False: 0]
  ------------------
  249|  2.86k|  DEBUGASSERT(data->conn);
  ------------------
  |  | 1075|  2.86k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (249:3): [True: 0, False: 2.86k]
  |  Branch (249:3): [True: 2.86k, False: 0]
  ------------------
  250|  2.86k|  cf = data->conn->cfilter[sockindex];
  251|  2.86k|  while(cf && !cf->connected)
  ------------------
  |  Branch (251:9): [True: 2.86k, False: 0]
  |  Branch (251:15): [True: 0, False: 2.86k]
  ------------------
  252|      0|    cf = cf->next;
  253|  2.86k|  if(cf)
  ------------------
  |  Branch (253:6): [True: 2.86k, False: 0]
  ------------------
  254|  2.86k|    return cf->cft->do_recv(cf, data, buf, len, pnread);
  255|      0|  failf(data, "recv: no filter connected");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  256|      0|  DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (256:3): [Folded, False: 0]
  |  Branch (256:3): [Folded, False: 0]
  ------------------
  257|      0|  *pnread = 0;
  258|      0|  return CURLE_FAILED_INIT;
  259|      0|}
Curl_cf_send:
  264|    292|{
  265|    292|  struct Curl_cfilter *cf;
  266|       |
  267|    292|  DEBUGASSERT(data);
  ------------------
  |  | 1075|    292|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (267:3): [True: 0, False: 292]
  |  Branch (267:3): [True: 292, False: 0]
  ------------------
  268|    292|  DEBUGASSERT(data->conn);
  ------------------
  |  | 1075|    292|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (268:3): [True: 0, False: 292]
  |  Branch (268:3): [True: 292, False: 0]
  ------------------
  269|    292|  cf = data->conn->cfilter[sockindex];
  270|    292|  while(cf && !cf->connected)
  ------------------
  |  Branch (270:9): [True: 292, False: 0]
  |  Branch (270:15): [True: 0, False: 292]
  ------------------
  271|      0|    cf = cf->next;
  272|    292|  if(cf) {
  ------------------
  |  Branch (272:6): [True: 292, False: 0]
  ------------------
  273|    292|    return cf->cft->do_send(cf, data, buf, len, eos, pnwritten);
  274|    292|  }
  275|      0|  failf(data, "send: no filter connected");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  276|      0|  DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (276:3): [Folded, False: 0]
  |  Branch (276:3): [Folded, False: 0]
  ------------------
  277|      0|  *pnwritten = 0;
  278|      0|  return CURLE_FAILED_INIT;
  279|      0|}
Curl_cf_create:
  343|  8.14k|{
  344|  8.14k|  struct Curl_cfilter *cf;
  345|  8.14k|  CURLcode result = CURLE_OUT_OF_MEMORY;
  346|       |
  347|  8.14k|  DEBUGASSERT(cft);
  ------------------
  |  | 1075|  8.14k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (347:3): [True: 0, False: 8.14k]
  |  Branch (347:3): [True: 8.14k, False: 0]
  ------------------
  348|  8.14k|  cf = curlx_calloc(1, sizeof(*cf));
  ------------------
  |  | 1473|  8.14k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
  349|  8.14k|  if(!cf)
  ------------------
  |  Branch (349:6): [True: 0, False: 8.14k]
  ------------------
  350|      0|    goto out;
  351|       |
  352|  8.14k|  cf->cft = cft;
  353|  8.14k|  cf->ctx = ctx;
  354|  8.14k|  result = CURLE_OK;
  355|  8.14k|out:
  356|  8.14k|  *pcf = cf;
  357|  8.14k|  return result;
  358|  8.14k|}
Curl_conn_cf_add:
  364|  4.07k|{
  365|  4.07k|  DEBUGASSERT(conn);
  ------------------
  |  | 1075|  4.07k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (365:3): [True: 0, False: 4.07k]
  |  Branch (365:3): [True: 4.07k, False: 0]
  ------------------
  366|  4.07k|  DEBUGASSERT(!cf->conn);
  ------------------
  |  | 1075|  4.07k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (366:3): [True: 0, False: 4.07k]
  |  Branch (366:3): [True: 4.07k, False: 0]
  ------------------
  367|  4.07k|  DEBUGASSERT(!cf->next);
  ------------------
  |  | 1075|  4.07k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (367:3): [True: 0, False: 4.07k]
  |  Branch (367:3): [True: 4.07k, False: 0]
  ------------------
  368|       |
  369|  4.07k|  cf->next = conn->cfilter[sockindex];
  370|  4.07k|  cf->conn = conn;
  371|  4.07k|  cf->sockindex = sockindex;
  372|  4.07k|  conn->cfilter[sockindex] = cf;
  373|  4.07k|  CURL_TRC_CF(data, cf, "added");
  ------------------
  |  |  153|  4.07k|  do {                                          \
  |  |  154|  4.07k|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|  4.07k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  8.14k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 4.07k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 4.07k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  8.14k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 4.07k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  4.07k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|  4.07k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  4.07k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 4.07k, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 4.07k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|  4.07k|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  374|  4.07k|}
Curl_conn_cf_insert_after:
  378|  2.03k|{
  379|  2.03k|  struct Curl_cfilter *tail, **pnext;
  380|       |
  381|  2.03k|  DEBUGASSERT(cf_at);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (381:3): [True: 0, False: 2.03k]
  |  Branch (381:3): [True: 2.03k, False: 0]
  ------------------
  382|  2.03k|  DEBUGASSERT(cf_new);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (382:3): [True: 0, False: 2.03k]
  |  Branch (382:3): [True: 2.03k, False: 0]
  ------------------
  383|  2.03k|  DEBUGASSERT(!cf_new->conn);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (383:3): [True: 0, False: 2.03k]
  |  Branch (383:3): [True: 2.03k, False: 0]
  ------------------
  384|       |
  385|  2.03k|  tail = cf_at->next;
  386|  2.03k|  cf_at->next = cf_new;
  387|  2.03k|  do {
  388|  2.03k|    cf_new->conn = cf_at->conn;
  389|  2.03k|    cf_new->sockindex = cf_at->sockindex;
  390|  2.03k|    pnext = &cf_new->next;
  391|  2.03k|    cf_new = cf_new->next;
  392|  2.03k|  } while(cf_new);
  ------------------
  |  Branch (392:11): [True: 0, False: 2.03k]
  ------------------
  393|  2.03k|  *pnext = tail;
  394|  2.03k|}
Curl_conn_cf_connect:
  423|  6.10k|{
  424|  6.10k|  if(cf)
  ------------------
  |  Branch (424:6): [True: 6.10k, False: 0]
  ------------------
  425|  6.10k|    return cf->cft->do_connect(cf, data, done);
  426|      0|  return CURLE_FAILED_INIT;
  427|  6.10k|}
Curl_conn_cntrl_update_info:
  478|  2.03k|{
  479|  2.03k|  cf_cntrl_all(conn, data, TRUE, CF_CTRL_CONN_INFO_UPDATE, 0, NULL);
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
                cf_cntrl_all(conn, data, TRUE, CF_CTRL_CONN_INFO_UPDATE, 0, NULL);
  ------------------
  |  |  121|  2.03k|#define CF_CTRL_CONN_INFO_UPDATE (256 + 0) /* 0          NULL     ignored */
  ------------------
  480|  2.03k|}
Curl_conn_cntrl_report_stats:
  485|  2.03k|{
  486|  2.03k|  if((unsigned)sockindex < CURL_ARRAYSIZE(conn->cfilter))
  ------------------
  |  | 1299|  2.03k|#define CURL_ARRAYSIZE(A) (sizeof(A) / sizeof((A)[0]))
  ------------------
  |  Branch (486:6): [True: 2.03k, False: 0]
  ------------------
  487|  2.03k|    (void)Curl_conn_cf_cntrl(conn->cfilter[sockindex], data, TRUE,
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  488|  2.03k|                             CF_CTRL_REPORT_STATS, 0, NULL);
  ------------------
  |  |  124|  2.03k|#define CF_CTRL_REPORT_STATS     (256 + 3) /* 0          NULL     ignored */
  ------------------
  489|  2.03k|}
Curl_conn_remove_setup_filters:
  493|  2.03k|{
  494|  2.03k|  struct Curl_cfilter **anchor = &data->conn->cfilter[sockindex];
  495|  10.1k|  while(*anchor) {
  ------------------
  |  Branch (495:9): [True: 8.14k, False: 2.03k]
  ------------------
  496|  8.14k|    struct Curl_cfilter *cf = *anchor;
  497|  8.14k|    if(cf->connected && (cf->cft->flags & CF_TYPE_SETUP)) {
  ------------------
  |  |  213|  8.14k|#define CF_TYPE_SETUP       (1 << 5)
  ------------------
  |  Branch (497:8): [True: 8.14k, False: 0]
  |  Branch (497:25): [True: 6.10k, False: 2.03k]
  ------------------
  498|  6.10k|      *anchor = cf->next;
  499|  6.10k|      cf->next = NULL;
  500|  6.10k|      CURL_TRC_CF(data, cf, "removing connected setup filter");
  ------------------
  |  |  153|  6.10k|  do {                                          \
  |  |  154|  6.10k|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|  6.10k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  12.2k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 6.10k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 6.10k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  12.2k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 6.10k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  6.10k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|  6.10k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  6.10k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 6.10k, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 6.10k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|  6.10k|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|  6.10k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 6.10k]
  |  |  ------------------
  ------------------
  501|  6.10k|      cf->cft->destroy(cf, data);
  502|  6.10k|      curlx_free(cf);
  ------------------
  |  | 1476|  6.10k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  503|  6.10k|    }
  504|  2.03k|    else
  505|  2.03k|      anchor = &cf->next;
  506|  8.14k|  }
  507|  2.03k|}
Curl_conn_is_connected:
  517|  15.9k|{
  518|  15.9k|  struct Curl_cfilter *cf;
  519|       |
  520|  15.9k|  if(!CONN_SOCK_IDX_VALID(sockindex))
  ------------------
  |  |  311|  15.9k|#define CONN_SOCK_IDX_VALID(i)    (((i) >= 0) && ((i) < 2))
  |  |  ------------------
  |  |  |  Branch (311:36): [True: 15.9k, False: 0]
  |  |  |  Branch (311:50): [True: 15.9k, False: 0]
  |  |  ------------------
  ------------------
  521|      0|    return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  522|  15.9k|  cf = conn->cfilter[sockindex];
  523|  15.9k|  if(cf)
  ------------------
  |  Branch (523:6): [True: 13.8k, False: 2.03k]
  ------------------
  524|  13.8k|    return (bool)cf->connected;
  525|  2.03k|  else if(conn->scheme->flags & PROTOPT_NONETWORK)
  ------------------
  |  |  214|  2.03k|#define PROTOPT_NONETWORK (1 << 4) /* protocol does not use the network! */
  ------------------
  |  Branch (525:11): [True: 0, False: 2.03k]
  ------------------
  526|      0|    return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  527|  2.03k|  return FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  528|  15.9k|}
Curl_conn_is_multiplex:
  621|  2.03k|{
  622|  2.03k|  struct Curl_cfilter *cf;
  623|       |
  624|  2.03k|  if(!conn || !CONN_SOCK_IDX_VALID(sockindex))
  ------------------
  |  |  311|  2.03k|#define CONN_SOCK_IDX_VALID(i)    (((i) >= 0) && ((i) < 2))
  |  |  ------------------
  |  |  |  Branch (311:36): [True: 2.03k, False: 0]
  |  |  |  Branch (311:50): [True: 2.03k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (624:6): [True: 0, False: 2.03k]
  ------------------
  625|      0|    return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  626|  2.03k|  for(cf = conn->cfilter[sockindex]; cf; cf = cf->next) {
  ------------------
  |  Branch (626:38): [True: 2.03k, False: 0]
  ------------------
  627|  2.03k|    if(cf->cft->flags & CF_TYPE_MULTIPLEX)
  ------------------
  |  |  210|  2.03k|#define CF_TYPE_MULTIPLEX   (1 << 2)
  ------------------
  |  Branch (627:8): [True: 0, False: 2.03k]
  ------------------
  628|      0|      return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  629|  2.03k|    if(cf->cft->flags & (CF_TYPE_IP_CONNECT | CF_TYPE_SSL))
  ------------------
  |  |  208|  2.03k|#define CF_TYPE_IP_CONNECT  (1 << 0)
  ------------------
                  if(cf->cft->flags & (CF_TYPE_IP_CONNECT | CF_TYPE_SSL))
  ------------------
  |  |  209|  2.03k|#define CF_TYPE_SSL         (1 << 1)
  ------------------
  |  Branch (629:8): [True: 2.03k, False: 0]
  ------------------
  630|  2.03k|      return FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  631|  2.03k|  }
  632|      0|  return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  633|  2.03k|}
Curl_socktype_for_transport:
  643|  2.03k|{
  644|  2.03k|  switch(transport) {
  645|  2.03k|  case TRNSPRT_TCP:
  ------------------
  |  |  238|  2.03k|#define TRNSPRT_TCP  3
  ------------------
  |  Branch (645:3): [True: 2.03k, False: 0]
  ------------------
  646|  2.03k|    return SOCK_STREAM;
  647|      0|  case TRNSPRT_UNIX:
  ------------------
  |  |  241|      0|#define TRNSPRT_UNIX 6
  ------------------
  |  Branch (647:3): [True: 0, False: 2.03k]
  ------------------
  648|      0|    return SOCK_STREAM;
  649|      0|  default: /* UDP and QUIC */
  ------------------
  |  Branch (649:3): [True: 0, False: 2.03k]
  ------------------
  650|       |    return SOCK_DGRAM;
  651|  2.03k|  }
  652|  2.03k|}
Curl_protocol_for_transport:
  655|  2.03k|{
  656|  2.03k|  switch(transport) {
  657|  2.03k|  case TRNSPRT_TCP:
  ------------------
  |  |  238|  2.03k|#define TRNSPRT_TCP  3
  ------------------
  |  Branch (657:3): [True: 2.03k, False: 0]
  ------------------
  658|  2.03k|    return IPPROTO_TCP;
  659|      0|  case TRNSPRT_UNIX:
  ------------------
  |  |  241|      0|#define TRNSPRT_UNIX 6
  ------------------
  |  Branch (659:3): [True: 0, False: 2.03k]
  ------------------
  660|      0|    return IPPROTO_IP;
  661|      0|  default: /* UDP and QUIC */
  ------------------
  |  Branch (661:3): [True: 0, False: 2.03k]
  ------------------
  662|       |    return IPPROTO_UDP;
  663|  2.03k|  }
  664|  2.03k|}
Curl_conn_cf_needs_flush:
  719|  4.07k|{
  720|  4.07k|  CURLcode result;
  721|  4.07k|  int pending = 0;
  722|  4.07k|  result = cf ? cf->cft->query(cf, data, CF_QUERY_NEED_FLUSH,
  ------------------
  |  |  172|  4.07k|#define CF_QUERY_NEED_FLUSH         7  /* TRUE/FALSE - */
  ------------------
  |  Branch (722:12): [True: 4.07k, False: 0]
  ------------------
  723|  4.07k|                               &pending, NULL) : CURLE_UNKNOWN_OPTION;
  724|  4.07k|  return (result || !pending) ? FALSE : TRUE;
  ------------------
  |  | 1048|  4.07k|#define FALSE false
  ------------------
                return (result || !pending) ? FALSE : TRUE;
  ------------------
  |  | 1045|  4.07k|#define TRUE true
  ------------------
  |  Branch (724:11): [True: 4.07k, False: 0]
  |  Branch (724:21): [True: 0, False: 0]
  ------------------
  725|  4.07k|}
Curl_conn_needs_flush:
  728|  5.99k|{
  729|  5.99k|  if(!CONN_SOCK_IDX_VALID(sockindex))
  ------------------
  |  |  311|  5.99k|#define CONN_SOCK_IDX_VALID(i)    (((i) >= 0) && ((i) < 2))
  |  |  ------------------
  |  |  |  Branch (311:36): [True: 4.07k, False: 1.92k]
  |  |  |  Branch (311:50): [True: 4.07k, False: 0]
  |  |  ------------------
  ------------------
  730|  1.92k|    return FALSE;
  ------------------
  |  | 1048|  1.92k|#define FALSE false
  ------------------
  731|  4.07k|  return Curl_conn_cf_needs_flush(data->conn->cfilter[sockindex], data);
  732|  5.99k|}
Curl_conn_cf_cntrl:
  866|  14.2k|{
  867|  14.2k|  CURLcode result = CURLE_OK;
  868|       |
  869|  32.5k|  for(; cf; cf = cf->next) {
  ------------------
  |  Branch (869:9): [True: 18.3k, False: 14.2k]
  ------------------
  870|  18.3k|    if(cf->cft->cntrl == Curl_cf_def_cntrl)
  ------------------
  |  Branch (870:8): [True: 8.14k, False: 10.1k]
  ------------------
  871|  8.14k|      continue;
  872|  10.1k|    result = cf->cft->cntrl(cf, data, event, arg1, arg2);
  873|  10.1k|    if(!ignore_result && result)
  ------------------
  |  Branch (873:8): [True: 0, False: 10.1k]
  |  Branch (873:26): [True: 0, False: 0]
  ------------------
  874|      0|      break;
  875|  10.1k|  }
  876|  14.2k|  return result;
  877|  14.2k|}
Curl_conn_cf_get_socket:
  881|  2.03k|{
  882|  2.03k|  curl_socket_t sock;
  883|  2.03k|  if(cf && !cf->cft->query(cf, data, CF_QUERY_SOCKET, NULL, &sock))
  ------------------
  |  |  169|  2.03k|#define CF_QUERY_SOCKET             3  /* -          curl_socket_t */
  ------------------
  |  Branch (883:6): [True: 2.03k, False: 0]
  |  Branch (883:12): [True: 0, False: 2.03k]
  ------------------
  884|      0|    return sock;
  885|  2.03k|  return CURL_SOCKET_BAD;
  ------------------
  |  |  147|  2.03k|#define CURL_SOCKET_BAD (-1)
  ------------------
  886|  2.03k|}
Curl_conn_cf_get_ip_info:
  922|  2.03k|{
  923|  2.03k|  CURLcode result = CURLE_UNKNOWN_OPTION;
  924|  2.03k|  if(cf) {
  ------------------
  |  Branch (924:6): [True: 2.03k, False: 0]
  ------------------
  925|  2.03k|    int ipv6 = 0;
  926|  2.03k|    result = cf->cft->query(cf, data, CF_QUERY_IP_INFO, &ipv6, ipquad);
  ------------------
  |  |  173|  2.03k|#define CF_QUERY_IP_INFO            8  /* TRUE/FALSE struct ip_quadruple */
  ------------------
  927|  2.03k|    *is_ipv6 = !!ipv6;
  928|  2.03k|  }
  929|  2.03k|  return result;
  930|  2.03k|}
Curl_conn_ev_data_setup:
  957|  2.03k|{
  958|  2.03k|  return cf_cntrl_all(data->conn, data, FALSE, CF_CTRL_DATA_SETUP, 0, NULL);
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
                return cf_cntrl_all(data->conn, data, FALSE, CF_CTRL_DATA_SETUP, 0, NULL);
  ------------------
  |  |  115|  2.03k|#define CF_CTRL_DATA_SETUP              4  /* 0          NULL     first fail */
  ------------------
  959|  2.03k|}
Curl_conn_ev_data_done:
  983|  2.03k|{
  984|  2.03k|  cf_cntrl_all(data->conn, data, TRUE, CF_CTRL_DATA_DONE, premature, NULL);
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
                cf_cntrl_all(data->conn, data, TRUE, CF_CTRL_DATA_DONE, premature, NULL);
  ------------------
  |  |  118|  2.03k|#define CF_CTRL_DATA_DONE               7  /* premature  NULL     ignored */
  ------------------
  985|  2.03k|}
Curl_conn_recv:
 1062|  2.86k|{
 1063|  2.86k|  DEBUGASSERT(data);
  ------------------
  |  | 1075|  2.86k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1063:3): [True: 0, False: 2.86k]
  |  Branch (1063:3): [True: 2.86k, False: 0]
  ------------------
 1064|  2.86k|  DEBUGASSERT(data->conn);
  ------------------
  |  | 1075|  2.86k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1064:3): [True: 0, False: 2.86k]
  |  Branch (1064:3): [True: 2.86k, False: 0]
  ------------------
 1065|  2.86k|  if(!CONN_SOCK_IDX_VALID(sockindex))
  ------------------
  |  |  311|  2.86k|#define CONN_SOCK_IDX_VALID(i)    (((i) >= 0) && ((i) < 2))
  |  |  ------------------
  |  |  |  Branch (311:36): [True: 2.86k, False: 0]
  |  |  |  Branch (311:50): [True: 2.86k, False: 0]
  |  |  ------------------
  ------------------
 1066|      0|    return CURLE_BAD_FUNCTION_ARGUMENT;
 1067|  2.86k|  if(data && data->conn && data->conn->recv[sockindex])
  ------------------
  |  Branch (1067:6): [True: 2.86k, False: 0]
  |  Branch (1067:14): [True: 2.86k, False: 0]
  |  Branch (1067:28): [True: 2.86k, False: 0]
  ------------------
 1068|  2.86k|    return data->conn->recv[sockindex](data, sockindex, buf, len, pnread);
 1069|      0|  *pnread = 0;
 1070|      0|  return CURLE_FAILED_INIT;
 1071|  2.86k|}
Curl_conn_send:
 1076|    292|{
 1077|    292|  size_t write_len = len;
 1078|       |
 1079|    292|  DEBUGASSERT(data);
  ------------------
  |  | 1075|    292|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1079:3): [True: 0, False: 292]
  |  Branch (1079:3): [True: 292, False: 0]
  ------------------
 1080|    292|  DEBUGASSERT(data->conn);
  ------------------
  |  | 1075|    292|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1080:3): [True: 0, False: 292]
  |  Branch (1080:3): [True: 292, False: 0]
  ------------------
 1081|    292|  DEBUGASSERT(CONN_SOCK_IDX_VALID(sockindex));
  ------------------
  |  | 1075|    292|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1081:3): [True: 0, False: 292]
  |  Branch (1081:3): [True: 0, False: 0]
  |  Branch (1081:3): [True: 292, False: 0]
  |  Branch (1081:3): [True: 292, False: 0]
  ------------------
 1082|    292|  if(!CONN_SOCK_IDX_VALID(sockindex))
  ------------------
  |  |  311|    292|#define CONN_SOCK_IDX_VALID(i)    (((i) >= 0) && ((i) < 2))
  |  |  ------------------
  |  |  |  Branch (311:36): [True: 292, False: 0]
  |  |  |  Branch (311:50): [True: 292, False: 0]
  |  |  ------------------
  ------------------
 1083|      0|    return CURLE_BAD_FUNCTION_ARGUMENT;
 1084|    292|#ifdef DEBUGBUILD
 1085|    292|  if(write_len) {
  ------------------
  |  Branch (1085:6): [True: 292, False: 0]
  ------------------
 1086|       |    /* Allow debug builds to override this logic to force short sends */
 1087|    292|    const char *p = getenv("CURL_SMALLSENDS");
 1088|    292|    if(p) {
  ------------------
  |  Branch (1088:8): [True: 0, False: 292]
  ------------------
 1089|      0|      curl_off_t altsize;
 1090|      0|      if(!curlx_str_number(&p, &altsize, write_len)) {
  ------------------
  |  Branch (1090:10): [True: 0, False: 0]
  ------------------
 1091|      0|        write_len = (size_t)altsize;
 1092|      0|        if(write_len != len)
  ------------------
  |  Branch (1092:12): [True: 0, False: 0]
  ------------------
 1093|      0|          eos = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 1094|      0|      }
 1095|      0|    }
 1096|    292|  }
 1097|    292|#endif
 1098|    292|  if(data && data->conn && data->conn->send[sockindex])
  ------------------
  |  Branch (1098:6): [True: 292, False: 0]
  |  Branch (1098:14): [True: 292, False: 0]
  |  Branch (1098:28): [True: 292, False: 0]
  ------------------
 1099|    292|    return data->conn->send[sockindex](data, sockindex, buf, write_len, eos,
 1100|    292|                                       pnwritten);
 1101|      0|  *pnwritten = 0;
 1102|      0|  return CURLE_FAILED_INIT;
 1103|    292|}
cfilters.c:cf_cntrl_all:
  452|  6.10k|{
  453|  6.10k|  CURLcode result = CURLE_OK;
  454|  6.10k|  int i;
  455|       |
  456|  18.3k|  for(i = 0; i < (int)CURL_ARRAYSIZE(conn->cfilter); ++i) {
  ------------------
  |  | 1299|  18.3k|#define CURL_ARRAYSIZE(A) (sizeof(A) / sizeof((A)[0]))
  ------------------
  |  Branch (456:14): [True: 12.2k, False: 6.10k]
  ------------------
  457|  12.2k|    result = Curl_conn_cf_cntrl(conn->cfilter[i], data, ignore_result,
  458|  12.2k|                                event, arg1, arg2);
  459|  12.2k|    if(!ignore_result && result)
  ------------------
  |  Branch (459:8): [True: 4.07k, False: 8.14k]
  |  Branch (459:26): [True: 0, False: 4.07k]
  ------------------
  460|      0|      break;
  461|  12.2k|  }
  462|  6.10k|  return result;
  463|  6.10k|}

Curl_cpool_init:
  116|  2.53k|{
  117|  2.53k|  Curl_hash_init(&cpool->dest2bundle, size, Curl_hash_str,
  118|  2.53k|                 curlx_str_key_compare, cpool_bundle_free_entry);
  119|       |
  120|  2.53k|  cpool->share = share;
  121|       |  cpool->initialized = TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  122|  2.53k|}
Curl_cpool_destroy:
  232|  2.53k|{
  233|  2.53k|  if(cpool && cpool->initialized && admin) {
  ------------------
  |  Branch (233:6): [True: 2.53k, False: 0]
  |  Branch (233:15): [True: 2.53k, False: 0]
  |  Branch (233:37): [True: 2.53k, False: 0]
  ------------------
  234|  2.53k|    struct connectdata *conn;
  235|  2.53k|    struct Curl_sigpipe_ctx pipe_ctx;
  236|       |
  237|  2.53k|    CURL_TRC_M(admin, "%s[CPOOL] destroy, %zu connections",
  ------------------
  |  |  148|  2.53k|  do {                                   \
  |  |  149|  2.53k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  2.53k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.53k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  5.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.53k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 2.53k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  5.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.53k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  2.53k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  ------------------
  |  |  |  Branch (150:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  151|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
  238|  2.53k|               cpool->share ? "[SHARE] " : "", cpool->num_conn);
  239|       |    /* Move all connections to the shutdown list */
  240|  2.53k|    sigpipe_init(&pipe_ctx);
  241|  2.53k|    CPOOL_LOCK(cpool, admin);
  ------------------
  |  |   42|  2.53k|  do {                                                                  \
  |  |   43|  2.53k|    if(c) {                                                             \
  |  |  ------------------
  |  |  |  Branch (43:8): [True: 2.53k, False: 0]
  |  |  ------------------
  |  |   44|  2.53k|      if(CURL_SHARE_KEEP_CONNECT((c)->share))                           \
  |  |  ------------------
  |  |  |  |   41|  2.53k|  ((s) && ((s)->specifier & (1 << CURL_LOCK_DATA_CONNECT)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (41:4): [True: 0, False: 2.53k]
  |  |  |  |  |  Branch (41:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   45|  2.53k|        Curl_share_lock_share((c)->share, (d), CURL_LOCK_DATA_CONNECT,  \
  |  |   46|      0|                        CURL_LOCK_ACCESS_SINGLE);                       \
  |  |   47|  2.53k|      DEBUGASSERT(!(c)->locked);                                        \
  |  |  ------------------
  |  |  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |   48|  2.53k|      (c)->locked = TRUE;                                               \
  |  |  ------------------
  |  |  |  | 1045|  2.53k|#define TRUE true
  |  |  ------------------
  |  |   49|  2.53k|    }                                                                   \
  |  |   50|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (50:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
  |  Branch (241:5): [True: 0, False: 2.53k]
  |  Branch (241:5): [True: 2.53k, False: 0]
  ------------------
  242|  2.53k|    conn = cpool_get_first(cpool);
  243|  2.53k|    if(conn)
  ------------------
  |  Branch (243:8): [True: 0, False: 2.53k]
  ------------------
  244|      0|      sigpipe_apply(admin, &pipe_ctx);
  245|  2.53k|    while(conn) {
  ------------------
  |  Branch (245:11): [True: 0, False: 2.53k]
  ------------------
  246|      0|      cpool_remove_conn(cpool, conn);
  247|      0|      cpool_discard_conn(cpool, admin, conn, FALSE);
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  248|      0|      conn = cpool_get_first(cpool);
  249|      0|    }
  250|  2.53k|    CPOOL_UNLOCK(cpool, admin);
  ------------------
  |  |   53|  2.53k|  do {                                                                  \
  |  |   54|  2.53k|    if(c) {                                                             \
  |  |  ------------------
  |  |  |  Branch (54:8): [True: 2.53k, False: 0]
  |  |  ------------------
  |  |   55|  2.53k|      DEBUGASSERT((c)->locked);                                         \
  |  |  ------------------
  |  |  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |   56|  2.53k|      (c)->locked = FALSE;                                              \
  |  |  ------------------
  |  |  |  | 1048|  2.53k|#define FALSE false
  |  |  ------------------
  |  |   57|  2.53k|      if(CURL_SHARE_KEEP_CONNECT((c)->share))                           \
  |  |  ------------------
  |  |  |  |   41|  2.53k|  ((s) && ((s)->specifier & (1 << CURL_LOCK_DATA_CONNECT)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (41:4): [True: 0, False: 2.53k]
  |  |  |  |  |  Branch (41:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|  2.53k|        Curl_share_unlock_share((c)->share, (d), CURL_LOCK_DATA_CONNECT); \
  |  |   59|  2.53k|    }                                                                   \
  |  |   60|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (60:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
  |  Branch (250:5): [True: 0, False: 2.53k]
  |  Branch (250:5): [True: 2.53k, False: 0]
  ------------------
  251|  2.53k|    sigpipe_restore(&pipe_ctx);
  252|  2.53k|    Curl_hash_destroy(&cpool->dest2bundle);
  253|  2.53k|  }
  254|  2.53k|}
Curl_cpool_get_instance:
  270|  2.03k|{
  271|  2.03k|  return cpool_get_instance(data);
  272|  2.03k|}
Curl_cpool_xfer_init:
  275|  2.53k|{
  276|  2.53k|  struct cpool *cpool = cpool_get_instance(data);
  277|       |
  278|  2.53k|  if(cpool) {
  ------------------
  |  Branch (278:6): [True: 2.53k, False: 0]
  ------------------
  279|  2.53k|    CPOOL_LOCK(cpool, data);
  ------------------
  |  |   42|  2.53k|  do {                                                                  \
  |  |   43|  2.53k|    if(c) {                                                             \
  |  |  ------------------
  |  |  |  Branch (43:8): [True: 2.53k, False: 0]
  |  |  ------------------
  |  |   44|  2.53k|      if(CURL_SHARE_KEEP_CONNECT((c)->share))                           \
  |  |  ------------------
  |  |  |  |   41|  2.53k|  ((s) && ((s)->specifier & (1 << CURL_LOCK_DATA_CONNECT)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (41:4): [True: 0, False: 2.53k]
  |  |  |  |  |  Branch (41:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   45|  2.53k|        Curl_share_lock_share((c)->share, (d), CURL_LOCK_DATA_CONNECT,  \
  |  |   46|      0|                        CURL_LOCK_ACCESS_SINGLE);                       \
  |  |   47|  2.53k|      DEBUGASSERT(!(c)->locked);                                        \
  |  |  ------------------
  |  |  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |   48|  2.53k|      (c)->locked = TRUE;                                               \
  |  |  ------------------
  |  |  |  | 1045|  2.53k|#define TRUE true
  |  |  ------------------
  |  |   49|  2.53k|    }                                                                   \
  |  |   50|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (50:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
  |  Branch (279:5): [True: 0, False: 2.53k]
  |  Branch (279:5): [True: 2.53k, False: 0]
  ------------------
  280|       |    /* the identifier inside the connection cache */
  281|  2.53k|    data->id = cpool->next_easy_id++;
  282|  2.53k|    if(cpool->next_easy_id == CURL_OFF_T_MAX)
  ------------------
  |  |  588|  2.53k|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  ------------------
  |  Branch (282:8): [True: 0, False: 2.53k]
  ------------------
  283|      0|      cpool->next_easy_id = 0;
  284|  2.53k|    data->state.lastconnect_id = -1;
  285|       |
  286|  2.53k|    CPOOL_UNLOCK(cpool, data);
  ------------------
  |  |   53|  2.53k|  do {                                                                  \
  |  |   54|  2.53k|    if(c) {                                                             \
  |  |  ------------------
  |  |  |  Branch (54:8): [True: 2.53k, False: 0]
  |  |  ------------------
  |  |   55|  2.53k|      DEBUGASSERT((c)->locked);                                         \
  |  |  ------------------
  |  |  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |   56|  2.53k|      (c)->locked = FALSE;                                              \
  |  |  ------------------
  |  |  |  | 1048|  2.53k|#define FALSE false
  |  |  ------------------
  |  |   57|  2.53k|      if(CURL_SHARE_KEEP_CONNECT((c)->share))                           \
  |  |  ------------------
  |  |  |  |   41|  2.53k|  ((s) && ((s)->specifier & (1 << CURL_LOCK_DATA_CONNECT)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (41:4): [True: 0, False: 2.53k]
  |  |  |  |  |  Branch (41:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|  2.53k|        Curl_share_unlock_share((c)->share, (d), CURL_LOCK_DATA_CONNECT); \
  |  |   59|  2.53k|    }                                                                   \
  |  |   60|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (60:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
  |  Branch (286:5): [True: 0, False: 2.53k]
  |  Branch (286:5): [True: 2.53k, False: 0]
  ------------------
  287|  2.53k|  }
  288|      0|  else {
  289|       |    /* We should not get here, but in a non-debug build, do something */
  290|      0|    DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (290:5): [Folded, False: 0]
  |  Branch (290:5): [Folded, False: 0]
  ------------------
  291|      0|    data->id = 0;
  292|      0|    data->state.lastconnect_id = -1;
  293|      0|  }
  294|  2.53k|}
Curl_conn_close:
  432|  2.03k|{
  433|  2.03k|  struct cpool *cpool = cpool_get_instance(data);
  434|  2.03k|  cpool_conn_close(cpool, data, conn, aborted);
  435|  2.03k|}
Curl_cpool_check_limits:
  456|  2.03k|{
  457|  2.03k|  struct cpool *cpool = cpool_get_instance(data);
  458|  2.03k|  struct cshutdn *cshutdn = Curl_cshutdn_get(data);
  459|  2.03k|  struct Curl_easy *admin;
  460|  2.03k|  struct cpool_bundle *bundle;
  461|  2.03k|  size_t dest_limit = 0;
  462|  2.03k|  size_t total_limit = 0;
  463|  2.03k|  size_t shutdowns;
  464|  2.03k|  int res = CPOOL_LIMIT_OK;
  ------------------
  |  |   92|  2.03k|#define CPOOL_LIMIT_OK     0
  ------------------
  465|       |
  466|  2.03k|  if(!cpool)
  ------------------
  |  Branch (466:6): [True: 0, False: 2.03k]
  ------------------
  467|      0|    return CPOOL_LIMIT_OK;
  ------------------
  |  |   92|      0|#define CPOOL_LIMIT_OK     0
  ------------------
  468|       |
  469|       |  /* multi determines the limits, no matter who owns the pool */
  470|  2.03k|  if(data->multi) {
  ------------------
  |  Branch (470:6): [True: 2.03k, False: 0]
  ------------------
  471|  2.03k|    dest_limit = data->multi->max_host_connections;
  472|  2.03k|    total_limit = data->multi->max_total_connections;
  473|  2.03k|  }
  474|       |
  475|  2.03k|  if(!dest_limit && !total_limit)
  ------------------
  |  Branch (475:6): [True: 2.03k, False: 0]
  |  Branch (475:21): [True: 2.03k, False: 0]
  ------------------
  476|  2.03k|    return CPOOL_LIMIT_OK;
  ------------------
  |  |   92|  2.03k|#define CPOOL_LIMIT_OK     0
  ------------------
  477|       |
  478|      0|  admin = Curl_get_admin(data);
  479|      0|  CPOOL_LOCK(cpool, admin);
  ------------------
  |  |   42|      0|  do {                                                                  \
  |  |   43|      0|    if(c) {                                                             \
  |  |  ------------------
  |  |  |  Branch (43:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   44|      0|      if(CURL_SHARE_KEEP_CONNECT((c)->share))                           \
  |  |  ------------------
  |  |  |  |   41|      0|  ((s) && ((s)->specifier & (1 << CURL_LOCK_DATA_CONNECT)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (41:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (41:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   45|      0|        Curl_share_lock_share((c)->share, (d), CURL_LOCK_DATA_CONNECT,  \
  |  |   46|      0|                        CURL_LOCK_ACCESS_SINGLE);                       \
  |  |   47|      0|      DEBUGASSERT(!(c)->locked);                                        \
  |  |  ------------------
  |  |  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |   48|      0|      (c)->locked = TRUE;                                               \
  |  |  ------------------
  |  |  |  | 1045|      0|#define TRUE true
  |  |  ------------------
  |  |   49|      0|    }                                                                   \
  |  |   50|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (50:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (479:3): [True: 0, False: 0]
  |  Branch (479:3): [True: 0, False: 0]
  ------------------
  480|      0|  if(dest_limit) {
  ------------------
  |  Branch (480:6): [True: 0, False: 0]
  ------------------
  481|      0|    size_t live;
  482|       |
  483|      0|    bundle = cpool_find_bundle(cpool, conn);
  484|      0|    live = bundle ? Curl_llist_count(&bundle->conns) : 0;
  ------------------
  |  Branch (484:12): [True: 0, False: 0]
  ------------------
  485|      0|    shutdowns = Curl_cshutdn_dest_count(cshutdn, conn->destination);
  486|      0|    while((live + shutdowns) >= dest_limit) {
  ------------------
  |  Branch (486:11): [True: 0, False: 0]
  ------------------
  487|      0|      if(shutdowns) {
  ------------------
  |  Branch (487:10): [True: 0, False: 0]
  ------------------
  488|       |        /* close one connection in shutdown right away, if we can */
  489|      0|        if(!Curl_cshutdn_close_oldest(cshutdn, conn->destination))
  ------------------
  |  Branch (489:12): [True: 0, False: 0]
  ------------------
  490|      0|          break;
  491|      0|      }
  492|      0|      else if(!bundle)
  ------------------
  |  Branch (492:15): [True: 0, False: 0]
  ------------------
  493|      0|        break;
  494|      0|      else {
  495|      0|        struct connectdata *oldest_idle = NULL;
  496|       |        /* The bundle is full. Extract the oldest connection that may
  497|       |         * be removed now, if there is one. */
  498|      0|        oldest_idle = cpool_bundle_get_oldest_idle(bundle, pnow);
  499|      0|        if(!oldest_idle)
  ------------------
  |  Branch (499:12): [True: 0, False: 0]
  ------------------
  500|      0|          break;
  501|       |        /* disconnect the old conn and continue */
  502|      0|        CURL_TRC_M(admin, "Discarding connection #%" FMT_OFF_T
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  503|      0|                   " from %zu to reach destination limit of %zu",
  504|      0|                   oldest_idle->connection_id,
  505|      0|                   Curl_llist_count(&bundle->conns), dest_limit);
  506|      0|        cpool_evict_conn(cpool, admin, oldest_idle);
  507|       |
  508|       |        /* in case the bundle was destroyed in disconnect, look it up again */
  509|      0|        bundle = cpool_find_bundle(cpool, conn);
  510|      0|        live = bundle ? Curl_llist_count(&bundle->conns) : 0;
  ------------------
  |  Branch (510:16): [True: 0, False: 0]
  ------------------
  511|      0|      }
  512|      0|      shutdowns = Curl_cshutdn_dest_count(cshutdn, conn->destination);
  513|      0|    }
  514|      0|    if((live + shutdowns) >= dest_limit) {
  ------------------
  |  Branch (514:8): [True: 0, False: 0]
  ------------------
  515|      0|      res = CPOOL_LIMIT_DEST;
  ------------------
  |  |   93|      0|#define CPOOL_LIMIT_DEST   1
  ------------------
  516|      0|      goto out;
  517|      0|    }
  518|      0|  }
  519|       |
  520|      0|  if(total_limit) {
  ------------------
  |  Branch (520:6): [True: 0, False: 0]
  ------------------
  521|      0|    shutdowns = Curl_cshutdn_count(cshutdn);
  522|      0|    while((cpool->num_conn + shutdowns) >= total_limit) {
  ------------------
  |  Branch (522:11): [True: 0, False: 0]
  ------------------
  523|      0|      if(shutdowns) {
  ------------------
  |  Branch (523:10): [True: 0, False: 0]
  ------------------
  524|       |        /* close one connection in shutdown right away, if we can */
  525|      0|        if(!Curl_cshutdn_close_oldest(cshutdn, NULL))
  ------------------
  |  Branch (525:12): [True: 0, False: 0]
  ------------------
  526|      0|          break;
  527|      0|      }
  528|      0|      else {
  529|      0|        struct connectdata *oldest_idle =
  530|      0|          cpool_get_oldest_idle(cpool, pnow, 0);
  531|      0|        if(!oldest_idle)
  ------------------
  |  Branch (531:12): [True: 0, False: 0]
  ------------------
  532|      0|          break;
  533|       |        /* disconnect the old conn and continue */
  534|      0|        CURL_TRC_M(admin, "Discarding connection #%"
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  535|      0|                   FMT_OFF_T " from %zu to reach total "
  536|      0|                   "limit of %zu",
  537|      0|                   oldest_idle->connection_id, cpool->num_conn, total_limit);
  538|      0|        cpool_evict_conn(cpool, admin, oldest_idle);
  539|      0|      }
  540|      0|      shutdowns = Curl_cshutdn_count(cshutdn);
  541|      0|    }
  542|      0|    if((cpool->num_conn + shutdowns) >= total_limit) {
  ------------------
  |  Branch (542:8): [True: 0, False: 0]
  ------------------
  543|      0|      res = CPOOL_LIMIT_TOTAL;
  ------------------
  |  |   94|      0|#define CPOOL_LIMIT_TOTAL  2
  ------------------
  544|      0|      goto out;
  545|      0|    }
  546|      0|  }
  547|       |
  548|      0|out:
  549|      0|  CPOOL_UNLOCK(cpool, admin);
  ------------------
  |  |   53|      0|  do {                                                                  \
  |  |   54|      0|    if(c) {                                                             \
  |  |  ------------------
  |  |  |  Branch (54:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   55|      0|      DEBUGASSERT((c)->locked);                                         \
  |  |  ------------------
  |  |  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |   56|      0|      (c)->locked = FALSE;                                              \
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  |  |   57|      0|      if(CURL_SHARE_KEEP_CONNECT((c)->share))                           \
  |  |  ------------------
  |  |  |  |   41|      0|  ((s) && ((s)->specifier & (1 << CURL_LOCK_DATA_CONNECT)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (41:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (41:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|      0|        Curl_share_unlock_share((c)->share, (d), CURL_LOCK_DATA_CONNECT); \
  |  |   59|      0|    }                                                                   \
  |  |   60|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (60:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (549:3): [True: 0, False: 0]
  |  Branch (549:3): [True: 0, False: 0]
  ------------------
  550|      0|  return res;
  551|      0|}
Curl_cpool_add:
  555|  2.03k|{
  556|  2.03k|  CURLcode result = CURLE_OK;
  557|  2.03k|  struct cpool_bundle *bundle = NULL;
  558|  2.03k|  struct cpool *cpool = cpool_get_instance(data);
  559|  2.03k|  DEBUGASSERT(conn);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (559:3): [True: 0, False: 2.03k]
  |  Branch (559:3): [True: 2.03k, False: 0]
  ------------------
  560|       |
  561|  2.03k|  DEBUGASSERT(cpool);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (561:3): [True: 0, False: 2.03k]
  |  Branch (561:3): [True: 2.03k, False: 0]
  ------------------
  562|  2.03k|  if(!cpool)
  ------------------
  |  Branch (562:6): [True: 0, False: 2.03k]
  ------------------
  563|      0|    return CURLE_FAILED_INIT;
  564|       |
  565|  2.03k|  CPOOL_LOCK(cpool, data);
  ------------------
  |  |   42|  2.03k|  do {                                                                  \
  |  |   43|  2.03k|    if(c) {                                                             \
  |  |  ------------------
  |  |  |  Branch (43:8): [True: 2.03k, False: 0]
  |  |  ------------------
  |  |   44|  2.03k|      if(CURL_SHARE_KEEP_CONNECT((c)->share))                           \
  |  |  ------------------
  |  |  |  |   41|  2.03k|  ((s) && ((s)->specifier & (1 << CURL_LOCK_DATA_CONNECT)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (41:4): [True: 0, False: 2.03k]
  |  |  |  |  |  Branch (41:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   45|  2.03k|        Curl_share_lock_share((c)->share, (d), CURL_LOCK_DATA_CONNECT,  \
  |  |   46|      0|                        CURL_LOCK_ACCESS_SINGLE);                       \
  |  |   47|  2.03k|      DEBUGASSERT(!(c)->locked);                                        \
  |  |  ------------------
  |  |  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |   48|  2.03k|      (c)->locked = TRUE;                                               \
  |  |  ------------------
  |  |  |  | 1045|  2.03k|#define TRUE true
  |  |  ------------------
  |  |   49|  2.03k|    }                                                                   \
  |  |   50|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (50:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  |  Branch (565:3): [True: 0, False: 2.03k]
  |  Branch (565:3): [True: 2.03k, False: 0]
  ------------------
  566|  2.03k|  bundle = cpool_find_bundle(cpool, conn);
  567|  2.03k|  if(!bundle) {
  ------------------
  |  Branch (567:6): [True: 2.03k, False: 0]
  ------------------
  568|  2.03k|    bundle = cpool_add_bundle(cpool, conn);
  569|  2.03k|    if(!bundle) {
  ------------------
  |  Branch (569:8): [True: 0, False: 2.03k]
  ------------------
  570|      0|      result = CURLE_OUT_OF_MEMORY;
  571|      0|      goto out;
  572|      0|    }
  573|  2.03k|  }
  574|       |
  575|  2.03k|  cpool_bundle_add(bundle, conn);
  576|  2.03k|  conn->connection_id = cpool->next_connection_id++;
  577|  2.03k|  cpool->num_conn++;
  578|  2.03k|  CURL_TRC_M(data, "[CPOOL] added connection %" FMT_OFF_T ". "
  ------------------
  |  |  148|  2.03k|  do {                                   \
  |  |  149|  2.03k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  2.03k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.03k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.03k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 2.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  2.03k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  579|  2.03k|             "The cache now contains %zu members",
  580|  2.03k|             conn->connection_id, cpool->num_conn);
  581|  2.03k|out:
  582|  2.03k|  CPOOL_UNLOCK(cpool, data);
  ------------------
  |  |   53|  2.03k|  do {                                                                  \
  |  |   54|  2.03k|    if(c) {                                                             \
  |  |  ------------------
  |  |  |  Branch (54:8): [True: 2.03k, False: 0]
  |  |  ------------------
  |  |   55|  2.03k|      DEBUGASSERT((c)->locked);                                         \
  |  |  ------------------
  |  |  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |   56|  2.03k|      (c)->locked = FALSE;                                              \
  |  |  ------------------
  |  |  |  | 1048|  2.03k|#define FALSE false
  |  |  ------------------
  |  |   57|  2.03k|      if(CURL_SHARE_KEEP_CONNECT((c)->share))                           \
  |  |  ------------------
  |  |  |  |   41|  2.03k|  ((s) && ((s)->specifier & (1 << CURL_LOCK_DATA_CONNECT)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (41:4): [True: 0, False: 2.03k]
  |  |  |  |  |  Branch (41:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|  2.03k|        Curl_share_unlock_share((c)->share, (d), CURL_LOCK_DATA_CONNECT); \
  |  |   59|  2.03k|    }                                                                   \
  |  |   60|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (60:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  |  Branch (582:3): [True: 0, False: 2.03k]
  |  Branch (582:3): [True: 2.03k, False: 0]
  ------------------
  583|       |
  584|  2.03k|  return result;
  585|  2.03k|}
Curl_cpool_find:
  697|  2.03k|{
  698|  2.03k|  struct cpool *cpool = cpool_get_instance(data);
  699|  2.03k|  struct cpool_bundle *bundle;
  700|  2.03k|  bool found = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  701|       |
  702|  2.03k|  DEBUGASSERT(cpool);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (702:3): [True: 0, False: 2.03k]
  |  Branch (702:3): [True: 2.03k, False: 0]
  ------------------
  703|  2.03k|  DEBUGASSERT(conn_cb);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (703:3): [True: 0, False: 2.03k]
  |  Branch (703:3): [True: 2.03k, False: 0]
  ------------------
  704|  2.03k|  if(!cpool)
  ------------------
  |  Branch (704:6): [True: 0, False: 2.03k]
  ------------------
  705|      0|    return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  706|       |
  707|  2.03k|  CPOOL_LOCK(cpool, data);
  ------------------
  |  |   42|  2.03k|  do {                                                                  \
  |  |   43|  2.03k|    if(c) {                                                             \
  |  |  ------------------
  |  |  |  Branch (43:8): [True: 2.03k, False: 0]
  |  |  ------------------
  |  |   44|  2.03k|      if(CURL_SHARE_KEEP_CONNECT((c)->share))                           \
  |  |  ------------------
  |  |  |  |   41|  2.03k|  ((s) && ((s)->specifier & (1 << CURL_LOCK_DATA_CONNECT)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (41:4): [True: 0, False: 2.03k]
  |  |  |  |  |  Branch (41:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   45|  2.03k|        Curl_share_lock_share((c)->share, (d), CURL_LOCK_DATA_CONNECT,  \
  |  |   46|      0|                        CURL_LOCK_ACCESS_SINGLE);                       \
  |  |   47|  2.03k|      DEBUGASSERT(!(c)->locked);                                        \
  |  |  ------------------
  |  |  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |   48|  2.03k|      (c)->locked = TRUE;                                               \
  |  |  ------------------
  |  |  |  | 1045|  2.03k|#define TRUE true
  |  |  ------------------
  |  |   49|  2.03k|    }                                                                   \
  |  |   50|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (50:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  |  Branch (707:3): [True: 0, False: 2.03k]
  |  Branch (707:3): [True: 2.03k, False: 0]
  ------------------
  708|  2.03k|  bundle = Curl_hash_pick(&cpool->dest2bundle,
  709|  2.03k|                          CURL_UNCONST(destination),
  ------------------
  |  |  856|  2.03k|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
  710|  2.03k|                          strlen(destination) + 1);
  711|  2.03k|  if(bundle) {
  ------------------
  |  Branch (711:6): [True: 0, False: 2.03k]
  ------------------
  712|      0|    struct Curl_llist_node *curr = Curl_llist_head(&bundle->conns);
  713|      0|    while(curr) {
  ------------------
  |  Branch (713:11): [True: 0, False: 0]
  ------------------
  714|      0|      struct connectdata *conn = Curl_node_elem(curr);
  715|       |      /* Get next node now. callback might discard current */
  716|      0|      curr = Curl_node_next(curr);
  717|       |
  718|      0|      if(conn_cb(conn, userdata)) {
  ------------------
  |  Branch (718:10): [True: 0, False: 0]
  ------------------
  719|      0|        found = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  720|      0|        break;
  721|      0|      }
  722|      0|    }
  723|      0|  }
  724|       |
  725|  2.03k|  if(done_cb) {
  ------------------
  |  Branch (725:6): [True: 2.03k, False: 0]
  ------------------
  726|  2.03k|    found = done_cb(userdata);
  727|  2.03k|  }
  728|  2.03k|  CPOOL_UNLOCK(cpool, data);
  ------------------
  |  |   53|  2.03k|  do {                                                                  \
  |  |   54|  2.03k|    if(c) {                                                             \
  |  |  ------------------
  |  |  |  Branch (54:8): [True: 2.03k, False: 0]
  |  |  ------------------
  |  |   55|  2.03k|      DEBUGASSERT((c)->locked);                                         \
  |  |  ------------------
  |  |  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |   56|  2.03k|      (c)->locked = FALSE;                                              \
  |  |  ------------------
  |  |  |  | 1048|  2.03k|#define FALSE false
  |  |  ------------------
  |  |   57|  2.03k|      if(CURL_SHARE_KEEP_CONNECT((c)->share))                           \
  |  |  ------------------
  |  |  |  |   41|  2.03k|  ((s) && ((s)->specifier & (1 << CURL_LOCK_DATA_CONNECT)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (41:4): [True: 0, False: 2.03k]
  |  |  |  |  |  Branch (41:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|  2.03k|        Curl_share_unlock_share((c)->share, (d), CURL_LOCK_DATA_CONNECT); \
  |  |   59|  2.03k|    }                                                                   \
  |  |   60|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (60:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  |  Branch (728:3): [True: 0, False: 2.03k]
  |  Branch (728:3): [True: 2.03k, False: 0]
  ------------------
  729|  2.03k|  return found;
  730|  2.03k|}
Curl_cpool_prune_dead:
  764|  2.03k|{
  765|  2.03k|  struct Curl_easy *admin;
  766|  2.03k|  timediff_t elapsed;
  767|       |
  768|  2.03k|  if(!cpool)
  ------------------
  |  Branch (768:6): [True: 0, False: 2.03k]
  ------------------
  769|      0|    return;
  770|       |
  771|  2.03k|  admin = Curl_get_admin(data);
  772|  2.03k|  CPOOL_LOCK(cpool, admin);
  ------------------
  |  |   42|  2.03k|  do {                                                                  \
  |  |   43|  2.03k|    if(c) {                                                             \
  |  |  ------------------
  |  |  |  Branch (43:8): [True: 2.03k, False: 0]
  |  |  ------------------
  |  |   44|  2.03k|      if(CURL_SHARE_KEEP_CONNECT((c)->share))                           \
  |  |  ------------------
  |  |  |  |   41|  2.03k|  ((s) && ((s)->specifier & (1 << CURL_LOCK_DATA_CONNECT)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (41:4): [True: 0, False: 2.03k]
  |  |  |  |  |  Branch (41:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   45|  2.03k|        Curl_share_lock_share((c)->share, (d), CURL_LOCK_DATA_CONNECT,  \
  |  |   46|      0|                        CURL_LOCK_ACCESS_SINGLE);                       \
  |  |   47|  2.03k|      DEBUGASSERT(!(c)->locked);                                        \
  |  |  ------------------
  |  |  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |   48|  2.03k|      (c)->locked = TRUE;                                               \
  |  |  ------------------
  |  |  |  | 1045|  2.03k|#define TRUE true
  |  |  ------------------
  |  |   49|  2.03k|    }                                                                   \
  |  |   50|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (50:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  |  Branch (772:3): [True: 0, False: 2.03k]
  |  Branch (772:3): [True: 2.03k, False: 0]
  ------------------
  773|  2.03k|  elapsed = curlx_ptimediff_ms(Curl_pgrs_now(admin), &cpool->last_cleanup);
  774|       |
  775|  2.03k|  if(elapsed >= 1000L) {
  ------------------
  |  Branch (775:6): [True: 2.03k, False: 0]
  ------------------
  776|  2.03k|    struct cpool_reaper_ctx reaper;
  777|       |
  778|  2.03k|    memset(&reaper, 0, sizeof(reaper));
  779|  2.03k|    reaper.now = *Curl_pgrs_now(admin);
  780|  2.03k|    while(cpool_foreach(admin, cpool, &reaper, cpool_reap_dead_cb))
  ------------------
  |  Branch (780:11): [True: 0, False: 2.03k]
  ------------------
  781|      0|      ;
  782|  2.03k|    cpool->last_cleanup = *Curl_pgrs_now(admin);
  783|  2.03k|  }
  784|       |  CPOOL_UNLOCK(cpool, admin);
  ------------------
  |  |   53|  2.03k|  do {                                                                  \
  |  |   54|  2.03k|    if(c) {                                                             \
  |  |  ------------------
  |  |  |  Branch (54:8): [True: 2.03k, False: 0]
  |  |  ------------------
  |  |   55|  2.03k|      DEBUGASSERT((c)->locked);                                         \
  |  |  ------------------
  |  |  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |   56|  2.03k|      (c)->locked = FALSE;                                              \
  |  |  ------------------
  |  |  |  | 1048|  2.03k|#define FALSE false
  |  |  ------------------
  |  |   57|  2.03k|      if(CURL_SHARE_KEEP_CONNECT((c)->share))                           \
  |  |  ------------------
  |  |  |  |   41|  2.03k|  ((s) && ((s)->specifier & (1 << CURL_LOCK_DATA_CONNECT)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (41:4): [True: 0, False: 2.03k]
  |  |  |  |  |  Branch (41:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|  2.03k|        Curl_share_unlock_share((c)->share, (d), CURL_LOCK_DATA_CONNECT); \
  |  |   59|  2.03k|    }                                                                   \
  |  |   60|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (60:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  |  Branch (784:3): [True: 0, False: 2.03k]
  |  Branch (784:3): [True: 2.03k, False: 0]
  ------------------
  785|  2.03k|}
Curl_cpool_do_locked:
  866|  2.03k|{
  867|  2.03k|  struct cpool *cpool = cpool_get_instance(data);
  868|  2.03k|  if(cpool) {
  ------------------
  |  Branch (868:6): [True: 2.03k, False: 0]
  ------------------
  869|  2.03k|    CPOOL_LOCK(cpool, data);
  ------------------
  |  |   42|  2.03k|  do {                                                                  \
  |  |   43|  2.03k|    if(c) {                                                             \
  |  |  ------------------
  |  |  |  Branch (43:8): [True: 2.03k, False: 0]
  |  |  ------------------
  |  |   44|  2.03k|      if(CURL_SHARE_KEEP_CONNECT((c)->share))                           \
  |  |  ------------------
  |  |  |  |   41|  2.03k|  ((s) && ((s)->specifier & (1 << CURL_LOCK_DATA_CONNECT)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (41:4): [True: 0, False: 2.03k]
  |  |  |  |  |  Branch (41:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   45|  2.03k|        Curl_share_lock_share((c)->share, (d), CURL_LOCK_DATA_CONNECT,  \
  |  |   46|      0|                        CURL_LOCK_ACCESS_SINGLE);                       \
  |  |   47|  2.03k|      DEBUGASSERT(!(c)->locked);                                        \
  |  |  ------------------
  |  |  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |   48|  2.03k|      (c)->locked = TRUE;                                               \
  |  |  ------------------
  |  |  |  | 1045|  2.03k|#define TRUE true
  |  |  ------------------
  |  |   49|  2.03k|    }                                                                   \
  |  |   50|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (50:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  |  Branch (869:5): [True: 0, False: 2.03k]
  |  Branch (869:5): [True: 2.03k, False: 0]
  ------------------
  870|  2.03k|    cb(conn, data, cbdata);
  871|  2.03k|    CPOOL_UNLOCK(cpool, data);
  ------------------
  |  |   53|  2.03k|  do {                                                                  \
  |  |   54|  2.03k|    if(c) {                                                             \
  |  |  ------------------
  |  |  |  Branch (54:8): [True: 2.03k, False: 0]
  |  |  ------------------
  |  |   55|  2.03k|      DEBUGASSERT((c)->locked);                                         \
  |  |  ------------------
  |  |  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |   56|  2.03k|      (c)->locked = FALSE;                                              \
  |  |  ------------------
  |  |  |  | 1048|  2.03k|#define FALSE false
  |  |  ------------------
  |  |   57|  2.03k|      if(CURL_SHARE_KEEP_CONNECT((c)->share))                           \
  |  |  ------------------
  |  |  |  |   41|  2.03k|  ((s) && ((s)->specifier & (1 << CURL_LOCK_DATA_CONNECT)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (41:4): [True: 0, False: 2.03k]
  |  |  |  |  |  Branch (41:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|  2.03k|        Curl_share_unlock_share((c)->share, (d), CURL_LOCK_DATA_CONNECT); \
  |  |   59|  2.03k|    }                                                                   \
  |  |   60|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (60:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  |  Branch (871:5): [True: 0, False: 2.03k]
  |  Branch (871:5): [True: 2.03k, False: 0]
  ------------------
  872|  2.03k|  }
  873|      0|  else
  874|      0|    cb(conn, data, cbdata);
  875|  2.03k|}
conncache.c:cpool_bundle_free_entry:
  109|  2.03k|{
  110|  2.03k|  cpool_bundle_destroy((struct cpool_bundle *)freethis);
  111|  2.03k|}
conncache.c:cpool_bundle_destroy:
   84|  2.03k|{
   85|  2.03k|  DEBUGASSERT(!Curl_llist_count(&bundle->conns));
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (85:3): [True: 0, False: 2.03k]
  |  Branch (85:3): [True: 2.03k, False: 0]
  ------------------
   86|  2.03k|  curlx_free(bundle);
  ------------------
  |  | 1476|  2.03k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   87|  2.03k|}
conncache.c:cpool_get_first:
  126|  2.53k|{
  127|  2.53k|  struct Curl_hash_iterator iter;
  128|  2.53k|  struct Curl_hash_element *he;
  129|  2.53k|  struct cpool_bundle *bundle;
  130|  2.53k|  struct Curl_llist_node *conn_node;
  131|       |
  132|  2.53k|  Curl_hash_start_iterate(&cpool->dest2bundle, &iter);
  133|  2.53k|  for(he = Curl_hash_next_element(&iter); he;
  ------------------
  |  Branch (133:43): [True: 0, False: 2.53k]
  ------------------
  134|  2.53k|      he = Curl_hash_next_element(&iter)) {
  135|      0|    bundle = he->ptr;
  136|      0|    conn_node = Curl_llist_head(&bundle->conns);
  137|      0|    if(conn_node)
  ------------------
  |  Branch (137:8): [True: 0, False: 0]
  ------------------
  138|      0|      return Curl_node_elem(conn_node);
  139|      0|  }
  140|  2.53k|  return NULL;
  141|  2.53k|}
conncache.c:cpool_remove_conn:
  160|  2.03k|{
  161|  2.03k|  struct Curl_llist *list = Curl_node_llist(&conn->cpool_node);
  162|  2.03k|  DEBUGASSERT(cpool);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (162:3): [True: 0, False: 2.03k]
  |  Branch (162:3): [True: 2.03k, False: 0]
  ------------------
  163|  2.03k|  if(list) {
  ------------------
  |  Branch (163:6): [True: 2.03k, False: 0]
  ------------------
  164|       |    /* The connection is certainly in the pool, but where? */
  165|  2.03k|    struct cpool_bundle *bundle = cpool_find_bundle(cpool, conn);
  166|  2.03k|    if(bundle && (list == &bundle->conns)) {
  ------------------
  |  Branch (166:8): [True: 2.03k, False: 0]
  |  Branch (166:18): [True: 2.03k, False: 0]
  ------------------
  167|  2.03k|      cpool_bundle_remove(bundle, conn);
  168|  2.03k|      if(!Curl_llist_count(&bundle->conns))
  ------------------
  |  Branch (168:10): [True: 2.03k, False: 0]
  ------------------
  169|  2.03k|        cpool_remove_bundle(cpool, bundle);
  170|  2.03k|      conn->bits.in_cpool = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  171|  2.03k|      cpool->num_conn--;
  172|  2.03k|    }
  173|      0|    else {
  174|       |      /* Should have been in the bundle list */
  175|       |      DEBUGASSERT(NULL);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (175:7): [True: 0, False: 0]
  |  Branch (175:7): [True: 0, False: 0]
  ------------------
  176|      0|    }
  177|  2.03k|  }
  178|  2.03k|}
conncache.c:cpool_bundle_remove:
  101|  2.03k|{
  102|  2.03k|  (void)bundle;
  103|  2.03k|  DEBUGASSERT(Curl_node_llist(&conn->cpool_node) == &bundle->conns);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (103:3): [True: 0, False: 2.03k]
  |  Branch (103:3): [True: 2.03k, False: 0]
  ------------------
  104|  2.03k|  Curl_node_remove(&conn->cpool_node);
  105|       |  conn->bits.in_cpool = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  106|  2.03k|}
conncache.c:cpool_remove_bundle:
  152|  2.03k|{
  153|  2.03k|  if(!cpool)
  ------------------
  |  Branch (153:6): [True: 0, False: 2.03k]
  ------------------
  154|      0|    return;
  155|  2.03k|  Curl_hash_delete(&cpool->dest2bundle, bundle->dest, bundle->dest_len);
  156|  2.03k|}
conncache.c:cpool_discard_conn:
  184|  2.03k|{
  185|  2.03k|  struct cshutdn *cshutdn;
  186|  2.03k|  struct Curl_easy *admin;
  187|  2.03k|  bool done = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  188|       |
  189|  2.03k|  DEBUGASSERT(data);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (189:3): [True: 0, False: 2.03k]
  |  Branch (189:3): [True: 2.03k, False: 0]
  ------------------
  190|  2.03k|  DEBUGASSERT(!data->conn);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (190:3): [True: 0, False: 2.03k]
  |  Branch (190:3): [True: 2.03k, False: 0]
  ------------------
  191|  2.03k|  DEBUGASSERT(cpool);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (191:3): [True: 0, False: 2.03k]
  |  Branch (191:3): [True: 2.03k, False: 0]
  ------------------
  192|  2.03k|  DEBUGASSERT(!conn->bits.in_cpool);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (192:3): [True: 0, False: 2.03k]
  |  Branch (192:3): [True: 2.03k, False: 0]
  ------------------
  193|       |
  194|  2.03k|  admin = Curl_get_admin(data);
  195|       |  /*
  196|       |   * If this connection is not marked to force-close, leave it open if there
  197|       |   * are other users of it
  198|       |   */
  199|  2.03k|  if(CONN_INUSE(conn) && !aborted) {
  ------------------
  |  |  357|  4.07k|#define CONN_INUSE(c) (!!(c)->attached_xfers)
  |  |  ------------------
  |  |  |  Branch (357:23): [True: 0, False: 2.03k]
  |  |  ------------------
  ------------------
  |  Branch (199:26): [True: 0, False: 0]
  ------------------
  200|      0|    CURL_TRC_M(admin, "[CPOOL] not discarding #%" FMT_OFF_T
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  201|      0|               " still in use by %u transfers", conn->connection_id,
  202|      0|               conn->attached_xfers);
  203|      0|    return;
  204|      0|  }
  205|       |
  206|       |  /* treat the connection as aborted in CONNECT_ONLY situations, we do
  207|       |   * not know what the APP did with it. */
  208|  2.03k|  if(conn->bits.connect_only)
  ------------------
  |  Branch (208:6): [True: 0, False: 2.03k]
  ------------------
  209|      0|    aborted = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  210|  2.03k|  conn->bits.aborted = aborted;
  211|       |
  212|       |  /* We do not shutdown dead connections. The term 'dead' can be misleading
  213|       |   * here, as we also mark errored connections/transfers as 'dead'.
  214|       |   * If we do a shutdown for an aborted transfer, the server might think
  215|       |   * it was successful otherwise (for example an ftps: upload). This is
  216|       |   * not what we want. */
  217|  2.03k|  if(aborted)
  ------------------
  |  Branch (217:6): [True: 0, False: 2.03k]
  ------------------
  218|      0|    done = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  219|  2.03k|  if(!done) {
  ------------------
  |  Branch (219:6): [True: 2.03k, False: 0]
  ------------------
  220|       |    /* Attempt to shutdown the connection right away. */
  221|  2.03k|    Curl_conn_shutdown_once(admin, conn, &done);
  222|  2.03k|  }
  223|       |
  224|  2.03k|  cshutdn = Curl_cshutdn_get(data);
  225|  2.03k|  if(done || !cshutdn)
  ------------------
  |  Branch (225:6): [True: 2.03k, False: 0]
  |  Branch (225:14): [True: 0, False: 0]
  ------------------
  226|  2.03k|    Curl_conn_terminate(admin, conn, FALSE);
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  227|      0|  else
  228|      0|    Curl_cshutdn_add(cshutdn, conn, cpool->num_conn);
  229|  2.03k|}
conncache.c:cpool_get_instance:
  257|  14.7k|{
  258|       |  /* admin handles do not necessarily find the correct pool */
  259|  14.7k|  DEBUGASSERT(data->mid);
  ------------------
  |  | 1075|  14.7k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (259:3): [True: 0, False: 14.7k]
  |  Branch (259:3): [True: 14.7k, False: 0]
  ------------------
  260|  14.7k|  if(CURL_SHARE_KEEP_CONNECT(data->share))
  ------------------
  |  |   41|  14.7k|  ((s) && ((s)->specifier & (1 << CURL_LOCK_DATA_CONNECT)))
  |  |  ------------------
  |  |  |  Branch (41:4): [True: 0, False: 14.7k]
  |  |  |  Branch (41:11): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  261|      0|    return &data->share->cpool;
  262|  14.7k|  else if(data->multi_easy)
  ------------------
  |  Branch (262:11): [True: 0, False: 14.7k]
  ------------------
  263|      0|    return &data->multi_easy->cpool;
  264|  14.7k|  else if(data->multi)
  ------------------
  |  Branch (264:11): [True: 14.7k, False: 0]
  ------------------
  265|  14.7k|    return &data->multi->cpool;
  266|      0|  return NULL;
  267|  14.7k|}
conncache.c:cpool_conn_close:
  379|  2.03k|{
  380|  2.03k|  struct Curl_easy *admin;
  381|  2.03k|  bool do_lock;
  382|       |
  383|  2.03k|  DEBUGASSERT(cpool);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (383:3): [True: 0, False: 2.03k]
  |  Branch (383:3): [True: 2.03k, False: 0]
  ------------------
  384|  2.03k|  DEBUGASSERT(data && !data->conn);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (384:3): [True: 0, False: 2.03k]
  |  Branch (384:3): [True: 0, False: 0]
  |  Branch (384:3): [True: 2.03k, False: 0]
  |  Branch (384:3): [True: 2.03k, False: 0]
  ------------------
  385|  2.03k|  if(!cpool)
  ------------------
  |  Branch (385:6): [True: 0, False: 2.03k]
  ------------------
  386|      0|    return;
  387|       |
  388|       |  /* If this connection is not marked to force-close, leave it open if there
  389|       |   * are other users of it */
  390|  2.03k|  if(CONN_INUSE(conn) && !aborted) {
  ------------------
  |  |  357|  4.07k|#define CONN_INUSE(c) (!!(c)->attached_xfers)
  |  |  ------------------
  |  |  |  Branch (357:23): [True: 0, False: 2.03k]
  |  |  ------------------
  ------------------
  |  Branch (390:26): [True: 0, False: 0]
  ------------------
  391|      0|    DEBUGASSERT(0); /* does this ever happen? */
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (391:5): [Folded, False: 0]
  |  Branch (391:5): [Folded, False: 0]
  ------------------
  392|      0|    DEBUGF(infof(data, "conn terminate when inuse: %u", conn->attached_xfers));
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  |  |  ------------------
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [Folded, False: 0]
  |  |  ------------------
  ------------------
  393|      0|    return;
  394|      0|  }
  395|       |
  396|       |  /* This method may be called while we are under lock, e.g. from a
  397|       |   * user callback in find. */
  398|  2.03k|  admin = Curl_get_admin(data);
  399|  2.03k|  do_lock = !CPOOL_IS_LOCKED(cpool);
  ------------------
  |  |   39|  2.03k|#define CPOOL_IS_LOCKED(c)    ((c) && (c)->locked)
  |  |  ------------------
  |  |  |  Branch (39:32): [True: 2.03k, False: 0]
  |  |  |  Branch (39:39): [True: 2.03k, False: 0]
  |  |  ------------------
  ------------------
  400|  2.03k|  if(do_lock)
  ------------------
  |  Branch (400:6): [True: 0, False: 2.03k]
  ------------------
  401|      0|    CPOOL_LOCK(cpool, admin);
  ------------------
  |  |   42|      0|  do {                                                                  \
  |  |   43|      0|    if(c) {                                                             \
  |  |  ------------------
  |  |  |  Branch (43:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   44|      0|      if(CURL_SHARE_KEEP_CONNECT((c)->share))                           \
  |  |  ------------------
  |  |  |  |   41|      0|  ((s) && ((s)->specifier & (1 << CURL_LOCK_DATA_CONNECT)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (41:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (41:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   45|      0|        Curl_share_lock_share((c)->share, (d), CURL_LOCK_DATA_CONNECT,  \
  |  |   46|      0|                        CURL_LOCK_ACCESS_SINGLE);                       \
  |  |   47|      0|      DEBUGASSERT(!(c)->locked);                                        \
  |  |  ------------------
  |  |  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |   48|      0|      (c)->locked = TRUE;                                               \
  |  |  ------------------
  |  |  |  | 1045|      0|#define TRUE true
  |  |  ------------------
  |  |   49|      0|    }                                                                   \
  |  |   50|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (50:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (401:5): [True: 0, False: 0]
  |  Branch (401:5): [True: 0, False: 0]
  ------------------
  402|       |
  403|  2.03k|  if(conn->bits.in_cpool) {
  ------------------
  |  Branch (403:6): [True: 2.03k, False: 0]
  ------------------
  404|  2.03k|    cpool_remove_conn(cpool, conn);
  405|  2.03k|    DEBUGASSERT(!conn->bits.in_cpool);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (405:5): [True: 0, False: 2.03k]
  |  Branch (405:5): [True: 2.03k, False: 0]
  ------------------
  406|  2.03k|  }
  407|       |
  408|       |  /* treat the connection as aborted in CONNECT_ONLY situations,
  409|       |   * so no graceful shutdown is attempted. */
  410|  2.03k|  if(conn->bits.connect_only)
  ------------------
  |  Branch (410:6): [True: 0, False: 2.03k]
  ------------------
  411|      0|    aborted = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  412|       |
  413|  2.03k|  if(data->multi) {
  ------------------
  |  Branch (413:6): [True: 2.03k, False: 0]
  ------------------
  414|       |    /* Add it to the multi's cpool for shutdown handling */
  415|  2.03k|    infof(data, "%s connection #%" FMT_OFF_T,
  ------------------
  |  |  143|  2.03k|  do {                               \
  |  |  144|  2.03k|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|  2.03k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|  2.03k|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|  4.07k|      Curl_infof(data, __VA_ARGS__); \
  |  |  ------------------
  |  |  |  Branch (145:24): [True: 0, False: 2.03k]
  |  |  ------------------
  |  |  146|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  416|  2.03k|          aborted ? "closing" : "shutting down", conn->connection_id);
  417|  2.03k|    cpool_discard_conn(&data->multi->cpool, data, conn, aborted);
  418|  2.03k|  }
  419|      0|  else {
  420|       |    /* No multi available, terminate */
  421|      0|    infof(data, "closing connection #%" FMT_OFF_T, conn->connection_id);
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  422|      0|    Curl_conn_terminate(admin, conn, !aborted);
  423|      0|  }
  424|       |
  425|  2.03k|  if(do_lock)
  ------------------
  |  Branch (425:6): [True: 0, False: 2.03k]
  ------------------
  426|       |    CPOOL_UNLOCK(cpool, admin);
  ------------------
  |  |   53|      0|  do {                                                                  \
  |  |   54|      0|    if(c) {                                                             \
  |  |  ------------------
  |  |  |  Branch (54:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   55|      0|      DEBUGASSERT((c)->locked);                                         \
  |  |  ------------------
  |  |  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |   56|      0|      (c)->locked = FALSE;                                              \
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  |  |   57|      0|      if(CURL_SHARE_KEEP_CONNECT((c)->share))                           \
  |  |  ------------------
  |  |  |  |   41|      0|  ((s) && ((s)->specifier & (1 << CURL_LOCK_DATA_CONNECT)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (41:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (41:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|      0|        Curl_share_unlock_share((c)->share, (d), CURL_LOCK_DATA_CONNECT); \
  |  |   59|      0|    }                                                                   \
  |  |   60|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (60:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (426:5): [True: 0, False: 0]
  |  Branch (426:5): [True: 0, False: 0]
  ------------------
  427|  2.03k|}
conncache.c:cpool_find_bundle:
  145|  4.07k|{
  146|  4.07k|  return Curl_hash_pick(&cpool->dest2bundle,
  147|  4.07k|                        conn->destination, strlen(conn->destination) + 1);
  148|  4.07k|}
conncache.c:cpool_add_bundle:
  298|  2.03k|{
  299|  2.03k|  struct cpool_bundle *bundle;
  300|       |
  301|  2.03k|  bundle = cpool_bundle_create(conn->destination);
  302|  2.03k|  if(!bundle)
  ------------------
  |  Branch (302:6): [True: 0, False: 2.03k]
  ------------------
  303|      0|    return NULL;
  304|       |
  305|  2.03k|  if(!Curl_hash_add(&cpool->dest2bundle,
  ------------------
  |  Branch (305:6): [True: 0, False: 2.03k]
  ------------------
  306|  2.03k|                    bundle->dest, bundle->dest_len, bundle)) {
  307|      0|    cpool_bundle_destroy(bundle);
  308|      0|    return NULL;
  309|      0|  }
  310|  2.03k|  return bundle;
  311|  2.03k|}
conncache.c:cpool_bundle_create:
   70|  2.03k|{
   71|  2.03k|  struct cpool_bundle *bundle;
   72|  2.03k|  size_t dest_len = strlen(dest) + 1;
   73|       |
   74|  2.03k|  bundle = curlx_calloc(1, sizeof(*bundle) + dest_len - 1);
  ------------------
  |  | 1473|  2.03k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
   75|  2.03k|  if(!bundle)
  ------------------
  |  Branch (75:6): [True: 0, False: 2.03k]
  ------------------
   76|      0|    return NULL;
   77|  2.03k|  Curl_llist_init(&bundle->conns, NULL);
   78|  2.03k|  bundle->dest_len = dest_len;
   79|  2.03k|  memcpy(bundle->dest, dest, bundle->dest_len);
   80|  2.03k|  return bundle;
   81|  2.03k|}
conncache.c:cpool_bundle_add:
   92|  2.03k|{
   93|  2.03k|  DEBUGASSERT(!Curl_node_llist(&conn->cpool_node));
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (93:3): [True: 0, False: 2.03k]
  |  Branch (93:3): [True: 2.03k, False: 0]
  ------------------
   94|  2.03k|  Curl_llist_append(&bundle->conns, conn, &conn->cpool_node);
   95|       |  conn->bits.in_cpool = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
   96|  2.03k|}
conncache.c:cpool_foreach:
  605|  2.03k|{
  606|  2.03k|  struct Curl_hash_iterator iter;
  607|  2.03k|  struct Curl_hash_element *he;
  608|       |
  609|  2.03k|  if(!cpool)
  ------------------
  |  Branch (609:6): [True: 0, False: 2.03k]
  ------------------
  610|      0|    return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  611|       |
  612|  2.03k|  Curl_hash_start_iterate(&cpool->dest2bundle, &iter);
  613|       |
  614|  2.03k|  he = Curl_hash_next_element(&iter);
  615|  2.03k|  while(he) {
  ------------------
  |  Branch (615:9): [True: 0, False: 2.03k]
  ------------------
  616|      0|    struct Curl_llist_node *curr;
  617|      0|    struct cpool_bundle *bundle = he->ptr;
  618|      0|    he = Curl_hash_next_element(&iter);
  619|       |
  620|      0|    curr = Curl_llist_head(&bundle->conns);
  621|      0|    while(curr) {
  ------------------
  |  Branch (621:11): [True: 0, False: 0]
  ------------------
  622|       |      /* Yes, we need to update curr before calling func(), because func()
  623|       |         might decide to remove the connection */
  624|      0|      struct connectdata *conn = Curl_node_elem(curr);
  625|      0|      curr = Curl_node_next(curr);
  626|       |
  627|      0|      if(func(cpool, data, conn, param) == 1) {
  ------------------
  |  Branch (627:10): [True: 0, False: 0]
  ------------------
  628|      0|        return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  629|      0|      }
  630|      0|    }
  631|      0|  }
  632|  2.03k|  return FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  633|  2.03k|}

timeleft_now_ms:
   74|  17.2k|{
   75|  17.2k|  timediff_t timeleft_ms = 0;
   76|  17.2k|  timediff_t ctimeleft_ms = 0;
   77|       |
   78|  17.2k|  if(data->conn && Curl_shutdown_started(data->conn, FIRSTSOCKET))
  ------------------
  |  |  234|  14.1k|#define FIRSTSOCKET     0
  ------------------
  |  Branch (78:6): [True: 14.1k, False: 3.04k]
  |  Branch (78:20): [True: 0, False: 14.1k]
  ------------------
   79|      0|    return Curl_shutdown_timeleft(data, data->conn, FIRSTSOCKET);
  ------------------
  |  |  234|      0|#define FIRSTSOCKET     0
  ------------------
   80|  17.2k|  else if(Curl_is_connecting(data)) {
  ------------------
  |  Branch (80:11): [True: 11.1k, False: 6.04k]
  ------------------
   81|  11.1k|    timediff_t ctimeout_ms = (data->set.connecttimeout > 0) ?
  ------------------
  |  Branch (81:30): [True: 11.1k, False: 0]
  ------------------
   82|  11.1k|      data->set.connecttimeout : DEFAULT_CONNECT_TIMEOUT;
  ------------------
  |  |   42|      0|#define DEFAULT_CONNECT_TIMEOUT 300000 /* milliseconds == five minutes */
  ------------------
   83|  11.1k|    ctimeleft_ms = ctimeout_ms -
   84|  11.1k|      Curl_pgrs_since_ms(data, pnow, TIMER_STARTSINGLE);
   85|  11.1k|    if(!ctimeleft_ms)
  ------------------
  |  Branch (85:8): [True: 0, False: 11.1k]
  ------------------
   86|      0|      ctimeleft_ms = -1; /* 0 is "no limit", fake 1 ms expiry */
   87|  11.1k|  }
   88|  6.04k|  else if(!data->set.timeout || data->set.connect_only) {
  ------------------
  |  Branch (88:11): [True: 0, False: 6.04k]
  |  Branch (88:33): [True: 0, False: 6.04k]
  ------------------
   89|      0|    return 0; /* no timeout in place or checked, return "no limit" */
   90|      0|  }
   91|       |
   92|  17.2k|  if(data->set.timeout) {
  ------------------
  |  Branch (92:6): [True: 17.2k, False: 0]
  ------------------
   93|  17.2k|    timeleft_ms = data->set.timeout -
   94|  17.2k|                  Curl_pgrs_since_ms(data, pnow, TIMER_STARTOP);
   95|  17.2k|    if(!timeleft_ms)
  ------------------
  |  Branch (95:8): [True: 0, False: 17.2k]
  ------------------
   96|      0|      timeleft_ms = -1; /* 0 is "no limit", fake 1 ms expiry */
   97|  17.2k|  }
   98|       |
   99|  17.2k|  if(!ctimeleft_ms)
  ------------------
  |  Branch (99:6): [True: 6.04k, False: 11.1k]
  ------------------
  100|  6.04k|    return timeleft_ms;
  101|  11.1k|  else if(!timeleft_ms)
  ------------------
  |  Branch (101:11): [True: 0, False: 11.1k]
  ------------------
  102|      0|    return ctimeleft_ms;
  103|  11.1k|  return CURLMIN(ctimeleft_ms, timeleft_ms);
  ------------------
  |  | 1288|  11.1k|#define CURLMIN(x, y) ((x) < (y) ? (x) : (y))
  |  |  ------------------
  |  |  |  Branch (1288:24): [True: 0, False: 11.1k]
  |  |  ------------------
  ------------------
  104|  17.2k|}
Curl_timeleft_ms:
  107|  4.36k|{
  108|  4.36k|  return timeleft_now_ms(data, Curl_pgrs_now(data));
  109|  4.36k|}
Curl_timeleft_now_ms:
  113|  12.8k|{
  114|  12.8k|  return timeleft_now_ms(data, pnow);
  115|  12.8k|}
Curl_shutdown_start:
  119|  2.03k|{
  120|  2.03k|  struct connectdata *conn = data->conn;
  121|       |
  122|  2.03k|  DEBUGASSERT(conn);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (122:3): [True: 0, False: 2.03k]
  |  Branch (122:3): [True: 2.03k, False: 0]
  ------------------
  123|  2.03k|  conn->shutdown.start[sockindex] = *Curl_pgrs_now(data);
  124|  2.03k|  conn->shutdown.timeout_ms = (timeout_ms > 0) ?
  ------------------
  |  Branch (124:31): [True: 0, False: 2.03k]
  ------------------
  125|      0|    (timediff_t)timeout_ms :
  126|  2.03k|    ((data->set.shutdowntimeout > 0) ?
  ------------------
  |  Branch (126:6): [True: 0, False: 2.03k]
  ------------------
  127|  2.03k|     data->set.shutdowntimeout : DEFAULT_SHUTDOWN_TIMEOUT_MS);
  ------------------
  |  |   44|  2.03k|#define DEFAULT_SHUTDOWN_TIMEOUT_MS   (2 * 1000)
  ------------------
  128|       |  /* Set a timer, unless we operate on the admin handle */
  129|  2.03k|  if(data->mid)
  ------------------
  |  Branch (129:6): [True: 0, False: 2.03k]
  ------------------
  130|      0|    Curl_expire(data, conn->shutdown.timeout_ms, EXPIRE_SHUTDOWN);
  131|  2.03k|  CURL_TRC_M(data, "shutdown start on%s connection",
  ------------------
  |  |  148|  2.03k|  do {                                   \
  |  |  149|  2.03k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  2.03k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.03k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 2.03k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.03k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  2.03k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  ------------------
  |  |  |  Branch (150:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  151|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  132|  2.03k|             sockindex ? " secondary" : "");
  133|  2.03k|}
Curl_shutdown_timeleft:
  138|  2.03k|{
  139|  2.03k|  timediff_t left_ms;
  140|       |
  141|  2.03k|  if(!conn->shutdown.start[sockindex].tv_sec ||
  ------------------
  |  Branch (141:6): [True: 0, False: 2.03k]
  ------------------
  142|  2.03k|     (conn->shutdown.timeout_ms <= 0))
  ------------------
  |  Branch (142:6): [True: 0, False: 2.03k]
  ------------------
  143|      0|    return 0; /* not started or no limits */
  144|       |
  145|  2.03k|  left_ms = conn->shutdown.timeout_ms -
  146|  2.03k|            curlx_ptimediff_ms(Curl_pgrs_now(data),
  147|  2.03k|                               &conn->shutdown.start[sockindex]);
  148|  2.03k|  return left_ms ? left_ms : -1;
  ------------------
  |  Branch (148:10): [True: 2.03k, False: 0]
  ------------------
  149|  2.03k|}
Curl_shutdown_started:
  174|  18.2k|{
  175|  18.2k|  const struct curltime *pt = &conn->shutdown.start[sockindex];
  176|  18.2k|  return (pt->tv_sec > 0) || (pt->tv_usec > 0);
  ------------------
  |  Branch (176:10): [True: 2.03k, False: 16.2k]
  |  Branch (176:30): [True: 0, False: 16.2k]
  ------------------
  177|  18.2k|}
Curl_conncontrol:
  216|  2.03k|{
  217|  2.03k|  if(!conn) {
  ------------------
  |  Branch (217:6): [True: 0, False: 2.03k]
  ------------------
  218|      0|    DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (218:5): [Folded, False: 0]
  |  Branch (218:5): [Folded, False: 0]
  ------------------
  219|      0|    return;
  220|      0|  }
  221|  2.03k|  switch(ctrl) {
  222|      0|    case CONNCTRL_CONN_KEEP:
  ------------------
  |  |   83|      0|#define CONNCTRL_CONN_KEEP       0
  ------------------
  |  Branch (222:5): [True: 0, False: 2.03k]
  ------------------
  223|      0|      conn->bits.close = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  224|      0|      break;
  225|  2.03k|    case CONNCTRL_CONN_CLOSE:
  ------------------
  |  |   84|  2.03k|#define CONNCTRL_CONN_CLOSE      1
  ------------------
  |  Branch (225:5): [True: 2.03k, False: 0]
  ------------------
  226|  2.03k|      conn->bits.close = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  227|  2.03k|      break;
  228|      0|    case CONNCTRL_STREAM_CLOSE:
  ------------------
  |  |   85|      0|#define CONNCTRL_STREAM_CLOSE    2
  ------------------
  |  Branch (228:5): [True: 0, False: 2.03k]
  ------------------
  229|       |      /* stream close when multiplexing does not affect connection */
  230|      0|      if(!Curl_conn_is_multiplex(conn, FIRSTSOCKET))
  ------------------
  |  |  234|      0|#define FIRSTSOCKET     0
  ------------------
  |  Branch (230:10): [True: 0, False: 0]
  ------------------
  231|      0|        conn->bits.close = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  232|      0|      break;
  233|      0|    default:
  ------------------
  |  Branch (233:5): [True: 0, False: 2.03k]
  ------------------
  234|      0|      DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (234:7): [Folded, False: 0]
  |  Branch (234:7): [Folded, False: 0]
  ------------------
  235|      0|      break;
  236|  2.03k|  }
  237|  2.03k|}
Curl_conn_setup:
  243|  2.03k|{
  244|  2.03k|  struct Curl_peer *first_peer = Curl_conn_get_first_peer(conn, sockindex);
  245|  2.03k|  CURLcode result = CURLE_OK;
  246|  2.03k|  uint8_t dns_queries;
  247|       |
  248|  2.03k|  DEBUGASSERT(data);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (248:3): [True: 0, False: 2.03k]
  |  Branch (248:3): [True: 2.03k, False: 0]
  ------------------
  249|  2.03k|  DEBUGASSERT(conn->scheme);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (249:3): [True: 0, False: 2.03k]
  |  Branch (249:3): [True: 2.03k, False: 0]
  ------------------
  250|  2.03k|  DEBUGASSERT(!conn->cfilter[sockindex]);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (250:3): [True: 0, False: 2.03k]
  |  Branch (250:3): [True: 2.03k, False: 0]
  ------------------
  251|       |
  252|  2.03k|  if(!first_peer)
  ------------------
  |  Branch (252:6): [True: 0, False: 2.03k]
  ------------------
  253|      0|    return CURLE_FAILED_INIT;
  254|       |
  255|  2.03k|#ifndef CURL_DISABLE_HTTP
  256|  2.03k|  if(!conn->cfilter[sockindex] &&
  ------------------
  |  Branch (256:6): [True: 2.03k, False: 0]
  ------------------
  257|  2.03k|     conn->scheme->protocol == CURLPROTO_HTTPS) {
  ------------------
  |  | 1089|  2.03k|#define CURLPROTO_HTTPS   (1L << 1)
  ------------------
  |  Branch (257:6): [True: 0, False: 2.03k]
  ------------------
  258|      0|    DEBUGASSERT(ssl_mode != CURL_CF_SSL_DISABLE);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (258:5): [True: 0, False: 0]
  |  Branch (258:5): [True: 0, False: 0]
  ------------------
  259|      0|    result = Curl_cf_https_setup(
  260|      0|      data, Curl_conn_get_destination(conn, sockindex), conn, sockindex);
  261|      0|    if(result)
  ------------------
  |  Branch (261:8): [True: 0, False: 0]
  ------------------
  262|      0|      goto out;
  263|      0|  }
  264|  2.03k|#endif /* !CURL_DISABLE_HTTP */
  265|       |
  266|       |  /* Still no cfilter set, apply default. */
  267|  2.03k|  if(!conn->cfilter[sockindex]) {
  ------------------
  |  Branch (267:6): [True: 2.03k, False: 0]
  ------------------
  268|  2.03k|    result = Curl_cf_setup_add(data, conn, sockindex,
  269|  2.03k|                               conn->transport_wanted, ssl_mode);
  270|  2.03k|    if(result)
  ------------------
  |  Branch (270:8): [True: 0, False: 2.03k]
  ------------------
  271|      0|      goto out;
  272|  2.03k|  }
  273|       |
  274|       |  /* Whatever the filter chain will be in the end, it will need the
  275|       |   * resolving of `first_peer`. Add that now so the resolve is started
  276|       |   * right away. */
  277|  2.03k|  dns_queries = Curl_resolv_dns_queries(data, conn->ip_version);
  278|  2.03k|  result = Curl_conn_dns_add_addr_resolve(data, conn, sockindex,
  279|  2.03k|                                          first_peer, dns_queries,
  280|  2.03k|                                          conn->transport_wanted);
  281|  2.03k|  if(result)
  ------------------
  |  Branch (281:6): [True: 0, False: 2.03k]
  ------------------
  282|      0|    goto out;
  283|       |
  284|  2.03k|  DEBUGASSERT(conn->cfilter[sockindex]);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (284:3): [True: 0, False: 2.03k]
  |  Branch (284:3): [True: 2.03k, False: 0]
  ------------------
  285|  2.03k|out:
  286|  2.03k|  return result;
  287|  2.03k|}
Curl_conn_connect:
  327|  2.03k|{
  328|  2.03k|#define CF_CONN_NUM_POLLS_ON_STACK 5
  329|  2.03k|  struct pollfd a_few_on_stack[CF_CONN_NUM_POLLS_ON_STACK];
  330|  2.03k|  struct easy_pollset ps;
  331|  2.03k|  struct curl_pollfds cpfds;
  332|  2.03k|  struct Curl_cfilter *cf;
  333|  2.03k|  CURLcode result = CURLE_OK;
  334|       |
  335|  2.03k|  DEBUGASSERT(data);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (335:3): [True: 0, False: 2.03k]
  |  Branch (335:3): [True: 2.03k, False: 0]
  ------------------
  336|  2.03k|  DEBUGASSERT(data->conn);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (336:3): [True: 0, False: 2.03k]
  |  Branch (336:3): [True: 2.03k, False: 0]
  ------------------
  337|  2.03k|  if(!CONN_SOCK_IDX_VALID(sockindex))
  ------------------
  |  |  311|  2.03k|#define CONN_SOCK_IDX_VALID(i)    (((i) >= 0) && ((i) < 2))
  |  |  ------------------
  |  |  |  Branch (311:36): [True: 2.03k, False: 0]
  |  |  |  Branch (311:50): [True: 2.03k, False: 0]
  |  |  ------------------
  ------------------
  338|      0|    return CURLE_BAD_FUNCTION_ARGUMENT;
  339|       |
  340|  2.03k|  if(data->conn->scheme->flags & PROTOPT_NONETWORK) {
  ------------------
  |  |  214|  2.03k|#define PROTOPT_NONETWORK (1 << 4) /* protocol does not use the network! */
  ------------------
  |  Branch (340:6): [True: 0, False: 2.03k]
  ------------------
  341|      0|    *done = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  342|      0|    return CURLE_OK;
  343|      0|  }
  344|       |
  345|  2.03k|  cf = data->conn->cfilter[sockindex];
  346|  2.03k|  if(!cf) {
  ------------------
  |  Branch (346:6): [True: 0, False: 2.03k]
  ------------------
  347|      0|    *done = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  348|      0|    return CURLE_FAILED_INIT;
  349|      0|  }
  350|       |
  351|  2.03k|  *done = (bool)cf->connected;
  352|  2.03k|  if(*done)
  ------------------
  |  Branch (352:6): [True: 0, False: 2.03k]
  ------------------
  353|      0|    return CURLE_OK;
  354|       |
  355|  2.03k|  Curl_pollset_init(&ps);
  356|  2.03k|  Curl_pollfds_init(&cpfds, a_few_on_stack, CF_CONN_NUM_POLLS_ON_STACK);
  ------------------
  |  |  328|  2.03k|#define CF_CONN_NUM_POLLS_ON_STACK 5
  ------------------
  357|  2.03k|  while(!*done) {
  ------------------
  |  Branch (357:9): [True: 2.03k, False: 0]
  ------------------
  358|  2.03k|    if(Curl_conn_needs_flush(data, sockindex)) {
  ------------------
  |  Branch (358:8): [True: 0, False: 2.03k]
  ------------------
  359|      0|      DEBUGF(infof(data, "Curl_conn_connect(index=%d), flush", sockindex));
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  |  |  ------------------
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [Folded, False: 0]
  |  |  ------------------
  ------------------
  360|      0|      result = Curl_conn_flush(data, sockindex);
  361|      0|      if(result && (result != CURLE_AGAIN))
  ------------------
  |  Branch (361:10): [True: 0, False: 0]
  |  Branch (361:20): [True: 0, False: 0]
  ------------------
  362|      0|        goto out;
  363|      0|    }
  364|       |
  365|  2.03k|    result = cf->cft->do_connect(cf, data, done);
  366|  2.03k|    CURL_TRC_CF(data, cf, "Curl_conn_connect(block=%d) -> %d, done=%d",
  ------------------
  |  |  153|  2.03k|  do {                                          \
  |  |  154|  2.03k|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|  2.03k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|  2.03k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 2.03k, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|  2.03k|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  367|  2.03k|                blocking, (int)result, *done);
  368|  2.03k|    if(!result && *done) {
  ------------------
  |  Branch (368:8): [True: 2.03k, False: 0]
  |  Branch (368:19): [True: 2.03k, False: 0]
  ------------------
  369|       |      /* A final sanity check on connection security */
  370|  2.03k|      if((data->state.origin->scheme->flags & PROTOPT_SSL) &&
  ------------------
  |  |  207|  2.03k|#define PROTOPT_SSL (1 << 0)       /* uses SSL */
  ------------------
  |  Branch (370:10): [True: 0, False: 2.03k]
  ------------------
  371|      0|         (sockindex == FIRSTSOCKET) &&
  ------------------
  |  |  234|      0|#define FIRSTSOCKET     0
  ------------------
  |  Branch (371:10): [True: 0, False: 0]
  ------------------
  372|      0|         !Curl_conn_is_ssl(data->conn, FIRSTSOCKET)) {
  ------------------
  |  |  234|      0|#define FIRSTSOCKET     0
  ------------------
  |  Branch (372:10): [True: 0, False: 0]
  ------------------
  373|      0|        DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (373:9): [Folded, False: 0]
  |  Branch (373:9): [Folded, False: 0]
  ------------------
  374|      0|        failf(data, "transfer requires SSL, but not connected via SSL");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  375|      0|        result = CURLE_FAILED_INIT;
  376|      0|        goto out;
  377|      0|      }
  378|       |      /* Now that the complete filter chain is connected, let all filters
  379|       |       * persist information at the connection. E.g. cf-socket sets the
  380|       |       * socket and ip related information. */
  381|  2.03k|      Curl_conn_cntrl_update_info(data, data->conn);
  382|  2.03k|      conn_report_stats(data, sockindex);
  383|  2.03k|      data->conn->lastupkeep = *Curl_pgrs_now(data);
  384|  2.03k|      VERBOSE(result = conn_connect_trace(data, cf));
  ------------------
  |  | 1611|  2.03k|#define VERBOSE(x) x
  ------------------
  385|  2.03k|      VERBOSE(Curl_conn_trc_filters(data, sockindex, "connected"));
  ------------------
  |  | 1611|  2.03k|#define VERBOSE(x) x
  ------------------
  386|  2.03k|      Curl_conn_remove_setup_filters(data, sockindex);
  387|  2.03k|      VERBOSE(Curl_conn_trc_filters(data, sockindex, "reduced to"));
  ------------------
  |  | 1611|  2.03k|#define VERBOSE(x) x
  ------------------
  388|  2.03k|      goto out;
  389|  2.03k|    }
  390|      0|    else if(result) {
  ------------------
  |  Branch (390:13): [True: 0, False: 0]
  ------------------
  391|      0|      CURL_TRC_CF(data, cf, "Curl_conn_connect(), filter returned %d",
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  392|      0|                  (int)result);
  393|      0|      VERBOSE(Curl_conn_trc_filters(data, sockindex, "failed to connect"));
  ------------------
  |  | 1611|      0|#define VERBOSE(x) x
  ------------------
  394|      0|      conn_report_stats(data, sockindex);
  395|      0|      goto out;
  396|      0|    }
  397|       |
  398|      0|    if(!blocking)
  ------------------
  |  Branch (398:8): [True: 0, False: 0]
  ------------------
  399|      0|      goto out;
  400|      0|    else {
  401|       |      /* check allowed time left */
  402|      0|      const timediff_t timeout_ms = Curl_timeleft_ms(data);
  403|      0|      curl_socket_t sockfd = Curl_conn_cf_get_socket(cf, data);
  404|      0|      int rc;
  405|       |
  406|      0|      if(timeout_ms < 0) {
  ------------------
  |  Branch (406:10): [True: 0, False: 0]
  ------------------
  407|       |        /* no need to continue if time already is up */
  408|      0|        failf(data, "connect timeout");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  409|      0|        result = CURLE_OPERATION_TIMEDOUT;
  410|      0|        goto out;
  411|      0|      }
  412|       |
  413|      0|      CURL_TRC_CF(data, cf, "Curl_conn_connect(block=1), do poll");
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  414|      0|      Curl_pollset_reset(&ps);
  415|      0|      Curl_pollfds_reset(&cpfds);
  416|       |      /* In general, we want to send after connect, wait on that. */
  417|      0|      if(sockfd != CURL_SOCKET_BAD)
  ------------------
  |  |  147|      0|#define CURL_SOCKET_BAD (-1)
  ------------------
  |  Branch (417:10): [True: 0, False: 0]
  ------------------
  418|      0|        result = Curl_pollset_set_out_only(data, &ps, sockfd);
  ------------------
  |  |  172|      0|  Curl_pollset_change(data, ps, sock, CURL_POLL_OUT, CURL_POLL_IN)
  |  |  ------------------
  |  |  |  |  284|      0|#define CURL_POLL_OUT    2
  |  |  ------------------
  |  |                 Curl_pollset_change(data, ps, sock, CURL_POLL_OUT, CURL_POLL_IN)
  |  |  ------------------
  |  |  |  |  283|      0|#define CURL_POLL_IN     1
  |  |  ------------------
  ------------------
  419|      0|      if(!result)
  ------------------
  |  Branch (419:10): [True: 0, False: 0]
  ------------------
  420|      0|        result = Curl_conn_adjust_pollset(data, data->conn, &ps);
  421|      0|      if(result)
  ------------------
  |  Branch (421:10): [True: 0, False: 0]
  ------------------
  422|      0|        goto out;
  423|      0|      result = Curl_pollfds_add_ps(&cpfds, &ps);
  424|      0|      if(result)
  ------------------
  |  Branch (424:10): [True: 0, False: 0]
  ------------------
  425|      0|        goto out;
  426|       |
  427|      0|      rc = Curl_poll(cpfds.pfds, cpfds.n,
  428|      0|                     CURLMIN(timeout_ms, (cpfds.n ? 1000 : 10)));
  ------------------
  |  | 1288|      0|#define CURLMIN(x, y) ((x) < (y) ? (x) : (y))
  |  |  ------------------
  |  |  |  Branch (1288:24): [True: 0, False: 0]
  |  |  |  Branch (1288:31): [True: 0, False: 0]
  |  |  |  Branch (1288:43): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  429|      0|      CURL_TRC_CF(data, cf, "Curl_conn_connect(block=1), Curl_poll() -> %d",
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  430|      0|                  rc);
  431|      0|      if(rc < 0) {
  ------------------
  |  Branch (431:10): [True: 0, False: 0]
  ------------------
  432|      0|        result = CURLE_COULDNT_CONNECT;
  433|      0|        goto out;
  434|      0|      }
  435|       |      /* continue iterating */
  436|      0|    }
  437|      0|  }
  438|       |
  439|  2.03k|out:
  440|  2.03k|  Curl_pollset_cleanup(&ps);
  441|  2.03k|  Curl_pollfds_cleanup(&cpfds);
  442|  2.03k|  return result;
  443|  2.03k|}
Curl_conn_get_destination:
  464|  2.03k|{
  465|  2.03k|  return (sockindex == SECONDARYSOCKET) ?
  ------------------
  |  |  235|  2.03k|#define SECONDARYSOCKET 1
  ------------------
  |  Branch (465:10): [True: 0, False: 2.03k]
  ------------------
  466|      0|    (conn->via_peer2 ? conn->via_peer2 : conn->origin2) :
  ------------------
  |  Branch (466:6): [True: 0, False: 0]
  ------------------
  467|  2.03k|    (conn->via_peer ? conn->via_peer : conn->origin);
  ------------------
  |  Branch (467:6): [True: 2.03k, False: 1]
  ------------------
  468|  2.03k|}
Curl_conn_get_first_peer:
  472|  8.14k|{
  473|  8.14k|#ifndef CURL_DISABLE_PROXY
  474|  8.14k|  if(conn->socks_proxy.peer)
  ------------------
  |  Branch (474:6): [True: 0, False: 8.14k]
  ------------------
  475|      0|    return conn->socks_proxy.peer;
  476|  8.14k|  if(conn->http_proxy.peer)
  ------------------
  |  Branch (476:6): [True: 0, False: 8.14k]
  ------------------
  477|      0|    return conn->http_proxy.peer;
  478|  8.14k|#endif
  479|  8.14k|  return (sockindex == SECONDARYSOCKET) ?
  ------------------
  |  |  235|  8.14k|#define SECONDARYSOCKET 1
  ------------------
  |  Branch (479:10): [True: 0, False: 8.14k]
  ------------------
  480|      0|    (conn->via_peer2 ? conn->via_peer2 : conn->origin2) :
  ------------------
  |  Branch (480:6): [True: 0, False: 0]
  ------------------
  481|  8.14k|    (conn->via_peer ? conn->via_peer : conn->origin);
  ------------------
  |  Branch (481:6): [True: 8.13k, False: 4]
  ------------------
  482|  8.14k|}
connect.c:conn_report_stats:
  316|  2.03k|{
  317|       |  /* We do gather stats for the second socket...yet */
  318|  2.03k|  if(sockindex == FIRSTSOCKET) {
  ------------------
  |  |  234|  2.03k|#define FIRSTSOCKET     0
  ------------------
  |  Branch (318:6): [True: 2.03k, False: 0]
  ------------------
  319|  2.03k|    Curl_conn_cntrl_report_stats(data, data->conn, sockindex);
  320|  2.03k|  }
  321|  2.03k|}
connect.c:conn_connect_trace:
  292|  2.03k|{
  293|  2.03k|  if(Curl_trc_is_verbose(data)) {
  ------------------
  |  |  322|  2.03k|  ((data) && (data)->set.verbose &&                        \
  |  |  ------------------
  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  ------------------
  |  |  323|  2.03k|   (!(data)->state.feat ||                                 \
  |  |  ------------------
  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  ------------------
  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  ------------------
  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  ------------------
  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  294|  2.03k|    struct ip_quadruple ipquad;
  295|  2.03k|    bool is_ipv6;
  296|  2.03k|    CURLcode result;
  297|       |
  298|  2.03k|    result = Curl_conn_cf_get_ip_info(cf, data, &is_ipv6, &ipquad);
  299|  2.03k|    if(result)
  ------------------
  |  Branch (299:8): [True: 0, False: 2.03k]
  ------------------
  300|      0|      return result;
  301|       |
  302|  2.03k|    infof(data, "Established %sconnection to %s (%s port %u) from %s port %u ",
  ------------------
  |  |  143|  2.03k|  do {                               \
  |  |  144|  2.03k|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|  2.03k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|  2.03k|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|  16.2k|      Curl_infof(data, __VA_ARGS__); \
  |  |  ------------------
  |  |  |  Branch (145:24): [True: 0, False: 2.03k]
  |  |  |  Branch (145:24): [True: 2.03k, False: 1]
  |  |  |  Branch (145:24): [True: 0, False: 2.03k]
  |  |  |  Branch (145:24): [True: 0, False: 2.03k]
  |  |  ------------------
  |  |  146|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  303|  2.03k|          (cf->sockindex == SECONDARYSOCKET) ? "2nd " : "",
  304|  2.03k|          CURL_CONN_HOST_DISPNAME(data->conn),
  305|  2.03k|          ipquad.remote_ip, ipquad.remote_port,
  306|  2.03k|          ipquad.local_ip, ipquad.local_port);
  307|  2.03k|  }
  308|  2.03k|  return CURLE_OK;
  309|  2.03k|}

Curl_cookie_add:
 1004|  2.53k|{
 1005|  2.53k|  struct Cookie comem;
 1006|  2.53k|  struct Cookie *co;
 1007|  2.53k|  size_t myhash;
 1008|  2.53k|  CURLcode result;
 1009|  2.53k|  bool replaces = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
 1010|  2.53k|  bool okay;
 1011|       |
 1012|  2.53k|  DEBUGASSERT(data);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1012:3): [True: 0, False: 2.53k]
  |  Branch (1012:3): [True: 2.53k, False: 0]
  ------------------
 1013|  2.53k|  DEBUGASSERT(MAX_SET_COOKIE_AMOUNT <= 255); /* counter is an unsigned char */
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1013:3): [True: 0, Folded]
  |  Branch (1013:3): [True: 2.53k, Folded]
  ------------------
 1014|  2.53k|  if(data->req.setcookies >= MAX_SET_COOKIE_AMOUNT)
  ------------------
  |  |   90|  2.53k|#define MAX_SET_COOKIE_AMOUNT 50
  ------------------
  |  Branch (1014:6): [True: 0, False: 2.53k]
  ------------------
 1015|      0|    return CURLE_OK; /* silently ignore */
 1016|       |
 1017|  2.53k|  co = &comem;
 1018|  2.53k|  memset(co, 0, sizeof(comem));
 1019|       |
 1020|  2.53k|  if(flags & COOKIE_HTTPHEADER)
  ------------------
  |  |  114|  2.53k|#define COOKIE_HTTPHEADER (1<<0) /* if HTTP header-style line */
  ------------------
  |  Branch (1020:6): [True: 0, False: 2.53k]
  ------------------
 1021|      0|    result = parse_cookie_header(data, co, ci, &okay,
 1022|      0|                                 lineptr, domain, path, flags & COOKIE_SECURE);
  ------------------
  |  |  116|      0|#define COOKIE_SECURE     (1<<2) /* connection is over secure origin */
  ------------------
 1023|  2.53k|  else
 1024|  2.53k|    result = parse_netscape(co, ci, &okay, lineptr, flags & COOKIE_SECURE);
  ------------------
  |  |  116|  2.53k|#define COOKIE_SECURE     (1<<2) /* connection is over secure origin */
  ------------------
 1025|       |
 1026|  2.53k|  if(result || !okay)
  ------------------
  |  Branch (1026:6): [True: 0, False: 2.53k]
  |  Branch (1026:16): [True: 2.53k, False: 0]
  ------------------
 1027|  2.53k|    goto fail;
 1028|       |
 1029|      0|  if(co->prefix_secure && !co->secure)
  ------------------
  |  Branch (1029:6): [True: 0, False: 0]
  |  Branch (1029:27): [True: 0, False: 0]
  ------------------
 1030|       |    /* The __Secure- prefix only requires that the cookie be set secure */
 1031|      0|    goto fail;
 1032|       |
 1033|      0|  if(!(flags & COOKIE_NOPSL) && is_public_suffix(data, co, domain))
  ------------------
  |  |  117|      0|#define COOKIE_NOPSL      (1<<3) /* skip PSL check */
  ------------------
  |  Branch (1033:6): [True: 0, False: 0]
  |  Branch (1033:33): [True: 0, False: 0]
  ------------------
 1034|      0|    goto fail;
 1035|       |
 1036|      0|  if(co->prefix_host) {
  ------------------
  |  Branch (1036:6): [True: 0, False: 0]
  ------------------
 1037|       |    /*
 1038|       |     * The __Host- prefix requires the cookie to be secure, have a "/" path
 1039|       |     * and not have a domain set.
 1040|       |     */
 1041|      0|    if(co->secure && co->path && !strcmp(co->path, "/") && !co->tailmatch)
  ------------------
  |  Branch (1041:8): [True: 0, False: 0]
  |  Branch (1041:22): [True: 0, False: 0]
  |  Branch (1041:34): [True: 0, False: 0]
  |  Branch (1041:60): [True: 0, False: 0]
  ------------------
 1042|      0|      ;
 1043|      0|    else
 1044|      0|      goto fail;
 1045|      0|  }
 1046|       |
 1047|      0|  if(!ci->running &&    /* read from a file */
  ------------------
  |  Branch (1047:6): [True: 0, False: 0]
  ------------------
 1048|      0|     ci->newsession &&  /* clean session cookies */
  ------------------
  |  Branch (1048:6): [True: 0, False: 0]
  ------------------
 1049|      0|     !co->expires)      /* this is a session cookie */
  ------------------
  |  Branch (1049:6): [True: 0, False: 0]
  ------------------
 1050|      0|    goto fail;
 1051|       |
 1052|      0|  co->livecookie = ci->running;
 1053|      0|  co->creationtime = ++ci->lastct;
 1054|       |
 1055|      0|  if(!(flags & COOKIE_NOEXPIRE))
  ------------------
  |  |  115|      0|#define COOKIE_NOEXPIRE   (1<<1) /* skip remove_expired() */
  ------------------
  |  Branch (1055:6): [True: 0, False: 0]
  ------------------
 1056|      0|    remove_expired(ci);
 1057|       |
 1058|       |  /*
 1059|       |   * Now we have parsed the incoming line, we must now check if this supersedes
 1060|       |   * an already existing cookie, which it may if the previous have the same
 1061|       |   * domain and path as this.
 1062|       |   */
 1063|      0|  if(!replace_existing(data, co, ci, flags & COOKIE_SECURE, &replaces))
  ------------------
  |  |  116|      0|#define COOKIE_SECURE     (1<<2) /* connection is over secure origin */
  ------------------
  |  Branch (1063:6): [True: 0, False: 0]
  ------------------
 1064|      0|    goto fail;
 1065|       |
 1066|       |  /* clone the stack struct into heap */
 1067|      0|  co = curlx_memdup(&comem, sizeof(comem));
 1068|      0|  if(!co) {
  ------------------
  |  Branch (1068:6): [True: 0, False: 0]
  ------------------
 1069|      0|    co = &comem;
 1070|      0|    result = CURLE_OUT_OF_MEMORY;
 1071|      0|    goto fail; /* bail out if we are this low on memory */
 1072|      0|  }
 1073|       |
 1074|       |  /* add this cookie to the list */
 1075|      0|  myhash = cookiehash(co->domain);
 1076|      0|  Curl_llist_append(&ci->cookielist[myhash], co, &co->node);
 1077|       |
 1078|      0|  if(ci->running)
  ------------------
  |  Branch (1078:6): [True: 0, False: 0]
  ------------------
 1079|       |    /* Only show this when NOT reading the cookies from a file */
 1080|      0|    infof(data, "%s cookie %s=\"%s\" for domain %s, path %s, "
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  ------------------
  |  |  |  Branch (145:24): [True: 0, False: 0]
  |  |  ------------------
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1081|      0|          "expire %" FMT_OFF_T,
 1082|      0|          replaces ? "Replaced" : "Added", co->name, co->value,
 1083|      0|          co->domain, co->path, co->expires);
 1084|       |
 1085|      0|  if(!replaces)
  ------------------
  |  Branch (1085:6): [True: 0, False: 0]
  ------------------
 1086|      0|    ci->numcookies++; /* one more cookie in the jar */
 1087|       |
 1088|       |  /*
 1089|       |   * Now that we have added a new cookie to the jar, update the expiration
 1090|       |   * tracker in case it is the next one to expire.
 1091|       |   */
 1092|      0|  if(co->expires && (co->expires < ci->next_expiration))
  ------------------
  |  Branch (1092:6): [True: 0, False: 0]
  |  Branch (1092:21): [True: 0, False: 0]
  ------------------
 1093|      0|    ci->next_expiration = co->expires;
 1094|       |
 1095|      0|  if(flags & COOKIE_HTTPHEADER)
  ------------------
  |  |  114|      0|#define COOKIE_HTTPHEADER (1<<0) /* if HTTP header-style line */
  ------------------
  |  Branch (1095:6): [True: 0, False: 0]
  ------------------
 1096|      0|    data->req.setcookies++;
 1097|       |
 1098|      0|  return result;
 1099|  2.53k|fail:
 1100|       |  freecookie(co, FALSE);
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
 1101|  2.53k|  return result;
 1102|      0|}
Curl_cookie_init:
 1119|  2.53k|{
 1120|  2.53k|  int i;
 1121|  2.53k|  struct CookieInfo *ci = curlx_calloc(1, sizeof(struct CookieInfo));
  ------------------
  |  | 1473|  2.53k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
 1122|  2.53k|  if(!ci)
  ------------------
  |  Branch (1122:6): [True: 0, False: 2.53k]
  ------------------
 1123|      0|    return NULL;
 1124|       |
 1125|       |  /* This does not use the destructor callback since we want to add
 1126|       |     and remove to lists while keeping the cookie struct intact */
 1127|   162k|  for(i = 0; i < COOKIE_HASH_SIZE; i++)
  ------------------
  |  |   54|   162k|#define COOKIE_HASH_SIZE 63
  ------------------
  |  Branch (1127:14): [True: 159k, False: 2.53k]
  ------------------
 1128|   159k|    Curl_llist_init(&ci->cookielist[i], NULL);
 1129|       |  /*
 1130|       |   * Initialize the next_expiration time to signal that we do not have enough
 1131|       |   * information yet.
 1132|       |   */
 1133|  2.53k|  ci->next_expiration = CURL_OFF_T_MAX;
  ------------------
  |  |  588|  2.53k|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  ------------------
 1134|       |
 1135|  2.53k|  return ci;
 1136|  2.53k|}
Curl_cookie_loadfiles:
 1227|  2.53k|{
 1228|  2.53k|  CURLcode result = CURLE_OK;
 1229|  2.53k|  struct curl_slist *list = data->state.cookielist;
 1230|  2.53k|  if(list) {
  ------------------
  |  Branch (1230:6): [True: 2.53k, False: 0]
  ------------------
 1231|  2.53k|    Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
 1232|  2.53k|    if(!data->cookies)
  ------------------
  |  Branch (1232:8): [True: 0, False: 2.53k]
  ------------------
 1233|      0|      data->cookies = Curl_cookie_init();
 1234|  2.53k|    if(!data->cookies)
  ------------------
  |  Branch (1234:8): [True: 0, False: 2.53k]
  ------------------
 1235|      0|      result = CURLE_OUT_OF_MEMORY;
 1236|  2.53k|    else {
 1237|  2.53k|      data->state.cookie_engine = TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
 1238|  5.07k|      while(list) {
  ------------------
  |  Branch (1238:13): [True: 2.53k, False: 2.53k]
  ------------------
 1239|  2.53k|        result = cookie_load(data, list->data, data->cookies, flags);
 1240|  2.53k|        if(result)
  ------------------
  |  Branch (1240:12): [True: 0, False: 2.53k]
  ------------------
 1241|      0|          break;
 1242|  2.53k|        list = list->next;
 1243|  2.53k|      }
 1244|  2.53k|    }
 1245|  2.53k|    Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
 1246|  2.53k|  }
 1247|  2.53k|  return result;
 1248|  2.53k|}
Curl_cookie_clearall:
 1428|  2.53k|{
 1429|  2.53k|  if(ci) {
  ------------------
  |  Branch (1429:6): [True: 2.53k, False: 0]
  ------------------
 1430|  2.53k|    unsigned int i;
 1431|   162k|    for(i = 0; i < COOKIE_HASH_SIZE; i++) {
  ------------------
  |  |   54|   162k|#define COOKIE_HASH_SIZE 63
  ------------------
  |  Branch (1431:16): [True: 159k, False: 2.53k]
  ------------------
 1432|   159k|      struct Curl_llist_node *n;
 1433|   159k|      for(n = Curl_llist_head(&ci->cookielist[i]); n;) {
  ------------------
  |  Branch (1433:52): [True: 0, False: 159k]
  ------------------
 1434|      0|        struct Cookie *c = Curl_node_elem(n);
 1435|      0|        struct Curl_llist_node *e = Curl_node_next(n);
 1436|      0|        Curl_node_remove(n);
 1437|       |        freecookie(c, TRUE);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 1438|      0|        n = e;
 1439|      0|      }
 1440|   159k|    }
 1441|  2.53k|    ci->numcookies = 0;
 1442|  2.53k|  }
 1443|  2.53k|}
Curl_cookie_cleanup:
 1479|  2.53k|{
 1480|  2.53k|  if(ci) {
  ------------------
  |  Branch (1480:6): [True: 2.53k, False: 0]
  ------------------
 1481|  2.53k|    Curl_cookie_clearall(ci);
 1482|  2.53k|    curlx_free(ci); /* free the base struct as well */
  ------------------
  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1483|  2.53k|  }
 1484|  2.53k|}
Curl_flush_cookies:
 1672|  5.07k|{
 1673|  5.07k|  Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
 1674|       |  /* only save the cookie file if a transfer was started (cookies->running is
 1675|       |     set), as otherwise the cookies were not completely initialized and there
 1676|       |     might be cookie files that were not loaded so saving the file is the
 1677|       |     wrong thing. */
 1678|  5.07k|  if(data->cookies) {
  ------------------
  |  Branch (1678:6): [True: 2.53k, False: 2.53k]
  ------------------
 1679|  2.53k|    const char *cookiejar = CURL_EASY_STR(data, STRING_COOKIEJAR);
  ------------------
  |  | 1228|  2.53k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
 1680|  2.53k|    if(cookiejar && data->cookies->running) {
  ------------------
  |  Branch (1680:8): [True: 2.53k, False: 0]
  |  Branch (1680:21): [True: 2.53k, False: 0]
  ------------------
 1681|       |      /* if we have a destination file for all the cookies to get dumped to */
 1682|  2.53k|      CURLcode result = cookie_output(data, data->cookies, cookiejar);
 1683|  2.53k|      if(result)
  ------------------
  |  Branch (1683:10): [True: 0, False: 2.53k]
  ------------------
 1684|      0|        infof(data, "WARNING: failed to save cookies in %s: %s",
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1685|  2.53k|              cookiejar, curl_easy_strerror(result));
 1686|  2.53k|    }
 1687|       |
 1688|  2.53k|    if(cleanup && (!data->share || (data->cookies != data->share->cookies))) {
  ------------------
  |  Branch (1688:8): [True: 2.53k, False: 0]
  |  Branch (1688:20): [True: 2.53k, False: 0]
  |  Branch (1688:36): [True: 0, False: 0]
  ------------------
 1689|  2.53k|      Curl_cookie_cleanup(data->cookies);
 1690|       |      data->cookies = NULL;
 1691|  2.53k|    }
 1692|  2.53k|  }
 1693|  5.07k|  Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
 1694|  5.07k|}
Curl_cookie_run:
 1697|  2.53k|{
 1698|  2.53k|  Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
 1699|  2.53k|  if(data->cookies)
  ------------------
  |  Branch (1699:6): [True: 2.53k, False: 0]
  ------------------
 1700|  2.53k|    data->cookies->running = TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
 1701|  2.53k|  Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
 1702|  2.53k|}
cookie.c:parse_netscape:
  672|  2.53k|{
  673|       |  /*
  674|       |   * This line is NOT an HTTP header style line, we do offer support for
  675|       |   * reading the odd netscape cookies-file format here
  676|       |   */
  677|  2.53k|  const char *ptr, *next;
  678|  2.53k|  int fields;
  679|  2.53k|  size_t len;
  680|  2.53k|  *okay = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  681|       |
  682|       |  /*
  683|       |   * In 2008, Internet Explorer introduced HTTP-only cookies to prevent XSS
  684|       |   * attacks. Cookies marked httpOnly are not accessible to JavaScript. In
  685|       |   * Firefox's cookie files, they are prefixed #HttpOnly_ and the rest
  686|       |   * remains as usual, so we skip 10 characters of the line.
  687|       |   */
  688|  2.53k|  if(!strncmp(lineptr, "#HttpOnly_", 10)) {
  ------------------
  |  Branch (688:6): [True: 0, False: 2.53k]
  ------------------
  689|      0|    lineptr += 10;
  690|      0|    co->httponly = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  691|      0|  }
  692|       |
  693|  2.53k|  if(lineptr[0] == '#')
  ------------------
  |  Branch (693:6): [True: 0, False: 2.53k]
  ------------------
  694|       |    /* do not even try the comments */
  695|      0|    return CURLE_OK;
  696|       |
  697|       |  /*
  698|       |   * Now loop through the fields and init the struct we already have
  699|       |   * allocated
  700|       |   */
  701|  2.53k|  fields = 0;
  702|  5.07k|  for(next = lineptr; next; fields++) {
  ------------------
  |  Branch (702:23): [True: 2.53k, False: 2.53k]
  ------------------
  703|  2.53k|    ptr = next;
  704|  2.53k|    len = strcspn(ptr, "\t\r\n");
  705|  2.53k|    next = (ptr[len] == '\t' ? &ptr[len + 1] : NULL);
  ------------------
  |  Branch (705:13): [True: 0, False: 2.53k]
  ------------------
  706|  2.53k|    switch(fields) {
  ------------------
  |  Branch (706:12): [True: 2.53k, False: 0]
  ------------------
  707|  2.53k|    case 0:
  ------------------
  |  Branch (707:5): [True: 2.53k, False: 0]
  ------------------
  708|  2.53k|      if(ptr[0] == '.') { /* skip preceding dots */
  ------------------
  |  Branch (708:10): [True: 0, False: 2.53k]
  ------------------
  709|      0|        ptr++;
  710|      0|        len--;
  711|      0|      }
  712|  2.53k|      co->domain = curlx_memdup0(ptr, len);
  713|  2.53k|      if(!co->domain)
  ------------------
  |  Branch (713:10): [True: 0, False: 2.53k]
  ------------------
  714|      0|        return CURLE_OUT_OF_MEMORY;
  715|  2.53k|      break;
  716|  2.53k|    case 1:
  ------------------
  |  Branch (716:5): [True: 0, False: 2.53k]
  ------------------
  717|       |      /*
  718|       |       * flag: A TRUE/FALSE value indicating if all machines within a given
  719|       |       * domain can access the variable. Set TRUE when the cookie says
  720|       |       * .example.com and to false when the domain is complete www.example.com
  721|       |       */
  722|      0|      co->tailmatch = !!curl_strnequal(ptr, "TRUE", len);
  723|      0|      break;
  724|      0|    case 2:
  ------------------
  |  Branch (724:5): [True: 0, False: 2.53k]
  ------------------
  725|       |      /* The file format allows the path field to remain not filled in */
  726|      0|      if(strncmp("TRUE", ptr, len) && strncmp("FALSE", ptr, len)) {
  ------------------
  |  Branch (726:10): [True: 0, False: 0]
  |  Branch (726:39): [True: 0, False: 0]
  ------------------
  727|       |        /* only if the path does not look like a boolean option! */
  728|      0|        co->path = sanitize_cookie_path(ptr, len);
  729|      0|        if(!co->path)
  ------------------
  |  Branch (729:12): [True: 0, False: 0]
  ------------------
  730|      0|          return CURLE_OUT_OF_MEMORY;
  731|      0|        break;
  732|      0|      }
  733|      0|      else {
  734|       |        /* this does not look like a path, make one up! */
  735|      0|        co->path = curlx_strdup("/");
  ------------------
  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
  736|      0|        if(!co->path)
  ------------------
  |  Branch (736:12): [True: 0, False: 0]
  ------------------
  737|      0|          return CURLE_OUT_OF_MEMORY;
  738|      0|      }
  739|      0|      fields++; /* add a field and fall down to secure */
  740|      0|      FALLTHROUGH();
  ------------------
  |  |  815|      0|#  define FALLTHROUGH()  __attribute__((fallthrough))
  ------------------
  741|      0|    case 3:
  ------------------
  |  Branch (741:5): [True: 0, False: 2.53k]
  ------------------
  742|      0|      co->secure = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  743|      0|      if(curl_strnequal(ptr, "TRUE", len)) {
  ------------------
  |  Branch (743:10): [True: 0, False: 0]
  ------------------
  744|      0|        if(secure_origin || ci->running)
  ------------------
  |  Branch (744:12): [True: 0, False: 0]
  |  Branch (744:29): [True: 0, False: 0]
  ------------------
  745|      0|          co->secure = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  746|      0|        else
  747|      0|          return CURLE_OK;
  748|      0|      }
  749|      0|      break;
  750|      0|    case 4:
  ------------------
  |  Branch (750:5): [True: 0, False: 2.53k]
  ------------------
  751|      0|      if(curlx_str_number(&ptr, &co->expires, CURL_OFF_T_MAX))
  ------------------
  |  |  588|      0|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  ------------------
  |  Branch (751:10): [True: 0, False: 0]
  ------------------
  752|      0|        return CURLE_OK;
  753|      0|      break;
  754|      0|    case 5:
  ------------------
  |  Branch (754:5): [True: 0, False: 2.53k]
  ------------------
  755|      0|      co->name = curlx_memdup0(ptr, len);
  756|      0|      if(!co->name)
  ------------------
  |  Branch (756:10): [True: 0, False: 0]
  ------------------
  757|      0|        return CURLE_OUT_OF_MEMORY;
  758|      0|      else {
  759|       |        /* For Netscape file format cookies we check prefix on the name.
  760|       |           These prefixes are matched case sensitively, same as on the
  761|       |           header path and as the 6265bis document specifies. */
  762|      0|        if(!strncmp("__Secure-", co->name, 9))
  ------------------
  |  Branch (762:12): [True: 0, False: 0]
  ------------------
  763|      0|          co->prefix_secure = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  764|      0|        else if(!strncmp("__Host-", co->name, 7))
  ------------------
  |  Branch (764:17): [True: 0, False: 0]
  ------------------
  765|      0|          co->prefix_host = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  766|      0|      }
  767|      0|      break;
  768|      0|    case 6:
  ------------------
  |  Branch (768:5): [True: 0, False: 2.53k]
  ------------------
  769|      0|      co->value = curlx_memdup0(ptr, len);
  770|      0|      if(!co->value)
  ------------------
  |  Branch (770:10): [True: 0, False: 0]
  ------------------
  771|      0|        return CURLE_OUT_OF_MEMORY;
  772|      0|      break;
  773|  2.53k|    }
  774|  2.53k|  }
  775|  2.53k|  if(fields == 6) {
  ------------------
  |  Branch (775:6): [True: 0, False: 2.53k]
  ------------------
  776|       |    /* we got a cookie with blank contents, fix it */
  777|      0|    co->value = curlx_strdup("");
  ------------------
  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
  778|      0|    if(!co->value)
  ------------------
  |  Branch (778:8): [True: 0, False: 0]
  ------------------
  779|      0|      return CURLE_OUT_OF_MEMORY;
  780|      0|    else
  781|      0|      fields++;
  782|      0|  }
  783|       |
  784|  2.53k|  if(fields != 7)
  ------------------
  |  Branch (784:6): [True: 2.53k, False: 0]
  ------------------
  785|       |    /* we did not find the sufficient number of fields */
  786|  2.53k|    return CURLE_OK;
  787|       |
  788|       |  /* Reject control octets in the name or value, matching the filtering done
  789|       |     for cookies set over HTTP. A cookie loaded from a file is later sent in
  790|       |     request headers, so the same bytes that make a server reject a request
  791|       |     must not slip in through the file. */
  792|      0|  if(invalid_octets(co->name, strlen(co->name)) ||
  ------------------
  |  Branch (792:6): [True: 0, False: 0]
  ------------------
  793|      0|     invalid_octets(co->value, strlen(co->value)))
  ------------------
  |  Branch (793:6): [True: 0, False: 0]
  ------------------
  794|      0|    return CURLE_OK;
  795|       |
  796|      0|  *okay = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  797|      0|  return CURLE_OK;
  798|      0|}
cookie.c:remove_expired:
  274|  5.07k|{
  275|  5.07k|  struct Cookie *co;
  276|  5.07k|  curl_off_t now = (curl_off_t)time(NULL);
  277|  5.07k|  unsigned int i;
  278|       |
  279|       |  /*
  280|       |   * If the earliest expiration timestamp in the jar is in the future we can
  281|       |   * skip scanning the whole jar and instead exit early as there will not be
  282|       |   * any cookies to evict. If we need to evict, reset the next_expiration
  283|       |   * counter in order to track the next one. In case the recorded first
  284|       |   * expiration is the max offset, then perform the safe fallback of checking
  285|       |   * all cookies.
  286|       |   */
  287|  5.07k|  if(now < ci->next_expiration &&
  ------------------
  |  Branch (287:6): [True: 5.07k, False: 0]
  ------------------
  288|  5.07k|     ci->next_expiration != CURL_OFF_T_MAX)
  ------------------
  |  |  588|  5.07k|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  ------------------
  |  Branch (288:6): [True: 0, False: 5.07k]
  ------------------
  289|      0|    return;
  290|  5.07k|  else
  291|  5.07k|    ci->next_expiration = CURL_OFF_T_MAX;
  ------------------
  |  |  588|  5.07k|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  ------------------
  292|       |
  293|   324k|  for(i = 0; i < COOKIE_HASH_SIZE; i++) {
  ------------------
  |  |   54|   324k|#define COOKIE_HASH_SIZE 63
  ------------------
  |  Branch (293:14): [True: 319k, False: 5.07k]
  ------------------
  294|   319k|    struct Curl_llist_node *n;
  295|   319k|    struct Curl_llist_node *e = NULL;
  296|       |
  297|   319k|    for(n = Curl_llist_head(&ci->cookielist[i]); n; n = e) {
  ------------------
  |  Branch (297:50): [True: 0, False: 319k]
  ------------------
  298|      0|      co = Curl_node_elem(n);
  299|      0|      e = Curl_node_next(n);
  300|      0|      if(co->expires) {
  ------------------
  |  Branch (300:10): [True: 0, False: 0]
  ------------------
  301|      0|        if(co->expires < now) {
  ------------------
  |  Branch (301:12): [True: 0, False: 0]
  ------------------
  302|      0|          Curl_node_remove(n);
  303|      0|          freecookie(co, TRUE);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  304|      0|          ci->numcookies--;
  305|      0|        }
  306|      0|        else if(co->expires < ci->next_expiration)
  ------------------
  |  Branch (306:17): [True: 0, False: 0]
  ------------------
  307|       |          /*
  308|       |           * If this cookie has an expiration timestamp earlier than what we
  309|       |           * have seen so far then record it for the next round of expirations.
  310|       |           */
  311|      0|          ci->next_expiration = co->expires;
  312|      0|      }
  313|      0|    }
  314|   319k|  }
  315|  5.07k|}
cookie.c:freecookie:
   64|  2.53k|{
   65|  2.53k|  curlx_free(co->domain);
  ------------------
  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   66|  2.53k|  curlx_free(co->path);
  ------------------
  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   67|  2.53k|  curlx_free(co->name);
  ------------------
  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   68|  2.53k|  curlx_free(co->value);
  ------------------
  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   69|  2.53k|  if(maintoo)
  ------------------
  |  Branch (69:6): [True: 0, False: 2.53k]
  ------------------
   70|      0|    curlx_free(co);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   71|  2.53k|}
cookie.c:cookie_load:
 1149|  2.53k|{
 1150|  2.53k|  FILE *handle = NULL;
 1151|  2.53k|  CURLcode result = CURLE_OK;
 1152|  2.53k|  FILE *fp = NULL;
 1153|  2.53k|  DEBUGASSERT(ci);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1153:3): [True: 0, False: 2.53k]
  |  Branch (1153:3): [True: 2.53k, False: 0]
  ------------------
 1154|  2.53k|  DEBUGASSERT(data);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1154:3): [True: 0, False: 2.53k]
  |  Branch (1154:3): [True: 2.53k, False: 0]
  ------------------
 1155|  2.53k|  DEBUGASSERT(file);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1155:3): [True: 0, False: 2.53k]
  |  Branch (1155:3): [True: 2.53k, False: 0]
  ------------------
 1156|       |
 1157|  2.53k|  ci->newsession = !!(flags & COOKIE_NOSESSION); /* new session? */
  ------------------
  |  |  118|  2.53k|#define COOKIE_NOSESSION  (1<<6) /* drop session cookies */
  ------------------
 1158|  2.53k|  ci->running = FALSE; /* this is not running, this is init */
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
 1159|       |
 1160|  2.53k|  if(file && *file) {
  ------------------
  |  Branch (1160:6): [True: 2.53k, False: 0]
  |  Branch (1160:14): [True: 2.53k, False: 0]
  ------------------
 1161|  2.53k|    if(!strcmp(file, "-"))
  ------------------
  |  Branch (1161:8): [True: 0, False: 2.53k]
  ------------------
 1162|      0|      fp = stdin;
 1163|  2.53k|    else {
 1164|  2.53k|      fp = curlx_fopen(file, "rb");
  ------------------
  |  |   76|  2.53k|#define curlx_fopen(file, mode) curl_dbg_fopen(file, mode, __LINE__, __FILE__)
  ------------------
 1165|  2.53k|      if(!fp)
  ------------------
  |  Branch (1165:10): [True: 0, False: 2.53k]
  ------------------
 1166|      0|        infof(data, "WARNING: failed to open cookie file \"%s\"", file);
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1167|  2.53k|      else {
 1168|  2.53k|        curlx_struct_stat stat;
  ------------------
  |  |   65|  2.53k|#define curlx_struct_stat       struct stat
  ------------------
 1169|  2.53k|        if((curlx_fstat(fileno(fp), &stat) != -1) && S_ISDIR(stat.st_mode)) {
  ------------------
  |  |   64|  2.53k|#define curlx_fstat             fstat
  ------------------
  |  Branch (1169:12): [True: 2.53k, False: 0]
  |  Branch (1169:54): [True: 0, False: 2.53k]
  ------------------
 1170|      0|          curlx_fclose(fp);
  ------------------
  |  |   81|      0|#define curlx_fclose(file)      curl_dbg_fclose(file, __LINE__, __FILE__)
  ------------------
 1171|      0|          fp = NULL;
 1172|      0|          infof(data, "WARNING: cookie filename points to a directory: \"%s\"",
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1173|      0|                file);
 1174|      0|        }
 1175|  2.53k|        else
 1176|  2.53k|          handle = fp;
 1177|  2.53k|      }
 1178|  2.53k|    }
 1179|  2.53k|  }
 1180|       |
 1181|  2.53k|  if(fp) {
  ------------------
  |  Branch (1181:6): [True: 2.53k, False: 0]
  ------------------
 1182|  2.53k|    struct dynbuf buf;
 1183|  2.53k|    bool eof = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
 1184|  2.53k|    curlx_dyn_init(&buf, MAX_COOKIE_LINE);
  ------------------
  |  |   81|  2.53k|#define MAX_COOKIE_LINE 5000
  ------------------
 1185|  2.53k|    do {
 1186|  2.53k|      result = Curl_get_line(&buf, fp, &eof);
 1187|  2.53k|      if(!result) {
  ------------------
  |  Branch (1187:10): [True: 2.53k, False: 0]
  ------------------
 1188|  2.53k|        const char *lineptr = curlx_dyn_ptr(&buf);
 1189|  2.53k|        bool headerline = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
 1190|  2.53k|        if(checkprefix("Set-Cookie:", lineptr)) {
  ------------------
  |  |   49|  2.53k|#define checkprefix(a, b) curl_strnequal(b, STRCONST(a))
  |  |  ------------------
  |  |  |  | 1297|  2.53k|#define STRCONST(x) x, CURL_CSTRLEN(x)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1292|  2.53k|#define CURL_CSTRLEN(x) (sizeof(x) - 1)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (49:27): [True: 0, False: 2.53k]
  |  |  ------------------
  ------------------
 1191|       |          /* This is a cookie line, get it! */
 1192|      0|          lineptr += 11;
 1193|      0|          headerline = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 1194|      0|          curlx_str_passblanks(&lineptr);
 1195|      0|        }
 1196|       |
 1197|  2.53k|        result = Curl_cookie_add(data, ci, lineptr, NULL, NULL,
 1198|  2.53k|                                 (headerline ? COOKIE_HTTPHEADER : 0) |
  ------------------
  |  |  114|      0|#define COOKIE_HTTPHEADER (1<<0) /* if HTTP header-style line */
  ------------------
  |  Branch (1198:35): [True: 0, False: 2.53k]
  ------------------
 1199|  2.53k|                                 COOKIE_NOEXPIRE | COOKIE_SECURE |
  ------------------
  |  |  115|  2.53k|#define COOKIE_NOEXPIRE   (1<<1) /* skip remove_expired() */
  ------------------
                                               COOKIE_NOEXPIRE | COOKIE_SECURE |
  ------------------
  |  |  116|  2.53k|#define COOKIE_SECURE     (1<<2) /* connection is over secure origin */
  ------------------
 1200|  2.53k|                                 (flags & COOKIE_NOPSL));
  ------------------
  |  |  117|  2.53k|#define COOKIE_NOPSL      (1<<3) /* skip PSL check */
  ------------------
 1201|       |        /* File reading cookie failures are not propagated back to the
 1202|       |           caller because there is no way to do that */
 1203|  2.53k|      }
 1204|  2.53k|    } while(!result && !eof);
  ------------------
  |  Branch (1204:13): [True: 2.53k, False: 0]
  |  Branch (1204:24): [True: 0, False: 2.53k]
  ------------------
 1205|  2.53k|    curlx_dyn_free(&buf); /* free the line buffer */
 1206|       |
 1207|       |    /*
 1208|       |     * Remove expired cookies from the hash. We must make sure to run this
 1209|       |     * after reading the file, and not on every cookie.
 1210|       |     */
 1211|  2.53k|    remove_expired(ci);
 1212|       |
 1213|  2.53k|    if(handle)
  ------------------
  |  Branch (1213:8): [True: 2.53k, False: 0]
  ------------------
 1214|  2.53k|      curlx_fclose(handle);
  ------------------
  |  |   81|  2.53k|#define curlx_fclose(file)      curl_dbg_fclose(file, __LINE__, __FILE__)
  ------------------
 1215|  2.53k|  }
 1216|  2.53k|  data->state.cookie_engine = TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
 1217|  2.53k|  ci->running = TRUE; /* now, we are running */
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
 1218|       |
 1219|  2.53k|  return result;
 1220|  2.53k|}
cookie.c:cookie_output:
 1530|  2.53k|{
 1531|  2.53k|  FILE *out = NULL;
 1532|  2.53k|  bool use_stdout = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
 1533|  2.53k|  char *tempstore = NULL;
 1534|  2.53k|  CURLcode result = CURLE_OK;
 1535|       |
 1536|  2.53k|  if(!ci)
  ------------------
  |  Branch (1536:6): [True: 0, False: 2.53k]
  ------------------
 1537|       |    /* no cookie engine alive */
 1538|      0|    return CURLE_OK;
 1539|       |
 1540|       |  /* at first, remove expired cookies */
 1541|  2.53k|  remove_expired(ci);
 1542|       |
 1543|  2.53k|  if(!strcmp("-", filename)) {
  ------------------
  |  Branch (1543:6): [True: 0, False: 2.53k]
  ------------------
 1544|       |    /* use stdout */
 1545|      0|    out = stdout;
 1546|      0|    use_stdout = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 1547|      0|  }
 1548|  2.53k|  else {
 1549|  2.53k|    result = Curl_fopen(data, filename, &out, &tempstore);
 1550|  2.53k|    if(result)
  ------------------
  |  Branch (1550:8): [True: 0, False: 2.53k]
  ------------------
 1551|      0|      goto error;
 1552|  2.53k|  }
 1553|       |
 1554|  2.53k|  fputs("# Netscape HTTP Cookie File\n"
 1555|  2.53k|        "# https://curl.se/docs/http-cookies.html\n"
 1556|  2.53k|        "# This file was generated by libcurl! Edit at your own risk.\n\n",
 1557|  2.53k|        out);
 1558|       |
 1559|  2.53k|  if(ci->numcookies) {
  ------------------
  |  Branch (1559:6): [True: 0, False: 2.53k]
  ------------------
 1560|      0|    unsigned int i;
 1561|      0|    size_t nvalid = 0;
 1562|      0|    struct Cookie **array;
 1563|      0|    struct Curl_llist_node *n;
 1564|       |
 1565|      0|    array = curlx_calloc(1, sizeof(struct Cookie *) * ci->numcookies);
  ------------------
  |  | 1473|      0|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
 1566|      0|    if(!array) {
  ------------------
  |  Branch (1566:8): [True: 0, False: 0]
  ------------------
 1567|      0|      result = CURLE_OUT_OF_MEMORY;
 1568|      0|      goto error;
 1569|      0|    }
 1570|       |
 1571|       |    /* only sort the cookies with a domain property */
 1572|      0|    for(i = 0; i < COOKIE_HASH_SIZE; i++) {
  ------------------
  |  |   54|      0|#define COOKIE_HASH_SIZE 63
  ------------------
  |  Branch (1572:16): [True: 0, False: 0]
  ------------------
 1573|      0|      for(n = Curl_llist_head(&ci->cookielist[i]); n; n = Curl_node_next(n)) {
  ------------------
  |  Branch (1573:52): [True: 0, False: 0]
  ------------------
 1574|      0|        struct Cookie *co = Curl_node_elem(n);
 1575|      0|        if(!co->domain)
  ------------------
  |  Branch (1575:12): [True: 0, False: 0]
  ------------------
 1576|      0|          continue;
 1577|      0|        array[nvalid++] = co;
 1578|      0|      }
 1579|      0|    }
 1580|       |
 1581|      0|    qsort(array, nvalid, sizeof(struct Cookie *), cookie_sort_ct);
 1582|       |
 1583|      0|    for(i = 0; i < nvalid; i++) {
  ------------------
  |  Branch (1583:16): [True: 0, False: 0]
  ------------------
 1584|      0|      char *format_ptr = get_netscape_format(array[i]);
 1585|      0|      if(!format_ptr) {
  ------------------
  |  Branch (1585:10): [True: 0, False: 0]
  ------------------
 1586|      0|        curlx_free(array);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1587|      0|        result = CURLE_OUT_OF_MEMORY;
 1588|      0|        goto error;
 1589|      0|      }
 1590|      0|      curl_mfprintf(out, "%s\n", format_ptr);
 1591|      0|      curlx_free(format_ptr);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1592|      0|    }
 1593|       |
 1594|      0|    curlx_free(array);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1595|      0|  }
 1596|       |
 1597|  2.53k|  if(!use_stdout) {
  ------------------
  |  Branch (1597:6): [True: 2.53k, False: 0]
  ------------------
 1598|  2.53k|    curlx_fclose(out);
  ------------------
  |  |   81|  2.53k|#define curlx_fclose(file)      curl_dbg_fclose(file, __LINE__, __FILE__)
  ------------------
 1599|  2.53k|    out = NULL;
 1600|  2.53k|    if(tempstore && curlx_rename(tempstore, filename)) {
  ------------------
  |  |   72|      0|#define curlx_rename            rename
  ------------------
  |  Branch (1600:8): [True: 0, False: 2.53k]
  |  Branch (1600:21): [True: 0, False: 0]
  ------------------
 1601|      0|      result = CURLE_WRITE_ERROR;
 1602|      0|      goto error;
 1603|      0|    }
 1604|  2.53k|  }
 1605|       |
 1606|       |  /*
 1607|       |   * If we reach here we have successfully written a cookie file so there is
 1608|       |   * no need to inspect the error, any error case should have jumped into the
 1609|       |   * error block below.
 1610|       |   */
 1611|  2.53k|  curlx_free(tempstore);
  ------------------
  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1612|  2.53k|  return CURLE_OK;
 1613|       |
 1614|      0|error:
 1615|      0|  if(out && !use_stdout)
  ------------------
  |  Branch (1615:6): [True: 0, False: 0]
  |  Branch (1615:13): [True: 0, False: 0]
  ------------------
 1616|      0|    curlx_fclose(out);
  ------------------
  |  |   81|      0|#define curlx_fclose(file)      curl_dbg_fclose(file, __LINE__, __FILE__)
  ------------------
 1617|      0|  if(tempstore) {
  ------------------
  |  Branch (1617:6): [True: 0, False: 0]
  ------------------
 1618|      0|    unlink(tempstore);
 1619|      0|    curlx_free(tempstore);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1620|      0|  }
 1621|      0|  return result;
 1622|  2.53k|}

Curl_creds_create:
   41|  2.15k|{
   42|  2.15k|  struct Curl_creds *creds = NULL;
   43|  2.15k|  size_t ulen = user ? strlen(user) : 0;
  ------------------
  |  Branch (43:17): [True: 242, False: 1.91k]
  ------------------
   44|  2.15k|  size_t plen = passwd ? strlen(passwd) : 0;
  ------------------
  |  Branch (44:17): [True: 169, False: 1.98k]
  ------------------
   45|  2.15k|  size_t olen = oauth_bearer ? strlen(oauth_bearer) : 0;
  ------------------
  |  Branch (45:17): [True: 97, False: 2.06k]
  ------------------
   46|  2.15k|  size_t salen = sasl_authzid ? strlen(sasl_authzid) : 0;
  ------------------
  |  Branch (46:18): [True: 97, False: 2.06k]
  ------------------
   47|  2.15k|  size_t sslen = sasl_service ? strlen(sasl_service) : 0;
  ------------------
  |  Branch (47:18): [True: 97, False: 2.06k]
  ------------------
   48|  2.15k|  char *s, *buf;
   49|  2.15k|  size_t bufsize;
   50|  2.15k|  CURLcode result = CURLE_OK;
   51|       |
   52|  2.15k|  Curl_creds_unlink(pcreds);
   53|       |
   54|       |  /* Everything empty/NULL, this is the NULL credential */
   55|  2.15k|  if(!user && !passwd && !olen && !salen && !sslen)
  ------------------
  |  Branch (55:6): [True: 1.91k, False: 242]
  |  Branch (55:15): [True: 1.86k, False: 52]
  |  Branch (55:26): [True: 1.86k, False: 0]
  |  Branch (55:35): [True: 1.86k, False: 0]
  |  Branch (55:45): [True: 1.86k, False: 0]
  ------------------
   56|  1.86k|    goto out;
   57|       |
   58|    294|  if((ulen > CURL_MAX_INPUT_LENGTH) ||
  ------------------
  |  |   45|    294|#define CURL_MAX_INPUT_LENGTH 8000000
  ------------------
  |  Branch (58:6): [True: 0, False: 294]
  ------------------
   59|    294|     (plen > CURL_MAX_INPUT_LENGTH) ||
  ------------------
  |  |   45|    294|#define CURL_MAX_INPUT_LENGTH 8000000
  ------------------
  |  Branch (59:6): [True: 0, False: 294]
  ------------------
   60|    294|     (olen > CURL_MAX_INPUT_LENGTH) ||
  ------------------
  |  |   45|    294|#define CURL_MAX_INPUT_LENGTH 8000000
  ------------------
  |  Branch (60:6): [True: 0, False: 294]
  ------------------
   61|    294|     (salen > CURL_MAX_INPUT_LENGTH) ||
  ------------------
  |  |   45|    294|#define CURL_MAX_INPUT_LENGTH 8000000
  ------------------
  |  Branch (61:6): [True: 0, False: 294]
  ------------------
   62|    294|     (sslen > CURL_MAX_INPUT_LENGTH)) {
  ------------------
  |  |   45|    294|#define CURL_MAX_INPUT_LENGTH 8000000
  ------------------
  |  Branch (62:6): [True: 0, False: 294]
  ------------------
   63|      0|    result = CURLE_BAD_FUNCTION_ARGUMENT;
   64|      0|    goto out;
   65|      0|  }
   66|       |
   67|       |  /* null-terminator for user already part of struct */
   68|    294|  bufsize = ulen + plen + 1 + olen + 1 + salen + 1 + sslen + 1;
   69|    294|  creds = curlx_calloc(1, sizeof(*creds) + bufsize);
  ------------------
  |  | 1473|    294|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
   70|    294|  if(!creds) {
  ------------------
  |  Branch (70:6): [True: 0, False: 294]
  ------------------
   71|      0|    result = CURLE_OUT_OF_MEMORY;
   72|      0|    goto out;
   73|      0|  }
   74|       |
   75|    294|  creds->bufsize = bufsize;
   76|    294|  creds->refcount = 1;
   77|    294|  creds->source = source;
   78|       |  /* Some compilers try to be too smart about our dynamic struct size */
   79|    294|  buf = ((char *)creds) + offsetof(struct Curl_creds, buf);
   80|    294|  creds->user = s = buf;
   81|    294|  if(ulen)
  ------------------
  |  Branch (81:6): [True: 75, False: 219]
  ------------------
   82|     75|    memcpy(s, user, ulen + 1);
   83|    294|  creds->passwd = s = buf + ulen + 1;
   84|    294|  if(plen)
  ------------------
  |  Branch (84:6): [True: 52, False: 242]
  ------------------
   85|     52|    memcpy(s, passwd, plen + 1);
   86|    294|  creds->oauth_bearer = s = buf + ulen + 1 + plen + 1;
   87|    294|  if(olen)
  ------------------
  |  Branch (87:6): [True: 0, False: 294]
  ------------------
   88|      0|    memcpy(s, oauth_bearer, olen + 1);
   89|    294|  creds->sasl_authzid = s = buf + ulen + 1 + plen + 1 + olen + 1;
   90|    294|  if(salen)
  ------------------
  |  Branch (90:6): [True: 0, False: 294]
  ------------------
   91|      0|    memcpy(s, sasl_authzid, salen + 1);
   92|    294|  creds->sasl_service = s = buf + ulen + 1 + plen + 1 + olen + 1 + salen + 1;
   93|    294|  if(sslen)
  ------------------
  |  Branch (93:6): [True: 0, False: 294]
  ------------------
   94|      0|    memcpy(s, sasl_service, sslen + 1);
   95|       |
   96|  2.15k|out:
   97|  2.15k|  if(!result)
  ------------------
  |  Branch (97:6): [True: 2.15k, False: 0]
  ------------------
   98|  2.15k|    *pcreds = creds;
   99|      0|  else
  100|      0|    Curl_creds_unlink(&creds);
  101|  2.15k|  return result;
  102|    294|}
Curl_creds_merge:
  109|  1.99k|{
  110|  1.99k|  struct Curl_creds *creds_out = NULL;
  111|  1.99k|  CURLcode result;
  112|       |
  113|  1.99k|  if(!creds_in) {
  ------------------
  |  Branch (113:6): [True: 1.89k, False: 97]
  ------------------
  114|  1.89k|    result = Curl_creds_create(user, passwd, NULL, NULL, NULL,
  115|  1.89k|                               source, &creds_out);
  116|  1.89k|  }
  117|     97|  else {
  118|     97|    result = Curl_creds_create(user ? user : Curl_creds_user(creds_in),
  ------------------
  |  |   81|     95|#define Curl_creds_user(c)               ((c) ? (c)->user : "")
  |  |  ------------------
  |  |  |  Branch (81:43): [True: 95, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (118:32): [True: 2, False: 95]
  ------------------
  119|     97|                               passwd ? passwd : Curl_creds_passwd(creds_in),
  ------------------
  |  |   82|     96|#define Curl_creds_passwd(c)             ((c) ? (c)->passwd : "")
  |  |  ------------------
  |  |  |  Branch (82:43): [True: 96, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (119:32): [True: 1, False: 96]
  ------------------
  120|     97|                               Curl_creds_oauth_bearer(creds_in),
  ------------------
  |  |   83|     97|#define Curl_creds_oauth_bearer(c)       ((c) ? (c)->oauth_bearer : "")
  |  |  ------------------
  |  |  |  Branch (83:43): [True: 97, False: 0]
  |  |  ------------------
  ------------------
  121|     97|                               Curl_creds_sasl_authzid(creds_in),
  ------------------
  |  |   84|     97|#define Curl_creds_sasl_authzid(c)       ((c) ? (c)->sasl_authzid : "")
  |  |  ------------------
  |  |  |  Branch (84:43): [True: 97, False: 0]
  |  |  ------------------
  ------------------
  122|     97|                               Curl_creds_sasl_service(creds_in),
  ------------------
  |  |   85|     97|#define Curl_creds_sasl_service(c)       ((c) ? (c)->sasl_service : "")
  |  |  ------------------
  |  |  |  Branch (85:43): [True: 97, False: 0]
  |  |  ------------------
  ------------------
  123|     97|                               source, &creds_out);
  124|     97|  }
  125|  1.99k|  Curl_creds_link(pcreds_out, creds_out);
  126|  1.99k|  Curl_creds_unlink(&creds_out);
  127|  1.99k|  return result;
  128|  1.99k|}
Curl_creds_link:
  131|  4.19k|{
  132|  4.19k|  if(*pdest != src) {
  ------------------
  |  Branch (132:6): [True: 469, False: 3.72k]
  ------------------
  133|    469|    Curl_creds_unlink(pdest);
  134|    469|    *pdest = src;
  135|    469|    if(src) {
  ------------------
  |  Branch (135:8): [True: 469, False: 0]
  ------------------
  136|    469|      DEBUGASSERT(src->refcount < UINT32_MAX);
  ------------------
  |  | 1075|    469|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (136:7): [True: 0, False: 469]
  |  Branch (136:7): [True: 469, False: 0]
  ------------------
  137|    469|      src->refcount++;
  138|    469|    }
  139|    469|  }
  140|  4.19k|}
Curl_creds_unlink:
  143|  32.5k|{
  144|  32.5k|  if(*pcreds) {
  ------------------
  |  Branch (144:6): [True: 763, False: 31.8k]
  ------------------
  145|    763|    struct Curl_creds *creds = *pcreds;
  146|       |
  147|    763|    DEBUGASSERT(creds->refcount);
  ------------------
  |  | 1075|    763|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (147:5): [True: 0, False: 763]
  |  Branch (147:5): [True: 763, False: 0]
  ------------------
  148|    763|    *pcreds = NULL;
  149|    763|    if(creds->refcount)
  ------------------
  |  Branch (149:8): [True: 763, False: 0]
  ------------------
  150|    763|      creds->refcount--;
  151|    763|    if(!creds->refcount) {
  ------------------
  |  Branch (151:8): [True: 294, False: 469]
  ------------------
  152|    294|      curlx_memzero(creds, sizeof(*creds) + creds->bufsize);
  153|    294|      curlx_free(creds);
  ------------------
  |  | 1476|    294|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  154|    294|    }
  155|    763|  }
  156|  32.5k|}
Curl_creds_same:
  159|  2.03k|{
  160|  2.03k|  return (c1 == c2) ||
  ------------------
  |  Branch (160:10): [True: 1.86k, False: 171]
  ------------------
  161|    171|         (c1 && c2 &&
  ------------------
  |  Branch (161:11): [True: 0, False: 171]
  |  Branch (161:17): [True: 0, False: 0]
  ------------------
  162|      0|          !Curl_timestrcmp(c1->user, c2->user) &&
  ------------------
  |  Branch (162:11): [True: 0, False: 0]
  ------------------
  163|      0|          !Curl_timestrcmp(c1->passwd, c2->passwd) &&
  ------------------
  |  Branch (163:11): [True: 0, False: 0]
  ------------------
  164|      0|          !Curl_timestrcmp(c1->oauth_bearer, c2->oauth_bearer) &&
  ------------------
  |  Branch (164:11): [True: 0, False: 0]
  ------------------
  165|      0|          !Curl_timestrcmp(c1->sasl_authzid, c2->sasl_authzid) &&
  ------------------
  |  Branch (165:11): [True: 0, False: 0]
  ------------------
  166|      0|          !Curl_timestrcmp(c1->sasl_service, c2->sasl_service));
  ------------------
  |  Branch (166:11): [True: 0, False: 0]
  ------------------
  167|  2.03k|}
Curl_creds_equal:
  170|  2.03k|{
  171|  2.03k|  return Curl_creds_same(c1, c2) &&
  ------------------
  |  Branch (171:10): [True: 1.86k, False: 171]
  ------------------
  172|  1.86k|         ((c1 == c2) || (c1 && c2 && (c1->source == c2->source)));
  ------------------
  |  Branch (172:11): [True: 1.86k, False: 0]
  |  Branch (172:26): [True: 0, False: 0]
  |  Branch (172:32): [True: 0, False: 0]
  |  Branch (172:38): [True: 0, False: 0]
  ------------------
  173|  2.03k|}
Curl_creds_trace:
  178|  2.03k|{
  179|  2.03k|  if(creds) {
  ------------------
  |  Branch (179:6): [True: 0, False: 2.03k]
  ------------------
  180|      0|    CURL_TRC_M(data, "%s: user=%s, passwd=%s, "
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  ------------------
  |  |  |  Branch (150:28): [True: 0, False: 0]
  |  |  |  Branch (150:28): [True: 0, False: 0]
  |  |  |  Branch (150:28): [True: 0, False: 0]
  |  |  |  Branch (150:28): [True: 0, False: 0]
  |  |  |  Branch (150:28): [True: 0, False: 0]
  |  |  |  Branch (150:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  181|      0|               "sasl_authzid=%s, oauth_bearer=%s, source=%d",
  182|      0|               msg,
  183|      0|               Curl_creds_user(creds),
  184|      0|               Curl_creds_has_passwd(creds) ? "***" : "",
  185|      0|               Curl_creds_sasl_authzid(creds),
  186|      0|               Curl_creds_has_oauth_bearer(creds) ? "***" : "",
  187|      0|               creds->source);
  188|      0|  }
  189|  2.03k|  else
  190|  2.03k|    CURL_TRC_M(data, "%s: -", msg);
  ------------------
  |  |  148|  2.03k|  do {                                   \
  |  |  149|  2.03k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  2.03k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.03k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.03k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 2.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  2.03k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  191|  2.03k|}

Curl_cshutdn_get:
   42|  4.07k|{
   43|  4.07k|  if(data && data->multi)
  ------------------
  |  Branch (43:6): [True: 4.07k, False: 0]
  |  Branch (43:14): [True: 4.07k, False: 0]
  ------------------
   44|  4.07k|    return &data->multi->cshutdn;
   45|      0|  return NULL;
   46|  4.07k|}
Curl_conn_shutdown_once:
  120|  2.03k|{
  121|  2.03k|  DEBUGASSERT(!admin->conn);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (121:3): [True: 0, False: 2.03k]
  |  Branch (121:3): [True: 2.03k, False: 0]
  ------------------
  122|  2.03k|  DEBUGASSERT(!admin->mid);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (122:3): [True: 0, False: 2.03k]
  |  Branch (122:3): [True: 2.03k, False: 0]
  ------------------
  123|  2.03k|  Curl_attach_connection(admin, conn, FALSE);
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  124|  2.03k|  cshutdn_run_once(admin, conn, done);
  125|  2.03k|  CURL_TRC_M(admin, "[SHUTDOWN] shutdown, done=%d", *done);
  ------------------
  |  |  148|  2.03k|  do {                                   \
  |  |  149|  2.03k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  2.03k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.03k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 2.03k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.03k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  2.03k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  126|  2.03k|  Curl_detach_connection(admin);
  127|  2.03k|}
Curl_conn_terminate:
  132|  2.03k|{
  133|  2.03k|  bool done;
  134|       |
  135|       |  /* there must be a connection to close */
  136|  2.03k|  DEBUGASSERT(conn);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (136:3): [True: 0, False: 2.03k]
  |  Branch (136:3): [True: 2.03k, False: 0]
  ------------------
  137|       |  /* it must be removed from the connection pool */
  138|  2.03k|  DEBUGASSERT(!conn->bits.in_cpool);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (138:3): [True: 0, False: 2.03k]
  |  Branch (138:3): [True: 2.03k, False: 0]
  ------------------
  139|       |  /* the transfer must be detached from the connection */
  140|  2.03k|  DEBUGASSERT(admin && !admin->conn);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (140:3): [True: 0, False: 2.03k]
  |  Branch (140:3): [True: 0, False: 0]
  |  Branch (140:3): [True: 2.03k, False: 0]
  |  Branch (140:3): [True: 2.03k, False: 0]
  ------------------
  141|  2.03k|  DEBUGASSERT(!admin->mid);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (141:3): [True: 0, False: 2.03k]
  |  Branch (141:3): [True: 2.03k, False: 0]
  ------------------
  142|       |
  143|  2.03k|  Curl_attach_connection(admin, conn, FALSE);
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  144|       |
  145|  2.03k|  cshutdn_run_conn_handler(admin, conn);
  146|  2.03k|  if(do_shutdown) {
  ------------------
  |  Branch (146:6): [True: 0, False: 2.03k]
  ------------------
  147|       |    /* Make a last attempt to shutdown handlers and filters, if
  148|       |     * not done so already. */
  149|      0|    cshutdn_run_once(admin, conn, &done);
  150|      0|  }
  151|  2.03k|  CURL_TRC_M(admin, "[SHUTDOWN] %sclosing connection #%" FMT_OFF_T,
  ------------------
  |  |  148|  2.03k|  do {                                   \
  |  |  149|  2.03k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  2.03k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.03k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 2.03k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.03k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  2.03k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  ------------------
  |  |  |  Branch (150:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  151|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  152|  2.03k|             conn->bits.shutdown_filters ? "" : "force ",
  153|  2.03k|             conn->connection_id);
  154|  2.03k|  Curl_conn_cf_discard_all(admin, conn, SECONDARYSOCKET);
  ------------------
  |  |  235|  2.03k|#define SECONDARYSOCKET 1
  ------------------
  155|  2.03k|  Curl_conn_cf_discard_all(admin, conn, FIRSTSOCKET);
  ------------------
  |  |  234|  2.03k|#define FIRSTSOCKET     0
  ------------------
  156|  2.03k|  Curl_detach_connection(admin);
  157|       |
  158|  2.03k|  if(admin->multi)
  ------------------
  |  Branch (158:6): [True: 2.03k, False: 0]
  ------------------
  159|  2.03k|    Curl_multi_ev_conn_done(admin->multi, admin, conn);
  160|  2.03k|  Curl_conn_free(admin, conn);
  161|       |
  162|  2.03k|  if(admin->multi) {
  ------------------
  |  Branch (162:6): [True: 2.03k, False: 0]
  ------------------
  163|  2.03k|    CURL_TRC_M(admin, "[SHUTDOWN] trigger multi connchanged");
  ------------------
  |  |  148|  2.03k|  do {                                   \
  |  |  149|  2.03k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  2.03k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.03k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 2.03k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.03k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  2.03k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  164|  2.03k|    Curl_multi_connchanged(admin->multi);
  165|  2.03k|  }
  166|  2.03k|}
Curl_cshutdn_init:
  316|  2.53k|{
  317|  2.53k|  DEBUGASSERT(multi);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (317:3): [True: 0, False: 2.53k]
  |  Branch (317:3): [True: 2.53k, False: 0]
  ------------------
  318|  2.53k|  cshutdn->multi = multi;
  319|  2.53k|  Curl_llist_init(&cshutdn->list, NULL);
  320|       |  cshutdn->initialized = TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  321|  2.53k|  return 0; /* good */
  322|  2.53k|}
Curl_cshutdn_destroy:
  326|  2.53k|{
  327|  2.53k|  if(cshutdn->initialized && admin) {
  ------------------
  |  Branch (327:6): [True: 2.53k, False: 0]
  |  Branch (327:30): [True: 2.53k, False: 0]
  ------------------
  328|  2.53k|    int timeout_ms = 0;
  329|       |    /* for testing, run graceful shutdown */
  330|  2.53k|#ifdef DEBUGBUILD
  331|  2.53k|    DEBUGASSERT(!admin->mid);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (331:5): [True: 0, False: 2.53k]
  |  Branch (331:5): [True: 2.53k, False: 0]
  ------------------
  332|  2.53k|    {
  333|  2.53k|      const char *p = getenv("CURL_GRACEFUL_SHUTDOWN");
  334|  2.53k|      if(p) {
  ------------------
  |  Branch (334:10): [True: 0, False: 2.53k]
  ------------------
  335|      0|        curl_off_t l;
  336|      0|        if(!curlx_str_number(&p, &l, INT_MAX))
  ------------------
  |  Branch (336:12): [True: 0, False: 0]
  ------------------
  337|      0|          timeout_ms = (int)l;
  338|      0|      }
  339|  2.53k|    }
  340|  2.53k|#endif
  341|       |
  342|  2.53k|    CURL_TRC_M(admin, "[SHUTDOWN] destroy, %zu connections, timeout=%dms",
  ------------------
  |  |  148|  2.53k|  do {                                   \
  |  |  149|  2.53k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  2.53k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.53k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  5.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.53k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 2.53k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  5.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.53k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  2.53k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
  343|  2.53k|               Curl_llist_count(&cshutdn->list), timeout_ms);
  344|  2.53k|    cshutdn_terminate_all(cshutdn, timeout_ms);
  345|  2.53k|  }
  346|  2.53k|  cshutdn->multi = NULL;
  347|       |  cshutdn->initialized = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  348|  2.53k|}
Curl_cshutdn_perform:
  423|  2.53k|{
  424|  2.53k|  cshutdn_perform(cshutdn, sigpipe_ctx);
  425|  2.53k|}
cshutdn.c:cshutdn_run_once:
   79|  2.03k|{
   80|  2.03k|  CURLcode r1, r2;
   81|  2.03k|  bool done1, done2;
   82|       |
   83|       |  /* We expect to be attached when called */
   84|  2.03k|  DEBUGASSERT(data->conn == conn);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (84:3): [True: 0, False: 2.03k]
  |  Branch (84:3): [True: 2.03k, False: 0]
  ------------------
   85|       |
   86|  2.03k|  if(!Curl_shutdown_started(conn, FIRSTSOCKET)) {
  ------------------
  |  |  234|  2.03k|#define FIRSTSOCKET     0
  ------------------
  |  Branch (86:6): [True: 2.03k, False: 0]
  ------------------
   87|  2.03k|    Curl_shutdown_start(data, FIRSTSOCKET, 0);
  ------------------
  |  |  234|  2.03k|#define FIRSTSOCKET     0
  ------------------
   88|  2.03k|  }
   89|       |
   90|  2.03k|  cshutdn_run_conn_handler(data, conn);
   91|       |
   92|  2.03k|  if(conn->bits.shutdown_filters) {
  ------------------
  |  Branch (92:6): [True: 0, False: 2.03k]
  ------------------
   93|      0|    *done = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
   94|      0|    return;
   95|      0|  }
   96|       |
   97|  2.03k|  if(!conn->bits.connect_only && Curl_conn_is_connected(conn, FIRSTSOCKET))
  ------------------
  |  |  234|  2.03k|#define FIRSTSOCKET     0
  ------------------
  |  Branch (97:6): [True: 2.03k, False: 0]
  |  Branch (97:34): [True: 2.03k, False: 0]
  ------------------
   98|  2.03k|    r1 = Curl_conn_shutdown(data, FIRSTSOCKET, &done1);
  ------------------
  |  |  234|  2.03k|#define FIRSTSOCKET     0
  ------------------
   99|      0|  else {
  100|      0|    r1 = CURLE_OK;
  101|      0|    done1 = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  102|      0|  }
  103|       |
  104|  2.03k|  if(!conn->bits.connect_only && Curl_conn_is_connected(conn, SECONDARYSOCKET))
  ------------------
  |  |  235|  2.03k|#define SECONDARYSOCKET 1
  ------------------
  |  Branch (104:6): [True: 2.03k, False: 0]
  |  Branch (104:34): [True: 0, False: 2.03k]
  ------------------
  105|      0|    r2 = Curl_conn_shutdown(data, SECONDARYSOCKET, &done2);
  ------------------
  |  |  235|      0|#define SECONDARYSOCKET 1
  ------------------
  106|  2.03k|  else {
  107|  2.03k|    r2 = CURLE_OK;
  108|  2.03k|    done2 = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  109|  2.03k|  }
  110|       |
  111|       |  /* we are done when any failed or both report success */
  112|  2.03k|  *done = (r1 || r2 || (done1 && done2));
  ------------------
  |  Branch (112:12): [True: 0, False: 2.03k]
  |  Branch (112:18): [True: 0, False: 2.03k]
  |  Branch (112:25): [True: 2.03k, False: 0]
  |  Branch (112:34): [True: 2.03k, False: 0]
  ------------------
  113|  2.03k|  if(*done)
  ------------------
  |  Branch (113:6): [True: 2.03k, False: 0]
  ------------------
  114|  2.03k|    conn->bits.shutdown_filters = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  115|  2.03k|}
cshutdn.c:cshutdn_run_conn_handler:
   50|  4.07k|{
   51|  4.07k|  if(!conn->bits.shutdown_handler) {
  ------------------
  |  Branch (51:6): [True: 2.03k, False: 2.03k]
  ------------------
   52|       |
   53|  2.03k|    if(conn->scheme && conn->scheme->run->disconnect) {
  ------------------
  |  Branch (53:8): [True: 2.03k, False: 0]
  |  Branch (53:24): [True: 0, False: 2.03k]
  ------------------
   54|       |      /* Some disconnect handlers do a blocking wait on server responses.
   55|       |       * FTP/IMAP/SMTP and SFTP are among them. When using the internal
   56|       |       * handle, set an overall short timeout so we do not hang for the
   57|       |       * default 120 seconds. */
   58|      0|      if(data->state.internal) {
  ------------------
  |  Branch (58:10): [True: 0, False: 0]
  ------------------
   59|      0|        data->set.timeout = DEFAULT_SHUTDOWN_TIMEOUT_MS;
  ------------------
  |  |   44|      0|#define DEFAULT_SHUTDOWN_TIMEOUT_MS   (2 * 1000)
  ------------------
   60|      0|        Curl_pgrsTime(data, TIMER_STARTOP);
   61|      0|      }
   62|       |
   63|       |      /* This is set if protocol-specific cleanups should be made */
   64|      0|      DEBUGF(infof(data, "connection #%" FMT_OFF_T
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  |  |  ------------------
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [Folded, False: 0]
  |  |  ------------------
  ------------------
   65|      0|                   ", shutdown protocol handler (aborted=%d)",
   66|      0|                   conn->connection_id, conn->bits.aborted));
   67|       |      /* There are protocol handlers that block on retrieving
   68|       |       * server responses here (FTP). Set a short timeout. */
   69|      0|      conn->scheme->run->disconnect(data, conn, (bool)conn->bits.aborted);
   70|      0|    }
   71|       |
   72|       |    conn->bits.shutdown_handler = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
   73|  2.03k|  }
   74|  4.07k|}
cshutdn.c:cshutdn_terminate_all:
  266|  2.53k|{
  267|  2.53k|  struct Curl_easy *admin = cshutdn->multi->admin;
  268|  2.53k|  struct curltime started = *Curl_pgrs_now(admin);
  269|  2.53k|  struct Curl_llist_node *e;
  270|  2.53k|  struct Curl_sigpipe_ctx sigpipe_ctx;
  271|       |
  272|  2.53k|  CURL_TRC_M(admin, "[SHUTDOWN] shutdown all");
  ------------------
  |  |  148|  2.53k|  do {                                   \
  |  |  149|  2.53k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  2.53k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.53k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  5.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.53k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 2.53k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  5.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.53k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  2.53k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
  273|  2.53k|  sigpipe_init(&sigpipe_ctx);
  274|       |
  275|  2.53k|  while(Curl_llist_head(&cshutdn->list)) {
  ------------------
  |  Branch (275:9): [True: 0, False: 2.53k]
  ------------------
  276|      0|    timediff_t spent_ms;
  277|      0|    int remain_ms;
  278|       |
  279|      0|    cshutdn_perform(cshutdn, &sigpipe_ctx);
  280|       |
  281|      0|    if(!Curl_llist_head(&cshutdn->list)) {
  ------------------
  |  Branch (281:8): [True: 0, False: 0]
  ------------------
  282|      0|      CURL_TRC_M(admin, "[SHUTDOWN] shutdown finished cleanly");
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  283|      0|      break;
  284|      0|    }
  285|       |
  286|       |    /* wait for activity, timeout or "nothing" */
  287|      0|    spent_ms = curlx_ptimediff_ms(Curl_pgrs_now(admin), &started);
  288|      0|    if(spent_ms >= (timediff_t)timeout_ms) {
  ------------------
  |  Branch (288:8): [True: 0, False: 0]
  ------------------
  289|      0|      CURL_TRC_M(admin, "[SHUTDOWN] shutdown finished, %s",
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  ------------------
  |  |  |  Branch (150:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  290|      0|                 (timeout_ms > 0) ? "timeout" : "best effort done");
  291|      0|      break;
  292|      0|    }
  293|       |
  294|      0|    remain_ms = timeout_ms - (int)spent_ms;
  295|      0|    if(cshutdn_wait(cshutdn, remain_ms)) {
  ------------------
  |  Branch (295:8): [True: 0, False: 0]
  ------------------
  296|      0|      CURL_TRC_M(admin, "[SHUTDOWN] shutdown finished, aborted");
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  297|      0|      break;
  298|      0|    }
  299|      0|  }
  300|       |
  301|       |  /* Terminate any remaining. */
  302|  2.53k|  e = Curl_llist_head(&cshutdn->list);
  303|  2.53k|  while(e) {
  ------------------
  |  Branch (303:9): [True: 0, False: 2.53k]
  ------------------
  304|      0|    struct connectdata *conn = Curl_node_elem(e);
  305|      0|    Curl_node_remove(e);
  306|      0|    Curl_conn_terminate(admin, conn, FALSE);
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  307|      0|    e = Curl_llist_head(&cshutdn->list);
  308|      0|  }
  309|  2.53k|  DEBUGASSERT(!Curl_llist_count(&cshutdn->list));
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (309:3): [True: 0, False: 2.53k]
  |  Branch (309:3): [True: 2.53k, False: 0]
  ------------------
  310|       |
  311|  2.53k|  sigpipe_restore(&sigpipe_ctx);
  312|  2.53k|}
cshutdn.c:cshutdn_perform:
  228|  2.53k|{
  229|  2.53k|  struct Curl_llist_node *e = Curl_llist_head(&cshutdn->list);
  230|  2.53k|  struct Curl_llist_node *enext;
  231|  2.53k|  struct Curl_easy *admin = cshutdn->multi->admin;
  232|  2.53k|  struct connectdata *conn;
  233|  2.53k|  timediff_t next_expire_ms = 0, ms;
  234|  2.53k|  bool done;
  235|       |
  236|  2.53k|  if(!e)
  ------------------
  |  Branch (236:6): [True: 2.53k, False: 0]
  ------------------
  237|  2.53k|    return;
  238|       |
  239|      0|  CURL_TRC_M(admin, "[SHUTDOWN] perform on %zu connections",
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  240|      0|             Curl_llist_count(&cshutdn->list));
  241|      0|  sigpipe_apply(admin, sigpipe_ctx);
  242|      0|  while(e) {
  ------------------
  |  Branch (242:9): [True: 0, False: 0]
  ------------------
  243|      0|    enext = Curl_node_next(e);
  244|      0|    conn = Curl_node_elem(e);
  245|      0|    Curl_conn_shutdown_once(admin, conn, &done);
  246|      0|    if(done) {
  ------------------
  |  Branch (246:8): [True: 0, False: 0]
  ------------------
  247|      0|      Curl_node_remove(e);
  248|      0|      Curl_conn_terminate(admin, conn, FALSE);
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  249|      0|    }
  250|      0|    else {
  251|       |      /* idata has one timer list, but maybe more than one connection.
  252|       |       * Set EXPIRE_SHUTDOWN to the smallest time left for all. */
  253|      0|      ms = Curl_conn_shutdown_timeleft(admin, conn);
  254|      0|      if(ms && (!next_expire_ms || (ms < next_expire_ms)))
  ------------------
  |  Branch (254:10): [True: 0, False: 0]
  |  Branch (254:17): [True: 0, False: 0]
  |  Branch (254:36): [True: 0, False: 0]
  ------------------
  255|      0|        next_expire_ms = ms;
  256|      0|    }
  257|      0|    e = enext;
  258|      0|  }
  259|       |
  260|      0|  if(next_expire_ms)
  ------------------
  |  Branch (260:6): [True: 0, False: 0]
  ------------------
  261|      0|    Curl_expire(admin, next_expire_ms, EXPIRE_SHUTDOWN);
  262|      0|}

Curl_freeaddrinfo:
   72|  2.03k|{
   73|  2.03k|  struct Curl_addrinfo *vqualifier canext;
   74|  2.03k|  struct Curl_addrinfo *ca;
   75|       |
   76|  4.07k|  for(ca = cahead; ca; ca = canext) {
  ------------------
  |  Branch (76:20): [True: 2.03k, False: 2.03k]
  ------------------
   77|  2.03k|    canext = ca->ai_next;
   78|  2.03k|    curlx_free(ca);
  ------------------
  |  | 1476|  2.03k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   79|  2.03k|  }
   80|  2.03k|}
Curl_addrinfo_get:
   85|  4.07k|{
   86|  4.07k|  unsigned int i;
   87|  6.10k|  for(i = 0; ai; ai = ai->ai_next) {
  ------------------
  |  Branch (87:14): [True: 4.07k, False: 2.03k]
  ------------------
   88|  4.07k|    if(ai->ai_family == ai_family) {
  ------------------
  |  Branch (88:8): [True: 2.03k, False: 2.03k]
  ------------------
   89|  2.03k|      if(i == n)
  ------------------
  |  Branch (89:10): [True: 2.03k, False: 0]
  ------------------
   90|  2.03k|        return ai;
   91|      0|      ++i;
   92|      0|    }
   93|  4.07k|  }
   94|  2.03k|  return NULL;
   95|  4.07k|}
Curl_str2addr:
  425|  2.03k|{
  426|  2.03k|  struct in_addr in;
  427|  2.03k|  if(curlx_inet_pton(AF_INET, dotted, &in) > 0)
  ------------------
  |  Branch (427:6): [True: 2.03k, False: 0]
  ------------------
  428|       |    /* This is a dotted IP address 123.123.123.123-style */
  429|  2.03k|    return ip2addr(addrp, AF_INET, &in, dotted, port);
  430|      0|#ifdef USE_IPV6
  431|      0|  {
  432|      0|    struct in6_addr in6;
  433|      0|    if(curlx_inet_pton(AF_INET6, dotted, &in6) > 0)
  ------------------
  |  Branch (433:8): [True: 0, False: 0]
  ------------------
  434|       |      /* This is a dotted IPv6 address ::1-style */
  435|      0|      return ip2addr(addrp, AF_INET6, &in6, dotted, port);
  436|      0|  }
  437|      0|#endif
  438|      0|  return CURLE_BAD_FUNCTION_ARGUMENT; /* bad input format */
  439|      0|}
Curl_is_ipv4addr:
  442|  4.07k|{
  443|  4.07k|  struct in_addr in;
  444|       |  return (curlx_inet_pton(AF_INET, address, &in) > 0);
  445|  4.07k|}
Curl_is_ipaddr:
  448|  2.03k|{
  449|  2.03k|  if(Curl_is_ipv4addr(address))
  ------------------
  |  Branch (449:6): [True: 2.03k, False: 0]
  ------------------
  450|  2.03k|    return TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  451|      0|#ifdef USE_IPV6
  452|      0|  {
  453|      0|    struct in6_addr in6;
  454|      0|    if(curlx_inet_pton(AF_INET6, address, &in6) > 0)
  ------------------
  |  Branch (454:8): [True: 0, False: 0]
  ------------------
  455|       |      /* This is a dotted IPv6 address ::1-style */
  456|      0|      return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  457|      0|  }
  458|      0|#endif
  459|      0|  return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  460|      0|}
Curl_looks_like_ipv6:
  464|     50|{
  465|     50|  const char *zonep = NULL;
  466|     50|  size_t i = 0, hlen = 0, zlen = 0;
  467|       |
  468|     50|  if(host)
  ------------------
  |  Branch (468:6): [True: 50, False: 0]
  ------------------
  469|     50|    memset(host, 0, sizeof(*host));
  470|     50|  if(zone)
  ------------------
  |  Branch (470:6): [True: 50, False: 0]
  ------------------
  471|     50|    memset(zone, 0, sizeof(*zone));
  472|       |
  473|    581|  for(i = 0; i < len; ++i, ++hlen) {
  ------------------
  |  Branch (473:14): [True: 531, False: 50]
  ------------------
  474|    531|    if(!s[i] || !(ISXDIGIT(s[i]) || (s[i] == ':') || (s[i] == '.')))
  ------------------
  |  |   37|  1.06k|#define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   42|  1.06k|#define ISDIGIT(x)  (((x) >= '0') && ((x) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (42:22): [True: 531, False: 0]
  |  |  |  |  |  Branch (42:38): [True: 131, False: 400]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   27|    931|#define ISLOWHEXALPHA(x) (((x) >= 'a') && ((x) <= 'f'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (27:27): [True: 170, False: 230]
  |  |  |  |  |  Branch (27:43): [True: 170, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   28|    230|#define ISUPHEXALPHA(x)  (((x) >= 'A') && ((x) <= 'F'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (28:27): [True: 29, False: 201]
  |  |  |  |  |  Branch (28:43): [True: 29, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (474:8): [True: 0, False: 531]
  |  Branch (474:37): [True: 201, False: 0]
  |  Branch (474:54): [True: 0, False: 0]
  ------------------
  475|      0|      break;
  476|    531|  }
  477|       |
  478|     50|  if((i < len) && (s[i] == '%')) { /* address followed by a zone? */
  ------------------
  |  Branch (478:6): [True: 0, False: 50]
  |  Branch (478:19): [True: 0, False: 0]
  ------------------
  479|      0|    i += 1;
  480|      0|    if(maybe_url_encoded && !strncmp("25", s + i, 2))
  ------------------
  |  Branch (480:8): [True: 0, False: 0]
  |  Branch (480:29): [True: 0, False: 0]
  ------------------
  481|      0|      i += 2;
  482|      0|    zonep = s + i;
  483|      0|    for(; i < len; ++i, ++zlen) {
  ------------------
  |  Branch (483:11): [True: 0, False: 0]
  ------------------
  484|       |      /* Allow unreserved characters as defined in RFC 3986 */
  485|      0|      if(!s[i] || !(ISALPHA(s[i]) || ISXDIGIT(s[i]) || (s[i] == '-') ||
  ------------------
  |  |   36|      0|#define ISALPHA(x)  (ISLOWER(x) || ISUPPER(x))
  |  |  ------------------
  |  |  |  |   41|      0|#define ISLOWER(x)  (((x) >= 'a') && ((x) <= 'z'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (41:22): [True: 0, False: 0]
  |  |  |  |  |  Branch (41:38): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISALPHA(x)  (ISLOWER(x) || ISUPPER(x))
  |  |  ------------------
  |  |  |  |   40|      0|#define ISUPPER(x)  (((x) >= 'A') && ((x) <= 'Z'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:22): [True: 0, False: 0]
  |  |  |  |  |  Branch (40:38): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                    if(!s[i] || !(ISALPHA(s[i]) || ISXDIGIT(s[i]) || (s[i] == '-') ||
  ------------------
  |  |   37|      0|#define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   42|      0|#define ISDIGIT(x)  (((x) >= '0') && ((x) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (42:22): [True: 0, False: 0]
  |  |  |  |  |  Branch (42:38): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   27|      0|#define ISLOWHEXALPHA(x) (((x) >= 'a') && ((x) <= 'f'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (27:27): [True: 0, False: 0]
  |  |  |  |  |  Branch (27:43): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   28|      0|#define ISUPHEXALPHA(x)  (((x) >= 'A') && ((x) <= 'F'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (28:27): [True: 0, False: 0]
  |  |  |  |  |  Branch (28:43): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (485:10): [True: 0, False: 0]
  |  Branch (485:56): [True: 0, False: 0]
  ------------------
  486|      0|                    (s[i] == '.') || (s[i] == '_') || (s[i] == '~')))
  ------------------
  |  Branch (486:21): [True: 0, False: 0]
  |  Branch (486:38): [True: 0, False: 0]
  |  Branch (486:55): [True: 0, False: 0]
  ------------------
  487|      0|        break;
  488|      0|    }
  489|      0|  }
  490|       |
  491|     50|  if(i != len)
  ------------------
  |  Branch (491:6): [True: 0, False: 50]
  ------------------
  492|      0|    return FALSE; /* invalid chars in zone */
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  493|     50|  if(host && hlen) {
  ------------------
  |  Branch (493:6): [True: 50, False: 0]
  |  Branch (493:14): [True: 50, False: 0]
  ------------------
  494|     50|    host->str = s;
  495|     50|    host->len = hlen;
  496|     50|  }
  497|     50|  if(zone && zlen) {
  ------------------
  |  Branch (497:6): [True: 50, False: 0]
  |  Branch (497:14): [True: 0, False: 50]
  ------------------
  498|      0|    zone->str = zonep;
  499|      0|    zone->len = zlen;
  500|      0|  }
  501|       |  return TRUE;
  ------------------
  |  | 1045|     50|#define TRUE true
  ------------------
  502|     50|}
curl_addrinfo.c:ip2addr:
  359|  2.03k|{
  360|  2.03k|  struct Curl_addrinfo *ai;
  361|  2.03k|  size_t addrsize;
  362|  2.03k|  size_t namelen;
  363|  2.03k|  struct sockaddr_in *addr;
  364|  2.03k|#ifdef USE_IPV6
  365|  2.03k|  struct sockaddr_in6 *addr6;
  366|  2.03k|#endif
  367|       |
  368|  2.03k|  DEBUGASSERT(inaddr && hostname);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (368:3): [True: 0, False: 2.03k]
  |  Branch (368:3): [True: 0, False: 0]
  |  Branch (368:3): [True: 2.03k, False: 0]
  |  Branch (368:3): [True: 2.03k, False: 0]
  ------------------
  369|       |
  370|  2.03k|  namelen = strlen(hostname) + 1;
  371|  2.03k|  *addrp = NULL;
  372|       |
  373|  2.03k|  if(af == AF_INET)
  ------------------
  |  Branch (373:6): [True: 2.03k, False: 0]
  ------------------
  374|  2.03k|    addrsize = sizeof(struct sockaddr_in);
  375|      0|#ifdef USE_IPV6
  376|      0|  else if(af == AF_INET6)
  ------------------
  |  Branch (376:11): [True: 0, False: 0]
  ------------------
  377|      0|    addrsize = sizeof(struct sockaddr_in6);
  378|      0|#endif
  379|      0|  else
  380|      0|    return CURLE_BAD_FUNCTION_ARGUMENT;
  381|       |
  382|       |  /* allocate memory to hold the struct, the address and the name */
  383|  2.03k|  ai = curlx_calloc(1, sizeof(struct Curl_addrinfo) + addrsize + namelen);
  ------------------
  |  | 1473|  2.03k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
  384|  2.03k|  if(!ai)
  ------------------
  |  Branch (384:6): [True: 0, False: 2.03k]
  ------------------
  385|      0|    return CURLE_OUT_OF_MEMORY;
  386|       |  /* put the address after the struct */
  387|  2.03k|  ai->ai_addr = (void *)((char *)ai + sizeof(struct Curl_addrinfo));
  388|       |  /* then put the name after the address */
  389|  2.03k|  ai->ai_canonname = (char *)ai->ai_addr + addrsize;
  390|  2.03k|  memcpy(ai->ai_canonname, hostname, namelen);
  391|  2.03k|  ai->ai_family = af;
  392|  2.03k|  ai->ai_socktype = SOCK_STREAM;
  393|  2.03k|  ai->ai_addrlen = (curl_socklen_t)addrsize;
  394|       |  /* leave the rest of the struct filled with zero */
  395|       |
  396|  2.03k|  switch(af) {
  ------------------
  |  Branch (396:10): [True: 2.03k, False: 0]
  ------------------
  397|  2.03k|  case AF_INET:
  ------------------
  |  Branch (397:3): [True: 2.03k, False: 0]
  ------------------
  398|  2.03k|    addr = (void *)ai->ai_addr; /* storage area for this info */
  399|       |
  400|  2.03k|    memcpy(&addr->sin_addr, inaddr, sizeof(struct in_addr));
  401|  2.03k|    addr->sin_family = (CURL_SA_FAMILY_T)af;
  402|  2.03k|    addr->sin_port = htons((unsigned short)port);
  403|  2.03k|    break;
  404|       |
  405|      0|#ifdef USE_IPV6
  406|      0|  case AF_INET6:
  ------------------
  |  Branch (406:3): [True: 0, False: 2.03k]
  ------------------
  407|      0|    addr6 = (void *)ai->ai_addr; /* storage area for this info */
  408|       |
  409|      0|    memcpy(&addr6->sin6_addr, inaddr, sizeof(struct in6_addr));
  410|      0|    addr6->sin6_family = (CURL_SA_FAMILY_T)af;
  411|      0|    addr6->sin6_port = htons((unsigned short)port);
  412|      0|    break;
  413|  2.03k|#endif
  414|  2.03k|  }
  415|  2.03k|  *addrp = ai;
  416|  2.03k|  return CURLE_OK;
  417|  2.03k|}

Curl_fopen:
   86|  7.61k|{
   87|  7.61k|  CURLcode result = CURLE_WRITE_ERROR;
   88|  7.61k|  unsigned char randbuf[41];
   89|  7.61k|  char *tempstore = NULL;
   90|  7.61k|#ifndef _WIN32
   91|  7.61k|  curlx_struct_stat sb;
  ------------------
  |  |   65|  7.61k|#define curlx_struct_stat       struct stat
  ------------------
   92|  7.61k|#endif
   93|  7.61k|  int fd = -1;
   94|  7.61k|  char *dir = NULL;
   95|  7.61k|  *tempname = NULL;
   96|       |
   97|  7.61k|#ifndef _WIN32
   98|  7.61k|  *fh = curlx_fopen(filename, FOPEN_WRITETEXT);
  ------------------
  |  |   76|  7.61k|#define curlx_fopen(file, mode) curl_dbg_fopen(file, mode, __LINE__, __FILE__)
  ------------------
   99|  7.61k|  if(!*fh)
  ------------------
  |  Branch (99:6): [True: 0, False: 7.61k]
  ------------------
  100|      0|    goto fail;
  101|  7.61k|  if(curlx_fstat(fileno(*fh), &sb) == -1 || !S_ISREG(sb.st_mode)) {
  ------------------
  |  |   64|  7.61k|#define curlx_fstat             fstat
  ------------------
  |  Branch (101:6): [True: 0, False: 7.61k]
  |  Branch (101:45): [True: 7.61k, False: 0]
  ------------------
  102|  7.61k|    return CURLE_OK;
  103|  7.61k|  }
  104|      0|  curlx_fclose(*fh);
  ------------------
  |  |   81|      0|#define curlx_fclose(file)      curl_dbg_fclose(file, __LINE__, __FILE__)
  ------------------
  105|      0|#ifdef HAVE_GETEUID
  106|       |  /* If the existing file is not owned by the user, do not inherit
  107|       |   * its permissions at the temp file created below. The permissions
  108|       |   * might be unsuitable for holding user private data. */
  109|      0|  if(sb.st_uid != geteuid())
  ------------------
  |  Branch (109:6): [True: 0, False: 0]
  ------------------
  110|      0|    sb.st_mode = 0;
  111|      0|#endif
  112|      0|#endif /* !_WIN32 */
  113|      0|  *fh = NULL;
  114|       |
  115|      0|  result = Curl_rand_alnum(data, randbuf, sizeof(randbuf));
  116|      0|  if(result)
  ------------------
  |  Branch (116:6): [True: 0, False: 0]
  ------------------
  117|      0|    goto fail;
  118|       |
  119|      0|  dir = dirslash(filename);
  120|      0|  if(dir) {
  ------------------
  |  Branch (120:6): [True: 0, False: 0]
  ------------------
  121|       |    /* The temp filename should not end up too long for the target file
  122|       |       system */
  123|      0|    tempstore = curl_maprintf("%s%s.tmp", dir, randbuf);
  124|      0|    curlx_free(dir);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  125|      0|  }
  126|       |
  127|      0|  if(!tempstore) {
  ------------------
  |  Branch (127:6): [True: 0, False: 0]
  ------------------
  128|      0|    result = CURLE_OUT_OF_MEMORY;
  129|      0|    goto fail;
  130|      0|  }
  131|       |
  132|      0|  result = CURLE_WRITE_ERROR;
  133|       |#ifdef _WIN32
  134|       |  fd = curlx_open(tempstore, _O_WRONLY | _O_CREAT | _O_EXCL,
  135|       |                  _S_IREAD | _S_IWRITE);
  136|       |#elif (defined(ANDROID) || defined(__ANDROID__)) && \
  137|       |  (defined(__i386__) || defined(__arm__))
  138|       |  fd = curlx_open(tempstore, O_WRONLY | O_CREAT | O_EXCL,
  139|       |                  (mode_t)(S_IRUSR | S_IWUSR | sb.st_mode));
  140|       |#else
  141|      0|  fd = curlx_open(tempstore, O_WRONLY | O_CREAT | O_EXCL,
  ------------------
  |  |   70|      0|#define curlx_open              open
  ------------------
  142|      0|                  S_IRUSR | S_IWUSR | sb.st_mode);
  143|      0|#endif
  144|      0|  if(fd == -1)
  ------------------
  |  Branch (144:6): [True: 0, False: 0]
  ------------------
  145|      0|    goto fail;
  146|       |
  147|      0|  *fh = curlx_fdopen(fd, FOPEN_WRITETEXT);
  ------------------
  |  |   80|      0|  curl_dbg_fdopen(file, mode, __LINE__, __FILE__)
  ------------------
  148|      0|  if(!*fh)
  ------------------
  |  Branch (148:6): [True: 0, False: 0]
  ------------------
  149|      0|    goto fail;
  150|       |
  151|      0|  *tempname = tempstore;
  152|      0|  return CURLE_OK;
  153|       |
  154|      0|fail:
  155|      0|  if(fd != -1) {
  ------------------
  |  Branch (155:6): [True: 0, False: 0]
  ------------------
  156|      0|    curlx_close(fd);
  ------------------
  |  |   71|      0|#define curlx_close             close
  ------------------
  157|      0|    unlink(tempstore);
  158|      0|  }
  159|       |
  160|      0|  curlx_free(tempstore);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  161|      0|  return result;
  162|      0|}

Curl_get_line:
   36|  7.61k|{
   37|  7.61k|  CURLcode result;
   38|  7.61k|  char buffer[128];
   39|  7.61k|  curlx_dyn_reset(buf);
   40|  7.61k|  while(1) {
  ------------------
  |  Branch (40:9): [True: 7.61k, Folded]
  ------------------
   41|  7.61k|    size_t rlen;
   42|  7.61k|    const char *b = fgets(buffer, sizeof(buffer), input);
   43|  7.61k|    if(!b && ferror(input))
  ------------------
  |  Branch (43:8): [True: 7.61k, False: 0]
  |  Branch (43:14): [True: 0, False: 7.61k]
  ------------------
   44|      0|      return CURLE_READ_ERROR;
   45|       |
   46|  7.61k|    *eof = feof(input);
   47|       |
   48|  7.61k|    rlen = b ? strlen(b) : 0;
  ------------------
  |  Branch (48:12): [True: 0, False: 7.61k]
  ------------------
   49|  7.61k|    if(rlen) {
  ------------------
  |  Branch (49:8): [True: 0, False: 7.61k]
  ------------------
   50|      0|      result = curlx_dyn_addn(buf, b, rlen);
   51|      0|      if(result)
  ------------------
  |  Branch (51:10): [True: 0, False: 0]
  ------------------
   52|       |        /* too long line or out of memory */
   53|      0|        return result;
   54|      0|    }
   55|       |    /* now check the full line */
   56|  7.61k|    rlen = curlx_dyn_len(buf);
   57|  7.61k|    b = curlx_dyn_ptr(buf);
   58|  7.61k|    if(rlen && (b[rlen - 1] == '\n'))
  ------------------
  |  Branch (58:8): [True: 0, False: 7.61k]
  |  Branch (58:16): [True: 0, False: 0]
  ------------------
   59|       |      /* LF at end of the line */
   60|      0|      return CURLE_OK; /* all good */
   61|  7.61k|    if(*eof)
  ------------------
  |  Branch (61:8): [True: 7.61k, False: 0]
  ------------------
   62|       |      /* append a newline */
   63|  7.61k|      return curlx_dyn_addn(buf, "\n", 1);
   64|       |    /* otherwise get next line to append */
   65|  7.61k|  }
   66|       |  /* UNREACHABLE */
   67|  7.61k|}

Curl_share_lock_share:
  378|  12.6k|{
  379|  12.6k|  if(!share)
  ------------------
  |  Branch (379:6): [True: 12.6k, False: 0]
  ------------------
  380|  12.6k|    return CURLSHE_INVALID;
  381|       |
  382|      0|  if(share->specifier & (unsigned int)(1 << type)) {
  ------------------
  |  Branch (382:6): [True: 0, False: 0]
  ------------------
  383|      0|    if(share->lockfunc) /* only call this if set! */
  ------------------
  |  Branch (383:8): [True: 0, False: 0]
  ------------------
  384|      0|      share->lockfunc(data, type, accesstype, share->clientdata);
  385|      0|  }
  386|       |  /* else if we do not share this, pretend successful lock */
  387|       |
  388|      0|  return CURLSHE_OK;
  389|  12.6k|}
Curl_share_lock:
  393|  12.6k|{
  394|  12.6k|  return Curl_share_lock_share(data->share, data, type, accesstype);
  395|  12.6k|}
Curl_share_unlock_share:
  400|  12.6k|{
  401|  12.6k|  if(!share)
  ------------------
  |  Branch (401:6): [True: 12.6k, False: 0]
  ------------------
  402|  12.6k|    return CURLSHE_INVALID;
  403|       |
  404|      0|  if(share->specifier & (unsigned int)(1 << type)) {
  ------------------
  |  Branch (404:6): [True: 0, False: 0]
  ------------------
  405|      0|    if(share->unlockfunc) /* only call this if set! */
  ------------------
  |  Branch (405:8): [True: 0, False: 0]
  ------------------
  406|      0|      share->unlockfunc(data, type, share->clientdata);
  407|      0|  }
  408|       |
  409|      0|  return CURLSHE_OK;
  410|  12.6k|}
Curl_share_unlock:
  413|  12.6k|{
  414|  12.6k|  return Curl_share_unlock_share(data->share, data, type);
  415|  12.6k|}
Curl_share_easy_unlink:
  418|  5.07k|{
  419|  5.07k|  struct Curl_share *share = data->share;
  420|       |
  421|  5.07k|  if(share) {
  ------------------
  |  Branch (421:6): [True: 0, False: 5.07k]
  ------------------
  422|      0|    bool locked = share_lock_acquire(share, data);
  423|       |
  424|       |    /* If share caches connections, detach any existing connection and
  425|       |     * forget its identifier. */
  426|      0|    if((share->specifier & (1 << CURL_LOCK_DATA_CONNECT))) {
  ------------------
  |  Branch (426:8): [True: 0, False: 0]
  ------------------
  427|      0|      if(data->conn)
  ------------------
  |  Branch (427:10): [True: 0, False: 0]
  ------------------
  428|      0|        Curl_detach_connection(data);
  429|      0|      data->state.lastconnect_id = -1;
  430|      0|    }
  431|       |
  432|      0|#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
  433|      0|    if(share->cookies == data->cookies)
  ------------------
  |  Branch (433:8): [True: 0, False: 0]
  ------------------
  434|      0|      data->cookies = NULL;
  435|      0|#endif
  436|       |
  437|      0|#ifndef CURL_DISABLE_HSTS
  438|      0|    if(share->hsts == data->hsts)
  ------------------
  |  Branch (438:8): [True: 0, False: 0]
  ------------------
  439|      0|      data->hsts = NULL;
  440|      0|#endif
  441|       |#ifdef USE_LIBPSL
  442|       |    if(&share->psl == data->psl)
  443|       |      data->psl = data->multi ? &data->multi->psl : NULL;
  444|       |#endif
  445|       |
  446|      0|    share_unlink(&data->share, data, locked);
  447|      0|  }
  448|  5.07k|  return CURLE_OK;
  449|  5.07k|}

Curl_debug:
  128|  2.36k|{
  129|  2.36k|  if(data->set.verbose) {
  ------------------
  |  Branch (129:6): [True: 2.36k, False: 0]
  ------------------
  130|  2.36k|    static const char s_infotype[CURLINFO_END][3] = {
  131|  2.36k|      "* ", "< ", "> ", "{ ", "} ", "{ ", "} " };
  132|  2.36k|    char buf[TRC_LINE_MAX];
  133|  2.36k|    size_t len;
  134|  2.36k|    if(data->set.fdebug) {
  ------------------
  |  Branch (134:8): [True: 2.36k, False: 0]
  ------------------
  135|  2.36k|      struct Curl_mapi_guard guard;
  136|  2.36k|      if(CURL_TRC_IDS(data) && (size < TRC_LINE_MAX)) {
  ------------------
  |  |   90|  4.72k|  (Curl_trc_is_verbose(data) && \
  |  |  ------------------
  |  |  |  |  322|  4.72k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 2.36k, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 2.36k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|  4.72k|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 2.36k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|  2.36k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   91|  4.72k|  Curl_trc_feat_ids.log_level >= CURL_LOG_LVL_INFO)
  |  |  ------------------
  |  |  |  |   70|  2.36k|#define CURL_LOG_LVL_INFO  1
  |  |  ------------------
  |  |  |  Branch (91:3): [True: 0, False: 2.36k]
  |  |  ------------------
  ------------------
                    if(CURL_TRC_IDS(data) && (size < TRC_LINE_MAX)) {
  ------------------
  |  |   78|      0|#define TRC_LINE_MAX 2048
  ------------------
  |  Branch (136:32): [True: 0, False: 0]
  ------------------
  137|      0|        len = trc_print_ids(data, buf, TRC_LINE_MAX);
  ------------------
  |  |   78|      0|#define TRC_LINE_MAX 2048
  ------------------
  138|      0|        len += curl_msnprintf(buf + len, TRC_LINE_MAX - len, "%.*s",
  ------------------
  |  |   78|      0|#define TRC_LINE_MAX 2048
  ------------------
  139|      0|                              (int)size, ptr);
  140|      0|        len = trc_end_buf(buf, len, TRC_LINE_MAX, FALSE);
  ------------------
  |  |   78|      0|#define TRC_LINE_MAX 2048
  ------------------
                      len = trc_end_buf(buf, len, TRC_LINE_MAX, FALSE);
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  141|      0|        CURL_CBAPI_START(&guard, data, easy_fdebug);
  ------------------
  |  |  201|      0|  Curl_cbapi_enter((g), (d), NULL, CURL_CBAPI_FN_##fn)
  ------------------
  142|      0|        (void)(*data->set.fdebug)(data, type, buf, len, data->set.debugdata);
  143|      0|        CURL_CBAPI_END(&guard);
  ------------------
  |  |  205|      0|  Curl_cbapi_leave(g)
  ------------------
  144|      0|      }
  145|  2.36k|      else {
  146|  2.36k|        CURL_CBAPI_START(&guard, data, easy_fdebug);
  ------------------
  |  |  201|  2.36k|  Curl_cbapi_enter((g), (d), NULL, CURL_CBAPI_FN_##fn)
  ------------------
  147|  2.36k|        (void)(*data->set.fdebug)(data, type, CURL_UNCONST(ptr),
  ------------------
  |  |  856|  2.36k|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
  148|  2.36k|                                  size, data->set.debugdata);
  149|  2.36k|        CURL_CBAPI_END(&guard);
  ------------------
  |  |  205|  2.36k|  Curl_cbapi_leave(g)
  ------------------
  150|  2.36k|      }
  151|  2.36k|    }
  152|      0|    else {
  153|      0|      switch(type) {
  154|      0|      case CURLINFO_TEXT:
  ------------------
  |  Branch (154:7): [True: 0, False: 0]
  ------------------
  155|      0|      case CURLINFO_HEADER_OUT:
  ------------------
  |  Branch (155:7): [True: 0, False: 0]
  ------------------
  156|      0|      case CURLINFO_HEADER_IN:
  ------------------
  |  Branch (156:7): [True: 0, False: 0]
  ------------------
  157|      0|#ifndef CURL_DISABLE_VERBOSE_STRINGS
  158|      0|        if(CURL_TRC_IDS(data)) {
  ------------------
  |  |   90|      0|  (Curl_trc_is_verbose(data) && \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   91|      0|  Curl_trc_feat_ids.log_level >= CURL_LOG_LVL_INFO)
  |  |  ------------------
  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  ------------------
  |  |  |  Branch (91:3): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  159|      0|          len = trc_print_ids(data, buf, TRC_LINE_MAX);
  ------------------
  |  |   78|      0|#define TRC_LINE_MAX 2048
  ------------------
  160|      0|          fwrite(buf, len, 1, data->set.err);
  161|      0|        }
  162|      0|#endif
  163|      0|        fwrite(s_infotype[type], 2, 1, data->set.err);
  164|      0|        fwrite(ptr, size, 1, data->set.err);
  165|      0|        break;
  166|      0|      default: /* nada */
  ------------------
  |  Branch (166:7): [True: 0, False: 0]
  ------------------
  167|      0|        break;
  168|      0|      }
  169|      0|    }
  170|  2.36k|  }
  171|  2.36k|}
Curl_failf:
  177|    614|{
  178|    614|  DEBUGASSERT(!strchr(fmt, '\n'));
  ------------------
  |  | 1075|    614|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (178:3): [True: 0, False: 614]
  |  Branch (178:3): [True: 614, False: 0]
  ------------------
  179|    614|  if(data->set.verbose || data->set.errorbuffer) {
  ------------------
  |  Branch (179:6): [True: 614, False: 0]
  |  Branch (179:27): [True: 0, False: 0]
  ------------------
  180|    614|    va_list ap;
  181|    614|    size_t len;
  182|    614|    char error[CURL_ERROR_SIZE + 2];
  183|    614|    va_start(ap, fmt);
  184|    614|    len = curl_mvsnprintf(error, CURL_ERROR_SIZE, fmt, ap);
  ------------------
  |  |  877|    614|#define CURL_ERROR_SIZE 256
  ------------------
  185|       |
  186|    614|    if(data->set.errorbuffer && !data->state.errorbuf) {
  ------------------
  |  Branch (186:8): [True: 0, False: 614]
  |  Branch (186:33): [True: 0, False: 0]
  ------------------
  187|      0|      curlx_strcopy(data->set.errorbuffer, CURL_ERROR_SIZE, error, len);
  ------------------
  |  |  877|      0|#define CURL_ERROR_SIZE 256
  ------------------
  188|      0|      data->state.errorbuf = TRUE; /* wrote error string */
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  189|      0|    }
  190|    614|    error[len++] = '\n';
  191|    614|    error[len] = '\0';
  192|    614|    trc_write(data, CURLINFO_TEXT, error, len);
  193|       |    va_end(ap);
  194|    614|  }
  195|    614|}
Curl_reset_fail:
  198|  4.07k|{
  199|  4.07k|  if(data->set.errorbuffer)
  ------------------
  |  Branch (199:6): [True: 0, False: 4.07k]
  ------------------
  200|      0|    data->set.errorbuffer[0] = 0;
  201|       |  data->state.errorbuf = FALSE;
  ------------------
  |  | 1048|  4.07k|#define FALSE false
  ------------------
  202|  4.07k|}
Curl_infof:
  271|   286k|{
  272|   286k|  DEBUGASSERT(!strchr(fmt, '\n'));
  ------------------
  |  | 1075|   286k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (272:3): [True: 0, False: 286k]
  |  Branch (272:3): [True: 286k, False: 0]
  ------------------
  273|   286k|  if(Curl_trc_is_verbose(data)) {
  ------------------
  |  |  322|   286k|  ((data) && (data)->set.verbose &&                        \
  |  |  ------------------
  |  |  |  Branch (322:4): [True: 286k, False: 0]
  |  |  |  Branch (322:14): [True: 286k, False: 0]
  |  |  ------------------
  |  |  323|   286k|   (!(data)->state.feat ||                                 \
  |  |  ------------------
  |  |  |  Branch (323:5): [True: 286k, False: 0]
  |  |  ------------------
  |  |  324|   286k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  ------------------
  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  ------------------
  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  274|   286k|    va_list ap;
  275|   286k|    va_start(ap, fmt);
  276|   286k|    trc_infof(data, data->state.feat, NULL, 0, fmt, ap);
  277|       |    va_end(ap);
  278|   286k|  }
  279|   286k|}
Curl_trc_opt:
  670|      2|{
  671|      2|  CURLcode result = config ? trc_opt(config) : CURLE_OK;
  ------------------
  |  Branch (671:21): [True: 0, False: 2]
  ------------------
  672|      2|#ifdef DEBUGBUILD
  673|       |  /* CURL_DEBUG can override anything */
  674|      2|  if(!result) {
  ------------------
  |  Branch (674:6): [True: 2, False: 0]
  ------------------
  675|      2|    const char *dbg_config = getenv("CURL_DEBUG");
  676|      2|    if(dbg_config)
  ------------------
  |  Branch (676:8): [True: 0, False: 2]
  ------------------
  677|      0|      result = trc_opt(dbg_config);
  678|      2|  }
  679|      2|#endif /* DEBUGBUILD */
  680|      2|  return result;
  681|      2|}
Curl_trc_init:
  684|      2|{
  685|      2|#ifdef DEBUGBUILD
  686|      2|  return Curl_trc_opt(NULL);
  687|       |#else
  688|       |  return CURLE_OK;
  689|       |#endif
  690|      2|}
curl_trc.c:trc_end_buf:
  110|   286k|{
  111|       |  /* make sure we end the trace line in `buf` properly. It needs
  112|       |   * to end with a terminating '\0' or '\n\0' */
  113|   286k|  if(len >= (maxlen - (addnl ? 2 : 1))) {
  ------------------
  |  Branch (113:6): [True: 0, False: 286k]
  |  Branch (113:24): [True: 286k, False: 0]
  ------------------
  114|      0|    len = maxlen - 5;
  115|      0|    buf[len++] = '.';
  116|      0|    buf[len++] = '.';
  117|      0|    buf[len++] = '.';
  118|      0|    buf[len++] = '\n';
  119|      0|  }
  120|   286k|  else if(addnl)
  ------------------
  |  Branch (120:11): [True: 286k, False: 0]
  ------------------
  121|   286k|    buf[len++] = '\n';
  122|   286k|  buf[len] = '\0';
  123|   286k|  return len;
  124|   286k|}
curl_trc.c:trc_write:
   51|   286k|{
   52|   286k|  if(data->set.verbose) {
  ------------------
  |  Branch (52:6): [True: 286k, False: 0]
  ------------------
   53|   286k|    if(data->set.fdebug) {
  ------------------
  |  Branch (53:8): [True: 286k, False: 0]
  ------------------
   54|   286k|      struct Curl_mapi_guard guard;
   55|   286k|      CURL_CBAPI_START(&guard, data, easy_fdebug);
  ------------------
  |  |  201|   286k|  Curl_cbapi_enter((g), (d), NULL, CURL_CBAPI_FN_##fn)
  ------------------
   56|   286k|      (void)(*data->set.fdebug)(data, type, CURL_UNCONST(ptr), size,
  ------------------
  |  |  856|   286k|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
   57|   286k|                                data->set.debugdata);
   58|   286k|      CURL_CBAPI_END(&guard);
  ------------------
  |  |  205|   286k|  Curl_cbapi_leave(g)
  ------------------
   59|   286k|    }
   60|      0|    else {
   61|      0|      static const char s_infotype[CURLINFO_END][3] = {
   62|      0|        "* ", "< ", "> ", "{ ", "} ", "{ ", "} " };
   63|      0|      switch(type) {
   64|      0|      case CURLINFO_TEXT:
  ------------------
  |  Branch (64:7): [True: 0, False: 0]
  ------------------
   65|      0|      case CURLINFO_HEADER_OUT:
  ------------------
  |  Branch (65:7): [True: 0, False: 0]
  ------------------
   66|      0|      case CURLINFO_HEADER_IN:
  ------------------
  |  Branch (66:7): [True: 0, False: 0]
  ------------------
   67|      0|        fwrite(s_infotype[type], 2, 1, data->set.err);
   68|      0|        fwrite(ptr, size, 1, data->set.err);
   69|      0|        break;
   70|      0|      default: /* nada */
  ------------------
  |  Branch (70:7): [True: 0, False: 0]
  ------------------
   71|      0|        break;
   72|      0|      }
   73|      0|    }
   74|   286k|  }
   75|   286k|}
curl_trc.c:trc_infof:
  250|   286k|{
  251|   286k|  size_t len = 0;
  252|   286k|  char buf[TRC_LINE_MAX];
  253|       |
  254|   286k|  if(CURL_TRC_IDS(data))
  ------------------
  |  |   90|   286k|  (Curl_trc_is_verbose(data) && \
  |  |  ------------------
  |  |  |  |  322|   572k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 286k, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 286k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|   572k|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 286k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|   286k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   91|   286k|  Curl_trc_feat_ids.log_level >= CURL_LOG_LVL_INFO)
  |  |  ------------------
  |  |  |  |   70|   286k|#define CURL_LOG_LVL_INFO  1
  |  |  ------------------
  |  |  |  Branch (91:3): [True: 0, False: 286k]
  |  |  ------------------
  ------------------
  255|      0|    len += trc_print_ids(data, buf + len, TRC_LINE_MAX - len);
  ------------------
  |  |   78|      0|#define TRC_LINE_MAX 2048
  ------------------
  256|   286k|  if(feat)
  ------------------
  |  Branch (256:6): [True: 0, False: 286k]
  ------------------
  257|      0|    len += curl_msnprintf(buf + len, TRC_LINE_MAX - len, "[%s] ", feat->name);
  ------------------
  |  |   78|      0|#define TRC_LINE_MAX 2048
  ------------------
  258|   286k|  if(opt_id) {
  ------------------
  |  Branch (258:6): [True: 0, False: 286k]
  ------------------
  259|      0|    if(opt_id_idx > 0)
  ------------------
  |  Branch (259:8): [True: 0, False: 0]
  ------------------
  260|      0|      len += curl_msnprintf(buf + len, TRC_LINE_MAX - len, "[%s-%d] ",
  ------------------
  |  |   78|      0|#define TRC_LINE_MAX 2048
  ------------------
  261|      0|                            opt_id, opt_id_idx);
  262|      0|    else
  263|      0|      len += curl_msnprintf(buf + len, TRC_LINE_MAX - len, "[%s] ", opt_id);
  ------------------
  |  |   78|      0|#define TRC_LINE_MAX 2048
  ------------------
  264|      0|  }
  265|   286k|  len += curl_mvsnprintf(buf + len, TRC_LINE_MAX - len, fmt, ap);
  ------------------
  |  |   78|   286k|#define TRC_LINE_MAX 2048
  ------------------
  266|   286k|  len = trc_end_buf(buf, len, TRC_LINE_MAX, TRUE);
  ------------------
  |  |   78|   286k|#define TRC_LINE_MAX 2048
  ------------------
                len = trc_end_buf(buf, len, TRC_LINE_MAX, TRUE);
  ------------------
  |  | 1045|   286k|#define TRUE true
  ------------------
  267|   286k|  trc_write(data, CURLINFO_TEXT, buf, len);
  268|   286k|}

curlx_dyn_init:
   39|  28.9k|{
   40|  28.9k|  DEBUGASSERT(s);
  ------------------
  |  | 1075|  28.9k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (40:3): [True: 0, False: 28.9k]
  |  Branch (40:3): [True: 28.9k, False: 0]
  ------------------
   41|  28.9k|  DEBUGASSERT(toobig);
  ------------------
  |  | 1075|  28.9k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (41:3): [True: 0, False: 28.9k]
  |  Branch (41:3): [True: 28.9k, False: 0]
  ------------------
   42|  28.9k|  DEBUGASSERT(toobig <= MAX_DYNBUF_SIZE); /* catch crazy mistakes */
  ------------------
  |  | 1075|  28.9k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (42:3): [True: 0, False: 28.9k]
  |  Branch (42:3): [True: 28.9k, False: 0]
  ------------------
   43|  28.9k|  s->bufr = NULL;
   44|  28.9k|  s->leng = 0;
   45|  28.9k|  s->allc = 0;
   46|  28.9k|  s->toobig = toobig;
   47|  28.9k|#ifdef DEBUGBUILD
   48|  28.9k|  s->init = DYNINIT;
  ------------------
  |  |   32|  28.9k|#define DYNINIT 0xbee51da /* random pattern */
  ------------------
   49|  28.9k|#endif
   50|  28.9k|}
curlx_dyn_free:
   57|  22.1k|{
   58|  22.1k|  DEBUGASSERT(s);
  ------------------
  |  | 1075|  22.1k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (58:3): [True: 0, False: 22.1k]
  |  Branch (58:3): [True: 22.1k, False: 0]
  ------------------
   59|  22.1k|  DEBUGASSERT(s->init == DYNINIT);
  ------------------
  |  | 1075|  22.1k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (59:3): [True: 0, False: 22.1k]
  |  Branch (59:3): [True: 22.1k, False: 0]
  ------------------
   60|  22.1k|  curlx_safefree(s->bufr);
  ------------------
  |  | 1332|  22.1k|  do {                      \
  |  | 1333|  22.1k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  22.1k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  22.1k|    (ptr) = NULL;           \
  |  | 1335|  22.1k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 22.1k]
  |  |  ------------------
  ------------------
   61|  22.1k|  s->leng = s->allc = 0;
   62|  22.1k|}
curlx_dyn_reset:
  126|  8.67k|{
  127|  8.67k|  DEBUGASSERT(s);
  ------------------
  |  | 1075|  8.67k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (127:3): [True: 0, False: 8.67k]
  |  Branch (127:3): [True: 8.67k, False: 0]
  ------------------
  128|  8.67k|  DEBUGASSERT(s->init == DYNINIT);
  ------------------
  |  | 1075|  8.67k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (128:3): [True: 0, False: 8.67k]
  |  Branch (128:3): [True: 8.67k, False: 0]
  ------------------
  129|  8.67k|  DEBUGASSERT(!s->leng || s->bufr);
  ------------------
  |  | 1075|  8.67k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (129:3): [True: 8.67k, False: 0]
  |  Branch (129:3): [True: 0, False: 0]
  |  Branch (129:3): [True: 7.69k, False: 975]
  |  Branch (129:3): [True: 975, False: 0]
  ------------------
  130|  8.67k|  if(s->leng)
  ------------------
  |  Branch (130:6): [True: 975, False: 7.69k]
  ------------------
  131|    975|    s->bufr[0] = 0;
  132|  8.67k|  s->leng = 0;
  133|  8.67k|}
curlx_dyn_addn:
  163|  2.97M|{
  164|  2.97M|  DEBUGASSERT(s);
  ------------------
  |  | 1075|  2.97M|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (164:3): [True: 0, False: 2.97M]
  |  Branch (164:3): [True: 2.97M, False: 0]
  ------------------
  165|  2.97M|  DEBUGASSERT(s->init == DYNINIT);
  ------------------
  |  | 1075|  2.97M|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (165:3): [True: 0, False: 2.97M]
  |  Branch (165:3): [True: 2.97M, False: 0]
  ------------------
  166|  2.97M|  DEBUGASSERT(!s->leng || s->bufr);
  ------------------
  |  | 1075|  2.97M|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (166:3): [True: 2.97M, False: 0]
  |  Branch (166:3): [True: 0, False: 0]
  |  Branch (166:3): [True: 18.7k, False: 2.95M]
  |  Branch (166:3): [True: 2.95M, False: 0]
  ------------------
  167|  2.97M|  return dyn_nappend(s, mem, len);
  168|  2.97M|}
curlx_dyn_vaddf:
  188|    774|{
  189|    774|#ifdef BUILDING_LIBCURL
  190|    774|  int rc;
  191|    774|  DEBUGASSERT(s);
  ------------------
  |  | 1075|    774|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (191:3): [True: 0, False: 774]
  |  Branch (191:3): [True: 774, False: 0]
  ------------------
  192|    774|  DEBUGASSERT(s->init == DYNINIT);
  ------------------
  |  | 1075|    774|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (192:3): [True: 0, False: 774]
  |  Branch (192:3): [True: 774, False: 0]
  ------------------
  193|    774|  DEBUGASSERT(!s->leng || s->bufr);
  ------------------
  |  | 1075|    774|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (193:3): [True: 774, False: 0]
  |  Branch (193:3): [True: 0, False: 0]
  |  Branch (193:3): [True: 774, False: 0]
  |  Branch (193:3): [True: 0, False: 0]
  ------------------
  194|    774|  DEBUGASSERT(fmt);
  ------------------
  |  | 1075|    774|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (194:3): [True: 0, False: 774]
  |  Branch (194:3): [True: 774, False: 0]
  ------------------
  195|    774|  rc = curlx_dyn_vprintf(s, fmt, ap);
  196|       |
  197|    774|  if(!rc)
  ------------------
  |  Branch (197:6): [True: 774, False: 0]
  ------------------
  198|    774|    return CURLE_OK;
  199|      0|  else if(rc == MERR_TOO_LARGE)
  ------------------
  |  |   29|      0|#define MERR_TOO_LARGE 2
  ------------------
  |  Branch (199:11): [True: 0, False: 0]
  ------------------
  200|      0|    return CURLE_TOO_LARGE;
  201|      0|  return CURLE_OUT_OF_MEMORY;
  202|       |#else
  203|       |  char *str;
  204|       |  str = curl_mvaprintf(fmt, ap); /* this allocs a new string to append */
  205|       |
  206|       |  if(str) {
  207|       |    CURLcode result = dyn_nappend(s, (const unsigned char *)str, strlen(str));
  208|       |    curl_free(str);
  209|       |    return result;
  210|       |  }
  211|       |  /* If we failed, we cleanup the whole buffer and return error */
  212|       |  curlx_dyn_free(s);
  213|       |  return CURLE_OUT_OF_MEMORY;
  214|       |#endif
  215|    774|}
curlx_dyn_addf:
  221|    774|{
  222|    774|  CURLcode result;
  223|    774|  va_list ap;
  224|    774|  DEBUGASSERT(s);
  ------------------
  |  | 1075|    774|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (224:3): [True: 0, False: 774]
  |  Branch (224:3): [True: 774, False: 0]
  ------------------
  225|    774|  DEBUGASSERT(s->init == DYNINIT);
  ------------------
  |  | 1075|    774|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (225:3): [True: 0, False: 774]
  |  Branch (225:3): [True: 774, False: 0]
  ------------------
  226|    774|  DEBUGASSERT(!s->leng || s->bufr);
  ------------------
  |  | 1075|    774|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (226:3): [True: 774, False: 0]
  |  Branch (226:3): [True: 0, False: 0]
  |  Branch (226:3): [True: 774, False: 0]
  |  Branch (226:3): [True: 0, False: 0]
  ------------------
  227|    774|  DEBUGASSERT(strcmp(fmt, "%s")); /* use curlx_dyn_add instead */
  ------------------
  |  | 1075|    774|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (227:3): [True: 0, False: 774]
  |  Branch (227:3): [True: 774, False: 0]
  ------------------
  228|    774|  va_start(ap, fmt);
  229|    774|  result = curlx_dyn_vaddf(s, fmt, ap);
  230|       |  va_end(ap);
  231|    774|  return result;
  232|    774|}
curlx_dyn_ptr:
  238|  45.5k|{
  239|  45.5k|  DEBUGASSERT(s);
  ------------------
  |  | 1075|  45.5k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (239:3): [True: 0, False: 45.5k]
  |  Branch (239:3): [True: 45.5k, False: 0]
  ------------------
  240|  45.5k|  DEBUGASSERT(s->init == DYNINIT);
  ------------------
  |  | 1075|  45.5k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (240:3): [True: 0, False: 45.5k]
  |  Branch (240:3): [True: 45.5k, False: 0]
  ------------------
  241|  45.5k|  DEBUGASSERT(!s->leng || s->bufr);
  ------------------
  |  | 1075|  45.5k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (241:3): [True: 45.5k, False: 0]
  |  Branch (241:3): [True: 0, False: 0]
  |  Branch (241:3): [True: 7.62k, False: 37.9k]
  |  Branch (241:3): [True: 37.9k, False: 0]
  ------------------
  242|  45.5k|  return s->bufr;
  243|  45.5k|}
curlx_dyn_uptr:
  261|    109|{
  262|    109|  DEBUGASSERT(s);
  ------------------
  |  | 1075|    109|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (262:3): [True: 0, False: 109]
  |  Branch (262:3): [True: 109, False: 0]
  ------------------
  263|    109|  DEBUGASSERT(s->init == DYNINIT);
  ------------------
  |  | 1075|    109|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (263:3): [True: 0, False: 109]
  |  Branch (263:3): [True: 109, False: 0]
  ------------------
  264|    109|  DEBUGASSERT(!s->leng || s->bufr);
  ------------------
  |  | 1075|    109|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (264:3): [True: 109, False: 0]
  |  Branch (264:3): [True: 0, False: 0]
  |  Branch (264:3): [True: 0, False: 109]
  |  Branch (264:3): [True: 109, False: 0]
  ------------------
  265|    109|  return (unsigned char *)s->bufr;
  266|    109|}
curlx_dyn_len:
  272|  30.7k|{
  273|  30.7k|  DEBUGASSERT(s);
  ------------------
  |  | 1075|  30.7k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (273:3): [True: 0, False: 30.7k]
  |  Branch (273:3): [True: 30.7k, False: 0]
  ------------------
  274|  30.7k|  DEBUGASSERT(s->init == DYNINIT);
  ------------------
  |  | 1075|  30.7k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (274:3): [True: 0, False: 30.7k]
  |  Branch (274:3): [True: 30.7k, False: 0]
  ------------------
  275|  30.7k|  DEBUGASSERT(!s->leng || s->bufr);
  ------------------
  |  | 1075|  30.7k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (275:3): [True: 30.7k, False: 0]
  |  Branch (275:3): [True: 0, False: 0]
  |  Branch (275:3): [True: 9.50k, False: 21.2k]
  |  Branch (275:3): [True: 21.2k, False: 0]
  ------------------
  276|  30.7k|  return s->leng;
  277|  30.7k|}
curlx_dyn_setlen:
  283|  12.4k|{
  284|  12.4k|  DEBUGASSERT(s);
  ------------------
  |  | 1075|  12.4k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (284:3): [True: 0, False: 12.4k]
  |  Branch (284:3): [True: 12.4k, False: 0]
  ------------------
  285|  12.4k|  DEBUGASSERT(s->init == DYNINIT);
  ------------------
  |  | 1075|  12.4k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (285:3): [True: 0, False: 12.4k]
  |  Branch (285:3): [True: 12.4k, False: 0]
  ------------------
  286|  12.4k|  DEBUGASSERT(!s->leng || s->bufr);
  ------------------
  |  | 1075|  12.4k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (286:3): [True: 12.4k, False: 0]
  |  Branch (286:3): [True: 0, False: 0]
  |  Branch (286:3): [True: 0, False: 12.4k]
  |  Branch (286:3): [True: 12.4k, False: 0]
  ------------------
  287|  12.4k|  if(set > s->leng)
  ------------------
  |  Branch (287:6): [True: 0, False: 12.4k]
  ------------------
  288|      0|    return CURLE_BAD_FUNCTION_ARGUMENT;
  289|  12.4k|  s->leng = set;
  290|  12.4k|  s->bufr[s->leng] = 0;
  291|  12.4k|  return CURLE_OK;
  292|  12.4k|}
dynbuf.c:dyn_nappend:
   69|  2.97M|{
   70|  2.97M|  size_t idx = s->leng;
   71|  2.97M|  size_t a = s->allc;
   72|  2.97M|  size_t fit = len + idx + 1; /* new string + old string + zero byte */
   73|       |
   74|       |  /* try to detect if there is rubbish in the struct */
   75|  2.97M|  DEBUGASSERT(s->init == DYNINIT);
  ------------------
  |  | 1075|  2.97M|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (75:3): [True: 0, False: 2.97M]
  |  Branch (75:3): [True: 2.97M, False: 0]
  ------------------
   76|  2.97M|  DEBUGASSERT(s->toobig);
  ------------------
  |  | 1075|  2.97M|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (76:3): [True: 0, False: 2.97M]
  |  Branch (76:3): [True: 2.97M, False: 0]
  ------------------
   77|  2.97M|  DEBUGASSERT(idx < s->toobig);
  ------------------
  |  | 1075|  2.97M|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (77:3): [True: 0, False: 2.97M]
  |  Branch (77:3): [True: 2.97M, False: 0]
  ------------------
   78|  2.97M|  DEBUGASSERT(!s->leng || s->bufr);
  ------------------
  |  | 1075|  2.97M|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (78:3): [True: 2.97M, False: 0]
  |  Branch (78:3): [True: 0, False: 0]
  |  Branch (78:3): [True: 18.7k, False: 2.95M]
  |  Branch (78:3): [True: 2.95M, False: 0]
  ------------------
   79|  2.97M|  DEBUGASSERT(a <= s->toobig);
  ------------------
  |  | 1075|  2.97M|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (79:3): [True: 0, False: 2.97M]
  |  Branch (79:3): [True: 2.97M, False: 0]
  ------------------
   80|  2.97M|  DEBUGASSERT(!len || mem);
  ------------------
  |  | 1075|  2.97M|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (80:3): [True: 2.97M, False: 0]
  |  Branch (80:3): [True: 0, False: 0]
  |  Branch (80:3): [True: 5, False: 2.97M]
  |  Branch (80:3): [True: 2.97M, False: 0]
  ------------------
   81|       |
   82|  2.97M|  if(fit > s->toobig) {
  ------------------
  |  Branch (82:6): [True: 0, False: 2.97M]
  ------------------
   83|      0|    curlx_dyn_free(s);
   84|      0|    return CURLE_TOO_LARGE;
   85|      0|  }
   86|  2.97M|  else if(!a) {
  ------------------
  |  Branch (86:11): [True: 16.8k, False: 2.96M]
  ------------------
   87|  16.8k|    DEBUGASSERT(!idx);
  ------------------
  |  | 1075|  16.8k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (87:5): [True: 0, False: 16.8k]
  |  Branch (87:5): [True: 16.8k, False: 0]
  ------------------
   88|       |    /* first invoke */
   89|  16.8k|    if(MIN_FIRST_ALLOC > s->toobig)
  ------------------
  |  |   29|  16.8k|#define MIN_FIRST_ALLOC 32
  ------------------
  |  Branch (89:8): [True: 112, False: 16.7k]
  ------------------
   90|    112|      a = s->toobig;
   91|  16.7k|    else if(fit < MIN_FIRST_ALLOC)
  ------------------
  |  |   29|  16.7k|#define MIN_FIRST_ALLOC 32
  ------------------
  |  Branch (91:13): [True: 16.5k, False: 164]
  ------------------
   92|  16.5k|      a = MIN_FIRST_ALLOC;
  ------------------
  |  |   29|  16.5k|#define MIN_FIRST_ALLOC 32
  ------------------
   93|    164|    else
   94|    164|      a = fit;
   95|  16.8k|  }
   96|  2.96M|  else {
   97|  2.96M|    while(a < fit)
  ------------------
  |  Branch (97:11): [True: 4.46k, False: 2.96M]
  ------------------
   98|  4.46k|      a *= 2;
   99|  2.96M|    if(a > s->toobig)
  ------------------
  |  Branch (99:8): [True: 165, False: 2.96M]
  ------------------
  100|       |      /* no point in allocating a larger buffer than this is allowed to use */
  101|    165|      a = s->toobig;
  102|  2.96M|  }
  103|       |
  104|  2.97M|  if(a != s->allc) {
  ------------------
  |  Branch (104:6): [True: 21.2k, False: 2.95M]
  ------------------
  105|  21.2k|    void *p = curlx_realloc(s->bufr, a);
  ------------------
  |  | 1475|  21.2k|  curl_dbg_realloc(ptr, size, __LINE__, __FILE__)
  ------------------
  106|  21.2k|    if(!p) {
  ------------------
  |  Branch (106:8): [True: 0, False: 21.2k]
  ------------------
  107|      0|      curlx_dyn_free(s);
  108|      0|      return CURLE_OUT_OF_MEMORY;
  109|      0|    }
  110|  21.2k|    s->bufr = p;
  111|  21.2k|    s->allc = a;
  112|  21.2k|  }
  113|       |
  114|  2.97M|  if(len)
  ------------------
  |  Branch (114:6): [True: 2.97M, False: 5]
  ------------------
  115|  2.97M|    memcpy(&s->bufr[idx], mem, len);
  116|  2.97M|  s->leng = idx + len;
  117|  2.97M|  s->bufr[s->leng] = 0;
  118|  2.97M|  return CURLE_OK;
  119|  2.97M|}

curlx_inet_ntop:
  190|  2.08k|{
  191|  2.08k|  switch(af) {
  192|  2.03k|  case AF_INET:
  ------------------
  |  Branch (192:3): [True: 2.03k, False: 50]
  ------------------
  193|  2.03k|    return inet_ntop4((const unsigned char *)src, buf, size);
  194|     50|  case AF_INET6:
  ------------------
  |  Branch (194:3): [True: 50, False: 2.03k]
  ------------------
  195|     50|    return inet_ntop6((const unsigned char *)src, buf, size);
  196|      0|  default:
  ------------------
  |  Branch (196:3): [True: 0, False: 2.08k]
  ------------------
  197|      0|    return CURLE_UNSUPPORTED_PROTOCOL;
  198|  2.08k|  }
  199|  2.08k|}
inet_ntop.c:inet_ntop4:
   57|  2.04k|{
   58|  2.04k|  char tmp[sizeof("255.255.255.255")];
   59|  2.04k|  size_t len;
   60|       |
   61|  2.04k|  DEBUGASSERT(size >= 16);
  ------------------
  |  | 1075|  2.04k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (61:3): [True: 0, False: 2.04k]
  |  Branch (61:3): [True: 2.04k, False: 0]
  ------------------
   62|       |
   63|       |  /* this snprintf() does not overflow the buffer. */
   64|  2.04k|  SNPRINTF(tmp, sizeof(tmp), "%d.%d.%d.%d",
  ------------------
  |  |   43|  2.04k|#define SNPRINTF curl_msnprintf
  ------------------
   65|  2.04k|           ((int)((unsigned char)src[0])) & 0xff,
   66|  2.04k|           ((int)((unsigned char)src[1])) & 0xff,
   67|  2.04k|           ((int)((unsigned char)src[2])) & 0xff,
   68|  2.04k|           ((int)((unsigned char)src[3])) & 0xff);
   69|       |
   70|  2.04k|  len = strlen(tmp);
   71|  2.04k|  if(len == 0 || len >= size)
  ------------------
  |  Branch (71:6): [True: 0, False: 2.04k]
  |  Branch (71:18): [True: 0, False: 2.04k]
  ------------------
   72|      0|    return CURLE_TOO_LARGE;
   73|  2.04k|  curlx_strcopy(dst, size, tmp, len);
   74|  2.04k|  return CURLE_OK;
   75|  2.04k|}
inet_ntop.c:inet_ntop6:
   81|     50|{
   82|       |  /*
   83|       |   * Note that int32_t and int16_t need only be "at least" large enough
   84|       |   * to contain a value of the specified size. On some systems, like
   85|       |   * Crays, there is no such thing as an integer variable with 16 bits.
   86|       |   * Keep this in mind if you think this function should have been coded
   87|       |   * to use pointer overlays. All the world's not a VAX.
   88|       |   */
   89|     50|  char tmp[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
   90|     50|  char *tp;
   91|     50|  struct {
   92|     50|    int base;
   93|     50|    int len;
   94|     50|  } best, cur;
   95|     50|  unsigned int words[IN6ADDRSZ / INT16SZ];
   96|     50|  int i;
   97|       |
   98|       |  /* Preprocess:
   99|       |   *  Copy the input (bytewise) array into a wordwise array.
  100|       |   *  Find the longest run of 0x00's in src[] for :: shorthanding.
  101|       |   */
  102|     50|  memset(words, '\0', sizeof(words));
  103|    850|  for(i = 0; i < IN6ADDRSZ; i++)
  ------------------
  |  |   35|    850|#define IN6ADDRSZ       16
  ------------------
  |  Branch (103:14): [True: 800, False: 50]
  ------------------
  104|    800|    words[i / 2] |= ((unsigned int)src[i] << ((1 - (i % 2)) << 3));
  105|       |
  106|     50|  best.base = -1;
  107|     50|  cur.base = -1;
  108|     50|  best.len = 0;
  109|     50|  cur.len = 0;
  110|       |
  111|    450|  for(i = 0; i < (IN6ADDRSZ / INT16SZ); i++) {
  ------------------
  |  |   35|    450|#define IN6ADDRSZ       16
  ------------------
                for(i = 0; i < (IN6ADDRSZ / INT16SZ); i++) {
  ------------------
  |  |   37|    450|#define INT16SZ          2
  ------------------
  |  Branch (111:14): [True: 400, False: 50]
  ------------------
  112|    400|    if(words[i] == 0) {
  ------------------
  |  Branch (112:8): [True: 244, False: 156]
  ------------------
  113|    244|      if(cur.base == -1) {
  ------------------
  |  Branch (113:10): [True: 60, False: 184]
  ------------------
  114|     60|        cur.base = i;
  115|     60|        cur.len = 1;
  116|     60|      }
  117|    184|      else
  118|    184|        cur.len++;
  119|    244|    }
  120|    156|    else if(cur.base != -1) {
  ------------------
  |  Branch (120:13): [True: 53, False: 103]
  ------------------
  121|     53|      if(best.base == -1 || cur.len > best.len)
  ------------------
  |  Branch (121:10): [True: 45, False: 8]
  |  Branch (121:29): [True: 3, False: 5]
  ------------------
  122|     48|        best = cur;
  123|     53|      cur.base = -1;
  124|     53|    }
  125|    400|  }
  126|     50|  if((cur.base != -1) && (best.base == -1 || cur.len > best.len))
  ------------------
  |  Branch (126:6): [True: 7, False: 43]
  |  Branch (126:27): [True: 4, False: 3]
  |  Branch (126:46): [True: 0, False: 3]
  ------------------
  127|      4|    best = cur;
  128|     50|  if(best.base != -1 && best.len < 2)
  ------------------
  |  Branch (128:6): [True: 49, False: 1]
  |  Branch (128:25): [True: 3, False: 46]
  ------------------
  129|      3|    best.base = -1;
  130|       |  /* Format the result. */
  131|     50|  tp = tmp;
  132|    436|  for(i = 0; i < (IN6ADDRSZ / INT16SZ); i++) {
  ------------------
  |  |   35|    436|#define IN6ADDRSZ       16
  ------------------
                for(i = 0; i < (IN6ADDRSZ / INT16SZ); i++) {
  ------------------
  |  |   37|    436|#define INT16SZ          2
  ------------------
  |  Branch (132:14): [True: 393, False: 43]
  ------------------
  133|       |    /* Are we inside the best run of 0x00's? */
  134|    393|    if(best.base != -1 && i >= best.base && i < (best.base + best.len)) {
  ------------------
  |  Branch (134:8): [True: 361, False: 32]
  |  Branch (134:27): [True: 331, False: 30]
  |  Branch (134:45): [True: 230, False: 101]
  ------------------
  135|    230|      if(i == best.base)
  ------------------
  |  Branch (135:10): [True: 46, False: 184]
  ------------------
  136|     46|        *tp++ = ':';
  137|    230|      continue;
  138|    230|    }
  139|       |
  140|       |    /* Are we following an initial run of 0x00s or any real hex?
  141|       |     */
  142|    163|    if(i)
  ------------------
  |  Branch (142:8): [True: 143, False: 20]
  ------------------
  143|    143|      *tp++ = ':';
  144|       |
  145|       |    /* Is this address an encapsulated IPv4?
  146|       |     */
  147|    163|    if(i == 6 && best.base == 0 &&
  ------------------
  |  Branch (147:8): [True: 30, False: 133]
  |  Branch (147:18): [True: 19, False: 11]
  ------------------
  148|     19|       (best.len == 6 || (best.len == 5 && words[5] == 0xffff))) {
  ------------------
  |  Branch (148:9): [True: 7, False: 12]
  |  Branch (148:27): [True: 2, False: 10]
  |  Branch (148:44): [True: 0, False: 2]
  ------------------
  149|      7|      CURLcode result = inet_ntop4(src + 12, tp, sizeof(tmp) - (tp - tmp));
  150|      7|      if(result)
  ------------------
  |  Branch (150:10): [True: 0, False: 7]
  ------------------
  151|      0|        return result;
  152|      7|      tp += strlen(tp);
  153|      7|      break;
  154|      7|    }
  155|    156|    else {
  156|       |      /* Lower-case digits. Cannot use the set from mprintf.c since this
  157|       |         needs to work as a curlx function */
  158|    156|      static const unsigned char ldigits[] = "0123456789abcdef";
  159|       |
  160|    156|      unsigned int w = words[i];
  161|       |      /* output lowercase 16-bit hex number but ignore leading zeroes */
  162|    156|      if(w & 0xf000)
  ------------------
  |  Branch (162:10): [True: 26, False: 130]
  ------------------
  163|     26|        *tp++ = ldigits[(w & 0xf000) >> 12];
  164|    156|      if(w & 0xff00)
  ------------------
  |  Branch (164:10): [True: 45, False: 111]
  ------------------
  165|     45|        *tp++ = ldigits[(w & 0x0f00) >> 8];
  166|    156|      if(w & 0xfff0)
  ------------------
  |  Branch (166:10): [True: 71, False: 85]
  ------------------
  167|     71|        *tp++ = ldigits[(w & 0x00f0) >> 4];
  168|    156|      *tp++ = ldigits[(w & 0x000f)];
  169|    156|    }
  170|    163|  }
  171|       |
  172|       |  /* Was it a trailing run of 0x00's?
  173|       |   */
  174|     50|  if(best.base != -1 && (best.base + best.len) == (IN6ADDRSZ / INT16SZ))
  ------------------
  |  |   35|     46|#define IN6ADDRSZ       16
  ------------------
                if(best.base != -1 && (best.base + best.len) == (IN6ADDRSZ / INT16SZ))
  ------------------
  |  |   37|     46|#define INT16SZ          2
  ------------------
  |  Branch (174:6): [True: 46, False: 4]
  |  Branch (174:25): [True: 4, False: 42]
  ------------------
  175|      4|    *tp++ = ':';
  176|       |
  177|       |  /* Check for overflow, copy, and we are done. */
  178|     50|  if((size_t)(tp - tmp) >= size)
  ------------------
  |  Branch (178:6): [True: 9, False: 41]
  ------------------
  179|      9|    return CURLE_TOO_LARGE;
  180|     41|  curlx_strcopy(dst, size, tmp, tp - tmp);
  181|     41|  return CURLE_OK;
  182|     50|}

curlx_inet_pton:
  203|  8.24k|{
  204|  8.24k|  switch(af) {
  205|  8.14k|  case AF_INET:
  ------------------
  |  Branch (205:3): [True: 8.14k, False: 106]
  ------------------
  206|  8.14k|    return inet_pton4(src, (unsigned char *)dst);
  207|    106|  case AF_INET6:
  ------------------
  |  Branch (207:3): [True: 106, False: 8.14k]
  ------------------
  208|    106|    return inet_pton6(src, (unsigned char *)dst);
  209|      0|  default:
  ------------------
  |  Branch (209:3): [True: 0, False: 8.24k]
  ------------------
  210|      0|    return -1;
  211|  8.24k|  }
  212|       |  /* NOTREACHED */
  213|  8.24k|}
inet_pton.c:inet_pton4:
   63|  8.15k|{
   64|  8.15k|  int saw_digit, octets, ch;
   65|  8.15k|  unsigned char tmp[INADDRSZ], *tp;
   66|       |
   67|  8.15k|  saw_digit = 0;
   68|  8.15k|  octets = 0;
   69|  8.15k|  tp = tmp;
   70|  8.15k|  *tp = 0;
   71|  97.7k|  while((ch = (unsigned char)*src++) != '\0') {
  ------------------
  |  Branch (71:9): [True: 89.6k, False: 8.14k]
  ------------------
   72|  89.6k|    if(ISDIGIT(ch)) {
  ------------------
  |  |   42|  89.6k|#define ISDIGIT(x)  (((x) >= '0') && ((x) <= '9'))
  |  |  ------------------
  |  |  |  Branch (42:22): [True: 65.1k, False: 24.4k]
  |  |  |  Branch (42:38): [True: 65.1k, False: 5]
  |  |  ------------------
  ------------------
   73|  65.1k|      unsigned int val = (*tp * 10) + (ch - '0');
   74|       |
   75|  65.1k|      if(saw_digit && *tp == 0)
  ------------------
  |  Branch (75:10): [True: 32.5k, False: 32.5k]
  |  Branch (75:23): [True: 1, False: 32.5k]
  ------------------
   76|      1|        return 0;
   77|  65.1k|      if(val > 255)
  ------------------
  |  Branch (77:10): [True: 1, False: 65.1k]
  ------------------
   78|      1|        return 0;
   79|  65.1k|      *tp = (unsigned char)val;
   80|  65.1k|      if(!saw_digit) {
  ------------------
  |  Branch (80:10): [True: 32.5k, False: 32.5k]
  ------------------
   81|  32.5k|        if(++octets > 4)
  ------------------
  |  Branch (81:12): [True: 0, False: 32.5k]
  ------------------
   82|      0|          return 0;
   83|  32.5k|        saw_digit = 1;
   84|  32.5k|      }
   85|  65.1k|    }
   86|  24.4k|    else if(ch == '.' && saw_digit) {
  ------------------
  |  Branch (86:13): [True: 24.4k, False: 5]
  |  Branch (86:26): [True: 24.4k, False: 2]
  ------------------
   87|  24.4k|      if(octets == 4)
  ------------------
  |  Branch (87:10): [True: 1, False: 24.4k]
  ------------------
   88|      1|        return 0;
   89|  24.4k|      *++tp = 0;
   90|  24.4k|      saw_digit = 0;
   91|  24.4k|    }
   92|      7|    else
   93|      7|      return 0;
   94|  89.6k|  }
   95|  8.14k|  if(octets < 4)
  ------------------
  |  Branch (95:6): [True: 6, False: 8.14k]
  ------------------
   96|      6|    return 0;
   97|  8.14k|  memcpy(dst, tmp, INADDRSZ);
  ------------------
  |  |   36|  8.14k|#define INADDRSZ         4
  ------------------
   98|  8.14k|  return 1;
   99|  8.14k|}
inet_pton.c:inet_pton6:
  114|    106|{
  115|    106|  unsigned char tmp[IN6ADDRSZ], *tp, *endp, *colonp;
  116|    106|  const char *curtok;
  117|    106|  int ch, saw_xdigit;
  118|    106|  size_t val;
  119|       |
  120|    106|  memset((tp = tmp), 0, IN6ADDRSZ);
  ------------------
  |  |   35|    106|#define IN6ADDRSZ       16
  ------------------
  121|    106|  endp = tp + IN6ADDRSZ;
  ------------------
  |  |   35|    106|#define IN6ADDRSZ       16
  ------------------
  122|    106|  colonp = NULL;
  123|       |  /* Leading :: requires some special handling. */
  124|    106|  if(*src == ':')
  ------------------
  |  Branch (124:6): [True: 36, False: 70]
  ------------------
  125|     36|    if(*++src != ':')
  ------------------
  |  Branch (125:8): [True: 1, False: 35]
  ------------------
  126|      1|      return 0;
  127|    105|  curtok = src;
  128|    105|  saw_xdigit = 0;
  129|    105|  val = 0;
  130|    892|  while((ch = (unsigned char)*src++) != '\0') {
  ------------------
  |  Branch (130:9): [True: 815, False: 77]
  ------------------
  131|    815|    if(ISXDIGIT(ch)) {
  ------------------
  |  |   37|    815|#define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   42|  1.63k|#define ISDIGIT(x)  (((x) >= '0') && ((x) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (42:22): [True: 796, False: 19]
  |  |  |  |  |  Branch (42:38): [True: 211, False: 585]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   27|  1.41k|#define ISLOWHEXALPHA(x) (((x) >= 'a') && ((x) <= 'f'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (27:27): [True: 167, False: 437]
  |  |  |  |  |  Branch (27:43): [True: 167, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   28|    437|#define ISUPHEXALPHA(x)  (((x) >= 'A') && ((x) <= 'F'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (28:27): [True: 162, False: 275]
  |  |  |  |  |  Branch (28:43): [True: 162, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  132|    540|      val <<= 4;
  133|    540|      val |= curlx_hexval(ch);
  ------------------
  |  |  111|    540|#define curlx_hexval(x) (unsigned char)(curlx_hexasciitable[(x) - '0'] & 0x0f)
  ------------------
  134|    540|      if(++saw_xdigit > 4)
  ------------------
  |  Branch (134:10): [True: 5, False: 535]
  ------------------
  135|      5|        return 0;
  136|    535|      continue;
  137|    540|    }
  138|    275|    if(ch == ':') {
  ------------------
  |  Branch (138:8): [True: 256, False: 19]
  ------------------
  139|    256|      curtok = src;
  140|    256|      if(!saw_xdigit) {
  ------------------
  |  Branch (140:10): [True: 62, False: 194]
  ------------------
  141|     62|        if(colonp)
  ------------------
  |  Branch (141:12): [True: 3, False: 59]
  ------------------
  142|      3|          return 0;
  143|     59|        colonp = tp;
  144|     59|        continue;
  145|     62|      }
  146|    194|      if(tp + INT16SZ > endp)
  ------------------
  |  |   37|    194|#define INT16SZ          2
  ------------------
  |  Branch (146:10): [True: 1, False: 193]
  ------------------
  147|      1|        return 0;
  148|    193|      *tp++ = (unsigned char)((val >> 8) & 0xff);
  149|    193|      *tp++ = (unsigned char)(val & 0xff);
  150|    193|      saw_xdigit = 0;
  151|    193|      val = 0;
  152|    193|      continue;
  153|    194|    }
  154|     19|    if(ch == '.' && ((tp + INADDRSZ) <= endp) &&
  ------------------
  |  |   36|     19|#define INADDRSZ         4
  ------------------
  |  Branch (154:8): [True: 19, False: 0]
  |  Branch (154:21): [True: 18, False: 1]
  ------------------
  155|     18|       inet_pton4(curtok, tp) > 0) {
  ------------------
  |  Branch (155:8): [True: 2, False: 16]
  ------------------
  156|      2|      tp += INADDRSZ;
  ------------------
  |  |   36|      2|#define INADDRSZ         4
  ------------------
  157|      2|      saw_xdigit = 0;
  158|      2|      break;    /* '\0' was seen by inet_pton4(). */
  159|      2|    }
  160|     17|    return 0;
  161|     19|  }
  162|     79|  if(saw_xdigit) {
  ------------------
  |  Branch (162:6): [True: 57, False: 22]
  ------------------
  163|     57|    if(tp + INT16SZ > endp)
  ------------------
  |  |   37|     57|#define INT16SZ          2
  ------------------
  |  Branch (163:8): [True: 2, False: 55]
  ------------------
  164|      2|      return 0;
  165|     55|    *tp++ = (unsigned char)((val >> 8) & 0xff);
  166|     55|    *tp++ = (unsigned char)(val & 0xff);
  167|     55|  }
  168|     77|  if(colonp) {
  ------------------
  |  Branch (168:6): [True: 52, False: 25]
  ------------------
  169|       |    /*
  170|       |     * Since some memmove()'s erroneously fail to handle
  171|       |     * overlapping regions, we do the shift by hand.
  172|       |     */
  173|     52|    const ssize_t n = tp - colonp;
  174|     52|    ssize_t i;
  175|       |
  176|     52|    if(tp == endp)
  ------------------
  |  Branch (176:8): [True: 3, False: 49]
  ------------------
  177|      3|      return 0;
  178|    293|    for(i = 1; i <= n; i++) {
  ------------------
  |  Branch (178:16): [True: 244, False: 49]
  ------------------
  179|    244|      *(endp - i) = *(colonp + n - i);
  180|    244|      *(colonp + n - i) = 0;
  181|    244|    }
  182|     49|    tp = endp;
  183|     49|  }
  184|     74|  if(tp != endp)
  ------------------
  |  Branch (184:6): [True: 24, False: 50]
  ------------------
  185|     24|    return 0;
  186|     50|  memcpy(dst, tmp, IN6ADDRSZ);
  ------------------
  |  |   35|     50|#define IN6ADDRSZ       16
  ------------------
  187|     50|  return 1;
  188|     74|}

curlx_nonblock:
   47|  4.07k|{
   48|  4.07k|#ifdef HAVE_FCNTL_O_NONBLOCK
   49|       |  /* most recent Unix versions */
   50|  4.07k|  int flags;
   51|  4.07k|  flags = sfcntl(sockfd, F_GETFL, 0);
  ------------------
  |  |  998|  4.07k|#  define sfcntl  fcntl
  ------------------
   52|  4.07k|  if(flags < 0)
  ------------------
  |  Branch (52:6): [True: 0, False: 4.07k]
  ------------------
   53|      0|    return -1;
   54|       |  /* Check if the current file status flags have already satisfied
   55|       |   * the request, if so, it is no need to call fcntl() to replicate it.
   56|       |   */
   57|  4.07k|  if(!!(flags & O_NONBLOCK) == !!nonblock)
  ------------------
  |  Branch (57:6): [True: 2.03k, False: 2.03k]
  ------------------
   58|  2.03k|    return 0;
   59|  2.03k|  if(nonblock)
  ------------------
  |  Branch (59:6): [True: 2.03k, False: 0]
  ------------------
   60|  2.03k|    flags |= O_NONBLOCK;
   61|      0|  else
   62|      0|    flags &= ~O_NONBLOCK;
   63|  2.03k|  return sfcntl(sockfd, F_SETFL, flags);
  ------------------
  |  |  998|  2.03k|#  define sfcntl  fcntl
  ------------------
   64|       |
   65|       |#elif defined(HAVE_IOCTLSOCKET_CAMEL_FIONBIO)
   66|       |
   67|       |  /* Amiga */
   68|       |  long flags = nonblock ? 1L : 0L;
   69|       |  return IoctlSocket(sockfd, FIONBIO, (char *)&flags);
   70|       |
   71|       |#elif defined(HAVE_IOCTL_FIONBIO)
   72|       |
   73|       |  /* older Unix versions */
   74|       |  int flags = nonblock ? 1 : 0;
   75|       |  return ioctl(sockfd, FIONBIO, &flags);
   76|       |
   77|       |#elif defined(HAVE_IOCTLSOCKET_FIONBIO)
   78|       |
   79|       |  /* Windows */
   80|       |  unsigned long flags = nonblock ? 1UL : 0UL;
   81|       |  return ioctlsocket(sockfd, (long)FIONBIO, &flags);
   82|       |
   83|       |#elif defined(HAVE_SETSOCKOPT_SO_NONBLOCK)
   84|       |
   85|       |  /* Orbis OS */
   86|       |  long b = nonblock ? 1L : 0L;
   87|       |  return setsockopt(sockfd, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b));
   88|       |
   89|       |#else
   90|       |#error "no non-blocking method was found/used/set"
   91|       |#endif
   92|  4.07k|}

curlx_strcopy:
   42|  2.08k|{
   43|  2.08k|  DEBUGASSERT(slen < dsize);
  ------------------
  |  | 1075|  2.08k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (43:3): [True: 0, False: 2.08k]
  |  Branch (43:3): [True: 2.08k, False: 0]
  ------------------
   44|  2.08k|  if(slen < dsize) {
  ------------------
  |  Branch (44:6): [True: 2.08k, False: 0]
  ------------------
   45|  2.08k|    memcpy(dest, src, slen);
   46|  2.08k|    dest[slen] = 0;
   47|  2.08k|  }
   48|      0|  else if(dsize)
  ------------------
  |  Branch (48:11): [True: 0, False: 0]
  ------------------
   49|      0|    dest[0] = 0;
   50|  2.08k|}

curlx_memdup0:
   86|  33.9k|{
   87|  33.9k|  char *buf = (length < SIZE_MAX) ? curlx_malloc(length + 1) : NULL;
  ------------------
  |  | 1471|  33.9k|#define curlx_malloc(size)         curl_dbg_malloc(size, __LINE__, __FILE__)
  ------------------
  |  Branch (87:15): [True: 33.9k, False: 0]
  ------------------
   88|  33.9k|  if(!buf)
  ------------------
  |  Branch (88:6): [True: 0, False: 33.9k]
  ------------------
   89|      0|    return NULL;
   90|  33.9k|  if(length) {
  ------------------
  |  Branch (90:6): [True: 28.2k, False: 5.75k]
  ------------------
   91|  28.2k|    DEBUGASSERT(src); /* must never be NULL */
  ------------------
  |  | 1075|  28.2k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (91:5): [True: 0, False: 28.2k]
  |  Branch (91:5): [True: 28.2k, False: 0]
  ------------------
   92|  28.2k|    memcpy(buf, src, length);
   93|  28.2k|  }
   94|  33.9k|  buf[length] = 0;
   95|  33.9k|  return buf;
   96|  33.9k|}
curlx_memzero:
  113|  7.91k|{
  114|  7.91k|  if(buf)
  ------------------
  |  Branch (114:6): [True: 7.91k, False: 0]
  ------------------
  115|  7.91k|    curlx_memzero_low(buf, size);
  ------------------
  |  | 1650|  7.91k|#define curlx_memzero_low(buf, size)  explicit_bzero(buf, size)
  ------------------
  116|  7.91k|}
curlx_strzero:
  120|  10.5k|{
  121|  10.5k|  if(buf)
  ------------------
  |  Branch (121:6): [True: 90, False: 10.4k]
  ------------------
  122|     90|    curlx_memzero_low(buf, strlen(buf));
  ------------------
  |  | 1650|     90|#define curlx_memzero_low(buf, size)  explicit_bzero(buf, size)
  ------------------
  123|  10.5k|}

curlx_str_init:
   27|  2.58k|{
   28|       |  out->str = NULL;
   29|  2.58k|  out->len = 0;
   30|  2.58k|}
curlx_str_assign:
   33|  6.10k|{
   34|  6.10k|  out->str = str;
   35|  6.10k|  out->len = len;
   36|  6.10k|}
curlx_str_until:
   51|  2.58k|{
   52|  2.58k|  const char *s;
   53|  2.58k|  size_t len = 0;
   54|  2.58k|  DEBUGASSERT(linep);
  ------------------
  |  | 1075|  2.58k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (54:3): [True: 0, False: 2.58k]
  |  Branch (54:3): [True: 2.58k, False: 0]
  ------------------
   55|  2.58k|  DEBUGASSERT(*linep);
  ------------------
  |  | 1075|  2.58k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (55:3): [True: 0, False: 2.58k]
  |  Branch (55:3): [True: 2.58k, False: 0]
  ------------------
   56|  2.58k|  DEBUGASSERT(out);
  ------------------
  |  | 1075|  2.58k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (56:3): [True: 0, False: 2.58k]
  |  Branch (56:3): [True: 2.58k, False: 0]
  ------------------
   57|  2.58k|  DEBUGASSERT(delim);
  ------------------
  |  | 1075|  2.58k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (57:3): [True: 0, False: 2.58k]
  |  Branch (57:3): [True: 2.58k, False: 0]
  ------------------
   58|  2.58k|  s = *linep;
   59|       |
   60|  2.58k|  curlx_str_init(out);
   61|  5.65k|  while(*s && (*s != delim)) {
  ------------------
  |  Branch (61:9): [True: 3.12k, False: 2.53k]
  |  Branch (61:15): [True: 3.07k, False: 50]
  ------------------
   62|  3.07k|    s++;
   63|  3.07k|    if(++len > max) {
  ------------------
  |  Branch (63:8): [True: 0, False: 3.07k]
  ------------------
   64|      0|      return STRE_BIG;
  ------------------
  |  |   29|      0|#define STRE_BIG      1
  ------------------
   65|      0|    }
   66|  3.07k|  }
   67|  2.58k|  if(!len)
  ------------------
  |  Branch (67:6): [True: 0, False: 2.58k]
  ------------------
   68|      0|    return STRE_SHORT;
  ------------------
  |  |   30|      0|#define STRE_SHORT    2
  ------------------
   69|  2.58k|  out->str = *linep;
   70|  2.58k|  out->len = len;
   71|  2.58k|  *linep = s; /* point to the first byte after the word */
   72|  2.58k|  return STRE_OK;
  ------------------
  |  |   28|  2.58k|#define STRE_OK       0
  ------------------
   73|  2.58k|}
curlx_str_word:
   78|  2.53k|{
   79|  2.53k|  return curlx_str_until(linep, out, max, ' ');
   80|  2.53k|}
curlx_str_single:
  139|  5.16k|{
  140|  5.16k|  DEBUGASSERT(linep && *linep);
  ------------------
  |  | 1075|  5.16k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (140:3): [True: 0, False: 5.16k]
  |  Branch (140:3): [True: 0, False: 0]
  |  Branch (140:3): [True: 5.16k, False: 0]
  |  Branch (140:3): [True: 5.16k, False: 0]
  ------------------
  141|  5.16k|  if(**linep != byte)
  ------------------
  |  Branch (141:6): [True: 5.08k, False: 79]
  ------------------
  142|  5.08k|    return STRE_BYTE;
  ------------------
  |  |   33|  5.08k|#define STRE_BYTE     5
  ------------------
  143|     79|  (*linep)++; /* move over it */
  144|     79|  return STRE_OK;
  ------------------
  |  |   28|     79|#define STRE_OK       0
  ------------------
  145|  5.16k|}
curlx_str_singlespace:
  150|  2.53k|{
  151|  2.53k|  return curlx_str_single(linep, ' ');
  152|  2.53k|}
curlx_str_number:
  209|   355k|{
  210|   355k|  return str_num_base(linep, nump, max, 10);
  211|   355k|}
curlx_str_hex:
  216|     12|{
  217|     12|  return str_num_base(linep, nump, max, 16);
  218|     12|}
curlx_str_octal:
  223|    649|{
  224|    649|  return str_num_base(linep, nump, max, 8);
  225|    649|}
curlx_str_passblanks:
  314|  5.07k|{
  315|  5.07k|  while(ISBLANK(**linep))
  ------------------
  |  |   43|  5.07k|#define ISBLANK(x)  (((x) == ' ') || ((x) == '\t'))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 0, False: 5.07k]
  |  |  |  Branch (43:38): [True: 0, False: 5.07k]
  |  |  ------------------
  ------------------
  316|      0|    (*linep)++; /* move over it */
  317|  5.07k|}
strparse.c:str_num_base:
  172|   355k|{
  173|   355k|  curl_off_t num = 0;
  174|   355k|  const char *p;
  175|   355k|  int m = (base == 10) ? '9' :   /* the largest digit possible */
  ------------------
  |  Branch (175:11): [True: 355k, False: 661]
  ------------------
  176|   355k|    (base == 16) ? 'f' : '7';
  ------------------
  |  Branch (176:5): [True: 12, False: 649]
  ------------------
  177|   355k|  DEBUGASSERT(linep && *linep && nump);
  ------------------
  |  | 1075|   355k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (177:3): [True: 0, False: 355k]
  |  Branch (177:3): [True: 0, False: 0]
  |  Branch (177:3): [True: 0, False: 0]
  |  Branch (177:3): [True: 355k, False: 0]
  |  Branch (177:3): [True: 355k, False: 0]
  |  Branch (177:3): [True: 355k, False: 0]
  ------------------
  178|   355k|  DEBUGASSERT((base == 8) || (base == 10) || (base == 16));
  ------------------
  |  | 1075|   355k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (178:3): [True: 355k, False: 0]
  |  Branch (178:3): [True: 0, False: 0]
  |  Branch (178:3): [True: 0, False: 0]
  |  Branch (178:3): [True: 649, False: 355k]
  |  Branch (178:3): [True: 355k, False: 12]
  |  Branch (178:3): [True: 12, False: 0]
  ------------------
  179|   355k|  DEBUGASSERT(max >= 0); /* mostly to catch SIZE_MAX, which is too large */
  ------------------
  |  | 1075|   355k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (179:3): [True: 0, False: 355k]
  |  Branch (179:3): [True: 355k, False: 0]
  ------------------
  180|   355k|  *nump = 0;
  181|   355k|  p = *linep;
  182|   355k|  if(!valid_digit(*p, m))
  ------------------
  |  |  156|   355k|  (((x) >= '0') && ((x) <= (m)) && curlx_hexasciitable[(x) - '0'])
  |  |  ------------------
  |  |  |  Branch (156:4): [True: 294k, False: 61.2k]
  |  |  |  Branch (156:20): [True: 63.1k, False: 231k]
  |  |  |  Branch (156:36): [True: 63.1k, False: 3]
  |  |  ------------------
  ------------------
  183|   292k|    return STRE_NO_NUM;
  ------------------
  |  |   36|   292k|#define STRE_NO_NUM   8
  ------------------
  184|  63.1k|  if(max < base) {
  ------------------
  |  Branch (184:6): [True: 105, False: 63.0k]
  ------------------
  185|       |    /* special-case low max scenario because check needs to be different */
  186|    393|    do {
  187|    393|      int n = curlx_hexval(*p++);
  ------------------
  |  |  111|    393|#define curlx_hexval(x) (unsigned char)(curlx_hexasciitable[(x) - '0'] & 0x0f)
  ------------------
  188|    393|      num = (num * base) + n;
  189|    393|      if(num > max)
  ------------------
  |  Branch (189:10): [True: 28, False: 365]
  ------------------
  190|     28|        return STRE_OVERFLOW;
  ------------------
  |  |   35|     28|#define STRE_OVERFLOW 7
  ------------------
  191|    393|    } while(valid_digit(*p, m));
  ------------------
  |  |  156|    365|  (((x) >= '0') && ((x) <= (m)) && curlx_hexasciitable[(x) - '0'])
  |  |  ------------------
  |  |  |  Branch (156:4): [True: 315, False: 50]
  |  |  |  Branch (156:20): [True: 288, False: 27]
  |  |  |  Branch (156:36): [True: 288, False: 0]
  |  |  ------------------
  ------------------
  192|    105|  }
  193|  63.0k|  else {
  194|  66.5k|    do {
  195|  66.5k|      int n = curlx_hexval(*p++);
  ------------------
  |  |  111|  66.5k|#define curlx_hexval(x) (unsigned char)(curlx_hexasciitable[(x) - '0'] & 0x0f)
  ------------------
  196|  66.5k|      if(num > ((max - n) / base))
  ------------------
  |  Branch (196:10): [True: 32, False: 66.4k]
  ------------------
  197|     32|        return STRE_OVERFLOW;
  ------------------
  |  |   35|     32|#define STRE_OVERFLOW 7
  ------------------
  198|  66.4k|      num = (num * base) + n;
  199|  66.4k|    } while(valid_digit(*p, m));
  ------------------
  |  |  156|  66.4k|  (((x) >= '0') && ((x) <= (m)) && curlx_hexasciitable[(x) - '0'])
  |  |  ------------------
  |  |  |  Branch (156:4): [True: 64.2k, False: 2.23k]
  |  |  |  Branch (156:20): [True: 3.47k, False: 60.7k]
  |  |  |  Branch (156:36): [True: 3.47k, False: 2]
  |  |  ------------------
  ------------------
  200|  63.0k|  }
  201|  63.0k|  *nump = num;
  202|  63.0k|  *linep = p;
  203|  63.0k|  return STRE_OK;
  ------------------
  |  |   28|  63.0k|#define STRE_OK       0
  ------------------
  204|  63.1k|}

curlx_pnow:
   52|   110k|{
   53|       |  /*
   54|       |   * clock_gettime() is granted to be increased monotonically when the
   55|       |   * monotonic clock is queried. Time starting point is unspecified, it
   56|       |   * could be the system start-up time, the Epoch, or something else,
   57|       |   * in any case the time starting point does not change once that the
   58|       |   * system has started up.
   59|       |   */
   60|   110k|  struct timespec tsnow;
   61|       |
   62|       |  /*
   63|       |   * clock_gettime() may be defined by Apple's SDK as weak symbol thus
   64|       |   * code compiles but fails during runtime if clock_gettime() is
   65|       |   * called on unsupported OS version.
   66|       |   */
   67|       |#if defined(__APPLE__) && defined(HAVE_BUILTIN_AVAILABLE) && \
   68|       |  (HAVE_BUILTIN_AVAILABLE == 1)
   69|       |  bool have_clock_gettime = FALSE;
   70|       |  if(__builtin_available(macOS 10.12, iOS 10, tvOS 10, watchOS 3, *))
   71|       |    have_clock_gettime = TRUE;
   72|       |#endif
   73|       |
   74|   110k|#ifdef HAVE_CLOCK_GETTIME_MONOTONIC_RAW
   75|   110k|  if(
   76|       |#if defined(__APPLE__) && defined(HAVE_BUILTIN_AVAILABLE) && \
   77|       |  (HAVE_BUILTIN_AVAILABLE == 1)
   78|       |    have_clock_gettime &&
   79|       |#endif
   80|   110k|    (clock_gettime(CLOCK_MONOTONIC_RAW, &tsnow) == 0)) {
  ------------------
  |  Branch (80:5): [True: 110k, False: 0]
  ------------------
   81|   110k|    pnow->tv_sec = tsnow.tv_sec;
   82|   110k|    pnow->tv_usec = (int)(tsnow.tv_nsec / 1000);
   83|   110k|  }
   84|      0|  else
   85|      0|#endif
   86|       |
   87|      0|  if(
   88|       |#if defined(__APPLE__) && defined(HAVE_BUILTIN_AVAILABLE) && \
   89|       |  (HAVE_BUILTIN_AVAILABLE == 1)
   90|       |    have_clock_gettime &&
   91|       |#endif
   92|      0|    (clock_gettime(CLOCK_MONOTONIC, &tsnow) == 0)) {
  ------------------
  |  Branch (92:5): [True: 0, False: 0]
  ------------------
   93|      0|    pnow->tv_sec = tsnow.tv_sec;
   94|      0|    pnow->tv_usec = (int)(tsnow.tv_nsec / 1000);
   95|      0|  }
   96|       |  /*
   97|       |   * Even when the configure process has truly detected monotonic clock
   98|       |   * availability, it might happen that it is not actually available at
   99|       |   * runtime. When this occurs, fallback to other time source.
  100|       |   */
  101|      0|#ifdef HAVE_GETTIMEOFDAY
  102|      0|  else {
  103|      0|    struct timeval now;
  104|      0|    (void)gettimeofday(&now, NULL);
  105|      0|    pnow->tv_sec = now.tv_sec;
  106|      0|    pnow->tv_usec = (int)now.tv_usec;
  107|      0|  }
  108|       |#else
  109|       |  else {
  110|       |    pnow->tv_sec = time(NULL);
  111|       |    pnow->tv_usec = 0;
  112|       |  }
  113|       |#endif
  114|   110k|}
curlx_ptimediff_ms:
  188|  8.96k|{
  189|  8.96k|  timediff_t diff = (timediff_t)newer->tv_sec - older->tv_sec;
  190|  8.96k|  if(diff >= (TIMEDIFF_T_MAX / 1000))
  ------------------
  |  |   33|  8.96k|#define TIMEDIFF_T_MAX CURL_OFF_T_MAX
  |  |  ------------------
  |  |  |  |  588|  8.96k|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  |  |  ------------------
  ------------------
  |  Branch (190:6): [True: 0, False: 8.96k]
  ------------------
  191|      0|    return TIMEDIFF_T_MAX;
  ------------------
  |  |   33|      0|#define TIMEDIFF_T_MAX CURL_OFF_T_MAX
  |  |  ------------------
  |  |  |  |  588|      0|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  |  |  ------------------
  ------------------
  192|  8.96k|  else if(diff <= (TIMEDIFF_T_MIN / 1000))
  ------------------
  |  |   34|  8.96k|#define TIMEDIFF_T_MIN CURL_OFF_T_MIN
  |  |  ------------------
  |  |  |  |  590|  8.96k|#define CURL_OFF_T_MIN (-CURL_OFF_T_MAX - 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  588|  8.96k|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (192:11): [True: 0, False: 8.96k]
  ------------------
  193|      0|    return TIMEDIFF_T_MIN;
  ------------------
  |  |   34|      0|#define TIMEDIFF_T_MIN CURL_OFF_T_MIN
  |  |  ------------------
  |  |  |  |  590|      0|#define CURL_OFF_T_MIN (-CURL_OFF_T_MAX - 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  588|      0|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  194|  8.96k|  return (diff * 1000) + ((newer->tv_usec - older->tv_usec) / 1000);
  195|  8.96k|}
curlx_ptimediff_us:
  228|  66.6k|{
  229|  66.6k|  timediff_t diff = (timediff_t)newer->tv_sec - older->tv_sec;
  230|  66.6k|  if(diff >= (TIMEDIFF_T_MAX / 1000000))
  ------------------
  |  |   33|  66.6k|#define TIMEDIFF_T_MAX CURL_OFF_T_MAX
  |  |  ------------------
  |  |  |  |  588|  66.6k|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  |  |  ------------------
  ------------------
  |  Branch (230:6): [True: 0, False: 66.6k]
  ------------------
  231|      0|    return TIMEDIFF_T_MAX;
  ------------------
  |  |   33|      0|#define TIMEDIFF_T_MAX CURL_OFF_T_MAX
  |  |  ------------------
  |  |  |  |  588|      0|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  |  |  ------------------
  ------------------
  232|  66.6k|  else if(diff <= (TIMEDIFF_T_MIN / 1000000))
  ------------------
  |  |   34|  66.6k|#define TIMEDIFF_T_MIN CURL_OFF_T_MIN
  |  |  ------------------
  |  |  |  |  590|  66.6k|#define CURL_OFF_T_MIN (-CURL_OFF_T_MAX - 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  588|  66.6k|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (232:11): [True: 0, False: 66.6k]
  ------------------
  233|      0|    return TIMEDIFF_T_MIN;
  ------------------
  |  |   34|      0|#define TIMEDIFF_T_MIN CURL_OFF_T_MIN
  |  |  ------------------
  |  |  |  |  590|      0|#define CURL_OFF_T_MIN (-CURL_OFF_T_MAX - 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  588|      0|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  234|  66.6k|  return (diff * 1000000) + newer->tv_usec - older->tv_usec;
  235|  66.6k|}

curlx_uztosi:
   73|  2.53k|{
   74|       |#ifdef __INTEL_COMPILER
   75|       |#pragma warning(push)
   76|       |#pragma warning(disable:810) /* conversion may lose significant bits */
   77|       |#endif
   78|       |
   79|  2.53k|  DEBUGASSERT(uznum <= (size_t)CURL_MASK_SINT);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (79:3): [True: 0, False: 2.53k]
  |  Branch (79:3): [True: 2.53k, False: 0]
  ------------------
   80|  2.53k|  return (int)(uznum & (size_t)CURL_MASK_SINT);
  ------------------
  |  |   44|  2.53k|#define CURL_MASK_SINT    (CURL_MASK_UINT >> 1)
  |  |  ------------------
  |  |  |  |   43|  2.53k|#define CURL_MASK_UINT    ((unsigned int)~0)
  |  |  ------------------
  ------------------
   81|       |
   82|       |#ifdef __INTEL_COMPILER
   83|       |#pragma warning(pop)
   84|       |#endif
   85|  2.53k|}
curlx_uitouz:
  282|  2.86k|{
  283|  2.86k|  return (size_t)uinum;
  284|  2.86k|}
curlx_sotouz_range:
  287|    545|{
  288|    545|  if(sonum < 0)
  ------------------
  |  Branch (288:6): [True: 0, False: 545]
  ------------------
  289|      0|    return uzmin;
  290|       |#if SIZEOF_CURL_OFF_T > SIZEOF_SIZE_T
  291|       |  if(sonum > SIZE_MAX)
  292|       |    return uzmax;
  293|       |#endif
  294|    545|  return CURLMIN(CURLMAX((size_t)sonum, uzmin), uzmax);
  ------------------
  |  | 1288|  1.09k|#define CURLMIN(x, y) ((x) < (y) ? (x) : (y))
  |  |  ------------------
  |  |  |  Branch (1288:24): [True: 545, False: 0]
  |  |  |  Branch (1288:25): [True: 543, False: 2]
  |  |  |  Branch (1288:37): [True: 543, False: 2]
  |  |  ------------------
  ------------------
  295|    545|}
curlx_sztouz:
  298|  3.15k|{
  299|  3.15k|  if(sznum < 0) {
  ------------------
  |  Branch (299:6): [True: 0, False: 3.15k]
  ------------------
  300|      0|    *puznum = 0;
  301|      0|    return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  302|      0|  }
  303|  3.15k|  *puznum = (size_t)sznum;
  304|       |  return TRUE;
  ------------------
  |  | 1045|  3.15k|#define TRUE true
  ------------------
  305|  3.15k|}

Curl_cw_out_done:
  491|  2.03k|{
  492|  2.03k|  struct Curl_cwriter *cw_out;
  493|  2.03k|  CURLcode result = CURLE_OK;
  494|       |
  495|  2.03k|  cw_out = Curl_cwriter_get_by_type(data, &Curl_cwt_out);
  496|  2.03k|  if(cw_out) {
  ------------------
  |  Branch (496:6): [True: 613, False: 1.42k]
  ------------------
  497|    613|    CURL_TRC_WRITE(data, "[OUT] done");
  ------------------
  |  |  158|    613|  do {                                                     \
  |  |  159|    613|    if(Curl_trc_ft_is_verbose(data, &Curl_trc_feat_write)) \
  |  |  ------------------
  |  |  |  |  329|    613|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  1.22k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 613, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 613, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  1.22k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 613, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|    613|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  330|    613|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|    613|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (330:4): [True: 0, False: 613]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  160|    613|      Curl_trc_write(data, __VA_ARGS__);                   \
  |  |  161|    613|  } while(0)
  |  |  ------------------
  |  |  |  Branch (161:11): [Folded, False: 613]
  |  |  ------------------
  ------------------
  498|    613|    result = Curl_client_flush(data);
  499|    613|    if(!result)
  ------------------
  |  Branch (499:8): [True: 613, False: 0]
  ------------------
  500|    613|      result = cw_out_do_flush(data, cw_out, TRUE);
  ------------------
  |  | 1045|    613|#define TRUE true
  ------------------
  501|    613|  }
  502|  2.03k|  return result;
  503|  2.03k|}
cw-out.c:cw_out_init:
  105|    613|{
  106|    613|  struct cw_out_ctx *ctx = writer->ctx;
  107|    613|  (void)data;
  108|       |  ctx->buf = NULL;
  109|    613|  return CURLE_OK;
  110|    613|}
cw-out.c:cw_out_write:
  427|  2.36k|{
  428|  2.36k|  struct cw_out_ctx *ctx = writer->ctx;
  429|  2.36k|  CURLcode result;
  430|  2.36k|  bool flush_all = !!(type & CLIENTWRITE_EOS);
  ------------------
  |  |   50|  2.36k|#define CLIENTWRITE_EOS     (1 << 7) /* End Of transfer download Stream */
  ------------------
  431|       |
  432|  2.36k|  if((type & CLIENTWRITE_BODY) ||
  ------------------
  |  |   43|  2.36k|#define CLIENTWRITE_BODY    (1 << 0) /* non-meta information, BODY */
  ------------------
  |  Branch (432:6): [True: 2.36k, False: 0]
  ------------------
  433|  2.36k|     ((type & CLIENTWRITE_HEADER) && data->set.include_header)) {
  ------------------
  |  |   45|      0|#define CLIENTWRITE_HEADER  (1 << 2) /* meta information, HEADER */
  ------------------
  |  Branch (433:7): [True: 0, False: 0]
  |  Branch (433:38): [True: 0, False: 0]
  ------------------
  434|  2.36k|    cw_out_type otype = (!blen && (type & CLIENTWRITE_0LEN)) ?
  ------------------
  |  |   51|      0|#define CLIENTWRITE_0LEN    (1 << 8) /* write even 0-length buffers */
  ------------------
  |  Branch (434:26): [True: 0, False: 2.36k]
  |  Branch (434:35): [True: 0, False: 0]
  ------------------
  435|  2.36k|                        CW_OUT_BODY_0LEN : CW_OUT_BODY;
  436|  2.36k|    result = cw_out_do_write(ctx, data, otype, flush_all, buf, blen);
  437|  2.36k|    if(result)
  ------------------
  |  Branch (437:8): [True: 0, False: 2.36k]
  ------------------
  438|      0|      return result;
  439|  2.36k|  }
  440|       |
  441|  2.36k|  if(type & (CLIENTWRITE_HEADER | CLIENTWRITE_INFO)) {
  ------------------
  |  |   45|  2.36k|#define CLIENTWRITE_HEADER  (1 << 2) /* meta information, HEADER */
  ------------------
                if(type & (CLIENTWRITE_HEADER | CLIENTWRITE_INFO)) {
  ------------------
  |  |   44|  2.36k|#define CLIENTWRITE_INFO    (1 << 1) /* meta information, not a HEADER */
  ------------------
  |  Branch (441:6): [True: 0, False: 2.36k]
  ------------------
  442|      0|    result = cw_out_do_write(ctx, data, CW_OUT_HDS, flush_all, buf, blen);
  443|      0|    if(result)
  ------------------
  |  Branch (443:8): [True: 0, False: 0]
  ------------------
  444|      0|      return result;
  445|      0|  }
  446|       |
  447|  2.36k|  return CURLE_OK;
  448|  2.36k|}
cw-out.c:cw_out_do_write:
  377|  2.36k|{
  378|  2.36k|  CURLcode result = CURLE_OK;
  379|       |
  380|       |  /* if we have buffered data and it is a different type than what
  381|       |   * we are writing now, try to flush all */
  382|  2.36k|  if(ctx->buf && ctx->buf->type != otype) {
  ------------------
  |  Branch (382:6): [True: 0, False: 2.36k]
  |  Branch (382:18): [True: 0, False: 0]
  ------------------
  383|      0|    result = cw_out_flush_chain(ctx, data, &ctx->buf, TRUE);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  384|      0|    if(result)
  ------------------
  |  Branch (384:8): [True: 0, False: 0]
  ------------------
  385|      0|      goto out;
  386|      0|  }
  387|       |
  388|  2.36k|  if(ctx->buf) {
  ------------------
  |  Branch (388:6): [True: 0, False: 2.36k]
  ------------------
  389|       |    /* still have buffered data, append and flush */
  390|      0|    result = cw_out_append(ctx, data, otype, buf, blen);
  391|      0|    if(result)
  ------------------
  |  Branch (391:8): [True: 0, False: 0]
  ------------------
  392|      0|      goto out;
  393|      0|    result = cw_out_flush_chain(ctx, data, &ctx->buf, flush_all);
  394|      0|    if(result)
  ------------------
  |  Branch (394:8): [True: 0, False: 0]
  ------------------
  395|      0|      goto out;
  396|      0|  }
  397|  2.36k|  else {
  398|       |    /* nothing buffered, try direct write */
  399|  2.36k|    size_t consumed;
  400|  2.36k|    result = cw_out_ptr_flush(ctx, data, otype, flush_all,
  401|  2.36k|                              buf, blen, &consumed);
  402|  2.36k|    if(result && (result != CURLE_AGAIN))
  ------------------
  |  Branch (402:8): [True: 0, False: 2.36k]
  |  Branch (402:18): [True: 0, False: 0]
  ------------------
  403|      0|      return result;
  404|  2.36k|    result = CURLE_OK;
  405|  2.36k|    if(consumed < blen) {
  ------------------
  |  Branch (405:8): [True: 0, False: 2.36k]
  ------------------
  406|       |      /* did not write all, append the rest */
  407|      0|      result = cw_out_append(ctx, data, otype,
  408|      0|                             buf + consumed, blen - consumed);
  409|      0|      if(result)
  ------------------
  |  Branch (409:10): [True: 0, False: 0]
  ------------------
  410|      0|        goto out;
  411|      0|    }
  412|  2.36k|  }
  413|       |
  414|  2.36k|out:
  415|  2.36k|  if(result) {
  ------------------
  |  Branch (415:6): [True: 0, False: 2.36k]
  ------------------
  416|       |    /* We do not want to invoke client callbacks a second time after
  417|       |     * encountering an error. See issue #13337 */
  418|       |    ctx->errored = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  419|      0|    cw_out_bufs_free(ctx);
  420|      0|  }
  421|  2.36k|  return result;
  422|  2.36k|}
cw-out.c:cw_out_ptr_flush:
  228|  2.36k|{
  229|  2.36k|  curl_write_callback wcb = NULL;
  230|  2.36k|  void *wcb_data;
  231|  2.36k|  size_t max_write, min_write;
  232|  2.36k|  size_t wlen, nwritten = 0;
  233|  2.36k|  CURLcode result = CURLE_OK;
  234|       |
  235|       |  /* If we errored once, we do not invoke the client callback again */
  236|  2.36k|  if(ctx->errored)
  ------------------
  |  Branch (236:6): [True: 0, False: 2.36k]
  ------------------
  237|      0|    return CURLE_WRITE_ERROR;
  238|       |
  239|       |  /* write callbacks may get NULLed by the client between calls. */
  240|  2.36k|  cw_get_writefunc(data, otype, &wcb, &wcb_data, &max_write, &min_write);
  241|  2.36k|  if(!wcb) {
  ------------------
  |  Branch (241:6): [True: 0, False: 2.36k]
  ------------------
  242|      0|    *pconsumed = blen;
  243|      0|    return CURLE_OK;
  244|      0|  }
  245|       |
  246|  2.36k|  *pconsumed = 0;
  247|  2.36k|  if(otype == CW_OUT_BODY_0LEN) {
  ------------------
  |  Branch (247:6): [True: 0, False: 2.36k]
  ------------------
  248|      0|    DEBUGASSERT(!blen);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (248:5): [True: 0, False: 0]
  |  Branch (248:5): [True: 0, False: 0]
  ------------------
  249|      0|    return cw_out_cb_write(data, wcb, wcb_data, otype,
  250|      0|                           buf, blen, &nwritten);
  251|      0|  }
  252|  2.36k|  else {
  253|  4.72k|    while(blen && !data->req.writer.paused) {
  ------------------
  |  Branch (253:11): [True: 2.36k, False: 2.36k]
  |  Branch (253:19): [True: 2.36k, False: 0]
  ------------------
  254|  2.36k|      if(!flush_all && blen < min_write)
  ------------------
  |  Branch (254:10): [True: 2.36k, False: 0]
  |  Branch (254:24): [True: 0, False: 2.36k]
  ------------------
  255|      0|        break;
  256|  2.36k|      wlen = max_write ? CURLMIN(blen, max_write) : blen;
  ------------------
  |  | 1288|  2.36k|#define CURLMIN(x, y) ((x) < (y) ? (x) : (y))
  |  |  ------------------
  |  |  |  Branch (1288:24): [True: 2.36k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (256:14): [True: 2.36k, False: 0]
  ------------------
  257|  2.36k|      if(otype == CW_OUT_BODY)
  ------------------
  |  Branch (257:10): [True: 2.36k, False: 0]
  ------------------
  258|  2.36k|        result = Curl_pgrs_deliver_check(data, wlen);
  259|  2.36k|      if(!result)
  ------------------
  |  Branch (259:10): [True: 2.36k, False: 0]
  ------------------
  260|  2.36k|        result = cw_out_cb_write(data, wcb, wcb_data, otype,
  261|  2.36k|                                 buf, wlen, &nwritten);
  262|  2.36k|      if(result)
  ------------------
  |  Branch (262:10): [True: 0, False: 2.36k]
  ------------------
  263|      0|        return result;
  264|  2.36k|      if(otype == CW_OUT_BODY)
  ------------------
  |  Branch (264:10): [True: 2.36k, False: 0]
  ------------------
  265|  2.36k|        Curl_pgrs_deliver_inc(data, nwritten);
  266|  2.36k|      *pconsumed += nwritten;
  267|  2.36k|      blen -= nwritten;
  268|  2.36k|      buf += nwritten;
  269|  2.36k|    }
  270|  2.36k|  }
  271|  2.36k|  return CURLE_OK;
  272|  2.36k|}
cw-out.c:cw_get_writefunc:
  146|  2.36k|{
  147|  2.36k|  switch(otype) {
  148|  2.36k|  case CW_OUT_BODY:
  ------------------
  |  Branch (148:3): [True: 2.36k, False: 0]
  ------------------
  149|  2.36k|  case CW_OUT_BODY_0LEN:
  ------------------
  |  Branch (149:3): [True: 0, False: 2.36k]
  ------------------
  150|  2.36k|    *pwcb = data->set.fwrite_func;
  151|  2.36k|    *pwcb_data = data->set.out;
  152|  2.36k|    *pmax_write = CURL_MAX_WRITE_SIZE;
  ------------------
  |  |  267|  2.36k|#define CURL_MAX_WRITE_SIZE 16384
  ------------------
  153|       |    /* if we ever want buffering of BODY output, we can set `min_write`
  154|       |     * the preferred size. The default should always be to pass data
  155|       |     * to the client as it comes without delay */
  156|  2.36k|    *pmin_write = 0;
  157|  2.36k|    break;
  158|      0|  case CW_OUT_HDS:
  ------------------
  |  Branch (158:3): [True: 0, False: 2.36k]
  ------------------
  159|      0|    *pwcb = data->set.fwrite_header ? data->set.fwrite_header :
  ------------------
  |  Branch (159:13): [True: 0, False: 0]
  ------------------
  160|      0|             (data->set.writeheader ? data->set.fwrite_func : NULL);
  ------------------
  |  Branch (160:15): [True: 0, False: 0]
  ------------------
  161|      0|    *pwcb_data = data->set.writeheader;
  162|      0|    *pmax_write = 0; /* do not chunk-write headers, write them as they are */
  163|      0|    *pmin_write = 0;
  164|      0|    break;
  165|      0|  default:
  ------------------
  |  Branch (165:3): [True: 0, False: 2.36k]
  ------------------
  166|      0|    *pwcb = NULL;
  167|      0|    *pwcb_data = NULL;
  168|      0|    *pmax_write = CURL_MAX_WRITE_SIZE;
  ------------------
  |  |  267|      0|#define CURL_MAX_WRITE_SIZE 16384
  ------------------
  169|      0|    *pmin_write = 0;
  170|  2.36k|  }
  171|  2.36k|}
cw-out.c:cw_out_cb_write:
  179|  2.36k|{
  180|  2.36k|  size_t nwritten;
  181|  2.36k|  CURLcode result;
  182|       |
  183|  2.36k|  NOVERBOSE((void)otype);
  ------------------
  |  | 1612|  2.36k|#define NOVERBOSE(x) Curl_nop_stmt
  |  |  ------------------
  |  |  |  | 1183|  2.36k|#define Curl_nop_stmt do {} while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1183:35): [Folded, False: 2.36k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  184|       |
  185|  2.36k|  DEBUGASSERT(data->conn);
  ------------------
  |  | 1075|  2.36k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (185:3): [True: 0, False: 2.36k]
  |  Branch (185:3): [True: 2.36k, False: 0]
  ------------------
  186|  2.36k|  *pnwritten = 0;
  187|  2.36k|  {
  188|  2.36k|    struct Curl_mapi_guard guard;
  189|  2.36k|    CURL_CBAPI_START(&guard, data, easy_cw_out_cb);
  ------------------
  |  |  201|  2.36k|  Curl_cbapi_enter((g), (d), NULL, CURL_CBAPI_FN_##fn)
  ------------------
  190|  2.36k|    nwritten = wcb((char *)CURL_UNCONST(buf), 1, blen, wcb_data);
  ------------------
  |  |  856|  2.36k|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
  191|  2.36k|    CURL_CBAPI_END(&guard);
  ------------------
  |  |  205|  2.36k|  Curl_cbapi_leave(g)
  ------------------
  192|  2.36k|  }
  193|  2.36k|  CURL_TRC_WRITE(data, "[OUT] wrote %zu %s bytes, type=%x -> %zu",
  ------------------
  |  |  158|  2.36k|  do {                                                     \
  |  |  159|  2.36k|    if(Curl_trc_ft_is_verbose(data, &Curl_trc_feat_write)) \
  |  |  ------------------
  |  |  |  |  329|  2.36k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  4.72k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 2.36k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 2.36k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  4.72k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 2.36k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  2.36k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  330|  2.36k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  2.36k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (330:4): [True: 0, False: 2.36k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  160|  2.36k|      Curl_trc_write(data, __VA_ARGS__);                   \
  |  |  ------------------
  |  |  |  Branch (160:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  161|  2.36k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (161:11): [Folded, False: 2.36k]
  |  |  ------------------
  ------------------
  194|  2.36k|                 blen, (otype == CW_OUT_HDS) ? "header" : "body",
  195|  2.36k|                 (unsigned int)otype, nwritten);
  196|  2.36k|  if(nwritten == CURL_WRITEFUNC_PAUSE) {
  ------------------
  |  |  279|  2.36k|#define CURL_WRITEFUNC_PAUSE 0x10000001
  ------------------
  |  Branch (196:6): [True: 0, False: 2.36k]
  ------------------
  197|      0|    if(data->conn->scheme->flags & PROTOPT_NONETWORK) {
  ------------------
  |  |  214|      0|#define PROTOPT_NONETWORK (1 << 4) /* protocol does not use the network! */
  ------------------
  |  Branch (197:8): [True: 0, False: 0]
  ------------------
  198|       |      /* Protocols that work without network cannot be paused. This is
  199|       |         actually only file:// now, and it cannot pause since the transfer is
  200|       |         not done using the "normal" procedure. */
  201|      0|      failf(data, "Write callback asked for PAUSE when not supported");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  202|      0|      return CURLE_WRITE_ERROR;
  203|      0|    }
  204|      0|    data->req.writer.paused = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  205|      0|    CURL_TRC_WRITE(data, "[OUT] PAUSE requested by client");
  ------------------
  |  |  158|      0|  do {                                                     \
  |  |  159|      0|    if(Curl_trc_ft_is_verbose(data, &Curl_trc_feat_write)) \
  |  |  ------------------
  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  160|      0|      Curl_trc_write(data, __VA_ARGS__);                   \
  |  |  161|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (161:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  206|      0|    result = Curl_xfer_pause_recv(data, TRUE);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  207|      0|    return result ? result : CURLE_AGAIN;
  ------------------
  |  Branch (207:12): [True: 0, False: 0]
  ------------------
  208|      0|  }
  209|  2.36k|  else if(nwritten == CURL_WRITEFUNC_ERROR) {
  ------------------
  |  |  283|  2.36k|#define CURL_WRITEFUNC_ERROR 0xFFFFFFFF
  ------------------
  |  Branch (209:11): [True: 0, False: 2.36k]
  ------------------
  210|      0|    failf(data, "client returned ERROR on write of %zu bytes", blen);
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  211|      0|    return CURLE_WRITE_ERROR;
  212|      0|  }
  213|  2.36k|  else if(nwritten != blen) {
  ------------------
  |  Branch (213:11): [True: 0, False: 2.36k]
  ------------------
  214|      0|    failf(data, "Failure writing output to destination, "
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  215|      0|          "passed %zu returned %zu", blen, nwritten);
  216|      0|    return CURLE_WRITE_ERROR;
  217|      0|  }
  218|  2.36k|  *pnwritten = nwritten;
  219|  2.36k|  return CURLE_OK;
  220|  2.36k|}
cw-out.c:cw_out_bufs_free:
  113|    613|{
  114|    613|  while(ctx->buf) {
  ------------------
  |  Branch (114:9): [True: 0, False: 613]
  ------------------
  115|      0|    struct cw_out_buf *next = ctx->buf->next;
  116|      0|    cw_out_buf_free(ctx->buf);
  117|      0|    ctx->buf = next;
  118|      0|  }
  119|    613|}
cw-out.c:cw_out_flush:
  475|    613|{
  476|       |  return cw_out_do_flush(data, writer, FALSE);
  ------------------
  |  | 1048|    613|#define FALSE false
  ------------------
  477|    613|}
cw-out.c:cw_out_close:
  133|    613|{
  134|    613|  struct cw_out_ctx *ctx = writer->ctx;
  135|       |
  136|    613|  (void)data;
  137|    613|  cw_out_bufs_free(ctx);
  138|    613|}
cw-out.c:cw_out_do_flush:
  453|  1.22k|{
  454|  1.22k|  struct cw_out_ctx *ctx = (struct cw_out_ctx *)cw_out;
  455|       |
  456|  1.22k|  if(ctx->errored)
  ------------------
  |  Branch (456:6): [True: 0, False: 1.22k]
  ------------------
  457|      0|    return CURLE_WRITE_ERROR;
  458|       |
  459|  1.22k|  if(!data->req.writer.paused && ctx->buf) {
  ------------------
  |  Branch (459:6): [True: 1.22k, False: 0]
  |  Branch (459:34): [True: 0, False: 1.22k]
  ------------------
  460|      0|    CURLcode result;
  461|       |
  462|      0|    CURL_TRC_WRITE(data, "[OUT] flush");
  ------------------
  |  |  158|      0|  do {                                                     \
  |  |  159|      0|    if(Curl_trc_ft_is_verbose(data, &Curl_trc_feat_write)) \
  |  |  ------------------
  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  160|      0|      Curl_trc_write(data, __VA_ARGS__);                   \
  |  |  161|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (161:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  463|      0|    result = cw_out_flush_chain(ctx, data, &ctx->buf, flush_all);
  464|      0|    if(result) {
  ------------------
  |  Branch (464:8): [True: 0, False: 0]
  ------------------
  465|      0|      ctx->errored = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  466|      0|      cw_out_bufs_free(ctx);
  467|      0|      return result;
  468|      0|    }
  469|      0|  }
  470|  1.22k|  return CURLE_OK;
  471|  1.22k|}

curl_global_init:
  205|      2|{
  206|      2|  CURLcode result;
  207|      2|  global_init_lock();
  ------------------
  |  |   90|      2|#define global_init_lock()   curl_simple_lock_lock(&s_lock)
  ------------------
  208|       |
  209|      2|  result = global_init(flags, TRUE);
  ------------------
  |  | 1045|      2|#define TRUE true
  ------------------
  210|       |
  211|      2|  global_init_unlock();
  ------------------
  |  |   91|      2|#define global_init_unlock() curl_simple_lock_unlock(&s_lock)
  ------------------
  212|       |
  213|      2|  return result;
  214|      2|}
curl_easy_init:
  338|  5.07k|{
  339|  5.07k|  CURLcode result;
  340|  5.07k|  struct Curl_easy *data;
  341|       |
  342|       |  /* Make sure we inited the global SSL stuff */
  343|  5.07k|  global_init_lock();
  ------------------
  |  |   90|  5.07k|#define global_init_lock()   curl_simple_lock_lock(&s_lock)
  ------------------
  344|       |
  345|  5.07k|  if(!initialized) {
  ------------------
  |  Branch (345:6): [True: 0, False: 5.07k]
  ------------------
  346|      0|    result = global_init(CURL_GLOBAL_DEFAULT, TRUE);
  ------------------
  |  | 3048|      0|#define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL
  |  |  ------------------
  |  |  |  | 3046|      0|#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL | CURL_GLOBAL_WIN32)
  |  |  |  |  ------------------
  |  |  |  |  |  | 3044|      0|#define CURL_GLOBAL_SSL (1 << 0) /* no purpose since 7.57.0 */
  |  |  |  |  ------------------
  |  |  |  |               #define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL | CURL_GLOBAL_WIN32)
  |  |  |  |  ------------------
  |  |  |  |  |  | 3045|      0|#define CURL_GLOBAL_WIN32 (1 << 1)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  result = global_init(CURL_GLOBAL_DEFAULT, TRUE);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  347|      0|    if(result) {
  ------------------
  |  Branch (347:8): [True: 0, False: 0]
  ------------------
  348|       |      /* something in the global init failed, return nothing */
  349|      0|      DEBUGF(curl_mfprintf(stderr, "Error: curl_global_init failed\n"));
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  ------------------
  350|      0|      global_init_unlock();
  ------------------
  |  |   91|      0|#define global_init_unlock() curl_simple_lock_unlock(&s_lock)
  ------------------
  351|      0|      return NULL;
  352|      0|    }
  353|      0|  }
  354|  5.07k|  global_init_unlock();
  ------------------
  |  |   91|  5.07k|#define global_init_unlock() curl_simple_lock_unlock(&s_lock)
  ------------------
  355|       |
  356|       |  /* We use Curl_open() with undefined URL so far */
  357|  5.07k|  result = Curl_open(&data);
  358|  5.07k|  if(result) {
  ------------------
  |  Branch (358:6): [True: 0, False: 5.07k]
  ------------------
  359|      0|    DEBUGF(curl_mfprintf(stderr, "Error: Curl_open failed\n"));
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  ------------------
  360|      0|    return NULL;
  361|      0|  }
  362|       |
  363|  5.07k|  return data;
  364|  5.07k|}
curl_easy_cleanup:
  856|  2.53k|{
  857|  2.53k|  struct Curl_eapi_guard guard;
  858|       |
  859|  2.53k|  if(CURL_EAPI_ENTER(&guard, curl, easy_cleanup, NULL)) {
  ------------------
  |  |  163|  2.53k|  Curl_eapi_enter((g), (curl), CURL_EAPI_FN_##fn, (r)) && (curl)
  |  |  ------------------
  |  |  |  Branch (163:3): [True: 2.53k, False: 0]
  |  |  |  Branch (163:59): [True: 2.53k, False: 0]
  |  |  ------------------
  ------------------
  860|  2.53k|    struct Curl_easy *data = curl;
  861|  2.53k|    struct Curl_sigpipe_ctx sigpipe_ctx;
  862|  2.53k|    sigpipe_ignore(data, &sigpipe_ctx);
  863|  2.53k|    Curl_close(&data);
  864|  2.53k|    sigpipe_restore(&sigpipe_ctx);
  865|  2.53k|  }
  866|  2.53k|  CURL_EAPI_LEAVE(&guard);
  ------------------
  |  |  165|  2.53k|  Curl_eapi_leave(g)
  ------------------
  867|  2.53k|}
Curl_meta_set:
 1421|  2.03k|{
 1422|  2.03k|  DEBUGASSERT(meta_data); /* never set to NULL */
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1422:3): [True: 0, False: 2.03k]
  |  Branch (1422:3): [True: 2.03k, False: 0]
  ------------------
 1423|  2.03k|  if(!Curl_hash_add2(&data->meta_hash, CURL_UNCONST(key), strlen(key) + 1,
  ------------------
  |  |  856|  2.03k|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
  |  Branch (1423:6): [True: 0, False: 2.03k]
  ------------------
 1424|  2.03k|                     meta_data, meta_dtor)) {
 1425|      0|    meta_dtor(CURL_UNCONST(key), strlen(key) + 1, meta_data);
  ------------------
  |  |  856|      0|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
 1426|      0|    return CURLE_OUT_OF_MEMORY;
 1427|      0|  }
 1428|  2.03k|  return CURLE_OK;
 1429|  2.03k|}
Curl_meta_remove:
 1432|  4.57k|{
 1433|  4.57k|  Curl_hash_delete(&data->meta_hash, CURL_UNCONST(key), strlen(key) + 1);
  ------------------
  |  |  856|  4.57k|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
 1434|  4.57k|}
Curl_meta_get:
 1437|  2.03k|{
 1438|  2.03k|  return Curl_hash_pick(&data->meta_hash, CURL_UNCONST(key), strlen(key) + 1);
  ------------------
  |  |  856|  2.03k|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
 1439|  2.03k|}
easy.c:global_init:
  128|      2|{
  129|      2|  if(initialized++)
  ------------------
  |  Branch (129:6): [True: 0, False: 2]
  ------------------
  130|      0|    return CURLE_OK;
  131|       |
  132|      2|  if(memoryfuncs) {
  ------------------
  |  Branch (132:6): [True: 2, False: 0]
  ------------------
  133|       |    /* Setup the default memory functions here (again) */
  134|      2|    Curl_cmalloc = (curl_malloc_callback)malloc;
  135|      2|    Curl_cfree = (curl_free_callback)free;
  136|      2|    Curl_crealloc = (curl_realloc_callback)realloc;
  137|      2|    Curl_cstrdup = (curl_strdup_callback)CURLX_STRDUP_LOW;
  ------------------
  |  | 1465|      2|#define CURLX_STRDUP_LOW strdup
  ------------------
  138|      2|    Curl_ccalloc = (curl_calloc_callback)calloc;
  139|      2|  }
  140|       |
  141|      2|  if(Curl_win32_init(flags)) {
  ------------------
  |  |   32|      2|#define Curl_win32_init(x) CURLE_OK
  |  |  ------------------
  |  |  |  Branch (32:28): [Folded, False: 2]
  |  |  ------------------
  ------------------
  142|      0|    DEBUGF(curl_mfprintf(stderr, "Error: win32_init failed\n"));
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  ------------------
  143|      0|    goto fail;
  144|      0|  }
  145|       |
  146|      2|  if(Curl_trc_init()) {
  ------------------
  |  Branch (146:6): [True: 0, False: 2]
  ------------------
  147|      0|    DEBUGF(curl_mfprintf(stderr, "Error: Curl_trc_init failed\n"));
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  ------------------
  148|      0|    goto fail;
  149|      0|  }
  150|       |
  151|      2|  if(!Curl_ssl_init()) {
  ------------------
  |  Branch (151:6): [True: 0, False: 2]
  ------------------
  152|      0|    DEBUGF(curl_mfprintf(stderr, "Error: Curl_ssl_init failed\n"));
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  ------------------
  153|      0|    goto fail;
  154|      0|  }
  155|       |
  156|      2|  if(!Curl_vquic_init()) {
  ------------------
  |  |   84|      2|#define Curl_vquic_init() 1
  ------------------
  |  Branch (156:6): [Folded, False: 2]
  ------------------
  157|      0|    DEBUGF(curl_mfprintf(stderr, "Error: Curl_vquic_init failed\n"));
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  ------------------
  158|      0|    goto fail;
  159|      0|  }
  160|       |
  161|      2|  if(Curl_amiga_init()) {
  ------------------
  |  |   36|      2|#define Curl_amiga_init()    CURLE_OK
  |  |  ------------------
  |  |  |  Branch (36:30): [Folded, False: 2]
  |  |  ------------------
  ------------------
  162|      0|    DEBUGF(curl_mfprintf(stderr, "Error: Curl_amiga_init failed\n"));
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  ------------------
  163|      0|    goto fail;
  164|      0|  }
  165|       |
  166|      2|  if(Curl_macos_init()) {
  ------------------
  |  |   31|      2|#define Curl_macos_init() CURLE_OK
  |  |  ------------------
  |  |  |  Branch (31:27): [Folded, False: 2]
  |  |  ------------------
  ------------------
  167|      0|    DEBUGF(curl_mfprintf(stderr, "Error: Curl_macos_init failed\n"));
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  ------------------
  168|      0|    goto fail;
  169|      0|  }
  170|       |
  171|      2|  if(Curl_async_global_init()) {
  ------------------
  |  Branch (171:6): [True: 0, False: 2]
  ------------------
  172|      0|    DEBUGF(curl_mfprintf(stderr, "Error: Curl_async_global_init failed\n"));
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  ------------------
  173|      0|    goto fail;
  174|      0|  }
  175|       |
  176|      2|  if(Curl_ssh_init()) {
  ------------------
  |  |  259|      2|#define Curl_ssh_init() 0
  |  |  ------------------
  |  |  |  Branch (259:25): [Folded, False: 2]
  |  |  ------------------
  ------------------
  177|      0|    DEBUGF(curl_mfprintf(stderr, "Error: Curl_ssh_init failed\n"));
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  ------------------
  178|      0|    goto fail;
  179|      0|  }
  180|       |
  181|       |#ifdef _WIN32
  182|       |  easy_init_flags = flags;
  183|       |#else
  184|      2|  (void)flags;
  185|      2|#endif
  186|       |
  187|      2|#ifdef DEBUGBUILD
  188|      2|  if(getenv("CURL_GLOBAL_INIT"))
  ------------------
  |  Branch (188:6): [True: 0, False: 2]
  ------------------
  189|       |    /* alloc data that will leak if *cleanup() is not called! */
  190|      0|    leakpointer = curlx_malloc(1);
  ------------------
  |  | 1471|      0|#define curlx_malloc(size)         curl_dbg_malloc(size, __LINE__, __FILE__)
  ------------------
  191|      2|#endif
  192|       |
  193|      2|  return CURLE_OK;
  194|       |
  195|      0|fail:
  196|      0|  initialized--; /* undo the increase */
  197|      0|  return CURLE_FAILED_INIT;
  198|      2|}

easy.c:curl_simple_lock_lock:
   64|  5.08k|{
   65|  5.08k|  for(;;) {
   66|  5.08k|    if(!atomic_exchange_explicit(lock, true, memory_order_acquire))
  ------------------
  |  Branch (66:8): [True: 5.08k, False: 0]
  ------------------
   67|  5.08k|      break;
   68|       |    /* Reduce cache coherency traffic */
   69|      0|    while(atomic_load_explicit(lock, memory_order_relaxed)) {
  ------------------
  |  Branch (69:11): [True: 0, False: 0]
  ------------------
   70|       |      /* Reduce load (not mandatory) */
   71|      0|#ifdef HAVE_BUILTIN_IA32_PAUSE
   72|      0|      __builtin_ia32_pause();
   73|       |#elif defined(__aarch64__)
   74|       |      /* NOLINTNEXTLINE(portability-no-assembler) */
   75|       |      __asm__ volatile("yield" ::: "memory");
   76|       |#elif defined(HAVE_SCHED_YIELD)
   77|       |      sched_yield();
   78|       |#endif
   79|      0|    }
   80|      0|  }
   81|  5.08k|}
easy.c:curl_simple_lock_unlock:
   84|  5.08k|{
   85|  5.08k|  atomic_store_explicit(lock, false, memory_order_release);
   86|  5.08k|}

Curl_urldecode:
  108|    223|{
  109|    223|  size_t alloc;
  110|    223|  char *ns;
  111|       |
  112|    223|  DEBUGASSERT(string);
  ------------------
  |  | 1075|    223|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (112:3): [True: 0, False: 223]
  |  Branch (112:3): [True: 223, False: 0]
  ------------------
  113|    223|  DEBUGASSERT(ctrl >= REJECT_NADA); /* crash on TRUE/FALSE */
  ------------------
  |  | 1075|    223|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (113:3): [True: 0, False: 223]
  |  Branch (113:3): [True: 223, False: 0]
  ------------------
  114|       |
  115|    223|  alloc = (length ? length : strlen(string));
  ------------------
  |  Branch (115:12): [True: 0, False: 223]
  ------------------
  116|    223|  ns = curlx_malloc(alloc + 1);
  ------------------
  |  | 1471|    223|#define curlx_malloc(size)         curl_dbg_malloc(size, __LINE__, __FILE__)
  ------------------
  117|       |
  118|    223|  if(!ns)
  ------------------
  |  Branch (118:6): [True: 0, False: 223]
  ------------------
  119|      0|    return CURLE_OUT_OF_MEMORY;
  120|       |
  121|       |  /* store output string */
  122|    223|  *ostring = ns;
  123|       |
  124|   117k|  while(alloc) {
  ------------------
  |  Branch (124:9): [True: 117k, False: 214]
  ------------------
  125|   117k|    unsigned char in = (unsigned char)*string;
  126|   117k|    if(('%' == in) && (alloc > 2) &&
  ------------------
  |  Branch (126:8): [True: 12.3k, False: 105k]
  |  Branch (126:23): [True: 12.2k, False: 49]
  ------------------
  127|  12.2k|       ISXDIGIT(string[1]) && ISXDIGIT(string[2])) {
  ------------------
  |  |   37|   129k|#define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   42|  24.5k|#define ISDIGIT(x)  (((x) >= '0') && ((x) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (42:22): [True: 4.22k, False: 8.05k]
  |  |  |  |  |  Branch (42:38): [True: 2.45k, False: 1.77k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   27|  22.1k|#define ISLOWHEXALPHA(x) (((x) >= 'a') && ((x) <= 'f'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (27:27): [True: 909, False: 8.91k]
  |  |  |  |  |  Branch (27:43): [True: 473, False: 436]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   28|  9.35k|#define ISUPHEXALPHA(x)  (((x) >= 'A') && ((x) <= 'F'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (28:27): [True: 1.25k, False: 8.10k]
  |  |  |  |  |  Branch (28:43): [True: 673, False: 581]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                     ISXDIGIT(string[1]) && ISXDIGIT(string[2])) {
  ------------------
  |  |   37|  3.60k|#define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   42|  7.20k|#define ISDIGIT(x)  (((x) >= '0') && ((x) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (42:22): [True: 2.70k, False: 900]
  |  |  |  |  |  Branch (42:38): [True: 1.69k, False: 1.00k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   27|  5.51k|#define ISLOWHEXALPHA(x) (((x) >= 'a') && ((x) <= 'f'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (27:27): [True: 491, False: 1.41k]
  |  |  |  |  |  Branch (27:43): [True: 104, False: 387]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   28|  1.80k|#define ISUPHEXALPHA(x)  (((x) >= 'A') && ((x) <= 'F'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (28:27): [True: 766, False: 1.03k]
  |  |  |  |  |  Branch (28:43): [True: 64, False: 702]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  128|       |      /* this is two hexadecimal digits following a '%' */
  129|  1.86k|      in = (unsigned char)((curlx_hexval(string[1]) << 4) |
  ------------------
  |  |  111|  1.86k|#define curlx_hexval(x) (unsigned char)(curlx_hexasciitable[(x) - '0'] & 0x0f)
  ------------------
  130|  1.86k|                           curlx_hexval(string[2]));
  ------------------
  |  |  111|  1.86k|#define curlx_hexval(x) (unsigned char)(curlx_hexasciitable[(x) - '0'] & 0x0f)
  ------------------
  131|  1.86k|      string += 3;
  132|  1.86k|      alloc -= 3;
  133|  1.86k|    }
  134|   115k|    else {
  135|   115k|      string++;
  136|   115k|      alloc--;
  137|   115k|    }
  138|       |
  139|   117k|    if(((ctrl == REJECT_CTRL) && (in < 0x20)) ||
  ------------------
  |  Branch (139:9): [True: 117k, False: 0]
  |  Branch (139:34): [True: 9, False: 117k]
  ------------------
  140|   117k|       ((ctrl == REJECT_ZERO) && (in == 0))) {
  ------------------
  |  Branch (140:9): [True: 0, False: 117k]
  |  Branch (140:34): [True: 0, False: 0]
  ------------------
  141|      9|      curlx_safefree(*ostring);
  ------------------
  |  | 1332|      9|  do {                      \
  |  | 1333|      9|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|      9|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      9|    (ptr) = NULL;           \
  |  | 1335|      9|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 9]
  |  |  ------------------
  ------------------
  142|      9|      return CURLE_URL_MALFORMAT;
  143|      9|    }
  144|       |
  145|   117k|    *ns++ = (char)in;
  146|   117k|  }
  147|    214|  *ns = 0; /* terminate it */
  148|       |
  149|    214|  if(olen)
  ------------------
  |  Branch (149:6): [True: 178, False: 36]
  ------------------
  150|       |    /* store output size */
  151|    178|    *olen = ns - *ostring;
  152|       |
  153|    214|  return CURLE_OK;
  154|    223|}
curl_free:
  191|  2.18k|{
  192|  2.18k|  curlx_free(p);
  ------------------
  |  | 1476|  2.18k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  193|  2.18k|}
Curl_hexbyte:
  225|  84.1k|{
  226|  84.1k|  dest[0] = Curl_udigits[val >> 4];
  227|  84.1k|  dest[1] = Curl_udigits[val & 0x0F];
  228|  84.1k|}

Curl_wildcard_dtor:
  189|  7.61k|{
  190|  7.61k|  struct WildcardData *wc = *wcp;
  191|  7.61k|  if(!wc)
  ------------------
  |  Branch (191:6): [True: 7.61k, False: 0]
  ------------------
  192|  7.61k|    return;
  193|       |
  194|      0|  if(wc->dtor) {
  ------------------
  |  Branch (194:6): [True: 0, False: 0]
  ------------------
  195|      0|    wc->dtor(wc->ftpwc);
  196|      0|    wc->dtor = ZERO_NULL;
  ------------------
  |  | 1158|      0|#define ZERO_NULL 0
  ------------------
  197|      0|    wc->ftpwc = NULL;
  198|      0|  }
  199|      0|  DEBUGASSERT(!wc->ftpwc);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (199:3): [True: 0, False: 0]
  |  Branch (199:3): [True: 0, False: 0]
  ------------------
  200|       |
  201|      0|  Curl_llist_destroy(&wc->filelist, NULL);
  202|      0|  curlx_safefree(wc->path);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  203|      0|  curlx_safefree(wc->pattern);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  204|      0|  wc->state = CURLWC_INIT;
  205|      0|  curlx_free(wc);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  206|       |  *wcp = NULL;
  207|      0|}

curl_getenv:
   27|  4.07k|{
   28|       |#if defined(CURL_WINDOWS_UWP) || \
   29|       |  defined(__ORBIS__) || defined(__PROSPERO__) /* PlayStation 4 and 5 */
   30|       |  (void)variable;
   31|       |  return NULL;
   32|       |#elif defined(_WIN32)
   33|       |  /* This uses Windows API instead of C runtime getenv() to get the environment
   34|       |     variable since some changes are not always visible to the latter. #4774 */
   35|       |  char *buf = NULL;
   36|       |  char *tmp;
   37|       |  DWORD bufsize;
   38|       |  DWORD rc = 1;
   39|       |  const DWORD max = 32768; /* max env var size from MSCRT source */
   40|       |
   41|       |  for(;;) {
   42|       |    tmp = curlx_realloc(buf, rc);
   43|       |    if(!tmp) {
   44|       |      curlx_free(buf);
   45|       |      return NULL;
   46|       |    }
   47|       |
   48|       |    buf = tmp;
   49|       |    bufsize = rc;
   50|       |
   51|       |    /* it is possible for rc to be 0 if the variable was found but empty.
   52|       |       Since getenv does not make that distinction we ignore it as well. */
   53|       |    rc = GetEnvironmentVariableA(variable, buf, bufsize);
   54|       |    if(!rc || rc == bufsize || rc > max) {
   55|       |      curlx_free(buf);
   56|       |      return NULL;
   57|       |    }
   58|       |
   59|       |    /* if rc < bufsize then rc is bytes written not including null */
   60|       |    if(rc < bufsize)
   61|       |      return buf;
   62|       |
   63|       |    /* else rc is bytes needed, try again */
   64|       |  }
   65|       |#else
   66|  4.07k|  char *env = getenv(variable);
   67|  4.07k|  return (env && env[0]) ? curlx_strdup(env) : NULL;
  ------------------
  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
  |  Branch (67:11): [True: 0, False: 4.07k]
  |  Branch (67:18): [True: 0, False: 0]
  ------------------
   68|  4.07k|#endif
   69|  4.07k|}

Curl_initinfo:
   42|  7.61k|{
   43|  7.61k|  struct Progress *pro = &data->progress;
   44|  7.61k|  struct PureInfo *info = &data->info;
   45|       |
   46|  7.61k|  memset(&pro->delta, 0, sizeof(pro->delta));
   47|  7.61k|  memset(&pro->total, 0, sizeof(pro->total));
   48|  7.61k|  pro->startransfer_added = FALSE;
  ------------------
  |  | 1048|  7.61k|#define FALSE false
  ------------------
   49|       |
   50|  7.61k|  info->httpcode = 0;
   51|  7.61k|  info->httpproxycode = 0;
   52|  7.61k|  info->httpversion = 0;
   53|  7.61k|  info->filetime = -1; /* -1 is an illegal time and thus means unknown */
   54|  7.61k|  info->timecond = FALSE;
  ------------------
  |  | 1048|  7.61k|#define FALSE false
  ------------------
   55|       |
   56|  7.61k|  info->header_size = 0;
   57|  7.61k|  info->request_size = 0;
   58|  7.61k|  info->proxyauthavail = 0;
   59|  7.61k|  info->httpauthavail = 0;
   60|  7.61k|  info->proxyauthpicked = 0;
   61|  7.61k|  info->httpauthpicked = 0;
   62|  7.61k|  info->numconnects = 0;
   63|       |
   64|  7.61k|  curlx_safefree(info->contenttype);
  ------------------
  |  | 1332|  7.61k|  do {                      \
  |  | 1333|  7.61k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  7.61k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  7.61k|    (ptr) = NULL;           \
  |  | 1335|  7.61k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 7.61k]
  |  |  ------------------
  ------------------
   65|  7.61k|  curlx_safefree(info->wouldredirect);
  ------------------
  |  | 1332|  7.61k|  do {                      \
  |  | 1333|  7.61k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  7.61k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  7.61k|    (ptr) = NULL;           \
  |  | 1335|  7.61k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 7.61k]
  |  |  ------------------
  ------------------
   66|       |
   67|  7.61k|  memset(&info->primary, 0, sizeof(info->primary));
   68|  7.61k|  info->retry_after = 0;
   69|       |
   70|  7.61k|  info->conn_scheme = 0;
   71|  7.61k|  info->conn_protocol = 0;
   72|  7.61k|  info->used_proxy = 0;
   73|       |
   74|  7.61k|#ifdef USE_SSL
   75|  7.61k|  Curl_ssl_free_certinfo(data);
   76|  7.61k|#endif
   77|  7.61k|}

Curl_hash_init:
   82|  17.2k|{
   83|  17.2k|  DEBUGASSERT(h);
  ------------------
  |  | 1075|  17.2k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (83:3): [True: 0, False: 17.2k]
  |  Branch (83:3): [True: 17.2k, False: 0]
  ------------------
   84|  17.2k|  DEBUGASSERT(slots);
  ------------------
  |  | 1075|  17.2k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (84:3): [True: 0, False: 17.2k]
  |  Branch (84:3): [True: 17.2k, False: 0]
  ------------------
   85|  17.2k|  DEBUGASSERT(hfunc);
  ------------------
  |  | 1075|  17.2k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (85:3): [True: 0, False: 17.2k]
  |  Branch (85:3): [True: 17.2k, False: 0]
  ------------------
   86|  17.2k|  DEBUGASSERT(comparator);
  ------------------
  |  | 1075|  17.2k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (86:3): [True: 0, False: 17.2k]
  |  Branch (86:3): [True: 17.2k, False: 0]
  ------------------
   87|  17.2k|  DEBUGASSERT(dtor);
  ------------------
  |  | 1075|  17.2k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (87:3): [True: 0, False: 17.2k]
  |  Branch (87:3): [True: 17.2k, False: 0]
  ------------------
   88|       |
   89|  17.2k|  h->table = NULL;
   90|  17.2k|  h->hash_func = hfunc;
   91|  17.2k|  h->comp_func = comparator;
   92|  17.2k|  h->dtor = dtor;
   93|  17.2k|  h->size = 0;
   94|  17.2k|  h->slots = slots;
   95|  17.2k|#ifdef DEBUGBUILD
   96|  17.2k|  h->init = HASHINIT;
  ------------------
  |  |   30|  17.2k|#define HASHINIT 0x7017e781
  ------------------
   97|  17.2k|#endif
   98|  17.2k|}
Curl_hash_add2:
  163|  6.10k|{
  164|  6.10k|  struct Curl_hash_element *he, **slot;
  165|       |
  166|  6.10k|  DEBUGASSERT(h);
  ------------------
  |  | 1075|  6.10k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (166:3): [True: 0, False: 6.10k]
  |  Branch (166:3): [True: 6.10k, False: 0]
  ------------------
  167|  6.10k|  DEBUGASSERT(h->slots);
  ------------------
  |  | 1075|  6.10k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (167:3): [True: 0, False: 6.10k]
  |  Branch (167:3): [True: 6.10k, False: 0]
  ------------------
  168|  6.10k|  DEBUGASSERT(h->init == HASHINIT);
  ------------------
  |  | 1075|  6.10k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (168:3): [True: 0, False: 6.10k]
  |  Branch (168:3): [True: 6.10k, False: 0]
  ------------------
  169|  6.10k|  if(!h->table) {
  ------------------
  |  Branch (169:6): [True: 6.10k, False: 0]
  ------------------
  170|  6.10k|    h->table = curlx_calloc(h->slots, sizeof(struct Curl_hash_element *));
  ------------------
  |  | 1473|  6.10k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
  171|  6.10k|    if(!h->table)
  ------------------
  |  Branch (171:8): [True: 0, False: 6.10k]
  ------------------
  172|      0|      return NULL; /* OOM */
  173|  6.10k|  }
  174|       |
  175|  6.10k|  slot = CURL_HASH_SLOT_ADDR(h, key, key_len);
  ------------------
  |  |  159|  6.10k|#define CURL_HASH_SLOT_ADDR(x, y, z) &CURL_HASH_SLOT(x, y, z)
  |  |  ------------------
  |  |  |  |  158|  6.10k|#define CURL_HASH_SLOT(x, y, z)      x->table[(x)->hash_func(y, z, (x)->slots)]
  |  |  ------------------
  ------------------
  176|  6.10k|  for(he = *slot; he; he = he->next) {
  ------------------
  |  Branch (176:19): [True: 0, False: 6.10k]
  ------------------
  177|      0|    if(h->comp_func(he->key, he->key_len, key, key_len)) {
  ------------------
  |  Branch (177:8): [True: 0, False: 0]
  ------------------
  178|       |      /* existing key entry, overwrite by clearing old pointer */
  179|      0|      hash_elem_clear_ptr(h, he);
  180|      0|      he->ptr = p;
  181|      0|      he->dtor = dtor;
  182|      0|      return p;
  183|      0|    }
  184|      0|  }
  185|       |
  186|  6.10k|  he = hash_elem_create(key, key_len, p, dtor);
  187|  6.10k|  if(!he)
  ------------------
  |  Branch (187:6): [True: 0, False: 6.10k]
  ------------------
  188|      0|    return NULL; /* OOM */
  189|       |
  190|  6.10k|  hash_elem_link(h, slot, he);
  191|  6.10k|  return p; /* return the new entry */
  192|  6.10k|}
Curl_hash_add:
  203|  4.07k|{
  204|       |  return Curl_hash_add2(h, key, key_len, p, NULL);
  205|  4.07k|}
Curl_hash_delete:
  213|  8.64k|{
  214|  8.64k|  DEBUGASSERT(h);
  ------------------
  |  | 1075|  8.64k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (214:3): [True: 0, False: 8.64k]
  |  Branch (214:3): [True: 8.64k, False: 0]
  ------------------
  215|  8.64k|  DEBUGASSERT(h->slots);
  ------------------
  |  | 1075|  8.64k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (215:3): [True: 0, False: 8.64k]
  |  Branch (215:3): [True: 8.64k, False: 0]
  ------------------
  216|  8.64k|  DEBUGASSERT(h->init == HASHINIT);
  ------------------
  |  | 1075|  8.64k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (216:3): [True: 0, False: 8.64k]
  |  Branch (216:3): [True: 8.64k, False: 0]
  ------------------
  217|  8.64k|  if(h->table) {
  ------------------
  |  Branch (217:6): [True: 6.10k, False: 2.53k]
  ------------------
  218|  6.10k|    struct Curl_hash_element *he, **he_anchor;
  219|       |
  220|  6.10k|    he_anchor = CURL_HASH_SLOT_ADDR(h, key, key_len);
  ------------------
  |  |  159|  6.10k|#define CURL_HASH_SLOT_ADDR(x, y, z) &CURL_HASH_SLOT(x, y, z)
  |  |  ------------------
  |  |  |  |  158|  6.10k|#define CURL_HASH_SLOT(x, y, z)      x->table[(x)->hash_func(y, z, (x)->slots)]
  |  |  ------------------
  ------------------
  221|  6.10k|    while(*he_anchor) {
  ------------------
  |  Branch (221:11): [True: 4.07k, False: 2.03k]
  ------------------
  222|  4.07k|      he = *he_anchor;
  223|  4.07k|      if(h->comp_func(he->key, he->key_len, key, key_len)) {
  ------------------
  |  Branch (223:10): [True: 4.07k, False: 0]
  ------------------
  224|  4.07k|        hash_elem_unlink(h, he_anchor, he);
  225|  4.07k|        hash_elem_destroy(h, he);
  226|  4.07k|        return 0;
  227|  4.07k|      }
  228|      0|      he_anchor = &he->next;
  229|      0|    }
  230|  6.10k|  }
  231|  4.57k|  return 1;
  232|  8.64k|}
Curl_hash_pick:
  239|  12.2k|{
  240|  12.2k|  DEBUGASSERT(h);
  ------------------
  |  | 1075|  12.2k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (240:3): [True: 0, False: 12.2k]
  |  Branch (240:3): [True: 12.2k, False: 0]
  ------------------
  241|  12.2k|  DEBUGASSERT(h->init == HASHINIT);
  ------------------
  |  | 1075|  12.2k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (241:3): [True: 0, False: 12.2k]
  |  Branch (241:3): [True: 12.2k, False: 0]
  ------------------
  242|  12.2k|  if(h->table) {
  ------------------
  |  Branch (242:6): [True: 4.07k, False: 8.14k]
  ------------------
  243|  4.07k|    struct Curl_hash_element *he;
  244|  4.07k|    DEBUGASSERT(h->slots);
  ------------------
  |  | 1075|  4.07k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (244:5): [True: 0, False: 4.07k]
  |  Branch (244:5): [True: 4.07k, False: 0]
  ------------------
  245|  4.07k|    he = CURL_HASH_SLOT(h, key, key_len);
  ------------------
  |  |  158|  4.07k|#define CURL_HASH_SLOT(x, y, z)      x->table[(x)->hash_func(y, z, (x)->slots)]
  ------------------
  246|  4.07k|    while(he) {
  ------------------
  |  Branch (246:11): [True: 4.07k, False: 0]
  ------------------
  247|  4.07k|      if(h->comp_func(he->key, he->key_len, key, key_len)) {
  ------------------
  |  Branch (247:10): [True: 4.07k, False: 0]
  ------------------
  248|  4.07k|        return he->ptr;
  249|  4.07k|      }
  250|      0|      he = he->next;
  251|      0|    }
  252|  4.07k|  }
  253|  8.14k|  return NULL;
  254|  12.2k|}
Curl_hash_destroy:
  264|  17.2k|{
  265|  17.2k|  DEBUGASSERT(h->init == HASHINIT);
  ------------------
  |  | 1075|  17.2k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (265:3): [True: 0, False: 17.2k]
  |  Branch (265:3): [True: 17.2k, False: 0]
  ------------------
  266|  17.2k|  if(h->table) {
  ------------------
  |  Branch (266:6): [True: 6.10k, False: 11.1k]
  ------------------
  267|  6.10k|    Curl_hash_clean(h);
  268|  6.10k|    curlx_safefree(h->table);
  ------------------
  |  | 1332|  6.10k|  do {                      \
  |  | 1333|  6.10k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  6.10k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  6.10k|    (ptr) = NULL;           \
  |  | 1335|  6.10k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 6.10k]
  |  |  ------------------
  ------------------
  269|  6.10k|  }
  270|  17.2k|  DEBUGASSERT(h->size == 0);
  ------------------
  |  | 1075|  17.2k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (270:3): [True: 0, False: 17.2k]
  |  Branch (270:3): [True: 17.2k, False: 0]
  ------------------
  271|  17.2k|  h->slots = 0;
  272|  17.2k|}
Curl_hash_clean:
  279|  6.10k|{
  280|  6.10k|  if(h && h->table) {
  ------------------
  |  Branch (280:6): [True: 6.10k, False: 0]
  |  Branch (280:11): [True: 6.10k, False: 0]
  ------------------
  281|  6.10k|    struct Curl_hash_element *he, **he_anchor;
  282|  6.10k|    size_t i;
  283|  6.10k|    DEBUGASSERT(h->init == HASHINIT);
  ------------------
  |  | 1075|  6.10k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (283:5): [True: 0, False: 6.10k]
  |  Branch (283:5): [True: 6.10k, False: 0]
  ------------------
  284|   394k|    for(i = 0; i < h->slots; ++i) {
  ------------------
  |  Branch (284:16): [True: 388k, False: 6.10k]
  ------------------
  285|   388k|      he_anchor = &h->table[i];
  286|   390k|      while(*he_anchor) {
  ------------------
  |  Branch (286:13): [True: 2.03k, False: 388k]
  ------------------
  287|  2.03k|        he = *he_anchor;
  288|  2.03k|        hash_elem_unlink(h, he_anchor, he);
  289|  2.03k|        hash_elem_destroy(h, he);
  290|  2.03k|      }
  291|   388k|    }
  292|  6.10k|  }
  293|  6.10k|}
Curl_hash_count:
  296|  2.03k|{
  297|  2.03k|  DEBUGASSERT(h->init == HASHINIT);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (297:3): [True: 0, False: 2.03k]
  |  Branch (297:3): [True: 2.03k, False: 0]
  ------------------
  298|  2.03k|  return h->size;
  299|  2.03k|}
Curl_hash_clean_with_criterium:
  304|  2.03k|{
  305|  2.03k|  size_t i;
  306|       |
  307|  2.03k|  if(!h || !h->table)
  ------------------
  |  Branch (307:6): [True: 0, False: 2.03k]
  |  Branch (307:12): [True: 0, False: 2.03k]
  ------------------
  308|      0|    return;
  309|       |
  310|  2.03k|  DEBUGASSERT(h->init == HASHINIT);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (310:3): [True: 0, False: 2.03k]
  |  Branch (310:3): [True: 2.03k, False: 0]
  ------------------
  311|   146k|  for(i = 0; i < h->slots; ++i) {
  ------------------
  |  Branch (311:14): [True: 144k, False: 2.03k]
  ------------------
  312|   144k|    struct Curl_hash_element *he, **he_anchor = &h->table[i];
  313|   146k|    while(*he_anchor) {
  ------------------
  |  Branch (313:11): [True: 2.03k, False: 144k]
  ------------------
  314|       |      /* ask the callback function if we shall remove this entry or not */
  315|  2.03k|      if(!comp || comp(user, (*he_anchor)->ptr)) {
  ------------------
  |  Branch (315:10): [True: 0, False: 2.03k]
  |  Branch (315:19): [True: 0, False: 2.03k]
  ------------------
  316|      0|        he = *he_anchor;
  317|      0|        hash_elem_unlink(h, he_anchor, he);
  318|      0|        hash_elem_destroy(h, he);
  319|      0|      }
  320|  2.03k|      else
  321|  2.03k|        he_anchor = &(*he_anchor)->next;
  322|  2.03k|    }
  323|   144k|  }
  324|  2.03k|}
Curl_hash_str:
  327|  16.2k|{
  328|  16.2k|  const char *key_str = (const char *)key;
  329|  16.2k|  const char *end = key_str + key_length;
  330|  16.2k|  size_t h = 5381;
  331|       |
  332|   305k|  while(key_str < end) {
  ------------------
  |  Branch (332:9): [True: 289k, False: 16.2k]
  ------------------
  333|   289k|    size_t j = (size_t)*key_str++;
  334|   289k|    h += h << 5;
  335|   289k|    h ^= j;
  336|   289k|  }
  337|       |
  338|  16.2k|  return (h % slots_num);
  339|  16.2k|}
curlx_str_key_compare:
  343|  8.14k|{
  344|  8.14k|  if((key1_len == key2_len) && !memcmp(k1, k2, key1_len))
  ------------------
  |  Branch (344:6): [True: 8.14k, False: 0]
  |  Branch (344:32): [True: 8.14k, False: 0]
  ------------------
  345|  8.14k|    return 1;
  346|       |
  347|      0|  return 0;
  348|  8.14k|}
Curl_hash_start_iterate:
  352|  4.57k|{
  353|  4.57k|  DEBUGASSERT(hash->init == HASHINIT);
  ------------------
  |  | 1075|  4.57k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (353:3): [True: 0, False: 4.57k]
  |  Branch (353:3): [True: 4.57k, False: 0]
  ------------------
  354|  4.57k|  iter->hash = hash;
  355|  4.57k|  iter->slot_index = 0;
  356|  4.57k|  iter->current = NULL;
  357|  4.57k|#ifdef DEBUGBUILD
  358|  4.57k|  iter->init = ITERINIT;
  ------------------
  |  |   31|  4.57k|#define ITERINIT 0x5FEDCBA9
  ------------------
  359|  4.57k|#endif
  360|  4.57k|}
Curl_hash_next_element:
  364|  4.57k|{
  365|  4.57k|  struct Curl_hash *h;
  366|  4.57k|  DEBUGASSERT(iter->init == ITERINIT);
  ------------------
  |  | 1075|  4.57k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (366:3): [True: 0, False: 4.57k]
  |  Branch (366:3): [True: 4.57k, False: 0]
  ------------------
  367|  4.57k|  h = iter->hash;
  368|  4.57k|  if(!h->table)
  ------------------
  |  Branch (368:6): [True: 2.53k, False: 2.03k]
  ------------------
  369|  2.53k|    return NULL; /* empty hash, nothing to return */
  370|       |
  371|       |  /* Get the next element in the current list, if any */
  372|  2.03k|  if(iter->current)
  ------------------
  |  Branch (372:6): [True: 0, False: 2.03k]
  ------------------
  373|      0|    iter->current = iter->current->next;
  374|       |
  375|       |  /* If we have reached the end of the list, find the next one */
  376|  2.03k|  if(!iter->current) {
  ------------------
  |  Branch (376:6): [True: 2.03k, False: 0]
  ------------------
  377|  2.03k|    size_t i;
  378|   199k|    for(i = iter->slot_index; i < h->slots; i++) {
  ------------------
  |  Branch (378:31): [True: 197k, False: 2.03k]
  ------------------
  379|   197k|      if(h->table[i]) {
  ------------------
  |  Branch (379:10): [True: 0, False: 197k]
  ------------------
  380|      0|        iter->current = h->table[i];
  381|      0|        iter->slot_index = i + 1;
  382|      0|        break;
  383|      0|      }
  384|   197k|    }
  385|  2.03k|  }
  386|       |
  387|  2.03k|  return iter->current;
  388|  4.57k|}
hash.c:hash_elem_clear_ptr:
  122|  6.10k|{
  123|  6.10k|  DEBUGASSERT(h);
  ------------------
  |  | 1075|  6.10k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (123:3): [True: 0, False: 6.10k]
  |  Branch (123:3): [True: 6.10k, False: 0]
  ------------------
  124|  6.10k|  DEBUGASSERT(he);
  ------------------
  |  | 1075|  6.10k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (124:3): [True: 0, False: 6.10k]
  |  Branch (124:3): [True: 6.10k, False: 0]
  ------------------
  125|  6.10k|  if(he->ptr) {
  ------------------
  |  Branch (125:6): [True: 6.10k, False: 0]
  ------------------
  126|  6.10k|    if(he->dtor)
  ------------------
  |  Branch (126:8): [True: 2.03k, False: 4.07k]
  ------------------
  127|  2.03k|      he->dtor(he->key, he->key_len, he->ptr);
  128|  4.07k|    else
  129|  4.07k|      h->dtor(he->ptr);
  130|       |    he->ptr = NULL;
  131|  6.10k|  }
  132|  6.10k|}
hash.c:hash_elem_create:
  104|  6.10k|{
  105|  6.10k|  struct Curl_hash_element *he;
  106|       |
  107|       |  /* allocate the struct plus memory after it to store the key */
  108|  6.10k|  he = curlx_malloc(sizeof(struct Curl_hash_element) + key_len);
  ------------------
  |  | 1471|  6.10k|#define curlx_malloc(size)         curl_dbg_malloc(size, __LINE__, __FILE__)
  ------------------
  109|  6.10k|  if(he) {
  ------------------
  |  Branch (109:6): [True: 6.10k, False: 0]
  ------------------
  110|  6.10k|    he->next = NULL;
  111|       |    /* copy the key */
  112|  6.10k|    memcpy(he->key, key, key_len);
  113|  6.10k|    he->key_len = key_len;
  114|  6.10k|    he->ptr = CURL_UNCONST(p);
  ------------------
  |  |  856|  6.10k|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
  115|  6.10k|    he->dtor = dtor;
  116|  6.10k|  }
  117|  6.10k|  return he;
  118|  6.10k|}
hash.c:hash_elem_link:
  152|  6.10k|{
  153|  6.10k|  he->next = *he_anchor;
  154|  6.10k|  *he_anchor = he;
  155|  6.10k|  ++h->size;
  156|  6.10k|}
hash.c:hash_elem_unlink:
  144|  6.10k|{
  145|  6.10k|  *he_anchor = he->next;
  146|  6.10k|  --h->size;
  147|  6.10k|}
hash.c:hash_elem_destroy:
  136|  6.10k|{
  137|  6.10k|  hash_elem_clear_ptr(h, he);
  138|  6.10k|  curlx_free(he);
  ------------------
  |  | 1476|  6.10k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  139|  6.10k|}

Curl_headers_init:
  356|  2.03k|{
  357|  2.03k|  struct Curl_cwriter *writer;
  358|  2.03k|  CURLcode result;
  359|       |
  360|  2.03k|  if(data->conn && (data->conn->scheme->protocol & PROTO_FAMILY_HTTP)) {
  ------------------
  |  |   84|  2.03k|#define PROTO_FAMILY_HTTP (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_WS | \
  |  |  ------------------
  |  |  |  | 1088|  2.03k|#define CURLPROTO_HTTP    (1L << 0)
  |  |  ------------------
  |  |               #define PROTO_FAMILY_HTTP (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_WS | \
  |  |  ------------------
  |  |  |  | 1089|  2.03k|#define CURLPROTO_HTTPS   (1L << 1)
  |  |  ------------------
  |  |               #define PROTO_FAMILY_HTTP (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_WS | \
  |  |  ------------------
  |  |  |  |   63|  2.03k|#define CURLPROTO_WS     (1L << 30)
  |  |  ------------------
  |  |   85|  2.03k|                           CURLPROTO_WSS)
  |  |  ------------------
  |  |  |  |   64|  2.03k|#define CURLPROTO_WSS    ((curl_prot_t)1 << 31)
  |  |  ------------------
  ------------------
  |  Branch (360:6): [True: 2.03k, False: 0]
  |  Branch (360:20): [True: 0, False: 2.03k]
  ------------------
  361|       |    /* avoid installing it twice */
  362|      0|    if(Curl_cwriter_get_by_name(data, hds_cw_collect.name))
  ------------------
  |  Branch (362:8): [True: 0, False: 0]
  ------------------
  363|      0|      return CURLE_OK;
  364|       |
  365|      0|    result = Curl_cwriter_create(&writer, data, &hds_cw_collect,
  366|      0|                                 CURL_CW_PROTOCOL);
  367|      0|    if(result)
  ------------------
  |  Branch (367:8): [True: 0, False: 0]
  ------------------
  368|      0|      return result;
  369|       |
  370|      0|    result = Curl_cwriter_add(data, writer);
  371|      0|    if(result) {
  ------------------
  |  Branch (371:8): [True: 0, False: 0]
  ------------------
  372|      0|      Curl_cwriter_free(data, writer);
  373|      0|      return result;
  374|      0|    }
  375|      0|  }
  376|  2.03k|  return CURLE_OK;
  377|  2.03k|}
Curl_headers_cleanup:
  383|  7.61k|{
  384|  7.61k|  struct Curl_llist_node *e;
  385|  7.61k|  struct Curl_llist_node *n;
  386|       |
  387|  7.61k|  for(e = Curl_llist_head(&data->state.httphdrs); e; e = n) {
  ------------------
  |  Branch (387:51): [True: 0, False: 7.61k]
  ------------------
  388|      0|    struct Curl_header_store *hs = Curl_node_elem(e);
  389|      0|    n = Curl_node_next(e);
  390|      0|    curlx_free(hs);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  391|      0|  }
  392|  7.61k|  headers_reset(data);
  393|  7.61k|  return CURLE_OK;
  394|  7.61k|}
headers.c:headers_reset:
  317|  7.61k|{
  318|       |  Curl_llist_init(&data->state.httphdrs, NULL);
  319|  7.61k|}

Curl_hsts_init:
   67|  2.53k|{
   68|  2.53k|  struct hsts *h = curlx_calloc(1, sizeof(struct hsts));
  ------------------
  |  | 1473|  2.53k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
   69|  2.53k|  if(h) {
  ------------------
  |  Branch (69:6): [True: 2.53k, False: 0]
  ------------------
   70|       |    Curl_llist_init(&h->list, NULL);
   71|  2.53k|  }
   72|  2.53k|  return h;
   73|  2.53k|}
Curl_hsts_cleanup:
   78|  5.07k|{
   79|  5.07k|  struct hsts *h = *hp;
   80|  5.07k|  if(h) {
  ------------------
  |  Branch (80:6): [True: 2.53k, False: 2.53k]
  ------------------
   81|  2.53k|    struct Curl_llist_node *e;
   82|  2.53k|    struct Curl_llist_node *n;
   83|  2.53k|    for(e = Curl_llist_head(&h->list); e; e = n) {
  ------------------
  |  Branch (83:40): [True: 0, False: 2.53k]
  ------------------
   84|      0|      struct stsentry *sts = Curl_node_elem(e);
   85|      0|      n = Curl_node_next(e);
   86|      0|      hsts_free(sts);
  ------------------
  |  |   75|      0|#define hsts_free(x) curlx_free(x)
  |  |  ------------------
  |  |  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  ------------------
   87|      0|    }
   88|  2.53k|    curlx_free(h->filename);
  ------------------
  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   89|  2.53k|    curlx_free(h);
  ------------------
  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   90|       |    *hp = NULL;
   91|  2.53k|  }
   92|  5.07k|}
Curl_hsts_save:
  370|  5.07k|{
  371|  5.07k|  struct Curl_llist_node *e;
  372|  5.07k|  struct Curl_llist_node *n;
  373|  5.07k|  CURLcode result = CURLE_OK;
  374|  5.07k|  FILE *out;
  375|  5.07k|  char *tempstore = NULL;
  376|       |
  377|  5.07k|  if(!h)
  ------------------
  |  Branch (377:6): [True: 2.53k, False: 2.53k]
  ------------------
  378|       |    /* no cache activated */
  379|  2.53k|    return CURLE_OK;
  380|       |
  381|       |  /* if no new name is given, use the one we stored from the load */
  382|  2.53k|  if(!file && h->filename)
  ------------------
  |  Branch (382:6): [True: 0, False: 2.53k]
  |  Branch (382:15): [True: 0, False: 0]
  ------------------
  383|      0|    file = h->filename;
  384|       |
  385|  2.53k|  if((h->flags & CURLHSTS_READONLYFILE) || !file || !file[0])
  ------------------
  |  | 1084|  2.53k|#define CURLHSTS_READONLYFILE (1L << 1)
  ------------------
  |  Branch (385:6): [True: 0, False: 2.53k]
  |  Branch (385:44): [True: 0, False: 2.53k]
  |  Branch (385:53): [True: 0, False: 2.53k]
  ------------------
  386|       |    /* marked as read-only, no file or zero length filename */
  387|      0|    goto skipsave;
  388|       |
  389|  2.53k|  result = Curl_fopen(data, file, &out, &tempstore);
  390|  2.53k|  if(!result) {
  ------------------
  |  Branch (390:6): [True: 2.53k, False: 0]
  ------------------
  391|  2.53k|    fputs("# Your HSTS cache. https://curl.se/docs/hsts.html\n"
  392|  2.53k|          "# This file was generated by libcurl! Edit at your own risk.\n",
  393|  2.53k|          out);
  394|  2.53k|    for(e = Curl_llist_head(&h->list); e; e = n) {
  ------------------
  |  Branch (394:40): [True: 0, False: 2.53k]
  ------------------
  395|      0|      struct stsentry *sts = Curl_node_elem(e);
  396|      0|      n = Curl_node_next(e);
  397|      0|      result = hsts_out(sts, out);
  398|      0|      if(result)
  ------------------
  |  Branch (398:10): [True: 0, False: 0]
  ------------------
  399|      0|        break;
  400|      0|    }
  401|  2.53k|    curlx_fclose(out);
  ------------------
  |  |   81|  2.53k|#define curlx_fclose(file)      curl_dbg_fclose(file, __LINE__, __FILE__)
  ------------------
  402|  2.53k|    if(!result && tempstore && curlx_rename(tempstore, file))
  ------------------
  |  |   72|      0|#define curlx_rename            rename
  ------------------
  |  Branch (402:8): [True: 2.53k, False: 0]
  |  Branch (402:19): [True: 0, False: 2.53k]
  |  Branch (402:32): [True: 0, False: 0]
  ------------------
  403|      0|      result = CURLE_WRITE_ERROR;
  404|       |
  405|  2.53k|    if(result && tempstore)
  ------------------
  |  Branch (405:8): [True: 0, False: 2.53k]
  |  Branch (405:18): [True: 0, False: 0]
  ------------------
  406|      0|      unlink(tempstore);
  407|  2.53k|  }
  408|  2.53k|  curlx_free(tempstore);
  ------------------
  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  409|  2.53k|skipsave:
  410|  2.53k|  if(data->set.hsts_write) {
  ------------------
  |  Branch (410:6): [True: 0, False: 2.53k]
  ------------------
  411|       |    /* if there is a write callback */
  412|      0|    struct curl_index i; /* count */
  413|      0|    i.total = Curl_llist_count(&h->list);
  414|      0|    i.index = 0;
  415|      0|    for(e = Curl_llist_head(&h->list); e; e = n) {
  ------------------
  |  Branch (415:40): [True: 0, False: 0]
  ------------------
  416|      0|      struct stsentry *sts = Curl_node_elem(e);
  417|      0|      bool stop;
  418|      0|      n = Curl_node_next(e);
  419|      0|      result = hsts_push(data, &i, sts, &stop);
  420|      0|      if(result || stop)
  ------------------
  |  Branch (420:10): [True: 0, False: 0]
  |  Branch (420:20): [True: 0, False: 0]
  ------------------
  421|      0|        break;
  422|      0|      i.index++;
  423|      0|    }
  424|      0|  }
  425|  2.53k|  return result;
  426|  2.53k|}
Curl_hsts_loadfile:
  605|  2.53k|{
  606|  2.53k|  DEBUGASSERT(h);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (606:3): [True: 0, False: 2.53k]
  |  Branch (606:3): [True: 2.53k, False: 0]
  ------------------
  607|  2.53k|  (void)data;
  608|  2.53k|  return hsts_load(h, file);
  609|  2.53k|}
Curl_hsts_loadcb:
  615|  2.53k|{
  616|  2.53k|  if(h)
  ------------------
  |  Branch (616:6): [True: 2.53k, False: 0]
  ------------------
  617|  2.53k|    return hsts_pull(data, h);
  618|      0|  return CURLE_OK;
  619|  2.53k|}
Curl_hsts_loadfiles:
  622|  2.53k|{
  623|  2.53k|  CURLcode result = CURLE_OK;
  624|  2.53k|  struct curl_slist *l = data->state.hstslist;
  625|  2.53k|  if(l) {
  ------------------
  |  Branch (625:6): [True: 2.53k, False: 0]
  ------------------
  626|  2.53k|    Curl_share_lock(data, CURL_LOCK_DATA_HSTS, CURL_LOCK_ACCESS_SINGLE);
  627|       |
  628|  5.07k|    while(l) {
  ------------------
  |  Branch (628:11): [True: 2.53k, False: 2.53k]
  ------------------
  629|  2.53k|      result = Curl_hsts_loadfile(data, data->hsts, l->data);
  630|  2.53k|      if(result)
  ------------------
  |  Branch (630:10): [True: 0, False: 2.53k]
  ------------------
  631|      0|        break;
  632|  2.53k|      l = l->next;
  633|  2.53k|    }
  634|  2.53k|    Curl_share_unlock(data, CURL_LOCK_DATA_HSTS);
  635|  2.53k|  }
  636|  2.53k|  return result;
  637|  2.53k|}
hsts.c:hsts_load:
  560|  2.53k|{
  561|  2.53k|  CURLcode result = CURLE_OK;
  562|  2.53k|  FILE *fp;
  563|       |
  564|       |  /* we need a private copy of the filename so that the hsts cache file
  565|       |     name survives an easy handle reset */
  566|  2.53k|  curlx_free(h->filename);
  ------------------
  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  567|  2.53k|  h->filename = curlx_strdup(file);
  ------------------
  |  | 1470|  2.53k|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
  568|  2.53k|  if(!h->filename)
  ------------------
  |  Branch (568:6): [True: 0, False: 2.53k]
  ------------------
  569|      0|    return CURLE_OUT_OF_MEMORY;
  570|       |
  571|  2.53k|  fp = curlx_fopen(file, FOPEN_READTEXT);
  ------------------
  |  |   76|  2.53k|#define curlx_fopen(file, mode) curl_dbg_fopen(file, mode, __LINE__, __FILE__)
  ------------------
  572|  2.53k|  if(fp) {
  ------------------
  |  Branch (572:6): [True: 2.53k, False: 0]
  ------------------
  573|  2.53k|    curlx_struct_stat stat;
  ------------------
  |  |   65|  2.53k|#define curlx_struct_stat       struct stat
  ------------------
  574|  2.53k|    if((curlx_fstat(fileno(fp), &stat) == -1) || !S_ISDIR(stat.st_mode)) {
  ------------------
  |  |   64|  2.53k|#define curlx_fstat             fstat
  ------------------
  |  Branch (574:8): [True: 0, False: 2.53k]
  |  Branch (574:50): [True: 2.53k, False: 0]
  ------------------
  575|  2.53k|      struct dynbuf buf;
  576|  2.53k|      bool eof = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  577|  2.53k|      curlx_dyn_init(&buf, MAX_HSTS_LINE);
  ------------------
  |  |   41|  2.53k|#define MAX_HSTS_LINE    4095
  ------------------
  578|  2.53k|      do {
  579|  2.53k|        result = Curl_get_line(&buf, fp, &eof);
  580|  2.53k|        if(!result) {
  ------------------
  |  Branch (580:12): [True: 2.53k, False: 0]
  ------------------
  581|  2.53k|          const char *lineptr = curlx_dyn_ptr(&buf);
  582|  2.53k|          curlx_str_passblanks(&lineptr);
  583|       |
  584|       |          /* Skip empty or commented lines, since we know the line will have
  585|       |             a trailing newline from Curl_get_line we can treat length 1 as
  586|       |             empty. */
  587|  2.53k|          if((*lineptr == '#') || strlen(lineptr) <= 1)
  ------------------
  |  Branch (587:14): [True: 0, False: 2.53k]
  |  Branch (587:35): [True: 2.53k, False: 0]
  ------------------
  588|  2.53k|            continue;
  589|       |
  590|      0|          hsts_add(h, lineptr);
  591|      0|        }
  592|  2.53k|      } while(!result && !eof);
  ------------------
  |  Branch (592:15): [True: 2.53k, False: 0]
  |  Branch (592:26): [True: 0, False: 2.53k]
  ------------------
  593|  2.53k|      curlx_dyn_free(&buf); /* free the line buffer */
  594|  2.53k|    }
  595|  2.53k|    curlx_fclose(fp);
  ------------------
  |  |   81|  2.53k|#define curlx_fclose(file)      curl_dbg_fclose(file, __LINE__, __FILE__)
  ------------------
  596|  2.53k|  }
  597|  2.53k|  return result;
  598|  2.53k|}
hsts.c:hsts_pull:
  512|  2.53k|{
  513|       |  /* if the HSTS read callback is set, use it */
  514|  2.53k|  if(data->set.hsts_read) {
  ------------------
  |  Branch (514:6): [True: 0, False: 2.53k]
  ------------------
  515|      0|    CURLSTScode sc;
  516|      0|    DEBUGASSERT(h);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (516:5): [True: 0, False: 0]
  |  Branch (516:5): [True: 0, False: 0]
  ------------------
  517|      0|    do {
  518|      0|      char buffer[MAX_HSTS_HOSTLEN + 1];
  519|      0|      struct curl_hstsentry e;
  520|      0|      e.name = buffer;
  521|      0|      e.namelen = sizeof(buffer) - 1;
  522|      0|      e.includeSubDomains = FALSE; /* default */
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  523|      0|      e.expire[0] = 0;
  524|      0|      e.expire[MAX_HSTS_DATELEN] = 0;
  ------------------
  |  |   43|      0|#define MAX_HSTS_DATELEN 17
  ------------------
  525|      0|      e.name[0] = 0; /* to make it clean */
  526|      0|      e.name[MAX_HSTS_HOSTLEN] = 0;
  ------------------
  |  |   42|      0|#define MAX_HSTS_HOSTLEN 2048
  ------------------
  527|      0|      sc = data->set.hsts_read(data, &e, data->set.hsts_read_userp);
  528|      0|      if(sc == CURLSTS_OK) {
  ------------------
  |  Branch (528:10): [True: 0, False: 0]
  ------------------
  529|      0|        CURLcode result;
  530|      0|        const char *date = e.expire;
  531|      0|        if(!e.name[0] || e.expire[MAX_HSTS_DATELEN] ||
  ------------------
  |  |   43|      0|#define MAX_HSTS_DATELEN 17
  ------------------
  |  Branch (531:12): [True: 0, False: 0]
  |  Branch (531:26): [True: 0, False: 0]
  ------------------
  532|      0|           e.name[MAX_HSTS_HOSTLEN])
  ------------------
  |  |   42|      0|#define MAX_HSTS_HOSTLEN 2048
  ------------------
  |  Branch (532:12): [True: 0, False: 0]
  ------------------
  533|       |          /* bail out if no name was stored or if a null-terminator is gone */
  534|      0|          return CURLE_BAD_FUNCTION_ARGUMENT;
  535|      0|        if(!date[0])
  ------------------
  |  Branch (535:12): [True: 0, False: 0]
  ------------------
  536|      0|          date = UNLIMITED;
  ------------------
  |  |   44|      0|#define UNLIMITED        "unlimited"
  ------------------
  537|      0|        result = hsts_add_host_expire(h, e.name, strlen(e.name),
  538|      0|                                      date, strlen(date),
  539|       |                                      /* bitfield to bool conversion: */
  540|      0|                                      e.includeSubDomains ? TRUE : FALSE);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
                                                    e.includeSubDomains ? TRUE : FALSE);
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  |  Branch (540:39): [True: 0, False: 0]
  ------------------
  541|      0|        if(result)
  ------------------
  |  Branch (541:12): [True: 0, False: 0]
  ------------------
  542|      0|          return result;
  543|      0|      }
  544|      0|      else if(sc == CURLSTS_FAIL)
  ------------------
  |  Branch (544:15): [True: 0, False: 0]
  ------------------
  545|      0|        return CURLE_ABORTED_BY_CALLBACK;
  546|      0|    } while(sc == CURLSTS_OK);
  ------------------
  |  Branch (546:13): [True: 0, False: 0]
  ------------------
  547|      0|  }
  548|  2.53k|  return CURLE_OK;
  549|  2.53k|}

Curl_http_neg_init:
   89|  2.53k|{
   90|  2.53k|  memset(neg, 0, sizeof(*neg));
   91|  2.53k|  neg->accept_09 = data->set.http09_allowed;
   92|  2.53k|  switch(data->set.httpwant) {
   93|      0|  case CURL_HTTP_VERSION_1_0:
  ------------------
  |  | 2341|      0|#define CURL_HTTP_VERSION_1_0   1L /* please use HTTP 1.0 in the request */
  ------------------
  |  Branch (93:3): [True: 0, False: 2.53k]
  ------------------
   94|      0|    neg->wanted = neg->allowed = (CURL_HTTP_V1x);
  ------------------
  |  |   40|      0|#define CURL_HTTP_V1x   (1 << 0)
  ------------------
   95|      0|    neg->only_10 = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
   96|      0|    break;
   97|      0|  case CURL_HTTP_VERSION_1_1:
  ------------------
  |  | 2342|      0|#define CURL_HTTP_VERSION_1_1   2L /* please use HTTP 1.1 in the request */
  ------------------
  |  Branch (97:3): [True: 0, False: 2.53k]
  ------------------
   98|      0|    neg->wanted = neg->allowed = (CURL_HTTP_V1x);
  ------------------
  |  |   40|      0|#define CURL_HTTP_V1x   (1 << 0)
  ------------------
   99|      0|    break;
  100|      0|  case CURL_HTTP_VERSION_2_0:
  ------------------
  |  | 2343|      0|#define CURL_HTTP_VERSION_2_0   3L /* please use HTTP 2 in the request */
  ------------------
  |  Branch (100:3): [True: 0, False: 2.53k]
  ------------------
  101|      0|    neg->wanted = neg->allowed = (CURL_HTTP_V1x | CURL_HTTP_V2x);
  ------------------
  |  |   40|      0|#define CURL_HTTP_V1x   (1 << 0)
  ------------------
                  neg->wanted = neg->allowed = (CURL_HTTP_V1x | CURL_HTTP_V2x);
  ------------------
  |  |   41|      0|#define CURL_HTTP_V2x   (1 << 1)
  ------------------
  102|      0|    neg->h2_upgrade = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  103|      0|    break;
  104|      0|  case CURL_HTTP_VERSION_2TLS:
  ------------------
  |  | 2344|      0|#define CURL_HTTP_VERSION_2TLS  4L /* use version 2 for HTTPS, version 1.1 for
  ------------------
  |  Branch (104:3): [True: 0, False: 2.53k]
  ------------------
  105|      0|    neg->wanted = neg->allowed = (CURL_HTTP_V1x | CURL_HTTP_V2x);
  ------------------
  |  |   40|      0|#define CURL_HTTP_V1x   (1 << 0)
  ------------------
                  neg->wanted = neg->allowed = (CURL_HTTP_V1x | CURL_HTTP_V2x);
  ------------------
  |  |   41|      0|#define CURL_HTTP_V2x   (1 << 1)
  ------------------
  106|      0|    break;
  107|      0|  case CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE:
  ------------------
  |  | 2346|      0|#define CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE 5L /* please use HTTP 2 without
  ------------------
  |  Branch (107:3): [True: 0, False: 2.53k]
  ------------------
  108|      0|    neg->wanted = neg->allowed = (CURL_HTTP_V2x);
  ------------------
  |  |   41|      0|#define CURL_HTTP_V2x   (1 << 1)
  ------------------
  109|      0|    data->state.http_neg.h2_prior_knowledge = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  110|      0|    break;
  111|      0|  case CURL_HTTP_VERSION_3:
  ------------------
  |  | 2348|      0|#define CURL_HTTP_VERSION_3     30L /* Use HTTP/3, fallback to HTTP/2 or
  ------------------
  |  Branch (111:3): [True: 0, False: 2.53k]
  ------------------
  112|      0|    neg->wanted = (CURL_HTTP_V1x | CURL_HTTP_V2x | CURL_HTTP_V3x);
  ------------------
  |  |   40|      0|#define CURL_HTTP_V1x   (1 << 0)
  ------------------
                  neg->wanted = (CURL_HTTP_V1x | CURL_HTTP_V2x | CURL_HTTP_V3x);
  ------------------
  |  |   41|      0|#define CURL_HTTP_V2x   (1 << 1)
  ------------------
                  neg->wanted = (CURL_HTTP_V1x | CURL_HTTP_V2x | CURL_HTTP_V3x);
  ------------------
  |  |   42|      0|#define CURL_HTTP_V3x   (1 << 2)
  ------------------
  113|      0|    neg->allowed = neg->wanted;
  114|      0|    break;
  115|      0|  case CURL_HTTP_VERSION_3ONLY:
  ------------------
  |  | 2352|      0|#define CURL_HTTP_VERSION_3ONLY 31L /* Use HTTP/3 without fallback. For
  ------------------
  |  Branch (115:3): [True: 0, False: 2.53k]
  ------------------
  116|      0|    neg->wanted = neg->allowed = (CURL_HTTP_V3x);
  ------------------
  |  |   42|      0|#define CURL_HTTP_V3x   (1 << 2)
  ------------------
  117|      0|    break;
  118|  2.53k|  case CURL_HTTP_VERSION_NONE:
  ------------------
  |  | 2338|  2.53k|#define CURL_HTTP_VERSION_NONE  0L /* setting this means we do not care, and
  ------------------
  |  Branch (118:3): [True: 2.53k, False: 0]
  ------------------
  119|  2.53k|  default:
  ------------------
  |  Branch (119:3): [True: 0, False: 2.53k]
  ------------------
  120|  2.53k|    neg->wanted = (CURL_HTTP_V1x | CURL_HTTP_V2x);
  ------------------
  |  |   40|  2.53k|#define CURL_HTTP_V1x   (1 << 0)
  ------------------
                  neg->wanted = (CURL_HTTP_V1x | CURL_HTTP_V2x);
  ------------------
  |  |   41|  2.53k|#define CURL_HTTP_V2x   (1 << 1)
  ------------------
  121|  2.53k|    neg->allowed = (CURL_HTTP_V1x | CURL_HTTP_V2x | CURL_HTTP_V3x);
  ------------------
  |  |   40|  2.53k|#define CURL_HTTP_V1x   (1 << 0)
  ------------------
                  neg->allowed = (CURL_HTTP_V1x | CURL_HTTP_V2x | CURL_HTTP_V3x);
  ------------------
  |  |   41|  2.53k|#define CURL_HTTP_V2x   (1 << 1)
  ------------------
                  neg->allowed = (CURL_HTTP_V1x | CURL_HTTP_V2x | CURL_HTTP_V3x);
  ------------------
  |  |   42|  2.53k|#define CURL_HTTP_V3x   (1 << 2)
  ------------------
  122|  2.53k|    break;
  123|  2.53k|  }
  124|  2.53k|}

Curl_http_auth_cleanup_digest:
  183|  5.07k|{
  184|  5.07k|  Curl_auth_digest_cleanup(&data->state.digest);
  185|  5.07k|  Curl_auth_digest_cleanup(&data->state.proxydigest);
  186|  5.07k|}

Curl_is_ASCII_str:
  238|  4.17k|{
  239|  4.17k|  if(s && s->len) {
  ------------------
  |  Branch (239:6): [True: 4.17k, False: 0]
  |  Branch (239:11): [True: 4.17k, False: 0]
  ------------------
  240|  4.17k|    const unsigned char *ch = (const unsigned char *)s->str;
  241|  4.17k|    size_t i;
  242|   193k|    for(i = 0; i < s->len; ++i) {
  ------------------
  |  Branch (242:16): [True: 189k, False: 4.04k]
  ------------------
  243|   189k|      if(ch[i] & 0x80)
  ------------------
  |  Branch (243:10): [True: 121, False: 188k]
  ------------------
  244|    121|        return FALSE;
  ------------------
  |  | 1048|    121|#define FALSE false
  ------------------
  245|   189k|    }
  246|  4.17k|  }
  247|  4.04k|  return TRUE;
  ------------------
  |  | 1045|  4.04k|#define TRUE true
  ------------------
  248|  4.17k|}
Curl_idn_decode:
  315|    121|{
  316|    121|  char *d = NULL;
  317|    121|  CURLcode result = idn_decode(input, &d);
  318|    121|#ifdef USE_LIBIDN2
  319|    121|  if(!result) {
  ------------------
  |  Branch (319:6): [True: 0, False: 121]
  ------------------
  320|      0|    char *c = curlx_strdup(d);
  ------------------
  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
  321|      0|    idn2_free(d);
  322|      0|    if(c)
  ------------------
  |  Branch (322:8): [True: 0, False: 0]
  ------------------
  323|      0|      d = c;
  324|      0|    else
  325|      0|      result = CURLE_OUT_OF_MEMORY;
  326|      0|  }
  327|    121|#endif
  328|    121|  if(!result) {
  ------------------
  |  Branch (328:6): [True: 0, False: 121]
  ------------------
  329|      0|    if(!d[0]) { /* ended up zero length, not acceptable */
  ------------------
  |  Branch (329:8): [True: 0, False: 0]
  ------------------
  330|      0|      result = CURLE_URL_MALFORMAT;
  331|      0|      curlx_free(d);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  332|      0|    }
  333|      0|    else
  334|      0|      *output = d;
  335|      0|  }
  336|    121|  return result;
  337|    121|}
idn.c:idn_decode:
  260|    121|{
  261|    121|  char *decoded = NULL;
  262|    121|  CURLcode result = CURLE_OK;
  263|    121|#ifdef USE_LIBIDN2
  264|    121|  if(idn2_check_version(IDN2_VERSION)) {
  ------------------
  |  Branch (264:6): [True: 121, False: 0]
  ------------------
  265|    121|    int flags = IDN2_NFC_INPUT
  266|    121|#if IDN2_VERSION_NUMBER >= 0x00140000
  267|       |      /* IDN2_NFC_INPUT: Normalize input string using normalization form C.
  268|       |         IDN2_NONTRANSITIONAL: Perform Unicode TR46 non-transitional
  269|       |         processing. */
  270|    121|      | IDN2_NONTRANSITIONAL
  271|    121|#endif
  272|    121|      ;
  273|    121|    int rc = IDN2_LOOKUP(input, &decoded, flags);
  ------------------
  |  |   41|    121|  idn2_lookup_ul((const char *)(name), (char **)(host), flags)
  ------------------
  274|    121|    if(rc != IDN2_OK)
  ------------------
  |  Branch (274:8): [True: 121, False: 0]
  ------------------
  275|       |      /* fallback to TR46 Transitional mode for better IDNA2003
  276|       |         compatibility */
  277|    121|      rc = IDN2_LOOKUP(input, &decoded, IDN2_TRANSITIONAL);
  ------------------
  |  |   41|    121|  idn2_lookup_ul((const char *)(name), (char **)(host), flags)
  ------------------
  278|    121|    if(rc != IDN2_OK)
  ------------------
  |  Branch (278:8): [True: 121, False: 0]
  ------------------
  279|    121|      result = CURLE_URL_MALFORMAT;
  280|    121|  }
  281|      0|  else
  282|       |    /* a too old libidn2 version */
  283|      0|    result = CURLE_NOT_BUILT_IN;
  284|       |#elif defined(USE_WIN32_IDN)
  285|       |  result = win32_idn_to_ascii(input, &decoded);
  286|       |#elif defined(USE_APPLE_IDN)
  287|       |  result = mac_idn_to_ascii(input, &decoded);
  288|       |#endif
  289|    121|  if(!result)
  ------------------
  |  Branch (289:6): [True: 0, False: 121]
  ------------------
  290|      0|    *output = decoded;
  291|    121|  return result;
  292|    121|}

Curl_ipv6_scope:
   62|  2.03k|{
   63|  2.03k|  if(sa->sa_family == AF_INET6) {
  ------------------
  |  Branch (63:6): [True: 0, False: 2.03k]
  ------------------
   64|      0|    const struct sockaddr_in6 *sa6 =
   65|      0|      (const struct sockaddr_in6 *)(const void *)sa;
   66|      0|    const unsigned char *b = sa6->sin6_addr.s6_addr;
   67|      0|    unsigned short w = (unsigned short)((b[0] << 8) | b[1]);
   68|       |
   69|      0|    if((b[0] & 0xFE) == 0xFC) /* Handle ULAs */
  ------------------
  |  Branch (69:8): [True: 0, False: 0]
  ------------------
   70|      0|      return IPV6_SCOPE_UNIQUELOCAL;
  ------------------
  |  |   32|      0|#define IPV6_SCOPE_UNIQUELOCAL  3       /* Unique local */
  ------------------
   71|      0|    switch(w & 0xFFC0) {
   72|      0|    case 0xFE80:
  ------------------
  |  Branch (72:5): [True: 0, False: 0]
  ------------------
   73|      0|      return IPV6_SCOPE_LINKLOCAL;
  ------------------
  |  |   30|      0|#define IPV6_SCOPE_LINKLOCAL    1       /* Link-local scope. */
  ------------------
   74|      0|    case 0xFEC0:
  ------------------
  |  Branch (74:5): [True: 0, False: 0]
  ------------------
   75|      0|      return IPV6_SCOPE_SITELOCAL;
  ------------------
  |  |   31|      0|#define IPV6_SCOPE_SITELOCAL    2       /* Site-local scope (deprecated). */
  ------------------
   76|      0|    case 0x0000:
  ------------------
  |  Branch (76:5): [True: 0, False: 0]
  ------------------
   77|      0|      w = b[1] | b[2] | b[3] | b[4] | b[5] | b[6] | b[7] | b[8] | b[9] |
   78|      0|          b[10] | b[11] | b[12] | b[13] | b[14];
   79|      0|      if(w || b[15] != 0x01)
  ------------------
  |  Branch (79:10): [True: 0, False: 0]
  |  Branch (79:15): [True: 0, False: 0]
  ------------------
   80|      0|        break;
   81|      0|      return IPV6_SCOPE_NODELOCAL;
  ------------------
  |  |   33|      0|#define IPV6_SCOPE_NODELOCAL    4       /* Loopback. */
  ------------------
   82|      0|    default:
  ------------------
  |  Branch (82:5): [True: 0, False: 0]
  ------------------
   83|      0|      break;
   84|      0|    }
   85|      0|  }
   86|  2.03k|  return IPV6_SCOPE_GLOBAL;
  ------------------
  |  |   29|  2.03k|#define IPV6_SCOPE_GLOBAL       0       /* Global scope. */
  ------------------
   87|  2.03k|}

Curl_llist_init:
   46|   258k|{
   47|   258k|  l->_size = 0;
   48|   258k|  l->_dtor = dtor;
   49|   258k|  l->_head = NULL;
   50|   258k|  l->_tail = NULL;
   51|   258k|#ifdef DEBUGBUILD
   52|   258k|  l->_init = LLISTINIT;
  ------------------
  |  |   29|   258k|#define LLISTINIT 0x100cc001 /* random pattern */
  ------------------
   53|   258k|#endif
   54|   258k|}
Curl_llist_insert_next:
   71|  4.57k|{
   72|  4.57k|  DEBUGASSERT(list);
  ------------------
  |  | 1075|  4.57k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (72:3): [True: 0, False: 4.57k]
  |  Branch (72:3): [True: 4.57k, False: 0]
  ------------------
   73|  4.57k|  DEBUGASSERT(list->_init == LLISTINIT);
  ------------------
  |  | 1075|  4.57k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (73:3): [True: 0, False: 4.57k]
  |  Branch (73:3): [True: 4.57k, False: 0]
  ------------------
   74|  4.57k|  DEBUGASSERT(ne);
  ------------------
  |  | 1075|  4.57k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (74:3): [True: 0, False: 4.57k]
  |  Branch (74:3): [True: 4.57k, False: 0]
  ------------------
   75|       |
   76|  4.57k|#ifdef DEBUGBUILD
   77|  4.57k|  ne->_init = NODEINIT;
  ------------------
  |  |   30|  4.57k|#define NODEINIT  0x12344321 /* random pattern */
  ------------------
   78|  4.57k|#endif
   79|  4.57k|  ne->_ptr = CURL_UNCONST(p);
  ------------------
  |  |  856|  4.57k|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
   80|  4.57k|  ne->_list = list;
   81|  4.57k|  if(list->_size == 0) {
  ------------------
  |  Branch (81:6): [True: 4.57k, False: 0]
  ------------------
   82|  4.57k|    list->_head = ne;
   83|  4.57k|    list->_head->_prev = NULL;
   84|  4.57k|    list->_head->_next = NULL;
   85|  4.57k|    list->_tail = ne;
   86|  4.57k|  }
   87|      0|  else {
   88|       |    /* if 'e' is NULL here, we insert the new element first in the list */
   89|      0|    ne->_next = e ? e->_next : list->_head;
  ------------------
  |  Branch (89:17): [True: 0, False: 0]
  ------------------
   90|      0|    ne->_prev = e;
   91|      0|    if(!e) {
  ------------------
  |  Branch (91:8): [True: 0, False: 0]
  ------------------
   92|      0|      list->_head->_prev = ne;
   93|      0|      list->_head = ne;
   94|      0|    }
   95|      0|    else if(e->_next) {
  ------------------
  |  Branch (95:13): [True: 0, False: 0]
  ------------------
   96|      0|      e->_next->_prev = ne;
   97|      0|    }
   98|      0|    else {
   99|      0|      list->_tail = ne;
  100|      0|    }
  101|      0|    if(e)
  ------------------
  |  Branch (101:8): [True: 0, False: 0]
  ------------------
  102|      0|      e->_next = ne;
  103|      0|  }
  104|       |
  105|  4.57k|  ++list->_size;
  106|  4.57k|}
Curl_llist_append:
  119|  4.57k|{
  120|  4.57k|  DEBUGASSERT(list);
  ------------------
  |  | 1075|  4.57k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (120:3): [True: 0, False: 4.57k]
  |  Branch (120:3): [True: 4.57k, False: 0]
  ------------------
  121|  4.57k|  DEBUGASSERT(list->_init == LLISTINIT);
  ------------------
  |  | 1075|  4.57k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (121:3): [True: 0, False: 4.57k]
  |  Branch (121:3): [True: 4.57k, False: 0]
  ------------------
  122|  4.57k|  DEBUGASSERT(ne);
  ------------------
  |  | 1075|  4.57k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (122:3): [True: 0, False: 4.57k]
  |  Branch (122:3): [True: 4.57k, False: 0]
  ------------------
  123|  4.57k|  Curl_llist_insert_next(list, list->_tail, p, ne);
  124|  4.57k|}
Curl_node_take_elem:
  127|  4.57k|{
  128|  4.57k|  void *ptr;
  129|  4.57k|  struct Curl_llist *list;
  130|  4.57k|  if(!e)
  ------------------
  |  Branch (130:6): [True: 0, False: 4.57k]
  ------------------
  131|      0|    return NULL;
  132|       |
  133|  4.57k|  list = e->_list;
  134|  4.57k|  DEBUGASSERT(list);
  ------------------
  |  | 1075|  4.57k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (134:3): [True: 0, False: 4.57k]
  |  Branch (134:3): [True: 4.57k, False: 0]
  ------------------
  135|  4.57k|  DEBUGASSERT(list->_init == LLISTINIT);
  ------------------
  |  | 1075|  4.57k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (135:3): [True: 0, False: 4.57k]
  |  Branch (135:3): [True: 4.57k, False: 0]
  ------------------
  136|  4.57k|  DEBUGASSERT(list->_size);
  ------------------
  |  | 1075|  4.57k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (136:3): [True: 0, False: 4.57k]
  |  Branch (136:3): [True: 4.57k, False: 0]
  ------------------
  137|  4.57k|  DEBUGASSERT(e->_init == NODEINIT);
  ------------------
  |  | 1075|  4.57k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (137:3): [True: 0, False: 4.57k]
  |  Branch (137:3): [True: 4.57k, False: 0]
  ------------------
  138|  4.57k|  if(list) {
  ------------------
  |  Branch (138:6): [True: 4.57k, False: 0]
  ------------------
  139|  4.57k|    if(e == list->_head) {
  ------------------
  |  Branch (139:8): [True: 4.57k, False: 0]
  ------------------
  140|  4.57k|      list->_head = e->_next;
  141|       |
  142|  4.57k|      if(!list->_head)
  ------------------
  |  Branch (142:10): [True: 4.57k, False: 0]
  ------------------
  143|  4.57k|        list->_tail = NULL;
  144|      0|      else
  145|      0|        e->_next->_prev = NULL;
  146|  4.57k|    }
  147|      0|    else {
  148|      0|      if(e->_prev)
  ------------------
  |  Branch (148:10): [True: 0, False: 0]
  ------------------
  149|      0|        e->_prev->_next = e->_next;
  150|       |
  151|      0|      if(!e->_next)
  ------------------
  |  Branch (151:10): [True: 0, False: 0]
  ------------------
  152|      0|        list->_tail = e->_prev;
  153|      0|      else
  154|      0|        e->_next->_prev = e->_prev;
  155|      0|    }
  156|  4.57k|    --list->_size;
  157|  4.57k|  }
  158|  4.57k|  ptr = e->_ptr;
  159|       |
  160|  4.57k|  e->_list = NULL;
  161|  4.57k|  e->_ptr  = NULL;
  162|  4.57k|  e->_prev = NULL;
  163|  4.57k|  e->_next = NULL;
  164|  4.57k|#ifdef DEBUGBUILD
  165|  4.57k|  e->_init = NODEREM; /* specific pattern on remove - not zero */
  ------------------
  |  |   31|  4.57k|#define NODEREM   0x54321012 /* random pattern */
  ------------------
  166|  4.57k|#endif
  167|       |
  168|  4.57k|  return ptr;
  169|  4.57k|}
Curl_node_remove:
  188|  4.57k|{
  189|       |  node_uremove(e, NULL);
  190|  4.57k|}
Curl_llist_destroy:
  193|  68.5k|{
  194|  68.5k|  if(list) {
  ------------------
  |  Branch (194:6): [True: 68.5k, False: 0]
  ------------------
  195|  68.5k|    DEBUGASSERT(list->_init == LLISTINIT);
  ------------------
  |  | 1075|  68.5k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (195:5): [True: 0, False: 68.5k]
  |  Branch (195:5): [True: 68.5k, False: 0]
  ------------------
  196|  68.5k|    while(list->_size > 0)
  ------------------
  |  Branch (196:11): [True: 0, False: 68.5k]
  ------------------
  197|      0|      node_uremove(list->_tail, user);
  198|  68.5k|  }
  199|  68.5k|}
Curl_llist_head:
  204|   517k|{
  205|   517k|  DEBUGASSERT(list);
  ------------------
  |  | 1075|   517k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (205:3): [True: 0, False: 517k]
  |  Branch (205:3): [True: 517k, False: 0]
  ------------------
  206|   517k|  DEBUGASSERT(list->_init == LLISTINIT);
  ------------------
  |  | 1075|   517k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (206:3): [True: 0, False: 517k]
  |  Branch (206:3): [True: 517k, False: 0]
  ------------------
  207|   517k|  return VERIFYNODE(list->_head);
  ------------------
  |  |   33|   517k|#define VERIFYNODE(x) verifynode(x)
  ------------------
  208|   517k|}
Curl_llist_count:
  226|  26.9k|{
  227|  26.9k|  DEBUGASSERT(list);
  ------------------
  |  | 1075|  26.9k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (227:3): [True: 0, False: 26.9k]
  |  Branch (227:3): [True: 26.9k, False: 0]
  ------------------
  228|  26.9k|  DEBUGASSERT(list->_init == LLISTINIT);
  ------------------
  |  | 1075|  26.9k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (228:3): [True: 0, False: 26.9k]
  |  Branch (228:3): [True: 26.9k, False: 0]
  ------------------
  229|  26.9k|  return list->_size;
  230|  26.9k|}
Curl_node_elem:
  234|  2.53k|{
  235|  2.53k|  DEBUGASSERT(n);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (235:3): [True: 0, False: 2.53k]
  |  Branch (235:3): [True: 2.53k, False: 0]
  ------------------
  236|  2.53k|  DEBUGASSERT(n->_init == NODEINIT);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (236:3): [True: 0, False: 2.53k]
  |  Branch (236:3): [True: 2.53k, False: 0]
  ------------------
  237|  2.53k|  return n->_ptr;
  238|  2.53k|}
Curl_node_llist:
  266|  6.10k|{
  267|  6.10k|  DEBUGASSERT(n);
  ------------------
  |  | 1075|  6.10k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (267:3): [True: 0, False: 6.10k]
  |  Branch (267:3): [True: 6.10k, False: 0]
  ------------------
  268|  6.10k|  DEBUGASSERT(!n->_list || n->_init == NODEINIT);
  ------------------
  |  | 1075|  6.10k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (268:3): [True: 6.10k, False: 0]
  |  Branch (268:3): [True: 0, False: 0]
  |  Branch (268:3): [True: 2.03k, False: 4.07k]
  |  Branch (268:3): [True: 4.07k, False: 0]
  ------------------
  269|  6.10k|  return n->_list;
  270|  6.10k|}
llist.c:node_uremove:
  172|  4.57k|{
  173|  4.57k|  struct Curl_llist *list;
  174|  4.57k|  void *ptr;
  175|  4.57k|  if(!e)
  ------------------
  |  Branch (175:6): [True: 0, False: 4.57k]
  ------------------
  176|      0|    return;
  177|       |
  178|  4.57k|  list = e->_list;
  179|  4.57k|  DEBUGASSERT(list);
  ------------------
  |  | 1075|  4.57k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (179:3): [True: 0, False: 4.57k]
  |  Branch (179:3): [True: 4.57k, False: 0]
  ------------------
  180|  4.57k|  if(list) {
  ------------------
  |  Branch (180:6): [True: 4.57k, False: 0]
  ------------------
  181|  4.57k|    ptr = Curl_node_take_elem(e);
  182|  4.57k|    if(list->_dtor)
  ------------------
  |  Branch (182:8): [True: 0, False: 4.57k]
  ------------------
  183|      0|      list->_dtor(user, ptr);
  184|  4.57k|  }
  185|  4.57k|}
llist.c:verifynode:
   35|   517k|{
   36|   517k|  DEBUGASSERT(!n || (n->_init == NODEINIT));
  ------------------
  |  | 1075|   517k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (36:3): [True: 517k, False: 0]
  |  Branch (36:3): [True: 0, False: 0]
  |  Branch (36:3): [True: 515k, False: 2.53k]
  |  Branch (36:3): [True: 2.53k, False: 0]
  ------------------
   37|   517k|  return n;
   38|   517k|}

curl_dbg_malloc:
  212|  74.3k|{
  213|  74.3k|  struct memdebug *mem;
  214|  74.3k|  size_t size;
  215|       |
  216|  74.3k|  DEBUGASSERT(wantedsize != 0);
  ------------------
  |  | 1075|  74.3k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (216:3): [True: 0, False: 74.3k]
  |  Branch (216:3): [True: 74.3k, False: 0]
  ------------------
  217|       |
  218|  74.3k|  if(countcheck("malloc", line, source))
  ------------------
  |  Branch (218:6): [True: 0, False: 74.3k]
  ------------------
  219|      0|    return NULL;
  220|       |
  221|       |  /* alloc at least 64 bytes */
  222|  74.3k|  size = sizeof(struct memdebug) + wantedsize;
  223|       |
  224|  74.3k|  mem = Curl_cmalloc(size);
  225|  74.3k|  if(mem) {
  ------------------
  |  Branch (225:6): [True: 74.3k, False: 0]
  ------------------
  226|  74.3k|    mem->size = wantedsize;
  227|  74.3k|  }
  228|       |
  229|  74.3k|  if(source)
  ------------------
  |  Branch (229:6): [True: 49.4k, False: 24.9k]
  ------------------
  230|  49.4k|    curl_dbg_log("MEM %s:%d malloc(%zu) = %p\n",
  231|  49.4k|                 source, line, wantedsize,
  232|  49.4k|                 mem ? (void *)mem->mem : (void *)0);
  ------------------
  |  Branch (232:18): [True: 49.4k, False: 0]
  ------------------
  233|       |
  234|  74.3k|  return mem ? mem->mem : NULL;
  ------------------
  |  Branch (234:10): [True: 74.3k, False: 0]
  ------------------
  235|  74.3k|}
curl_dbg_calloc:
  240|  86.0k|{
  241|  86.0k|  struct memdebug *mem;
  242|  86.0k|  size_t size, user_size;
  243|       |
  244|  86.0k|  DEBUGASSERT(wanted_elements != 0);
  ------------------
  |  | 1075|  86.0k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (244:3): [True: 0, False: 86.0k]
  |  Branch (244:3): [True: 86.0k, False: 0]
  ------------------
  245|  86.0k|  DEBUGASSERT(wanted_size != 0);
  ------------------
  |  | 1075|  86.0k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (245:3): [True: 0, False: 86.0k]
  |  Branch (245:3): [True: 86.0k, False: 0]
  ------------------
  246|       |
  247|  86.0k|  if(countcheck("calloc", line, source))
  ------------------
  |  Branch (247:6): [True: 0, False: 86.0k]
  ------------------
  248|      0|    return NULL;
  249|       |
  250|       |  /* alloc at least 64 bytes */
  251|  86.0k|  user_size = wanted_size * wanted_elements;
  252|  86.0k|  size = sizeof(struct memdebug) + user_size;
  253|       |
  254|  86.0k|  mem = Curl_ccalloc(1, size);
  255|  86.0k|  if(mem)
  ------------------
  |  Branch (255:6): [True: 86.0k, False: 0]
  ------------------
  256|  86.0k|    mem->size = user_size;
  257|       |
  258|  86.0k|  if(source)
  ------------------
  |  Branch (258:6): [True: 86.0k, False: 0]
  ------------------
  259|  86.0k|    curl_dbg_log("MEM %s:%d calloc(%zu,%zu) = %p\n",
  260|  86.0k|                 source, line, wanted_elements, wanted_size,
  261|  86.0k|                 mem ? (void *)mem->mem : (void *)0);
  ------------------
  |  Branch (261:18): [True: 86.0k, False: 0]
  ------------------
  262|       |
  263|  86.0k|  return mem ? mem->mem : NULL;
  ------------------
  |  Branch (263:10): [True: 86.0k, False: 0]
  ------------------
  264|  86.0k|}
curl_dbg_strdup:
  268|  24.9k|{
  269|  24.9k|  char *mem;
  270|  24.9k|  size_t len;
  271|       |
  272|  24.9k|  DEBUGASSERT(str);
  ------------------
  |  | 1075|  24.9k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (272:3): [True: 0, False: 24.9k]
  |  Branch (272:3): [True: 24.9k, False: 0]
  ------------------
  273|       |
  274|  24.9k|  if(countcheck("strdup", line, source))
  ------------------
  |  Branch (274:6): [True: 0, False: 24.9k]
  ------------------
  275|      0|    return NULL;
  276|       |
  277|  24.9k|  len = strlen(str) + 1;
  278|       |
  279|  24.9k|  mem = curl_dbg_malloc(len, 0, NULL); /* NULL prevents logging */
  280|  24.9k|  if(mem)
  ------------------
  |  Branch (280:6): [True: 24.9k, False: 0]
  ------------------
  281|  24.9k|    memcpy(mem, str, len);
  282|       |
  283|  24.9k|  if(source)
  ------------------
  |  Branch (283:6): [True: 24.9k, False: 0]
  ------------------
  284|  24.9k|    curl_dbg_log("MEM %s:%d strdup(%p) (%zu) = %p\n",
  285|  24.9k|                 source, line, (const void *)str, len, (const void *)mem);
  286|       |
  287|  24.9k|  return mem;
  288|  24.9k|}
curl_dbg_realloc:
  321|  21.2k|{
  322|  21.2k|  struct memdebug *mem = NULL;
  323|  21.2k|  bool was_locked;
  324|       |
  325|  21.2k|  size_t size = sizeof(struct memdebug) + wantedsize;
  326|       |
  327|  21.2k|  DEBUGASSERT(wantedsize != 0);
  ------------------
  |  | 1075|  21.2k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (327:3): [True: 0, False: 21.2k]
  |  Branch (327:3): [True: 21.2k, False: 0]
  ------------------
  328|       |
  329|  21.2k|  if(countcheck("realloc", line, source))
  ------------------
  |  Branch (329:6): [True: 0, False: 21.2k]
  ------------------
  330|      0|    return NULL;
  331|       |
  332|       |  /* need to realloc under lock, as we get out-of-order log
  333|       |   * entries otherwise, since another thread might alloc the
  334|       |   * memory released by realloc() before otherwise would log it. */
  335|  21.2k|  was_locked = curl_dbg_lock();
  336|       |#ifdef __INTEL_COMPILER
  337|       |#  pragma warning(push)
  338|       |#  pragma warning(disable:1684)
  339|       |   /* 1684: conversion from pointer to same-sized integral type */
  340|       |#endif
  341|       |
  342|  21.2k|  if(ptr)
  ------------------
  |  Branch (342:6): [True: 4.46k, False: 16.8k]
  ------------------
  343|  4.46k|    mem = (void *)((char *)ptr - offsetof(struct memdebug, mem));
  344|       |
  345|       |#ifdef __INTEL_COMPILER
  346|       |#  pragma warning(pop)
  347|       |#endif
  348|       |
  349|  21.2k|  mem = Curl_crealloc(mem, size);
  350|  21.2k|  if(source)
  ------------------
  |  Branch (350:6): [True: 21.2k, False: 0]
  ------------------
  351|  21.2k|    curl_dbg_log_locked("MEM %s:%d realloc(%p, %zu) = %p\n",
  352|  21.2k|                        source, line, (void *)ptr, wantedsize,
  353|  21.2k|                        mem ? (void *)mem->mem : (void *)0);
  ------------------
  |  Branch (353:25): [True: 21.2k, False: 0]
  ------------------
  354|       |
  355|  21.2k|  curl_dbg_unlock(was_locked);
  356|  21.2k|  if(mem) {
  ------------------
  |  Branch (356:6): [True: 21.2k, False: 0]
  ------------------
  357|  21.2k|    mem->size = wantedsize;
  358|  21.2k|    return mem->mem;
  359|  21.2k|  }
  360|       |
  361|      0|  return NULL;
  362|  21.2k|}
curl_dbg_free:
  365|   851k|{
  366|   851k|  if(ptr) {
  ------------------
  |  Branch (366:6): [True: 177k, False: 674k]
  ------------------
  367|   177k|    struct memdebug *mem;
  368|       |
  369|   177k|    if(source)
  ------------------
  |  Branch (369:8): [True: 177k, False: 0]
  ------------------
  370|   177k|      curl_dbg_log("MEM %s:%d free(%p)\n", source, line, (void *)ptr);
  371|       |
  372|       |#ifdef __INTEL_COMPILER
  373|       |#  pragma warning(push)
  374|       |#  pragma warning(disable:1684)
  375|       |   /* 1684: conversion from pointer to same-sized integral type */
  376|       |#endif
  377|       |
  378|   177k|    mem = (void *)((char *)ptr - offsetof(struct memdebug, mem));
  379|       |
  380|       |#ifdef __INTEL_COMPILER
  381|       |#  pragma warning(pop)
  382|       |#endif
  383|       |
  384|       |    /* free for real */
  385|   177k|    Curl_cfree(mem);
  386|   177k|  }
  387|   851k|}
curl_dbg_socket:
  391|  2.53k|{
  392|  2.53k|  curl_socket_t sockfd;
  393|       |
  394|  2.53k|  if(countcheck("socket", line, source))
  ------------------
  |  Branch (394:6): [True: 0, False: 2.53k]
  ------------------
  395|      0|    return CURL_SOCKET_BAD;
  ------------------
  |  |  147|      0|#define CURL_SOCKET_BAD (-1)
  ------------------
  396|       |
  397|       |  /* !checksrc! disable BANNEDFUNC 1 */
  398|  2.53k|  sockfd = socket(domain, type, protocol);
  399|       |
  400|  2.53k|  if(source && (sockfd != CURL_SOCKET_BAD))
  ------------------
  |  |  147|  2.53k|#define CURL_SOCKET_BAD (-1)
  ------------------
  |  Branch (400:6): [True: 2.53k, False: 0]
  |  Branch (400:16): [True: 2.53k, False: 0]
  ------------------
  401|  2.53k|    curl_dbg_log("FD %s:%d socket() = %" FMT_SOCKET_T "\n",
  402|  2.53k|                 source, line, sockfd);
  403|       |
  404|  2.53k|  return sockfd;
  405|  2.53k|}
curl_dbg_mark_sclose:
  461|  4.57k|{
  462|  4.57k|  if(source)
  ------------------
  |  Branch (462:6): [True: 4.57k, False: 0]
  ------------------
  463|  4.57k|    curl_dbg_log("FD %s:%d sclose(%" FMT_SOCKET_T ")\n",
  464|  4.57k|                 source, line, sockfd);
  465|  4.57k|}
curl_dbg_sclose:
  469|  4.57k|{
  470|  4.57k|  curl_dbg_mark_sclose(sockfd, line, source);
  471|  4.57k|  return CURL_SCLOSE(sockfd);
  ------------------
  |  |  989|  4.57k|#  define CURL_SCLOSE(x)  close(x)
  ------------------
  472|  4.57k|}
curl_dbg_fopen:
  477|  15.2k|{
  478|  15.2k|  FILE *res = CURLX_FOPEN_LOW(file, mode);
  ------------------
  |  |   66|  15.2k|#define CURLX_FOPEN_LOW         fopen
  ------------------
  479|  15.2k|  if(source)
  ------------------
  |  Branch (479:6): [True: 15.2k, False: 0]
  ------------------
  480|  15.2k|    curl_dbg_log("FILE %s:%d fopen(\"%s\",\"%s\") = %p\n",
  481|  15.2k|                 source, line, file, mode, (void *)res);
  482|       |
  483|  15.2k|  return res;
  484|  15.2k|}
curl_dbg_fclose:
  510|  15.2k|{
  511|  15.2k|  int res;
  512|       |
  513|  15.2k|  DEBUGASSERT(file);
  ------------------
  |  | 1075|  15.2k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (513:3): [True: 0, False: 15.2k]
  |  Branch (513:3): [True: 15.2k, False: 0]
  ------------------
  514|       |
  515|  15.2k|  if(source)
  ------------------
  |  Branch (515:6): [True: 15.2k, False: 0]
  ------------------
  516|  15.2k|    curl_dbg_log("FILE %s:%d fclose(%p)\n", source, line, (void *)file);
  517|       |
  518|       |  /* !checksrc! disable BANNEDFUNC 1 */
  519|  15.2k|  res = fclose(file);
  520|       |
  521|  15.2k|  return res;
  522|  15.2k|}
curl_dbg_log:
  565|   375k|{
  566|   375k|  bool was_locked;
  567|   375k|  va_list ap;
  568|       |
  569|   375k|  if(!curl_dbg_logfile)
  ------------------
  |  Branch (569:6): [True: 375k, False: 0]
  ------------------
  570|   375k|    return;
  571|       |
  572|      0|  was_locked = curl_dbg_lock();
  573|      0|  va_start(ap, format);
  574|      0|  curl_dbg_vlog(format, ap);
  575|       |  va_end(ap);
  576|      0|  curl_dbg_unlock(was_locked);
  577|      0|}
memdebug.c:countcheck:
  187|   209k|{
  188|       |  /* if source is NULL, then the call is made internally and this check
  189|       |     should not be made */
  190|   209k|  if(memlimit && source) {
  ------------------
  |  Branch (190:6): [True: 0, False: 209k]
  |  Branch (190:18): [True: 0, False: 0]
  ------------------
  191|      0|    if(!memsize) {
  ------------------
  |  Branch (191:8): [True: 0, False: 0]
  ------------------
  192|       |      /* log to file */
  193|      0|      curl_dbg_log("LIMIT %s:%d %s reached memlimit\n", source, line, func);
  194|       |      /* log to stderr also */
  195|      0|      curl_mfprintf(stderr, "LIMIT %s:%d %s reached memlimit\n",
  196|      0|                    source, line, func);
  197|      0|      dump_bt();
  198|      0|      fflush(curl_dbg_logfile); /* because it might crash now */
  199|       |      /* !checksrc! disable ERRNOVAR 1 */
  200|      0|      errno = ENOMEM;
  201|      0|      return TRUE; /* RETURN ERROR! */
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  202|      0|    }
  203|      0|    else
  204|      0|      memsize--; /* countdown */
  205|      0|  }
  206|       |
  207|   209k|  return FALSE; /* allow this */
  ------------------
  |  | 1048|   209k|#define FALSE false
  ------------------
  208|   209k|}
memdebug.c:curl_dbg_lock:
   74|  21.2k|{
   75|  21.2k|#ifdef USE_MUTEX
   76|  21.2k|  if(dbg_mutex_init) {
  ------------------
  |  Branch (76:6): [True: 0, False: 21.2k]
  ------------------
   77|      0|    Curl_mutex_acquire(&dbg_mutex);
  ------------------
  |  |   51|      0|#  define Curl_mutex_acquire(m)  pthread_mutex_lock(m)
  ------------------
   78|      0|    return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
   79|      0|  }
   80|  21.2k|#endif
   81|  21.2k|  return FALSE;
  ------------------
  |  | 1048|  21.2k|#define FALSE false
  ------------------
   82|  21.2k|}
memdebug.c:curl_dbg_unlock:
   85|  21.2k|{
   86|  21.2k|#ifdef USE_MUTEX
   87|  21.2k|  if(was_locked)
  ------------------
  |  Branch (87:6): [True: 0, False: 21.2k]
  ------------------
   88|      0|    Curl_mutex_release(&dbg_mutex);
  ------------------
  |  |   52|      0|#  define Curl_mutex_release(m)  pthread_mutex_unlock(m)
  ------------------
   89|       |#else
   90|       |  (void)was_locked;
   91|       |#endif
   92|  21.2k|}
memdebug.c:curl_dbg_log_locked:
  552|  21.2k|{
  553|  21.2k|  va_list ap;
  554|       |
  555|  21.2k|  if(!curl_dbg_logfile)
  ------------------
  |  Branch (555:6): [True: 21.2k, False: 0]
  ------------------
  556|  21.2k|    return;
  557|       |
  558|  21.2k|  va_start(ap, format);
  559|      0|  curl_dbg_vlog(format, ap);
  560|       |  va_end(ap);
  561|      0|}

Curl_mime_cleanpart:
 1099|  10.1k|{
 1100|  10.1k|  if(part) {
  ------------------
  |  Branch (1100:6): [True: 0, False: 10.1k]
  ------------------
 1101|      0|    cleanup_part_content(part);
 1102|      0|    curl_slist_free_all(part->curlheaders);
 1103|      0|    if(part->flags & MIME_USERHEADERS_OWNER)
  ------------------
  |  |   34|      0|#define MIME_USERHEADERS_OWNER  (1 << 0)
  ------------------
  |  Branch (1103:8): [True: 0, False: 0]
  ------------------
 1104|      0|      curl_slist_free_all(part->userheaders);
 1105|      0|    curlx_safefree(part->mimetype);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1106|      0|    curlx_safefree(part->name);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1107|       |    curlx_safefree(part->filename);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1108|      0|    Curl_mime_initpart(part);
 1109|      0|  }
 1110|  10.1k|}
curl_mime_free:
 1114|  2.53k|{
 1115|  2.53k|  curl_mimepart *part;
 1116|       |
 1117|  2.53k|  if(mime) {
  ------------------
  |  Branch (1117:6): [True: 0, False: 2.53k]
  ------------------
 1118|      0|    mime_subparts_unbind(mime);  /* Be sure it is not referenced anymore. */
 1119|      0|    while(mime->firstpart) {
  ------------------
  |  Branch (1119:11): [True: 0, False: 0]
  ------------------
 1120|      0|      part = mime->firstpart;
 1121|      0|      mime->firstpart = part->nextpart;
 1122|      0|      Curl_mime_cleanpart(part);
 1123|      0|      curlx_free(part);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1124|      0|    }
 1125|      0|    curlx_free(mime);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1126|      0|  }
 1127|  2.53k|}

curl_mvsnprintf:
 1113|   298k|{
 1114|   298k|  int retcode;
 1115|   298k|  struct nsprintf info;
 1116|       |
 1117|   298k|  info.buffer = buffer;
 1118|   298k|  info.length = 0;
 1119|   298k|  info.max = maxlength;
 1120|       |
 1121|   298k|  retcode = formatf(&info, addbyter, format, args);
 1122|   298k|  if(info.max) {
  ------------------
  |  Branch (1122:6): [True: 298k, False: 0]
  ------------------
 1123|       |    /* we terminate this with a zero byte */
 1124|   298k|    if(info.max == info.length) {
  ------------------
  |  Branch (1124:8): [True: 9, False: 298k]
  ------------------
 1125|       |      /* we are at maximum, scrap the last letter */
 1126|      9|      info.buffer[-1] = 0;
 1127|      9|      DEBUGASSERT(retcode);
  ------------------
  |  | 1075|      9|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1127:7): [True: 0, False: 9]
  |  Branch (1127:7): [True: 9, False: 0]
  ------------------
 1128|      9|      retcode--; /* do not count the nul byte */
 1129|      9|    }
 1130|   298k|    else
 1131|   298k|      info.buffer[0] = 0;
 1132|   298k|  }
 1133|   298k|  return retcode;
 1134|   298k|}
curl_msnprintf:
 1137|  11.6k|{
 1138|  11.6k|  int retcode;
 1139|  11.6k|  va_list args; /* argument pointer */
 1140|  11.6k|  va_start(args, format);
 1141|  11.6k|  retcode = curl_mvsnprintf(buffer, maxlength, format, args);
 1142|       |  va_end(args);
 1143|  11.6k|  return retcode;
 1144|  11.6k|}
curlx_dyn_vprintf:
 1160|    774|{
 1161|    774|  struct asprintf info;
 1162|    774|  info.b = dyn;
 1163|    774|  info.merr = MERR_OK;
  ------------------
  |  |   27|    774|#define MERR_OK        0
  ------------------
 1164|       |
 1165|    774|  (void)formatf(&info, alloc_addbyter, format, args);
 1166|    774|  if(info.merr) {
  ------------------
  |  Branch (1166:6): [True: 0, False: 774]
  ------------------
 1167|      0|    curlx_dyn_free(info.b);
 1168|      0|    return info.merr;
 1169|      0|  }
 1170|    774|  return 0;
 1171|    774|}
curl_mvaprintf:
 1174|  4.22k|{
 1175|  4.22k|  struct asprintf info;
 1176|  4.22k|  struct dynbuf dyn;
 1177|  4.22k|  info.b = &dyn;
 1178|  4.22k|  curlx_dyn_init(info.b, DYN_APRINTF);
  ------------------
  |  |   70|  4.22k|#define DYN_APRINTF         8000000
  ------------------
 1179|  4.22k|  info.merr = MERR_OK;
  ------------------
  |  |   27|  4.22k|#define MERR_OK        0
  ------------------
 1180|       |
 1181|  4.22k|  (void)formatf(&info, alloc_addbyter, format, args);
 1182|  4.22k|  if(info.merr) {
  ------------------
  |  Branch (1182:6): [True: 0, False: 4.22k]
  ------------------
 1183|      0|    curlx_dyn_free(info.b);
 1184|      0|    return NULL;
 1185|      0|  }
 1186|  4.22k|  if(curlx_dyn_len(info.b))
  ------------------
  |  Branch (1186:6): [True: 4.22k, False: 0]
  ------------------
 1187|  4.22k|    return curlx_dyn_ptr(info.b);
 1188|      0|  return curlx_strdup("");
  ------------------
  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
 1189|  4.22k|}
curl_maprintf:
 1192|  4.22k|{
 1193|  4.22k|  va_list args;
 1194|  4.22k|  char *s;
 1195|  4.22k|  va_start(args, format);
 1196|  4.22k|  s = curl_mvaprintf(format, args);
 1197|       |  va_end(args);
 1198|  4.22k|  return s;
 1199|  4.22k|}
mprintf.c:formatf:
  982|   303k|{
  983|   303k|  int done = 0;   /* number of characters written */
  984|   303k|  int i;
  985|   303k|  int ocount = 0; /* number of output segments */
  986|   303k|  int icount = 0; /* number of input arguments */
  987|       |
  988|   303k|  struct outsegment output[MAX_SEGMENTS];
  989|   303k|  struct va_input input[MAX_PARAMETERS];
  990|   303k|  char work[BUFFSIZE + 2];
  991|       |
  992|       |  /* Parse the format string */
  993|   303k|  if(parsefmt(format, output, input, &ocount, &icount, ap_save))
  ------------------
  |  Branch (993:6): [True: 0, False: 303k]
  ------------------
  994|      0|    return 0;
  995|       |
  996|   689k|  for(i = 0; i < ocount; i++) {
  ------------------
  |  Branch (996:14): [True: 386k, False: 303k]
  ------------------
  997|   386k|    struct outsegment *optr = &output[i];
  998|   386k|    struct va_input *iptr = &input[optr->input];
  999|   386k|    struct mproperty p;
 1000|   386k|    size_t outlen = optr->outlen;
 1001|       |
 1002|   386k|    if(outlen) {
  ------------------
  |  Branch (1002:8): [True: 129k, False: 257k]
  ------------------
 1003|   129k|      const char *str = optr->start;
 1004|   684k|      for(; outlen && *str; outlen--) {
  ------------------
  |  Branch (1004:13): [True: 555k, False: 129k]
  |  Branch (1004:23): [True: 555k, False: 0]
  ------------------
 1005|   555k|        if(stream(*str++, userp))
  ------------------
  |  Branch (1005:12): [True: 0, False: 555k]
  ------------------
 1006|      0|          return done;
 1007|   555k|        done++;
 1008|   555k|      }
 1009|   129k|      if(optr->flags & FLAGS_SUBSTR)
  ------------------
  |  Branch (1009:10): [True: 23.7k, False: 105k]
  ------------------
 1010|       |        /* this is a substring */
 1011|  23.7k|        continue;
 1012|   129k|    }
 1013|       |
 1014|   362k|    p.flags = optr->flags;
 1015|       |
 1016|       |    /* pick up the specified width */
 1017|   362k|    if(p.flags & FLAGS_WIDTHPARAM) {
  ------------------
  |  Branch (1017:8): [True: 0, False: 362k]
  ------------------
 1018|      0|      p.width = (int)input[optr->width].val.nums;
 1019|      0|      if(p.width < 0) {
  ------------------
  |  Branch (1019:10): [True: 0, False: 0]
  ------------------
 1020|       |        /* "A negative field width is taken as a '-' flag followed by a
 1021|       |           positive field width." */
 1022|      0|        if(p.width == INT_MIN)
  ------------------
  |  Branch (1022:12): [True: 0, False: 0]
  ------------------
 1023|      0|          p.width = INT_MAX;
 1024|      0|        else
 1025|      0|          p.width = -p.width;
 1026|      0|        p.flags |= FLAGS_LEFT;
 1027|      0|        p.flags &= ~(unsigned int)FLAGS_PAD_NIL;
 1028|      0|      }
 1029|      0|    }
 1030|   362k|    else
 1031|   362k|      p.width = optr->width;
 1032|       |
 1033|       |    /* pick up the specified precision */
 1034|   362k|    if(p.flags & FLAGS_PRECPARAM) {
  ------------------
  |  Branch (1034:8): [True: 1.84k, False: 360k]
  ------------------
 1035|  1.84k|      p.prec = (int)input[optr->precision].val.nums;
 1036|  1.84k|      if(p.prec < 0)
  ------------------
  |  Branch (1036:10): [True: 0, False: 1.84k]
  ------------------
 1037|       |        /* "A negative precision is taken as if the precision were
 1038|       |           omitted." */
 1039|      0|        p.prec = -1;
 1040|  1.84k|    }
 1041|   360k|    else if(p.flags & FLAGS_PREC)
  ------------------
  |  Branch (1041:13): [True: 60.6k, False: 299k]
  ------------------
 1042|  60.6k|      p.prec = optr->precision;
 1043|   299k|    else
 1044|   299k|      p.prec = -1;
 1045|       |
 1046|   362k|    switch(iptr->type) {
 1047|  74.0k|    case MTYPE_INTU:
  ------------------
  |  Branch (1047:5): [True: 74.0k, False: 288k]
  ------------------
 1048|  74.6k|    case MTYPE_LONGU:
  ------------------
  |  Branch (1048:5): [True: 584, False: 361k]
  ------------------
 1049|  74.6k|    case MTYPE_LONGLONGU:
  ------------------
  |  Branch (1049:5): [True: 0, False: 362k]
  ------------------
 1050|  74.6k|      p.flags |= FLAGS_UNSIGNED;
 1051|  74.6k|      if(out_number(userp, stream, &p, iptr->val.numu, 0, work, &done))
  ------------------
  |  Branch (1051:10): [True: 0, False: 74.6k]
  ------------------
 1052|      0|        return done;
 1053|  74.6k|      break;
 1054|       |
 1055|   219k|    case MTYPE_INT:
  ------------------
  |  Branch (1055:5): [True: 219k, False: 143k]
  ------------------
 1056|   221k|    case MTYPE_LONG:
  ------------------
  |  Branch (1056:5): [True: 2.08k, False: 360k]
  ------------------
 1057|   221k|    case MTYPE_LONGLONG:
  ------------------
  |  Branch (1057:5): [True: 0, False: 362k]
  ------------------
 1058|   221k|      if(out_number(userp, stream, &p, iptr->val.numu,
  ------------------
  |  Branch (1058:10): [True: 0, False: 221k]
  ------------------
 1059|   221k|                    iptr->val.nums, work, &done))
 1060|      0|        return done;
 1061|   221k|      break;
 1062|       |
 1063|   221k|    case MTYPE_STRING:
  ------------------
  |  Branch (1063:5): [True: 66.5k, False: 295k]
  ------------------
 1064|  66.5k|      if(out_string(userp, stream, &p, iptr->val.str, &done))
  ------------------
  |  Branch (1064:10): [True: 9, False: 66.5k]
  ------------------
 1065|      9|        return done;
 1066|  66.5k|      break;
 1067|       |
 1068|  66.5k|    case MTYPE_PTR:
  ------------------
  |  Branch (1068:5): [True: 0, False: 362k]
  ------------------
 1069|      0|      if(out_pointer(userp, stream, &p, iptr->val.ptr, work, &done))
  ------------------
  |  Branch (1069:10): [True: 0, False: 0]
  ------------------
 1070|      0|        return done;
 1071|      0|      break;
 1072|       |
 1073|      0|    case MTYPE_DOUBLE:
  ------------------
  |  Branch (1073:5): [True: 0, False: 362k]
  ------------------
 1074|      0|    case MTYPE_LONGDOUBLE:
  ------------------
  |  Branch (1074:5): [True: 0, False: 362k]
  ------------------
 1075|      0|      if(out_double(userp, stream, &p, iptr->val.dnum, work, &done))
  ------------------
  |  Branch (1075:10): [True: 0, False: 0]
  ------------------
 1076|      0|        return done;
 1077|      0|      break;
 1078|       |
 1079|      0|    case MTYPE_INTPTR:
  ------------------
  |  Branch (1079:5): [True: 0, False: 362k]
  ------------------
 1080|       |      /* Answer the count of characters written. */
 1081|      0|      if(p.flags & FLAGS_LONGLONG)
  ------------------
  |  Branch (1081:10): [True: 0, False: 0]
  ------------------
 1082|      0|        *(int64_t *)iptr->val.ptr = (int64_t)done;
 1083|      0|      else if(p.flags & FLAGS_LONG)
  ------------------
  |  Branch (1083:15): [True: 0, False: 0]
  ------------------
 1084|      0|        *(long *)iptr->val.ptr = (long)done;
 1085|      0|      else if(!(p.flags & FLAGS_SHORT))
  ------------------
  |  Branch (1085:15): [True: 0, False: 0]
  ------------------
 1086|      0|        *(int *)iptr->val.ptr = done;
 1087|      0|      else
 1088|      0|        *(short *)iptr->val.ptr = (short)done;
 1089|      0|      break;
 1090|       |
 1091|      0|    default:
  ------------------
  |  Branch (1091:5): [True: 0, False: 362k]
  ------------------
 1092|      0|      break;
 1093|   362k|    }
 1094|   362k|  }
 1095|   303k|  return done;
 1096|   303k|}
mprintf.c:parsefmt:
  435|   303k|{
  436|   303k|  const char *fmt = format;
  437|   303k|  int param_num = 0;
  438|   303k|  int max_param = -1;
  439|   303k|  int i;
  440|   303k|  int ocount = 0;
  441|   303k|  unsigned char usedinput[MAX_PARAMETERS / 8];
  442|   303k|  size_t outlen = 0;
  443|   303k|  struct outsegment *optr;
  444|   303k|  int use_dollar = DOLLAR_UNKNOWN;
  445|   303k|  const char *start = fmt;
  446|       |
  447|       |  /* clear, set a bit for each used input */
  448|   303k|  memset(usedinput, 0, sizeof(usedinput));
  449|       |
  450|  1.22M|  while(*fmt) {
  ------------------
  |  Branch (450:9): [True: 917k, False: 303k]
  ------------------
  451|   917k|    if(*fmt == '%') {
  ------------------
  |  Branch (451:8): [True: 362k, False: 555k]
  ------------------
  452|   362k|      struct va_input *iptr;
  453|   362k|      FormatType type;
  454|   362k|      unsigned int flags = 0;
  455|   362k|      int width = 0;
  456|   362k|      int precision = 0;
  457|   362k|      int param = -1;
  458|   362k|      int rc;
  459|   362k|      fmt++;
  460|   362k|      outlen = (size_t)(fmt - start - 1);
  461|   362k|      if(*fmt == '%') {
  ------------------
  |  Branch (461:10): [True: 5, False: 362k]
  ------------------
  462|       |        /* this means a %% that should be output only as %. Create an output
  463|       |           segment. */
  464|      5|        if(outlen) {
  ------------------
  |  Branch (464:12): [True: 0, False: 5]
  ------------------
  465|      0|          optr = &out[ocount++];
  466|      0|          if(ocount > MAX_SEGMENTS)
  ------------------
  |  |   34|      0|#define MAX_SEGMENTS   128 /* number of output segments */
  ------------------
  |  Branch (466:14): [True: 0, False: 0]
  ------------------
  467|      0|            return PFMT_MANYSEGS;
  ------------------
  |  |  170|      0|#define PFMT_MANYSEGS   11 /* maxed out output segments */
  ------------------
  468|      0|          optr->input = 0;
  469|      0|          optr->flags = FLAGS_SUBSTR;
  470|      0|          optr->start = start;
  471|      0|          optr->outlen = outlen;
  472|      0|        }
  473|      5|        start = fmt;
  474|      5|        fmt++;
  475|      5|        continue; /* while */
  476|      5|      }
  477|       |
  478|   362k|      if(use_dollar != DOLLAR_NOPE) {
  ------------------
  |  Branch (478:10): [True: 291k, False: 71.1k]
  ------------------
  479|   291k|        param = dollarstring(fmt, &fmt);
  480|   291k|        if(param < 0) {
  ------------------
  |  Branch (480:12): [True: 291k, False: 0]
  ------------------
  481|   291k|          if(use_dollar == DOLLAR_USE)
  ------------------
  |  Branch (481:14): [True: 0, False: 291k]
  ------------------
  482|       |            /* illegal combo */
  483|      0|            return PFMT_DOLLAR;
  ------------------
  |  |  160|      0|#define PFMT_DOLLAR      1 /* bad dollar for main param */
  ------------------
  484|       |
  485|       |          /* we got no positional, get the next arg */
  486|   291k|          param = -1;
  487|   291k|          use_dollar = DOLLAR_NOPE;
  488|   291k|        }
  489|      0|        else
  490|      0|          use_dollar = DOLLAR_USE;
  491|   291k|      }
  492|       |
  493|   362k|      rc = parse_flags(&fmt, &flags, use_dollar, &precision, &width);
  494|   362k|      if(rc)
  ------------------
  |  Branch (494:10): [True: 0, False: 362k]
  ------------------
  495|      0|        return rc;
  496|       |
  497|   362k|      if(parse_conversion(*fmt, &flags, &type))
  ------------------
  |  Branch (497:10): [True: 0, False: 362k]
  ------------------
  498|      0|        continue;
  499|       |
  500|   362k|      if(flags & FLAGS_WIDTHPARAM) {
  ------------------
  |  Branch (500:10): [True: 0, False: 362k]
  ------------------
  501|      0|        if(width < 0)
  ------------------
  |  Branch (501:12): [True: 0, False: 0]
  ------------------
  502|      0|          width = param_num++;
  503|      0|        else {
  504|       |          /* if this identifies a parameter already used, this is illegal */
  505|      0|          if(is_arg_used(usedinput, width))
  ------------------
  |  |  148|      0|#define is_arg_used(x, y)   ((x)[(y) / 8] & (1 << ((y) & 7)))
  |  |  ------------------
  |  |  |  Branch (148:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  506|      0|            return PFMT_WIDTHARG;
  ------------------
  |  |  168|      0|#define PFMT_WIDTHARG    9 /* attempted to use same arg twice, for width */
  ------------------
  507|      0|        }
  508|      0|        if(width >= MAX_PARAMETERS)
  ------------------
  |  |   33|      0|#define MAX_PARAMETERS 128 /* number of input arguments */
  ------------------
  |  Branch (508:12): [True: 0, False: 0]
  ------------------
  509|      0|          return PFMT_MANYARGS;
  ------------------
  |  |  163|      0|#define PFMT_MANYARGS    4 /* too many input arguments used */
  ------------------
  510|      0|        if(width >= max_param)
  ------------------
  |  Branch (510:12): [True: 0, False: 0]
  ------------------
  511|      0|          max_param = width;
  512|       |
  513|      0|        in[width].type = MTYPE_WIDTH;
  514|       |        /* mark as used */
  515|      0|        mark_arg_used(usedinput, width);
  ------------------
  |  |  149|      0|#define mark_arg_used(x, y) ((x)[(y) / 8] |= (unsigned char)(1 << ((y) & 7)))
  ------------------
  516|      0|      }
  517|       |
  518|   362k|      if(flags & FLAGS_PRECPARAM) {
  ------------------
  |  Branch (518:10): [True: 1.84k, False: 360k]
  ------------------
  519|  1.84k|        if(precision < 0)
  ------------------
  |  Branch (519:12): [True: 1.84k, False: 0]
  ------------------
  520|  1.84k|          precision = param_num++;
  521|      0|        else {
  522|       |          /* if this identifies a parameter already used, this is illegal */
  523|      0|          if(is_arg_used(usedinput, precision))
  ------------------
  |  |  148|      0|#define is_arg_used(x, y)   ((x)[(y) / 8] & (1 << ((y) & 7)))
  |  |  ------------------
  |  |  |  Branch (148:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  524|      0|            return PFMT_PRECARG;
  ------------------
  |  |  169|      0|#define PFMT_PRECARG    10 /* attempted to use same arg twice, for prec */
  ------------------
  525|      0|        }
  526|  1.84k|        if(precision >= MAX_PARAMETERS)
  ------------------
  |  |   33|  1.84k|#define MAX_PARAMETERS 128 /* number of input arguments */
  ------------------
  |  Branch (526:12): [True: 0, False: 1.84k]
  ------------------
  527|      0|          return PFMT_MANYARGS;
  ------------------
  |  |  163|      0|#define PFMT_MANYARGS    4 /* too many input arguments used */
  ------------------
  528|  1.84k|        if(precision >= max_param)
  ------------------
  |  Branch (528:12): [True: 1.84k, False: 0]
  ------------------
  529|  1.84k|          max_param = precision;
  530|       |
  531|  1.84k|        in[precision].type = MTYPE_PRECISION;
  532|  1.84k|        mark_arg_used(usedinput, precision);
  ------------------
  |  |  149|  1.84k|#define mark_arg_used(x, y) ((x)[(y) / 8] |= (unsigned char)(1 << ((y) & 7)))
  ------------------
  533|  1.84k|      }
  534|       |
  535|       |      /* Handle the specifier */
  536|   362k|      if(param < 0)
  ------------------
  |  Branch (536:10): [True: 362k, False: 0]
  ------------------
  537|   362k|        param = param_num++;
  538|   362k|      if(param >= MAX_PARAMETERS)
  ------------------
  |  |   33|   362k|#define MAX_PARAMETERS 128 /* number of input arguments */
  ------------------
  |  Branch (538:10): [True: 0, False: 362k]
  ------------------
  539|      0|        return PFMT_MANYARGS;
  ------------------
  |  |  163|      0|#define PFMT_MANYARGS    4 /* too many input arguments used */
  ------------------
  540|   362k|      if(param >= max_param)
  ------------------
  |  Branch (540:10): [True: 362k, False: 0]
  ------------------
  541|   362k|        max_param = param;
  542|       |
  543|   362k|      iptr = &in[param];
  544|   362k|      iptr->type = type;
  545|       |
  546|       |      /* mark this input as used */
  547|   362k|      mark_arg_used(usedinput, param);
  ------------------
  |  |  149|   362k|#define mark_arg_used(x, y) ((x)[(y) / 8] |= (unsigned char)(1 << ((y) & 7)))
  ------------------
  548|       |
  549|   362k|      fmt++;
  550|   362k|      optr = &out[ocount++];
  551|   362k|      if(ocount > MAX_SEGMENTS)
  ------------------
  |  |   34|   362k|#define MAX_SEGMENTS   128 /* number of output segments */
  ------------------
  |  Branch (551:10): [True: 0, False: 362k]
  ------------------
  552|      0|        return PFMT_MANYSEGS;
  ------------------
  |  |  170|      0|#define PFMT_MANYSEGS   11 /* maxed out output segments */
  ------------------
  553|   362k|      optr->input = (unsigned int)param;
  554|   362k|      optr->flags = flags;
  555|   362k|      optr->width = width;
  556|   362k|      optr->precision = precision;
  557|   362k|      optr->start = start;
  558|   362k|      optr->outlen = outlen;
  559|   362k|      start = fmt;
  560|   362k|    }
  561|   555k|    else
  562|   555k|      fmt++;
  563|   917k|  }
  564|       |
  565|       |  /* is there a trailing piece */
  566|   303k|  outlen = (size_t)(fmt - start);
  567|   303k|  if(outlen) {
  ------------------
  |  Branch (567:6): [True: 23.7k, False: 279k]
  ------------------
  568|  23.7k|    optr = &out[ocount++];
  569|  23.7k|    if(ocount > MAX_SEGMENTS)
  ------------------
  |  |   34|  23.7k|#define MAX_SEGMENTS   128 /* number of output segments */
  ------------------
  |  Branch (569:8): [True: 0, False: 23.7k]
  ------------------
  570|      0|      return PFMT_MANYSEGS;
  ------------------
  |  |  170|      0|#define PFMT_MANYSEGS   11 /* maxed out output segments */
  ------------------
  571|  23.7k|    optr->input = 0;
  572|  23.7k|    optr->flags = FLAGS_SUBSTR;
  573|  23.7k|    optr->start = start;
  574|  23.7k|    optr->outlen = outlen;
  575|  23.7k|  }
  576|       |
  577|       |  /* Read the arg list parameters into our data list */
  578|   667k|  for(i = 0; i < max_param + 1; i++) {
  ------------------
  |  Branch (578:14): [True: 364k, False: 303k]
  ------------------
  579|   364k|    struct va_input *iptr = &in[i];
  580|   364k|    if(!is_arg_used(usedinput, i))
  ------------------
  |  |  148|   364k|#define is_arg_used(x, y)   ((x)[(y) / 8] & (1 << ((y) & 7)))
  ------------------
  |  Branch (580:8): [True: 0, False: 364k]
  ------------------
  581|       |      /* bad input */
  582|      0|      return PFMT_INPUTGAP;
  ------------------
  |  |  167|      0|#define PFMT_INPUTGAP    8 /* gap in arguments */
  ------------------
  583|       |
  584|       |    /* based on the type, read the correct argument */
  585|   364k|    switch(iptr->type) {
  586|  66.5k|    case MTYPE_STRING:
  ------------------
  |  Branch (586:5): [True: 66.5k, False: 297k]
  ------------------
  587|  66.5k|      iptr->val.str = va_arg(arglist, const char *);
  588|  66.5k|      break;
  589|       |
  590|      0|    case MTYPE_INTPTR:
  ------------------
  |  Branch (590:5): [True: 0, False: 364k]
  ------------------
  591|      0|    case MTYPE_PTR:
  ------------------
  |  Branch (591:5): [True: 0, False: 364k]
  ------------------
  592|      0|      iptr->val.ptr = va_arg(arglist, void *);
  593|      0|      break;
  594|       |
  595|      0|    case MTYPE_LONGLONGU:
  ------------------
  |  Branch (595:5): [True: 0, False: 364k]
  ------------------
  596|      0|      iptr->val.numu = va_arg(arglist, uint64_t);
  597|      0|      break;
  598|       |
  599|      0|    case MTYPE_LONGLONG:
  ------------------
  |  Branch (599:5): [True: 0, False: 364k]
  ------------------
  600|      0|      iptr->val.nums = va_arg(arglist, int64_t);
  601|      0|      break;
  602|       |
  603|    584|    case MTYPE_LONGU:
  ------------------
  |  Branch (603:5): [True: 584, False: 363k]
  ------------------
  604|    584|      iptr->val.numu = va_arg(arglist, unsigned long);
  605|    584|      break;
  606|       |
  607|  2.08k|    case MTYPE_LONG:
  ------------------
  |  Branch (607:5): [True: 2.08k, False: 362k]
  ------------------
  608|  2.08k|      iptr->val.nums = va_arg(arglist, long);
  609|  2.08k|      break;
  610|       |
  611|  74.0k|    case MTYPE_INTU:
  ------------------
  |  Branch (611:5): [True: 74.0k, False: 290k]
  ------------------
  612|  74.0k|      iptr->val.numu = va_arg(arglist, unsigned int);
  613|  74.0k|      break;
  614|       |
  615|   219k|    case MTYPE_INT:
  ------------------
  |  Branch (615:5): [True: 219k, False: 145k]
  ------------------
  616|   219k|    case MTYPE_WIDTH:
  ------------------
  |  Branch (616:5): [True: 0, False: 364k]
  ------------------
  617|   220k|    case MTYPE_PRECISION:
  ------------------
  |  Branch (617:5): [True: 1.84k, False: 362k]
  ------------------
  618|   220k|      iptr->val.nums = va_arg(arglist, int);
  619|   220k|      break;
  620|       |
  621|      0|    case MTYPE_DOUBLE:
  ------------------
  |  Branch (621:5): [True: 0, False: 364k]
  ------------------
  622|      0|      iptr->val.dnum = va_arg(arglist, double);
  623|      0|      break;
  624|       |
  625|      0|    case MTYPE_LONGDOUBLE:
  ------------------
  |  Branch (625:5): [True: 0, False: 364k]
  ------------------
  626|      0|      iptr->val.dnum = (double)va_arg(arglist, long double);
  627|      0|      break;
  628|       |
  629|      0|    default:
  ------------------
  |  Branch (629:5): [True: 0, False: 364k]
  ------------------
  630|      0|      DEBUGASSERT(NULL); /* unexpected */
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (630:7): [True: 0, False: 0]
  |  Branch (630:7): [True: 0, False: 0]
  ------------------
  631|      0|      break;
  632|   364k|    }
  633|   364k|  }
  634|   303k|  *ipieces = max_param + 1;
  635|   303k|  *opieces = ocount;
  636|       |
  637|   303k|  return PFMT_OK;
  ------------------
  |  |  159|   303k|#define PFMT_OK          0
  ------------------
  638|   303k|}
mprintf.c:dollarstring:
  139|   291k|{
  140|   291k|  curl_off_t num;
  141|   291k|  if(curlx_str_number(&p, &num, MAX_PARAMETERS) ||
  ------------------
  |  |   33|   291k|#define MAX_PARAMETERS 128 /* number of input arguments */
  ------------------
  |  Branch (141:6): [True: 291k, False: 0]
  ------------------
  142|      0|     curlx_str_single(&p, '$') || !num)
  ------------------
  |  Branch (142:6): [True: 0, False: 0]
  |  Branch (142:35): [True: 0, False: 0]
  ------------------
  143|   291k|    return -1;
  144|      0|  *end = p;
  145|      0|  return (int)num - 1;
  146|   291k|}
mprintf.c:parse_flags:
  174|   362k|{
  175|   362k|  const char *fmt = *fmtp;
  176|   362k|  bool loopit = TRUE;
  ------------------
  |  | 1045|   362k|#define TRUE true
  ------------------
  177|   362k|  unsigned int flags = 0;
  178|   362k|  int width = 0;
  179|   362k|  int precision = 0;
  180|       |
  181|       |  /* Handle the flags */
  182|   427k|  do {
  183|   427k|    switch(*fmt++) {
  184|      0|    case ' ':
  ------------------
  |  Branch (184:5): [True: 0, False: 427k]
  ------------------
  185|      0|      flags |= FLAGS_SPACE;
  186|      0|      break;
  187|      0|    case '+':
  ------------------
  |  Branch (187:5): [True: 0, False: 427k]
  ------------------
  188|      0|      flags |= FLAGS_SHOWSIGN;
  189|      0|      break;
  190|      0|    case '-':
  ------------------
  |  Branch (190:5): [True: 0, False: 427k]
  ------------------
  191|      0|      flags |= FLAGS_LEFT;
  192|      0|      flags &= ~(unsigned int)FLAGS_PAD_NIL;
  193|      0|      break;
  194|      0|    case '#':
  ------------------
  |  Branch (194:5): [True: 0, False: 427k]
  ------------------
  195|      0|      flags |= FLAGS_ALT;
  196|      0|      break;
  197|  62.5k|    case '.':
  ------------------
  |  Branch (197:5): [True: 62.5k, False: 365k]
  ------------------
  198|  62.5k|      if('*' == *fmt) {
  ------------------
  |  Branch (198:10): [True: 1.84k, False: 60.6k]
  ------------------
  199|       |        /* The precision is picked from a specified parameter */
  200|  1.84k|        flags |= FLAGS_PRECPARAM;
  201|  1.84k|        fmt++;
  202|       |
  203|  1.84k|        if(use_dollar == DOLLAR_USE) {
  ------------------
  |  Branch (203:12): [True: 0, False: 1.84k]
  ------------------
  204|      0|          precision = dollarstring(fmt, &fmt);
  205|      0|          if(precision < 0)
  ------------------
  |  Branch (205:14): [True: 0, False: 0]
  ------------------
  206|       |            /* illegal combo */
  207|      0|            return PFMT_DOLLARPREC;
  ------------------
  |  |  162|      0|#define PFMT_DOLLARPREC  3 /* bad dollar use for precision */
  ------------------
  208|      0|        }
  209|  1.84k|        else
  210|       |          /* get it from the next argument */
  211|  1.84k|          precision = -1;
  212|  1.84k|      }
  213|  60.6k|      else {
  214|  60.6k|        bool is_neg;
  215|  60.6k|        curl_off_t num;
  216|  60.6k|        flags |= FLAGS_PREC;
  217|  60.6k|        is_neg = ('-' == *fmt);
  218|  60.6k|        if(is_neg)
  ------------------
  |  Branch (218:12): [True: 0, False: 60.6k]
  ------------------
  219|      0|          fmt++;
  220|  60.6k|        if(curlx_str_number(&fmt, &num, INT_MAX))
  ------------------
  |  Branch (220:12): [True: 0, False: 60.6k]
  ------------------
  221|      0|          return PFMT_PREC;
  ------------------
  |  |  164|      0|#define PFMT_PREC        5 /* precision overflow */
  ------------------
  222|  60.6k|        precision = (int)num;
  223|  60.6k|        if(is_neg)
  ------------------
  |  Branch (223:12): [True: 0, False: 60.6k]
  ------------------
  224|      0|          precision = -precision;
  225|  60.6k|      }
  226|  62.5k|      if((flags & (FLAGS_PREC | FLAGS_PRECPARAM)) ==
  ------------------
  |  Branch (226:10): [True: 0, False: 62.5k]
  ------------------
  227|  62.5k|         (FLAGS_PREC | FLAGS_PRECPARAM))
  228|       |        /* it is not permitted to use both kinds of precision for the same
  229|       |           argument */
  230|      0|        return PFMT_PRECMIX;
  ------------------
  |  |  165|      0|#define PFMT_PRECMIX     6 /* bad mix of precision specifiers */
  ------------------
  231|  62.5k|      break;
  232|  62.5k|    case 'h':
  ------------------
  |  Branch (232:5): [True: 0, False: 427k]
  ------------------
  233|      0|      flags |= FLAGS_SHORT;
  234|      0|      break;
  235|       |#ifdef _WIN32
  236|       |    case 'I':
  237|       |      /* Non-ANSI integer extensions I32 I64 */
  238|       |      if((fmt[0] == '3') && (fmt[1] == '2')) {
  239|       |        flags |= FLAGS_LONG;
  240|       |        fmt += 2;
  241|       |      }
  242|       |      else if((fmt[0] == '6') && (fmt[1] == '4')) {
  243|       |        flags |= FLAGS_LONGLONG;
  244|       |        fmt += 2;
  245|       |      }
  246|       |      else {
  247|       |#if SIZEOF_CURL_OFF_T > SIZEOF_LONG
  248|       |        flags |= FLAGS_LONGLONG;
  249|       |#else
  250|       |        flags |= FLAGS_LONG;
  251|       |#endif
  252|       |      }
  253|       |      break;
  254|       |#endif /* _WIN32 */
  255|  2.08k|    case 'l':
  ------------------
  |  Branch (255:5): [True: 2.08k, False: 425k]
  ------------------
  256|  2.08k|      if(flags & FLAGS_LONG)
  ------------------
  |  Branch (256:10): [True: 0, False: 2.08k]
  ------------------
  257|      0|        flags |= FLAGS_LONGLONG;
  258|  2.08k|      else
  259|  2.08k|        flags |= FLAGS_LONG;
  260|  2.08k|      break;
  261|      0|    case 'L':
  ------------------
  |  Branch (261:5): [True: 0, False: 427k]
  ------------------
  262|      0|      flags |= FLAGS_LONGDOUBLE;
  263|      0|      break;
  264|      0|    case 'q':
  ------------------
  |  Branch (264:5): [True: 0, False: 427k]
  ------------------
  265|      0|      flags |= FLAGS_LONGLONG;
  266|      0|      break;
  267|    584|    case 'z':
  ------------------
  |  Branch (267:5): [True: 584, False: 426k]
  ------------------
  268|       |      /* the code below generates a warning if -Wunreachable-code is
  269|       |         used */
  270|       |#if SIZEOF_SIZE_T > SIZEOF_LONG
  271|       |      flags |= FLAGS_LONGLONG;
  272|       |#else
  273|    584|      flags |= FLAGS_LONG;
  274|    584|#endif
  275|    584|      break;
  276|      0|    case 'O':
  ------------------
  |  Branch (276:5): [True: 0, False: 427k]
  ------------------
  277|       |#if SIZEOF_CURL_OFF_T > SIZEOF_LONG
  278|       |      flags |= FLAGS_LONGLONG;
  279|       |#else
  280|      0|      flags |= FLAGS_LONG;
  281|      0|#endif
  282|      0|      break;
  283|      0|    case '0':
  ------------------
  |  Branch (283:5): [True: 0, False: 427k]
  ------------------
  284|      0|      if(!(flags & FLAGS_LEFT))
  ------------------
  |  Branch (284:10): [True: 0, False: 0]
  ------------------
  285|      0|        flags |= FLAGS_PAD_NIL;
  286|      0|      FALLTHROUGH();
  ------------------
  |  |  815|      0|#  define FALLTHROUGH()  __attribute__((fallthrough))
  ------------------
  287|      0|    case '1':
  ------------------
  |  Branch (287:5): [True: 0, False: 427k]
  ------------------
  288|      0|    case '2':
  ------------------
  |  Branch (288:5): [True: 0, False: 427k]
  ------------------
  289|      0|    case '3':
  ------------------
  |  Branch (289:5): [True: 0, False: 427k]
  ------------------
  290|      0|    case '4':
  ------------------
  |  Branch (290:5): [True: 0, False: 427k]
  ------------------
  291|      0|    case '5':
  ------------------
  |  Branch (291:5): [True: 0, False: 427k]
  ------------------
  292|      0|    case '6':
  ------------------
  |  Branch (292:5): [True: 0, False: 427k]
  ------------------
  293|      0|    case '7':
  ------------------
  |  Branch (293:5): [True: 0, False: 427k]
  ------------------
  294|      0|    case '8':
  ------------------
  |  Branch (294:5): [True: 0, False: 427k]
  ------------------
  295|      0|    case '9': {
  ------------------
  |  Branch (295:5): [True: 0, False: 427k]
  ------------------
  296|      0|      curl_off_t num;
  297|      0|      flags |= FLAGS_WIDTH;
  298|      0|      fmt--;
  299|      0|      if(curlx_str_number(&fmt, &num, INT_MAX))
  ------------------
  |  Branch (299:10): [True: 0, False: 0]
  ------------------
  300|      0|        return PFMT_WIDTH;
  ------------------
  |  |  166|      0|#define PFMT_WIDTH       7 /* width overflow */
  ------------------
  301|      0|      width = (int)num;
  302|      0|      break;
  303|      0|    }
  304|      0|    case '*':  /* read width from argument list */
  ------------------
  |  Branch (304:5): [True: 0, False: 427k]
  ------------------
  305|      0|      flags |= FLAGS_WIDTHPARAM;
  306|      0|      if(use_dollar == DOLLAR_USE) {
  ------------------
  |  Branch (306:10): [True: 0, False: 0]
  ------------------
  307|      0|        width = dollarstring(fmt, &fmt);
  308|      0|        if(width < 0)
  ------------------
  |  Branch (308:12): [True: 0, False: 0]
  ------------------
  309|       |          /* illegal combo */
  310|      0|          return PFMT_DOLLARWIDTH;
  ------------------
  |  |  161|      0|#define PFMT_DOLLARWIDTH 2 /* bad dollar use for width */
  ------------------
  311|      0|      }
  312|      0|      else
  313|       |        /* pick from the next argument */
  314|      0|        width = -1;
  315|      0|      break;
  316|   362k|    default:
  ------------------
  |  Branch (316:5): [True: 362k, False: 65.1k]
  ------------------
  317|   362k|      loopit = FALSE;
  ------------------
  |  | 1048|   362k|#define FALSE false
  ------------------
  318|   362k|      fmt--;
  319|   362k|      break;
  320|   427k|    } /* switch */
  321|   427k|  } while(loopit); /* do */
  ------------------
  |  Branch (321:11): [True: 65.1k, False: 362k]
  ------------------
  322|   362k|  *flagsp = flags;
  323|   362k|  *precp = precision;
  324|   362k|  *widthp = width;
  325|   362k|  *fmtp = fmt;
  326|   362k|  return PFMT_OK;
  ------------------
  |  |  159|   362k|#define PFMT_OK          0
  ------------------
  327|   362k|}
mprintf.c:parse_conversion:
  331|   362k|{
  332|   362k|  unsigned int flags = *flagp;
  333|   362k|  FormatType type;
  334|   362k|  switch(f) {
  335|      0|  case 'S':
  ------------------
  |  Branch (335:3): [True: 0, False: 362k]
  ------------------
  336|      0|    flags |= FLAGS_ALT;
  337|      0|    type = MTYPE_STRING;
  338|      0|    break;
  339|  66.5k|  case 's':
  ------------------
  |  Branch (339:3): [True: 66.5k, False: 295k]
  ------------------
  340|  66.5k|    type = MTYPE_STRING;
  341|  66.5k|    break;
  342|      0|  case 'n':
  ------------------
  |  Branch (342:3): [True: 0, False: 362k]
  ------------------
  343|      0|    type = MTYPE_INTPTR;
  344|      0|    break;
  345|      0|  case 'p':
  ------------------
  |  Branch (345:3): [True: 0, False: 362k]
  ------------------
  346|      0|    type = MTYPE_PTR;
  347|      0|    break;
  348|  16.9k|  case 'd':
  ------------------
  |  Branch (348:3): [True: 16.9k, False: 345k]
  ------------------
  349|  16.9k|  case 'i':
  ------------------
  |  Branch (349:3): [True: 0, False: 362k]
  ------------------
  350|  16.9k|    if(flags & FLAGS_LONGLONG)
  ------------------
  |  Branch (350:8): [True: 0, False: 16.9k]
  ------------------
  351|      0|      type = MTYPE_LONGLONG;
  352|  16.9k|    else if(flags & FLAGS_LONG)
  ------------------
  |  Branch (352:13): [True: 2.08k, False: 14.8k]
  ------------------
  353|  2.08k|      type = MTYPE_LONG;
  354|  14.8k|    else
  355|  14.8k|      type = MTYPE_INT;
  356|  16.9k|    break;
  357|  13.9k|  case 'u':
  ------------------
  |  Branch (357:3): [True: 13.9k, False: 348k]
  ------------------
  358|  13.9k|    if(flags & FLAGS_LONGLONG)
  ------------------
  |  Branch (358:8): [True: 0, False: 13.9k]
  ------------------
  359|      0|      type = MTYPE_LONGLONGU;
  360|  13.9k|    else if(flags & FLAGS_LONG)
  ------------------
  |  Branch (360:13): [True: 584, False: 13.3k]
  ------------------
  361|    584|      type = MTYPE_LONGU;
  362|  13.3k|    else
  363|  13.3k|      type = MTYPE_INTU;
  364|  13.9k|    flags |= FLAGS_UNSIGNED;
  365|  13.9k|    break;
  366|      0|  case 'o':
  ------------------
  |  Branch (366:3): [True: 0, False: 362k]
  ------------------
  367|      0|    if(flags & FLAGS_LONGLONG)
  ------------------
  |  Branch (367:8): [True: 0, False: 0]
  ------------------
  368|      0|      type = MTYPE_LONGLONGU;
  369|      0|    else if(flags & FLAGS_LONG)
  ------------------
  |  Branch (369:13): [True: 0, False: 0]
  ------------------
  370|      0|      type = MTYPE_LONGU;
  371|      0|    else
  372|      0|      type = MTYPE_INTU;
  373|      0|    flags |= FLAGS_OCTAL | FLAGS_UNSIGNED;
  374|      0|    break;
  375|  60.7k|  case 'x':
  ------------------
  |  Branch (375:3): [True: 60.7k, False: 301k]
  ------------------
  376|  60.7k|    if(flags & FLAGS_LONGLONG)
  ------------------
  |  Branch (376:8): [True: 0, False: 60.7k]
  ------------------
  377|      0|      type = MTYPE_LONGLONGU;
  378|  60.7k|    else if(flags & FLAGS_LONG)
  ------------------
  |  Branch (378:13): [True: 0, False: 60.7k]
  ------------------
  379|      0|      type = MTYPE_LONGU;
  380|  60.7k|    else
  381|  60.7k|      type = MTYPE_INTU;
  382|  60.7k|    flags |= FLAGS_HEX | FLAGS_UNSIGNED;
  383|  60.7k|    break;
  384|      0|  case 'X':
  ------------------
  |  Branch (384:3): [True: 0, False: 362k]
  ------------------
  385|      0|    if(flags & FLAGS_LONGLONG)
  ------------------
  |  Branch (385:8): [True: 0, False: 0]
  ------------------
  386|      0|      type = MTYPE_LONGLONGU;
  387|      0|    else if(flags & FLAGS_LONG)
  ------------------
  |  Branch (387:13): [True: 0, False: 0]
  ------------------
  388|      0|      type = MTYPE_LONGU;
  389|      0|    else
  390|      0|      type = MTYPE_INTU;
  391|      0|    flags |= FLAGS_HEX | FLAGS_UPPER | FLAGS_UNSIGNED;
  392|      0|    break;
  393|   204k|  case 'c':
  ------------------
  |  Branch (393:3): [True: 204k, False: 158k]
  ------------------
  394|   204k|    type = MTYPE_INT;
  395|   204k|    flags |= FLAGS_CHAR;
  396|   204k|    break;
  397|      0|  case 'f':
  ------------------
  |  Branch (397:3): [True: 0, False: 362k]
  ------------------
  398|      0|    type = flags & FLAGS_LONGDOUBLE ? MTYPE_LONGDOUBLE : MTYPE_DOUBLE;
  ------------------
  |  Branch (398:12): [True: 0, False: 0]
  ------------------
  399|      0|    break;
  400|      0|  case 'F':
  ------------------
  |  Branch (400:3): [True: 0, False: 362k]
  ------------------
  401|      0|    type = flags & FLAGS_LONGDOUBLE ? MTYPE_LONGDOUBLE : MTYPE_DOUBLE;
  ------------------
  |  Branch (401:12): [True: 0, False: 0]
  ------------------
  402|      0|    flags |= FLAGS_UPPER;
  403|      0|    break;
  404|      0|  case 'e':
  ------------------
  |  Branch (404:3): [True: 0, False: 362k]
  ------------------
  405|      0|    type = flags & FLAGS_LONGDOUBLE ? MTYPE_LONGDOUBLE : MTYPE_DOUBLE;
  ------------------
  |  Branch (405:12): [True: 0, False: 0]
  ------------------
  406|      0|    flags |= FLAGS_FLOATE;
  407|      0|    break;
  408|      0|  case 'E':
  ------------------
  |  Branch (408:3): [True: 0, False: 362k]
  ------------------
  409|      0|    type = flags & FLAGS_LONGDOUBLE ? MTYPE_LONGDOUBLE : MTYPE_DOUBLE;
  ------------------
  |  Branch (409:12): [True: 0, False: 0]
  ------------------
  410|      0|    flags |= FLAGS_FLOATE | FLAGS_UPPER;
  411|      0|    break;
  412|      0|  case 'g':
  ------------------
  |  Branch (412:3): [True: 0, False: 362k]
  ------------------
  413|      0|    type = flags & FLAGS_LONGDOUBLE ? MTYPE_LONGDOUBLE : MTYPE_DOUBLE;
  ------------------
  |  Branch (413:12): [True: 0, False: 0]
  ------------------
  414|      0|    flags |= FLAGS_FLOATG;
  415|      0|    break;
  416|      0|  case 'G':
  ------------------
  |  Branch (416:3): [True: 0, False: 362k]
  ------------------
  417|      0|    type = flags & FLAGS_LONGDOUBLE ? MTYPE_LONGDOUBLE : MTYPE_DOUBLE;
  ------------------
  |  Branch (417:12): [True: 0, False: 0]
  ------------------
  418|      0|    flags |= FLAGS_FLOATG | FLAGS_UPPER;
  419|      0|    break;
  420|      0|  default:
  ------------------
  |  Branch (420:3): [True: 0, False: 362k]
  ------------------
  421|       |    /* invalid instruction, disregard and continue */
  422|      0|    return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  423|   362k|  } /* switch */
  424|       |
  425|   362k|  *flagp |= flags;
  426|   362k|  *typep = type;
  427|       |  return FALSE;
  ------------------
  |  | 1048|   362k|#define FALSE false
  ------------------
  428|   362k|}
mprintf.c:out_number:
  744|   295k|{
  745|   295k|  const unsigned char *digits = Curl_ldigits;
  746|   295k|  int flags = p->flags;
  747|   295k|  int width = p->width;
  748|   295k|  int prec = p->prec;
  749|   295k|  bool is_alt = flags & FLAGS_ALT;
  750|   295k|  bool is_neg = FALSE;
  ------------------
  |  | 1048|   295k|#define FALSE false
  ------------------
  751|   295k|  int base = 10;
  752|       |
  753|       |  /* 'workend' points to the final buffer byte position, but with an extra
  754|       |     byte as margin to avoid the (FALSE?) warning Coverity gives us
  755|       |     otherwise */
  756|   295k|  char *workend = &work[BUFFSIZE - 2];
  ------------------
  |  |   31|   295k|#define BUFFSIZE 326 /* buffer for long-to-str and float-to-str calcs, should
  ------------------
  757|   295k|  char *w;
  758|       |
  759|   295k|  if(flags & FLAGS_CHAR) {
  ------------------
  |  Branch (759:6): [True: 204k, False: 91.6k]
  ------------------
  760|       |    /* Character. */
  761|   204k|    if(!(flags & FLAGS_LEFT))
  ------------------
  |  Branch (761:8): [True: 204k, False: 0]
  ------------------
  762|   204k|      while(--width > 0)
  ------------------
  |  Branch (762:13): [True: 0, False: 204k]
  ------------------
  763|      0|        OUTCHAR(' ');
  ------------------
  |  |   43|      0|  do {                                    \
  |  |   44|      0|    if(stream((unsigned char)(x), userp)) \
  |  |  ------------------
  |  |  |  Branch (44:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   45|      0|      return TRUE;                        \
  |  |  ------------------
  |  |  |  | 1045|      0|#define TRUE true
  |  |  ------------------
  |  |   46|      0|    (*donep)++;                           \
  |  |   47|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (47:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  764|   204k|    OUTCHAR((char)num);
  ------------------
  |  |   43|   204k|  do {                                    \
  |  |   44|   204k|    if(stream((unsigned char)(x), userp)) \
  |  |  ------------------
  |  |  |  Branch (44:8): [True: 0, False: 204k]
  |  |  ------------------
  |  |   45|   204k|      return TRUE;                        \
  |  |  ------------------
  |  |  |  | 1045|      0|#define TRUE true
  |  |  ------------------
  |  |   46|   204k|    (*donep)++;                           \
  |  |   47|   204k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (47:11): [Folded, False: 204k]
  |  |  ------------------
  ------------------
  765|   204k|    if(flags & FLAGS_LEFT)
  ------------------
  |  Branch (765:8): [True: 0, False: 204k]
  ------------------
  766|      0|      while(--width > 0)
  ------------------
  |  Branch (766:13): [True: 0, False: 0]
  ------------------
  767|      0|        OUTCHAR(' ');
  ------------------
  |  |   43|      0|  do {                                    \
  |  |   44|      0|    if(stream((unsigned char)(x), userp)) \
  |  |  ------------------
  |  |  |  Branch (44:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   45|      0|      return TRUE;                        \
  |  |  ------------------
  |  |  |  | 1045|      0|#define TRUE true
  |  |  ------------------
  |  |   46|      0|    (*donep)++;                           \
  |  |   47|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (47:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  768|   204k|    return FALSE;
  ------------------
  |  | 1048|   204k|#define FALSE false
  ------------------
  769|   204k|  }
  770|  91.6k|  if(flags & FLAGS_OCTAL)
  ------------------
  |  Branch (770:6): [True: 0, False: 91.6k]
  ------------------
  771|       |    /* Octal unsigned integer */
  772|      0|    base = 8;
  773|       |
  774|  91.6k|  else if(flags & FLAGS_HEX) {
  ------------------
  |  Branch (774:11): [True: 60.7k, False: 30.8k]
  ------------------
  775|       |    /* Hexadecimal unsigned integer */
  776|  60.7k|    digits = (flags & FLAGS_UPPER) ? Curl_udigits : Curl_ldigits;
  ------------------
  |  Branch (776:14): [True: 0, False: 60.7k]
  ------------------
  777|  60.7k|    base = 16;
  778|  60.7k|  }
  779|  30.8k|  else if(flags & FLAGS_UNSIGNED)
  ------------------
  |  Branch (779:11): [True: 13.9k, False: 16.9k]
  ------------------
  780|       |    /* Decimal unsigned integer */
  781|  13.9k|    ;
  782|       |
  783|  16.9k|  else {
  784|       |    /* Decimal integer. */
  785|  16.9k|    is_neg = (nums < 0);
  786|  16.9k|    if(is_neg) {
  ------------------
  |  Branch (786:8): [True: 0, False: 16.9k]
  ------------------
  787|       |      /* signed_num might fail to hold absolute negative minimum by 1 */
  788|      0|      int64_t signed_num; /* Used to convert negative in positive. */
  789|      0|      signed_num = nums + (int64_t)1;
  790|      0|      signed_num = -signed_num;
  791|      0|      num = (uint64_t)signed_num;
  792|      0|      num += (uint64_t)1;
  793|      0|    }
  794|  16.9k|  }
  795|       |
  796|       |  /* Supply a default precision if none was given. */
  797|  91.6k|  if(prec == -1)
  ------------------
  |  Branch (797:6): [True: 30.9k, False: 60.6k]
  ------------------
  798|  30.9k|    prec = 1;
  799|       |
  800|       |  /* Put the number in WORK. */
  801|  91.6k|  w = workend;
  802|  91.6k|  DEBUGASSERT(base <= 16);
  ------------------
  |  | 1075|  91.6k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (802:3): [True: 0, False: 91.6k]
  |  Branch (802:3): [True: 91.6k, False: 0]
  ------------------
  803|  91.6k|  switch(base) {
  804|  30.8k|  case 10:
  ------------------
  |  Branch (804:3): [True: 30.8k, False: 60.7k]
  ------------------
  805|  73.7k|    while(num > 0) {
  ------------------
  |  Branch (805:11): [True: 42.8k, False: 30.8k]
  ------------------
  806|  42.8k|      *w-- = (char)('0' + (num % 10));
  807|  42.8k|      num /= 10;
  808|  42.8k|    }
  809|  30.8k|    break;
  810|  60.7k|  default:
  ------------------
  |  Branch (810:3): [True: 60.7k, False: 30.8k]
  ------------------
  811|   173k|    while(num > 0) {
  ------------------
  |  Branch (811:11): [True: 112k, False: 60.7k]
  ------------------
  812|   112k|      *w-- = digits[num % base];
  813|   112k|      num /= base;
  814|   112k|    }
  815|  60.7k|    break;
  816|  91.6k|  }
  817|  91.6k|  width -= (int)(workend - w);
  818|  91.6k|  prec -= (int)(workend - w);
  819|       |
  820|  91.6k|  if(is_alt && base == 8 && prec <= 0) {
  ------------------
  |  Branch (820:6): [True: 0, False: 91.6k]
  |  Branch (820:16): [True: 0, False: 0]
  |  Branch (820:29): [True: 0, False: 0]
  ------------------
  821|      0|    *w-- = '0';
  822|      0|    --width;
  823|      0|  }
  824|       |
  825|  91.6k|  if(prec > 0) {
  ------------------
  |  Branch (825:6): [True: 13.6k, False: 78.0k]
  ------------------
  826|  13.6k|    width -= prec;
  827|  31.4k|    while(prec-- > 0 && w >= work)
  ------------------
  |  Branch (827:11): [True: 17.8k, False: 13.6k]
  |  Branch (827:25): [True: 17.8k, False: 0]
  ------------------
  828|  17.8k|      *w-- = '0';
  829|  13.6k|  }
  830|       |
  831|  91.6k|  if(is_alt && base == 16)
  ------------------
  |  Branch (831:6): [True: 0, False: 91.6k]
  |  Branch (831:16): [True: 0, False: 0]
  ------------------
  832|      0|    width -= 2;
  833|       |
  834|  91.6k|  if(is_neg || (flags & FLAGS_SHOWSIGN) || (flags & FLAGS_SPACE))
  ------------------
  |  Branch (834:6): [True: 0, False: 91.6k]
  |  Branch (834:16): [True: 0, False: 91.6k]
  |  Branch (834:44): [True: 0, False: 91.6k]
  ------------------
  835|      0|    --width;
  836|       |
  837|  91.6k|  if(!(flags & FLAGS_LEFT) && !(flags & FLAGS_PAD_NIL))
  ------------------
  |  Branch (837:6): [True: 91.6k, False: 0]
  |  Branch (837:31): [True: 91.6k, False: 0]
  ------------------
  838|  91.6k|    while(width-- > 0)
  ------------------
  |  Branch (838:11): [True: 0, False: 91.6k]
  ------------------
  839|      0|      OUTCHAR(' ');
  ------------------
  |  |   43|      0|  do {                                    \
  |  |   44|      0|    if(stream((unsigned char)(x), userp)) \
  |  |  ------------------
  |  |  |  Branch (44:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   45|      0|      return TRUE;                        \
  |  |  ------------------
  |  |  |  | 1045|      0|#define TRUE true
  |  |  ------------------
  |  |   46|      0|    (*donep)++;                           \
  |  |   47|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (47:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  840|       |
  841|  91.6k|  if(is_neg)
  ------------------
  |  Branch (841:6): [True: 0, False: 91.6k]
  ------------------
  842|      0|    OUTCHAR('-');
  ------------------
  |  |   43|      0|  do {                                    \
  |  |   44|      0|    if(stream((unsigned char)(x), userp)) \
  |  |  ------------------
  |  |  |  Branch (44:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   45|      0|      return TRUE;                        \
  |  |  ------------------
  |  |  |  | 1045|      0|#define TRUE true
  |  |  ------------------
  |  |   46|      0|    (*donep)++;                           \
  |  |   47|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (47:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  843|  91.6k|  else if(flags & FLAGS_SHOWSIGN)
  ------------------
  |  Branch (843:11): [True: 0, False: 91.6k]
  ------------------
  844|      0|    OUTCHAR('+');
  ------------------
  |  |   43|      0|  do {                                    \
  |  |   44|      0|    if(stream((unsigned char)(x), userp)) \
  |  |  ------------------
  |  |  |  Branch (44:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   45|      0|      return TRUE;                        \
  |  |  ------------------
  |  |  |  | 1045|      0|#define TRUE true
  |  |  ------------------
  |  |   46|      0|    (*donep)++;                           \
  |  |   47|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (47:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  845|  91.6k|  else if(flags & FLAGS_SPACE)
  ------------------
  |  Branch (845:11): [True: 0, False: 91.6k]
  ------------------
  846|      0|    OUTCHAR(' ');
  ------------------
  |  |   43|      0|  do {                                    \
  |  |   44|      0|    if(stream((unsigned char)(x), userp)) \
  |  |  ------------------
  |  |  |  Branch (44:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   45|      0|      return TRUE;                        \
  |  |  ------------------
  |  |  |  | 1045|      0|#define TRUE true
  |  |  ------------------
  |  |   46|      0|    (*donep)++;                           \
  |  |   47|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (47:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  847|       |
  848|  91.6k|  if(is_alt && base == 16) {
  ------------------
  |  Branch (848:6): [True: 0, False: 91.6k]
  |  Branch (848:16): [True: 0, False: 0]
  ------------------
  849|      0|    OUTCHAR('0');
  ------------------
  |  |   43|      0|  do {                                    \
  |  |   44|      0|    if(stream((unsigned char)(x), userp)) \
  |  |  ------------------
  |  |  |  Branch (44:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   45|      0|      return TRUE;                        \
  |  |  ------------------
  |  |  |  | 1045|      0|#define TRUE true
  |  |  ------------------
  |  |   46|      0|    (*donep)++;                           \
  |  |   47|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (47:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  850|      0|    if(flags & FLAGS_UPPER)
  ------------------
  |  Branch (850:8): [True: 0, False: 0]
  ------------------
  851|      0|      OUTCHAR('X');
  ------------------
  |  |   43|      0|  do {                                    \
  |  |   44|      0|    if(stream((unsigned char)(x), userp)) \
  |  |  ------------------
  |  |  |  Branch (44:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   45|      0|      return TRUE;                        \
  |  |  ------------------
  |  |  |  | 1045|      0|#define TRUE true
  |  |  ------------------
  |  |   46|      0|    (*donep)++;                           \
  |  |   47|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (47:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  852|      0|    else
  853|      0|      OUTCHAR('x');
  ------------------
  |  |   43|      0|  do {                                    \
  |  |   44|      0|    if(stream((unsigned char)(x), userp)) \
  |  |  ------------------
  |  |  |  Branch (44:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   45|      0|      return TRUE;                        \
  |  |  ------------------
  |  |  |  | 1045|      0|#define TRUE true
  |  |  ------------------
  |  |   46|      0|    (*donep)++;                           \
  |  |   47|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (47:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  854|      0|  }
  855|       |
  856|  91.6k|  if(!(flags & FLAGS_LEFT) && (flags & FLAGS_PAD_NIL))
  ------------------
  |  Branch (856:6): [True: 91.6k, False: 0]
  |  Branch (856:31): [True: 0, False: 91.6k]
  ------------------
  857|      0|    while(width-- > 0)
  ------------------
  |  Branch (857:11): [True: 0, False: 0]
  ------------------
  858|      0|      OUTCHAR('0');
  ------------------
  |  |   43|      0|  do {                                    \
  |  |   44|      0|    if(stream((unsigned char)(x), userp)) \
  |  |  ------------------
  |  |  |  Branch (44:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   45|      0|      return TRUE;                        \
  |  |  ------------------
  |  |  |  | 1045|      0|#define TRUE true
  |  |  ------------------
  |  |   46|      0|    (*donep)++;                           \
  |  |   47|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (47:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  859|       |
  860|       |  /* Write the number. */
  861|   265k|  while(++w <= workend) {
  ------------------
  |  Branch (861:9): [True: 173k, False: 91.6k]
  ------------------
  862|   173k|    OUTCHAR(*w);
  ------------------
  |  |   43|   173k|  do {                                    \
  |  |   44|   173k|    if(stream((unsigned char)(x), userp)) \
  |  |  ------------------
  |  |  |  Branch (44:8): [True: 0, False: 173k]
  |  |  ------------------
  |  |   45|   173k|      return TRUE;                        \
  |  |  ------------------
  |  |  |  | 1045|      0|#define TRUE true
  |  |  ------------------
  |  |   46|   173k|    (*donep)++;                           \
  |  |   47|   173k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (47:11): [Folded, False: 173k]
  |  |  ------------------
  ------------------
  863|   173k|  }
  864|       |
  865|  91.6k|  if(flags & FLAGS_LEFT)
  ------------------
  |  Branch (865:6): [True: 0, False: 91.6k]
  ------------------
  866|      0|    while(width-- > 0)
  ------------------
  |  Branch (866:11): [True: 0, False: 0]
  ------------------
  867|      0|      OUTCHAR(' ');
  ------------------
  |  |   43|      0|  do {                                    \
  |  |   44|      0|    if(stream((unsigned char)(x), userp)) \
  |  |  ------------------
  |  |  |  Branch (44:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   45|      0|      return TRUE;                        \
  |  |  ------------------
  |  |  |  | 1045|      0|#define TRUE true
  |  |  ------------------
  |  |   46|      0|    (*donep)++;                           \
  |  |   47|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (47:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  868|       |
  869|  91.6k|  return FALSE;
  ------------------
  |  | 1048|  91.6k|#define FALSE false
  ------------------
  870|  91.6k|}
mprintf.c:out_string:
  879|  66.5k|{
  880|  66.5k|  int flags = p->flags;
  881|  66.5k|  int width = p->width;
  882|  66.5k|  int prec = p->prec;
  883|  66.5k|  size_t len;
  884|       |
  885|  66.5k|  if(!str) {
  ------------------
  |  Branch (885:6): [True: 0, False: 66.5k]
  ------------------
  886|       |    /* Write null string if there is space. */
  887|      0|    if(prec == -1 || prec >= (int)CURL_CSTRLEN(nilstr)) {
  ------------------
  |  | 1292|      0|#define CURL_CSTRLEN(x) (sizeof(x) - 1)
  ------------------
  |  Branch (887:8): [True: 0, False: 0]
  |  Branch (887:22): [True: 0, False: 0]
  ------------------
  888|      0|      str = nilstr;
  889|      0|      len = CURL_CSTRLEN(nilstr);
  ------------------
  |  | 1292|      0|#define CURL_CSTRLEN(x) (sizeof(x) - 1)
  ------------------
  890|       |      /* Disable quotes around (nil) */
  891|      0|      flags &= ~(unsigned int)FLAGS_ALT;
  892|      0|    }
  893|      0|    else {
  894|      0|      str = "";
  895|      0|      len = 0;
  896|      0|    }
  897|      0|  }
  898|  66.5k|  else if(prec != -1)
  ------------------
  |  Branch (898:11): [True: 1.84k, False: 64.6k]
  ------------------
  899|  1.84k|    len = (size_t)prec;
  900|  64.6k|  else if(*str == '\0')
  ------------------
  |  Branch (900:11): [True: 30.6k, False: 34.0k]
  ------------------
  901|  30.6k|    len = 0;
  902|  34.0k|  else
  903|  34.0k|    len = strlen(str);
  904|       |
  905|  66.5k|  width -= (len > INT_MAX) ? INT_MAX : (int)len;
  ------------------
  |  Branch (905:12): [True: 0, False: 66.5k]
  ------------------
  906|       |
  907|  66.5k|  if(flags & FLAGS_ALT)
  ------------------
  |  Branch (907:6): [True: 0, False: 66.5k]
  ------------------
  908|      0|    OUTCHAR('"');
  ------------------
  |  |   43|      0|  do {                                    \
  |  |   44|      0|    if(stream((unsigned char)(x), userp)) \
  |  |  ------------------
  |  |  |  Branch (44:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   45|      0|      return TRUE;                        \
  |  |  ------------------
  |  |  |  | 1045|      0|#define TRUE true
  |  |  ------------------
  |  |   46|      0|    (*donep)++;                           \
  |  |   47|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (47:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  909|       |
  910|  66.5k|  if(!(flags & FLAGS_LEFT))
  ------------------
  |  Branch (910:6): [True: 66.5k, False: 0]
  ------------------
  911|  66.5k|    while(width-- > 0)
  ------------------
  |  Branch (911:11): [True: 0, False: 66.5k]
  ------------------
  912|      0|      OUTCHAR(' ');
  ------------------
  |  |   43|      0|  do {                                    \
  |  |   44|      0|    if(stream((unsigned char)(x), userp)) \
  |  |  ------------------
  |  |  |  Branch (44:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   45|      0|      return TRUE;                        \
  |  |  ------------------
  |  |  |  | 1045|      0|#define TRUE true
  |  |  ------------------
  |  |   46|      0|    (*donep)++;                           \
  |  |   47|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (47:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  913|       |
  914|  1.76M|  for(; len && *str; len--)
  ------------------
  |  Branch (914:9): [True: 1.69M, False: 66.5k]
  |  Branch (914:16): [True: 1.69M, False: 3]
  ------------------
  915|  1.69M|    OUTCHAR(*str++);
  ------------------
  |  |   43|  1.76M|  do {                                    \
  |  |   44|  1.69M|    if(stream((unsigned char)(x), userp)) \
  |  |  ------------------
  |  |  |  Branch (44:8): [True: 9, False: 1.69M]
  |  |  ------------------
  |  |   45|  1.69M|      return TRUE;                        \
  |  |  ------------------
  |  |  |  | 1045|      9|#define TRUE true
  |  |  ------------------
  |  |   46|  1.69M|    (*donep)++;                           \
  |  |   47|  1.69M|  } while(0)
  |  |  ------------------
  |  |  |  Branch (47:11): [Folded, False: 1.69M]
  |  |  ------------------
  ------------------
  916|  66.5k|  if(flags & FLAGS_LEFT)
  ------------------
  |  Branch (916:6): [True: 0, False: 66.5k]
  ------------------
  917|      0|    while(width-- > 0)
  ------------------
  |  Branch (917:11): [True: 0, False: 0]
  ------------------
  918|      0|      OUTCHAR(' ');
  ------------------
  |  |   43|      0|  do {                                    \
  |  |   44|      0|    if(stream((unsigned char)(x), userp)) \
  |  |  ------------------
  |  |  |  Branch (44:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   45|      0|      return TRUE;                        \
  |  |  ------------------
  |  |  |  | 1045|      0|#define TRUE true
  |  |  ------------------
  |  |   46|      0|    (*donep)++;                           \
  |  |   47|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (47:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  919|       |
  920|  66.5k|  if(flags & FLAGS_ALT)
  ------------------
  |  Branch (920:6): [True: 0, False: 66.5k]
  ------------------
  921|      0|    OUTCHAR('"');
  ------------------
  |  |   43|      0|  do {                                    \
  |  |   44|      0|    if(stream((unsigned char)(x), userp)) \
  |  |  ------------------
  |  |  |  Branch (44:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   45|      0|      return TRUE;                        \
  |  |  ------------------
  |  |  |  | 1045|      0|#define TRUE true
  |  |  ------------------
  |  |   46|      0|    (*donep)++;                           \
  |  |   47|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (47:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  922|       |
  923|  66.5k|  return FALSE;
  ------------------
  |  | 1048|  66.5k|#define FALSE false
  ------------------
  924|  66.5k|}
mprintf.c:addbyter:
 1100|  1.32M|{
 1101|  1.32M|  struct nsprintf *infop = f;
 1102|  1.32M|  if(infop->length < infop->max) {
  ------------------
  |  Branch (1102:6): [True: 1.32M, False: 9]
  ------------------
 1103|       |    /* only do this if we have not reached max length yet */
 1104|  1.32M|    *infop->buffer++ = (char)outc; /* store */
 1105|  1.32M|    infop->length++; /* we are now one byte larger */
 1106|  1.32M|    return 0;     /* fputc() returns like this on success */
 1107|  1.32M|  }
 1108|      9|  return 1;
 1109|  1.32M|}
mprintf.c:alloc_addbyter:
 1148|  1.29M|{
 1149|  1.29M|  struct asprintf *infop = f;
 1150|  1.29M|  CURLcode result = curlx_dyn_addn(infop->b, &outc, 1);
 1151|  1.29M|  if(result) {
  ------------------
  |  Branch (1151:6): [True: 0, False: 1.29M]
  ------------------
 1152|      0|    infop->merr = result == CURLE_TOO_LARGE ? MERR_TOO_LARGE : MERR_MEM;
  ------------------
  |  |   29|      0|#define MERR_TOO_LARGE 2
  ------------------
                  infop->merr = result == CURLE_TOO_LARGE ? MERR_TOO_LARGE : MERR_MEM;
  ------------------
  |  |   28|      0|#define MERR_MEM       1
  ------------------
  |  Branch (1152:19): [True: 0, False: 0]
  ------------------
 1153|      0|    return 1; /* fail */
 1154|      0|  }
 1155|  1.29M|  return 0;
 1156|  1.29M|}

Curl_multi_handle:
  230|  2.53k|{
  231|  2.53k|  struct Curl_multi *multi = curlx_calloc(1, sizeof(struct Curl_multi));
  ------------------
  |  | 1473|  2.53k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
  232|       |
  233|  2.53k|  if(!multi)
  ------------------
  |  Branch (233:6): [True: 0, False: 2.53k]
  ------------------
  234|      0|    return NULL;
  235|       |
  236|  2.53k|  multi->magic = CURLMULTI_MAGIC_NUMBER;
  ------------------
  |  |   41|  2.53k|#define CURLMULTI_MAGIC_NUMBER 0x000bab1e
  ------------------
  237|       |
  238|       |  /* Initialisation order is important here!
  239|       |   * easy_init() does a lazy check on curl_global_init() which sets
  240|       |   * up platform specific things we need. For example calling curlx_pnow()
  241|       |   * before this is not safe. */
  242|  2.53k|  multi->admin = curl_easy_init();
  243|  2.53k|  if(!multi->admin) {
  ------------------
  |  Branch (243:6): [True: 0, False: 2.53k]
  ------------------
  244|      0|    curlx_free(multi);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  245|      0|    return NULL;
  246|      0|  }
  247|  2.53k|  multi->admin->multi = multi;
  248|  2.53k|  multi->admin->state.internal = TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  249|       |
  250|       |  /* Now we can use curlx_* things safely */
  251|  2.53k|  curlx_pnow(&multi->now);
  252|  2.53k|  Curl_timeouts_init(&multi->timeouts, &multi->now);
  253|  2.53k|  multi_timeouts_init(multi->admin);
  254|       |
  255|  2.53k|  Curl_dnscache_init(&multi->dnscache, dnssize);
  256|  2.53k|  Curl_mntfy_init(multi);
  257|  2.53k|  Curl_multi_ev_init(multi, ev_hashsize);
  258|  2.53k|  Curl_uint32_tbl_init(&multi->xfers, NULL);
  259|  2.53k|  Curl_uint32_bset_init(&multi->process);
  260|  2.53k|  Curl_uint32_bset_init(&multi->dirty);
  261|  2.53k|  Curl_uint32_bset_init(&multi->pending);
  262|  2.53k|  Curl_uint32_bset_init(&multi->msgsent);
  263|  2.53k|  Curl_hash_init(&multi->proto_hash, 23,
  264|  2.53k|                 Curl_hash_str, curlx_str_key_compare, ph_freeentry);
  265|  2.53k|  Curl_llist_init(&multi->msglist, NULL);
  266|       |
  267|  2.53k|  multi->multiplexing = TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  268|  2.53k|  multi->max_concurrent_streams = 100;
  269|  2.53k|  multi->last_timeout_ms = -1;
  270|  2.53k|#ifdef ENABLE_WAKEUP
  271|  2.53k|  multi->wakeup_pair[0] = CURL_SOCKET_BAD;
  ------------------
  |  |  147|  2.53k|#define CURL_SOCKET_BAD (-1)
  ------------------
  272|  2.53k|  multi->wakeup_pair[1] = CURL_SOCKET_BAD;
  ------------------
  |  |  147|  2.53k|#define CURL_SOCKET_BAD (-1)
  ------------------
  273|  2.53k|#endif
  274|  2.53k|#ifdef ENABLE_INTERNAL_WAKEUP
  275|  2.53k|  multi->wakeup_internal[0] = CURL_SOCKET_BAD;
  ------------------
  |  |  147|  2.53k|#define CURL_SOCKET_BAD (-1)
  ------------------
  276|  2.53k|  multi->wakeup_internal[1] = CURL_SOCKET_BAD;
  ------------------
  |  |  147|  2.53k|#define CURL_SOCKET_BAD (-1)
  ------------------
  277|  2.53k|#endif
  278|       |
  279|  2.53k|  if(Curl_mntfy_resize(multi) ||
  ------------------
  |  Branch (279:6): [True: 0, False: 2.53k]
  ------------------
  280|  2.53k|     Curl_uint32_bset_resize(&multi->process, xfer_table_size) ||
  ------------------
  |  Branch (280:6): [True: 0, False: 2.53k]
  ------------------
  281|  2.53k|     Curl_uint32_bset_resize(&multi->pending, xfer_table_size) ||
  ------------------
  |  Branch (281:6): [True: 0, False: 2.53k]
  ------------------
  282|  2.53k|     Curl_uint32_bset_resize(&multi->dirty, xfer_table_size) ||
  ------------------
  |  Branch (282:6): [True: 0, False: 2.53k]
  ------------------
  283|  2.53k|     Curl_uint32_bset_resize(&multi->msgsent, xfer_table_size) ||
  ------------------
  |  Branch (283:6): [True: 0, False: 2.53k]
  ------------------
  284|  2.53k|     Curl_uint32_tbl_resize(&multi->xfers, xfer_table_size))
  ------------------
  |  Branch (284:6): [True: 0, False: 2.53k]
  ------------------
  285|      0|    goto error;
  286|       |
  287|  2.53k|#ifdef DEBUGBUILD
  288|  2.53k|  if(getenv("CURL_DEBUG"))
  ------------------
  |  Branch (288:6): [True: 0, False: 2.53k]
  ------------------
  289|      0|    multi->admin->set.verbose = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  290|  2.53k|#endif
  291|  2.53k|  Curl_uint32_tbl_add(&multi->xfers, multi->admin, &multi->admin->mid);
  292|  2.53k|  Curl_uint32_bset_add(&multi->process, multi->admin->mid);
  293|       |
  294|  2.53k|  if(Curl_cshutdn_init(&multi->cshutdn, multi))
  ------------------
  |  Branch (294:6): [True: 0, False: 2.53k]
  ------------------
  295|      0|    goto error;
  296|       |
  297|  2.53k|  Curl_cpool_init(&multi->cpool, NULL, chashsize);
  298|       |
  299|  2.53k|#ifdef USE_SSL
  300|  2.53k|  if(Curl_ssl_scache_create(sesssize, 2, &multi->ssl_scache))
  ------------------
  |  Branch (300:6): [True: 0, False: 2.53k]
  ------------------
  301|      0|    goto error;
  302|       |#else
  303|       |  (void)sesssize;
  304|       |#endif
  305|       |
  306|       |#ifdef USE_WINSOCK
  307|       |  multi->wsa_event = WSACreateEvent();
  308|       |  if(multi->wsa_event == WSA_INVALID_EVENT)
  309|       |    goto error;
  310|       |#endif
  311|  2.53k|#ifdef ENABLE_WAKEUP
  312|       |  /* When enabled, rely on this to work. We ignore this in previous
  313|       |   * versions, but that seems an unnecessary complication. */
  314|  2.53k|  if(Curl_wakeup_init(multi->wakeup_pair, TRUE) < 0)
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  |  Branch (314:6): [True: 0, False: 2.53k]
  ------------------
  315|      0|    goto error;
  316|  2.53k|#endif
  317|  2.53k|#ifdef ENABLE_INTERNAL_WAKEUP
  318|  2.53k|  if(Curl_wakeup_init(multi->wakeup_internal, TRUE) < 0)
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  |  Branch (318:6): [True: 0, False: 2.53k]
  ------------------
  319|      0|    goto error;
  320|  2.53k|#endif
  321|       |
  322|  2.53k|  if(Curl_probeipv6(multi))
  ------------------
  |  Branch (322:6): [True: 0, False: 2.53k]
  ------------------
  323|      0|    goto error;
  324|       |
  325|  2.53k|#ifdef USE_RESOLV_THREADED
  326|  2.53k|  if(xfer_table_size < CURL_XFER_TABLE_SIZE) { /* easy multi */
  ------------------
  |  |   52|  2.53k|#define CURL_XFER_TABLE_SIZE 128
  ------------------
  |  Branch (326:6): [True: 0, False: 2.53k]
  ------------------
  327|      0|    if(Curl_async_thrdd_multi_init(multi, 0, 2, 10))
  ------------------
  |  Branch (327:8): [True: 0, False: 0]
  ------------------
  328|      0|      goto error;
  329|      0|  }
  330|  2.53k|  else { /* real multi handle */
  331|  2.53k|    if(Curl_async_thrdd_multi_init(multi, 0, 20, 2000))
  ------------------
  |  Branch (331:8): [True: 0, False: 2.53k]
  ------------------
  332|      0|      goto error;
  333|  2.53k|  }
  334|  2.53k|#endif
  335|       |
  336|  2.53k|  return multi;
  337|       |
  338|      0|error:
  339|       |
  340|      0|#ifdef USE_RESOLV_THREADED
  341|      0|  Curl_async_thrdd_multi_destroy(multi, TRUE);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  342|      0|#endif
  343|      0|  Curl_multi_ev_cleanup(multi);
  344|      0|  Curl_hash_destroy(&multi->proto_hash);
  345|      0|  Curl_dnscache_destroy(&multi->dnscache);
  346|      0|  Curl_cpool_destroy(&multi->cpool, multi->admin);
  347|      0|  Curl_cshutdn_destroy(&multi->cshutdn, multi->admin);
  348|      0|#ifdef USE_SSL
  349|      0|  Curl_ssl_scache_destroy(multi->ssl_scache);
  350|      0|#endif
  351|      0|  if(multi->admin) {
  ------------------
  |  Branch (351:6): [True: 0, False: 0]
  ------------------
  352|      0|    Curl_multi_ev_xfer_done(multi, multi->admin);
  353|      0|    multi->admin->multi = NULL;
  354|      0|    Curl_close(&multi->admin);
  355|      0|  }
  356|      0|  Curl_mntfy_cleanup(multi);
  357|       |
  358|      0|  Curl_uint32_bset_destroy(&multi->process);
  359|      0|  Curl_uint32_bset_destroy(&multi->dirty);
  360|      0|  Curl_uint32_bset_destroy(&multi->pending);
  361|      0|  Curl_uint32_bset_destroy(&multi->msgsent);
  362|      0|  Curl_uint32_tbl_destroy(&multi->xfers);
  363|      0|#ifdef ENABLE_WAKEUP
  364|      0|  Curl_wakeup_destroy(multi->wakeup_pair);
  365|      0|#endif
  366|      0|#ifdef ENABLE_INTERNAL_WAKEUP
  367|      0|  Curl_wakeup_destroy(multi->wakeup_internal);
  368|      0|#endif
  369|       |
  370|      0|  curlx_free(multi);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  371|       |  return NULL;
  372|  2.53k|}
curl_multi_init:
  375|  2.53k|{
  376|  2.53k|  return Curl_multi_handle(CURL_XFER_TABLE_SIZE,
  ------------------
  |  |   52|  2.53k|#define CURL_XFER_TABLE_SIZE 128
  ------------------
  377|  2.53k|                           CURL_SOCKET_HASH_TABLE_SIZE,
  ------------------
  |  |   58|  2.53k|#define CURL_SOCKET_HASH_TABLE_SIZE 911
  ------------------
  378|  2.53k|                           CURL_CONNECTION_HASH_SIZE,
  ------------------
  |  |   62|  2.53k|#define CURL_CONNECTION_HASH_SIZE 97
  ------------------
  379|  2.53k|                           CURL_DNS_HASH_SIZE,
  ------------------
  |  |   66|  2.53k|#define CURL_DNS_HASH_SIZE 71
  ------------------
  380|  2.53k|                           CURL_TLS_SESSION_SIZE);
  ------------------
  |  |   70|  2.53k|#define CURL_TLS_SESSION_SIZE 25
  ------------------
  381|  2.53k|}
Curl_is_connecting:
  398|  17.2k|{
  399|  17.2k|  return data->mstate < MSTATE_DO;
  400|  17.2k|}
Curl_multi_add_handle:
  469|  2.53k|{
  470|  2.53k|  CURLMcode mresult;
  471|       |
  472|       |  /* Prevent users from adding same easy handle more than once and prevent
  473|       |     adding to more than one multi stack */
  474|  2.53k|  if(data->multi)
  ------------------
  |  Branch (474:6): [True: 0, False: 2.53k]
  ------------------
  475|      0|    return CURLM_ADDED_ALREADY;
  476|       |
  477|  2.53k|  if(multi->dead) {
  ------------------
  |  Branch (477:6): [True: 0, False: 2.53k]
  ------------------
  478|       |    /* a "dead" handle cannot get added transfers while any existing easy
  479|       |       handles are still alive - but if there are none alive anymore, it is
  480|       |       fine to start over and unmark the "deadness" of this handle.
  481|       |       This means only the admin handle MUST be present. */
  482|      0|    if((Curl_uint32_tbl_count(&multi->xfers) != 1) ||
  ------------------
  |  Branch (482:8): [True: 0, False: 0]
  ------------------
  483|      0|       !Curl_uint32_tbl_contains(&multi->xfers, 0))
  ------------------
  |  Branch (483:8): [True: 0, False: 0]
  ------------------
  484|      0|      return CURLM_ABORTED_BY_CALLBACK;
  485|      0|    multi->dead = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  486|      0|    Curl_uint32_bset_clear(&multi->process);
  487|      0|    Curl_uint32_bset_clear(&multi->dirty);
  488|      0|    Curl_uint32_bset_clear(&multi->pending);
  489|      0|    Curl_uint32_bset_clear(&multi->msgsent);
  490|      0|  }
  491|       |
  492|  2.53k|  if(data->multi_easy) {
  ------------------
  |  Branch (492:6): [True: 0, False: 2.53k]
  ------------------
  493|       |    /* if this easy handle was previously used for curl_easy_perform(), there
  494|       |       is a private multi handle here that we can kill */
  495|      0|    curl_multi_cleanup(data->multi_easy);
  496|      0|    data->multi_easy = NULL;
  497|      0|  }
  498|       |
  499|       |  /* Insert the easy into the multi->xfers table, assigning it a `mid`. */
  500|  2.53k|  if(multi_xfers_add(multi, data))
  ------------------
  |  Branch (500:6): [True: 0, False: 2.53k]
  ------------------
  501|      0|    return CURLM_OUT_OF_MEMORY;
  502|       |
  503|       |  /* Initialize timeouts for this handle */
  504|  2.53k|  multi_timeouts_init(data);
  505|       |
  506|       |  /*
  507|       |   * No failure allowed in this function beyond this point. No modification
  508|       |   * of easy nor multi handle allowed before this except for potential
  509|       |   * multi's connection pool growing which will not be undone in this
  510|       |   * function no matter what.
  511|       |   */
  512|  2.53k|  if(data->set.errorbuffer)
  ------------------
  |  Branch (512:6): [True: 0, False: 2.53k]
  ------------------
  513|      0|    data->set.errorbuffer[0] = 0;
  514|       |
  515|  2.53k|  data->state.os_errno = 0;
  516|       |
  517|       |  /* make the Curl_easy refer back to this multi handle - before
  518|       |     Curl_expire() is called. */
  519|  2.53k|  data->multi = multi;
  520|       |
  521|       |  /* set the easy handle */
  522|  2.53k|  multistate(data, MSTATE_INIT);
  ------------------
  |  |  196|  2.53k|#define multistate(x, y) mstate(x, y, __LINE__)
  ------------------
  523|       |  /* not yet passed INIT state */
  524|  2.53k|  data->state.really_alive = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  525|       |
  526|       |#ifdef USE_LIBPSL
  527|       |  /* Do the same for PSL. */
  528|       |  if(data->share && (data->share->specifier & (1 << CURL_LOCK_DATA_PSL)))
  529|       |    data->psl = &data->share->psl;
  530|       |  else
  531|       |    data->psl = &multi->psl;
  532|       |#endif
  533|       |
  534|       |  /* add the easy handle to the process set */
  535|  2.53k|  Curl_uint32_bset_add(&multi->process, data->mid);
  536|  2.53k|  ++multi->xfers_alive;
  537|  2.53k|  ++multi->xfers_total_ever;
  538|       |
  539|  2.53k|  Curl_cpool_xfer_init(data);
  540|  2.53k|  multi_warn_debug(multi, data);
  541|       |
  542|       |  /* Make sure the new handle will run */
  543|  2.53k|  Curl_multi_mark_dirty(data);
  544|       |
  545|       |  /* Necessary in event based processing, where dirty handles trigger
  546|       |   * a timeout callback invocation. */
  547|  2.53k|  mresult = Curl_update_timer(multi);
  548|  2.53k|  if(mresult) {
  ------------------
  |  Branch (548:6): [True: 0, False: 2.53k]
  ------------------
  549|      0|    data->multi = NULL; /* not anymore */
  550|      0|    Curl_uint32_tbl_remove(&multi->xfers, data->mid);
  551|      0|    data->mid = UINT32_MAX;
  552|      0|    return mresult;
  553|      0|  }
  554|       |
  555|       |  /* The admin handle only ever has default timeouts set. To improve the
  556|       |     state somewhat we clone the timeouts from each added handle so that the
  557|       |     admin handle always has the same timeouts as the most recently added
  558|       |     easy handle. */
  559|  2.53k|  multi->admin->set.timeout = data->set.timeout;
  560|  2.53k|  multi->admin->set.server_response_timeout =
  561|  2.53k|    data->set.server_response_timeout;
  562|  2.53k|  multi->admin->set.no_signal = data->set.no_signal;
  563|       |
  564|  2.53k|  CURL_TRC_M(data, "added to multi, mid=%u, running=%u, total=%u",
  ------------------
  |  |  148|  2.53k|  do {                                   \
  |  |  149|  2.53k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  2.53k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.53k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  5.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.53k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 2.53k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  5.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 2.53k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|  2.53k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.53k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|  2.53k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 2.53k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  2.53k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
  565|  2.53k|             data->mid, Curl_multi_xfers_running(multi),
  566|  2.53k|             Curl_uint32_tbl_count(&multi->xfers));
  567|  2.53k|  return CURLM_OK;
  568|  2.53k|}
curl_multi_add_handle:
  571|  2.53k|{
  572|  2.53k|  struct Curl_mapi_guard guard;
  573|  2.53k|  CURLMcode mresult;
  574|       |
  575|  2.53k|  if(CURL_MAPI_ENTER(&guard, m, multi_add_handle, &mresult)) {
  ------------------
  |  |  190|  2.53k|  Curl_mapi_enter((g), (m), CURL_MAPI_FN_##fn, (r)) && (m)
  |  |  ------------------
  |  |  |  Branch (190:3): [True: 2.53k, False: 0]
  |  |  |  Branch (190:56): [True: 2.53k, False: 0]
  |  |  ------------------
  ------------------
  576|  2.53k|    struct Curl_easy *data = curl;
  577|       |    /* Verify that we got a somewhat good easy handle too */
  578|  2.53k|    if(!GOOD_EASY_HANDLE(data))
  ------------------
  |  |   34|  2.53k|  (((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER)) ? TRUE : \
  |  |  ------------------
  |  |  |  |   28|  2.53k|#define CURLEASY_MAGIC_NUMBER 0xc0dedbadU
  |  |  ------------------
  |  |                 (((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER)) ? TRUE : \
  |  |  ------------------
  |  |  |  | 1045|  2.53k|#define TRUE true
  |  |  ------------------
  |  |  |  Branch (34:5): [True: 2.53k, False: 0]
  |  |  |  Branch (34:12): [True: 2.53k, False: 0]
  |  |  ------------------
  |  |   35|  2.53k|   (DEBUGASSERT(!(x)), FALSE))
  |  |  ------------------
  |  |  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |                  (DEBUGASSERT(!(x)), FALSE))
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  ------------------
  |  Branch (578:8): [True: 0, False: 2.53k]
  |  Branch (578:9): [True: 0, False: 0]
  |  Branch (578:9): [True: 0, False: 0]
  ------------------
  579|      0|      mresult = CURLM_BAD_EASY_HANDLE;
  580|  2.53k|    else
  581|  2.53k|      mresult = Curl_multi_add_handle(m, data);
  582|  2.53k|  }
  583|  2.53k|  CURL_MAPI_LEAVE(&guard);
  ------------------
  |  |  192|  2.53k|  Curl_mapi_leave(g)
  ------------------
  584|  2.53k|  return mresult;
  585|  2.53k|}
Curl_multi_remove_handle:
  766|  2.53k|{
  767|  2.53k|  CURLMcode mresult;
  768|  2.53k|  bool premature;
  769|  2.53k|  struct Curl_llist_node *e;
  770|  2.53k|  uint32_t mid;
  771|       |
  772|       |  /* Prevent users from trying to remove same easy handle more than once */
  773|  2.53k|  if(!data->multi)
  ------------------
  |  Branch (773:6): [True: 0, False: 2.53k]
  ------------------
  774|      0|    return CURLM_OK; /* it is already removed so let's say it is fine! */
  775|       |
  776|       |  /* Prevent users from trying to remove an easy handle from the wrong multi */
  777|  2.53k|  if(data->multi != multi)
  ------------------
  |  Branch (777:6): [True: 0, False: 2.53k]
  ------------------
  778|      0|    return CURLM_BAD_EASY_HANDLE;
  779|       |
  780|  2.53k|  if(data->mid == UINT32_MAX) {
  ------------------
  |  Branch (780:6): [True: 0, False: 2.53k]
  ------------------
  781|      0|    DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (781:5): [Folded, False: 0]
  |  Branch (781:5): [Folded, False: 0]
  ------------------
  782|      0|    return CURLM_INTERNAL_ERROR;
  783|      0|  }
  784|  2.53k|  if(Curl_uint32_tbl_get(&multi->xfers, data->mid) != data) {
  ------------------
  |  Branch (784:6): [True: 0, False: 2.53k]
  ------------------
  785|      0|    DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (785:5): [Folded, False: 0]
  |  Branch (785:5): [Folded, False: 0]
  ------------------
  786|      0|    return CURLM_INTERNAL_ERROR;
  787|      0|  }
  788|       |
  789|  2.53k|  premature = (data->mstate < MSTATE_COMPLETED);
  790|       |
  791|  2.53k|  if(data->conn) {
  ------------------
  |  Branch (791:6): [True: 0, False: 2.53k]
  ------------------
  792|       |    /* If the 'state' is not INIT or COMPLETED, we might need to do something
  793|       |       nice to put the easy_handle in a good known state when this returns. */
  794|      0|    if(premature && (data->mstate > MSTATE_DO))
  ------------------
  |  Branch (794:8): [True: 0, False: 0]
  |  Branch (794:21): [True: 0, False: 0]
  ------------------
  795|      0|      streamclose(data->conn);
  ------------------
  |  |   89|      0|#define streamclose(x) Curl_conncontrol((x), CONNCTRL_STREAM_CLOSE)
  |  |  ------------------
  |  |  |  |   85|      0|#define CONNCTRL_STREAM_CLOSE    2
  |  |  ------------------
  ------------------
  796|       |
  797|       |    /* multi_done() clears the association between the easy handle and the
  798|       |       connection.
  799|       |       Note that this ignores the return code because there is
  800|       |       nothing really useful to do with it anyway! */
  801|      0|    (void)multi_done(data, data->result, premature);
  802|      0|  }
  803|       |
  804|       |  /* The timer must be shut down before data->multi is set to NULL, else
  805|       |     data's splaynode would remain in the splay tree after curl_easy_cleanup is
  806|       |     called. Do it after multi_done() in case that sets another time! */
  807|  2.53k|  Curl_expire_clear_all(data);
  808|       |
  809|       |  /* If in `msgsent`, it was deducted from `multi->xfers_alive` already. */
  810|  2.53k|  if(!Curl_uint32_bset_contains(&multi->msgsent, data->mid))
  ------------------
  |  Branch (810:6): [True: 0, False: 2.53k]
  ------------------
  811|      0|    --multi->xfers_alive;
  812|       |
  813|  2.53k|  if(data->state.really_alive) {
  ------------------
  |  Branch (813:6): [True: 0, False: 2.53k]
  ------------------
  814|      0|    data->state.really_alive = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  815|      0|    --multi->xfers_really_alive;
  816|      0|    if(!multi->xfers_really_alive)
  ------------------
  |  Branch (816:8): [True: 0, False: 0]
  ------------------
  817|      0|      (void)multi_assess_wakeup(multi);
  818|      0|  }
  819|       |
  820|  2.53k|  Curl_wildcard_dtor(&data->wildcard);
  821|       |
  822|  2.53k|  data->mstate = MSTATE_COMPLETED;
  823|       |
  824|       |  /* Remove the association between the connection and the handle */
  825|  2.53k|  Curl_detach_connection(data);
  826|       |
  827|       |  /* Tell event handling that this transfer is definitely going away */
  828|  2.53k|  Curl_multi_ev_xfer_done(multi, data);
  829|       |
  830|  2.53k|  if(data->set.connect_only) {
  ------------------
  |  Branch (830:6): [True: 0, False: 2.53k]
  ------------------
  831|      0|    if(data->multi_easy) {
  ------------------
  |  Branch (831:8): [True: 0, False: 0]
  ------------------
  832|      0|      if(data->state.lastconnect_id != -1) {
  ------------------
  |  Branch (832:10): [True: 0, False: 0]
  ------------------
  833|       |        /* Mark any connect-only connection for closure */
  834|      0|        struct connectdata *conn;
  835|      0|        (void)Curl_getconnectinfo(data, &conn);
  836|      0|        if(conn && conn->bits.connect_only)
  ------------------
  |  Branch (836:12): [True: 0, False: 0]
  |  Branch (836:20): [True: 0, False: 0]
  ------------------
  837|      0|          connclose(conn);
  ------------------
  |  |   90|      0|#define connclose(x)   Curl_conncontrol((x), CONNCTRL_CONN_CLOSE)
  |  |  ------------------
  |  |  |  |   84|      0|#define CONNCTRL_CONN_CLOSE      1
  |  |  ------------------
  ------------------
  838|      0|      }
  839|      0|    }
  840|      0|    else {
  841|       |      /* This removes a handle that was part the multi interface that used
  842|       |         CONNECT_ONLY, that connection is now left alive but since this handle
  843|       |         has bits.close set nothing can use that connection anymore and it is
  844|       |         forbidden from reuse. This easy handle cannot find the connection
  845|       |         anymore once removed from the multi handle
  846|       |
  847|       |         Better close the connection here, at once. */
  848|      0|      struct connectdata *conn;
  849|      0|      (void)Curl_getconnectinfo(data, &conn);
  850|      0|      if(conn)
  ------------------
  |  Branch (850:10): [True: 0, False: 0]
  ------------------
  851|      0|        Curl_conn_close(data, conn, TRUE);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  852|      0|    }
  853|      0|  }
  854|       |
  855|       |#ifdef USE_LIBPSL
  856|       |  /* Remove the PSL association. */
  857|       |  if(data->psl == &multi->psl)
  858|       |    data->psl = NULL;
  859|       |#endif
  860|       |
  861|       |  /* make sure there is no pending message in the queue sent from this easy
  862|       |     handle */
  863|  2.53k|  for(e = Curl_llist_head(&multi->msglist); e; e = Curl_node_next(e)) {
  ------------------
  |  Branch (863:45): [True: 0, False: 2.53k]
  ------------------
  864|      0|    struct Curl_message *msg = Curl_node_elem(e);
  865|       |
  866|      0|    if(msg->extmsg.easy_handle == data) {
  ------------------
  |  Branch (866:8): [True: 0, False: 0]
  ------------------
  867|      0|      Curl_node_remove(e);
  868|       |      /* there can only be one from this specific handle */
  869|      0|      break;
  870|      0|    }
  871|      0|  }
  872|       |
  873|       |  /* clear the association to this multi handle */
  874|  2.53k|  mid = data->mid;
  875|  2.53k|  DEBUGASSERT(Curl_uint32_tbl_contains(&multi->xfers, mid));
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (875:3): [True: 0, False: 2.53k]
  |  Branch (875:3): [True: 2.53k, False: 0]
  ------------------
  876|  2.53k|  Curl_uint32_tbl_remove(&multi->xfers, mid);
  877|  2.53k|  Curl_uint32_bset_remove(&multi->process, mid);
  878|  2.53k|  Curl_uint32_bset_remove(&multi->dirty, mid);
  879|  2.53k|  Curl_uint32_bset_remove(&multi->pending, mid);
  880|  2.53k|  Curl_uint32_bset_remove(&multi->msgsent, mid);
  881|  2.53k|  data->multi = NULL;
  882|  2.53k|  data->mid = UINT32_MAX;
  883|  2.53k|  data->master_mid = UINT32_MAX;
  884|       |
  885|       |  /* A pending transfer *might* be able to run now. */
  886|  2.53k|  multi_schedule_pending(multi);
  887|  2.53k|  mresult = Curl_update_timer(multi);
  888|  2.53k|  if(mresult)
  ------------------
  |  Branch (888:6): [True: 0, False: 2.53k]
  ------------------
  889|      0|    return mresult;
  890|       |
  891|  2.53k|  mresult = multi_assess_wakeup(multi);
  892|  2.53k|  if(mresult) {
  ------------------
  |  Branch (892:6): [True: 0, False: 2.53k]
  ------------------
  893|      0|    failf(data, "error enabling wakeup listening: %d", mresult);
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  894|      0|    return mresult;
  895|      0|  }
  896|       |
  897|  2.53k|  CURL_TRC_M(data, "removed from multi, mid=%u, running=%u, total=%u",
  ------------------
  |  |  148|  2.53k|  do {                                   \
  |  |  149|  2.53k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  2.53k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.53k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  5.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.53k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 2.53k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  5.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 2.53k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|  2.53k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.53k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|  2.53k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 2.53k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  2.53k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
  898|  2.53k|             mid, Curl_multi_xfers_running(multi),
  899|  2.53k|             Curl_uint32_tbl_count(&multi->xfers));
  900|  2.53k|  return CURLM_OK;
  901|  2.53k|}
curl_multi_remove_handle:
  904|  2.53k|{
  905|  2.53k|  struct Curl_mapi_guard guard;
  906|  2.53k|  CURLMcode mresult;
  907|       |
  908|  2.53k|  if(CURL_MAPI_ENTER(&guard, m, multi_remove_handle, &mresult)) {
  ------------------
  |  |  190|  2.53k|  Curl_mapi_enter((g), (m), CURL_MAPI_FN_##fn, (r)) && (m)
  |  |  ------------------
  |  |  |  Branch (190:3): [True: 2.53k, False: 0]
  |  |  |  Branch (190:56): [True: 2.53k, False: 0]
  |  |  ------------------
  ------------------
  909|  2.53k|    struct Curl_easy *data = curl;
  910|  2.53k|    if(!GOOD_EASY_HANDLE(data))
  ------------------
  |  |   34|  2.53k|  (((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER)) ? TRUE : \
  |  |  ------------------
  |  |  |  |   28|  2.53k|#define CURLEASY_MAGIC_NUMBER 0xc0dedbadU
  |  |  ------------------
  |  |                 (((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER)) ? TRUE : \
  |  |  ------------------
  |  |  |  | 1045|  2.53k|#define TRUE true
  |  |  ------------------
  |  |  |  Branch (34:5): [True: 2.53k, False: 0]
  |  |  |  Branch (34:12): [True: 2.53k, False: 0]
  |  |  ------------------
  |  |   35|  2.53k|   (DEBUGASSERT(!(x)), FALSE))
  |  |  ------------------
  |  |  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |                  (DEBUGASSERT(!(x)), FALSE))
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  ------------------
  |  Branch (910:8): [True: 0, False: 2.53k]
  |  Branch (910:9): [True: 0, False: 0]
  |  Branch (910:9): [True: 0, False: 0]
  ------------------
  911|      0|      mresult = CURLM_BAD_EASY_HANDLE;
  912|  2.53k|    else
  913|  2.53k|      mresult = Curl_multi_remove_handle(m, data);
  914|  2.53k|  }
  915|  2.53k|  CURL_MAPI_LEAVE(&guard);
  ------------------
  |  |  192|  2.53k|  Curl_mapi_leave(g)
  ------------------
  916|  2.53k|  return mresult;
  917|  2.53k|}
Curl_detach_connection:
  932|  16.2k|{
  933|  16.2k|  struct connectdata *conn = data->conn;
  934|  16.2k|  if(conn) {
  ------------------
  |  Branch (934:6): [True: 6.10k, False: 10.1k]
  ------------------
  935|       |    /* this should never happen, prevent underflow */
  936|  6.10k|    DEBUGASSERT(conn->attached_xfers);
  ------------------
  |  | 1075|  6.10k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (936:5): [True: 0, False: 6.10k]
  |  Branch (936:5): [True: 6.10k, False: 0]
  ------------------
  937|  6.10k|    if(conn->attached_xfers) {
  ------------------
  |  Branch (937:8): [True: 6.10k, False: 0]
  ------------------
  938|  6.10k|      conn->attached_xfers--;
  939|  6.10k|      if(!conn->attached_xfers)
  ------------------
  |  Branch (939:10): [True: 6.10k, False: 0]
  ------------------
  940|  6.10k|        conn->attached_multi = NULL;
  941|  6.10k|    }
  942|  6.10k|  }
  943|  16.2k|  data->conn = NULL;
  944|  16.2k|}
Curl_attach_connection:
  956|  6.10k|{
  957|  6.10k|  DEBUGASSERT(data);
  ------------------
  |  | 1075|  6.10k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (957:3): [True: 0, False: 6.10k]
  |  Branch (957:3): [True: 6.10k, False: 0]
  ------------------
  958|  6.10k|  DEBUGASSERT(!data->conn);
  ------------------
  |  | 1075|  6.10k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (958:3): [True: 0, False: 6.10k]
  |  Branch (958:3): [True: 6.10k, False: 0]
  ------------------
  959|  6.10k|  DEBUGASSERT(conn);
  ------------------
  |  | 1075|  6.10k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (959:3): [True: 0, False: 6.10k]
  |  Branch (959:3): [True: 6.10k, False: 0]
  ------------------
  960|  6.10k|  DEBUGASSERT(conn->attached_xfers < UINT32_MAX);
  ------------------
  |  | 1075|  6.10k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (960:3): [True: 0, False: 6.10k]
  |  Branch (960:3): [True: 6.10k, False: 0]
  ------------------
  961|  6.10k|  data->conn = conn;
  962|  6.10k|  if(matched)
  ------------------
  |  Branch (962:6): [True: 2.03k, False: 4.07k]
  ------------------
  963|  2.03k|    data->state.lastconnect_id = conn->connection_id;
  964|  4.07k|  else
  965|  6.10k|    DEBUGASSERT(!data->mid); /* admin handle */
  ------------------
  |  | 1075|  6.10k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (965:5): [True: 0, False: 4.07k]
  |  Branch (965:5): [True: 4.07k, False: 0]
  ------------------
  966|  6.10k|  conn->attached_xfers++;
  967|       |  /* all attached transfers must be from the same multi */
  968|  6.10k|  if(!conn->attached_multi)
  ------------------
  |  Branch (968:6): [True: 6.10k, False: 0]
  ------------------
  969|  6.10k|    conn->attached_multi = data->multi;
  970|  6.10k|  DEBUGASSERT(conn->attached_multi == data->multi);
  ------------------
  |  | 1075|  6.10k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (970:3): [True: 0, False: 6.10k]
  |  Branch (970:3): [True: 6.10k, False: 0]
  ------------------
  971|       |
  972|  6.10k|  if(conn->scheme && conn->scheme->run->attach)
  ------------------
  |  Branch (972:6): [True: 6.10k, False: 0]
  |  Branch (972:22): [True: 0, False: 6.10k]
  ------------------
  973|      0|    conn->scheme->run->attach(data, conn);
  974|  6.10k|}
Curl_multi_connchanged:
 1761|  2.03k|{
 1762|       |  multi->recheckstate = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
 1763|  2.03k|}
curl_multi_perform:
 2983|  2.53k|{
 2984|  2.53k|  struct Curl_mapi_guard guard;
 2985|  2.53k|  CURLMcode mresult;
 2986|       |
 2987|  2.53k|  if(CURL_MAPI_ENTER(&guard, m, multi_perform, &mresult)) {
  ------------------
  |  |  190|  2.53k|  Curl_mapi_enter((g), (m), CURL_MAPI_FN_##fn, (r)) && (m)
  |  |  ------------------
  |  |  |  Branch (190:3): [True: 2.53k, False: 0]
  |  |  |  Branch (190:56): [True: 2.53k, False: 0]
  |  |  ------------------
  ------------------
 2988|  2.53k|    mresult = multi_perform(m, running_handles);
 2989|  2.53k|  }
 2990|  2.53k|  CURL_MAPI_LEAVE(&guard);
  ------------------
  |  |  192|  2.53k|  Curl_mapi_leave(g)
  ------------------
 2991|  2.53k|  return mresult;
 2992|  2.53k|}
curl_multi_cleanup:
 2995|  2.53k|{
 2996|  2.53k|  struct Curl_mapi_guard guard;
 2997|  2.53k|  CURLMcode mresult;
 2998|       |
 2999|  2.53k|  if(CURL_MAPI_ENTER(&guard, m, multi_cleanup, &mresult)) {
  ------------------
  |  |  190|  2.53k|  Curl_mapi_enter((g), (m), CURL_MAPI_FN_##fn, (r)) && (m)
  |  |  ------------------
  |  |  |  Branch (190:3): [True: 2.53k, False: 0]
  |  |  |  Branch (190:56): [True: 2.53k, False: 0]
  |  |  ------------------
  ------------------
 3000|  2.53k|    struct Curl_multi *multi = m;
 3001|  2.53k|    void *entry;
 3002|  2.53k|    uint32_t mid;
 3003|       |
 3004|       |    /* First remove all remaining easy handles,
 3005|       |     * close internal ones. admin handle is special */
 3006|  2.53k|    if(Curl_uint32_tbl_first(&multi->xfers, &mid, &entry)) {
  ------------------
  |  Branch (3006:8): [True: 2.53k, False: 0]
  ------------------
 3007|  2.53k|      do {
 3008|  2.53k|        struct Curl_easy *data = entry;
 3009|  2.53k|        if(!GOOD_EASY_HANDLE(data)) {
  ------------------
  |  |   34|  2.53k|  (((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER)) ? TRUE : \
  |  |  ------------------
  |  |  |  |   28|  2.53k|#define CURLEASY_MAGIC_NUMBER 0xc0dedbadU
  |  |  ------------------
  |  |                 (((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER)) ? TRUE : \
  |  |  ------------------
  |  |  |  | 1045|  2.53k|#define TRUE true
  |  |  ------------------
  |  |  |  Branch (34:5): [True: 2.53k, False: 0]
  |  |  |  Branch (34:12): [True: 2.53k, False: 0]
  |  |  ------------------
  |  |   35|  2.53k|   (DEBUGASSERT(!(x)), FALSE))
  |  |  ------------------
  |  |  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |                  (DEBUGASSERT(!(x)), FALSE))
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  ------------------
  |  Branch (3009:12): [True: 0, False: 2.53k]
  |  Branch (3009:13): [True: 0, False: 0]
  |  Branch (3009:13): [True: 0, False: 0]
  ------------------
 3010|      0|          mresult = CURLM_BAD_HANDLE;
 3011|      0|          goto out;
 3012|      0|        }
 3013|       |
 3014|  2.53k|#ifdef DEBUGBUILD
 3015|  2.53k|        if(mid != data->mid) {
  ------------------
  |  Branch (3015:12): [True: 0, False: 2.53k]
  ------------------
 3016|      0|          CURL_TRC_M(data, "multi_cleanup: still present with mid=%u, "
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3017|      0|                     "but unexpected data->mid=%u\n", mid, data->mid);
 3018|      0|          DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (3018:11): [Folded, False: 0]
  |  Branch (3018:11): [Folded, False: 0]
  ------------------
 3019|      0|        }
 3020|  2.53k|#endif
 3021|       |
 3022|  2.53k|        if(data == multi->admin)
  ------------------
  |  Branch (3022:12): [True: 2.53k, False: 0]
  ------------------
 3023|  2.53k|          continue;
 3024|       |
 3025|      0|        if(!data->state.done && data->conn)
  ------------------
  |  Branch (3025:12): [True: 0, False: 0]
  |  Branch (3025:33): [True: 0, False: 0]
  ------------------
 3026|       |          /* if DONE was never called for this handle */
 3027|      0|          (void)multi_done(data, CURLE_OK, TRUE);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 3028|       |
 3029|      0|        data->multi = NULL; /* clear the association */
 3030|      0|        Curl_uint32_tbl_remove(&multi->xfers, mid);
 3031|      0|        data->mid = UINT32_MAX;
 3032|       |
 3033|       |#ifdef USE_LIBPSL
 3034|       |        if(data->psl == &multi->psl)
 3035|       |          data->psl = NULL;
 3036|       |#endif
 3037|      0|        if(data->state.internal)
  ------------------
  |  Branch (3037:12): [True: 0, False: 0]
  ------------------
 3038|      0|          Curl_close(&data);
 3039|  2.53k|      } while(Curl_uint32_tbl_next(&multi->xfers, mid, &mid, &entry));
  ------------------
  |  Branch (3039:15): [True: 0, False: 2.53k]
  ------------------
 3040|  2.53k|    }
 3041|       |
 3042|  2.53k|#ifdef USE_RESOLV_THREADED
 3043|  2.53k|    Curl_async_thrdd_multi_destroy(multi, !multi->quick_exit);
 3044|  2.53k|#endif
 3045|  2.53k|    Curl_cpool_destroy(&multi->cpool, multi->admin);
 3046|  2.53k|    Curl_cshutdn_destroy(&multi->cshutdn, multi->admin);
 3047|  2.53k|    if(multi->admin) {
  ------------------
  |  Branch (3047:8): [True: 2.53k, False: 0]
  ------------------
 3048|  2.53k|      CURL_TRC_M(multi->admin, "multi_cleanup, closing admin handle, done");
  ------------------
  |  |  148|  2.53k|  do {                                   \
  |  |  149|  2.53k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  2.53k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.53k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  5.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.53k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 2.53k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  5.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.53k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  2.53k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
 3049|  2.53k|      multi->admin->multi = NULL;
 3050|  2.53k|      Curl_uint32_tbl_remove(&multi->xfers, multi->admin->mid);
 3051|  2.53k|      Curl_close(&multi->admin);
 3052|  2.53k|    }
 3053|       |
 3054|  2.53k|    multi->magic = 0; /* not good anymore */
 3055|       |
 3056|  2.53k|    Curl_multi_ev_cleanup(multi);
 3057|  2.53k|    Curl_hash_destroy(&multi->proto_hash);
 3058|  2.53k|    Curl_dnscache_destroy(&multi->dnscache);
 3059|  2.53k|    Curl_psl_destroy(&multi->psl);
 3060|  2.53k|#ifdef USE_SSL
 3061|  2.53k|    Curl_ssl_scache_destroy(multi->ssl_scache);
 3062|  2.53k|#endif
 3063|       |
 3064|       |#ifdef USE_WINSOCK
 3065|       |    WSACloseEvent(multi->wsa_event);
 3066|       |#endif
 3067|  2.53k|#ifdef ENABLE_WAKEUP
 3068|  2.53k|  Curl_wakeup_destroy(multi->wakeup_pair);
 3069|  2.53k|#endif
 3070|  2.53k|#ifdef ENABLE_INTERNAL_WAKEUP
 3071|  2.53k|  Curl_wakeup_destroy(multi->wakeup_internal);
 3072|  2.53k|#endif
 3073|       |
 3074|  2.53k|    multi_xfer_bufs_free(multi);
 3075|  2.53k|    Curl_mntfy_cleanup(multi);
 3076|  2.53k|#ifdef DEBUGBUILD
 3077|  2.53k|    if(Curl_uint32_tbl_count(&multi->xfers)) {
  ------------------
  |  Branch (3077:8): [True: 0, False: 2.53k]
  ------------------
 3078|      0|      multi_xfer_tbl_dump(multi);
 3079|      0|      DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (3079:7): [Folded, False: 0]
  |  Branch (3079:7): [Folded, False: 0]
  ------------------
 3080|      0|    }
 3081|  2.53k|#endif
 3082|  2.53k|    Curl_uint32_bset_destroy(&multi->process);
 3083|  2.53k|    Curl_uint32_bset_destroy(&multi->dirty);
 3084|  2.53k|    Curl_uint32_bset_destroy(&multi->pending);
 3085|  2.53k|    Curl_uint32_bset_destroy(&multi->msgsent);
 3086|  2.53k|    Curl_uint32_tbl_destroy(&multi->xfers);
 3087|  2.53k|    curlx_memzero(multi, sizeof(*multi));
 3088|  2.53k|    curlx_free(multi);
  ------------------
  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 3089|       |
 3090|  2.53k|    mresult = CURLM_OK;
 3091|  2.53k|  }
 3092|  2.53k|out:
 3093|  2.53k|  CURL_MAPI_LEAVE(&guard);
  ------------------
  |  |  192|  2.53k|  Curl_mapi_leave(g)
  ------------------
 3094|  2.53k|  return mresult;
 3095|  2.53k|}
curl_multi_info_read:
 3108|  5.07k|{
 3109|  5.07k|  struct Curl_mapi_guard guard;
 3110|  5.07k|  CURLMsg *msg_result = NULL;
 3111|       |
 3112|  5.07k|  *msgs_in_queue = 0; /* default to none */
 3113|  5.07k|  if(CURL_MAPI_ENTER(&guard, m, multi_info_read, NULL)) {
  ------------------
  |  |  190|  5.07k|  Curl_mapi_enter((g), (m), CURL_MAPI_FN_##fn, (r)) && (m)
  |  |  ------------------
  |  |  |  Branch (190:3): [True: 5.07k, False: 0]
  |  |  |  Branch (190:56): [True: 5.07k, False: 0]
  |  |  ------------------
  ------------------
 3114|  5.07k|    struct Curl_multi *multi = m;
 3115|  5.07k|    if(Curl_llist_count(&multi->msglist)) {
  ------------------
  |  Branch (3115:8): [True: 2.53k, False: 2.53k]
  ------------------
 3116|       |      /* there is one or more messages in the list */
 3117|  2.53k|      struct Curl_llist_node *e;
 3118|  2.53k|      struct Curl_message *msg;
 3119|       |
 3120|       |      /* extract the head of the list to return */
 3121|  2.53k|      e = Curl_llist_head(&multi->msglist);
 3122|       |
 3123|  2.53k|      msg = Curl_node_elem(e);
 3124|       |
 3125|       |      /* remove the extracted entry */
 3126|  2.53k|      Curl_node_remove(e);
 3127|       |
 3128|  2.53k|      *msgs_in_queue = curlx_uztosi(Curl_llist_count(&multi->msglist));
 3129|       |
 3130|  2.53k|      msg_result = &msg->extmsg;
 3131|  2.53k|    }
 3132|  5.07k|  }
 3133|  5.07k|  CURL_MAPI_LEAVE(&guard);
  ------------------
  |  |  192|  5.07k|  Curl_mapi_leave(g)
  ------------------
 3134|  5.07k|  return msg_result;
 3135|  5.07k|}
Curl_multi_will_close:
 3138|  2.03k|{
 3139|  2.03k|  if(data) {
  ------------------
  |  Branch (3139:6): [True: 2.03k, False: 0]
  ------------------
 3140|  2.03k|    struct Curl_multi *multi = data->multi;
 3141|  2.03k|    if(multi) {
  ------------------
  |  Branch (3141:8): [True: 2.03k, False: 0]
  ------------------
 3142|  2.03k|      CURL_TRC_M(data, "Curl_multi_will_close fd=%" FMT_SOCKET_T, s);
  ------------------
  |  |  148|  2.03k|  do {                                   \
  |  |  149|  2.03k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  2.03k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.03k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 2.03k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.03k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  2.03k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
 3143|  2.03k|      Curl_multi_ev_socket_done(multi, data, s);
 3144|  2.03k|    }
 3145|  2.03k|  }
 3146|  2.03k|}
Curl_update_timer:
 3584|  7.61k|{
 3585|  7.61k|  timediff_t timeouts_offset_us = 0;
 3586|  7.61k|  int timeout_ms;
 3587|  7.61k|  int rc;
 3588|  7.61k|  bool set_value = FALSE;
  ------------------
  |  | 1048|  7.61k|#define FALSE false
  ------------------
 3589|       |
 3590|  7.61k|  if(!multi->timer_cb || multi->dead)
  ------------------
  |  Branch (3590:6): [True: 7.61k, False: 0]
  |  Branch (3590:26): [True: 0, False: 0]
  ------------------
 3591|  7.61k|    return CURLM_OK;
 3592|      0|  multi_timeout(multi, &timeouts_offset_us, &timeout_ms);
 3593|       |
 3594|      0|  if(timeout_ms < 0 && multi->last_timeout_ms < 0) {
  ------------------
  |  Branch (3594:6): [True: 0, False: 0]
  |  Branch (3594:24): [True: 0, False: 0]
  ------------------
 3595|       |    /* nothing to do */
 3596|      0|  }
 3597|      0|  else if(timeout_ms < 0) {
  ------------------
  |  Branch (3597:11): [True: 0, False: 0]
  ------------------
 3598|       |    /* there is no timeout now but there was one previously */
 3599|      0|    CURL_TRC_M(multi->admin, "[TIMER] clear");
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3600|      0|    timeout_ms = -1; /* normalize */
 3601|      0|    set_value = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 3602|      0|  }
 3603|      0|  else if(multi->last_timeout_ms < 0) {
  ------------------
  |  Branch (3603:11): [True: 0, False: 0]
  ------------------
 3604|      0|    CURL_TRC_M(multi->admin, "[TIMER] set %dms, none before", timeout_ms);
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3605|      0|    set_value = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 3606|      0|  }
 3607|      0|  else if(multi->last_expire_offset_us != timeouts_offset_us) {
  ------------------
  |  Branch (3607:11): [True: 0, False: 0]
  ------------------
 3608|       |    /* We had a timeout before and have one now, the absolute timestamp
 3609|       |     * differs. The relative timeout_ms may be the same, but the starting
 3610|       |     * point differs. Let the application restart its timer. */
 3611|      0|    CURL_TRC_M(multi->admin, "[TIMER] set %dms, replace previous",
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3612|      0|               timeout_ms);
 3613|      0|    set_value = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 3614|      0|  }
 3615|      0|  else {
 3616|       |    /* We have same expire time as previously. Our relative 'timeout_ms'
 3617|       |     * may be different now, but the application has the timer running
 3618|       |     * and we do not to tell it to start this again. */
 3619|      0|  }
 3620|       |
 3621|      0|  if(set_value) {
  ------------------
  |  Branch (3621:6): [True: 0, False: 0]
  ------------------
 3622|      0|    struct Curl_mapi_guard guard;
 3623|       |
 3624|      0|    multi->last_expire_offset_us = timeouts_offset_us;
 3625|      0|    multi->last_timeout_ms = timeout_ms;
 3626|      0|    CURL_CBAPI_MULTI_START(&guard, multi, multi_timer_cb);
  ------------------
  |  |  203|      0|  Curl_cbapi_enter((g), NULL, (m), CURL_CBAPI_FN_##fn)
  ------------------
 3627|      0|    rc = multi->timer_cb(multi, timeout_ms, multi->timer_userp);
 3628|      0|    CURL_CBAPI_MULTI_END(&guard);
  ------------------
  |  |  207|      0|  Curl_cbapi_leave(g)
  ------------------
 3629|      0|    if(rc == -1) {
  ------------------
  |  Branch (3629:8): [True: 0, False: 0]
  ------------------
 3630|      0|      multi->dead = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 3631|      0|      return CURLM_ABORTED_BY_CALLBACK;
 3632|      0|    }
 3633|      0|  }
 3634|      0|  return CURLM_OK;
 3635|      0|}
Curl_expire:
 3750|  5.07k|{
 3751|  5.07k|  struct Curl_multi *multi = data->multi;
 3752|  5.07k|  struct expire_timers *timeouts = &data->state.timeouts;
 3753|  5.07k|  uint8_t prev_id = timeouts->first;
 3754|  5.07k|  struct curltime set;
 3755|       |
 3756|       |  /* this is only interesting while there is still an associated multi struct
 3757|       |     remaining! */
 3758|  5.07k|  if(!multi)
  ------------------
  |  Branch (3758:6): [True: 0, False: 5.07k]
  ------------------
 3759|      0|    return;
 3760|  5.07k|  DEBUGASSERT(eid < EXPIRE_LAST);
  ------------------
  |  | 1075|  5.07k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (3760:3): [True: 0, False: 5.07k]
  |  Branch (3760:3): [True: 5.07k, False: 0]
  ------------------
 3761|  5.07k|  if(milli > INT_MAX)
  ------------------
  |  Branch (3761:6): [True: 0, False: 5.07k]
  ------------------
 3762|       |    /* Cap ridiculous timeouts, 31-bit ms is still 3.5 weeks. When the time
 3763|       |       goes to the user, it must fit in this size. */
 3764|      0|    milli = INT_MAX;
 3765|       |
 3766|  5.07k|  set = *Curl_pgrs_now(data);
 3767|  5.07k|  set.tv_sec += (time_t)(milli / 1000); /* may be a 64 to 32-bit conversion */
 3768|  5.07k|  set.tv_usec += (int)(milli % 1000) * 1000;
 3769|  5.07k|  if(set.tv_usec >= 1000000) {
  ------------------
  |  Branch (3769:6): [True: 2.44k, False: 2.63k]
  ------------------
 3770|  2.44k|    set.tv_sec++;
 3771|  2.44k|    set.tv_usec -= 1000000;
 3772|  2.44k|  }
 3773|       |
 3774|       |  /* Add the timeout, will replace any previous value for this timer. */
 3775|  5.07k|  multi_set_timeout(data, &set, eid);
 3776|  5.07k|  DEBUGASSERT(timeouts->first < EXPIRE_LAST);
  ------------------
  |  | 1075|  5.07k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (3776:3): [True: 0, False: 5.07k]
  |  Branch (3776:3): [True: 5.07k, False: 0]
  ------------------
 3777|       |
 3778|  5.07k|  if(Curl_timeouts_has(data)) {
  ------------------
  |  Branch (3778:6): [True: 2.53k, False: 2.53k]
  ------------------
 3779|       |    /* data has already a timeout registered. If the first timer
 3780|       |     * was NOT the one we just set AND is still the first one,
 3781|       |     * nothing changed from the timeouts point of view. The
 3782|       |     * set timer triggers after the one already registered. Leave. */
 3783|  2.53k|    if((prev_id != eid) && (prev_id == timeouts->first))
  ------------------
  |  Branch (3783:8): [True: 2.53k, False: 0]
  |  Branch (3783:28): [True: 2.53k, False: 0]
  ------------------
 3784|  2.53k|      return;
 3785|       |
 3786|       |    /* Since this is an updated time, we must remove data from
 3787|       |     * timeouts and then add it again. */
 3788|      0|    Curl_timeouts_remove(&multi->timeouts, data);
 3789|      0|  }
 3790|       |
 3791|       |  /* Insert the new timer expiry since it is our local minimum. */
 3792|  2.53k|  Curl_timeouts_add(&multi->timeouts, data,
 3793|  2.53k|                    timeouts->offset_us[timeouts->first]);
 3794|  2.53k|}
Curl_expire_clear:
 3800|  2.03k|{
 3801|       |  /* remove the timer, if there */
 3802|  2.03k|  multi_clear_timeout(data, eid);
 3803|  2.03k|  CURL_TRC_TIMER(data, eid, "cleared");
  ------------------
  |  |  173|  2.03k|  do {                                        \
  |  |  174|  2.03k|    if(CURL_TRC_TIMER_is_verbose(data))       \
  |  |  ------------------
  |  |  |  |  139|  2.03k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_timer)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.03k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.03k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 2.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  175|  2.03k|      Curl_trc_timer(data, tid, __VA_ARGS__); \
  |  |  176|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (176:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
 3804|  2.03k|}
Curl_expire_clear_all:
 3810|  10.1k|{
 3811|  10.1k|  struct Curl_multi *multi = data->multi;
 3812|       |
 3813|       |  /* this is only interesting while there is still an associated multi struct
 3814|       |     remaining! */
 3815|  10.1k|  if(!multi)
  ------------------
  |  Branch (3815:6): [True: 5.07k, False: 5.07k]
  ------------------
 3816|  5.07k|    return;
 3817|       |
 3818|  5.07k|  if(Curl_timeouts_remove(&multi->timeouts, data)) {
  ------------------
  |  Branch (3818:6): [True: 2.53k, False: 2.53k]
  ------------------
 3819|       |    /* Since this is an cleared time, we must remove the previous entry from
 3820|       |       the splay tree */
 3821|  2.53k|    multi_timeouts_init(data);
 3822|       |
 3823|  2.53k|    if(data->id >= 0)
  ------------------
  |  Branch (3823:8): [True: 2.53k, False: 0]
  ------------------
 3824|  2.53k|      CURL_TRC_M(data, "[TIMEOUT] all cleared");
  ------------------
  |  |  148|  2.53k|  do {                                   \
  |  |  149|  2.53k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  2.53k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.53k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  5.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.53k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 2.53k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  5.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 2.53k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|  2.53k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.53k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|  2.53k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 2.53k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  2.53k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
 3825|  2.53k|  }
 3826|  5.07k|}
Curl_multi_get_easy:
 4159|  5.07k|{
 4160|  5.07k|  struct Curl_easy *data = Curl_uint32_tbl_get(&multi->xfers, mid);
 4161|  5.07k|  if(GOOD_EASY_HANDLE(data))
  ------------------
  |  |   34|  5.07k|  (((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER)) ? TRUE : \
  |  |  ------------------
  |  |  |  |   28|  5.07k|#define CURLEASY_MAGIC_NUMBER 0xc0dedbadU
  |  |  ------------------
  |  |                 (((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER)) ? TRUE : \
  |  |  ------------------
  |  |  |  | 1045|  5.07k|#define TRUE true
  |  |  ------------------
  |  |  |  Branch (34:3): [True: 5.07k, False: 0]
  |  |  |  Branch (34:5): [True: 5.07k, False: 0]
  |  |  |  Branch (34:12): [True: 5.07k, False: 0]
  |  |  ------------------
  |  |   35|  5.07k|   (DEBUGASSERT(!(x)), FALSE))
  |  |  ------------------
  |  |  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |                  (DEBUGASSERT(!(x)), FALSE))
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  ------------------
  |  Branch (4161:6): [True: 0, False: 0]
  |  Branch (4161:6): [True: 0, False: 0]
  ------------------
 4162|  5.07k|    return data;
 4163|      0|  CURL_TRC_M(multi->admin, "invalid easy handle in xfer table for mid=%u",
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 4164|      0|             mid);
 4165|      0|  Curl_uint32_tbl_remove(&multi->xfers, mid);
 4166|       |  return NULL;
 4167|  5.07k|}
Curl_multi_xfers_running:
 4175|  2.53k|{
 4176|  2.53k|  if(!multi) {
  ------------------
  |  Branch (4176:6): [True: 0, False: 2.53k]
  ------------------
 4177|      0|    DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (4177:5): [Folded, False: 0]
  |  Branch (4177:5): [Folded, False: 0]
  ------------------
 4178|      0|    return 0;
 4179|      0|  }
 4180|  2.53k|  return multi->xfers_alive;
 4181|  2.53k|}
Curl_multi_mark_dirty:
 4194|  2.53k|{
 4195|  2.53k|  if(data->multi && data->mid != UINT32_MAX)
  ------------------
  |  Branch (4195:6): [True: 2.53k, False: 0]
  |  Branch (4195:21): [True: 2.53k, False: 0]
  ------------------
 4196|  2.53k|    Curl_uint32_bset_add(&data->multi->dirty, data->mid);
 4197|  2.53k|}
multi.c:multi_xfers_add:
  415|  2.53k|{
  416|  2.53k|  uint32_t capacity = Curl_uint32_tbl_capacity(&multi->xfers);
  417|  2.53k|  uint32_t new_size = 0;
  418|       |  /* Prepare to make this into a CURLMOPT_MAX_TRANSFERS, because some
  419|       |   * applications may want to prevent a run-away of their memory use. */
  420|       |  /* UINT_MAX is our "invalid" id, do not let the table grow up to that. */
  421|  2.53k|  const uint32_t max_capacity = UINT_MAX - 1;
  422|       |
  423|  2.53k|  if(capacity < max_capacity) {
  ------------------
  |  Branch (423:6): [True: 2.53k, False: 0]
  ------------------
  424|       |    /* We want `multi->xfers` to have "sufficient" free rows, so that we do
  425|       |     * not have to reuse the `mid` from a removed easy right away.
  426|       |     * Check if an 8th of the capacity is still free */
  427|  2.53k|    uint32_t used = Curl_uint32_tbl_count(&multi->xfers);
  428|  2.53k|    uint32_t unused = capacity - used;
  429|  2.53k|    uint32_t min_unused = CURLMAX(capacity >> 3, 4);
  ------------------
  |  | 1287|  2.53k|#define CURLMAX(x, y) ((x) > (y) ? (x) : (y))
  |  |  ------------------
  |  |  |  Branch (1287:24): [True: 2.53k, False: 0]
  |  |  ------------------
  ------------------
  430|  2.53k|    if(unused < min_unused) {
  ------------------
  |  Branch (430:8): [True: 0, False: 2.53k]
  ------------------
  431|       |      /* Grow by 50% of current capacity, in range of [128, 2048],
  432|       |       * which means the table grows max by 16kb on 64-bit arch. */
  433|      0|      uint32_t growth = CURLMIN(CURLMAX(capacity >> 1, 128), 2048);
  ------------------
  |  | 1288|      0|#define CURLMIN(x, y) ((x) < (y) ? (x) : (y))
  |  |  ------------------
  |  |  |  Branch (1288:24): [True: 0, False: 0]
  |  |  |  Branch (1288:25): [True: 0, False: 0]
  |  |  |  Branch (1288:37): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  434|       |      /* Make sure the uint arithmetic here works on the corner
  435|       |       * cases where we are close to max_capacity or UINT_MAX */
  436|      0|      if((max_capacity - growth) <= capacity)
  ------------------
  |  Branch (436:10): [True: 0, False: 0]
  ------------------
  437|      0|        new_size = max_capacity;
  438|      0|      else
  439|      0|        new_size = capacity + growth;
  440|      0|    }
  441|  2.53k|  }
  442|       |
  443|  2.53k|  if(new_size > capacity) {
  ------------------
  |  Branch (443:6): [True: 0, False: 2.53k]
  ------------------
  444|       |    /* Grow the bitsets first. Should one fail, we do not need
  445|       |     * to downsize the already resized ones. The sets continue
  446|       |     * to work properly when larger than the table, but not
  447|       |     * the other way around. */
  448|      0|    CURL_TRC_M(data, "increasing xfer table size to %u", new_size);
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  449|      0|    if(Curl_uint32_bset_resize(&multi->process, new_size) ||
  ------------------
  |  Branch (449:8): [True: 0, False: 0]
  ------------------
  450|      0|       Curl_uint32_bset_resize(&multi->dirty, new_size) ||
  ------------------
  |  Branch (450:8): [True: 0, False: 0]
  ------------------
  451|      0|       Curl_uint32_bset_resize(&multi->pending, new_size) ||
  ------------------
  |  Branch (451:8): [True: 0, False: 0]
  ------------------
  452|      0|       Curl_uint32_bset_resize(&multi->msgsent, new_size) ||
  ------------------
  |  Branch (452:8): [True: 0, False: 0]
  ------------------
  453|      0|       Curl_uint32_tbl_resize(&multi->xfers, new_size))
  ------------------
  |  Branch (453:8): [True: 0, False: 0]
  ------------------
  454|      0|      return CURLM_OUT_OF_MEMORY;
  455|      0|  }
  456|       |
  457|       |  /* Insert the easy into the table now */
  458|  2.53k|  if(!Curl_uint32_tbl_add(&multi->xfers, data, &data->mid)) {
  ------------------
  |  Branch (458:6): [True: 0, False: 2.53k]
  ------------------
  459|       |    /* MUST only happen when table is full */
  460|      0|    DEBUGASSERT(Curl_uint32_tbl_capacity(&multi->xfers) <=
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (460:5): [True: 0, False: 0]
  |  Branch (460:5): [True: 0, False: 0]
  ------------------
  461|      0|                Curl_uint32_tbl_count(&multi->xfers));
  462|      0|    return CURLM_OUT_OF_MEMORY;
  463|      0|  }
  464|  2.53k|  return CURLM_OK;
  465|  2.53k|}
multi.c:mstate:
  155|  22.5k|{
  156|  22.5k|  CURLMstate oldstate = data->mstate;
  157|  22.5k|  static const mstate_enter_func state_enter[MSTATE_LAST] = {
  158|  22.5k|    NULL,                      /* INIT */
  159|  22.5k|    NULL,                      /* PENDING */
  160|  22.5k|    NULL,                      /* SETUP */
  161|  22.5k|    mstate_enter_connect,      /* CONNECT */
  162|  22.5k|    NULL,                      /* CONNECTING */
  163|  22.5k|    NULL,                      /* PROTOCONNECT */
  164|  22.5k|    NULL,                      /* PROTOCONNECTING */
  165|  22.5k|    NULL,                      /* DO */
  166|  22.5k|    NULL,                      /* DOING */
  167|  22.5k|    NULL,                      /* DOING_MORE */
  168|  22.5k|    mstate_enter_did,          /* DID */
  169|  22.5k|    NULL,                      /* PERFORMING */
  170|  22.5k|    NULL,                      /* RATELIMITING */
  171|  22.5k|    mstate_enter_done,         /* DONE */
  172|  22.5k|    mstate_enter_completed,    /* COMPLETED */
  173|       |    NULL                       /* MSGSENT */
  174|  22.5k|  };
  175|       |
  176|  22.5k|  if(oldstate == state)
  ------------------
  |  Branch (176:6): [True: 2.53k, False: 19.9k]
  ------------------
  177|       |    /* do not bother when the new state is the same as the old state */
  178|  2.53k|    return;
  179|       |
  180|  19.9k|#ifdef DEBUGBUILD
  181|  19.9k|  NOVERBOSE((void)lineno);
  ------------------
  |  | 1612|  19.9k|#define NOVERBOSE(x) Curl_nop_stmt
  |  |  ------------------
  |  |  |  | 1183|  19.9k|#define Curl_nop_stmt do {} while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1183:35): [Folded, False: 19.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  182|  19.9k|  CURL_TRC_M(data, "-> [%s] (line %d)", CURL_MSTATE_NAME(state), lineno);
  ------------------
  |  |  148|  19.9k|  do {                                   \
  |  |  149|  19.9k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  19.9k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  19.9k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  39.9k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 19.9k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 19.9k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  39.9k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 19.9k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|  19.9k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  19.9k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|  19.9k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 19.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  19.9k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|  19.9k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 19.9k]
  |  |  ------------------
  ------------------
  183|       |#else
  184|       |  CURL_TRC_M(data, "-> [%s]", CURL_MSTATE_NAME(state));
  185|       |#endif
  186|       |
  187|       |  /* really switching state */
  188|  19.9k|  data->mstate = state;
  189|  19.9k|  if(state_enter[state])
  ------------------
  |  Branch (189:6): [True: 8.79k, False: 11.1k]
  ------------------
  190|  8.79k|    state_enter[state](data, oldstate);
  191|  19.9k|}
multi.c:mstate_enter_connect:
   99|  2.53k|{
  100|  2.53k|  (void)from_state;
  101|  2.53k|  Curl_init_CONNECT(data);
  102|  2.53k|}
multi.c:mstate_enter_did:
  106|  1.86k|{
  107|  1.86k|  (void)from_state;
  108|  1.86k|  data->req.chunk = FALSE;
  ------------------
  |  | 1048|  1.86k|#define FALSE false
  ------------------
  109|  1.86k|  Curl_pgrsTime(data, TIMER_PRETRANSFER);
  110|  1.86k|  if(!CURL_REQ_WANT_SEND(data))
  ------------------
  |  |   39|  1.86k|#define CURL_REQ_WANT_SEND(d)  ((d)->req.io_flags & REQ_IO_SEND)
  |  |  ------------------
  |  |  |  |   36|  1.86k|#define REQ_IO_SEND       (1 << 1) /* there is or may be data to write */
  |  |  ------------------
  ------------------
  |  Branch (110:6): [True: 1.86k, False: 0]
  ------------------
  111|  1.86k|    Curl_pgrsTime(data, TIMER_POSTRANSFER);
  112|  1.86k|}
multi.c:mstate_enter_done:
  116|  1.86k|{
  117|  1.86k|  (void)from_state;
  118|  1.86k|  CURLM_NTFY(data, CURLMNOTIFY_EASY_DONE);
  ------------------
  |  |   51|  1.86k|  do {                                                \
  |  |   52|  1.86k|    if((d) && (d)->multi && (d)->multi->ntfy.ntfy_cb) \
  |  |  ------------------
  |  |  |  Branch (52:8): [True: 1.86k, False: 0]
  |  |  |  Branch (52:15): [True: 1.86k, False: 0]
  |  |  |  Branch (52:29): [True: 0, False: 1.86k]
  |  |  ------------------
  |  |   53|  1.86k|      Curl_mntfy_add((d), (t));                       \
  |  |   54|  1.86k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (54:11): [Folded, False: 1.86k]
  |  |  ------------------
  ------------------
  119|  1.86k|}
multi.c:mstate_enter_completed:
  123|  2.53k|{
  124|       |  /* we sometimes directly jump to COMPLETED, trigger things
  125|       |   * we then missed. */
  126|  2.53k|  if(from_state < MSTATE_DID) {
  ------------------
  |  Branch (126:6): [True: 679, False: 1.86k]
  ------------------
  127|    679|    Curl_pgrsTime(data, TIMER_PRETRANSFER);
  128|    679|    Curl_pgrsTime(data, TIMER_POSTRANSFER);
  129|    679|    Curl_pgrsTime(data, TIMER_STARTTRANSFER);
  130|    679|  }
  131|  2.53k|  Curl_pgrsCompleted(data);
  132|  2.53k|  if(from_state < MSTATE_DONE)
  ------------------
  |  Branch (132:6): [True: 679, False: 1.86k]
  ------------------
  133|    679|    CURLM_NTFY(data, CURLMNOTIFY_EASY_DONE);
  ------------------
  |  |   51|    679|  do {                                                \
  |  |   52|    679|    if((d) && (d)->multi && (d)->multi->ntfy.ntfy_cb) \
  |  |  ------------------
  |  |  |  Branch (52:8): [True: 679, False: 0]
  |  |  |  Branch (52:15): [True: 679, False: 0]
  |  |  |  Branch (52:29): [True: 0, False: 679]
  |  |  ------------------
  |  |   53|    679|      Curl_mntfy_add((d), (t));                       \
  |  |   54|    679|  } while(0)
  |  |  ------------------
  |  |  |  Branch (54:11): [Folded, False: 679]
  |  |  ------------------
  ------------------
  134|       |  /* changing to COMPLETED means it is in process and needs to go */
  135|  2.53k|  DEBUGASSERT(Curl_uint32_bset_contains(&data->multi->process, data->mid));
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (135:3): [True: 0, False: 2.53k]
  |  Branch (135:3): [True: 2.53k, False: 0]
  ------------------
  136|  2.53k|  Curl_uint32_bset_remove(&data->multi->process, data->mid);
  137|  2.53k|  Curl_uint32_bset_remove(&data->multi->pending, data->mid); /* to be sure */
  138|       |
  139|  2.53k|  if(Curl_uint32_bset_empty(&data->multi->process)) {
  ------------------
  |  Branch (139:6): [True: 0, False: 2.53k]
  ------------------
  140|       |    /* free the transfer buffer when we have no more active transfers */
  141|      0|    multi_xfer_bufs_free(data->multi);
  142|      0|  }
  143|       |  /* Important: reset the conn pointer so that we do not point to memory
  144|       |     that could be freed anytime */
  145|  2.53k|  Curl_detach_connection(data);
  146|  2.53k|  Curl_expire_clear_all(data); /* stop all timers */
  147|  2.53k|}
multi.c:multi_warn_debug:
  385|  7.61k|{
  386|  7.61k|  if(!multi->warned) {
  ------------------
  |  Branch (386:6): [True: 2.53k, False: 5.07k]
  ------------------
  387|  2.53k|    infof(data, "!!! WARNING !!!");
  ------------------
  |  |  143|  2.53k|  do {                               \
  |  |  144|  2.53k|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|  2.53k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 2.53k, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 2.53k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|  2.53k|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 2.53k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|  2.53k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|  2.53k|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
  388|  2.53k|    infof(data, "This is a debug build of libcurl, "
  ------------------
  |  |  143|  2.53k|  do {                               \
  |  |  144|  2.53k|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|  2.53k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 2.53k, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 2.53k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|  2.53k|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 2.53k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|  2.53k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|  2.53k|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
  389|  2.53k|                "do not use in production.");
  390|       |    multi->warned = TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  391|  2.53k|  }
  392|  7.61k|}
multi.c:multi_done:
  688|  2.03k|{
  689|  2.03k|  CURLcode result;
  690|  2.03k|  struct connectdata *conn = data->conn;
  691|       |
  692|  2.03k|  CURL_TRC_M(data, "multi_done: status: %d prem: %d done: %d",
  ------------------
  |  |  148|  2.03k|  do {                                   \
  |  |  149|  2.03k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  2.03k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.03k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.03k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 2.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  2.03k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  693|  2.03k|             (int)status, (int)premature, data->state.done);
  694|       |
  695|  2.03k|  if(data->state.done)
  ------------------
  |  Branch (695:6): [True: 0, False: 2.03k]
  ------------------
  696|       |    /* Stop if multi_done() has already been called */
  697|      0|    return CURLE_OK;
  698|       |
  699|       |  /* Shut down any ongoing async resolver operation. */
  700|  2.03k|  Curl_resolv_shutdown_all(data);
  701|       |
  702|       |  /* Cleanup possible redirect junk */
  703|  2.03k|  curlx_safefree(data->req.newurl);
  ------------------
  |  | 1332|  2.03k|  do {                      \
  |  | 1333|  2.03k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  2.03k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.03k|    (ptr) = NULL;           \
  |  | 1335|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  704|  2.03k|  curlx_safefree(data->req.location);
  ------------------
  |  | 1332|  2.03k|  do {                      \
  |  | 1333|  2.03k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  2.03k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.03k|    (ptr) = NULL;           \
  |  | 1335|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  705|       |
  706|  2.03k|  switch(status) {
  707|      0|  case CURLE_ABORTED_BY_CALLBACK:
  ------------------
  |  Branch (707:3): [True: 0, False: 2.03k]
  ------------------
  708|      0|  case CURLE_READ_ERROR:
  ------------------
  |  Branch (708:3): [True: 0, False: 2.03k]
  ------------------
  709|      0|  case CURLE_WRITE_ERROR:
  ------------------
  |  Branch (709:3): [True: 0, False: 2.03k]
  ------------------
  710|       |    /* When we are aborted due to a callback return code it has to be counted
  711|       |       as premature as there is trouble ahead if we do not. We have many
  712|       |       callbacks and protocols work differently, we could potentially do this
  713|       |       more fine-grained in the future. */
  714|      0|    premature = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  715|      0|    FALLTHROUGH();
  ------------------
  |  |  815|      0|#  define FALLTHROUGH()  __attribute__((fallthrough))
  ------------------
  716|  2.03k|  default:
  ------------------
  |  Branch (716:3): [True: 2.03k, False: 0]
  ------------------
  717|  2.03k|    break;
  718|  2.03k|  }
  719|       |
  720|       |  /* this calls the protocol-specific function pointer previously set */
  721|  2.03k|  if(conn && conn->scheme->run->done && (data->mstate >= MSTATE_PROTOCONNECT))
  ------------------
  |  Branch (721:6): [True: 2.03k, False: 0]
  |  Branch (721:14): [True: 2.03k, False: 0]
  |  Branch (721:41): [True: 2.03k, False: 0]
  ------------------
  722|  2.03k|    result = conn->scheme->run->done(data, status, premature);
  723|      0|  else
  724|      0|    result = status;
  725|       |
  726|  2.03k|  if(data->mstate > MSTATE_CONNECTING &&
  ------------------
  |  Branch (726:6): [True: 2.03k, False: 0]
  ------------------
  727|  2.03k|     (result != CURLE_ABORTED_BY_CALLBACK)) {
  ------------------
  |  Branch (727:6): [True: 2.03k, False: 0]
  ------------------
  728|       |    /* avoid this if
  729|       |     * - the transfer has not connected
  730|       |     * - we already aborted by callback to avoid this calling another callback
  731|       |     */
  732|  2.03k|    int rc = Curl_pgrsDone(data);
  733|  2.03k|    if(!result && rc)
  ------------------
  |  Branch (733:8): [True: 2.03k, False: 0]
  |  Branch (733:19): [True: 0, False: 2.03k]
  ------------------
  734|      0|      result = CURLE_ABORTED_BY_CALLBACK;
  735|  2.03k|  }
  736|       |
  737|       |  /* Make sure that transfer client writes are really done now. */
  738|  2.03k|  result = Curl_1st_fatal(result, Curl_xfer_write_done(data, premature));
  739|       |
  740|       |  /* Inform connection filters that this transfer is done */
  741|  2.03k|  if(conn)
  ------------------
  |  Branch (741:6): [True: 2.03k, False: 0]
  ------------------
  742|  2.03k|    Curl_conn_ev_data_done(data, premature);
  743|       |
  744|  2.03k|  multi_schedule_pending(data->multi); /* connection / multiplex */
  745|       |
  746|  2.03k|  if(!result)
  ------------------
  |  Branch (746:6): [True: 2.03k, False: 0]
  ------------------
  747|  2.03k|    result = Curl_req_done(&data->req, data, premature);
  748|       |
  749|  2.03k|  if(conn) {
  ------------------
  |  Branch (749:6): [True: 2.03k, False: 0]
  ------------------
  750|       |    /* Under the potential connection pool's share lock, decide what to
  751|       |     * do with the transfer's connection. */
  752|  2.03k|    struct multi_done_ctx mdctx;
  753|       |
  754|  2.03k|    memset(&mdctx, 0, sizeof(mdctx));
  755|  2.03k|    mdctx.premature = premature;
  756|  2.03k|    Curl_cpool_do_locked(data, data->conn, multi_done_locked, &mdctx);
  757|  2.03k|  }
  758|       |
  759|       |  /* flush the netrc cache */
  760|  2.03k|  Curl_netrc_cleanup(&data->state.netrc);
  761|  2.03k|  return result;
  762|  2.03k|}
multi.c:multi_done_locked:
  635|  2.03k|{
  636|  2.03k|  struct multi_done_ctx *mdctx = userdata;
  637|       |
  638|  2.03k|  Curl_detach_connection(data);
  639|       |
  640|  2.03k|  CURL_TRC_M(data, "multi_done_locked, in use=%u", conn->attached_xfers);
  ------------------
  |  |  148|  2.03k|  do {                                   \
  |  |  149|  2.03k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  2.03k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.03k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.03k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 2.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  2.03k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  641|  2.03k|  if(CONN_INUSE(conn)) {
  ------------------
  |  |  357|  2.03k|#define CONN_INUSE(c) (!!(c)->attached_xfers)
  |  |  ------------------
  |  |  |  Branch (357:23): [True: 0, False: 2.03k]
  |  |  ------------------
  ------------------
  642|       |    /* Stop if still used. */
  643|      0|    CURL_TRC_M(data, "Connection still in use %u, no more multi_done now!",
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  644|      0|               conn->attached_xfers);
  645|      0|    return;
  646|      0|  }
  647|       |
  648|  2.03k|  data->state.done = TRUE; /* called now! */
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  649|       |
  650|  2.03k|  Curl_dnscache_prune(data);
  651|       |
  652|  2.03k|  if(multi_conn_should_close(conn, data, (bool)mdctx->premature)) {
  ------------------
  |  Branch (652:6): [True: 2.03k, False: 0]
  ------------------
  653|  2.03k|    CURL_TRC_M(data, "multi_done, terminating conn #%" FMT_OFF_T " to %s:%u, "
  ------------------
  |  |  148|  2.03k|  do {                                   \
  |  |  149|  2.03k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  2.03k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.03k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.03k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 2.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  2.03k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  654|  2.03k|               "forbid=%d, close=%d, premature=%d, conn_multiplex=%d",
  655|  2.03k|               conn->connection_id, conn->origin->user_hostname,
  656|  2.03k|               conn->origin->port,
  657|  2.03k|               data->set.reuse_forbid, conn->bits.close, mdctx->premature,
  658|  2.03k|               Curl_conn_is_multiplex(conn, FIRSTSOCKET));
  659|  2.03k|    connclose(conn);
  ------------------
  |  |   90|  2.03k|#define connclose(x)   Curl_conncontrol((x), CONNCTRL_CONN_CLOSE)
  |  |  ------------------
  |  |  |  |   84|  2.03k|#define CONNCTRL_CONN_CLOSE      1
  |  |  ------------------
  ------------------
  660|  2.03k|    Curl_conn_close(data, conn, (bool)mdctx->premature);
  661|  2.03k|  }
  662|      0|  else if(!Curl_conn_get_max_concurrent(data, conn, FIRSTSOCKET)) {
  ------------------
  |  |  234|      0|#define FIRSTSOCKET     0
  ------------------
  |  Branch (662:11): [True: 0, False: 0]
  ------------------
  663|      0|    CURL_TRC_M(data, "multi_done, conn #%" FMT_OFF_T " to %s:%u was shutdown"
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  664|      0|               " by server, not reusing", conn->connection_id,
  665|      0|               conn->origin->user_hostname, conn->origin->port);
  666|      0|    connclose(conn);
  ------------------
  |  |   90|      0|#define connclose(x)   Curl_conncontrol((x), CONNCTRL_CONN_CLOSE)
  |  |  ------------------
  |  |  |  |   84|      0|#define CONNCTRL_CONN_CLOSE      1
  |  |  ------------------
  ------------------
  667|      0|    Curl_conn_close(data, conn, (bool)mdctx->premature);
  668|      0|  }
  669|      0|  else {
  670|       |    /* the connection is no longer in use by any transfer */
  671|      0|    if(Curl_cpool_conn_now_idle(data, conn)) {
  ------------------
  |  Branch (671:8): [True: 0, False: 0]
  ------------------
  672|       |      /* connection kept in the cpool */
  673|      0|      infof(data, "Connection #%" FMT_OFF_T " to host %s:%u left intact",
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  674|      0|            conn->connection_id, conn->origin->user_hostname,
  675|      0|            conn->origin->port);
  676|      0|    }
  677|      0|    else {
  678|       |      /* connection was removed from the cpool and destroyed. */
  679|      0|      data->state.lastconnect_id = -1;
  680|      0|    }
  681|      0|  }
  682|  2.03k|}
multi.c:multi_conn_should_close:
  594|  2.03k|{
  595|       |  /* if conn->bits.close is TRUE, it means that the connection should be
  596|       |     closed in spite of everything else. */
  597|  2.03k|  if(conn->bits.close)
  ------------------
  |  Branch (597:6): [True: 0, False: 2.03k]
  ------------------
  598|      0|    return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  599|       |
  600|       |  /* if data->set.reuse_forbid is TRUE, it means the libcurl client has
  601|       |     forced us to close this connection. This is ignored for requests taking
  602|       |     place in a NTLM/NEGOTIATE authentication handshake. */
  603|  2.03k|  if(data->set.reuse_forbid
  ------------------
  |  Branch (603:6): [True: 0, False: 2.03k]
  ------------------
  604|       |#ifdef USE_NTLM
  605|       |     && !(conn->http_ntlm_state == NTLMSTATE_TYPE2 ||
  606|       |          conn->proxy_ntlm_state == NTLMSTATE_TYPE2)
  607|       |#endif
  608|       |#ifdef USE_SPNEGO
  609|       |     && !(conn->http_negotiate_state == GSS_AUTHRECV ||
  610|       |          conn->proxy_negotiate_state == GSS_AUTHRECV)
  611|       |#endif
  612|  2.03k|    )
  613|      0|    return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  614|       |
  615|       |  /* Unless this connection is for a "connect-only" transfer, it
  616|       |   * needs to be closed if the protocol handler does not support reuse. */
  617|  2.03k|  if(!data->set.connect_only && conn->scheme &&
  ------------------
  |  Branch (617:6): [True: 2.03k, False: 0]
  |  Branch (617:33): [True: 2.03k, False: 0]
  ------------------
  618|  2.03k|     !(conn->scheme->flags & PROTOPT_CONN_REUSE))
  ------------------
  |  |  237|  2.03k|#define PROTOPT_CONN_REUSE (1 << 16)  /* this protocol can reuse connections */
  ------------------
  |  Branch (618:6): [True: 2.03k, False: 0]
  ------------------
  619|  2.03k|    return TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  620|       |
  621|       |  /* if premature is TRUE, it means this connection was said to be DONE before
  622|       |     the entire request operation is complete and thus we cannot know in what
  623|       |     state it is for reusing, so we are forced to close it. In a perfect world
  624|       |     we can add code that keep track of if we really must close it here or not,
  625|       |     but currently we have no such detail knowledge. */
  626|      0|  if(premature && !Curl_conn_is_multiplex(conn, FIRSTSOCKET))
  ------------------
  |  |  234|      0|#define FIRSTSOCKET     0
  ------------------
  |  Branch (626:6): [True: 0, False: 0]
  |  Branch (626:19): [True: 0, False: 0]
  ------------------
  627|      0|    return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  628|       |
  629|      0|  return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  630|      0|}
multi.c:multi_assess_wakeup:
  403|  10.1k|{
  404|  10.1k|#ifdef ENABLE_INTERNAL_WAKEUP
  405|  10.1k|  if(multi->socket_cb)
  ------------------
  |  Branch (405:6): [True: 0, False: 10.1k]
  ------------------
  406|      0|    return Curl_multi_ev_assess_xfer(multi, multi->admin);
  407|       |#else
  408|       |  (void)multi;
  409|       |#endif
  410|  10.1k|  return CURLM_OK;
  411|  10.1k|}
multi.c:multi_perform:
 2909|  2.53k|{
 2910|  2.53k|  CURLMcode returncode = CURLM_OK;
 2911|  2.53k|  struct curltime start = *multi_now(multi);
 2912|  2.53k|  uint32_t mid;
 2913|  2.53k|  struct Curl_sigpipe_ctx sigpipe_ctx;
 2914|       |
 2915|  2.53k|  sigpipe_init(&sigpipe_ctx);
 2916|       |
 2917|  2.53k|  if(Curl_uint32_bset_first(&multi->process, &mid)) {
  ------------------
  |  Branch (2917:6): [True: 2.53k, False: 0]
  ------------------
 2918|  2.53k|    CURL_TRC_M(multi->admin, "multi_perform(running=%u)",
  ------------------
  |  |  148|  2.53k|  do {                                   \
  |  |  149|  2.53k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  2.53k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.53k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  5.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.53k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 2.53k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  5.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.53k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  2.53k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
 2919|  2.53k|               Curl_multi_xfers_running(multi));
 2920|  5.07k|    do {
 2921|  5.07k|      struct Curl_easy *data = Curl_multi_get_easy(multi, mid);
 2922|  5.07k|      CURLMcode mresult;
 2923|  5.07k|      if(!data) {
  ------------------
  |  Branch (2923:10): [True: 0, False: 5.07k]
  ------------------
 2924|      0|        DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (2924:9): [Folded, False: 0]
  |  Branch (2924:9): [Folded, False: 0]
  ------------------
 2925|      0|        Curl_uint32_bset_remove(&multi->process, mid);
 2926|      0|        Curl_uint32_bset_remove(&multi->dirty, mid);
 2927|      0|        continue;
 2928|      0|      }
 2929|  5.07k|      mresult = multi_runsingle(multi, data, &sigpipe_ctx);
 2930|  5.07k|      if(mresult)
  ------------------
  |  Branch (2930:10): [True: 0, False: 5.07k]
  ------------------
 2931|      0|        returncode = mresult;
 2932|  5.07k|    } while(Curl_uint32_bset_next(&multi->process, mid, &mid));
  ------------------
  |  Branch (2932:13): [True: 2.53k, False: 2.53k]
  ------------------
 2933|  2.53k|  }
 2934|  2.53k|  sigpipe_restore(&sigpipe_ctx);
 2935|       |
 2936|  2.53k|  if(multi_ischanged(multi, TRUE))
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  |  Branch (2936:6): [True: 2.03k, False: 504]
  ------------------
 2937|  2.03k|    multi_schedule_pending(multi);
 2938|       |
 2939|  2.53k|  if(!returncode && CURL_MNTFY_HAS_ENTRIES(multi))
  ------------------
  |  |   56|  2.53k|#define CURL_MNTFY_HAS_ENTRIES(m)       ((m)->ntfy.has_entries)
  |  |  ------------------
  |  |  |  Branch (56:41): [True: 0, False: 2.53k]
  |  |  ------------------
  ------------------
  |  Branch (2939:6): [True: 2.53k, False: 0]
  ------------------
 2940|      0|    returncode = Curl_mntfy_dispatch_all(multi);
 2941|       |
 2942|       |  /*
 2943|       |   * Remove all expired timers from the splay since handles are dealt
 2944|       |   * with unconditionally by this function and curl_multi_timeout() requires
 2945|       |   * that already passed/handled expire times are removed from the splay.
 2946|       |   *
 2947|       |   * It is important that the 'now' value is set at the entry of this function
 2948|       |   * and not for the current time as it may have ticked a little while since
 2949|       |   * then and then we risk this loop to remove timers that actually have not
 2950|       |   * been handled!
 2951|       |   */
 2952|  2.53k|  while(Curl_timeouts_remove_expired(&multi->timeouts, &start, &mid)) {
  ------------------
  |  Branch (2952:9): [True: 0, False: 2.53k]
  ------------------
 2953|       |    /* the removed may have another timeout in queue */
 2954|      0|    struct Curl_easy *data = Curl_multi_get_easy(multi, mid);
 2955|      0|    if(!data) {
  ------------------
  |  Branch (2955:8): [True: 0, False: 0]
  ------------------
 2956|      0|      DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (2956:7): [Folded, False: 0]
  |  Branch (2956:7): [Folded, False: 0]
  ------------------
 2957|      0|      continue;
 2958|      0|    }
 2959|      0|    (void)add_next_timeout(&start, multi, data);
 2960|      0|    if(data->mstate == MSTATE_PENDING) {
  ------------------
  |  Branch (2960:8): [True: 0, False: 0]
  ------------------
 2961|      0|      bool stream_unused;
 2962|      0|      CURLcode result_unused;
 2963|      0|      if(multi_handle_timeout(data, multi_now(multi),
  ------------------
  |  Branch (2963:10): [True: 0, False: 0]
  ------------------
 2964|      0|                              &stream_unused, &result_unused)) {
 2965|      0|        infof(data, "PENDING handle timeout");
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2966|      0|        move_pending_to_connect(multi, data);
 2967|      0|      }
 2968|      0|    }
 2969|      0|  }
 2970|       |
 2971|  2.53k|  if(running_handles) {
  ------------------
  |  Branch (2971:6): [True: 2.53k, False: 0]
  ------------------
 2972|  2.53k|    uint32_t running = Curl_multi_xfers_running(multi);
 2973|  2.53k|    *running_handles = (running < INT_MAX) ? (int)running : INT_MAX;
  ------------------
  |  Branch (2973:24): [True: 2.53k, False: 0]
  ------------------
 2974|  2.53k|  }
 2975|       |
 2976|  2.53k|  if(CURLM_OK >= returncode)
  ------------------
  |  Branch (2976:6): [True: 2.53k, False: 0]
  ------------------
 2977|  2.53k|    returncode = Curl_update_timer(multi);
 2978|       |
 2979|  2.53k|  return returncode;
 2980|  2.53k|}
multi.c:multi_now:
   88|  2.53k|{
   89|  2.53k|  curlx_pnow(&multi->now);
   90|  2.53k|  return &multi->now;
   91|  2.53k|}
multi.c:multi_runsingle:
 2731|  5.07k|{
 2732|  5.07k|  CURLMcode mresult = CURLM_OK;
 2733|  5.07k|  CURLcode result = CURLE_OK;
 2734|  5.07k|  const struct curltime *pnow = NULL;
 2735|       |
 2736|  5.07k|  if(multi->dead) {
  ------------------
  |  Branch (2736:6): [True: 0, False: 5.07k]
  ------------------
 2737|       |    /* a multi-level callback returned error before, meaning every individual
 2738|       |     transfer now has failed */
 2739|      0|    result = CURLE_ABORTED_BY_CALLBACK;
 2740|      0|    multi_posttransfer(data);
 2741|      0|    multi_done(data, result, FALSE);
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 2742|      0|    multistate(data, MSTATE_COMPLETED);
  ------------------
  |  |  196|      0|#define multistate(x, y) mstate(x, y, __LINE__)
  ------------------
 2743|      0|  }
 2744|       |
 2745|  5.07k|  multi_warn_debug(multi, data);
 2746|       |
 2747|       |  /* transfer runs now, clear the dirty bit. This may be set
 2748|       |   * again during processing, triggering a re-run later. */
 2749|  5.07k|  Curl_uint32_bset_remove(&multi->dirty, data->mid);
 2750|       |
 2751|  5.07k|  if(data == multi->admin) {
  ------------------
  |  Branch (2751:6): [True: 2.53k, False: 2.53k]
  ------------------
 2752|  2.53k|#ifdef ENABLE_INTERNAL_WAKEUP
 2753|       |    /* Consume any pending wakeup signals before processing.
 2754|       |     * This is necessary for event based processing. See #21547 */
 2755|  2.53k|    (void)Curl_wakeup_consume(multi->wakeup_internal, TRUE);
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
 2756|  2.53k|#endif
 2757|  2.53k|#ifdef USE_RESOLV_THREADED
 2758|  2.53k|    Curl_async_thrdd_multi_process(multi);
 2759|  2.53k|#endif
 2760|  2.53k|    Curl_cshutdn_perform(&multi->cshutdn, sigpipe_ctx);
 2761|  2.53k|    goto out;
 2762|  2.53k|  }
 2763|       |
 2764|  2.53k|  sigpipe_apply(data, sigpipe_ctx);
 2765|  17.4k|  do {
 2766|       |    /* A "stream" here is a logical stream if the protocol can handle that
 2767|       |       (HTTP/2), or the full connection for older protocols */
 2768|  17.4k|    bool stream_error = FALSE;
  ------------------
  |  | 1048|  17.4k|#define FALSE false
  ------------------
 2769|  17.4k|    mresult = CURLM_OK;
 2770|  17.4k|    pnow = NULL;
 2771|       |
 2772|  17.4k|    if(multi_ischanged(multi, TRUE)) {
  ------------------
  |  | 1045|  17.4k|#define TRUE true
  ------------------
  |  Branch (2772:8): [True: 0, False: 17.4k]
  ------------------
 2773|      0|      CURL_TRC_M(data, "multi changed, check CONNECT_PEND queue");
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2774|      0|      multi_schedule_pending(multi); /* multiplexed */
 2775|      0|    }
 2776|       |
 2777|  17.4k|    if(data->mstate > MSTATE_CONNECT &&
  ------------------
  |  Branch (2777:8): [True: 9.82k, False: 7.61k]
  ------------------
 2778|  9.82k|       data->mstate < MSTATE_COMPLETED) {
  ------------------
  |  Branch (2778:8): [True: 9.82k, False: 0]
  ------------------
 2779|       |      /* Make sure we set the connection's current owner */
 2780|  9.82k|      DEBUGASSERT(data->conn);
  ------------------
  |  | 1075|  9.82k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (2780:7): [True: 0, False: 9.82k]
  |  Branch (2780:7): [True: 9.82k, False: 0]
  ------------------
 2781|  9.82k|      if(!data->conn) {
  ------------------
  |  Branch (2781:10): [True: 0, False: 9.82k]
  ------------------
 2782|      0|        mresult = CURLM_INTERNAL_ERROR;
 2783|      0|        goto out;
 2784|      0|      }
 2785|  9.82k|    }
 2786|       |
 2787|       |    /* Wait for the connect state as only then is the start time stored, but
 2788|       |       we must not check already completed handles */
 2789|  17.4k|    if((data->mstate >= MSTATE_CONNECT) && (data->mstate < MSTATE_COMPLETED)) {
  ------------------
  |  Branch (2789:8): [True: 12.3k, False: 5.07k]
  |  Branch (2789:44): [True: 12.3k, False: 0]
  ------------------
 2790|  12.3k|      pnow = Curl_pgrs_now(data);
 2791|  12.3k|      if(multi_handle_timeout(data, pnow, &stream_error, &result))
  ------------------
  |  Branch (2791:10): [True: 0, False: 12.3k]
  ------------------
 2792|       |        /* Skip the statemachine and go directly to error handling section. */
 2793|      0|        goto statemachine_end;
 2794|  12.3k|      pnow = NULL;
 2795|  12.3k|    }
 2796|       |
 2797|  17.4k|    switch(data->mstate) {
 2798|  2.53k|    case MSTATE_INIT:
  ------------------
  |  Branch (2798:5): [True: 2.53k, False: 14.9k]
  ------------------
 2799|       |      /* Transitional state. init this transfer. A handle never comes back to
 2800|       |         this state. */
 2801|  2.53k|      mresult = multistate_init(data, &result);
 2802|  2.53k|      break;
 2803|       |
 2804|  2.53k|    case MSTATE_SETUP:
  ------------------
  |  Branch (2804:5): [True: 2.53k, False: 14.9k]
  ------------------
 2805|       |      /* Transitional state. Setup things for a new transfer. The handle
 2806|       |         can come back to this state on a redirect. */
 2807|  2.53k|      mresult = multistate_setup(data);
 2808|  2.53k|      break;
 2809|       |
 2810|  2.53k|    case MSTATE_CONNECT:
  ------------------
  |  Branch (2810:5): [True: 2.53k, False: 14.9k]
  ------------------
 2811|  2.53k|      mresult = multistate_connect(multi, data, &result);
 2812|  2.53k|      break;
 2813|       |
 2814|  2.03k|    case MSTATE_CONNECTING:
  ------------------
  |  Branch (2814:5): [True: 2.03k, False: 15.4k]
  ------------------
 2815|       |      /* awaiting a completion of an asynch TCP connect */
 2816|  2.03k|      mresult = multistate_connecting(data, &stream_error, &result);
 2817|  2.03k|      break;
 2818|       |
 2819|  2.03k|    case MSTATE_PROTOCONNECT:
  ------------------
  |  Branch (2819:5): [True: 2.03k, False: 15.4k]
  ------------------
 2820|  2.03k|      mresult = multistate_protoconnect(data, &stream_error, &result);
 2821|  2.03k|      break;
 2822|       |
 2823|      0|    case MSTATE_PROTOCONNECTING:
  ------------------
  |  Branch (2823:5): [True: 0, False: 17.4k]
  ------------------
 2824|       |      /* protocol-specific connect phase */
 2825|      0|      mresult = multistate_protoconnecting(data, &stream_error, &result);
 2826|      0|      break;
 2827|       |
 2828|  2.03k|    case MSTATE_DO:
  ------------------
  |  Branch (2828:5): [True: 2.03k, False: 15.4k]
  ------------------
 2829|  2.03k|      mresult = multistate_do(data, &stream_error, &result);
 2830|  2.03k|      break;
 2831|       |
 2832|      0|    case MSTATE_DOING:
  ------------------
  |  Branch (2832:5): [True: 0, False: 17.4k]
  ------------------
 2833|       |      /* we continue DOING until the DO phase is complete */
 2834|      0|      mresult = multistate_doing(data, &stream_error, &result);
 2835|      0|      break;
 2836|       |
 2837|      0|    case MSTATE_DOING_MORE:
  ------------------
  |  Branch (2837:5): [True: 0, False: 17.4k]
  ------------------
 2838|       |      /*
 2839|       |       * When we are connected, DOING MORE and then go DID
 2840|       |       */
 2841|      0|      mresult = multistate_doing_more(data, &stream_error, &result);
 2842|      0|      break;
 2843|       |
 2844|  1.86k|    case MSTATE_DID:
  ------------------
  |  Branch (2844:5): [True: 1.86k, False: 15.5k]
  ------------------
 2845|  1.86k|      mresult = multistate_did(multi, data);
 2846|  1.86k|      break;
 2847|       |
 2848|      0|    case MSTATE_RATELIMITING: /* limit-rate exceeded in either direction */
  ------------------
  |  Branch (2848:5): [True: 0, False: 17.4k]
  ------------------
 2849|      0|      mresult = multistate_ratelimiting(data, &result);
 2850|      0|      break;
 2851|       |
 2852|      0|    case MSTATE_PERFORMING:
  ------------------
  |  Branch (2852:5): [True: 0, False: 17.4k]
  ------------------
 2853|      0|      mresult = multistate_performing(data, &stream_error, &result);
 2854|      0|      break;
 2855|       |
 2856|  1.86k|    case MSTATE_DONE:
  ------------------
  |  Branch (2856:5): [True: 1.86k, False: 15.5k]
  ------------------
 2857|  1.86k|      mresult = multistate_done(data, &result);
 2858|  1.86k|      break;
 2859|       |
 2860|      0|    case MSTATE_COMPLETED:
  ------------------
  |  Branch (2860:5): [True: 0, False: 17.4k]
  ------------------
 2861|      0|      break;
 2862|       |
 2863|      0|    case MSTATE_PENDING:
  ------------------
  |  Branch (2863:5): [True: 0, False: 17.4k]
  ------------------
 2864|      0|    case MSTATE_MSGSENT:
  ------------------
  |  Branch (2864:5): [True: 0, False: 17.4k]
  ------------------
 2865|       |      /* handles in these states should NOT be in this list */
 2866|      0|      break;
 2867|       |
 2868|      0|    default:
  ------------------
  |  Branch (2868:5): [True: 0, False: 17.4k]
  ------------------
 2869|      0|      mresult = CURLM_INTERNAL_ERROR;
 2870|      0|      goto out;
 2871|  17.4k|    }
 2872|       |
 2873|  17.4k|    if(data->mstate >= MSTATE_CONNECT &&
  ------------------
  |  Branch (2873:8): [True: 14.9k, False: 2.53k]
  ------------------
 2874|  14.9k|       data->mstate < MSTATE_DO &&
  ------------------
  |  Branch (2874:8): [True: 7.11k, False: 7.79k]
  ------------------
 2875|  7.11k|       mresult != CURLM_CALL_MULTI_PERFORM &&
  ------------------
  |  Branch (2875:8): [True: 504, False: 6.60k]
  ------------------
 2876|    504|       !multi_ischanged(multi, FALSE)) {
  ------------------
  |  | 1048|    504|#define FALSE false
  ------------------
  |  Branch (2876:8): [True: 504, False: 0]
  ------------------
 2877|       |      /* We now handle stream timeouts if and only if this will be the last
 2878|       |       * loop iteration. We only check this on the last iteration to ensure
 2879|       |       * that if we know we have additional work to do immediately
 2880|       |       * (i.e. CURLM_CALL_MULTI_PERFORM == TRUE) then we should do that before
 2881|       |       * declaring the connection timed out as we may almost have a completed
 2882|       |       * connection. */
 2883|    504|      pnow = Curl_pgrs_now(data);
 2884|    504|      multi_handle_timeout(data, pnow, &stream_error, &result);
 2885|    504|    }
 2886|       |
 2887|  17.4k|statemachine_end:
 2888|  17.4k|    if(!pnow)
  ------------------
  |  Branch (2888:8): [True: 16.9k, False: 504]
  ------------------
 2889|  16.9k|      pnow = Curl_pgrs_now(data);
 2890|  17.4k|    result = is_finished(multi, data, pnow, stream_error, result);
 2891|  17.4k|    if(result)
  ------------------
  |  Branch (2891:8): [True: 679, False: 16.7k]
  ------------------
 2892|    679|      mresult = CURLM_CALL_MULTI_PERFORM;
 2893|       |
 2894|  17.4k|    if(MSTATE_COMPLETED == data->mstate) {
  ------------------
  |  Branch (2894:8): [True: 2.53k, False: 14.9k]
  ------------------
 2895|  2.53k|      handle_completed(multi, data, result);
 2896|  2.53k|      mresult = CURLM_OK;
 2897|  2.53k|      goto out;
 2898|  2.53k|    }
 2899|  17.4k|  } while((mresult == CURLM_CALL_MULTI_PERFORM) ||
  ------------------
  |  Branch (2899:11): [True: 14.9k, False: 0]
  ------------------
 2900|      0|          multi_ischanged(multi, FALSE));
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  |  Branch (2900:11): [True: 0, False: 0]
  ------------------
 2901|       |
 2902|  5.07k|out:
 2903|  5.07k|  data->result = result;
 2904|  5.07k|  return mresult;
 2905|  2.53k|}
multi.c:multi_posttransfer:
 1953|    679|{
 1954|       |#if defined(HAVE_SIGNAL) && defined(SIGPIPE) && !defined(MSG_NOSIGNAL)
 1955|       |  /* restore the signal handler for SIGPIPE before we get back */
 1956|       |  if(!data->set.no_signal)
 1957|       |    signal(SIGPIPE, data->state.prev_signal);
 1958|       |#else
 1959|    679|  (void)data;
 1960|    679|#endif
 1961|    679|}
multi.c:multistate_init:
 2481|  2.53k|{
 2482|  2.53k|  if(!data->state.really_alive) {
  ------------------
  |  Branch (2482:6): [True: 2.53k, False: 0]
  ------------------
 2483|  2.53k|    data->state.really_alive = TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
 2484|  2.53k|    ++data->multi->xfers_really_alive;
 2485|  2.53k|    if(data->multi->xfers_really_alive == 1) {
  ------------------
  |  Branch (2485:8): [True: 2.53k, False: 0]
  ------------------
 2486|  2.53k|      CURLMcode mresult = multi_assess_wakeup(data->multi);
 2487|  2.53k|      if(mresult) {
  ------------------
  |  Branch (2487:10): [True: 0, False: 2.53k]
  ------------------
 2488|      0|        failf(data, "error enabling wakeup listening: %d", mresult);
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
 2489|      0|        return mresult;
 2490|      0|      }
 2491|  2.53k|    }
 2492|  2.53k|  }
 2493|       |
 2494|  2.53k|  *result = Curl_pretransfer(data);
 2495|  2.53k|  if(*result)
  ------------------
  |  Branch (2495:6): [True: 0, False: 2.53k]
  ------------------
 2496|      0|    return CURLM_OK;
 2497|       |
 2498|       |  /* after init, go SETUP */
 2499|  2.53k|  multistate(data, MSTATE_SETUP);
  ------------------
  |  |  196|  2.53k|#define multistate(x, y) mstate(x, y, __LINE__)
  ------------------
 2500|  2.53k|  Curl_pgrsTime(data, TIMER_STARTOP);
 2501|  2.53k|  return CURLM_CALL_MULTI_PERFORM;
 2502|  2.53k|}
multi.c:multistate_setup:
 2505|  2.53k|{
 2506|  2.53k|  Curl_pgrsTime(data, TIMER_STARTSINGLE);
 2507|  2.53k|  if(data->set.timeout)
  ------------------
  |  Branch (2507:6): [True: 2.53k, False: 0]
  ------------------
 2508|  2.53k|    Curl_expire(data, data->set.timeout, EXPIRE_TIMEOUT);
 2509|  2.53k|  if(data->set.connecttimeout)
  ------------------
  |  Branch (2509:6): [True: 2.53k, False: 0]
  ------------------
 2510|       |    /* Since a connection might go to pending and back to CONNECT several
 2511|       |       times before it actually takes off, we need to set the timeout once
 2512|       |       in SETUP before we enter CONNECT the first time. */
 2513|  2.53k|    Curl_expire(data, data->set.connecttimeout, EXPIRE_CONNECTTIMEOUT);
 2514|       |
 2515|  2.53k|  multistate(data, MSTATE_CONNECT);
  ------------------
  |  |  196|  2.53k|#define multistate(x, y) mstate(x, y, __LINE__)
  ------------------
 2516|  2.53k|  return CURLM_CALL_MULTI_PERFORM;
 2517|  2.53k|}
multi.c:multistate_connect:
 2332|  2.53k|{
 2333|       |  /* Connect. We want to get a connection identifier filled in. This state can
 2334|       |     be entered from SETUP and from PENDING. */
 2335|  2.53k|  bool connected;
 2336|  2.53k|  CURLMcode mresult = CURLM_OK;
 2337|  2.53k|  CURLcode result = Curl_connect(data, &connected);
 2338|  2.53k|  if(result == CURLE_NO_CONNECTION_AVAILABLE) {
  ------------------
  |  Branch (2338:6): [True: 0, False: 2.53k]
  ------------------
 2339|       |    /* There was no connection available. We will go to the pending state and
 2340|       |       wait for an available connection. */
 2341|      0|    multistate(data, MSTATE_PENDING);
  ------------------
  |  |  196|      0|#define multistate(x, y) mstate(x, y, __LINE__)
  ------------------
 2342|       |    /* move from process to pending set */
 2343|      0|    Curl_uint32_bset_remove(&multi->process, data->mid);
 2344|      0|    Curl_uint32_bset_remove(&multi->dirty, data->mid);
 2345|      0|    Curl_uint32_bset_add(&multi->pending, data->mid);
 2346|      0|    *resultp = CURLE_OK;
 2347|      0|    return mresult;
 2348|      0|  }
 2349|  2.53k|  else
 2350|  2.53k|    multi_schedule_pending(data->multi);
 2351|       |
 2352|  2.53k|  if(!result) {
  ------------------
  |  Branch (2352:6): [True: 2.03k, False: 504]
  ------------------
 2353|       |    /* after the connect has been sent off, go WAITCONNECT unless the
 2354|       |       protocol connect is already done and we can go directly to WAITDO or
 2355|       |       DO! */
 2356|  2.03k|    mresult = CURLM_CALL_MULTI_PERFORM;
 2357|       |
 2358|  2.03k|    if(connected) {
  ------------------
  |  Branch (2358:8): [True: 0, False: 2.03k]
  ------------------
 2359|      0|      if(!data->conn->bits.reuse &&
  ------------------
  |  Branch (2359:10): [True: 0, False: 0]
  ------------------
 2360|      0|         Curl_conn_is_multiplex(data->conn, FIRSTSOCKET)) {
  ------------------
  |  |  234|      0|#define FIRSTSOCKET     0
  ------------------
  |  Branch (2360:10): [True: 0, False: 0]
  ------------------
 2361|       |        /* new connection, can multiplex, wake pending handles */
 2362|      0|        multi_schedule_pending(data->multi);
 2363|      0|      }
 2364|      0|      multistate(data, MSTATE_PROTOCONNECT);
  ------------------
  |  |  196|      0|#define multistate(x, y) mstate(x, y, __LINE__)
  ------------------
 2365|      0|    }
 2366|  2.03k|    else {
 2367|  2.03k|      multistate(data, MSTATE_CONNECTING);
  ------------------
  |  |  196|  2.03k|#define multistate(x, y) mstate(x, y, __LINE__)
  ------------------
 2368|  2.03k|    }
 2369|  2.03k|  }
 2370|  2.53k|  *resultp = result;
 2371|  2.53k|  return mresult;
 2372|  2.53k|}
multi.c:multistate_connecting:
 2522|  2.03k|{
 2523|  2.03k|  bool connected;
 2524|       |
 2525|  2.03k|  if(!data->conn) {
  ------------------
  |  Branch (2525:6): [True: 0, False: 2.03k]
  ------------------
 2526|      0|    DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (2526:5): [Folded, False: 0]
  |  Branch (2526:5): [Folded, False: 0]
  ------------------
 2527|      0|    *result = CURLE_FAILED_INIT;
 2528|      0|    return CURLM_OK;
 2529|      0|  }
 2530|  2.03k|  if(!Curl_xfer_recv_is_paused(data)) {
  ------------------
  |  Branch (2530:6): [True: 2.03k, False: 0]
  ------------------
 2531|  2.03k|    *result = Curl_conn_connect(data, FIRSTSOCKET, FALSE, &connected);
  ------------------
  |  |  234|  2.03k|#define FIRSTSOCKET     0
  ------------------
                  *result = Curl_conn_connect(data, FIRSTSOCKET, FALSE, &connected);
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
 2532|  2.03k|    if(connected && !*result) {
  ------------------
  |  Branch (2532:8): [True: 2.03k, False: 0]
  |  Branch (2532:21): [True: 2.03k, False: 0]
  ------------------
 2533|  2.03k|      if(!data->conn->bits.reuse &&
  ------------------
  |  Branch (2533:10): [True: 2.03k, False: 0]
  ------------------
 2534|  2.03k|         Curl_conn_is_multiplex(data->conn, FIRSTSOCKET)) {
  ------------------
  |  |  234|  2.03k|#define FIRSTSOCKET     0
  ------------------
  |  Branch (2534:10): [True: 0, False: 2.03k]
  ------------------
 2535|       |        /* new connection, can multiplex, wake pending handles */
 2536|      0|        multi_schedule_pending(data->multi);
 2537|      0|      }
 2538|  2.03k|      multistate(data, MSTATE_PROTOCONNECT);
  ------------------
  |  |  196|  2.03k|#define multistate(x, y) mstate(x, y, __LINE__)
  ------------------
 2539|  2.03k|      return CURLM_CALL_MULTI_PERFORM;
 2540|  2.03k|    }
 2541|      0|    else if(*result) {
  ------------------
  |  Branch (2541:13): [True: 0, False: 0]
  ------------------
 2542|       |      /* failure detected */
 2543|      0|      CURL_TRC_M(data, "connect failed -> %d", (int)*result);
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2544|      0|      multi_posttransfer(data);
 2545|      0|      multi_done(data, *result, TRUE);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 2546|      0|      *stream_error = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 2547|      0|      return CURLM_OK;
 2548|      0|    }
 2549|  2.03k|  }
 2550|      0|  return CURLM_OK;
 2551|  2.03k|}
multi.c:multistate_protoconnect:
 2556|  2.03k|{
 2557|  2.03k|  bool protocol_connected = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
 2558|       |
 2559|  2.03k|  if(!*result && data->conn->bits.reuse) {
  ------------------
  |  Branch (2559:6): [True: 2.03k, False: 0]
  |  Branch (2559:18): [True: 0, False: 2.03k]
  ------------------
 2560|       |    /* ftp seems to hang when protoconnect on reused connection since we
 2561|       |     * handle PROTOCONNECT in general inside the filters, it seems wrong to
 2562|       |     * restart this on a reused connection.
 2563|       |     */
 2564|      0|    multistate(data, MSTATE_DO);
  ------------------
  |  |  196|      0|#define multistate(x, y) mstate(x, y, __LINE__)
  ------------------
 2565|      0|    return CURLM_CALL_MULTI_PERFORM;
 2566|      0|  }
 2567|  2.03k|  if(!*result)
  ------------------
  |  Branch (2567:6): [True: 2.03k, False: 0]
  ------------------
 2568|  2.03k|    *result = protocol_connect(data, &protocol_connected);
 2569|  2.03k|  if(!*result && !protocol_connected) {
  ------------------
  |  Branch (2569:6): [True: 2.03k, False: 0]
  |  Branch (2569:18): [True: 0, False: 2.03k]
  ------------------
 2570|       |    /* switch to waiting state */
 2571|      0|    multistate(data, MSTATE_PROTOCONNECTING);
  ------------------
  |  |  196|      0|#define multistate(x, y) mstate(x, y, __LINE__)
  ------------------
 2572|      0|    return CURLM_CALL_MULTI_PERFORM;
 2573|      0|  }
 2574|  2.03k|  else if(!*result) {
  ------------------
  |  Branch (2574:11): [True: 2.03k, False: 0]
  ------------------
 2575|       |    /* protocol connect has completed, go WAITDO or DO */
 2576|  2.03k|    multistate(data, MSTATE_DO);
  ------------------
  |  |  196|  2.03k|#define multistate(x, y) mstate(x, y, __LINE__)
  ------------------
 2577|  2.03k|    return CURLM_CALL_MULTI_PERFORM;
 2578|  2.03k|  }
 2579|       |
 2580|       |  /* failure detected */
 2581|      0|  multi_posttransfer(data);
 2582|      0|  multi_done(data, *result, TRUE);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 2583|       |  *stream_error = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 2584|      0|  return CURLM_OK;
 2585|  2.03k|}
multi.c:protocol_connect:
 1923|  2.03k|{
 1924|  2.03k|  struct connectdata *conn = data->conn;
 1925|  2.03k|  CURLcode result = CURLE_OK;
 1926|       |
 1927|  2.03k|  DEBUGASSERT(conn);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1927:3): [True: 0, False: 2.03k]
  |  Branch (1927:3): [True: 2.03k, False: 0]
  ------------------
 1928|  2.03k|  DEBUGASSERT(protocol_done);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1928:3): [True: 0, False: 2.03k]
  |  Branch (1928:3): [True: 2.03k, False: 0]
  ------------------
 1929|  2.03k|  DEBUGASSERT(Curl_conn_is_connected(conn, FIRSTSOCKET));
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1929:3): [True: 0, False: 2.03k]
  |  Branch (1929:3): [True: 2.03k, False: 0]
  ------------------
 1930|       |
 1931|  2.03k|  *protocol_done = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
 1932|  2.03k|  if(!conn->bits.protoconnstart) {
  ------------------
  |  Branch (1932:6): [True: 2.03k, False: 0]
  ------------------
 1933|  2.03k|    if(conn->scheme->run->connect_it) {
  ------------------
  |  Branch (1933:8): [True: 0, False: 2.03k]
  ------------------
 1934|       |      /* Call the protocol-specific connect function */
 1935|      0|      result = conn->scheme->run->connect_it(data, protocol_done);
 1936|      0|      if(result)
  ------------------
  |  Branch (1936:10): [True: 0, False: 0]
  ------------------
 1937|      0|        return result;
 1938|      0|    }
 1939|  2.03k|    conn->bits.protoconnstart = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
 1940|  2.03k|  }
 1941|       |
 1942|       |  /* Unless this protocol does not have any protocol-connect callback, as
 1943|       |     then we know we are done. */
 1944|  2.03k|  if(!conn->scheme->run->connecting)
  ------------------
  |  Branch (1944:6): [True: 2.03k, False: 0]
  ------------------
 1945|  2.03k|    *protocol_done = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
 1946|  2.03k|  return CURLE_OK;
 1947|  2.03k|}
multi.c:multistate_do:
 2171|  2.03k|{
 2172|  2.03k|  CURLMcode mresult = CURLM_OK;
 2173|  2.03k|  CURLcode result = CURLE_OK;
 2174|  2.03k|  if(data->set.fprereq) {
  ------------------
  |  Branch (2174:6): [True: 0, False: 2.03k]
  ------------------
 2175|      0|    struct Curl_mapi_guard guard;
 2176|      0|    int prereq_rc;
 2177|       |
 2178|       |    /* call the prerequest callback function */
 2179|      0|    CURL_CBAPI_START(&guard, data, easy_fprereq);
  ------------------
  |  |  201|      0|  Curl_cbapi_enter((g), (d), NULL, CURL_CBAPI_FN_##fn)
  ------------------
 2180|      0|    prereq_rc = data->set.fprereq(data->set.prereq_userp,
 2181|      0|                                  data->info.primary.remote_ip,
 2182|      0|                                  data->info.primary.local_ip,
 2183|      0|                                  data->info.primary.remote_port,
 2184|      0|                                  data->info.primary.local_port);
 2185|      0|    CURL_CBAPI_END(&guard);
  ------------------
  |  |  205|      0|  Curl_cbapi_leave(g)
  ------------------
 2186|      0|    if(prereq_rc != CURL_PREREQFUNC_OK) {
  ------------------
  |  |  508|      0|#define CURL_PREREQFUNC_OK 0
  ------------------
  |  Branch (2186:8): [True: 0, False: 0]
  ------------------
 2187|      0|      failf(data, "operation aborted by pre-request callback");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
 2188|       |      /* failure in pre-request callback - do not do any other processing */
 2189|      0|      result = CURLE_ABORTED_BY_CALLBACK;
 2190|      0|      multi_posttransfer(data);
 2191|      0|      multi_done(data, result, FALSE);
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 2192|      0|      *stream_errorp = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 2193|      0|      goto end;
 2194|      0|    }
 2195|      0|  }
 2196|       |
 2197|  2.03k|  if(data->set.connect_only && !data->set.connect_only_ws) {
  ------------------
  |  Branch (2197:6): [True: 0, False: 2.03k]
  |  Branch (2197:32): [True: 0, False: 0]
  ------------------
 2198|      0|    multistate(data, MSTATE_DONE);
  ------------------
  |  |  196|      0|#define multistate(x, y) mstate(x, y, __LINE__)
  ------------------
 2199|      0|    mresult = CURLM_CALL_MULTI_PERFORM;
 2200|      0|  }
 2201|  2.03k|  else {
 2202|  2.03k|    bool dophase_done = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
 2203|       |    /* Perform the protocol's DO action */
 2204|  2.03k|    result = multi_do(data, &dophase_done);
 2205|       |
 2206|  2.03k|    if(!result) {
  ------------------
  |  Branch (2206:8): [True: 1.86k, False: 175]
  ------------------
 2207|  1.86k|      if(!dophase_done) {
  ------------------
  |  Branch (2207:10): [True: 0, False: 1.86k]
  ------------------
 2208|      0|#ifndef CURL_DISABLE_FTP
 2209|       |        /* some steps needed for wildcard matching */
 2210|      0|        if(data->state.wildcardmatch) {
  ------------------
  |  Branch (2210:12): [True: 0, False: 0]
  ------------------
 2211|      0|          struct WildcardData *wc = data->wildcard;
 2212|      0|          if(wc->state == CURLWC_DONE || wc->state == CURLWC_SKIP) {
  ------------------
  |  Branch (2212:14): [True: 0, False: 0]
  |  Branch (2212:42): [True: 0, False: 0]
  ------------------
 2213|       |            /* skip some states if it is important */
 2214|      0|            multi_done(data, CURLE_OK, FALSE);
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 2215|       |
 2216|       |            /* if there is no connection left, skip the DONE state */
 2217|      0|            multistate(data, data->conn ? MSTATE_DONE : MSTATE_COMPLETED);
  ------------------
  |  |  196|      0|#define multistate(x, y) mstate(x, y, __LINE__)
  |  |  ------------------
  |  |  |  Branch (196:36): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2218|      0|            mresult = CURLM_CALL_MULTI_PERFORM;
 2219|      0|            goto end;
 2220|      0|          }
 2221|      0|        }
 2222|      0|#endif
 2223|       |        /* DO was not completed in one function call, we must continue
 2224|       |           DOING... */
 2225|      0|        multistate(data, MSTATE_DOING);
  ------------------
  |  |  196|      0|#define multistate(x, y) mstate(x, y, __LINE__)
  ------------------
 2226|      0|        mresult = CURLM_CALL_MULTI_PERFORM;
 2227|      0|      }
 2228|       |
 2229|       |      /* after DO, go DO_DONE... or DO_MORE */
 2230|  1.86k|      else if(data->conn->bits.do_more) {
  ------------------
  |  Branch (2230:15): [True: 0, False: 1.86k]
  ------------------
 2231|       |        /* we are supposed to do more, but we need to sit down, relax and wait
 2232|       |           a little while first */
 2233|      0|        multistate(data, MSTATE_DOING_MORE);
  ------------------
  |  |  196|      0|#define multistate(x, y) mstate(x, y, __LINE__)
  ------------------
 2234|      0|        mresult = CURLM_CALL_MULTI_PERFORM;
 2235|      0|      }
 2236|  1.86k|      else {
 2237|       |        /* we are done with the DO, now DID */
 2238|  1.86k|        multistate(data, MSTATE_DID);
  ------------------
  |  |  196|  1.86k|#define multistate(x, y) mstate(x, y, __LINE__)
  ------------------
 2239|  1.86k|        mresult = CURLM_CALL_MULTI_PERFORM;
 2240|  1.86k|      }
 2241|  1.86k|    }
 2242|    175|    else if((result == CURLE_SEND_ERROR) &&
  ------------------
  |  Branch (2242:13): [True: 2, False: 173]
  ------------------
 2243|      2|            data->conn->bits.reuse) {
  ------------------
  |  Branch (2243:13): [True: 0, False: 2]
  ------------------
 2244|       |      /*
 2245|       |       * In this situation, a connection that we were trying to use may have
 2246|       |       * unexpectedly died. If possible, send the connection back to the
 2247|       |       * CONNECT phase so we can try again.
 2248|       |       */
 2249|      0|      const struct Curl_scheme *handler = data->conn->scheme;
 2250|      0|      char *newurl = NULL;
 2251|      0|      followtype follow = FOLLOW_NONE;
 2252|      0|      CURLcode drc;
 2253|       |
 2254|      0|      drc = Curl_retry_request(data, &newurl);
 2255|      0|      if(drc) {
  ------------------
  |  Branch (2255:10): [True: 0, False: 0]
  ------------------
 2256|       |        /* a failure here pretty much implies an out of memory */
 2257|      0|        result = drc;
 2258|      0|        *stream_errorp = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 2259|      0|      }
 2260|       |
 2261|      0|      multi_posttransfer(data);
 2262|      0|      drc = multi_done(data, result, FALSE);
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 2263|       |
 2264|       |      /* When set to retry the connection, we must go back to the CONNECT
 2265|       |       * state */
 2266|      0|      if(newurl) {
  ------------------
  |  Branch (2266:10): [True: 0, False: 0]
  ------------------
 2267|      0|        if(!drc || (drc == CURLE_SEND_ERROR)) {
  ------------------
  |  Branch (2267:12): [True: 0, False: 0]
  |  Branch (2267:20): [True: 0, False: 0]
  ------------------
 2268|      0|          follow = FOLLOW_RETRY;
 2269|      0|          drc = multi_follow(data, handler, newurl, follow);
 2270|      0|          if(!drc) {
  ------------------
  |  Branch (2270:14): [True: 0, False: 0]
  ------------------
 2271|      0|            multistate(data, MSTATE_SETUP);
  ------------------
  |  |  196|      0|#define multistate(x, y) mstate(x, y, __LINE__)
  ------------------
 2272|      0|            mresult = CURLM_CALL_MULTI_PERFORM;
 2273|      0|            result = CURLE_OK;
 2274|      0|          }
 2275|      0|          else {
 2276|       |            /* Follow failed */
 2277|      0|            result = drc;
 2278|      0|          }
 2279|      0|        }
 2280|      0|        else {
 2281|       |          /* done did not return OK or SEND_ERROR */
 2282|      0|          result = drc;
 2283|      0|        }
 2284|      0|      }
 2285|      0|      else {
 2286|       |        /* Have error handler disconnect conn if we cannot retry */
 2287|      0|        *stream_errorp = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 2288|      0|      }
 2289|      0|      curlx_free(newurl);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 2290|      0|    }
 2291|    175|    else {
 2292|       |      /* failure detected */
 2293|    175|      multi_posttransfer(data);
 2294|    175|      if(data->conn)
  ------------------
  |  Branch (2294:10): [True: 175, False: 0]
  ------------------
 2295|    175|        multi_done(data, result, FALSE);
  ------------------
  |  | 1048|    175|#define FALSE false
  ------------------
 2296|    175|      *stream_errorp = TRUE;
  ------------------
  |  | 1045|    175|#define TRUE true
  ------------------
 2297|    175|    }
 2298|  2.03k|  }
 2299|  2.03k|end:
 2300|  2.03k|  *resultp = result;
 2301|  2.03k|  return mresult;
 2302|  2.03k|}
multi.c:multi_do:
 1792|  2.03k|{
 1793|  2.03k|  CURLcode result = CURLE_OK;
 1794|  2.03k|  struct connectdata *conn = data->conn;
 1795|       |
 1796|  2.03k|  DEBUGASSERT(conn);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1796:3): [True: 0, False: 2.03k]
  |  Branch (1796:3): [True: 2.03k, False: 0]
  ------------------
 1797|  2.03k|  DEBUGASSERT(conn->scheme);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1797:3): [True: 0, False: 2.03k]
  |  Branch (1797:3): [True: 2.03k, False: 0]
  ------------------
 1798|       |
 1799|  2.03k|  if(conn->scheme->run->do_it)
  ------------------
  |  Branch (1799:6): [True: 2.03k, False: 0]
  ------------------
 1800|  2.03k|    result = conn->scheme->run->do_it(data, done);
 1801|       |
 1802|  2.03k|  return result;
 1803|  2.03k|}
multi.c:multistate_did:
 2668|  1.86k|{
 2669|  1.86k|  DEBUGASSERT(data->conn);
  ------------------
  |  | 1075|  1.86k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (2669:3): [True: 0, False: 1.86k]
  |  Branch (2669:3): [True: 1.86k, False: 0]
  ------------------
 2670|  1.86k|  if(data->conn->bits.multiplex)
  ------------------
  |  Branch (2670:6): [True: 0, False: 1.86k]
  ------------------
 2671|       |    /* Check if we can move pending requests to send pipe */
 2672|      0|    multi_schedule_pending(multi); /* multiplexed */
 2673|       |
 2674|       |  /* Only perform the transfer if there is a good socket to work with.
 2675|       |     Having both BAD is a signal to skip immediately to DONE */
 2676|  1.86k|  if(CONN_SOCK_IDX_VALID(data->conn->recv_idx) ||
  ------------------
  |  |  311|  3.72k|#define CONN_SOCK_IDX_VALID(i)    (((i) >= 0) && ((i) < 2))
  |  |  ------------------
  |  |  |  Branch (311:36): [True: 0, False: 1.86k]
  |  |  |  Branch (311:50): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2677|  1.86k|     CONN_SOCK_IDX_VALID(data->conn->send_idx)) {
  ------------------
  |  |  311|  1.86k|#define CONN_SOCK_IDX_VALID(i)    (((i) >= 0) && ((i) < 2))
  |  |  ------------------
  |  |  |  Branch (311:36): [True: 0, False: 1.86k]
  |  |  |  Branch (311:50): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2678|      0|    multistate(data, MSTATE_PERFORMING);
  ------------------
  |  |  196|      0|#define multistate(x, y) mstate(x, y, __LINE__)
  ------------------
 2679|       |    /* Do not return CURLM_CALL_MULTI_PERFORM to give other transfers
 2680|       |     * a chance to send off their requests.
 2681|       |     * Note: Some SFTP handlers do not seem to like this.
 2682|       |     *       Restrict it to HTTP families. */
 2683|      0|    return ((multi->xfers_alive > 1) &&
  ------------------
  |  Branch (2683:13): [True: 0, False: 0]
  ------------------
 2684|      0|            (data->conn->scheme->protocol & PROTO_FAMILY_HTTP)) ?
  ------------------
  |  |   84|      0|#define PROTO_FAMILY_HTTP (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_WS | \
  |  |  ------------------
  |  |  |  | 1088|      0|#define CURLPROTO_HTTP    (1L << 0)
  |  |  ------------------
  |  |               #define PROTO_FAMILY_HTTP (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_WS | \
  |  |  ------------------
  |  |  |  | 1089|      0|#define CURLPROTO_HTTPS   (1L << 1)
  |  |  ------------------
  |  |               #define PROTO_FAMILY_HTTP (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_WS | \
  |  |  ------------------
  |  |  |  |   63|      0|#define CURLPROTO_WS     (1L << 30)
  |  |  ------------------
  |  |   85|      0|                           CURLPROTO_WSS)
  |  |  ------------------
  |  |  |  |   64|      0|#define CURLPROTO_WSS    ((curl_prot_t)1 << 31)
  |  |  ------------------
  ------------------
  |  Branch (2684:13): [True: 0, False: 0]
  ------------------
 2685|      0|           CURLM_OK : CURLM_CALL_MULTI_PERFORM;
 2686|      0|  }
 2687|  1.86k|  else {
 2688|  1.86k|#ifndef CURL_DISABLE_FTP
 2689|  1.86k|    if(data->state.wildcardmatch &&
  ------------------
  |  Branch (2689:8): [True: 0, False: 1.86k]
  ------------------
 2690|      0|       ((data->conn->scheme->flags & PROTOPT_WILDCARD) == 0)) {
  ------------------
  |  |  230|      0|#define PROTOPT_WILDCARD (1 << 12)  /* protocol supports wildcard matching */
  ------------------
  |  Branch (2690:8): [True: 0, False: 0]
  ------------------
 2691|      0|      data->wildcard->state = CURLWC_DONE;
 2692|      0|    }
 2693|  1.86k|#endif
 2694|  1.86k|    multistate(data, MSTATE_DONE);
  ------------------
  |  |  196|  1.86k|#define multistate(x, y) mstate(x, y, __LINE__)
  ------------------
 2695|  1.86k|    return CURLM_CALL_MULTI_PERFORM;
 2696|  1.86k|  }
 2697|  1.86k|}
multi.c:multistate_done:
 2700|  1.86k|{
 2701|  1.86k|  if(data->conn) {
  ------------------
  |  Branch (2701:6): [True: 1.86k, False: 0]
  ------------------
 2702|  1.86k|    CURLcode result;
 2703|       |
 2704|       |    /* post-transfer command */
 2705|  1.86k|    result = multi_done(data, *presult, FALSE);
  ------------------
  |  | 1048|  1.86k|#define FALSE false
  ------------------
 2706|       |
 2707|       |    /* allow a previously set error code take precedence */
 2708|  1.86k|    if(!(*presult))
  ------------------
  |  Branch (2708:8): [True: 1.86k, False: 0]
  ------------------
 2709|  1.86k|      *presult = result;
 2710|  1.86k|  }
 2711|       |
 2712|  1.86k|#ifndef CURL_DISABLE_FTP
 2713|  1.86k|  if(data->state.wildcardmatch) {
  ------------------
  |  Branch (2713:6): [True: 0, False: 1.86k]
  ------------------
 2714|      0|    if(data->wildcard->state != CURLWC_DONE) {
  ------------------
  |  Branch (2714:8): [True: 0, False: 0]
  ------------------
 2715|       |      /* if a wildcard is set and we are not ending -> lets start again
 2716|       |         with MSTATE_INIT */
 2717|      0|      multistate(data, MSTATE_INIT);
  ------------------
  |  |  196|      0|#define multistate(x, y) mstate(x, y, __LINE__)
  ------------------
 2718|      0|      return CURLM_CALL_MULTI_PERFORM;
 2719|      0|    }
 2720|      0|  }
 2721|  1.86k|#endif
 2722|       |  /* after we have DONE what we are supposed to do, go COMPLETED, and
 2723|       |     it does not matter what the multi_done() returned! */
 2724|  1.86k|  multistate(data, MSTATE_COMPLETED);
  ------------------
  |  |  196|  1.86k|#define multistate(x, y) mstate(x, y, __LINE__)
  ------------------
 2725|  1.86k|  return CURLM_CALL_MULTI_PERFORM;
 2726|  1.86k|}
multi.c:is_finished:
 2380|  17.4k|{
 2381|  17.4k|  if(data->mstate < MSTATE_COMPLETED) {
  ------------------
  |  Branch (2381:6): [True: 15.5k, False: 1.86k]
  ------------------
 2382|  15.5k|    if(result) {
  ------------------
  |  Branch (2382:8): [True: 679, False: 14.9k]
  ------------------
 2383|       |      /*
 2384|       |       * If an error was returned, and we are not in completed state now,
 2385|       |       * then we go to completed and consider this transfer aborted.
 2386|       |       */
 2387|       |
 2388|       |      /* No attempt to disconnect connections must be made before this -
 2389|       |         connection detach and termination happens only here */
 2390|       |
 2391|       |      /* Check if we can move pending requests to send pipe */
 2392|    679|      multi_schedule_pending(multi); /* connection */
 2393|       |
 2394|    679|      if(data->conn) {
  ------------------
  |  Branch (2394:10): [True: 0, False: 679]
  ------------------
 2395|      0|        if(stream_error) {
  ------------------
  |  Branch (2395:12): [True: 0, False: 0]
  ------------------
 2396|       |          /* Do not attempt to send data over a connection that timed out */
 2397|      0|          bool dead_connection = result == CURLE_OPERATION_TIMEDOUT;
 2398|      0|          struct connectdata *conn = data->conn;
 2399|       |
 2400|       |          /* This is where we make sure that the conn pointer is reset.
 2401|       |             We do not have to do this in every case block above where a
 2402|       |             failure is detected */
 2403|      0|          Curl_detach_connection(data);
 2404|      0|          Curl_conn_close(data, conn, dead_connection);
 2405|      0|        }
 2406|      0|      }
 2407|    679|      else if(data->mstate == MSTATE_CONNECT) {
  ------------------
  |  Branch (2407:15): [True: 504, False: 175]
  ------------------
 2408|       |        /* Curl_connect() failed */
 2409|    504|        multi_posttransfer(data);
 2410|    504|        Curl_pgrsUpdate_nometer(data);
 2411|    504|      }
 2412|       |
 2413|    679|      multistate(data, MSTATE_COMPLETED);
  ------------------
  |  |  196|    679|#define multistate(x, y) mstate(x, y, __LINE__)
  ------------------
 2414|    679|      return result;
 2415|    679|    }
 2416|       |    /* if there is still a connection to use, call the progress function */
 2417|  14.9k|    else if(data->conn && Curl_conn_is_connected(data->conn, FIRSTSOCKET)) {
  ------------------
  |  |  234|  9.82k|#define FIRSTSOCKET     0
  ------------------
  |  Branch (2417:13): [True: 9.82k, False: 5.07k]
  |  Branch (2417:27): [True: 7.79k, False: 2.03k]
  ------------------
 2418|  7.79k|      result = Curl_pgrsUpdateX(data, pnow);
 2419|  7.79k|      if(result) {
  ------------------
  |  Branch (2419:10): [True: 0, False: 7.79k]
  ------------------
 2420|       |        /* aborted due to progress callback return code must close the
 2421|       |           connection */
 2422|      0|        streamclose(data->conn);
  ------------------
  |  |   89|      0|#define streamclose(x) Curl_conncontrol((x), CONNCTRL_STREAM_CLOSE)
  |  |  ------------------
  |  |  |  |   85|      0|#define CONNCTRL_STREAM_CLOSE    2
  |  |  ------------------
  ------------------
 2423|       |
 2424|       |        /* if not yet in DONE state, go there, otherwise COMPLETED */
 2425|      0|        multistate(data, (data->mstate < MSTATE_DONE) ?
  ------------------
  |  |  196|      0|#define multistate(x, y) mstate(x, y, __LINE__)
  |  |  ------------------
  |  |  |  Branch (196:36): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2426|      0|                   MSTATE_DONE : MSTATE_COMPLETED);
 2427|      0|        return result;
 2428|      0|      }
 2429|  7.79k|    }
 2430|  15.5k|  }
 2431|  16.7k|  return result;
 2432|  17.4k|}
multi.c:handle_completed:
 2437|  2.53k|{
 2438|  2.53k|  if(data->master_mid != UINT32_MAX) {
  ------------------
  |  Branch (2438:6): [True: 0, False: 2.53k]
  ------------------
 2439|       |    /* A sub transfer, not for msgsent to application. Is anyone still
 2440|       |     * interested in processing its results? */
 2441|      0|    if(data->sub_xfer_done) {
  ------------------
  |  Branch (2441:8): [True: 0, False: 0]
  ------------------
 2442|      0|      struct Curl_easy *master = Curl_multi_get_easy(multi, data->master_mid);
 2443|       |
 2444|      0|      CURL_TRC_M(data, "sub xfer done for master %u", data->master_mid);
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2445|      0|      if(master)
  ------------------
  |  Branch (2445:10): [True: 0, False: 0]
  ------------------
 2446|      0|        data->sub_xfer_done(data, master, result);
 2447|      0|      else
 2448|      0|        CURL_TRC_M(data, "master easy %u already gone.", data->master_mid);
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2449|      0|    }
 2450|      0|  }
 2451|  2.53k|  else {
 2452|       |    /* now fill in the Curl_message with this info */
 2453|  2.53k|    struct Curl_message *msg = &data->msg;
 2454|       |
 2455|  2.53k|    msg->extmsg.msg = CURLMSG_DONE;
 2456|  2.53k|    msg->extmsg.easy_handle = data;
 2457|  2.53k|    msg->extmsg.data.result = result;
 2458|       |
 2459|  2.53k|    multi_addmsg(multi, msg);
 2460|  2.53k|    DEBUGASSERT(!data->conn);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (2460:5): [True: 0, False: 2.53k]
  |  Branch (2460:5): [True: 2.53k, False: 0]
  ------------------
 2461|  2.53k|  }
 2462|  2.53k|  multistate(data, MSTATE_MSGSENT);
  ------------------
  |  |  196|  2.53k|#define multistate(x, y) mstate(x, y, __LINE__)
  ------------------
 2463|       |
 2464|       |  /* remove from the other sets, add to msgsent */
 2465|  2.53k|  Curl_uint32_bset_remove(&multi->process, data->mid);
 2466|  2.53k|  Curl_uint32_bset_remove(&multi->dirty, data->mid);
 2467|  2.53k|  Curl_uint32_bset_remove(&multi->pending, data->mid);
 2468|  2.53k|  Curl_uint32_bset_add(&multi->msgsent, data->mid);
 2469|  2.53k|  if(data->state.really_alive) {
  ------------------
  |  Branch (2469:6): [True: 2.53k, False: 0]
  ------------------
 2470|  2.53k|    data->state.really_alive = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
 2471|  2.53k|    --multi->xfers_really_alive;
 2472|  2.53k|    if(!multi->xfers_really_alive)
  ------------------
  |  Branch (2472:8): [True: 2.53k, False: 0]
  ------------------
 2473|  2.53k|      (void)multi_assess_wakeup(multi);
 2474|  2.53k|  }
 2475|  2.53k|  --multi->xfers_alive;
 2476|  2.53k|  if(!multi->xfers_alive)
  ------------------
  |  Branch (2476:6): [True: 2.53k, False: 0]
  ------------------
 2477|  2.53k|    multi_assess_wakeup(multi);
 2478|  2.53k|}
multi.c:multi_addmsg:
  217|  2.53k|{
  218|  2.53k|  if(!Curl_llist_count(&multi->msglist))
  ------------------
  |  Branch (218:6): [True: 2.53k, False: 0]
  ------------------
  219|  2.53k|    CURLM_NTFY(multi->admin, CURLMNOTIFY_INFO_READ);
  ------------------
  |  |   51|  2.53k|  do {                                                \
  |  |   52|  2.53k|    if((d) && (d)->multi && (d)->multi->ntfy.ntfy_cb) \
  |  |  ------------------
  |  |  |  Branch (52:8): [True: 2.53k, False: 0]
  |  |  |  Branch (52:15): [True: 2.53k, False: 0]
  |  |  |  Branch (52:29): [True: 0, False: 2.53k]
  |  |  ------------------
  |  |   53|  2.53k|      Curl_mntfy_add((d), (t));                       \
  |  |   54|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (54:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
  220|  2.53k|  Curl_llist_append(&multi->msglist, msg, &msg->list);
  221|  2.53k|}
multi.c:multi_ischanged:
 1742|  20.4k|{
 1743|  20.4k|  bool retval = FALSE;
  ------------------
  |  | 1048|  20.4k|#define FALSE false
  ------------------
 1744|  20.4k|  DEBUGASSERT(multi);
  ------------------
  |  | 1075|  20.4k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1744:3): [True: 0, False: 20.4k]
  |  Branch (1744:3): [True: 20.4k, False: 0]
  ------------------
 1745|  20.4k|  if(multi) {
  ------------------
  |  Branch (1745:6): [True: 20.4k, False: 0]
  ------------------
 1746|  20.4k|    retval = (bool)multi->recheckstate;
 1747|  20.4k|    if(clear)
  ------------------
  |  Branch (1747:8): [True: 19.9k, False: 504]
  ------------------
 1748|  19.9k|      multi->recheckstate = FALSE;
  ------------------
  |  | 1048|  19.9k|#define FALSE false
  ------------------
 1749|  20.4k|  }
 1750|  20.4k|  return retval;
 1751|  20.4k|}
multi.c:multi_handle_timeout:
 1834|  12.8k|{
 1835|  12.8k|  timediff_t timeout_ms;
 1836|       |
 1837|  12.8k|  timeout_ms = Curl_timeleft_now_ms(data, pnow);
 1838|  12.8k|  if(timeout_ms < 0) {
  ------------------
  |  Branch (1838:6): [True: 0, False: 12.8k]
  ------------------
 1839|       |    /* Handle timed out */
 1840|      0|    timerid base_timer = Curl_is_connecting(data) ?
  ------------------
  |  Branch (1840:26): [True: 0, False: 0]
  ------------------
 1841|      0|                         TIMER_STARTSINGLE : TIMER_STARTOP;
 1842|      0|    timediff_t elapsed_ms = Curl_pgrs_since_ms(data, NULL, base_timer);
 1843|      0|    if(data->mstate == MSTATE_CONNECTING)
  ------------------
  |  Branch (1843:8): [True: 0, False: 0]
  ------------------
 1844|      0|      failf(data, "%s timed out after %" FMT_TIMEDIFF_T " milliseconds",
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
 1845|      0|            data->conn->bits.dns_resolved ? "Connection" : "Resolving",
  ------------------
  |  Branch (1845:13): [True: 0, False: 0]
  ------------------
 1846|      0|            elapsed_ms);
 1847|      0|    else {
 1848|      0|      struct SingleRequest *k = &data->req;
 1849|      0|      if(k->size != -1) {
  ------------------
  |  Branch (1849:10): [True: 0, False: 0]
  ------------------
 1850|      0|        failf(data, "Operation timed out after %" FMT_TIMEDIFF_T
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
 1851|      0|              " milliseconds with %" FMT_OFF_T " out of %"
 1852|      0|              FMT_OFF_T " bytes received",
 1853|      0|              elapsed_ms, k->bytecount, k->size);
 1854|      0|      }
 1855|      0|      else {
 1856|      0|        failf(data, "Operation timed out after %" FMT_TIMEDIFF_T
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
 1857|      0|              " milliseconds with %" FMT_OFF_T " bytes received",
 1858|      0|              elapsed_ms, k->bytecount);
 1859|      0|      }
 1860|      0|    }
 1861|      0|    *result = CURLE_OPERATION_TIMEDOUT;
 1862|      0|    if(data->conn) {
  ------------------
  |  Branch (1862:8): [True: 0, False: 0]
  ------------------
 1863|       |      /* Force connection closed if the connection has indeed been used */
 1864|      0|      if(data->mstate > MSTATE_DO) {
  ------------------
  |  Branch (1864:10): [True: 0, False: 0]
  ------------------
 1865|      0|        streamclose(data->conn);
  ------------------
  |  |   89|      0|#define streamclose(x) Curl_conncontrol((x), CONNCTRL_STREAM_CLOSE)
  |  |  ------------------
  |  |  |  |   85|      0|#define CONNCTRL_STREAM_CLOSE    2
  |  |  ------------------
  ------------------
 1866|      0|        *stream_error = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 1867|      0|      }
 1868|      0|      (void)multi_done(data, *result, TRUE);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 1869|      0|    }
 1870|      0|    return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 1871|      0|  }
 1872|       |
 1873|  12.8k|  return FALSE;
  ------------------
  |  | 1048|  12.8k|#define FALSE false
  ------------------
 1874|  12.8k|}
multi.c:multi_timeouts_init:
 3149|  7.61k|{
 3150|  7.61k|  data->state.timeouts.first = EXPIRE_LAST;
 3151|       |  data->state.timeouts.splaynode.registered = FALSE;
  ------------------
  |  | 1048|  7.61k|#define FALSE false
  ------------------
 3152|  7.61k|}
multi.c:multi_set_timeout:
 3711|  5.07k|{
 3712|  5.07k|  struct expire_timers *timeouts = &data->state.timeouts;
 3713|  5.07k|  uint8_t *anchor = &timeouts->first;
 3714|  5.07k|  uint8_t id = (uint8_t)eid;
 3715|       |
 3716|  5.07k|  if((unsigned)eid >= EXPIRE_LAST) {
  ------------------
  |  Branch (3716:6): [True: 0, False: 5.07k]
  ------------------
 3717|      0|    DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (3717:5): [Folded, False: 0]
  |  Branch (3717:5): [Folded, False: 0]
  ------------------
 3718|      0|    return CURLM_BAD_FUNCTION_ARGUMENT;
 3719|      0|  }
 3720|       |  /* remove from list, store time and re-insert */
 3721|  5.07k|  multi_clear_timeout(data, eid);
 3722|  5.07k|  timeouts->offset_us[id] =
 3723|  5.07k|    Curl_timeouts_offset_us(&data->multi->timeouts, stamp);
 3724|       |
 3725|  7.61k|  while(*anchor < EXPIRE_LAST) {
  ------------------
  |  Branch (3725:9): [True: 2.53k, False: 5.07k]
  ------------------
 3726|  2.53k|    if(timeouts->offset_us[*anchor] > timeouts->offset_us[id])
  ------------------
  |  Branch (3726:8): [True: 0, False: 2.53k]
  ------------------
 3727|      0|      break;
 3728|  2.53k|    anchor = &timeouts->next[*anchor];
 3729|  2.53k|  }
 3730|  5.07k|  timeouts->next[eid] = *anchor;
 3731|  5.07k|  timeouts->next[eid] = *anchor;
 3732|  5.07k|  *anchor = id;
 3733|  5.07k|  DEBUGASSERT(multi_timeouts_check(data));
  ------------------
  |  | 1075|  5.07k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (3733:3): [True: 0, False: 5.07k]
  |  Branch (3733:3): [True: 5.07k, False: 0]
  ------------------
 3734|  5.07k|  CURL_TRC_TIMER(data, eid, "set for %" FMT_TIMEDIFF_T "us",
  ------------------
  |  |  173|  5.07k|  do {                                        \
  |  |  174|  5.07k|    if(CURL_TRC_TIMER_is_verbose(data))       \
  |  |  ------------------
  |  |  |  |  139|  5.07k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_timer)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  5.07k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  10.1k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 5.07k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 5.07k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  10.1k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 5.07k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|  5.07k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  5.07k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|  5.07k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 5.07k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  175|  5.07k|      Curl_trc_timer(data, tid, __VA_ARGS__); \
  |  |  176|  5.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (176:11): [Folded, False: 5.07k]
  |  |  ------------------
  ------------------
 3735|  5.07k|                 curlx_ptimediff_us(stamp, Curl_pgrs_now(data)));
 3736|  5.07k|  return CURLM_OK;
 3737|  5.07k|}
multi.c:multi_timeouts_check:
 3639|  12.1k|{
 3640|  12.1k|  struct expire_timers *timeouts = &data->state.timeouts;
 3641|  12.1k|  uint8_t id;
 3642|  12.1k|  int i = 0;
 3643|  26.4k|  for(id = timeouts->first; id < EXPIRE_LAST; id = timeouts->next[id]) {
  ------------------
  |  Branch (3643:29): [True: 14.2k, False: 12.1k]
  ------------------
 3644|  14.2k|    if(++i >= EXPIRE_LAST) {
  ------------------
  |  Branch (3644:8): [True: 0, False: 14.2k]
  ------------------
 3645|      0|      failf(data, "expire timeouts looped: %d iterations and no end", i);
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
 3646|      0|      return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 3647|      0|    }
 3648|  14.2k|    if(id == timeouts->next[id]) {
  ------------------
  |  Branch (3648:8): [True: 0, False: 14.2k]
  ------------------
 3649|      0|      failf(data, "expire timeouts wrong: %d points to itself", (int)id);
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
 3650|      0|      return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 3651|      0|    }
 3652|  14.2k|    if((timeouts->next[id] < EXPIRE_LAST) &&
  ------------------
  |  Branch (3652:8): [True: 4.57k, False: 9.65k]
  ------------------
 3653|  4.57k|       (timeouts->offset_us[id] > timeouts->offset_us[timeouts->next[id]])) {
  ------------------
  |  Branch (3653:8): [True: 0, False: 4.57k]
  ------------------
 3654|      0|      failf(data, "expire timeouts not sorted: %d happens after %d but "
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
 3655|      0|            "is listed before", (int)id, (int)timeouts->next[id]);
 3656|      0|      return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 3657|      0|    }
 3658|  14.2k|  }
 3659|  12.1k|  return TRUE;
  ------------------
  |  | 1045|  12.1k|#define TRUE true
  ------------------
 3660|  12.1k|}
multi.c:multi_clear_timeout:
 3667|  7.11k|{
 3668|  7.11k|  struct expire_timers *timeouts = &data->state.timeouts;
 3669|  7.11k|  uint8_t orig_first = timeouts->first;
 3670|  7.11k|  uint8_t *anchor = &timeouts->first;
 3671|  7.11k|  uint8_t id = (uint8_t)eid;
 3672|       |
 3673|  7.11k|  if((unsigned)eid >= EXPIRE_LAST) {
  ------------------
  |  Branch (3673:6): [True: 0, False: 7.11k]
  ------------------
 3674|      0|    DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (3674:5): [Folded, False: 0]
  |  Branch (3674:5): [Folded, False: 0]
  ------------------
 3675|      0|    return;
 3676|      0|  }
 3677|       |
 3678|  13.7k|  while(*anchor < EXPIRE_LAST) {
  ------------------
  |  Branch (3678:9): [True: 6.60k, False: 7.11k]
  ------------------
 3679|  6.60k|    if(*anchor == id) {
  ------------------
  |  Branch (3679:8): [True: 0, False: 6.60k]
  ------------------
 3680|      0|      *anchor = timeouts->next[id];
 3681|      0|      break;
 3682|      0|    }
 3683|  6.60k|    anchor = &timeouts->next[*anchor];
 3684|  6.60k|  }
 3685|  7.11k|  DEBUGASSERT(multi_timeouts_check(data));
  ------------------
  |  | 1075|  7.11k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (3685:3): [True: 0, False: 7.11k]
  |  Branch (3685:3): [True: 7.11k, False: 0]
  ------------------
 3686|  7.11k|  if(Curl_timeouts_has(data)) {
  ------------------
  |  Branch (3686:6): [True: 4.57k, False: 2.53k]
  ------------------
 3687|  4.57k|    struct Curl_multi *multi = data->multi;
 3688|       |
 3689|  4.57k|    if(!multi) {
  ------------------
  |  Branch (3689:8): [True: 0, False: 4.57k]
  ------------------
 3690|      0|      DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (3690:7): [Folded, False: 0]
  |  Branch (3690:7): [Folded, False: 0]
  ------------------
 3691|      0|      return;
 3692|      0|    }
 3693|  4.57k|    if((timeouts->first >= EXPIRE_LAST) || /* no more timeouts */
  ------------------
  |  Branch (3693:8): [True: 0, False: 4.57k]
  ------------------
 3694|  4.57k|       (timeouts->first != orig_first)) {  /* active timeout changed */
  ------------------
  |  Branch (3694:8): [True: 0, False: 4.57k]
  ------------------
 3695|      0|      Curl_timeouts_remove(&multi->timeouts, data);
 3696|      0|    }
 3697|  4.57k|    if((timeouts->first < EXPIRE_LAST) && !Curl_timeouts_has(data)) {
  ------------------
  |  Branch (3697:8): [True: 4.57k, False: 0]
  |  Branch (3697:43): [True: 0, False: 4.57k]
  ------------------
 3698|      0|      Curl_timeouts_add(&multi->timeouts, data,
 3699|      0|                        timeouts->offset_us[timeouts->first]);
 3700|      0|    }
 3701|  4.57k|  }
 3702|  7.11k|}
multi.c:multi_schedule_pending:
 3868|  9.82k|{
 3869|  9.82k|  uint32_t mid = multi->last_pending_mid;
 3870|       |
 3871|  9.82k|  if(mid) {
  ------------------
  |  Branch (3871:6): [True: 0, False: 9.82k]
  ------------------
 3872|      0|    while(Curl_uint32_bset_next(&multi->pending, mid, &mid)) {
  ------------------
  |  Branch (3872:11): [True: 0, False: 0]
  ------------------
 3873|      0|      struct Curl_easy *data = Curl_multi_get_easy(multi, mid);
 3874|      0|      if(data) {
  ------------------
  |  Branch (3874:10): [True: 0, False: 0]
  ------------------
 3875|      0|        move_pending_to_connect(multi, data);
 3876|      0|        multi->last_pending_mid = mid;
 3877|      0|        return;
 3878|      0|      }
 3879|       |      /* transfer no longer known, should not happen */
 3880|      0|      Curl_uint32_bset_remove(&multi->pending, mid);
 3881|      0|      DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (3881:7): [Folded, False: 0]
  |  Branch (3881:7): [Folded, False: 0]
  ------------------
 3882|      0|    }
 3883|       |    /* found no pending transfers with `mid` larger than `last_pending_mid`.
 3884|       |     * Start at the beginning of the pending set again. */
 3885|      0|    multi->last_pending_mid = 0;
 3886|      0|  }
 3887|       |
 3888|  9.82k|  if(Curl_uint32_bset_first(&multi->pending, &mid)) {
  ------------------
  |  Branch (3888:6): [True: 0, False: 9.82k]
  ------------------
 3889|      0|    do {
 3890|      0|      struct Curl_easy *data = Curl_multi_get_easy(multi, mid);
 3891|      0|      if(data) {
  ------------------
  |  Branch (3891:10): [True: 0, False: 0]
  ------------------
 3892|      0|        move_pending_to_connect(multi, data);
 3893|      0|        multi->last_pending_mid = mid;
 3894|      0|        return;
 3895|      0|      }
 3896|       |      /* transfer no longer known, should not happen */
 3897|      0|      Curl_uint32_bset_remove(&multi->pending, mid);
 3898|      0|      DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (3898:7): [Folded, False: 0]
  |  Branch (3898:7): [Folded, False: 0]
  ------------------
 3899|      0|    } while(Curl_uint32_bset_next(&multi->pending, mid, &mid));
  ------------------
  |  Branch (3899:13): [True: 0, False: 0]
  ------------------
 3900|      0|  }
 3901|  9.82k|}
multi.c:multi_xfer_bufs_free:
 4144|  2.53k|{
 4145|  2.53k|  DEBUGASSERT(multi);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (4145:3): [True: 0, False: 2.53k]
  |  Branch (4145:3): [True: 2.53k, False: 0]
  ------------------
 4146|  2.53k|  curlx_safefree(multi->xfer_buf);
  ------------------
  |  | 1332|  2.53k|  do {                      \
  |  | 1333|  2.53k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.53k|    (ptr) = NULL;           \
  |  | 1335|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
 4147|  2.53k|  multi->xfer_buf_len = 0;
 4148|  2.53k|  multi->xfer_buf_borrowed = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
 4149|  2.53k|  curlx_safefree(multi->xfer_ulbuf);
  ------------------
  |  | 1332|  2.53k|  do {                      \
  |  | 1333|  2.53k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.53k|    (ptr) = NULL;           \
  |  | 1335|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
 4150|  2.53k|  multi->xfer_ulbuf_len = 0;
 4151|  2.53k|  multi->xfer_ulbuf_borrowed = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
 4152|  2.53k|  curlx_safefree(multi->xfer_sockbuf);
  ------------------
  |  | 1332|  2.53k|  do {                      \
  |  | 1333|  2.53k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.53k|    (ptr) = NULL;           \
  |  | 1335|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
 4153|  2.53k|  multi->xfer_sockbuf_len = 0;
 4154|       |  multi->xfer_sockbuf_borrowed = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
 4155|  2.53k|}

Curl_multi_ev_socket_done:
  618|  2.03k|{
  619|  2.03k|  mev_forget_socket(multi, data, s, "socket done");
  620|  2.03k|}
Curl_multi_ev_xfer_done:
  624|  2.53k|{
  625|  2.53k|  DEBUGASSERT(!data->conn); /* transfer should have been detached */
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (625:3): [True: 0, False: 2.53k]
  |  Branch (625:3): [True: 2.53k, False: 0]
  ------------------
  626|  2.53k|  (void)mev_assess(multi, data, NULL);
  627|  2.53k|  Curl_meta_remove(data, CURL_META_MEV_POLLSET);
  ------------------
  |  |   34|  2.53k|#define CURL_META_MEV_POLLSET   "meta:mev:ps"
  ------------------
  628|  2.53k|}
Curl_multi_ev_conn_done:
  633|  2.03k|{
  634|  2.03k|  (void)mev_assess(multi, data, conn);
  635|  2.03k|  Curl_conn_meta_remove(conn, CURL_META_MEV_POLLSET);
  ------------------
  |  |   34|  2.03k|#define CURL_META_MEV_POLLSET   "meta:mev:ps"
  ------------------
  636|  2.03k|}
Curl_multi_ev_init:
  639|  2.53k|{
  640|  2.53k|  Curl_hash_init(&multi->ev.sh_entries, hashsize, mev_sh_entry_hash,
  641|  2.53k|                 mev_sh_entry_compare, mev_sh_entry_dtor);
  642|  2.53k|}
Curl_multi_ev_cleanup:
  645|  2.53k|{
  646|  2.53k|  Curl_hash_destroy(&multi->ev.sh_entries);
  647|  2.53k|}
multi_ev.c:mev_assess:
  500|  4.57k|{
  501|  4.57k|  struct easy_pollset ps, *last_ps;
  502|  4.57k|  CURLMcode mresult = CURLM_OK;
  503|       |
  504|  4.57k|  if(!multi || !multi->socket_cb)
  ------------------
  |  Branch (504:6): [True: 0, False: 4.57k]
  |  Branch (504:16): [True: 4.57k, False: 0]
  ------------------
  505|  4.57k|    return CURLM_OK;
  506|       |
  507|      0|  Curl_pollset_init(&ps);
  508|      0|  if(conn) {
  ------------------
  |  Branch (508:6): [True: 0, False: 0]
  ------------------
  509|      0|    CURLcode result = Curl_conn_adjust_pollset(data, conn, &ps);
  510|      0|    if(result) {
  ------------------
  |  Branch (510:8): [True: 0, False: 0]
  ------------------
  511|      0|      mresult = (result == CURLE_OUT_OF_MEMORY) ?
  ------------------
  |  Branch (511:17): [True: 0, False: 0]
  ------------------
  512|      0|        CURLM_OUT_OF_MEMORY : CURLM_INTERNAL_ERROR;
  513|      0|      goto out;
  514|      0|    }
  515|      0|  }
  516|      0|  else
  517|      0|    Curl_multi_pollset(data, &ps);
  518|      0|  last_ps = mev_get_last_pollset(data, conn);
  519|       |
  520|      0|  if(!last_ps && ps.n) {
  ------------------
  |  Branch (520:6): [True: 0, False: 0]
  |  Branch (520:18): [True: 0, False: 0]
  ------------------
  521|      0|    if(conn)
  ------------------
  |  Branch (521:8): [True: 0, False: 0]
  ------------------
  522|      0|      last_ps = mev_add_new_conn_pollset(conn);
  523|      0|    else
  524|      0|      last_ps = mev_add_new_xfer_pollset(data);
  525|      0|    if(!last_ps) {
  ------------------
  |  Branch (525:8): [True: 0, False: 0]
  ------------------
  526|      0|      mresult = CURLM_OUT_OF_MEMORY;
  527|      0|      goto out;
  528|      0|    }
  529|      0|  }
  530|       |
  531|      0|  if(last_ps)
  ------------------
  |  Branch (531:6): [True: 0, False: 0]
  ------------------
  532|      0|    mresult = mev_pollset_diff(multi, data, conn, &ps, last_ps);
  533|      0|  else
  534|      0|    DEBUGASSERT(!ps.n);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (534:5): [True: 0, False: 0]
  |  Branch (534:5): [True: 0, False: 0]
  ------------------
  535|      0|out:
  536|      0|  Curl_pollset_cleanup(&ps);
  537|      0|  return mresult;
  538|      0|}
multi_ev.c:mev_sh_entry_get:
   88|  2.03k|{
   89|  2.03k|  if(s != CURL_SOCKET_BAD) {
  ------------------
  |  |  147|  2.03k|#define CURL_SOCKET_BAD (-1)
  ------------------
  |  Branch (89:6): [True: 2.03k, False: 0]
  ------------------
   90|       |    /* only look for proper sockets */
   91|  2.03k|    return Curl_hash_pick(sh, (char *)&s, sizeof(curl_socket_t));
   92|  2.03k|  }
   93|      0|  return NULL;
   94|  2.03k|}
multi_ev.c:mev_forget_socket:
  195|  2.03k|{
  196|  2.03k|  struct mev_sh_entry *entry = mev_sh_entry_get(&multi->ev.sh_entries, s);
  197|  2.03k|  int rc = 0;
  198|       |
  199|  2.03k|  if(!entry) /* we never knew or already forgot about this socket */
  ------------------
  |  Branch (199:6): [True: 2.03k, False: 0]
  ------------------
  200|  2.03k|    return CURLM_OK;
  201|       |
  202|       |  /* We managed this socket before, tell the socket callback to forget it. */
  203|      0|  if(entry->announced && multi->socket_cb) {
  ------------------
  |  Branch (203:6): [True: 0, False: 0]
  |  Branch (203:26): [True: 0, False: 0]
  ------------------
  204|      0|    struct Curl_mapi_guard guard;
  205|       |
  206|      0|    NOVERBOSE((void)cause);
  ------------------
  |  | 1612|      0|#define NOVERBOSE(x) Curl_nop_stmt
  |  |  ------------------
  |  |  |  | 1183|      0|#define Curl_nop_stmt do {} while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1183:35): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  207|      0|    CURL_TRC_M(data, "ev %s, call(fd=%" FMT_SOCKET_T ", ev=REMOVE)", cause, s);
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  208|      0|    CURL_CBAPI_MULTI_START(&guard, multi, multi_socket_cb);
  ------------------
  |  |  203|      0|  Curl_cbapi_enter((g), NULL, (m), CURL_CBAPI_FN_##fn)
  ------------------
  209|      0|    rc = multi->socket_cb(data, s, CURL_POLL_REMOVE,
  ------------------
  |  |  286|      0|#define CURL_POLL_REMOVE 4
  ------------------
  210|      0|                          multi->socket_userp, entry->user_data);
  211|      0|    CURL_CBAPI_END(&guard);
  ------------------
  |  |  205|      0|  Curl_cbapi_leave(g)
  ------------------
  212|      0|    entry = mev_sh_entry_get(&multi->ev.sh_entries, s);
  213|      0|    if(entry)
  ------------------
  |  Branch (213:8): [True: 0, False: 0]
  ------------------
  214|      0|      entry->announced = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  215|      0|  }
  216|       |
  217|      0|  mev_sh_entry_kill(multi, s);
  218|      0|  if(rc == -1) {
  ------------------
  |  Branch (218:6): [True: 0, False: 0]
  ------------------
  219|      0|    multi->dead = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  220|      0|    return CURLM_ABORTED_BY_CALLBACK;
  221|      0|  }
  222|      0|  return CURLM_OK;
  223|      0|}

Curl_mntfy_init:
  125|  2.53k|{
  126|  2.53k|  memset(&multi->ntfy, 0, sizeof(multi->ntfy));
  127|  2.53k|  Curl_uint32_bset_init(&multi->ntfy.enabled);
  128|  2.53k|}
Curl_mntfy_resize:
  131|  2.53k|{
  132|  2.53k|  if(Curl_uint32_bset_resize(&multi->ntfy.enabled, CURLMNOTIFY_EASY_DONE + 1))
  ------------------
  |  |  540|  2.53k|#define CURLMNOTIFY_EASY_DONE    1
  ------------------
  |  Branch (132:6): [True: 0, False: 2.53k]
  ------------------
  133|      0|    return CURLM_OUT_OF_MEMORY;
  134|  2.53k|  return CURLM_OK;
  135|  2.53k|}
Curl_mntfy_cleanup:
  138|  2.53k|{
  139|  2.53k|  while(multi->ntfy.head) {
  ------------------
  |  Branch (139:9): [True: 0, False: 2.53k]
  ------------------
  140|      0|    struct mntfy_chunk *chunk = multi->ntfy.head;
  141|      0|    multi->ntfy.head = chunk->next;
  142|      0|    mnfty_chunk_destroy(chunk);
  143|      0|  }
  144|       |  multi->ntfy.tail = NULL;
  145|  2.53k|  Curl_uint32_bset_destroy(&multi->ntfy.enabled);
  146|  2.53k|}

Curl_netrc_init:
  665|  5.07k|{
  666|  5.07k|  curlx_dyn_init(&store->filebuf, MAX_NETRC_FILE);
  ------------------
  |  |   77|  5.07k|#define MAX_NETRC_FILE  (128 * 1024)
  ------------------
  667|  5.07k|  store->loaded = FALSE;
  ------------------
  |  | 1048|  5.07k|#define FALSE false
  ------------------
  668|       |  store->filename = NULL;
  669|  5.07k|}
Curl_netrc_cleanup:
  671|  7.11k|{
  672|  7.11k|  curlx_dyn_free(&store->filebuf);
  673|  7.11k|  curlx_safefree(store->filename);
  ------------------
  |  | 1332|  7.11k|  do {                      \
  |  | 1333|  7.11k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  7.11k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  7.11k|    (ptr) = NULL;           \
  |  | 1335|  7.11k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 7.11k]
  |  |  ------------------
  ------------------
  674|       |  store->loaded = FALSE;
  ------------------
  |  | 1048|  7.11k|#define FALSE false
  ------------------
  675|  7.11k|}

Curl_peer_link:
  295|  22.4k|{
  296|  22.4k|  if(*pdest != src) {
  ------------------
  |  Branch (296:6): [True: 18.3k, False: 4.07k]
  ------------------
  297|  18.3k|    Curl_peer_unlink(pdest);
  298|  18.3k|    *pdest = src;
  299|  18.3k|    if(src) {
  ------------------
  |  Branch (299:8): [True: 18.3k, False: 0]
  ------------------
  300|  18.3k|      DEBUGASSERT(src->refcount < UINT32_MAX);
  ------------------
  |  | 1075|  18.3k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (300:7): [True: 0, False: 18.3k]
  |  Branch (300:7): [True: 18.3k, False: 0]
  ------------------
  301|  18.3k|      src->refcount++;
  302|  18.3k|    }
  303|  18.3k|  }
  304|  22.4k|}
Curl_peer_unlink:
  307|  95.2k|{
  308|  95.2k|  if(*ppeer) {
  ------------------
  |  Branch (308:6): [True: 22.4k, False: 72.8k]
  ------------------
  309|  22.4k|    struct Curl_peer *peer = *ppeer;
  310|       |
  311|  22.4k|    DEBUGASSERT(peer->refcount);
  ------------------
  |  | 1075|  22.4k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (311:5): [True: 0, False: 22.4k]
  |  Branch (311:5): [True: 22.4k, False: 0]
  ------------------
  312|  22.4k|    *ppeer = NULL;
  313|  22.4k|    if(peer->refcount)
  ------------------
  |  Branch (313:8): [True: 22.4k, False: 0]
  ------------------
  314|  22.4k|      peer->refcount--;
  315|  22.4k|    if(!peer->refcount) {
  ------------------
  |  Branch (315:8): [True: 4.09k, False: 18.3k]
  ------------------
  316|  4.09k|      curlx_free(peer);
  ------------------
  |  | 1476|  4.09k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  317|  4.09k|    }
  318|  22.4k|  }
  319|  95.2k|}
Curl_peer_equal:
  322|  8.30k|{
  323|  8.30k|  return (p1 == p2) ||
  ------------------
  |  Branch (323:10): [True: 6.27k, False: 2.03k]
  ------------------
  324|  2.03k|         (p1 && p2 &&
  ------------------
  |  Branch (324:11): [True: 2.03k, False: 0]
  |  Branch (324:17): [True: 2.03k, False: 0]
  ------------------
  325|  2.03k|          (p1->scheme == p2->scheme) &&
  ------------------
  |  Branch (325:11): [True: 2.03k, False: 0]
  ------------------
  326|  2.03k|          Curl_peer_same_destination(p1, p2));
  ------------------
  |  Branch (326:11): [True: 1, False: 2.03k]
  ------------------
  327|  8.30k|}
Curl_peer_same_destination:
  342|  8.14k|{
  343|  8.14k|  return (p1 == p2) ||
  ------------------
  |  Branch (343:10): [True: 6.10k, False: 2.03k]
  ------------------
  344|  2.03k|         (p1 && p2 &&
  ------------------
  |  Branch (344:11): [True: 2.03k, False: 0]
  |  Branch (344:17): [True: 2.03k, False: 0]
  ------------------
  345|  2.03k|          (p1->port == p2->port) &&
  ------------------
  |  Branch (345:11): [True: 2.03k, False: 0]
  ------------------
  346|  2.03k|          peer_same_hostname(p1, p2) &&
  ------------------
  |  Branch (346:11): [True: 1, False: 2.03k]
  ------------------
  347|      1|          (p1->scopeid == p2->scopeid) &&
  ------------------
  |  Branch (347:11): [True: 1, False: 0]
  ------------------
  348|      1|          (p1->scopeid || curl_strequal(p1->zoneid, p2->zoneid)));
  ------------------
  |  Branch (348:12): [True: 0, False: 1]
  |  Branch (348:27): [True: 1, False: 0]
  ------------------
  349|  8.14k|}
Curl_peer_from_url:
  355|  2.18k|{
  356|  2.18k|  struct peer_parse pp;
  357|  2.18k|  char *zoneid = NULL, *scheme = NULL, *hostname = NULL;
  358|  2.18k|  CURLUcode uc;
  359|  2.18k|  CURLcode result;
  360|       |
  361|  2.18k|  Curl_peer_unlink(ppeer);
  362|  2.18k|  memset(&pp, 0, sizeof(pp));
  363|       |
  364|  2.18k|  uc = curl_url_get(uh, CURLUPART_SCHEME, &scheme, 0);
  365|  2.18k|  if(uc)
  ------------------
  |  Branch (365:6): [True: 0, False: 2.18k]
  ------------------
  366|      0|    return Curl_uc_to_curlcode(uc);
  367|  2.18k|  pp.scheme = Curl_get_scheme(scheme);
  368|  2.18k|  if(!pp.scheme) {
  ------------------
  |  Branch (368:6): [True: 0, False: 2.18k]
  ------------------
  369|      0|    failf(data, "Protocol \"%s\" not supported%s", scheme,
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  370|      0|          data->state.this_is_a_follow ? " (in redirect)" : "");
  ------------------
  |  Branch (370:11): [True: 0, False: 0]
  ------------------
  371|      0|    result = CURLE_UNSUPPORTED_PROTOCOL;
  372|      0|    goto out;
  373|      0|  }
  374|       |
  375|  2.18k|  uc = curl_url_get(uh, CURLUPART_HOST, &hostname, 0);
  376|  2.18k|  if(uc) {
  ------------------
  |  Branch (376:6): [True: 0, False: 2.18k]
  ------------------
  377|      0|    if((uc == CURLUE_NO_HOST) && (pp.scheme->flags & PROTOPT_NONETWORK))
  ------------------
  |  |  214|      0|#define PROTOPT_NONETWORK (1 << 4) /* protocol does not use the network! */
  ------------------
  |  Branch (377:8): [True: 0, False: 0]
  |  Branch (377:34): [True: 0, False: 0]
  ------------------
  378|      0|      ; /* acceptable */
  379|      0|    else {
  380|      0|      result = CURLE_OUT_OF_MEMORY;
  381|      0|      goto out;
  382|      0|    }
  383|      0|  }
  384|  2.18k|  else if(strlen(hostname) > MAX_URL_LEN) {
  ------------------
  |  |   29|  2.18k|#define MAX_URL_LEN 0xffff
  ------------------
  |  Branch (384:11): [True: 0, False: 2.18k]
  ------------------
  385|      0|    failf(data, "Too long hostname (maximum is %d)", MAX_URL_LEN);
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
                  failf(data, "Too long hostname (maximum is %d)", MAX_URL_LEN);
  ------------------
  |  |   29|      0|#define MAX_URL_LEN 0xffff
  ------------------
  386|      0|    result = CURLE_URL_MALFORMAT;
  387|      0|    goto out;
  388|      0|  }
  389|       |
  390|  2.18k|  pp.host_user.str = hostname ? hostname : "";
  ------------------
  |  Branch (390:22): [True: 2.18k, False: 0]
  ------------------
  391|  2.18k|  pp.host_user.len = strlen(pp.host_user.str);
  392|  2.18k|  if(pp.host_user.len) {
  ------------------
  |  Branch (392:6): [True: 2.18k, False: 0]
  ------------------
  393|  2.18k|    result = peer_parse_host(data, &pp, FALSE);
  ------------------
  |  | 1048|  2.18k|#define FALSE false
  ------------------
  394|  2.18k|    if(result)
  ------------------
  |  Branch (394:8): [True: 121, False: 2.06k]
  ------------------
  395|    121|      goto out;
  396|  2.18k|  }
  397|      0|  else
  398|      0|    pp.host = pp.host_user;
  399|       |
  400|  2.06k|  if(port_override) {
  ------------------
  |  Branch (400:6): [True: 0, False: 2.06k]
  ------------------
  401|       |    /* if set, we use this instead of the port possibly given in the URL */
  402|      0|    char portbuf[16];
  403|      0|    curl_msnprintf(portbuf, sizeof(portbuf), "%d", port_override);
  404|      0|    uc = curl_url_set(uh, CURLUPART_PORT, portbuf, 0);
  405|      0|    if(uc) {
  ------------------
  |  Branch (405:8): [True: 0, False: 0]
  ------------------
  406|      0|      result = CURLE_OUT_OF_MEMORY;
  407|      0|      goto out;
  408|      0|    }
  409|      0|    else
  410|      0|      pp.port = port_override;
  411|      0|  }
  412|  2.06k|  else {
  413|  2.06k|    uc = Curl_url_get_port(uh, &pp.port);
  414|  2.06k|    if(uc) {
  ------------------
  |  Branch (414:8): [True: 0, False: 2.06k]
  ------------------
  415|      0|      if(uc == CURLUE_OUT_OF_MEMORY) {
  ------------------
  |  Branch (415:10): [True: 0, False: 0]
  ------------------
  416|      0|        result = CURLE_OUT_OF_MEMORY;
  417|      0|        goto out;
  418|      0|      }
  419|      0|      else if(!(pp.scheme->flags & PROTOPT_NONETWORK)) {
  ------------------
  |  |  214|      0|#define PROTOPT_NONETWORK (1 << 4) /* protocol does not use the network! */
  ------------------
  |  Branch (419:15): [True: 0, False: 0]
  ------------------
  420|      0|        result = CURLE_URL_MALFORMAT;
  421|      0|        goto out;
  422|      0|      }
  423|       |      /* no port ok when not a network scheme */
  424|      0|    }
  425|  2.06k|  }
  426|       |
  427|  2.06k|  if(scopeid_override)
  ------------------
  |  Branch (427:6): [True: 0, False: 2.06k]
  ------------------
  428|       |    /* Override any scope id from an URL zone. */
  429|      0|    pp.scopeid = scopeid_override;
  430|  2.06k|  else {
  431|  2.06k|    if(curl_url_get(uh, CURLUPART_ZONEID, &zoneid, 0) ==
  ------------------
  |  Branch (431:8): [True: 0, False: 2.06k]
  ------------------
  432|  2.06k|       CURLUE_OUT_OF_MEMORY) {
  433|      0|      result = CURLE_OUT_OF_MEMORY;
  434|      0|      goto out;
  435|      0|    }
  436|  2.06k|    if(zoneid) {
  ------------------
  |  Branch (436:8): [True: 5, False: 2.05k]
  ------------------
  437|      5|      pp.zoneid.str = zoneid;
  438|      5|      pp.zoneid.len = strlen(zoneid);
  439|      5|    }
  440|  2.06k|  }
  441|       |
  442|  2.06k|  result = peer_create(&pp, ppeer);
  443|  2.06k|  if(result)
  ------------------
  |  Branch (443:6): [True: 0, False: 2.06k]
  ------------------
  444|      0|    failf(data, "Error %d creating peer for %s:%u",
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  445|      0|          (int)result, pp.host_user.str, pp.port);
  446|       |
  447|  2.18k|out:
  448|  2.18k|  peer_parse_clear(&pp);
  449|  2.18k|  curlx_free(scheme);
  ------------------
  |  | 1476|  2.18k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  450|  2.18k|  curlx_free(hostname);
  ------------------
  |  | 1476|  2.18k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  451|  2.18k|  curlx_free(zoneid);
  ------------------
  |  | 1476|  2.18k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  452|  2.18k|  return result;
  453|  2.06k|}
Curl_peer_from_connect_to:
  461|  2.03k|{
  462|  2.03k|  struct peer_parse pp;
  463|  2.03k|  const char *portstr = NULL;
  464|  2.03k|  CURLcode result;
  465|       |
  466|  2.03k|  Curl_peer_unlink(ppeer);
  467|  2.03k|  memset(&pp, 0, sizeof(pp));
  468|  2.03k|  if(!connect_to || !*connect_to)
  ------------------
  |  Branch (468:6): [True: 0, False: 2.03k]
  |  Branch (468:21): [True: 0, False: 2.03k]
  ------------------
  469|      0|    return CURLE_FAILED_INIT;
  470|       |
  471|  2.03k|  pp.scheme = dest->scheme;
  472|       |
  473|       |  /* detect and extract RFC6874-style IPv6-addresses */
  474|  2.03k|  if(connect_to[0] == '[') {
  ------------------
  |  Branch (474:6): [True: 0, False: 2.03k]
  ------------------
  475|      0|    const char *s = strchr(connect_to + 1, ']');
  476|      0|    if(!s) {
  ------------------
  |  Branch (476:8): [True: 0, False: 0]
  ------------------
  477|      0|      failf(data, "Invalid IPv6 address format in '%s'", connect_to);
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  478|      0|      result = CURLE_SETOPT_OPTION_SYNTAX;
  479|      0|      goto out;
  480|      0|    }
  481|      0|    portstr = strchr(s, ':');
  482|      0|    pp.host_user.str = connect_to;
  483|      0|    pp.host_user.len = s - pp.host_user.str + 1;
  484|      0|    pp.ipv6 = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  485|      0|  }
  486|  2.03k|  else {
  487|  2.03k|    portstr = strchr(connect_to, ':');
  488|  2.03k|    pp.host_user.str = connect_to;
  489|  2.03k|    pp.host_user.len = portstr ?
  ------------------
  |  Branch (489:24): [True: 2.03k, False: 0]
  ------------------
  490|  2.03k|      (size_t)(portstr - connect_to) : strlen(connect_to);
  491|  2.03k|  }
  492|       |
  493|  2.03k|  if(!pp.host_user.len) { /* no hostname found, only port switch */
  ------------------
  |  Branch (493:6): [True: 0, False: 2.03k]
  ------------------
  494|      0|    pp.host_user.str = dest->user_hostname;
  495|      0|    pp.host_user.len = strlen(dest->user_hostname);
  496|      0|  }
  497|       |
  498|  2.03k|  result = peer_parse_host(data, &pp, FALSE);
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  499|  2.03k|  if(result)
  ------------------
  |  Branch (499:6): [True: 0, False: 2.03k]
  ------------------
  500|      0|    goto out;
  501|       |
  502|  2.03k|  if(portstr && portstr[1]) {
  ------------------
  |  Branch (502:6): [True: 2.03k, False: 0]
  |  Branch (502:17): [True: 0, False: 2.03k]
  ------------------
  503|      0|    const char *p = portstr + 1;
  504|      0|    curl_off_t portparse;
  505|      0|    if(curlx_str_number(&p, &portparse, 0xffff)) {
  ------------------
  |  Branch (505:8): [True: 0, False: 0]
  ------------------
  506|      0|      failf(data, "No valid port number in '%s'", connect_to);
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  507|      0|      result = CURLE_SETOPT_OPTION_SYNTAX;
  508|      0|      goto out;
  509|      0|    }
  510|      0|    pp.port = (uint16_t)portparse; /* we know it will fit */
  511|      0|  }
  512|  2.03k|  else
  513|  2.03k|    pp.port = dest->port;
  514|       |
  515|       |#ifndef USE_IPV6
  516|       |  if(pp.ipv6) {
  517|       |    failf(data, "Use of IPv6 in *_CONNECT_TO without IPv6 support built-in");
  518|       |    result = CURLE_NOT_BUILT_IN;
  519|       |    goto out;
  520|       |  }
  521|       |#endif
  522|       |
  523|  2.03k|  result = peer_create(&pp, ppeer);
  524|  2.03k|  CURL_TRC_M(data, "connect-to peer_create2 -> %d", (int)result);
  ------------------
  |  |  148|  2.03k|  do {                                   \
  |  |  149|  2.03k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  2.03k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.03k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.03k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 2.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  2.03k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  525|       |
  526|  2.03k|out:
  527|  2.03k|  CURL_TRC_M(data, "parse connect_to peer: %s -> %d", connect_to, (int)result);
  ------------------
  |  |  148|  2.03k|  do {                                   \
  |  |  149|  2.03k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  2.03k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.03k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.03k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 2.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  2.03k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  528|  2.03k|  peer_parse_clear(&pp);
  529|  2.03k|  return result;
  530|  2.03k|}
peer.c:peer_parse_host:
  186|  4.22k|{
  187|  4.22k|  if(!pp || !pp->host_user.str || !pp->host_user.len)
  ------------------
  |  Branch (187:6): [True: 0, False: 4.22k]
  |  Branch (187:13): [True: 0, False: 4.22k]
  |  Branch (187:35): [True: 0, False: 4.22k]
  ------------------
  188|      0|    return CURLE_FAILED_INIT;
  189|       |
  190|  4.22k|  if(pp->host_user.str[0] == '[') {
  ------------------
  |  Branch (190:6): [True: 50, False: 4.17k]
  ------------------
  191|     50|    const char *s = pp->host_user.str + 1;
  192|     50|    struct Curl_str tmp;
  193|     50|    if(curlx_str_until(&s, &tmp, pp->host_user.len - 1, ']'))
  ------------------
  |  Branch (193:8): [True: 0, False: 50]
  ------------------
  194|      0|      return CURLE_URL_MALFORMAT;
  195|       |
  196|     50|    if(!Curl_looks_like_ipv6(tmp.str, tmp.len, TRUE,
  ------------------
  |  | 1045|     50|#define TRUE true
  ------------------
  |  Branch (196:8): [True: 0, False: 50]
  ------------------
  197|     50|                             &pp->host, &pp->zoneid)) {
  198|      0|      failf(data, "Invalid IPv6 address format in '%.*s'",
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  199|      0|            (int)pp->host_user.len, pp->host_user.str);
  200|      0|      return CURLE_URL_MALFORMAT;
  201|      0|    }
  202|     50|    pp->ipv6 = TRUE;
  ------------------
  |  | 1045|     50|#define TRUE true
  ------------------
  203|     50|  }
  204|  4.17k|  else {
  205|  4.17k|#ifdef USE_IDN
  206|  4.17k|    if(!Curl_is_ASCII_str(&pp->host_user)) {
  ------------------
  |  Branch (206:8): [True: 121, False: 4.04k]
  ------------------
  207|    121|      CURLcode result;
  208|    121|      if(!pp->tmp_host_user) {
  ------------------
  |  Branch (208:10): [True: 121, False: 0]
  ------------------
  209|       |        /* need a null-terminated string for IDN */
  210|    121|        pp->tmp_host_user = curlx_memdup0(pp->host_user.str,
  211|    121|                                          pp->host_user.len);
  212|    121|        if(!pp->tmp_host_user)
  ------------------
  |  Branch (212:12): [True: 0, False: 121]
  ------------------
  213|      0|          return CURLE_OUT_OF_MEMORY;
  214|    121|      }
  215|    121|      result = Curl_idn_decode(pp->tmp_host_user, &pp->tmp_host);
  216|    121|      if(result)
  ------------------
  |  Branch (216:10): [True: 121, False: 0]
  ------------------
  217|    121|        return result;
  218|      0|      pp->host.str = pp->tmp_host;
  219|      0|      pp->host.len = strlen(pp->host.str);
  220|      0|    }
  221|  4.04k|    else
  222|  4.04k|#endif
  223|  4.04k|    if(scan_for_ipv6 &&
  ------------------
  |  Branch (223:8): [True: 0, False: 4.04k]
  ------------------
  224|      0|       Curl_looks_like_ipv6(pp->host_user.str, pp->host_user.len, TRUE,
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  |  Branch (224:8): [True: 0, False: 0]
  ------------------
  225|      0|                            &pp->host, &pp->zoneid)) {
  226|      0|      if(pp->host_user.len < MAX_IPADR_LEN) {
  ------------------
  |  |   41|      0|#define MAX_IPADR_LEN sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")
  ------------------
  |  Branch (226:10): [True: 0, False: 0]
  ------------------
  227|      0|        char tmp[MAX_IPADR_LEN];
  228|      0|        memcpy(tmp, pp->host_user.str, pp->host_user.len);
  229|      0|        tmp[pp->host_user.len] = 0;
  230|      0|        pp->ipv6 = !Curl_is_ipv4addr(tmp);
  231|      0|      }
  232|      0|      else
  233|      0|        pp->ipv6 = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  234|      0|    }
  235|  4.04k|    else
  236|  4.04k|      pp->host = pp->host_user;
  237|  4.17k|  }
  238|  4.09k|  return CURLE_OK;
  239|  4.22k|}
peer.c:peer_create:
  105|  4.09k|{
  106|  4.09k|  struct Curl_peer *peer = NULL;
  107|  4.09k|  CURLcode result = CURLE_OK;
  108|  4.09k|  size_t zone_alen = 0, host_alen = 0;
  109|       |
  110|  4.09k|  if(!pp || !pp->scheme)
  ------------------
  |  Branch (110:6): [True: 0, False: 4.09k]
  |  Branch (110:13): [True: 0, False: 4.09k]
  ------------------
  111|      0|    return CURLE_FAILED_INIT;
  112|  4.09k|  if(!pp->host.len && !(pp->scheme->flags & PROTOPT_NONETWORK))
  ------------------
  |  |  214|      0|#define PROTOPT_NONETWORK (1 << 4) /* protocol does not use the network! */
  ------------------
  |  Branch (112:6): [True: 0, False: 4.09k]
  |  Branch (112:23): [True: 0, False: 0]
  ------------------
  113|      0|    return CURLE_FAILED_INIT;
  114|       |
  115|  4.09k|  if((pp->host.str != pp->host_user.str) ||
  ------------------
  |  Branch (115:6): [True: 50, False: 4.04k]
  ------------------
  116|  4.04k|     (pp->host.len != pp->host_user.len)) {
  ------------------
  |  Branch (116:6): [True: 0, False: 4.04k]
  ------------------
  117|     50|    host_alen = pp->host.len + 1;
  118|     50|  }
  119|  4.09k|  zone_alen = pp->zoneid.len ? (pp->zoneid.len + 1) : 0;
  ------------------
  |  Branch (119:15): [True: 5, False: 4.09k]
  ------------------
  120|       |
  121|       |  /* null-terminator already part of struct */
  122|  4.09k|  peer = curlx_calloc(1, sizeof(*peer) +
  ------------------
  |  | 1473|  4.09k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
  123|  4.09k|                         pp->host_user.len + host_alen + zone_alen);
  124|  4.09k|  if(!peer) {
  ------------------
  |  Branch (124:6): [True: 0, False: 4.09k]
  ------------------
  125|      0|    result = CURLE_OUT_OF_MEMORY;
  126|      0|    goto out;
  127|      0|  }
  128|       |
  129|  4.09k|  peer->refcount = 1;
  130|  4.09k|  peer->scheme = pp->scheme;
  131|  4.09k|  peer->hostname = peer->user_hostname;
  132|  4.09k|  peer->port = pp->port;
  133|  4.09k|  peer->scopeid = pp->scopeid;
  134|  4.09k|  peer->ipv6 = pp->ipv6;
  135|  4.09k|  peer->unix_socket = pp->unix_socket;
  136|  4.09k|  peer->abstract_uds = pp->abstract_uds;
  137|       |
  138|  4.09k|  if(pp->host_user.len)
  ------------------
  |  Branch (138:6): [True: 4.09k, False: 0]
  ------------------
  139|  4.09k|    memcpy(peer->user_hostname, pp->host_user.str, pp->host_user.len);
  140|       |
  141|  4.09k|  if(host_alen) {
  ------------------
  |  Branch (141:6): [True: 50, False: 4.04k]
  ------------------
  142|     50|    peer->hostname = peer->user_hostname + pp->host_user.len + 1;
  143|     50|    memcpy(peer->hostname, pp->host.str, pp->host.len);
  144|     50|  }
  145|       |
  146|  4.09k|  if(zone_alen) {
  ------------------
  |  Branch (146:6): [True: 5, False: 4.09k]
  ------------------
  147|      5|    peer->zoneid = peer->user_hostname + pp->host_user.len + 1 + host_alen;
  148|      5|    memcpy(peer->zoneid, pp->zoneid.str, pp->zoneid.len);
  149|      5|#ifdef USE_IPV6
  150|       |    /* Determine scope_id if not already provided */
  151|      5|    if(!peer->scopeid) {
  ------------------
  |  Branch (151:8): [True: 5, False: 0]
  ------------------
  152|      5|      const char *p = peer->zoneid;
  153|      5|      curl_off_t scope;
  154|      5|      if(!curlx_str_number(&p, &scope, UINT_MAX)) {
  ------------------
  |  Branch (154:10): [True: 2, False: 3]
  ------------------
  155|       |        /* A plain number, use it directly as a scope id. */
  156|      2|        peer->scopeid = (uint32_t)scope;
  157|      2|      }
  158|      3|#ifdef HAVE_IF_NAMETOINDEX
  159|      3|      else {
  160|       |        /* Zone identifier is not numeric */
  161|      3|        unsigned int idx = 0;
  162|      3|        idx = if_nametoindex(peer->zoneid);
  163|      3|        if(idx) {
  ------------------
  |  Branch (163:12): [True: 0, False: 3]
  ------------------
  164|      0|          peer->scopeid = (uint32_t)idx;
  165|      0|        }
  166|      3|        else {
  167|       |          /* Do we want to return an error here? */
  168|      3|        }
  169|      3|      }
  170|      5|#endif /* HAVE_IF_NAMETOINDEX */
  171|      5|    }
  172|      5|#endif /* USE_IPV6 */
  173|      5|  }
  174|       |
  175|  4.09k|out:
  176|  4.09k|  if(!result)
  ------------------
  |  Branch (176:6): [True: 4.09k, False: 0]
  ------------------
  177|  4.09k|    *ppeer = peer;
  178|      0|  else
  179|      0|    Curl_peer_unlink(&peer);
  180|  4.09k|  return result;
  181|  4.09k|}
peer.c:peer_parse_clear:
   96|  4.22k|{
   97|  4.22k|  curlx_free(pp->tmp_host_user);
  ------------------
  |  | 1476|  4.22k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   98|  4.22k|  curlx_free(pp->tmp_host);
  ------------------
  |  | 1476|  4.22k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   99|  4.22k|  curlx_free(pp->tmp_zoneid);
  ------------------
  |  | 1476|  4.22k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  100|  4.22k|  memset(pp, 0, sizeof(*pp));
  101|  4.22k|}
peer.c:peer_same_hostname:
  330|  2.03k|{
  331|       |  /* UNIX domain socket paths must be compared case-sensitive,
  332|       |   * as many filesystem are like that. */
  333|  2.03k|  return (p1->unix_socket == p2->unix_socket) &&
  ------------------
  |  Branch (333:10): [True: 2.03k, False: 0]
  ------------------
  334|  2.03k|         (p1->abstract_uds == p2->abstract_uds) &&
  ------------------
  |  Branch (334:10): [True: 2.03k, False: 0]
  ------------------
  335|  2.03k|         (p1->ipv6 == p2->ipv6) &&
  ------------------
  |  Branch (335:10): [True: 1.98k, False: 50]
  ------------------
  336|  1.98k|         (p1->unix_socket ?
  ------------------
  |  Branch (336:10): [True: 1, False: 1.98k]
  |  Branch (336:11): [True: 0, False: 1.98k]
  ------------------
  337|      0|          !strcmp(p1->hostname, p2->hostname) :
  338|  1.98k|          curl_strequal(p1->hostname, p2->hostname));
  339|  2.03k|}

Curl_pgrs_now:
  172|   105k|{
  173|   105k|  curlx_pnow(&data->progress.now);
  174|   105k|  return &data->progress.now;
  175|   105k|}
Curl_pgrsDone:
  189|  2.03k|{
  190|  2.03k|  int rc;
  191|  2.03k|  data->progress.delta.lastshow_us = -1;
  192|  2.03k|  rc = Curl_pgrsUpdate(data); /* the final (forced) update */
  193|  2.03k|  if(rc)
  ------------------
  |  Branch (193:6): [True: 0, False: 2.03k]
  ------------------
  194|      0|    return rc;
  195|       |
  196|  2.03k|  if(!data->progress.hide && !data->progress.callback)
  ------------------
  |  Branch (196:6): [True: 0, False: 2.03k]
  |  Branch (196:30): [True: 0, False: 0]
  ------------------
  197|       |    /* only output if we do not use a progress callback and we are not
  198|       |     * hidden */
  199|      0|    curl_mfprintf(data->set.err, "\n");
  200|       |
  201|  2.03k|  return 0;
  202|  2.03k|}
Curl_pgrsReset:
  205|  2.03k|{
  206|  2.03k|  Curl_pgrsSetUploadCounter(data, 0);
  207|  2.03k|  data->progress.dl.cur_size = 0;
  208|  2.03k|  Curl_pgrsSetUploadSize(data, -1);
  209|  2.03k|  Curl_pgrsSetDownloadSize(data, -1);
  210|  2.03k|  data->progress.speeder_c = 0; /* reset speed records */
  211|  2.03k|  data->progress.deliver = 0;
  212|  2.03k|  pgrs_speedinit(data);
  213|  2.03k|}
Curl_pgrsResetTransferSizes:
  217|  2.53k|{
  218|  2.53k|  Curl_pgrsSetDownloadSize(data, -1);
  219|  2.53k|  Curl_pgrsSetUploadSize(data, -1);
  220|  2.53k|}
Curl_pgrsTimeWas:
  266|  17.5k|{
  267|  17.5k|  timediff_t *delta = NULL;
  268|       |
  269|  17.5k|  switch(timer) {
  270|      0|  default:
  ------------------
  |  Branch (270:3): [True: 0, False: 17.5k]
  ------------------
  271|      0|  case TIMER_NONE:
  ------------------
  |  Branch (271:3): [True: 0, False: 17.5k]
  ------------------
  272|       |    /* mistake filter */
  273|      0|    break;
  274|  2.53k|  case TIMER_STARTOP:
  ------------------
  |  Branch (274:3): [True: 2.53k, False: 15.0k]
  ------------------
  275|       |    /* This is set at the start of a transfer */
  276|  2.53k|    data->progress.delta.startop_us =
  277|  2.53k|      curlx_ptimediff_us(&timestamp, &data->progress.start);
  278|  2.53k|    data->progress.delta.startqueue_us = data->progress.delta.startop_us;
  279|  2.53k|    break;
  280|  2.53k|  case TIMER_STARTSINGLE:
  ------------------
  |  Branch (280:3): [True: 2.53k, False: 15.0k]
  ------------------
  281|       |    /* This is set at the start of each single transfer */
  282|  2.53k|    data->progress.delta.startsingle_us =
  283|  2.53k|      curlx_ptimediff_us(&timestamp, &data->progress.start);
  284|  2.53k|    data->progress.startransfer_added = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  285|  2.53k|    break;
  286|  2.03k|  case TIMER_POSTQUEUE:
  ------------------
  |  Branch (286:3): [True: 2.03k, False: 15.5k]
  ------------------
  287|       |    /* Queue time is accumulative from all involved redirects */
  288|  2.03k|    data->progress.total.queued_us +=
  289|  2.03k|      curlx_ptimediff_us(&timestamp, &data->progress.start) -
  290|  2.03k|      data->progress.delta.startqueue_us;
  291|  2.03k|    break;
  292|  2.03k|  case TIMER_NAMELOOKUP:
  ------------------
  |  Branch (292:3): [True: 2.03k, False: 15.5k]
  ------------------
  293|  2.03k|    delta = &data->progress.total.nslookup_us;
  294|  2.03k|    break;
  295|  2.03k|  case TIMER_CONNECT:
  ------------------
  |  Branch (295:3): [True: 2.03k, False: 15.5k]
  ------------------
  296|  2.03k|    delta = &data->progress.total.connect_us;
  297|  2.03k|    break;
  298|      0|  case TIMER_APPCONNECT:
  ------------------
  |  Branch (298:3): [True: 0, False: 17.5k]
  ------------------
  299|      0|    delta = &data->progress.total.appconnect_us;
  300|      0|    break;
  301|  2.53k|  case TIMER_PRETRANSFER:
  ------------------
  |  Branch (301:3): [True: 2.53k, False: 15.0k]
  ------------------
  302|  2.53k|    delta = &data->progress.total.pretransfer_us;
  303|  2.53k|    break;
  304|  1.29k|  case TIMER_STARTTRANSFER:
  ------------------
  |  Branch (304:3): [True: 1.29k, False: 16.2k]
  ------------------
  305|       |    /* prevent updating t_starttransfer unless:
  306|       |     *   1. this is the first time we are setting t_starttransfer
  307|       |     *   2. a redirect has occurred since the last time t_starttransfer was set
  308|       |     * This prevents repeated invocations of the function from incorrectly
  309|       |     * changing the t_starttransfer time.
  310|       |     */
  311|  1.29k|    if(data->progress.startransfer_added) {
  ------------------
  |  Branch (311:8): [True: 44, False: 1.24k]
  ------------------
  312|     44|      CURL_TRC_M(data, "[%s] ignored", pgrs_timer_name(timer));
  ------------------
  |  |  148|     44|  do {                                   \
  |  |  149|     44|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|     44|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|     44|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|     88|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 44, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 44, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|     88|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 44, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|     44|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|     44|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|     44|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 44]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|     44|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|     44|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 44]
  |  |  ------------------
  ------------------
  313|     44|      return;
  314|     44|    }
  315|  1.24k|    data->progress.startransfer_added = TRUE;
  ------------------
  |  | 1045|  1.24k|#define TRUE true
  ------------------
  316|  1.24k|    delta = &data->progress.total.starttransfer_us;
  317|  1.24k|    break;
  318|  2.53k|  case TIMER_POSTRANSFER:
  ------------------
  |  Branch (318:3): [True: 2.53k, False: 15.0k]
  ------------------
  319|  2.53k|    delta = &data->progress.total.posttransfer_us;
  320|  2.53k|    break;
  321|      0|  case TIMER_REDIRECT:
  ------------------
  |  Branch (321:3): [True: 0, False: 17.5k]
  ------------------
  322|      0|    data->progress.delta.startredirect_us =
  323|      0|      curlx_ptimediff_us(&timestamp, &data->progress.start);
  324|       |    /* transfer starts queueing again */
  325|      0|    data->progress.delta.startqueue_us =
  326|      0|      data->progress.delta.startredirect_us;
  327|      0|    break;
  328|  17.5k|  }
  329|  17.5k|  if(delta) {
  ------------------
  |  Branch (329:6): [True: 10.3k, False: 7.11k]
  ------------------
  330|  10.3k|    timediff_t us = curlx_ptimediff_us(&timestamp, &data->progress.start) -
  331|  10.3k|                    data->progress.delta.startsingle_us;
  332|  10.3k|    if(us < 1)
  ------------------
  |  Branch (332:8): [True: 0, False: 10.3k]
  ------------------
  333|      0|      us = 1; /* make sure at least one microsecond passed */
  334|  10.3k|    *delta += us;
  335|  10.3k|    CURL_TRC_M(data, "[%s] added %" FMT_TIMEDIFF_T "us",
  ------------------
  |  |  148|  10.3k|  do {                                   \
  |  |  149|  10.3k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  10.3k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  10.3k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  20.7k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 10.3k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 10.3k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  20.7k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 10.3k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|  10.3k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  10.3k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|  10.3k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 10.3k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  10.3k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|  10.3k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 10.3k]
  |  |  ------------------
  ------------------
  336|  10.3k|               pgrs_timer_name(timer), us);
  337|  10.3k|  }
  338|  7.11k|  else
  339|  7.11k|    CURL_TRC_M(data, "[%s] set", pgrs_timer_name(timer));
  ------------------
  |  |  148|  7.11k|  do {                                   \
  |  |  149|  7.11k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  7.11k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  7.11k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  14.2k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 7.11k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 7.11k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  14.2k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 7.11k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|  7.11k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  7.11k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|  7.11k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 7.11k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  7.11k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|  7.11k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 7.11k]
  |  |  ------------------
  ------------------
  340|  17.5k|}
Curl_pgrsTime:
  349|  15.5k|{
  350|  15.5k|  Curl_pgrsTimeWas(data, timer, *Curl_pgrs_now(data));
  351|  15.5k|}
Curl_pgrsStart:
  354|  2.53k|{
  355|  2.53k|  struct Progress *p = &data->progress;
  356|       |
  357|  2.53k|  if(!pnow)
  ------------------
  |  Branch (357:6): [True: 2.53k, False: 0]
  ------------------
  358|  2.53k|    pnow = Curl_pgrs_now(data);
  359|  2.53k|  p->speeder_c = 0; /* reset the progress meter display */
  360|  2.53k|  p->start = *pnow;
  361|  2.53k|  memset(&p->delta, 0, sizeof(p->delta));
  362|  2.53k|  memset(&p->total, 0, sizeof(p->total));
  363|  2.53k|  p->startransfer_added = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  364|  2.53k|  p->dl.cur_size = 0;
  365|  2.53k|  p->ul.cur_size = 0;
  366|       |  /* the sizes are unknown at start */
  367|  2.53k|  p->dl_size_known = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  368|       |  p->ul_size_known = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  369|  2.53k|}
Curl_pgrs_deliver_check:
  374|  2.36k|{
  375|  2.36k|  if(data->set.max_filesize &&
  ------------------
  |  Branch (375:6): [True: 543, False: 1.81k]
  ------------------
  376|    543|     ((curl_off_t)delta > data->set.max_filesize - data->progress.deliver)) {
  ------------------
  |  Branch (376:6): [True: 0, False: 543]
  ------------------
  377|      0|    failf(data, "Would have exceeded max file size");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  378|      0|    return CURLE_FILESIZE_EXCEEDED;
  379|      0|  }
  380|  2.36k|  return CURLE_OK;
  381|  2.36k|}
Curl_pgrs_deliver_inc:
  386|  2.36k|{
  387|  2.36k|  data->progress.deliver += delta;
  388|  2.36k|}
Curl_pgrs_download_inc:
  391|  3.37k|{
  392|  3.37k|  if(delta) {
  ------------------
  |  Branch (392:6): [True: 3.37k, False: 0]
  ------------------
  393|  3.37k|    data->progress.dl.cur_size += delta;
  394|       |    Curl_rlimit_drain(&data->progress.dl.rlimit, delta, NULL);
  395|  3.37k|  }
  396|  3.37k|}
Curl_pgrs_upload_inc:
  399|    137|{
  400|    137|  if(delta) {
  ------------------
  |  Branch (400:6): [True: 137, False: 0]
  ------------------
  401|    137|    data->progress.ul.cur_size += delta;
  402|       |    Curl_rlimit_drain(&data->progress.ul.rlimit, delta, NULL);
  403|    137|  }
  404|    137|}
Curl_pgrsSetUploadCounter:
  410|  2.03k|{
  411|  2.03k|  data->progress.ul.cur_size = size;
  412|  2.03k|}
Curl_pgrsSetDownloadSize:
  415|  4.57k|{
  416|  4.57k|  if(size >= 0) {
  ------------------
  |  Branch (416:6): [True: 0, False: 4.57k]
  ------------------
  417|      0|    data->progress.dl.total_size = size;
  418|      0|    data->progress.dl_size_known = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  419|      0|  }
  420|  4.57k|  else {
  421|  4.57k|    data->progress.dl.total_size = 0;
  422|       |    data->progress.dl_size_known = FALSE;
  ------------------
  |  | 1048|  4.57k|#define FALSE false
  ------------------
  423|  4.57k|  }
  424|  4.57k|}
Curl_pgrsSetUploadSize:
  427|  4.57k|{
  428|  4.57k|  if(size >= 0) {
  ------------------
  |  Branch (428:6): [True: 0, False: 4.57k]
  ------------------
  429|      0|    data->progress.ul.total_size = size;
  430|      0|    data->progress.ul_size_known = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  431|      0|  }
  432|  4.57k|  else {
  433|  4.57k|    data->progress.ul.total_size = 0;
  434|       |    data->progress.ul_size_known = FALSE;
  ------------------
  |  | 1048|  4.57k|#define FALSE false
  ------------------
  435|  4.57k|  }
  436|  4.57k|}
Curl_pgrsUpdate:
  714|  4.83k|{
  715|  4.83k|  return pgrs_update(data, Curl_pgrs_now(data));
  716|  4.83k|}
Curl_pgrsUpdateX:
  720|  7.79k|{
  721|  7.79k|  return pgrs_update(data, pnow);
  722|  7.79k|}
Curl_pgrsUpdate_nometer:
  738|    504|{
  739|    504|  (void)progress_calc(data, Curl_pgrs_now(data));
  740|    504|}
Curl_pgrsCompleted:
  743|  2.53k|{
  744|  2.53k|  struct Progress * const p = &data->progress;
  745|  2.53k|  p->total.spent_us = curlx_ptimediff_us(Curl_pgrs_now(data), &p->start);
  746|  2.53k|}
Curl_pgrs_since_ms:
  751|  28.4k|{
  752|  28.4k|  if(!pnow)
  ------------------
  |  Branch (752:6): [True: 0, False: 28.4k]
  ------------------
  753|      0|    pnow = Curl_pgrs_now(data);
  754|  28.4k|  switch(timer) {
  755|  17.2k|  case TIMER_STARTOP:
  ------------------
  |  Branch (755:3): [True: 17.2k, False: 11.1k]
  ------------------
  756|  17.2k|    return (curlx_ptimediff_us(pnow, &data->progress.start) -
  757|  17.2k|            data->progress.delta.startop_us) / 1000;
  758|  11.1k|  case TIMER_STARTSINGLE:
  ------------------
  |  Branch (758:3): [True: 11.1k, False: 17.2k]
  ------------------
  759|  11.1k|    return (curlx_ptimediff_us(pnow, &data->progress.start) -
  760|  11.1k|            data->progress.delta.startsingle_us) / 1000;
  761|      0|  default:
  ------------------
  |  Branch (761:3): [True: 0, False: 28.4k]
  ------------------
  762|      0|    DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (762:5): [Folded, False: 0]
  |  Branch (762:5): [Folded, False: 0]
  ------------------
  763|      0|    return 0;
  764|  28.4k|  }
  765|  28.4k|}
progress.c:pgrs_speedinit:
  123|  2.03k|{
  124|  2.03k|  memset(&data->state.keeps_speed, 0, sizeof(struct curltime));
  125|  2.03k|}
progress.c:pgrs_update:
  708|  12.6k|{
  709|       |  bool showprogress = progress_calc(data, pnow);
  710|  12.6k|  return pgrsupdate(data, showprogress);
  711|  12.6k|}
progress.c:pgrsupdate:
  659|  12.6k|{
  660|  12.6k|  if(!data->progress.hide) {
  ------------------
  |  Branch (660:6): [True: 0, False: 12.6k]
  ------------------
  661|      0|    int rc;
  662|      0|    if(data->set.fxferinfo) {
  ------------------
  |  Branch (662:8): [True: 0, False: 0]
  ------------------
  663|       |      /* There is a callback set, call that */
  664|      0|      struct Curl_mapi_guard guard;
  665|      0|      CURL_CBAPI_START(&guard, data, easy_fxferinfo);
  ------------------
  |  |  201|      0|  Curl_cbapi_enter((g), (d), NULL, CURL_CBAPI_FN_##fn)
  ------------------
  666|      0|      rc = data->set.fxferinfo(data->set.progress_client,
  667|      0|                               data->progress.dl.total_size,
  668|      0|                               data->progress.dl.cur_size,
  669|      0|                               data->progress.ul.total_size,
  670|      0|                               data->progress.ul.cur_size);
  671|      0|      CURL_CBAPI_END(&guard);
  ------------------
  |  |  205|      0|  Curl_cbapi_leave(g)
  ------------------
  672|      0|      if(rc != CURL_PROGRESSFUNC_CONTINUE) {
  ------------------
  |  |  236|      0|#define CURL_PROGRESSFUNC_CONTINUE 0x10000001
  ------------------
  |  Branch (672:10): [True: 0, False: 0]
  ------------------
  673|      0|        if(rc) {
  ------------------
  |  Branch (673:12): [True: 0, False: 0]
  ------------------
  674|      0|          failf(data, "Callback aborted");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  675|      0|          return CURLE_ABORTED_BY_CALLBACK;
  676|      0|        }
  677|      0|        return CURLE_OK;
  678|      0|      }
  679|      0|    }
  680|      0|    else if(data->set.fprogress) {
  ------------------
  |  Branch (680:13): [True: 0, False: 0]
  ------------------
  681|       |      /* The older deprecated callback is set, call that */
  682|      0|      struct Curl_mapi_guard guard;
  683|      0|      CURL_CBAPI_START(&guard, data, easy_fprogress);
  ------------------
  |  |  201|      0|  Curl_cbapi_enter((g), (d), NULL, CURL_CBAPI_FN_##fn)
  ------------------
  684|      0|      rc = data->set.fprogress(data->set.progress_client,
  685|      0|                               (double)data->progress.dl.total_size,
  686|      0|                               (double)data->progress.dl.cur_size,
  687|      0|                               (double)data->progress.ul.total_size,
  688|      0|                               (double)data->progress.ul.cur_size);
  689|      0|      CURL_CBAPI_END(&guard);
  ------------------
  |  |  205|      0|  Curl_cbapi_leave(g)
  ------------------
  690|      0|      if(rc != CURL_PROGRESSFUNC_CONTINUE) {
  ------------------
  |  |  236|      0|#define CURL_PROGRESSFUNC_CONTINUE 0x10000001
  ------------------
  |  Branch (690:10): [True: 0, False: 0]
  ------------------
  691|      0|        if(rc) {
  ------------------
  |  Branch (691:12): [True: 0, False: 0]
  ------------------
  692|      0|          failf(data, "Callback aborted");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  693|      0|          return CURLE_ABORTED_BY_CALLBACK;
  694|      0|        }
  695|      0|        return CURLE_OK;
  696|      0|      }
  697|      0|    }
  698|       |
  699|      0|    if(showprogress)
  ------------------
  |  Branch (699:8): [True: 0, False: 0]
  ------------------
  700|      0|      progress_meter(data);
  701|      0|  }
  702|       |
  703|  12.6k|  return CURLE_OK;
  704|  12.6k|}
progress.c:progress_calc:
  460|  13.1k|{
  461|  13.1k|  struct Progress * const p = &data->progress;
  462|  13.1k|  int i_next, i_oldest, i_latest;
  463|  13.1k|  timediff_t duration_us, elapsed_us;
  464|  13.1k|  curl_off_t amount;
  465|       |
  466|       |  /* The time spent so far (from the start) in microseconds */
  467|  13.1k|  elapsed_us = curlx_ptimediff_us(pnow, &p->start);
  468|  13.1k|  p->total.spent_us = elapsed_us;
  469|  13.1k|  p->dl.speed = trspeed(p->dl.cur_size, p->total.spent_us);
  470|  13.1k|  p->ul.speed = trspeed(p->ul.cur_size, p->total.spent_us);
  471|       |
  472|  13.1k|  if(!p->speeder_c) { /* no previous record exists */
  ------------------
  |  Branch (472:6): [True: 2.53k, False: 10.5k]
  ------------------
  473|  2.53k|    p->speed_amount[0] = p->dl.cur_size + p->ul.cur_size;
  474|  2.53k|    p->speed_time[0] = elapsed_us;
  475|  2.53k|    p->speeder_c++;
  476|       |    /* use the overall average at the start */
  477|  2.53k|    p->current_speed = p->ul.speed + p->dl.speed;
  478|  2.53k|    p->delta.lastshow_us = elapsed_us;
  479|  2.53k|    return TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  480|  2.53k|  }
  481|       |  /* We have at least one record now. Where to put the next and
  482|       |   * where is the latest one? */
  483|  10.5k|  i_next = p->speeder_c % CURL_SPEED_RECORDS;
  ------------------
  |  |  464|  10.5k|#define CURL_SPEED_RECORDS (5 + 1) /* 6 entries for 5 seconds */
  ------------------
  484|  10.5k|  i_latest = (i_next > 0) ? (i_next - 1) : (CURL_SPEED_RECORDS - 1);
  ------------------
  |  |  464|      0|#define CURL_SPEED_RECORDS (5 + 1) /* 6 entries for 5 seconds */
  ------------------
  |  Branch (484:14): [True: 10.5k, False: 0]
  ------------------
  485|       |
  486|       |  /* Make a new record only when some time has passed.
  487|       |   * Too frequent calls otherwise ruin the history. */
  488|  10.5k|  if((elapsed_us - p->speed_time[i_latest]) >= (1000 * 1000)) {
  ------------------
  |  Branch (488:6): [True: 0, False: 10.5k]
  ------------------
  489|      0|    p->speeder_c++;
  490|      0|    i_latest = i_next;
  491|      0|    p->speed_amount[i_latest] = p->dl.cur_size + p->ul.cur_size;
  492|      0|    p->speed_time[i_latest] = elapsed_us;
  493|      0|  }
  494|  10.5k|  else if(data->req.done) {
  ------------------
  |  Branch (494:11): [True: 0, False: 10.5k]
  ------------------
  495|       |    /* When a transfer is done, and we did not have a current speed
  496|       |     * already, update the last record. Otherwise, stay at the speed
  497|       |     * we have. The last chunk of data, when rate limiting, would increase
  498|       |     * reported speed since it no longer measures a full second. */
  499|      0|    if(!p->current_speed) {
  ------------------
  |  Branch (499:8): [True: 0, False: 0]
  ------------------
  500|      0|      p->speed_amount[i_latest] = p->dl.cur_size + p->ul.cur_size;
  501|      0|      p->speed_time[i_latest] = elapsed_us;
  502|      0|    }
  503|      0|  }
  504|  10.5k|  else {
  505|       |    /* transfer ongoing, wait for more time to pass. */
  506|  10.5k|    return FALSE;
  ------------------
  |  | 1048|  10.5k|#define FALSE false
  ------------------
  507|  10.5k|  }
  508|       |
  509|      0|  i_oldest = (p->speeder_c < CURL_SPEED_RECORDS) ? 0 :
  ------------------
  |  |  464|      0|#define CURL_SPEED_RECORDS (5 + 1) /* 6 entries for 5 seconds */
  ------------------
  |  Branch (509:14): [True: 0, False: 0]
  ------------------
  510|      0|             ((i_latest + 1) % CURL_SPEED_RECORDS);
  ------------------
  |  |  464|      0|#define CURL_SPEED_RECORDS (5 + 1) /* 6 entries for 5 seconds */
  ------------------
  511|       |
  512|       |  /* How much we transferred between oldest and current records */
  513|      0|  amount = p->speed_amount[i_latest] - p->speed_amount[i_oldest];
  514|       |  /* How long this took */
  515|      0|  duration_us = p->speed_time[i_latest] - p->speed_time[i_oldest];
  516|      0|  if(duration_us <= 0)
  ------------------
  |  Branch (516:6): [True: 0, False: 0]
  ------------------
  517|      0|    duration_us = 1;
  518|       |
  519|      0|  if(amount > (CURL_OFF_T_MAX / 1000000)) {
  ------------------
  |  |  588|      0|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  ------------------
  |  Branch (519:6): [True: 0, False: 0]
  ------------------
  520|       |    /* the 'amount' value is bigger than would fit in 64 bits if
  521|       |       multiplied with 1000000, so we use the double math for this */
  522|      0|    p->current_speed =
  523|      0|      (curl_off_t)(((double)amount * 1000000.0) / (double)duration_us);
  524|      0|  }
  525|      0|  else {
  526|      0|    p->current_speed = amount * 1000000 / duration_us;
  527|      0|  }
  528|       |
  529|      0|  if((p->delta.lastshow_us >= 0) && !data->req.done &&
  ------------------
  |  Branch (529:6): [True: 0, False: 0]
  |  Branch (529:37): [True: 0, False: 0]
  ------------------
  530|      0|     ((elapsed_us - p->delta.lastshow_us) < (1000 * 1000)))
  ------------------
  |  Branch (530:6): [True: 0, False: 0]
  ------------------
  531|      0|    return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  532|      0|  p->delta.lastshow_us = elapsed_us;
  533|       |  return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  534|      0|}
progress.c:trspeed:
  446|  26.2k|{
  447|  26.2k|  if(us < 1)
  ------------------
  |  Branch (447:6): [True: 0, False: 26.2k]
  ------------------
  448|      0|    return size * 1000000;
  449|  26.2k|  else if(size < CURL_OFF_T_MAX / 1000000)
  ------------------
  |  |  588|  26.2k|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  ------------------
  |  Branch (449:11): [True: 26.2k, False: 0]
  ------------------
  450|  26.2k|    return (size * 1000000) / us;
  451|      0|  else if(us >= 1000000)
  ------------------
  |  Branch (451:11): [True: 0, False: 0]
  ------------------
  452|      0|    return size / (us / 1000000);
  453|      0|  else
  454|      0|    return CURL_OFF_T_MAX;
  ------------------
  |  |  588|      0|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  ------------------
  455|  26.2k|}

Curl_getn_scheme:
  642|  21.6k|{
  643|  21.6k|  typedef const struct Curl_scheme *(*letterfunc)(const char *ptr);
  644|  21.6k|  static const letterfunc parse[] = {
  645|  21.6k|    two_letter_scheme,
  646|  21.6k|    three_letter_scheme,
  647|  21.6k|    four_letter_scheme,
  648|  21.6k|    five_letter_scheme,
  649|  21.6k|    six_letter_scheme,
  650|  21.6k|    seven_letter_scheme
  651|  21.6k|  };
  652|       |
  653|  21.6k|  if(len < 2 || len > 7)
  ------------------
  |  Branch (653:6): [True: 0, False: 21.6k]
  |  Branch (653:17): [True: 0, False: 21.6k]
  ------------------
  654|      0|    return NULL;
  655|       |
  656|  21.6k|  return parse[len - 2](scheme);
  657|  21.6k|}
Curl_get_scheme:
  660|  8.98k|{
  661|  8.98k|  return Curl_getn_scheme(scheme, strlen(scheme));
  662|  8.98k|}
protocol.c:two_letter_scheme:
  466|  2.53k|{
  467|  2.53k|  if((Curl_raw_tolower(scheme[0]) == 'w') &&
  ------------------
  |  Branch (467:6): [True: 2.53k, False: 0]
  ------------------
  468|  2.53k|     (Curl_raw_tolower(scheme[1]) == 's'))
  ------------------
  |  Branch (468:6): [True: 2.53k, False: 0]
  ------------------
  469|  2.53k|    return &Curl_scheme_ws;
  470|      0|  return NULL;
  471|  2.53k|}
protocol.c:three_letter_scheme:
  474|  2.53k|{
  475|  2.53k|  char s0 = Curl_raw_tolower(scheme[0]);
  476|  2.53k|  char s1 = Curl_raw_tolower(scheme[1]);
  477|  2.53k|  char s2 = Curl_raw_tolower(scheme[2]);
  478|  2.53k|  if(s0 == 'f') {
  ------------------
  |  Branch (478:6): [True: 0, False: 2.53k]
  ------------------
  479|      0|    if(s1 == 't' && s2 == 'p')
  ------------------
  |  Branch (479:8): [True: 0, False: 0]
  |  Branch (479:21): [True: 0, False: 0]
  ------------------
  480|      0|      return &Curl_scheme_ftp;
  481|      0|  }
  482|  2.53k|  else if(s0 == 'w') {
  ------------------
  |  Branch (482:11): [True: 2.53k, False: 0]
  ------------------
  483|  2.53k|    if(s1 == 's' && s2 == 's')
  ------------------
  |  Branch (483:8): [True: 2.53k, False: 0]
  |  Branch (483:21): [True: 2.53k, False: 0]
  ------------------
  484|  2.53k|      return &Curl_scheme_wss;
  485|  2.53k|  }
  486|      0|  else if(s0 == 's') {
  ------------------
  |  Branch (486:11): [True: 0, False: 0]
  ------------------
  487|      0|    if(s1 == 'c' && s2 == 'p')
  ------------------
  |  Branch (487:8): [True: 0, False: 0]
  |  Branch (487:21): [True: 0, False: 0]
  ------------------
  488|      0|      return &Curl_scheme_scp;
  489|      0|    if(s1 == 'm' && s2 == 'b')
  ------------------
  |  Branch (489:8): [True: 0, False: 0]
  |  Branch (489:21): [True: 0, False: 0]
  ------------------
  490|      0|      return &Curl_scheme_smb;
  491|      0|  }
  492|      0|  return NULL;
  493|  2.53k|}
protocol.c:four_letter_scheme:
  496|  2.53k|{
  497|  2.53k|  char s0 = Curl_raw_tolower(scheme[0]);
  498|  2.53k|  char s1 = Curl_raw_tolower(scheme[1]);
  499|  2.53k|  char s2 = Curl_raw_tolower(scheme[2]);
  500|  2.53k|  char s3 = Curl_raw_tolower(scheme[3]);
  501|  2.53k|  if(s3 == 'p') {
  ------------------
  |  Branch (501:6): [True: 2.53k, False: 0]
  ------------------
  502|  2.53k|    if(s0 == 'h') {
  ------------------
  |  Branch (502:8): [True: 2.53k, False: 0]
  ------------------
  503|  2.53k|      if(s1 == 't' && s2 == 't')
  ------------------
  |  Branch (503:10): [True: 2.53k, False: 0]
  |  Branch (503:23): [True: 2.53k, False: 0]
  ------------------
  504|  2.53k|        return &Curl_scheme_http;
  505|  2.53k|    }
  506|      0|    else if(s0 == 'i') {
  ------------------
  |  Branch (506:13): [True: 0, False: 0]
  ------------------
  507|      0|      if(s1 == 'm' && s2 == 'a')
  ------------------
  |  Branch (507:10): [True: 0, False: 0]
  |  Branch (507:23): [True: 0, False: 0]
  ------------------
  508|      0|        return &Curl_scheme_imap;
  509|      0|    }
  510|      0|    else if(s0 == 'l') {
  ------------------
  |  Branch (510:13): [True: 0, False: 0]
  ------------------
  511|      0|      if(s1 == 'd' && s2 == 'a')
  ------------------
  |  Branch (511:10): [True: 0, False: 0]
  |  Branch (511:23): [True: 0, False: 0]
  ------------------
  512|      0|        return &Curl_scheme_ldap;
  513|      0|    }
  514|      0|    else if(s0 == 'r') {
  ------------------
  |  Branch (514:13): [True: 0, False: 0]
  ------------------
  515|      0|      if(s1 == 't' && s2 == 's')
  ------------------
  |  Branch (515:10): [True: 0, False: 0]
  |  Branch (515:23): [True: 0, False: 0]
  ------------------
  516|      0|        return &Curl_scheme_rtsp;
  517|      0|    }
  518|      0|    else if(s0 == 't') {
  ------------------
  |  Branch (518:13): [True: 0, False: 0]
  ------------------
  519|      0|      if(s1 == 'f' && s2 == 't')
  ------------------
  |  Branch (519:10): [True: 0, False: 0]
  |  Branch (519:23): [True: 0, False: 0]
  ------------------
  520|      0|        return &Curl_scheme_tftp;
  521|      0|    }
  522|      0|    else if(s0 == 's') {
  ------------------
  |  Branch (522:13): [True: 0, False: 0]
  ------------------
  523|      0|      if(s1 == 'f' && s2 == 't')
  ------------------
  |  Branch (523:10): [True: 0, False: 0]
  |  Branch (523:23): [True: 0, False: 0]
  ------------------
  524|      0|        return &Curl_scheme_sftp;
  525|      0|      if(s1 == 'm' && s2 == 't')
  ------------------
  |  Branch (525:10): [True: 0, False: 0]
  |  Branch (525:23): [True: 0, False: 0]
  ------------------
  526|      0|        return &Curl_scheme_smtp;
  527|      0|    }
  528|  2.53k|  }
  529|      0|  else if(s0 == 'f') {
  ------------------
  |  Branch (529:11): [True: 0, False: 0]
  ------------------
  530|      0|    if(s1 == 't' && s2 == 'p' && s3 == 's')
  ------------------
  |  Branch (530:8): [True: 0, False: 0]
  |  Branch (530:21): [True: 0, False: 0]
  |  Branch (530:34): [True: 0, False: 0]
  ------------------
  531|      0|      return &Curl_scheme_ftps;
  532|      0|    if(s1 == 'i' && s2 == 'l' && s3 == 'e')
  ------------------
  |  Branch (532:8): [True: 0, False: 0]
  |  Branch (532:21): [True: 0, False: 0]
  |  Branch (532:34): [True: 0, False: 0]
  ------------------
  533|      0|      return &Curl_scheme_file;
  534|      0|  }
  535|      0|  else if(s0 == 'm') {
  ------------------
  |  Branch (535:11): [True: 0, False: 0]
  ------------------
  536|      0|    if(s1 == 'q' && s2 == 't' && s3 == 't')
  ------------------
  |  Branch (536:8): [True: 0, False: 0]
  |  Branch (536:21): [True: 0, False: 0]
  |  Branch (536:34): [True: 0, False: 0]
  ------------------
  537|      0|      return &Curl_scheme_mqtt;
  538|      0|  }
  539|      0|  else if(s0 == 'p') {
  ------------------
  |  Branch (539:11): [True: 0, False: 0]
  ------------------
  540|      0|    if(s1 == 'o' && s2 == 'p' && s3 == '3')
  ------------------
  |  Branch (540:8): [True: 0, False: 0]
  |  Branch (540:21): [True: 0, False: 0]
  |  Branch (540:34): [True: 0, False: 0]
  ------------------
  541|      0|      return &Curl_scheme_pop3;
  542|      0|  }
  543|      0|  else if(s0 == 'd') {
  ------------------
  |  Branch (543:11): [True: 0, False: 0]
  ------------------
  544|      0|    if(s1 == 'i' && s2 == 'c' && s3 == 't')
  ------------------
  |  Branch (544:8): [True: 0, False: 0]
  |  Branch (544:21): [True: 0, False: 0]
  |  Branch (544:34): [True: 0, False: 0]
  ------------------
  545|      0|      return &Curl_scheme_dict;
  546|      0|  }
  547|      0|  else if(s0 == 's') {
  ------------------
  |  Branch (547:11): [True: 0, False: 0]
  ------------------
  548|      0|    if(s1 == 'm' && s2 == 'b' && s3 == 's')
  ------------------
  |  Branch (548:8): [True: 0, False: 0]
  |  Branch (548:21): [True: 0, False: 0]
  |  Branch (548:34): [True: 0, False: 0]
  ------------------
  549|      0|      return &Curl_scheme_smbs;
  550|      0|  }
  551|      0|  return NULL;
  552|  2.53k|}
protocol.c:five_letter_scheme:
  555|  2.53k|{
  556|  2.53k|  char s4 = Curl_raw_tolower(scheme[4]);
  557|  2.53k|  if(s4 == 's') {
  ------------------
  |  Branch (557:6): [True: 2.53k, False: 0]
  ------------------
  558|  2.53k|    char s0 = Curl_raw_tolower(scheme[0]);
  559|  2.53k|    char s1 = Curl_raw_tolower(scheme[1]);
  560|  2.53k|    char s2 = Curl_raw_tolower(scheme[2]);
  561|  2.53k|    char s3 = Curl_raw_tolower(scheme[3]);
  562|  2.53k|    if(s3 == 'p') {
  ------------------
  |  Branch (562:8): [True: 2.53k, False: 0]
  ------------------
  563|  2.53k|      switch(s0) {
  564|  2.53k|      case 'h':
  ------------------
  |  Branch (564:7): [True: 2.53k, False: 0]
  ------------------
  565|  2.53k|        if(s1 == 't' && s2 == 't')
  ------------------
  |  Branch (565:12): [True: 2.53k, False: 0]
  |  Branch (565:25): [True: 2.53k, False: 0]
  ------------------
  566|  2.53k|          return &Curl_scheme_https;
  567|      0|        break;
  568|      0|      case 'l':
  ------------------
  |  Branch (568:7): [True: 0, False: 2.53k]
  ------------------
  569|      0|        if(s1 == 'd' && s2 == 'a')
  ------------------
  |  Branch (569:12): [True: 0, False: 0]
  |  Branch (569:25): [True: 0, False: 0]
  ------------------
  570|      0|          return &Curl_scheme_ldaps;
  571|      0|        break;
  572|      0|      case 'i':
  ------------------
  |  Branch (572:7): [True: 0, False: 2.53k]
  ------------------
  573|      0|        if(s1 == 'm' && s2 == 'a')
  ------------------
  |  Branch (573:12): [True: 0, False: 0]
  |  Branch (573:25): [True: 0, False: 0]
  ------------------
  574|      0|          return &Curl_scheme_imaps;
  575|      0|        break;
  576|      0|      case 's':
  ------------------
  |  Branch (576:7): [True: 0, False: 2.53k]
  ------------------
  577|      0|        if(s1 == 'm' && s2 == 't')
  ------------------
  |  Branch (577:12): [True: 0, False: 0]
  |  Branch (577:25): [True: 0, False: 0]
  ------------------
  578|      0|          return &Curl_scheme_smtps;
  579|      0|        break;
  580|      0|      default:
  ------------------
  |  Branch (580:7): [True: 0, False: 2.53k]
  ------------------
  581|      0|        break;
  582|  2.53k|      }
  583|  2.53k|    }
  584|      0|    else if(s0 == 'p') {
  ------------------
  |  Branch (584:13): [True: 0, False: 0]
  ------------------
  585|      0|      if(s1 == 'o' && s2 == 'p' && s3 == '3')
  ------------------
  |  Branch (585:10): [True: 0, False: 0]
  |  Branch (585:23): [True: 0, False: 0]
  |  Branch (585:36): [True: 0, False: 0]
  ------------------
  586|      0|        return &Curl_scheme_pop3s;
  587|      0|    }
  588|      0|    else if(s0 == 'm') {
  ------------------
  |  Branch (588:13): [True: 0, False: 0]
  ------------------
  589|      0|      if(s1 == 'q' && s2 == 't' && s3 == 't')
  ------------------
  |  Branch (589:10): [True: 0, False: 0]
  |  Branch (589:23): [True: 0, False: 0]
  |  Branch (589:36): [True: 0, False: 0]
  ------------------
  590|      0|        return &Curl_scheme_mqtts;
  591|      0|    }
  592|      0|    else if(s0 == 's') {
  ------------------
  |  Branch (592:13): [True: 0, False: 0]
  ------------------
  593|      0|      if(s1 == 'o' && s2 == 'c' && s3 == 'k')
  ------------------
  |  Branch (593:10): [True: 0, False: 0]
  |  Branch (593:23): [True: 0, False: 0]
  |  Branch (593:36): [True: 0, False: 0]
  ------------------
  594|      0|        return &Curl_scheme_socks;
  595|      0|    }
  596|  2.53k|  }
  597|      0|  return NULL;
  598|  2.53k|}
protocol.c:six_letter_scheme:
  601|  11.5k|{
  602|  11.5k|  char s0 = Curl_raw_tolower(scheme[0]);
  603|  11.5k|  switch(s0) {
  ------------------
  |  Branch (603:10): [True: 11.5k, False: 0]
  ------------------
  604|      0|  case 's':
  ------------------
  |  Branch (604:3): [True: 0, False: 11.5k]
  ------------------
  605|      0|    if(curl_strnequal("ocks4", &scheme[1], 5))
  ------------------
  |  Branch (605:8): [True: 0, False: 0]
  ------------------
  606|      0|      return &Curl_scheme_socks4;
  607|      0|    if(curl_strnequal("ocks5", &scheme[1], 5))
  ------------------
  |  Branch (607:8): [True: 0, False: 0]
  ------------------
  608|      0|      return &Curl_scheme_socks5;
  609|      0|    break;
  610|      0|  case 'g':
  ------------------
  |  Branch (610:3): [True: 0, False: 11.5k]
  ------------------
  611|      0|    if(curl_strnequal("opher", &scheme[1], 5))
  ------------------
  |  Branch (611:8): [True: 0, False: 0]
  ------------------
  612|      0|      return &Curl_scheme_gopher;
  613|      0|    break;
  614|  11.5k|  case 't':
  ------------------
  |  Branch (614:3): [True: 11.5k, False: 0]
  ------------------
  615|  11.5k|    if(curl_strnequal("elnet", &scheme[1], 5))
  ------------------
  |  Branch (615:8): [True: 11.5k, False: 0]
  ------------------
  616|  11.5k|      return &Curl_scheme_telnet;
  617|      0|    break;
  618|  11.5k|  }
  619|      0|  return NULL;
  620|  11.5k|}

proxy_check_noproxy:
  199|  2.03k|{
  200|       |  /*
  201|       |   * If we do not have a hostname at all, like for example with a FILE
  202|       |   * transfer, we have nothing to interrogate the noproxy list with.
  203|       |   */
  204|  2.03k|  if(!name || name[0] == '\0')
  ------------------
  |  Branch (204:6): [True: 0, False: 2.03k]
  |  Branch (204:15): [True: 0, False: 2.03k]
  ------------------
  205|      0|    return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  206|       |
  207|       |  /* no_proxy=domain1.dom,host.domain2.dom
  208|       |   *   (a comma-separated list of hosts which should
  209|       |   *   not be proxied, or an asterisk to override
  210|       |   *   all proxy variables)
  211|       |   */
  212|  2.03k|  if(no_proxy && no_proxy[0]) {
  ------------------
  |  Branch (212:6): [True: 0, False: 2.03k]
  |  Branch (212:18): [True: 0, False: 0]
  ------------------
  213|      0|    const char *p = no_proxy;
  214|      0|    size_t namelen;
  215|      0|    char address[16];
  216|      0|    enum nametype type = TYPE_HOST;
  217|      0|    if(!strcmp("*", no_proxy))
  ------------------
  |  Branch (217:8): [True: 0, False: 0]
  ------------------
  218|      0|      return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  219|       |
  220|       |    /* NO_PROXY was specified and it was not only an asterisk */
  221|       |
  222|       |    /* Check if name is an IP address; if not, assume it being a hostname. */
  223|      0|    namelen = strlen(name);
  224|      0|    if(curlx_inet_pton(AF_INET, name, &address) == 1)
  ------------------
  |  Branch (224:8): [True: 0, False: 0]
  ------------------
  225|      0|      type = TYPE_IPV4;
  226|      0|#ifdef USE_IPV6
  227|      0|    else if(curlx_inet_pton(AF_INET6, name, &address) == 1)
  ------------------
  |  Branch (227:13): [True: 0, False: 0]
  ------------------
  228|      0|      type = TYPE_IPV6;
  229|      0|#endif
  230|      0|    else {
  231|       |      /* ignore trailing dots in the hostname */
  232|      0|      if(name[namelen - 1] == '.')
  ------------------
  |  Branch (232:10): [True: 0, False: 0]
  ------------------
  233|      0|        namelen--;
  234|      0|    }
  235|       |
  236|      0|    while(*p) {
  ------------------
  |  Branch (236:11): [True: 0, False: 0]
  ------------------
  237|      0|      const char *token;
  238|      0|      size_t tokenlen = 0;
  239|       |
  240|       |      /* pass blanks */
  241|      0|      curlx_str_passblanks(&p);
  242|       |
  243|      0|      token = p;
  244|       |      /* pass over the pattern */
  245|      0|      while(*p && !ISBLANK(*p) && (*p != ',')) {
  ------------------
  |  |   43|      0|#define ISBLANK(x)  (((x) == ' ') || ((x) == '\t'))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 0, False: 0]
  |  |  |  Branch (43:38): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (245:13): [True: 0, False: 0]
  |  Branch (245:35): [True: 0, False: 0]
  ------------------
  246|      0|        p++;
  247|      0|        tokenlen++;
  248|      0|      }
  249|       |
  250|      0|      if(tokenlen) {
  ------------------
  |  Branch (250:10): [True: 0, False: 0]
  ------------------
  251|      0|        bool match = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  252|      0|        if(type == TYPE_HOST)
  ------------------
  |  Branch (252:12): [True: 0, False: 0]
  ------------------
  253|      0|          match = match_host(token, tokenlen, name, namelen);
  254|      0|        else
  255|      0|          match = match_ip(type, token, tokenlen, name);
  256|       |
  257|      0|        if(match)
  ------------------
  |  Branch (257:12): [True: 0, False: 0]
  ------------------
  258|      0|          return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  259|      0|      }
  260|       |
  261|       |      /* pass blanks after pattern */
  262|      0|      curlx_str_passblanks(&p);
  263|       |      /* if not a comma, this ends the loop */
  264|      0|      if(*p != ',')
  ------------------
  |  Branch (264:10): [True: 0, False: 0]
  ------------------
  265|      0|        break;
  266|       |      /* pass any number of commas */
  267|      0|      while(*p == ',')
  ------------------
  |  Branch (267:13): [True: 0, False: 0]
  ------------------
  268|      0|        p++;
  269|      0|    } /* while(*p) */
  270|      0|  } /* NO_PROXY was specified and it was not only an asterisk */
  271|       |
  272|  2.03k|  return FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  273|  2.03k|}
Curl_proxy_init_conn:
  521|  2.03k|{
  522|  2.03k|  char *proxy = NULL;
  523|  2.03k|  char *pre_proxy = NULL;
  524|  2.03k|  const char *str = NULL;
  525|  2.03k|  bool do_env_detect = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  526|  2.03k|  CURLcode result = CURLE_OK;
  527|       |
  528|       |  /* Enforce no proxy use unless we decide to use one */
  529|  2.03k|  conn->bits.origin_is_proxy = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  530|  2.03k|  DEBUGASSERT(!conn->socks_proxy.peer);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (530:3): [True: 0, False: 2.03k]
  |  Branch (530:3): [True: 2.03k, False: 0]
  ------------------
  531|  2.03k|  DEBUGASSERT(!conn->http_proxy.peer);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (531:3): [True: 0, False: 2.03k]
  |  Branch (531:3): [True: 2.03k, False: 0]
  ------------------
  532|       |
  533|  2.03k|  if(proxy_do_not_proxy(data))
  ------------------
  |  Branch (533:6): [True: 0, False: 2.03k]
  ------------------
  534|      0|    goto out;
  535|       |
  536|       |  /*************************************************************
  537|       |   * Detect what (if any) proxy to use
  538|       |   *************************************************************/
  539|       |  /* the empty config strings disable proxy use and env detects */
  540|  2.03k|  str = CURL_EASY_STR(data, STRING_PROXY);
  ------------------
  |  | 1228|  2.03k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
  541|  2.03k|  if(str) {
  ------------------
  |  Branch (541:6): [True: 2.03k, False: 0]
  ------------------
  542|  2.03k|    if(*str) {
  ------------------
  |  Branch (542:8): [True: 0, False: 2.03k]
  ------------------
  543|      0|      proxy = curlx_strdup(str);
  ------------------
  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
  544|       |      /* if global proxy is set, this is it */
  545|      0|      if(!proxy) {
  ------------------
  |  Branch (545:10): [True: 0, False: 0]
  ------------------
  546|      0|        failf(data, "memory shortage");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  547|      0|        result = CURLE_OUT_OF_MEMORY;
  548|      0|        goto out;
  549|      0|      }
  550|      0|    }
  551|  2.03k|    else
  552|  2.03k|      do_env_detect = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  553|  2.03k|  }
  554|       |
  555|  2.03k|  str = CURL_EASY_STR(data, STRING_PRE_PROXY);
  ------------------
  |  | 1228|  2.03k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
  556|  2.03k|  if(str) {
  ------------------
  |  Branch (556:6): [True: 0, False: 2.03k]
  ------------------
  557|      0|    if(*str) {
  ------------------
  |  Branch (557:8): [True: 0, False: 0]
  ------------------
  558|      0|      pre_proxy = curlx_strdup(str);
  ------------------
  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
  559|       |      /* if global socks proxy is set, this is it */
  560|      0|      if(!pre_proxy) {
  ------------------
  |  Branch (560:10): [True: 0, False: 0]
  ------------------
  561|      0|        failf(data, "memory shortage");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  562|      0|        result = CURLE_OUT_OF_MEMORY;
  563|      0|        goto out;
  564|      0|      }
  565|      0|    }
  566|      0|    else
  567|      0|      do_env_detect = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  568|      0|  }
  569|       |
  570|  2.03k|#ifndef CURL_DISABLE_HTTP
  571|       |  /* None configured, detect possible proxy from environment. */
  572|  2.03k|  if(!proxy && !pre_proxy && do_env_detect)
  ------------------
  |  Branch (572:6): [True: 2.03k, False: 0]
  |  Branch (572:16): [True: 2.03k, False: 0]
  |  Branch (572:30): [True: 0, False: 2.03k]
  ------------------
  573|      0|    proxy = proxy_detect_proxy(data, conn->scheme);
  574|       |#else
  575|       |  (void)do_env_detect;
  576|       |#endif /* CURL_DISABLE_HTTP */
  577|       |
  578|  2.03k|  if(!proxy && !pre_proxy)
  ------------------
  |  Branch (578:6): [True: 2.03k, False: 0]
  |  Branch (578:16): [True: 2.03k, False: 0]
  ------------------
  579|  2.03k|    goto out;
  580|       |
  581|      0|  if(pre_proxy) {
  ------------------
  |  Branch (581:6): [True: 0, False: 0]
  ------------------
  582|      0|    result = parse_proxy(data, pre_proxy, TRUE, &conn->socks_proxy);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  583|      0|    if(result)
  ------------------
  |  Branch (583:8): [True: 0, False: 0]
  ------------------
  584|      0|      goto out;
  585|      0|  }
  586|       |
  587|      0|  if(proxy) {
  ------------------
  |  Branch (587:6): [True: 0, False: 0]
  ------------------
  588|      0|    result = parse_proxy(data, proxy, FALSE, &conn->http_proxy);
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  589|      0|    if(result)
  ------------------
  |  Branch (589:8): [True: 0, False: 0]
  ------------------
  590|      0|      goto out;
  591|       |
  592|      0|    switch(conn->http_proxy.proxytype) {
  593|      0|    case CURLPROXY_SOCKS4:
  ------------------
  |  |  800|      0|#define CURLPROXY_SOCKS4          4L /* support added in 7.15.2, enum existed
  ------------------
  |  Branch (593:5): [True: 0, False: 0]
  ------------------
  594|      0|    case CURLPROXY_SOCKS4A:
  ------------------
  |  |  803|      0|#define CURLPROXY_SOCKS4A         6L /* added in 7.18.0 */
  ------------------
  |  Branch (594:5): [True: 0, False: 0]
  ------------------
  595|      0|    case CURLPROXY_SOCKS5:
  ------------------
  |  |  802|      0|#define CURLPROXY_SOCKS5          5L /* added in 7.10 */
  ------------------
  |  Branch (595:5): [True: 0, False: 0]
  ------------------
  596|      0|    case CURLPROXY_SOCKS5_HOSTNAME:
  ------------------
  |  |  804|      0|#define CURLPROXY_SOCKS5_HOSTNAME 7L /* Use the SOCKS5 protocol but pass along
  ------------------
  |  Branch (596:5): [True: 0, False: 0]
  ------------------
  597|       |      /* Whoops, it is not an HTTP proxy */
  598|      0|      if(pre_proxy) {
  ------------------
  |  Branch (598:10): [True: 0, False: 0]
  ------------------
  599|       |        /* and we already have a SOCKS pre-proxy. Cannot have both */
  600|      0|        failf(data, "Having a SOCKS pre-proxy and proxy is not "
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  601|      0|              "supported with \'%s\'", proxy);
  602|      0|        result = CURLE_COULDNT_RESOLVE_PROXY;
  603|      0|        goto out;
  604|      0|      }
  605|       |      /* switch */
  606|      0|      conn->socks_proxy = conn->http_proxy;
  607|      0|      memset(&conn->http_proxy, 0, sizeof(conn->http_proxy));
  608|      0|      break;
  609|      0|    default:
  ------------------
  |  Branch (609:5): [True: 0, False: 0]
  ------------------
  610|       |      /* all other types are HTTP */
  611|      0|      break;
  612|      0|    }
  613|      0|  }
  614|       |
  615|      0|  if(conn->socks_proxy.peer) {
  ------------------
  |  Branch (615:6): [True: 0, False: 0]
  ------------------
  616|      0|    DEBUGASSERT(!CURL_PROXY_IS_ANY_HTTP(conn->socks_proxy.proxytype));
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (616:5): [True: 0, False: 0]
  |  Branch (616:5): [True: 0, False: 0]
  |  Branch (616:5): [True: 0, False: 0]
  |  Branch (616:5): [True: 0, False: 0]
  |  Branch (616:5): [True: 0, False: 0]
  |  Branch (616:5): [True: 0, False: 0]
  |  Branch (616:5): [True: 0, False: 0]
  |  Branch (616:5): [True: 0, False: 0]
  |  Branch (616:5): [True: 0, False: 0]
  |  Branch (616:5): [True: 0, False: 0]
  ------------------
  617|      0|  }
  618|       |
  619|       |#ifdef CURL_DISABLE_HTTP
  620|       |  if(conn->http_proxy.peer) {
  621|       |    /* asking for an HTTP proxy is a bit funny when HTTP is disabled... */
  622|       |    result = CURLE_UNSUPPORTED_PROTOCOL;
  623|       |    goto out;
  624|       |  }
  625|       |
  626|       |#else /* CURL_DISABLE_HTTP */
  627|      0|  if(conn->http_proxy.peer) {
  ------------------
  |  Branch (627:6): [True: 0, False: 0]
  ------------------
  628|      0|    const struct Curl_scheme *scheme = data->state.origin->scheme;
  629|      0|    bool tunnel_proxy = (bool)data->set.tunnel_thru_httpproxy;
  630|      0|    DEBUGASSERT(CURL_PROXY_IS_ANY_HTTP(conn->http_proxy.proxytype));
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (630:5): [True: 0, False: 0]
  |  Branch (630:5): [True: 0, False: 0]
  |  Branch (630:5): [True: 0, False: 0]
  |  Branch (630:5): [True: 0, False: 0]
  |  Branch (630:5): [True: 0, False: 0]
  |  Branch (630:5): [True: 0, False: 0]
  |  Branch (630:5): [True: 0, False: 0]
  |  Branch (630:5): [True: 0, False: 0]
  |  Branch (630:5): [True: 0, False: 0]
  |  Branch (630:5): [True: 0, False: 0]
  ------------------
  631|       |
  632|      0|    if(!tunnel_proxy) {
  ------------------
  |  Branch (632:8): [True: 0, False: 0]
  ------------------
  633|       |      /* Decide if we tunnel through proxy automatically */
  634|      0|      if(conn->via_peer) {
  ------------------
  |  Branch (634:10): [True: 0, False: 0]
  ------------------
  635|       |        /* With connect-to, we always tunnel */
  636|      0|        tunnel_proxy = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  637|      0|      }
  638|      0|      else if(scheme->flags & PROTOPT_SSL) {
  ------------------
  |  |  207|      0|#define PROTOPT_SSL (1 << 0)       /* uses SSL */
  ------------------
  |  Branch (638:15): [True: 0, False: 0]
  ------------------
  639|       |        /* If the transfer is supposed to be secure, we tunnel */
  640|      0|        tunnel_proxy = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  641|      0|      }
  642|      0|      else if(scheme->flags & PROTOPT_HTTP_PROXY_TUNNEL) {
  ------------------
  |  |  239|      0|#define PROTOPT_HTTP_PROXY_TUNNEL (1 << 18) /* Using this protocol with a
  ------------------
  |  Branch (642:15): [True: 0, False: 0]
  ------------------
  643|       |        /* transfer scheme required tunneling */
  644|      0|        tunnel_proxy = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  645|      0|      }
  646|      0|      else if(!(scheme->protocol & PROTO_FAMILY_HTTP) &&
  ------------------
  |  |   84|      0|#define PROTO_FAMILY_HTTP (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_WS | \
  |  |  ------------------
  |  |  |  | 1088|      0|#define CURLPROTO_HTTP    (1L << 0)
  |  |  ------------------
  |  |               #define PROTO_FAMILY_HTTP (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_WS | \
  |  |  ------------------
  |  |  |  | 1089|      0|#define CURLPROTO_HTTPS   (1L << 1)
  |  |  ------------------
  |  |               #define PROTO_FAMILY_HTTP (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_WS | \
  |  |  ------------------
  |  |  |  |   63|      0|#define CURLPROTO_WS     (1L << 30)
  |  |  ------------------
  |  |   85|      0|                           CURLPROTO_WSS)
  |  |  ------------------
  |  |  |  |   64|      0|#define CURLPROTO_WSS    ((curl_prot_t)1 << 31)
  |  |  ------------------
  ------------------
  |  Branch (646:15): [True: 0, False: 0]
  ------------------
  647|      0|              !(scheme->flags & PROTOPT_PROXY_AS_HTTP)) {
  ------------------
  |  |  226|      0|#define PROTOPT_PROXY_AS_HTTP (1 << 11) /* allow this non-HTTP scheme over a
  ------------------
  |  Branch (647:15): [True: 0, False: 0]
  ------------------
  648|       |        /* Cannot delegate transfer URL to HTTP proxy */
  649|      0|        tunnel_proxy = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  650|      0|      }
  651|      0|    }
  652|       |
  653|      0|    if(!tunnel_proxy) {
  ------------------
  |  Branch (653:8): [True: 0, False: 0]
  ------------------
  654|       |      /* HTTP proxy used in forwarding mode. This means the connection
  655|       |       * is really to the proxy and NOT the origin of the transfer. */
  656|      0|      DEBUGASSERT(!conn->via_peer);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (656:7): [True: 0, False: 0]
  |  Branch (656:7): [True: 0, False: 0]
  ------------------
  657|      0|      Curl_peer_link(&conn->origin, conn->http_proxy.peer);
  658|      0|      conn->scheme = conn->http_proxy.peer->scheme;
  659|      0|      conn->bits.origin_is_proxy = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  660|      0|    }
  661|       |
  662|      0|#ifndef CURL_DISABLE_DIGEST_AUTH
  663|      0|    if(!Curl_safecmp(data->state.envproxy, proxy)) {
  ------------------
  |  Branch (663:8): [True: 0, False: 0]
  ------------------
  664|       |      /* proxy changed */
  665|      0|      Curl_auth_digest_cleanup(&data->state.proxydigest);
  666|      0|      curlx_free(data->state.envproxy);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  667|      0|      data->state.envproxy = curlx_strdup(proxy);
  ------------------
  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
  668|      0|    }
  669|      0|#endif
  670|      0|  }
  671|      0|#endif /* !CURL_DISABLE_HTTP */
  672|       |
  673|  2.03k|out:
  674|  2.03k|  curlx_free(pre_proxy);
  ------------------
  |  | 1476|  2.03k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  675|  2.03k|  curlx_free(proxy);
  ------------------
  |  | 1476|  2.03k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  676|  2.03k|  return result;
  677|      0|}
proxy.c:proxy_do_not_proxy:
  492|  2.03k|{
  493|  2.03k|  const char *no_proxy;
  494|  2.03k|  char *env_no_proxy = NULL;
  495|  2.03k|  bool do_not_proxy;
  496|       |
  497|       |  /* no proxying if the transfer does not use the network */
  498|  2.03k|  if(data->state.origin->scheme->flags & PROTOPT_NONETWORK)
  ------------------
  |  |  214|  2.03k|#define PROTOPT_NONETWORK (1 << 4) /* protocol does not use the network! */
  ------------------
  |  Branch (498:6): [True: 0, False: 2.03k]
  ------------------
  499|      0|    return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  500|       |
  501|  2.03k|  no_proxy = CURL_EASY_STR(data, STRING_NOPROXY);
  ------------------
  |  | 1228|  2.03k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
  502|  2.03k|  if(!no_proxy) {
  ------------------
  |  Branch (502:6): [True: 2.03k, False: 0]
  ------------------
  503|  2.03k|    const char *p = "no_proxy";
  504|  2.03k|    env_no_proxy = curl_getenv(p);
  505|  2.03k|    if(!env_no_proxy) {
  ------------------
  |  Branch (505:8): [True: 2.03k, False: 0]
  ------------------
  506|  2.03k|      p = "NO_PROXY";
  507|  2.03k|      env_no_proxy = curl_getenv(p);
  508|  2.03k|    }
  509|  2.03k|    if(env_no_proxy)
  ------------------
  |  Branch (509:8): [True: 0, False: 2.03k]
  ------------------
  510|      0|      infof(data, "Uses proxy env variable %s == '%s'", p, env_no_proxy);
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  511|  2.03k|    no_proxy = env_no_proxy;
  512|  2.03k|  }
  513|       |
  514|  2.03k|  do_not_proxy = proxy_check_noproxy(data->state.origin->hostname, no_proxy);
  515|       |  curlx_safefree(env_no_proxy);
  ------------------
  |  | 1332|  2.03k|  do {                      \
  |  | 1333|  2.03k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  2.03k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.03k|    (ptr) = NULL;           \
  |  | 1335|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  516|  2.03k|  return do_not_proxy;
  517|  2.03k|}

Curl_rlimit_start:
  173|    613|{
  174|       |  /* A start always resets the values to initial defaults, then
  175|       |   * fine tunes the intervals for the total_tokens expected. */
  176|    613|  r->rate_per_step = r->rate_per_sec;
  177|    613|  r->burst_per_step = r->burst_per_sec;
  178|    613|  r->step_us = CURL_US_PER_SEC;
  ------------------
  |  |   29|    613|#define CURL_US_PER_SEC         1000000
  ------------------
  179|    613|  r->spare_us = 0;
  180|    613|  r->tokens = r->rate_per_step;
  181|    613|  r->ts = *pts;
  182|    613|  rlimit_tune_steps(r, total_tokens);
  183|    613|}
Curl_rlimit_is_blocked:
  196|  3.95k|{
  197|  3.95k|  return (bool)r->blocked;
  198|  3.95k|}
Curl_rlimit_drain:
  221|  3.50k|{
  222|  3.50k|  struct curltime ts;
  223|       |
  224|  3.50k|  if(r->blocked || !r->rate_per_step)
  ------------------
  |  Branch (224:6): [True: 0, False: 3.50k]
  |  Branch (224:20): [True: 3.50k, False: 0]
  ------------------
  225|  3.50k|    return;
  226|       |
  227|      0|  if(!pts) {
  ------------------
  |  Branch (227:6): [True: 0, False: 0]
  ------------------
  228|      0|    curlx_pnow(&ts);
  229|      0|    pts = &ts;
  230|      0|  }
  231|      0|  rlimit_update(r, pts);
  232|      0|#if 8 <= SIZEOF_SIZE_T
  233|      0|  if(tokens > INT64_MAX) {
  ------------------
  |  Branch (233:6): [True: 0, False: 0]
  ------------------
  234|      0|    r->tokens = INT64_MAX;
  235|      0|  }
  236|      0|  else
  237|      0|#endif
  238|      0|  {
  239|      0|    int64_t val = (int64_t)tokens;
  240|      0|    if((INT64_MIN + val) < r->tokens)
  ------------------
  |  Branch (240:8): [True: 0, False: 0]
  ------------------
  241|      0|      r->tokens -= val;
  242|      0|    else
  243|      0|      r->tokens = INT64_MIN;
  244|      0|  }
  245|      0|}
Curl_rlimit_block:
  292|  5.07k|{
  293|  5.07k|  if(!activate == !r->blocked)
  ------------------
  |  Branch (293:6): [True: 5.07k, False: 0]
  ------------------
  294|  5.07k|    return;
  295|       |
  296|      0|  r->ts = *pts;
  297|      0|  r->blocked = activate;
  298|      0|  if(!r->blocked) {
  ------------------
  |  Branch (298:6): [True: 0, False: 0]
  ------------------
  299|       |    /* Start rate limiting fresh. The amount of time this was blocked
  300|       |     * does not generate extra tokens. */
  301|      0|    Curl_rlimit_start(r, pts, -1);
  302|      0|  }
  303|      0|  else {
  304|      0|    r->tokens = 0;
  305|      0|  }
  306|      0|}
ratelimit.c:rlimit_tune_steps:
   79|    613|{
   80|    613|  int64_t tokens_last, tokens_main, msteps;
   81|       |
   82|       |  /* Tune the ratelimit at the start *if* we know how many tokens
   83|       |   * are expected to be consumed in total.
   84|       |   * The reason for tuning is that rlimit provides tokens to be consumed
   85|       |   * per "step" which starts out to be a second. The tokens may be consumed
   86|       |   * in full at the beginning of a step. The remainder of the second will
   87|       |   * have no tokens available, effectively blocking the consumption and
   88|       |   * so keeping the "step average" in line.
   89|       |   * This works will up to the last step. When no more tokens are needed,
   90|       |   * no wait will happen and the last step would be too fast. This is
   91|       |   * especially noticeable when only a few steps are needed.
   92|       |   *
   93|       |   * Example: downloading 1.5kb with a ratelimit of 1k could be done in
   94|       |   * roughly 1 second (1k in the first second and the 0.5 at the start of
   95|       |   * the second one).
   96|       |   *
   97|       |   * The tuning tries to make the last step small, using only
   98|       |   * 1 percent of the total tokens (at least 1). The rest of the tokens
   99|       |   * are to be consumed in the steps before by adjusting the duration of
  100|       |   * the step and the amount of tokens it provides. */
  101|    613|  if(!r->rate_per_step ||
  ------------------
  |  Branch (101:6): [True: 613, False: 0]
  ------------------
  102|      0|     (tokens_total <= 1) ||
  ------------------
  |  Branch (102:6): [True: 0, False: 0]
  ------------------
  103|      0|     (tokens_total > (INT64_MAX / 1000)))
  ------------------
  |  Branch (103:6): [True: 0, False: 0]
  ------------------
  104|    613|    return;
  105|       |
  106|       |  /* Calculate tokens for the last step and the ones before. */
  107|      0|  tokens_last = tokens_total / 100;
  108|      0|  if(!tokens_last) /* less than 100 total, use 1 */
  ------------------
  |  Branch (108:6): [True: 0, False: 0]
  ------------------
  109|      0|    tokens_last = 1;
  110|      0|  else if(tokens_last > CURL_RLIMIT_MIN_RATE)
  ------------------
  |  |   30|      0|#define CURL_RLIMIT_MIN_RATE    (4 * 1024)  /* minimum step rate */
  ------------------
  |  Branch (110:11): [True: 0, False: 0]
  ------------------
  111|      0|    tokens_last = CURL_RLIMIT_MIN_RATE;
  ------------------
  |  |   30|      0|#define CURL_RLIMIT_MIN_RATE    (4 * 1024)  /* minimum step rate */
  ------------------
  112|      0|  DEBUGASSERT(tokens_last);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (112:3): [True: 0, False: 0]
  |  Branch (112:3): [True: 0, False: 0]
  ------------------
  113|      0|  tokens_main = tokens_total - tokens_last;
  114|      0|  DEBUGASSERT(tokens_main);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (114:3): [True: 0, False: 0]
  |  Branch (114:3): [True: 0, False: 0]
  ------------------
  115|       |
  116|       |  /* how many milli-steps will it take to consume those, give the
  117|       |  * original rate limit per second? */
  118|      0|  DEBUGASSERT(r->step_us == CURL_US_PER_SEC);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (118:3): [True: 0, False: 0]
  |  Branch (118:3): [True: 0, False: 0]
  ------------------
  119|       |
  120|      0|  msteps = (tokens_main * 1000 / r->rate_per_step);
  121|      0|  if(msteps < CURL_RLIMIT_STEP_MIN_MS) {
  ------------------
  |  |   31|      0|#define CURL_RLIMIT_STEP_MIN_MS 2  /* minimum step duration */
  ------------------
  |  Branch (121:6): [True: 0, False: 0]
  ------------------
  122|       |    /* Steps this small will not work. Do not tune. */
  123|      0|    return;
  124|      0|  }
  125|      0|  else if(msteps < 1000) {
  ------------------
  |  Branch (125:11): [True: 0, False: 0]
  ------------------
  126|       |    /* It needs less than one step to provide the needed tokens.
  127|       |     * Make it exactly that long and with exactly those tokens. */
  128|      0|    r->step_us = (timediff_t)msteps * 1000;
  129|      0|    r->rate_per_step = tokens_main;
  130|      0|    r->tokens = r->rate_per_step;
  131|      0|  }
  132|      0|  else {
  133|       |    /* More than 1 step. Spread the remainder milli steps and
  134|       |     * the tokens they need to provide across all steps. If integer
  135|       |     * arithmetic can do it. */
  136|      0|    curl_off_t ms_unaccounted = (msteps % 1000);
  137|      0|    curl_off_t mstep_inc = (ms_unaccounted / (msteps / 1000));
  138|      0|    if(mstep_inc) {
  ------------------
  |  Branch (138:8): [True: 0, False: 0]
  ------------------
  139|      0|      curl_off_t rate_inc = ((r->rate_per_step * mstep_inc) / 1000);
  140|      0|      if(rate_inc) {
  ------------------
  |  Branch (140:10): [True: 0, False: 0]
  ------------------
  141|      0|        r->step_us = CURL_US_PER_SEC + ((timediff_t)mstep_inc * 1000);
  ------------------
  |  |   29|      0|#define CURL_US_PER_SEC         1000000
  ------------------
  142|      0|        r->rate_per_step += rate_inc;
  143|      0|        r->tokens = r->rate_per_step;
  144|      0|        if(r->burst_per_step) {
  ------------------
  |  Branch (144:12): [True: 0, False: 0]
  ------------------
  145|      0|          curl_off_t burst_inc = ((r->burst_per_step * mstep_inc) / 1000);
  146|      0|          if(burst_inc)
  ------------------
  |  Branch (146:14): [True: 0, False: 0]
  ------------------
  147|      0|            r->burst_per_step += burst_inc;
  148|      0|        }
  149|      0|      }
  150|      0|    }
  151|      0|  }
  152|      0|}

Curl_req_init:
   38|  5.07k|{
   39|  5.07k|  memset(req, 0, sizeof(*req));
   40|  5.07k|}
Curl_req_soft_reset:
   44|  2.03k|{
   45|  2.03k|  CURLcode result;
   46|       |
   47|  2.03k|  req->done = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
   48|  2.03k|  req->upload_done = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
   49|  2.03k|  req->upload_aborted = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
   50|  2.03k|  req->download_done = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
   51|  2.03k|  req->eos_written = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
   52|  2.03k|  req->eos_read = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
   53|  2.03k|  req->eos_sent = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
   54|  2.03k|  req->ignorebody = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
   55|  2.03k|  req->shutdown = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
   56|  2.03k|  req->bytecount = 0;
   57|  2.03k|  req->writebytecount = 0;
   58|  2.03k|  req->header = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
   59|  2.03k|  req->headerline = 0;
   60|  2.03k|  req->headerbytecount = 0;
   61|  2.03k|  req->allheadercount = 0;
   62|  2.03k|  req->deductheadercount = 0;
   63|  2.03k|  req->httpversion_sent = 0;
   64|  2.03k|  req->httpversion = 0;
   65|  2.03k|  req->sendbuf_hds_len = 0;
   66|       |
   67|  2.03k|  curlx_safefree(req->hd_auth);
  ------------------
  |  | 1332|  2.03k|  do {                      \
  |  | 1333|  2.03k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  2.03k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.03k|    (ptr) = NULL;           \
  |  | 1335|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
   68|  2.03k|#ifndef CURL_DISABLE_PROXY
   69|  2.03k|  curlx_safefree(req->hd_proxy_auth);
  ------------------
  |  | 1332|  2.03k|  do {                      \
  |  | 1333|  2.03k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  2.03k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.03k|    (ptr) = NULL;           \
  |  | 1335|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
   70|  2.03k|#endif
   71|       |
   72|  2.03k|  result = Curl_client_start(data);
   73|  2.03k|  if(result)
  ------------------
  |  Branch (73:6): [True: 0, False: 2.03k]
  ------------------
   74|      0|    return result;
   75|       |
   76|  2.03k|  if(!req->sendbuf_init) {
  ------------------
  |  Branch (76:6): [True: 2.03k, False: 0]
  ------------------
   77|  2.03k|    Curl_bufq_init2(&req->sendbuf, data->set.upload_buffer_size, 1,
   78|  2.03k|                    BUFQ_OPT_SOFT_LIMIT);
  ------------------
  |  |  111|  2.03k|#define BUFQ_OPT_SOFT_LIMIT  (1 << 0)
  ------------------
   79|  2.03k|    req->sendbuf_init = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
   80|  2.03k|  }
   81|      0|  else {
   82|      0|    Curl_bufq_reset(&req->sendbuf);
   83|      0|    if(data->set.upload_buffer_size != req->sendbuf.chunk_size) {
  ------------------
  |  Branch (83:8): [True: 0, False: 0]
  ------------------
   84|      0|      Curl_bufq_free(&req->sendbuf);
   85|      0|      Curl_bufq_init2(&req->sendbuf, data->set.upload_buffer_size, 1,
   86|      0|                      BUFQ_OPT_SOFT_LIMIT);
  ------------------
  |  |  111|      0|#define BUFQ_OPT_SOFT_LIMIT  (1 << 0)
  ------------------
   87|      0|    }
   88|      0|  }
   89|       |
   90|  2.03k|  return CURLE_OK;
   91|  2.03k|}
Curl_req_start:
   95|  2.03k|{
   96|  2.03k|  req->start = *Curl_pgrs_now(data);
   97|  2.03k|  return Curl_req_soft_reset(req, data);
   98|  2.03k|}
Curl_req_done:
  104|  2.03k|{
  105|  2.03k|  (void)req;
  106|  2.03k|  if(!aborted)
  ------------------
  |  Branch (106:6): [True: 2.03k, False: 0]
  ------------------
  107|  2.03k|    (void)req_flush(data);
  108|  2.03k|  Curl_client_reset(data);
  109|  2.03k|  return CURLE_OK;
  110|  2.03k|}
Curl_req_hard_reset:
  113|  2.53k|{
  114|  2.53k|  struct curltime t0 = { 0, 0 };
  115|       |
  116|  2.53k|  curlx_safefree(req->newurl);
  ------------------
  |  | 1332|  2.53k|  do {                      \
  |  | 1333|  2.53k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.53k|    (ptr) = NULL;           \
  |  | 1335|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
  117|  2.53k|  curlx_safefree(req->hd_auth);
  ------------------
  |  | 1332|  2.53k|  do {                      \
  |  | 1333|  2.53k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.53k|    (ptr) = NULL;           \
  |  | 1335|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
  118|  2.53k|#ifndef CURL_DISABLE_PROXY
  119|  2.53k|  curlx_safefree(req->hd_proxy_auth);
  ------------------
  |  | 1332|  2.53k|  do {                      \
  |  | 1333|  2.53k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.53k|    (ptr) = NULL;           \
  |  | 1335|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
  120|  2.53k|#endif
  121|  2.53k|#ifndef CURL_DISABLE_COOKIES
  122|  2.53k|  curlx_safefree(req->cookiehost);
  ------------------
  |  | 1332|  2.53k|  do {                      \
  |  | 1333|  2.53k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.53k|    (ptr) = NULL;           \
  |  | 1335|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
  123|  2.53k|#endif
  124|  2.53k|  Curl_client_reset(data);
  125|  2.53k|  if(req->sendbuf_init)
  ------------------
  |  Branch (125:6): [True: 0, False: 2.53k]
  ------------------
  126|      0|    Curl_bufq_reset(&req->sendbuf);
  127|       |
  128|       |  /* clear any resolve data */
  129|  2.53k|  Curl_resolv_destroy_all(data);
  130|       |  /* Can no longer memset() this struct as we need to keep some state */
  131|  2.53k|  req->size = -1;
  132|  2.53k|  req->maxdownload = -1;
  133|  2.53k|  req->bytecount = 0;
  134|  2.53k|  req->writebytecount = 0;
  135|  2.53k|  req->start = t0;
  136|  2.53k|  req->headerbytecount = 0;
  137|  2.53k|  req->allheadercount = 0;
  138|  2.53k|  req->deductheadercount = 0;
  139|  2.53k|  req->headerline = 0;
  140|  2.53k|  req->offset = 0;
  141|  2.53k|  req->httpcode = 0;
  142|  2.53k|  req->io_flags = 0;
  143|  2.53k|  req->upgr101 = UPGR101_NONE;
  144|  2.53k|  req->sendbuf_hds_len = 0;
  145|  2.53k|  req->timeofdoc = 0;
  146|  2.53k|  req->location = NULL;
  147|  2.53k|  req->newurl = NULL;
  148|  2.53k|#ifndef CURL_DISABLE_COOKIES
  149|  2.53k|  req->setcookies = 0;
  150|  2.53k|#endif
  151|  2.53k|  req->header = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  152|  2.53k|  req->content_range = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  153|  2.53k|  req->download_done = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  154|  2.53k|  req->eos_written = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  155|  2.53k|  req->eos_read = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  156|  2.53k|  req->eos_sent = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  157|  2.53k|  req->rewind_read = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  158|  2.53k|  req->upload_done = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  159|  2.53k|  req->upload_aborted = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  160|  2.53k|  req->ignorebody = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  161|  2.53k|  req->http_bodyless = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  162|  2.53k|  req->chunk = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  163|  2.53k|  req->resp_trailer = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  164|  2.53k|  req->ignore_cl = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  165|  2.53k|  req->upload_chunky = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  166|  2.53k|  req->no_body = data->set.opt_no_body;
  167|  2.53k|  req->authneg = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  168|  2.53k|  req->shutdown = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  169|       |  /* Unpause all directions */
  170|  2.53k|  Curl_rlimit_block(&data->progress.dl.rlimit, FALSE, &t0);
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  171|       |  Curl_rlimit_block(&data->progress.ul.rlimit, FALSE, &t0);
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  172|  2.53k|}
Curl_req_free:
  175|  5.07k|{
  176|  5.07k|  curlx_safefree(req->newurl);
  ------------------
  |  | 1332|  5.07k|  do {                      \
  |  | 1333|  5.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  5.07k|    (ptr) = NULL;           \
  |  | 1335|  5.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 5.07k]
  |  |  ------------------
  ------------------
  177|  5.07k|  curlx_safefree(req->hd_auth);
  ------------------
  |  | 1332|  5.07k|  do {                      \
  |  | 1333|  5.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  5.07k|    (ptr) = NULL;           \
  |  | 1335|  5.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 5.07k]
  |  |  ------------------
  ------------------
  178|  5.07k|#ifndef CURL_DISABLE_PROXY
  179|  5.07k|  curlx_safefree(req->hd_proxy_auth);
  ------------------
  |  | 1332|  5.07k|  do {                      \
  |  | 1333|  5.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  5.07k|    (ptr) = NULL;           \
  |  | 1335|  5.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 5.07k]
  |  |  ------------------
  ------------------
  180|  5.07k|#endif
  181|  5.07k|  if(req->sendbuf_init)
  ------------------
  |  Branch (181:6): [True: 2.03k, False: 3.04k]
  ------------------
  182|  2.03k|    Curl_bufq_free(&req->sendbuf);
  183|  5.07k|  Curl_client_cleanup(data);
  184|  5.07k|}
Curl_req_sendbuf_empty:
  428|  1.92k|{
  429|  1.92k|  return !data->req.sendbuf_init || Curl_bufq_is_empty(&data->req.sendbuf);
  ------------------
  |  Branch (429:10): [True: 0, False: 1.92k]
  |  Branch (429:37): [True: 1.92k, False: 0]
  ------------------
  430|  1.92k|}
Curl_req_want_send:
  433|  1.92k|{
  434|       |  /* Not done and upload not blocked and either one of
  435|       |   * - REQ_IO_SEND
  436|       |   * - request has buffered data to send
  437|       |   * - connection has pending data to send */
  438|  1.92k|  return !data->req.done &&
  ------------------
  |  Branch (438:10): [True: 1.92k, False: 0]
  ------------------
  439|  1.92k|         !Curl_rlimit_is_blocked(&data->progress.ul.rlimit) &&
  ------------------
  |  Branch (439:10): [True: 1.92k, False: 0]
  ------------------
  440|  1.92k|         (CURL_REQ_WANT_SEND(data) ||
  ------------------
  |  |   39|  3.84k|#define CURL_REQ_WANT_SEND(d)  ((d)->req.io_flags & REQ_IO_SEND)
  |  |  ------------------
  |  |  |  |   36|  1.92k|#define REQ_IO_SEND       (1 << 1) /* there is or may be data to write */
  |  |  ------------------
  |  |  |  Branch (39:32): [True: 0, False: 1.92k]
  |  |  ------------------
  ------------------
  441|  1.92k|          !Curl_req_sendbuf_empty(data) ||
  ------------------
  |  Branch (441:11): [True: 0, False: 1.92k]
  ------------------
  442|  1.92k|          Curl_xfer_needs_flush(data));
  ------------------
  |  Branch (442:11): [True: 0, False: 1.92k]
  ------------------
  443|  1.92k|}
request.c:req_flush:
  299|  2.03k|{
  300|  2.03k|  CURLcode result;
  301|       |
  302|  2.03k|  if(!data || !data->conn)
  ------------------
  |  Branch (302:6): [True: 0, False: 2.03k]
  |  Branch (302:15): [True: 0, False: 2.03k]
  ------------------
  303|      0|    return CURLE_FAILED_INIT;
  304|       |
  305|  2.03k|  if(!Curl_bufq_is_empty(&data->req.sendbuf)) {
  ------------------
  |  Branch (305:6): [True: 0, False: 2.03k]
  ------------------
  306|      0|    result = req_send_buffer_flush(data);
  307|      0|    if(result)
  ------------------
  |  Branch (307:8): [True: 0, False: 0]
  ------------------
  308|      0|      return result;
  309|      0|    if(!Curl_bufq_is_empty(&data->req.sendbuf)) {
  ------------------
  |  Branch (309:8): [True: 0, False: 0]
  ------------------
  310|      0|      DEBUGF(infof(data, "Curl_req_flush(len=%zu) -> EAGAIN",
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  |  |  ------------------
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [Folded, False: 0]
  |  |  ------------------
  ------------------
  311|      0|                   Curl_bufq_len(&data->req.sendbuf)));
  312|      0|      return CURLE_AGAIN;
  313|      0|    }
  314|      0|  }
  315|  2.03k|  else if(Curl_xfer_needs_flush(data)) {
  ------------------
  |  Branch (315:11): [True: 0, False: 2.03k]
  ------------------
  316|      0|    DEBUGF(infof(data, "Curl_req_flush(), xfer send_pending"));
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  |  |  ------------------
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [Folded, False: 0]
  |  |  ------------------
  ------------------
  317|      0|    return Curl_xfer_flush(data);
  318|      0|  }
  319|       |
  320|  2.03k|  if(data->req.eos_read && !data->req.eos_sent) {
  ------------------
  |  Branch (320:6): [True: 0, False: 2.03k]
  |  Branch (320:28): [True: 0, False: 0]
  ------------------
  321|      0|    char tmp = 0;
  322|      0|    size_t nwritten;
  323|      0|    result = xfer_send(data, &tmp, 0, 0, &nwritten);
  324|      0|    if(result)
  ------------------
  |  Branch (324:8): [True: 0, False: 0]
  ------------------
  325|      0|      return result;
  326|      0|    DEBUGASSERT(data->req.eos_sent);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (326:5): [True: 0, False: 0]
  |  Branch (326:5): [True: 0, False: 0]
  ------------------
  327|      0|  }
  328|       |
  329|  2.03k|  if(!data->req.upload_done && data->req.eos_read && data->req.eos_sent) {
  ------------------
  |  Branch (329:6): [True: 2.03k, False: 0]
  |  Branch (329:32): [True: 0, False: 2.03k]
  |  Branch (329:54): [True: 0, False: 0]
  ------------------
  330|      0|    DEBUGASSERT(Curl_bufq_is_empty(&data->req.sendbuf));
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (330:5): [True: 0, False: 0]
  |  Branch (330:5): [True: 0, False: 0]
  ------------------
  331|      0|    if(data->req.shutdown) {
  ------------------
  |  Branch (331:8): [True: 0, False: 0]
  ------------------
  332|      0|      bool done;
  333|      0|      result = Curl_xfer_send_shutdown(data, &done);
  334|      0|      if(result && data->req.shutdown_err_ignore) {
  ------------------
  |  Branch (334:10): [True: 0, False: 0]
  |  Branch (334:20): [True: 0, False: 0]
  ------------------
  335|      0|        infof(data, "Shutdown send direction error: %d. Broken server? "
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  336|      0|              "Proceeding as if everything is ok.", (int)result);
  337|      0|        result = CURLE_OK;
  338|      0|        done = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  339|      0|      }
  340|       |
  341|      0|      if(result)
  ------------------
  |  Branch (341:10): [True: 0, False: 0]
  ------------------
  342|      0|        return result;
  343|      0|      if(!done)
  ------------------
  |  Branch (343:10): [True: 0, False: 0]
  ------------------
  344|      0|        return CURLE_AGAIN;
  345|      0|    }
  346|      0|    return req_set_upload_done(data);
  347|      0|  }
  348|  2.03k|  return CURLE_OK;
  349|  2.03k|}

Curl_poll:
  200|  3.15k|{
  201|  3.15k|#ifdef HAVE_POLL
  202|  3.15k|  int pending_ms;
  203|       |#else
  204|       |  fd_set fds_read;
  205|       |  fd_set fds_write;
  206|       |  fd_set fds_err;
  207|       |  curl_socket_t maxfd;
  208|       |#endif
  209|  3.15k|  bool fds_none = TRUE;
  ------------------
  |  | 1045|  3.15k|#define TRUE true
  ------------------
  210|  3.15k|  unsigned int i;
  211|  3.15k|  int r;
  212|       |
  213|  3.15k|  if(ufds) {
  ------------------
  |  Branch (213:6): [True: 3.15k, False: 0]
  ------------------
  214|  3.15k|    for(i = 0; i < nfds; i++) {
  ------------------
  |  Branch (214:16): [True: 3.15k, False: 0]
  ------------------
  215|  3.15k|      if(ufds[i].fd != CURL_SOCKET_BAD) {
  ------------------
  |  |  147|  3.15k|#define CURL_SOCKET_BAD (-1)
  ------------------
  |  Branch (215:10): [True: 3.15k, False: 0]
  ------------------
  216|  3.15k|        fds_none = FALSE;
  ------------------
  |  | 1048|  3.15k|#define FALSE false
  ------------------
  217|  3.15k|        break;
  218|  3.15k|      }
  219|  3.15k|    }
  220|  3.15k|  }
  221|  3.15k|  if(fds_none) {
  ------------------
  |  Branch (221:6): [True: 0, False: 3.15k]
  ------------------
  222|       |    /* no sockets, wait */
  223|      0|    return curlx_wait_ms(timeout_ms);
  224|      0|  }
  225|       |
  226|       |  /* Avoid initial timestamp, avoid curlx_now() call, when elapsed
  227|       |     time in this function does not need to be measured. This happens
  228|       |     when function is called with a zero timeout or a negative timeout
  229|       |     value indicating a blocking call should be performed. */
  230|       |
  231|  3.15k|#ifdef HAVE_POLL
  232|       |
  233|       |  /* prevent overflow, timeout_ms is typecast to int. */
  234|  3.15k|#if TIMEDIFF_T_MAX > INT_MAX
  235|  3.15k|  if(timeout_ms > INT_MAX)
  ------------------
  |  Branch (235:6): [True: 0, False: 3.15k]
  ------------------
  236|      0|    timeout_ms = INT_MAX;
  237|  3.15k|#endif
  238|  3.15k|  if(timeout_ms > 0)
  ------------------
  |  Branch (238:6): [True: 3.15k, False: 0]
  ------------------
  239|  3.15k|    pending_ms = (int)timeout_ms;
  240|      0|  else if(timeout_ms < 0)
  ------------------
  |  Branch (240:11): [True: 0, False: 0]
  ------------------
  241|      0|    pending_ms = -1;
  242|      0|  else
  243|      0|    pending_ms = 0;
  244|  3.15k|  r = poll(ufds, nfds, pending_ms);
  245|  3.15k|  if(r <= 0) {
  ------------------
  |  Branch (245:6): [True: 0, False: 3.15k]
  ------------------
  246|      0|    if((r == -1) && (SOCKERRNO == SOCKEINTR))
  ------------------
  |  | 1089|      0|#define SOCKERRNO         errno
  ------------------
                  if((r == -1) && (SOCKERRNO == SOCKEINTR))
  ------------------
  |  | 1123|      0|#define SOCKEINTR         EINTR
  ------------------
  |  Branch (246:8): [True: 0, False: 0]
  |  Branch (246:21): [True: 0, False: 0]
  ------------------
  247|       |      /* make EINTR from select or poll not a "lethal" error */
  248|      0|      r = 0;
  249|      0|    return r;
  250|      0|  }
  251|       |
  252|  6.30k|  for(i = 0; i < nfds; i++) {
  ------------------
  |  Branch (252:14): [True: 3.15k, False: 3.15k]
  ------------------
  253|  3.15k|    if(ufds[i].fd == CURL_SOCKET_BAD)
  ------------------
  |  |  147|  3.15k|#define CURL_SOCKET_BAD (-1)
  ------------------
  |  Branch (253:8): [True: 0, False: 3.15k]
  ------------------
  254|      0|      continue;
  255|  3.15k|    if(ufds[i].revents & POLLHUP)
  ------------------
  |  Branch (255:8): [True: 0, False: 3.15k]
  ------------------
  256|      0|      ufds[i].revents |= POLLIN;
  257|  3.15k|    if(ufds[i].revents & POLLERR)
  ------------------
  |  Branch (257:8): [True: 0, False: 3.15k]
  ------------------
  258|      0|      ufds[i].revents |= POLLIN | POLLOUT;
  259|  3.15k|  }
  260|       |
  261|       |#else /* !HAVE_POLL */
  262|       |
  263|       |  FD_ZERO(&fds_read);
  264|       |  FD_ZERO(&fds_write);
  265|       |  FD_ZERO(&fds_err);
  266|       |  maxfd = (curl_socket_t)-1;
  267|       |
  268|       |  for(i = 0; i < nfds; i++) {
  269|       |    ufds[i].revents = 0;
  270|       |    if(ufds[i].fd == CURL_SOCKET_BAD)
  271|       |      continue;
  272|       |    VERIFY_SOCK(ufds[i].fd);
  273|       |    if(ufds[i].events & (POLLIN | POLLOUT | POLLPRI |
  274|       |                         POLLRDNORM | POLLWRNORM | POLLRDBAND)) {
  275|       |      if(ufds[i].fd > maxfd)
  276|       |        maxfd = ufds[i].fd;
  277|       |      if(ufds[i].events & (POLLRDNORM | POLLIN))
  278|       |        FD_SET(ufds[i].fd, &fds_read);
  279|       |      if(ufds[i].events & (POLLWRNORM | POLLOUT))
  280|       |        FD_SET(ufds[i].fd, &fds_write);
  281|       |      if(ufds[i].events & (POLLRDBAND | POLLPRI))
  282|       |        FD_SET(ufds[i].fd, &fds_err);
  283|       |    }
  284|       |  }
  285|       |
  286|       |  /* Note also that Winsock ignores the first argument, so we do not worry
  287|       |     about the fact that maxfd is computed incorrectly with Winsock (since
  288|       |     curl_socket_t is unsigned in such cases and thus -1 is the largest
  289|       |     value). */
  290|       |  r = our_select(maxfd, &fds_read, &fds_write, &fds_err, timeout_ms);
  291|       |  if(r <= 0) {
  292|       |    if((r == -1) && (SOCKERRNO == SOCKEINTR))
  293|       |      /* make EINTR from select or poll not a "lethal" error */
  294|       |      r = 0;
  295|       |    return r;
  296|       |  }
  297|       |
  298|       |  r = 0;
  299|       |  for(i = 0; i < nfds; i++) {
  300|       |    ufds[i].revents = 0;
  301|       |    if(ufds[i].fd == CURL_SOCKET_BAD)
  302|       |      continue;
  303|       |    if(FD_ISSET(ufds[i].fd, &fds_read)) {
  304|       |      if(ufds[i].events & POLLRDNORM)
  305|       |        ufds[i].revents |= POLLRDNORM;
  306|       |      if(ufds[i].events & POLLIN)
  307|       |        ufds[i].revents |= POLLIN;
  308|       |    }
  309|       |    if(FD_ISSET(ufds[i].fd, &fds_write)) {
  310|       |      if(ufds[i].events & POLLWRNORM)
  311|       |        ufds[i].revents |= POLLWRNORM;
  312|       |      if(ufds[i].events & POLLOUT)
  313|       |        ufds[i].revents |= POLLOUT;
  314|       |    }
  315|       |    if(FD_ISSET(ufds[i].fd, &fds_err)) {
  316|       |      if(ufds[i].events & POLLRDBAND)
  317|       |        ufds[i].revents |= POLLRDBAND;
  318|       |      if(ufds[i].events & POLLPRI)
  319|       |        ufds[i].revents |= POLLPRI;
  320|       |    }
  321|       |    if(ufds[i].revents)
  322|       |      r++;
  323|       |  }
  324|       |
  325|       |#endif /* HAVE_POLL */
  326|       |
  327|  3.15k|  return r;
  328|  3.15k|}
Curl_pollfds_init:
  333|  2.03k|{
  334|  2.03k|  DEBUGASSERT(cpfds);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (334:3): [True: 0, False: 2.03k]
  |  Branch (334:3): [True: 2.03k, False: 0]
  ------------------
  335|  2.03k|  memset(cpfds, 0, sizeof(*cpfds));
  336|  2.03k|  if(static_pfds && static_count) {
  ------------------
  |  Branch (336:6): [True: 2.03k, False: 0]
  |  Branch (336:21): [True: 2.03k, False: 0]
  ------------------
  337|  2.03k|    cpfds->pfds = static_pfds;
  338|  2.03k|    cpfds->count = static_count;
  339|  2.03k|  }
  340|  2.03k|}
Curl_pollfds_cleanup:
  348|  2.03k|{
  349|  2.03k|  DEBUGASSERT(cpfds);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (349:3): [True: 0, False: 2.03k]
  |  Branch (349:3): [True: 2.03k, False: 0]
  ------------------
  350|  2.03k|  if(cpfds->allocated_pfds) {
  ------------------
  |  Branch (350:6): [True: 0, False: 2.03k]
  ------------------
  351|      0|    curlx_free(cpfds->pfds);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  352|      0|  }
  353|  2.03k|  memset(cpfds, 0, sizeof(*cpfds));
  354|  2.03k|}
Curl_pollset_reset:
  482|  4.07k|{
  483|  4.07k|  unsigned int i;
  484|  4.07k|  ps->n = 0;
  485|  4.07k|#ifdef DEBUGBUILD
  486|  4.07k|  DEBUGASSERT(ps->init == CURL_EASY_POLLSET_MAGIC);
  ------------------
  |  | 1075|  4.07k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (486:3): [True: 0, False: 4.07k]
  |  Branch (486:3): [True: 4.07k, False: 0]
  ------------------
  487|  4.07k|#endif
  488|  4.07k|  DEBUGASSERT(ps->count);
  ------------------
  |  | 1075|  4.07k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (488:3): [True: 0, False: 4.07k]
  |  Branch (488:3): [True: 4.07k, False: 0]
  ------------------
  489|  12.2k|  for(i = 0; i < ps->count; i++)
  ------------------
  |  Branch (489:14): [True: 8.14k, False: 4.07k]
  ------------------
  490|  8.14k|    ps->sockets[i] = CURL_SOCKET_BAD;
  ------------------
  |  |  147|  12.2k|#define CURL_SOCKET_BAD (-1)
  ------------------
  491|  4.07k|  memset(ps->actions, 0, ps->count * sizeof(ps->actions[0]));
  492|  4.07k|}
Curl_pollset_init:
  495|  2.03k|{
  496|  2.03k|#ifdef DEBUGBUILD
  497|  2.03k|  ps->init = CURL_EASY_POLLSET_MAGIC;
  ------------------
  |  |  129|  2.03k|#define CURL_EASY_POLLSET_MAGIC  0x7a657370
  ------------------
  498|  2.03k|#endif
  499|  2.03k|  ps->sockets = ps->def_sockets;
  500|  2.03k|  ps->actions = ps->def_actions;
  501|  2.03k|  ps->count = CURL_ARRAYSIZE(ps->def_sockets);
  ------------------
  |  | 1299|  2.03k|#define CURL_ARRAYSIZE(A) (sizeof(A) / sizeof((A)[0]))
  ------------------
  502|  2.03k|  ps->n = 0;
  503|  2.03k|  Curl_pollset_reset(ps);
  504|  2.03k|}
Curl_pollset_cleanup:
  515|  2.03k|{
  516|  2.03k|#ifdef DEBUGBUILD
  517|  2.03k|  DEBUGASSERT(ps->init == CURL_EASY_POLLSET_MAGIC);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (517:3): [True: 0, False: 2.03k]
  |  Branch (517:3): [True: 2.03k, False: 0]
  ------------------
  518|  2.03k|#endif
  519|  2.03k|  if(ps->sockets != ps->def_sockets) {
  ------------------
  |  Branch (519:6): [True: 0, False: 2.03k]
  ------------------
  520|      0|    curlx_free(ps->sockets);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  521|      0|    ps->sockets = ps->def_sockets;
  522|      0|  }
  523|  2.03k|  if(ps->actions != ps->def_actions) {
  ------------------
  |  Branch (523:6): [True: 0, False: 2.03k]
  ------------------
  524|      0|    curlx_free(ps->actions);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  525|      0|    ps->actions = ps->def_actions;
  526|      0|  }
  527|  2.03k|  ps->count = CURL_ARRAYSIZE(ps->def_sockets);
  ------------------
  |  | 1299|  2.03k|#define CURL_ARRAYSIZE(A) (sizeof(A) / sizeof((A)[0]))
  ------------------
  528|  2.03k|  Curl_pollset_reset(ps);
  529|  2.03k|}

Curl_client_cleanup:
   72|  5.07k|{
   73|  5.07k|  cl_reset_reader(data);
   74|  5.07k|  cl_reset_writer(data);
   75|       |
   76|  5.07k|  data->req.bytecount = 0;
   77|  5.07k|  data->req.headerline = 0;
   78|  5.07k|}
Curl_client_reset:
   81|  4.57k|{
   82|  4.57k|  if(data->req.rewind_read) {
  ------------------
  |  Branch (82:6): [True: 0, False: 4.57k]
  ------------------
   83|       |    /* already requested */
   84|      0|    CURL_TRC_READ(data, "client_reset, will rewind reader");
  ------------------
  |  |  163|      0|  do {                                                    \
  |  |  164|      0|    if(Curl_trc_ft_is_verbose(data, &Curl_trc_feat_read)) \
  |  |  ------------------
  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      0|      Curl_trc_read(data, __VA_ARGS__);                   \
  |  |  166|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (166:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
   85|      0|  }
   86|  4.57k|  else {
   87|  4.57k|    CURL_TRC_READ(data, "client_reset, clear readers");
  ------------------
  |  |  163|  4.57k|  do {                                                    \
  |  |  164|  4.57k|    if(Curl_trc_ft_is_verbose(data, &Curl_trc_feat_read)) \
  |  |  ------------------
  |  |  |  |  329|  4.57k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  9.14k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 4.57k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 4.57k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  9.14k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 4.57k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  4.57k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  330|  4.57k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  4.57k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (330:4): [True: 0, False: 4.57k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|  4.57k|      Curl_trc_read(data, __VA_ARGS__);                   \
  |  |  166|  4.57k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (166:11): [Folded, False: 4.57k]
  |  |  ------------------
  ------------------
   88|  4.57k|    cl_reset_reader(data);
   89|  4.57k|  }
   90|  4.57k|  cl_reset_writer(data);
   91|       |
   92|  4.57k|  data->req.bytecount = 0;
   93|  4.57k|  data->req.headerline = 0;
   94|  4.57k|}
Curl_client_start:
   97|  2.03k|{
   98|  2.03k|  if(data->req.rewind_read) {
  ------------------
  |  Branch (98:6): [True: 0, False: 2.03k]
  ------------------
   99|      0|    struct Curl_creader *r = data->req.reader.stack;
  100|      0|    CURLcode result = CURLE_OK;
  101|       |
  102|      0|    CURL_TRC_READ(data, "client start, rewind readers");
  ------------------
  |  |  163|      0|  do {                                                    \
  |  |  164|      0|    if(Curl_trc_ft_is_verbose(data, &Curl_trc_feat_read)) \
  |  |  ------------------
  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      0|      Curl_trc_read(data, __VA_ARGS__);                   \
  |  |  166|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (166:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  103|      0|    while(r) {
  ------------------
  |  Branch (103:11): [True: 0, False: 0]
  ------------------
  104|      0|      result = r->crt->cntrl(data, r, CURL_CRCNTRL_REWIND);
  105|      0|      if(result) {
  ------------------
  |  Branch (105:10): [True: 0, False: 0]
  ------------------
  106|      0|        failf(data, "rewind of client reader '%s' failed: %d",
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  107|      0|              r->crt->name, (int)result);
  108|      0|        return result;
  109|      0|      }
  110|      0|      r = r->next;
  111|      0|    }
  112|      0|    data->req.rewind_read = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  113|      0|    cl_reset_reader(data);
  114|      0|  }
  115|  2.03k|  return CURLE_OK;
  116|  2.03k|}
Curl_cwriter_def_init:
  130|  1.22k|{
  131|  1.22k|  (void)data;
  132|  1.22k|  (void)writer;
  133|  1.22k|  return CURLE_OK;
  134|  1.22k|}
Curl_cwriter_def_flush:
  145|  1.22k|{
  146|  1.22k|  return Curl_cwriter_flush(data, writer->next);
  ------------------
  |  |  191|  1.22k|  ((w) ? (w)->cwt->do_flush((d), (w)) : CURLE_WRITE_ERROR)
  |  |  ------------------
  |  |  |  Branch (191:4): [True: 1.22k, False: 0]
  |  |  ------------------
  ------------------
  147|  1.22k|}
Curl_cwriter_def_close:
  151|  1.22k|{
  152|  1.22k|  (void)data;
  153|  1.22k|  (void)writer;
  154|  1.22k|}
Curl_client_write:
  375|  2.36k|{
  376|  2.36k|  CURLcode result;
  377|       |
  378|       |  /* it is one of those, at least */
  379|  2.36k|  DEBUGASSERT(type &
  ------------------
  |  | 1075|  2.36k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (379:3): [True: 0, False: 2.36k]
  |  Branch (379:3): [True: 2.36k, False: 0]
  ------------------
  380|  2.36k|              (CLIENTWRITE_BODY | CLIENTWRITE_HEADER | CLIENTWRITE_INFO));
  381|       |  /* BODY is only BODY (with optional EOS) */
  382|  2.36k|  DEBUGASSERT(!(type & CLIENTWRITE_BODY) ||
  ------------------
  |  | 1075|  2.36k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (382:3): [True: 2.36k, False: 0]
  |  Branch (382:3): [True: 0, False: 0]
  |  Branch (382:3): [True: 0, False: 2.36k]
  |  Branch (382:3): [True: 2.36k, False: 0]
  ------------------
  383|  2.36k|              ((type & ~(CLIENTWRITE_BODY | CLIENTWRITE_EOS)) == 0));
  384|       |  /* INFO is only INFO (with optional EOS) */
  385|  2.36k|  DEBUGASSERT(!(type & CLIENTWRITE_INFO) ||
  ------------------
  |  | 1075|  2.36k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (385:3): [True: 2.36k, False: 0]
  |  Branch (385:3): [True: 0, False: 0]
  |  Branch (385:3): [True: 2.36k, False: 0]
  |  Branch (385:3): [True: 0, False: 0]
  ------------------
  386|  2.36k|              ((type & ~(CLIENTWRITE_INFO | CLIENTWRITE_EOS)) == 0));
  387|       |
  388|  2.36k|  if(!data->req.writer.stack) {
  ------------------
  |  Branch (388:6): [True: 613, False: 1.75k]
  ------------------
  389|    613|    result = do_init_writer_stack(data);
  390|    613|    if(result)
  ------------------
  |  Branch (390:8): [True: 0, False: 613]
  ------------------
  391|      0|      return result;
  392|    613|    DEBUGASSERT(data->req.writer.stack);
  ------------------
  |  | 1075|    613|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (392:5): [True: 0, False: 613]
  |  Branch (392:5): [True: 613, False: 0]
  ------------------
  393|    613|  }
  394|       |
  395|  2.36k|  result = Curl_cwriter_write(data, data->req.writer.stack, type, buf, len);
  ------------------
  |  |  188|  2.36k|  ((w) ? (w)->cwt->do_write((d), (w), (t), (b), (n)) : CURLE_WRITE_ERROR)
  |  |  ------------------
  |  |  |  Branch (188:4): [True: 2.36k, False: 0]
  |  |  ------------------
  ------------------
  396|  2.36k|  CURL_TRC_WRITE(data, "client_write(type=%x, len=%zu) -> %d",
  ------------------
  |  |  158|  2.36k|  do {                                                     \
  |  |  159|  2.36k|    if(Curl_trc_ft_is_verbose(data, &Curl_trc_feat_write)) \
  |  |  ------------------
  |  |  |  |  329|  2.36k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  4.72k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 2.36k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 2.36k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  4.72k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 2.36k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  2.36k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  330|  2.36k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  2.36k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (330:4): [True: 0, False: 2.36k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  160|  2.36k|      Curl_trc_write(data, __VA_ARGS__);                   \
  |  |  161|  2.36k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (161:11): [Folded, False: 2.36k]
  |  |  ------------------
  ------------------
  397|  2.36k|                 (unsigned int)type, len, (int)result);
  398|  2.36k|  return result;
  399|  2.36k|}
Curl_client_flush:
  402|    613|{
  403|    613|  CURLcode result;
  404|       |
  405|    613|  if(!data->req.writer.stack) {
  ------------------
  |  Branch (405:6): [True: 0, False: 613]
  ------------------
  406|      0|    result = do_init_writer_stack(data);
  407|      0|    if(result)
  ------------------
  |  Branch (407:8): [True: 0, False: 0]
  ------------------
  408|      0|      return result;
  409|      0|    DEBUGASSERT(data->req.writer.stack);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (409:5): [True: 0, False: 0]
  |  Branch (409:5): [True: 0, False: 0]
  ------------------
  410|      0|  }
  411|       |
  412|    613|  result = Curl_cwriter_flush(data, data->req.writer.stack);
  ------------------
  |  |  191|    613|  ((w) ? (w)->cwt->do_flush((d), (w)) : CURLE_WRITE_ERROR)
  |  |  ------------------
  |  |  |  Branch (191:4): [True: 613, False: 0]
  |  |  ------------------
  ------------------
  413|    613|  CURL_TRC_WRITE(data, "client_flush() -> %d", (int)result);
  ------------------
  |  |  158|    613|  do {                                                     \
  |  |  159|    613|    if(Curl_trc_ft_is_verbose(data, &Curl_trc_feat_write)) \
  |  |  ------------------
  |  |  |  |  329|    613|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  1.22k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 613, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 613, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  1.22k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 613, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|    613|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  330|    613|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|    613|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (330:4): [True: 0, False: 613]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  160|    613|      Curl_trc_write(data, __VA_ARGS__);                   \
  |  |  161|    613|  } while(0)
  |  |  ------------------
  |  |  |  Branch (161:11): [Folded, False: 613]
  |  |  ------------------
  ------------------
  414|    613|  return result;
  415|    613|}
Curl_cwriter_create:
  422|  1.83k|{
  423|  1.83k|  struct Curl_cwriter *writer = NULL;
  424|  1.83k|  CURLcode result = CURLE_OUT_OF_MEMORY;
  425|  1.83k|  void *p;
  426|       |
  427|  1.83k|  DEBUGASSERT(cwt->cwriter_size >= sizeof(struct Curl_cwriter));
  ------------------
  |  | 1075|  1.83k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (427:3): [True: 0, False: 1.83k]
  |  Branch (427:3): [True: 1.83k, False: 0]
  ------------------
  428|  1.83k|  p = curlx_calloc(1, cwt->cwriter_size);
  ------------------
  |  | 1473|  1.83k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
  429|  1.83k|  if(!p)
  ------------------
  |  Branch (429:6): [True: 0, False: 1.83k]
  ------------------
  430|      0|    goto out;
  431|       |
  432|  1.83k|  writer = (struct Curl_cwriter *)p;
  433|  1.83k|  writer->cwt = cwt;
  434|  1.83k|  writer->ctx = p;
  435|  1.83k|  writer->phase = phase;
  436|  1.83k|  result = cwt->do_init(data, writer);
  437|       |
  438|  1.83k|out:
  439|  1.83k|  *pwriter = result ? NULL : writer;
  ------------------
  |  Branch (439:14): [True: 0, False: 1.83k]
  ------------------
  440|  1.83k|  if(result)
  ------------------
  |  Branch (440:6): [True: 0, False: 1.83k]
  ------------------
  441|      0|    curlx_free(writer);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  442|  1.83k|  return result;
  443|  1.83k|}
Curl_cwriter_get_by_type:
  519|  2.03k|{
  520|  2.03k|  struct Curl_cwriter *writer;
  521|  3.26k|  for(writer = data->req.writer.stack; writer; writer = writer->next) {
  ------------------
  |  Branch (521:40): [True: 1.83k, False: 1.42k]
  ------------------
  522|  1.83k|    if(writer->cwt == cwt)
  ------------------
  |  Branch (522:8): [True: 613, False: 1.22k]
  ------------------
  523|    613|      return writer;
  524|  1.83k|  }
  525|  1.42k|  return NULL;
  526|  2.03k|}
sendf.c:cl_reset_reader:
   60|  9.65k|{
   61|  9.65k|  struct Curl_creader *reader = data->req.reader.stack;
   62|  9.65k|  data->req.reader_started = FALSE;
  ------------------
  |  | 1048|  9.65k|#define FALSE false
  ------------------
   63|  9.65k|  while(reader) {
  ------------------
  |  Branch (63:9): [True: 0, False: 9.65k]
  ------------------
   64|      0|    data->req.reader.stack = reader->next;
   65|      0|    reader->crt->do_close(data, reader);
   66|      0|    curlx_free(reader);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   67|      0|    reader = data->req.reader.stack;
   68|      0|  }
   69|  9.65k|}
sendf.c:cl_reset_writer:
   48|  9.65k|{
   49|  9.65k|  struct Curl_cwriter *writer = data->req.writer.stack;
   50|  11.4k|  while(writer) {
  ------------------
  |  Branch (50:9): [True: 1.83k, False: 9.65k]
  ------------------
   51|  1.83k|    data->req.writer.stack = writer->next;
   52|  1.83k|    writer->cwt->do_close(data, writer);
   53|  1.83k|    curlx_free(writer);
  ------------------
  |  | 1476|  1.83k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   54|  1.83k|    writer = data->req.writer.stack;
   55|  1.83k|  }
   56|       |  data->req.writer.paused = FALSE;
  ------------------
  |  | 1048|  9.65k|#define FALSE false
  ------------------
   57|  9.65k|}
sendf.c:do_init_writer_stack:
  345|    613|{
  346|    613|  struct Curl_cwriter *writer;
  347|    613|  CURLcode result;
  348|       |
  349|    613|  DEBUGASSERT(!data->req.writer.stack);
  ------------------
  |  | 1075|    613|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (349:3): [True: 0, False: 613]
  |  Branch (349:3): [True: 613, False: 0]
  ------------------
  350|    613|  result = Curl_cwriter_create(&data->req.writer.stack,
  351|    613|                               data, &Curl_cwt_out, CURL_CW_CLIENT);
  352|    613|  if(result)
  ------------------
  |  Branch (352:6): [True: 0, False: 613]
  ------------------
  353|      0|    return result;
  354|       |
  355|    613|  result = Curl_cwriter_create(&writer, data, &cw_download, CURL_CW_PROTOCOL);
  356|    613|  if(result)
  ------------------
  |  Branch (356:6): [True: 0, False: 613]
  ------------------
  357|      0|    return result;
  358|    613|  cwriter_add(data, writer);
  359|       |
  360|    613|  result = Curl_cwriter_create(&writer, data, &cw_raw, CURL_CW_RAW);
  361|    613|  if(result)
  ------------------
  |  Branch (361:6): [True: 0, False: 613]
  ------------------
  362|      0|    return result;
  363|    613|  cwriter_add(data, writer);
  364|       |
  365|    613|  return result;
  366|    613|}
sendf.c:cw_download_write:
  176|  2.36k|{
  177|  2.36k|  struct cw_download_ctx *ctx = writer->ctx;
  178|  2.36k|  CURLcode result;
  179|  2.36k|  size_t nwrite, excess_len = 0;
  180|  2.36k|  bool is_connect = !!(type & CLIENTWRITE_CONNECT);
  ------------------
  |  |   47|  2.36k|#define CLIENTWRITE_CONNECT (1 << 4) /* a CONNECT related HEADER */
  ------------------
  181|       |
  182|  2.36k|  if(!ctx->started_response &&
  ------------------
  |  Branch (182:6): [True: 613, False: 1.75k]
  ------------------
  183|    613|     !(type & CLIENTWRITE_CONNECT) &&
  ------------------
  |  |   47|    613|#define CLIENTWRITE_CONNECT (1 << 4) /* a CONNECT related HEADER */
  ------------------
  |  Branch (183:6): [True: 613, False: 0]
  ------------------
  184|    613|     (!(type & CLIENTWRITE_INFO) || data->req.upload_done)) {
  ------------------
  |  |   44|    613|#define CLIENTWRITE_INFO    (1 << 1) /* meta information, not a HEADER */
  ------------------
  |  Branch (184:7): [True: 613, False: 0]
  |  Branch (184:37): [True: 0, False: 0]
  ------------------
  185|    613|    Curl_pgrsTime(data, TIMER_STARTTRANSFER);
  186|    613|    ctx->started_response = TRUE;
  ------------------
  |  | 1045|    613|#define TRUE true
  ------------------
  187|    613|  }
  188|       |
  189|  2.36k|  if(!(type & CLIENTWRITE_BODY)) {
  ------------------
  |  |   43|  2.36k|#define CLIENTWRITE_BODY    (1 << 0) /* non-meta information, BODY */
  ------------------
  |  Branch (189:6): [True: 0, False: 2.36k]
  ------------------
  190|      0|    if(is_connect && data->set.suppress_connect_headers)
  ------------------
  |  Branch (190:8): [True: 0, False: 0]
  |  Branch (190:22): [True: 0, False: 0]
  ------------------
  191|      0|      return CURLE_OK;
  192|      0|#ifdef DEBUGBUILD
  193|      0|    if(is_connect && getenv("CURL_DBG_SUPPRESS_CONNECT_HDS"))
  ------------------
  |  Branch (193:8): [True: 0, False: 0]
  |  Branch (193:22): [True: 0, False: 0]
  ------------------
  194|      0|      return CURLE_OK;
  195|      0|#endif
  196|      0|    result = Curl_cwriter_write(data, writer->next, type, buf, nbytes);
  ------------------
  |  |  188|      0|  ((w) ? (w)->cwt->do_write((d), (w), (t), (b), (n)) : CURLE_WRITE_ERROR)
  |  |  ------------------
  |  |  |  Branch (188:4): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  197|      0|    CURL_TRC_WRITE(data, "download_write header(type=%x, blen=%zu) -> %d",
  ------------------
  |  |  158|      0|  do {                                                     \
  |  |  159|      0|    if(Curl_trc_ft_is_verbose(data, &Curl_trc_feat_write)) \
  |  |  ------------------
  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  160|      0|      Curl_trc_write(data, __VA_ARGS__);                   \
  |  |  161|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (161:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  198|      0|                   (unsigned int)type, nbytes, (int)result);
  199|      0|    return result;
  200|      0|  }
  201|       |
  202|  2.36k|  if(!ctx->started_body &&
  ------------------
  |  Branch (202:6): [True: 613, False: 1.75k]
  ------------------
  203|    613|     !(type & (CLIENTWRITE_INFO | CLIENTWRITE_CONNECT))) {
  ------------------
  |  |   44|    613|#define CLIENTWRITE_INFO    (1 << 1) /* meta information, not a HEADER */
  ------------------
                   !(type & (CLIENTWRITE_INFO | CLIENTWRITE_CONNECT))) {
  ------------------
  |  |   47|    613|#define CLIENTWRITE_CONNECT (1 << 4) /* a CONNECT related HEADER */
  ------------------
  |  Branch (203:6): [True: 613, False: 0]
  ------------------
  204|    613|    Curl_rlimit_start(&data->progress.dl.rlimit, Curl_pgrs_now(data),
  205|    613|                      data->req.size);
  206|    613|    ctx->started_body = TRUE;
  ------------------
  |  | 1045|    613|#define TRUE true
  ------------------
  207|    613|  }
  208|       |
  209|       |  /* Here, we deal with REAL BODY bytes. All filtering and transfer
  210|       |   * encodings have been applied and only the true content, e.g. BODY,
  211|       |   * bytes are passed here.
  212|       |   * This allows us to check sizes, update stats, etc. independent
  213|       |   * from the protocol in play. */
  214|       |
  215|  2.36k|  if(data->req.no_body && nbytes > 0) {
  ------------------
  |  Branch (215:6): [True: 0, False: 2.36k]
  |  Branch (215:27): [True: 0, False: 0]
  ------------------
  216|       |    /* BODY arrives although we want none, bail out */
  217|      0|    streamclose(data->conn);
  ------------------
  |  |   89|      0|#define streamclose(x) Curl_conncontrol((x), CONNCTRL_STREAM_CLOSE)
  |  |  ------------------
  |  |  |  |   85|      0|#define CONNCTRL_STREAM_CLOSE    2
  |  |  ------------------
  ------------------
  218|      0|    CURL_TRC_WRITE(data, "download_write body(type=%x, blen=%zu), "
  ------------------
  |  |  158|      0|  do {                                                     \
  |  |  159|      0|    if(Curl_trc_ft_is_verbose(data, &Curl_trc_feat_write)) \
  |  |  ------------------
  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  160|      0|      Curl_trc_write(data, __VA_ARGS__);                   \
  |  |  161|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (161:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  219|      0|                   "did not want a BODY", (unsigned int)type, nbytes);
  220|      0|    data->req.download_done = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  221|      0|    if(data->info.header_size)
  ------------------
  |  Branch (221:8): [True: 0, False: 0]
  ------------------
  222|       |      /* if headers have been received, this is fine */
  223|      0|      return CURLE_OK;
  224|      0|    return CURLE_WEIRD_SERVER_REPLY;
  225|      0|  }
  226|       |
  227|       |  /* Determine if we see any bytes in excess to what is allowed.
  228|       |   * We write the allowed bytes and handle excess further below.
  229|       |   * This gives deterministic BODY writes on varying buffer receive
  230|       |   * lengths. */
  231|  2.36k|  nwrite = nbytes;
  232|  2.36k|  if(data->req.maxdownload != -1) {
  ------------------
  |  Branch (232:6): [True: 0, False: 2.36k]
  ------------------
  233|      0|    size_t wmax = get_max_body_write_len(data, data->req.maxdownload);
  234|      0|    if(nwrite > wmax) {
  ------------------
  |  Branch (234:8): [True: 0, False: 0]
  ------------------
  235|      0|      excess_len = nbytes - wmax;
  236|      0|      nwrite = wmax;
  237|      0|    }
  238|       |
  239|      0|    if(nwrite == wmax) {
  ------------------
  |  Branch (239:8): [True: 0, False: 0]
  ------------------
  240|      0|      data->req.download_done = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  241|      0|    }
  242|       |
  243|      0|    if((type & CLIENTWRITE_EOS) && !data->req.no_body &&
  ------------------
  |  |   50|      0|#define CLIENTWRITE_EOS     (1 << 7) /* End Of transfer download Stream */
  ------------------
  |  Branch (243:8): [True: 0, False: 0]
  |  Branch (243:36): [True: 0, False: 0]
  ------------------
  244|      0|       (data->req.size > data->req.bytecount)) {
  ------------------
  |  Branch (244:8): [True: 0, False: 0]
  ------------------
  245|      0|      failf(data, "end of response with %" FMT_OFF_T " bytes missing",
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  246|      0|            data->req.size - data->req.bytecount);
  247|      0|      return CURLE_PARTIAL_FILE;
  248|      0|    }
  249|      0|  }
  250|       |
  251|       |  /* Error on too large filesize is handled below, after writing
  252|       |   * the permitted bytes */
  253|  2.36k|  if(data->set.max_filesize && !data->req.ignorebody) {
  ------------------
  |  Branch (253:6): [True: 545, False: 1.81k]
  |  Branch (253:32): [True: 545, False: 0]
  ------------------
  254|    545|    size_t wmax = get_max_body_write_len(data, data->set.max_filesize);
  255|    545|    if(nwrite > wmax) {
  ------------------
  |  Branch (255:8): [True: 23, False: 522]
  ------------------
  256|     23|      nwrite = wmax;
  257|     23|    }
  258|    545|  }
  259|       |
  260|  2.36k|  if(!data->req.ignorebody && (nwrite || (type & CLIENTWRITE_EOS))) {
  ------------------
  |  |   50|      2|#define CLIENTWRITE_EOS     (1 << 7) /* End Of transfer download Stream */
  ------------------
  |  Branch (260:6): [True: 2.36k, False: 0]
  |  Branch (260:32): [True: 2.36k, False: 2]
  |  Branch (260:42): [True: 0, False: 2]
  ------------------
  261|  2.36k|    result = Curl_cwriter_write(data, writer->next, type, buf, nwrite);
  ------------------
  |  |  188|  2.36k|  ((w) ? (w)->cwt->do_write((d), (w), (t), (b), (n)) : CURLE_WRITE_ERROR)
  |  |  ------------------
  |  |  |  Branch (188:4): [True: 2.36k, False: 0]
  |  |  ------------------
  ------------------
  262|  2.36k|    CURL_TRC_WRITE(data, "download_write body(type=%x, blen=%zu) -> %d",
  ------------------
  |  |  158|  2.36k|  do {                                                     \
  |  |  159|  2.36k|    if(Curl_trc_ft_is_verbose(data, &Curl_trc_feat_write)) \
  |  |  ------------------
  |  |  |  |  329|  2.36k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  4.72k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 2.36k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 2.36k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  4.72k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 2.36k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  2.36k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  330|  2.36k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  2.36k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (330:4): [True: 0, False: 2.36k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  160|  2.36k|      Curl_trc_write(data, __VA_ARGS__);                   \
  |  |  161|  2.36k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (161:11): [Folded, False: 2.36k]
  |  |  ------------------
  ------------------
  263|  2.36k|                   (unsigned int)type, nbytes, (int)result);
  264|  2.36k|    if(result)
  ------------------
  |  Branch (264:8): [True: 0, False: 2.36k]
  ------------------
  265|      0|      return result;
  266|  2.36k|  }
  267|       |
  268|       |  /* Update stats, write and report progress */
  269|  2.36k|  if(nwrite) {
  ------------------
  |  Branch (269:6): [True: 2.36k, False: 2]
  ------------------
  270|  2.36k|    data->req.bytecount += nwrite;
  271|  2.36k|    Curl_pgrs_download_inc(data, nwrite);
  272|  2.36k|  }
  273|       |
  274|  2.36k|  if(excess_len) {
  ------------------
  |  Branch (274:6): [True: 0, False: 2.36k]
  ------------------
  275|      0|    if(!data->req.ignorebody) {
  ------------------
  |  Branch (275:8): [True: 0, False: 0]
  ------------------
  276|      0|      infof(data,
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  277|      0|            "Excess found writing body:"
  278|      0|            " excess = %zu"
  279|      0|            ", size = %" FMT_OFF_T
  280|      0|            ", maxdownload = %" FMT_OFF_T
  281|      0|            ", bytecount = %" FMT_OFF_T,
  282|      0|            excess_len, data->req.size, data->req.maxdownload,
  283|      0|            data->req.bytecount);
  284|      0|      connclose(data->conn);
  ------------------
  |  |   90|      0|#define connclose(x)   Curl_conncontrol((x), CONNCTRL_CONN_CLOSE)
  |  |  ------------------
  |  |  |  |   84|      0|#define CONNCTRL_CONN_CLOSE      1
  |  |  ------------------
  ------------------
  285|      0|    }
  286|      0|  }
  287|  2.36k|  else if((nwrite < nbytes) && !data->req.ignorebody) {
  ------------------
  |  Branch (287:11): [True: 23, False: 2.34k]
  |  Branch (287:32): [True: 23, False: 0]
  ------------------
  288|     23|    failf(data, "Exceeded the maximum allowed file size "
  ------------------
  |  |   62|     23|#define failf Curl_failf
  ------------------
  289|     23|          "(%" FMT_OFF_T ") with %" FMT_OFF_T " bytes",
  290|     23|          data->set.max_filesize, data->req.bytecount);
  291|     23|    return CURLE_FILESIZE_EXCEEDED;
  292|     23|  }
  293|       |
  294|  2.34k|  return CURLE_OK;
  295|  2.36k|}
sendf.c:get_max_body_write_len:
  157|    545|{
  158|    545|  if(limit != -1) {
  ------------------
  |  Branch (158:6): [True: 545, False: 0]
  ------------------
  159|       |    /* How much more are we allowed to write? */
  160|    545|    return curlx_sotouz_range(limit - data->req.bytecount, 0, SIZE_MAX);
  161|    545|  }
  162|      0|  return SIZE_MAX;
  163|    545|}
sendf.c:cw_raw_write:
  313|  2.36k|{
  314|  2.36k|  if(type & CLIENTWRITE_BODY && data->set.verbose && !data->req.ignorebody) {
  ------------------
  |  |   43|  4.72k|#define CLIENTWRITE_BODY    (1 << 0) /* non-meta information, BODY */
  ------------------
  |  Branch (314:6): [True: 2.36k, False: 0]
  |  Branch (314:33): [True: 2.36k, False: 0]
  |  Branch (314:54): [True: 2.36k, False: 0]
  ------------------
  315|  2.36k|    Curl_debug(data, CURLINFO_DATA_IN, buf, nbytes);
  316|  2.36k|  }
  317|  2.36k|  return Curl_cwriter_write(data, writer->next, type, buf, nbytes);
  ------------------
  |  |  188|  2.36k|  ((w) ? (w)->cwt->do_write((d), (w), (t), (b), (n)) : CURLE_WRITE_ERROR)
  |  |  ------------------
  |  |  |  Branch (188:4): [True: 2.36k, False: 0]
  |  |  ------------------
  ------------------
  318|  2.36k|}
sendf.c:cwriter_add:
  333|  1.22k|{
  334|  1.22k|  struct Curl_cwriter **anchor = &data->req.writer.stack;
  335|       |
  336|       |  /* Insert the writer as first in its phase.
  337|       |   * Skip existing writers of lower phases. */
  338|  1.22k|  while(*anchor && (*anchor)->phase < writer->phase)
  ------------------
  |  Branch (338:9): [True: 1.22k, False: 0]
  |  Branch (338:20): [True: 0, False: 1.22k]
  ------------------
  339|      0|    anchor = &(*anchor)->next;
  340|  1.22k|  writer->next = *anchor;
  341|  1.22k|  *anchor = writer;
  342|  1.22k|}

Curl_setstropt:
   83|  23.6k|{
   84|  23.6k|  size_t slen = s ? strlen(s) : 0;
  ------------------
  |  Branch (84:17): [True: 23.6k, False: 0]
  ------------------
   85|  23.6k|  DEBUGASSERT((unsigned)id <= UINT8_MAX);
  ------------------
  |  | 1075|  23.6k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (85:3): [True: 0, False: 23.6k]
  |  Branch (85:3): [True: 23.6k, False: 0]
  ------------------
   86|  23.6k|  if(s && (slen > CURL_MAX_INPUT_LENGTH))
  ------------------
  |  |   45|  23.6k|#define CURL_MAX_INPUT_LENGTH 8000000
  ------------------
  |  Branch (86:6): [True: 23.6k, False: 0]
  |  Branch (86:11): [True: 0, False: 23.6k]
  ------------------
   87|      0|    return CURLE_BAD_FUNCTION_ARGUMENT;
   88|       |
   89|  23.6k|  return CURL_EASY_STR_SET(data, (uint8_t)id, s, slen);
  ------------------
  |  | 1230|  23.6k|  Curl_u8_strset_setx(&(d)->set.strings, (uint8_t)(id), (s), (slen))
  ------------------
   90|  23.6k|}
Curl_setopt_SSLVERSION:
  309|  10.1k|{
  310|       |  /*
  311|       |   * Set explicit SSL version to try to connect with, as some SSL
  312|       |   * implementations are lame.
  313|       |   */
  314|  10.1k|  {
  315|  10.1k|    long version, version_max;
  316|  10.1k|    struct ssl_primary_config *primary = &data->set.ssl.primary;
  317|  10.1k|#ifndef CURL_DISABLE_PROXY
  318|  10.1k|    if(option != CURLOPT_SSLVERSION)
  ------------------
  |  Branch (318:8): [True: 5.07k, False: 5.07k]
  ------------------
  319|  5.07k|      primary = &data->set.proxy_ssl.primary;
  320|       |#else
  321|       |    (void)option; /* unused */
  322|       |#endif
  323|  10.1k|    version = C_SSLVERSION_VALUE(arg);
  ------------------
  |  |  186|  10.1k|#define C_SSLVERSION_VALUE(x)     ((x) & 0xffff)
  ------------------
  324|  10.1k|    version_max = (long)C_SSLVERSION_MAX_VALUE(arg);
  ------------------
  |  |  187|  10.1k|#define C_SSLVERSION_MAX_VALUE(x) ((unsigned long)(x) & 0xffff0000)
  ------------------
  325|       |
  326|  10.1k|    if(version < CURL_SSLVERSION_DEFAULT ||
  ------------------
  |  | 2394|  20.3k|#define CURL_SSLVERSION_DEFAULT 0L
  ------------------
  |  Branch (326:8): [True: 0, False: 10.1k]
  ------------------
  327|  10.1k|       version == CURL_SSLVERSION_SSLv2 ||
  ------------------
  |  | 2396|  20.3k|#define CURL_SSLVERSION_SSLv2   2L
  ------------------
  |  Branch (327:8): [True: 0, False: 10.1k]
  ------------------
  328|  10.1k|       version == CURL_SSLVERSION_SSLv3 ||
  ------------------
  |  | 2397|  20.3k|#define CURL_SSLVERSION_SSLv3   3L
  ------------------
  |  Branch (328:8): [True: 0, False: 10.1k]
  ------------------
  329|  10.1k|       version >= CURL_SSLVERSION_LAST ||
  ------------------
  |  | 2403|  20.3k|#define CURL_SSLVERSION_LAST    8L /* never use, keep last */
  ------------------
  |  Branch (329:8): [True: 0, False: 10.1k]
  ------------------
  330|  10.1k|       version_max < CURL_SSLVERSION_MAX_NONE ||
  ------------------
  |  | 2405|  20.3k|#define CURL_SSLVERSION_MAX_NONE 0L
  ------------------
  |  Branch (330:8): [True: 0, False: 10.1k]
  ------------------
  331|  10.1k|       version_max >= CURL_SSLVERSION_MAX_LAST)
  ------------------
  |  | 2413|  10.1k|#define CURL_SSLVERSION_MAX_LAST    (CURL_SSLVERSION_LAST    << 16)
  |  |  ------------------
  |  |  |  | 2403|  10.1k|#define CURL_SSLVERSION_LAST    8L /* never use, keep last */
  |  |  ------------------
  ------------------
  |  Branch (331:8): [True: 0, False: 10.1k]
  ------------------
  332|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
  333|  10.1k|    if(version == CURL_SSLVERSION_DEFAULT)
  ------------------
  |  | 2394|  10.1k|#define CURL_SSLVERSION_DEFAULT 0L
  ------------------
  |  Branch (333:8): [True: 10.1k, False: 0]
  ------------------
  334|  10.1k|      version = CURL_SSLVERSION_TLSv1_2;
  ------------------
  |  | 2400|  10.1k|#define CURL_SSLVERSION_TLSv1_2 6L
  ------------------
  335|       |
  336|  10.1k|    primary->version = (unsigned char)version;
  337|  10.1k|    primary->version_max = (unsigned int)version_max;
  338|  10.1k|  }
  339|      0|  return CURLE_OK;
  340|  10.1k|}
Curl_vsetopt:
 2888|  72.9k|{
 2889|  72.9k|  if(option < CURLOPTTYPE_OBJECTPOINT)
  ------------------
  |  | 1124|  72.9k|#define CURLOPTTYPE_OBJECTPOINT   10000
  ------------------
  |  Branch (2889:6): [True: 10.2k, False: 62.7k]
  ------------------
 2890|  10.2k|    return setopt_long(data, option, va_arg(param, long));
 2891|  62.7k|  else if(option < CURLOPTTYPE_FUNCTIONPOINT) {
  ------------------
  |  | 1125|  62.7k|#define CURLOPTTYPE_FUNCTIONPOINT 20000
  ------------------
  |  Branch (2891:11): [True: 39.5k, False: 23.1k]
  ------------------
 2892|       |    /* unfortunately, different pointer types cannot be identified any other
 2893|       |       way than being listed explicitly */
 2894|  39.5k|    switch(option) {
 2895|      0|    case CURLOPT_HTTPHEADER:
  ------------------
  |  Branch (2895:5): [True: 0, False: 39.5k]
  ------------------
 2896|      0|    case CURLOPT_QUOTE:
  ------------------
  |  Branch (2896:5): [True: 0, False: 39.5k]
  ------------------
 2897|      0|    case CURLOPT_POSTQUOTE:
  ------------------
  |  Branch (2897:5): [True: 0, False: 39.5k]
  ------------------
 2898|    790|    case CURLOPT_TELNETOPTIONS:
  ------------------
  |  Branch (2898:5): [True: 790, False: 38.7k]
  ------------------
 2899|    790|    case CURLOPT_PREQUOTE:
  ------------------
  |  Branch (2899:5): [True: 0, False: 39.5k]
  ------------------
 2900|    790|    case CURLOPT_HTTP200ALIASES:
  ------------------
  |  Branch (2900:5): [True: 0, False: 39.5k]
  ------------------
 2901|    790|    case CURLOPT_MAIL_RCPT:
  ------------------
  |  Branch (2901:5): [True: 0, False: 39.5k]
  ------------------
 2902|    790|    case CURLOPT_RESOLVE:
  ------------------
  |  Branch (2902:5): [True: 0, False: 39.5k]
  ------------------
 2903|    790|    case CURLOPT_PROXYHEADER:
  ------------------
  |  Branch (2903:5): [True: 0, False: 39.5k]
  ------------------
 2904|  3.32k|    case CURLOPT_CONNECT_TO:
  ------------------
  |  Branch (2904:5): [True: 2.53k, False: 37.0k]
  ------------------
 2905|  3.32k|      return setopt_slist(data, option, va_arg(param, struct curl_slist *));
 2906|      0|    case CURLOPT_HTTPPOST:         /* curl_httppost * */
  ------------------
  |  Branch (2906:5): [True: 0, False: 39.5k]
  ------------------
 2907|      0|    case CURLOPT_MIMEPOST:         /* curl_mime * */
  ------------------
  |  Branch (2907:5): [True: 0, False: 39.5k]
  ------------------
 2908|      0|    case CURLOPT_STDERR:           /* FILE * */
  ------------------
  |  Branch (2908:5): [True: 0, False: 39.5k]
  ------------------
 2909|      0|    case CURLOPT_SHARE:            /* CURLSH * */
  ------------------
  |  Branch (2909:5): [True: 0, False: 39.5k]
  ------------------
 2910|      0|    case CURLOPT_CURLU:            /* CURLU * */
  ------------------
  |  Branch (2910:5): [True: 0, False: 39.5k]
  ------------------
 2911|      0|      return setopt_pointers(data, option, param);
 2912|      0|    case CURLOPT_STREAM_DEPENDS:   /* CURL * */
  ------------------
  |  Branch (2912:5): [True: 0, False: 39.5k]
  ------------------
 2913|      0|    case CURLOPT_STREAM_DEPENDS_E: /* CURL * */
  ------------------
  |  Branch (2913:5): [True: 0, False: 39.5k]
  ------------------
 2914|      0|      return CURLE_OK;
 2915|  36.2k|    default:
  ------------------
  |  Branch (2915:5): [True: 36.2k, False: 3.32k]
  ------------------
 2916|  36.2k|      break;
 2917|  39.5k|    }
 2918|       |    /* the char pointer options */
 2919|  36.2k|    return setopt_cptr(data, option, va_arg(param, char *));
 2920|  39.5k|  }
 2921|  23.1k|  else if(option < CURLOPTTYPE_OFF_T)
  ------------------
  |  | 1126|  23.1k|#define CURLOPTTYPE_OFF_T         30000
  ------------------
  |  Branch (2921:11): [True: 22.8k, False: 333]
  ------------------
 2922|  22.8k|    return setopt_func(data, option, param);
 2923|    333|  else if(option < CURLOPTTYPE_BLOB)
  ------------------
  |  | 1127|    333|#define CURLOPTTYPE_BLOB          40000
  ------------------
  |  Branch (2923:11): [True: 333, False: 0]
  ------------------
 2924|    333|    return setopt_offt(data, option, va_arg(param, curl_off_t));
 2925|      0|  return setopt_blob(data, option, va_arg(param, struct curl_blob *));
 2926|  72.9k|}
curl_easy_setopt:
 2937|  72.9k|{
 2938|  72.9k|  struct Curl_eapi_guard guard;
 2939|  72.9k|  CURLcode result;
 2940|       |
 2941|  72.9k|  if(CURL_EAPI_ENTER(&guard, curl, easy_setopt, &result)) {
  ------------------
  |  |  163|  72.9k|  Curl_eapi_enter((g), (curl), CURL_EAPI_FN_##fn, (r)) && (curl)
  |  |  ------------------
  |  |  |  Branch (163:3): [True: 72.9k, False: 0]
  |  |  |  Branch (163:59): [True: 72.9k, False: 0]
  |  |  ------------------
  ------------------
 2942|  72.9k|    struct Curl_easy *data = curl;
 2943|  72.9k|    va_list arg;
 2944|       |
 2945|  72.9k|    va_start(arg, option);
 2946|       |
 2947|  72.9k|    result = Curl_vsetopt(data, option, arg);
 2948|       |
 2949|  72.9k|    va_end(arg);
 2950|  72.9k|    if(result == CURLE_BAD_FUNCTION_ARGUMENT)
  ------------------
  |  Branch (2950:8): [True: 96, False: 72.8k]
  ------------------
 2951|     96|      failf(data, "setopt 0x%x got bad argument", (unsigned int)option);
  ------------------
  |  |   62|     96|#define failf Curl_failf
  ------------------
 2952|  72.9k|  }
 2953|  72.9k|  CURL_EAPI_LEAVE(&guard);
  ------------------
  |  |  165|  72.9k|  Curl_eapi_leave(g)
  ------------------
 2954|  72.9k|  return result;
 2955|  72.9k|}
setopt.c:setopt_long:
 1269|  10.2k|{
 1270|  10.2k|  typedef CURLcode (*setoptfunc)(struct Curl_easy *data,
 1271|  10.2k|                                 CURLoption option, long arg);
 1272|  10.2k|  static const setoptfunc setopt_call[] = {
 1273|  10.2k|    setopt_long_bool,
 1274|  10.2k|    setopt_long_net,
 1275|  10.2k|    setopt_long_http,
 1276|  10.2k|    setopt_long_proxy,
 1277|  10.2k|    setopt_long_ssl,
 1278|  10.2k|    setopt_long_proto,
 1279|  10.2k|    setopt_long_misc
 1280|  10.2k|  };
 1281|  10.2k|  size_t i;
 1282|       |
 1283|  15.3k|  for(i = 0; i < CURL_ARRAYSIZE(setopt_call); i++) {
  ------------------
  |  | 1299|  15.3k|#define CURL_ARRAYSIZE(A) (sizeof(A) / sizeof((A)[0]))
  ------------------
  |  Branch (1283:14): [True: 15.3k, False: 0]
  ------------------
 1284|  15.3k|    CURLcode result = setopt_call[i](data, option, arg);
 1285|  15.3k|    if(result != CURLE_UNKNOWN_OPTION)
  ------------------
  |  Branch (1285:8): [True: 10.2k, False: 5.07k]
  ------------------
 1286|  10.2k|      return result;
 1287|  15.3k|  }
 1288|      0|  return CURLE_UNKNOWN_OPTION;
 1289|  10.2k|}
setopt.c:setopt_long_bool:
  360|  10.2k|{
  361|  10.2k|  bool enabled = !!arg;
  362|  10.2k|  int ok = 1;
  363|  10.2k|  struct UserDefined *s = &data->set;
  364|  10.2k|  switch(option) {
  365|      0|  case CURLOPT_FORBID_REUSE:
  ------------------
  |  Branch (365:3): [True: 0, False: 10.2k]
  ------------------
  366|       |    /*
  367|       |     * When this transfer is done, it must not be left to be reused by a
  368|       |     * subsequent transfer but shall be closed immediately.
  369|       |     */
  370|      0|    s->reuse_forbid = enabled;
  371|      0|    break;
  372|      0|  case CURLOPT_FRESH_CONNECT:
  ------------------
  |  Branch (372:3): [True: 0, False: 10.2k]
  ------------------
  373|       |    /*
  374|       |     * This transfer shall not use a previously cached connection but
  375|       |     * should be made with a fresh new connect!
  376|       |     */
  377|      0|    s->reuse_fresh = enabled;
  378|      0|    break;
  379|  2.53k|  case CURLOPT_VERBOSE:
  ------------------
  |  Branch (379:3): [True: 2.53k, False: 7.68k]
  ------------------
  380|       |    /*
  381|       |     * Verbose means infof() calls that give a lot of information about
  382|       |     * the connection and transfer procedures as well as internal choices.
  383|       |     */
  384|  2.53k|    s->verbose = enabled;
  385|  2.53k|    break;
  386|      0|  case CURLOPT_HEADER:
  ------------------
  |  Branch (386:3): [True: 0, False: 10.2k]
  ------------------
  387|       |    /*
  388|       |     * Set to include the header in the general data output stream.
  389|       |     */
  390|      0|    s->include_header = enabled;
  391|      0|    break;
  392|      0|  case CURLOPT_NOPROGRESS:
  ------------------
  |  Branch (392:3): [True: 0, False: 10.2k]
  ------------------
  393|       |    /*
  394|       |     * Shut off the internal supported progress meter
  395|       |     */
  396|      0|    data->progress.hide = enabled;
  397|      0|    break;
  398|      0|  case CURLOPT_NOBODY:
  ------------------
  |  Branch (398:3): [True: 0, False: 10.2k]
  ------------------
  399|       |    /*
  400|       |     * Do not include the body part in the output data stream.
  401|       |     */
  402|      0|    s->opt_no_body = enabled;
  403|      0|#ifndef CURL_DISABLE_HTTP
  404|      0|    if(s->opt_no_body)
  ------------------
  |  Branch (404:8): [True: 0, False: 0]
  ------------------
  405|       |      /* in HTTP lingo, no body means using the HEAD request... */
  406|      0|      s->method = HTTPREQ_HEAD;
  407|      0|    else if(s->method == HTTPREQ_HEAD)
  ------------------
  |  Branch (407:13): [True: 0, False: 0]
  ------------------
  408|      0|      s->method = HTTPREQ_GET;
  409|      0|#endif
  410|      0|    break;
  411|      0|  case CURLOPT_FAILONERROR:
  ------------------
  |  Branch (411:3): [True: 0, False: 10.2k]
  ------------------
  412|       |    /*
  413|       |     * Do not output the >=400 error code HTML-page, but instead only
  414|       |     * return error.
  415|       |     */
  416|      0|    s->http_fail_on_error = enabled;
  417|      0|    break;
  418|      0|  case CURLOPT_KEEP_SENDING_ON_ERROR:
  ------------------
  |  Branch (418:3): [True: 0, False: 10.2k]
  ------------------
  419|      0|    s->http_keep_sending_on_error = enabled;
  420|      0|    break;
  421|      0|  case CURLOPT_UPLOAD:
  ------------------
  |  Branch (421:3): [True: 0, False: 10.2k]
  ------------------
  422|      0|  case CURLOPT_PUT:
  ------------------
  |  Branch (422:3): [True: 0, False: 10.2k]
  ------------------
  423|       |    /*
  424|       |     * We want to send data to the remote host. If this is HTTP, that equals
  425|       |     * using the PUT request.
  426|       |     */
  427|      0|    if(enabled) {
  ------------------
  |  Branch (427:8): [True: 0, False: 0]
  ------------------
  428|       |      /* If this is HTTP, PUT is what's needed to "upload" */
  429|      0|      s->method = HTTPREQ_PUT;
  430|      0|      s->opt_no_body = FALSE; /* this is implied */
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  431|      0|    }
  432|      0|    else
  433|       |      /* In HTTP, the opposite of upload is GET (unless NOBODY is true as
  434|       |         then this can be changed to HEAD later on) */
  435|      0|      s->method = HTTPREQ_GET;
  436|      0|    break;
  437|      0|  case CURLOPT_FILETIME:
  ------------------
  |  Branch (437:3): [True: 0, False: 10.2k]
  ------------------
  438|       |    /*
  439|       |     * Try to get the file time of the remote document. The time will
  440|       |     * later (possibly) become available using curl_easy_getinfo().
  441|       |     */
  442|      0|    s->get_filetime = enabled;
  443|      0|    break;
  444|      0|#ifndef CURL_DISABLE_HTTP
  445|      0|  case CURLOPT_HTTP09_ALLOWED:
  ------------------
  |  Branch (445:3): [True: 0, False: 10.2k]
  ------------------
  446|      0|    s->http09_allowed = enabled;
  447|      0|    break;
  448|      0|#ifndef CURL_DISABLE_COOKIES
  449|      0|  case CURLOPT_COOKIESESSION:
  ------------------
  |  Branch (449:3): [True: 0, False: 10.2k]
  ------------------
  450|       |    /*
  451|       |     * Set this option to TRUE to start a new "cookie session". It will
  452|       |     * prevent the forthcoming read-cookies-from-file actions to accept
  453|       |     * cookies that are marked as being session cookies, as they belong to a
  454|       |     * previous session.
  455|       |     */
  456|      0|    s->cookiesession = enabled;
  457|      0|    break;
  458|      0|#endif
  459|      0|  case CURLOPT_AUTOREFERER:
  ------------------
  |  Branch (459:3): [True: 0, False: 10.2k]
  ------------------
  460|       |    /*
  461|       |     * Switch on automatic referer that gets set if curl follows locations.
  462|       |     */
  463|      0|    s->http_auto_referer = enabled;
  464|      0|    break;
  465|      0|  case CURLOPT_TRANSFER_ENCODING:
  ------------------
  |  Branch (465:3): [True: 0, False: 10.2k]
  ------------------
  466|      0|    s->http_transfer_encoding = enabled;
  467|      0|    break;
  468|      0|  case CURLOPT_UNRESTRICTED_AUTH:
  ------------------
  |  Branch (468:3): [True: 0, False: 10.2k]
  ------------------
  469|       |    /*
  470|       |     * Send authentication (user+password) when following locations, even when
  471|       |     * hostname changed.
  472|       |     */
  473|      0|    s->allow_auth_to_other_hosts = enabled;
  474|      0|    break;
  475|      0|  case CURLOPT_HTTP_TRANSFER_DECODING:
  ------------------
  |  Branch (475:3): [True: 0, False: 10.2k]
  ------------------
  476|       |    /*
  477|       |     * disable libcurl transfer encoding is used
  478|       |     */
  479|      0|    s->http_te_skip = !enabled; /* reversed */
  480|      0|    break;
  481|      0|  case CURLOPT_HTTP_CONTENT_DECODING:
  ------------------
  |  Branch (481:3): [True: 0, False: 10.2k]
  ------------------
  482|       |    /*
  483|       |     * raw data passed to the application when content encoding is used
  484|       |     */
  485|      0|    s->http_ce_skip = !enabled; /* reversed */
  486|      0|    break;
  487|      0|  case CURLOPT_HTTPGET:
  ------------------
  |  Branch (487:3): [True: 0, False: 10.2k]
  ------------------
  488|       |    /*
  489|       |     * Set to force us do HTTP GET
  490|       |     */
  491|      0|    if(enabled) {
  ------------------
  |  Branch (491:8): [True: 0, False: 0]
  ------------------
  492|      0|      s->method = HTTPREQ_GET;
  493|      0|      s->opt_no_body = FALSE; /* this is implied */
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  494|      0|    }
  495|      0|    break;
  496|      0|  case CURLOPT_POST:
  ------------------
  |  Branch (496:3): [True: 0, False: 10.2k]
  ------------------
  497|       |    /* Does this option serve a purpose anymore? Yes it does, when
  498|       |       CURLOPT_POSTFIELDS is not used and the POST data is read off the
  499|       |       callback! */
  500|      0|    if(enabled) {
  ------------------
  |  Branch (500:8): [True: 0, False: 0]
  ------------------
  501|      0|      s->method = HTTPREQ_POST;
  502|      0|      s->opt_no_body = FALSE; /* this is implied */
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  503|      0|    }
  504|      0|    else
  505|      0|      s->method = HTTPREQ_GET;
  506|      0|    break;
  507|      0|#endif /* !CURL_DISABLE_HTTP */
  508|      0|#ifndef CURL_DISABLE_PROXY
  509|      0|  case CURLOPT_HTTPPROXYTUNNEL:
  ------------------
  |  Branch (509:3): [True: 0, False: 10.2k]
  ------------------
  510|       |    /*
  511|       |     * Tunnel operations through the proxy instead of normal proxy use
  512|       |     */
  513|      0|    s->tunnel_thru_httpproxy = enabled;
  514|      0|    break;
  515|      0|  case CURLOPT_HAPROXYPROTOCOL:
  ------------------
  |  Branch (515:3): [True: 0, False: 10.2k]
  ------------------
  516|       |    /*
  517|       |     * Set to send the HAProxy Proxy Protocol header
  518|       |     */
  519|      0|    s->haproxyprotocol = enabled;
  520|      0|    break;
  521|      0|  case CURLOPT_PROXY_SSL_VERIFYPEER:
  ------------------
  |  Branch (521:3): [True: 0, False: 10.2k]
  ------------------
  522|       |    /*
  523|       |     * Enable peer SSL verifying for proxy.
  524|       |     */
  525|      0|    s->proxy_ssl.primary.verifypeer = enabled;
  526|       |
  527|       |    /* Update the current connection proxy_ssl_config. */
  528|      0|    Curl_ssl_conn_config_update(data, TRUE);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  529|      0|    break;
  530|      0|  case CURLOPT_PROXY_SSL_VERIFYHOST:
  ------------------
  |  Branch (530:3): [True: 0, False: 10.2k]
  ------------------
  531|       |    /*
  532|       |     * Enable verification of the hostname in the peer certificate for proxy
  533|       |     */
  534|      0|    s->proxy_ssl.primary.verifyhost = enabled;
  535|      0|    ok = 2;
  536|       |    /* Update the current connection proxy_ssl_config. */
  537|      0|    Curl_ssl_conn_config_update(data, TRUE);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  538|      0|    break;
  539|      0|  case CURLOPT_PROXY_TRANSFER_MODE:
  ------------------
  |  Branch (539:3): [True: 0, False: 10.2k]
  ------------------
  540|       |    /*
  541|       |     * set transfer mode (;type=<a|i>) when doing FTP via an HTTP proxy
  542|       |     */
  543|      0|    s->proxy_transfer_mode = enabled;
  544|      0|    break;
  545|      0|#endif /* !CURL_DISABLE_PROXY */
  546|       |#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
  547|       |  case CURLOPT_SOCKS5_GSSAPI_NEC:
  548|       |    /*
  549|       |     * Set flag for NEC SOCKS5 support
  550|       |     */
  551|       |    s->socks5_gssapi_nec = enabled;
  552|       |    break;
  553|       |#endif
  554|      0|#ifdef CURL_LIST_ONLY_PROTOCOL
  555|      0|  case CURLOPT_DIRLISTONLY:
  ------------------
  |  Branch (555:3): [True: 0, False: 10.2k]
  ------------------
  556|       |    /*
  557|       |     * An option that changes the command to one that asks for a list only, no
  558|       |     * file info details. Used for FTP, POP3 and SFTP.
  559|       |     */
  560|      0|    s->list_only = enabled;
  561|      0|    break;
  562|      0|#endif
  563|      0|  case CURLOPT_APPEND:
  ------------------
  |  Branch (563:3): [True: 0, False: 10.2k]
  ------------------
  564|       |    /*
  565|       |     * We want to upload and append to an existing file. Used for FTP and
  566|       |     * SFTP.
  567|       |     */
  568|      0|    s->remote_append = enabled;
  569|      0|    break;
  570|      0|#ifndef CURL_DISABLE_FTP
  571|      0|  case CURLOPT_FTP_USE_EPRT:
  ------------------
  |  Branch (571:3): [True: 0, False: 10.2k]
  ------------------
  572|      0|    s->ftp_use_eprt = enabled;
  573|      0|    break;
  574|      0|  case CURLOPT_FTP_USE_EPSV:
  ------------------
  |  Branch (574:3): [True: 0, False: 10.2k]
  ------------------
  575|      0|    s->ftp_use_epsv = enabled;
  576|      0|    break;
  577|      0|  case CURLOPT_FTP_USE_PRET:
  ------------------
  |  Branch (577:3): [True: 0, False: 10.2k]
  ------------------
  578|      0|    s->ftp_use_pret = enabled;
  579|      0|    break;
  580|      0|  case CURLOPT_FTP_SKIP_PASV_IP:
  ------------------
  |  Branch (580:3): [True: 0, False: 10.2k]
  ------------------
  581|       |    /*
  582|       |     * Enable or disable FTP_SKIP_PASV_IP, which will disable/enable the
  583|       |     * bypass of the IP address in PASV responses.
  584|       |     */
  585|      0|    s->ftp_skip_ip = enabled;
  586|      0|    break;
  587|      0|  case CURLOPT_WILDCARDMATCH:
  ------------------
  |  Branch (587:3): [True: 0, False: 10.2k]
  ------------------
  588|      0|    s->wildcard_enabled = enabled;
  589|      0|    break;
  590|      0|#endif
  591|     72|  case CURLOPT_CRLF:
  ------------------
  |  Branch (591:3): [True: 72, False: 10.1k]
  ------------------
  592|       |    /*
  593|       |     * Kludgy option to enable CRLF conversions. Subject for removal.
  594|       |     */
  595|     72|    s->crlf = enabled;
  596|     72|    break;
  597|      0|#ifndef CURL_DISABLE_TFTP
  598|      0|  case CURLOPT_TFTP_NO_OPTIONS:
  ------------------
  |  Branch (598:3): [True: 0, False: 10.2k]
  ------------------
  599|       |    /*
  600|       |     * Option that prevents libcurl from sending TFTP option requests to the
  601|       |     * server.
  602|       |     */
  603|      0|    s->tftp_no_options = enabled;
  604|      0|    break;
  605|      0|#endif /* !CURL_DISABLE_TFTP */
  606|      0|  case CURLOPT_TRANSFERTEXT:
  ------------------
  |  Branch (606:3): [True: 0, False: 10.2k]
  ------------------
  607|       |    /*
  608|       |     * This option was previously named 'FTPASCII'. Renamed to work with
  609|       |     * more protocols than merely FTP.
  610|       |     *
  611|       |     * Transfer using ASCII (instead of BINARY).
  612|       |     */
  613|      0|    s->prefer_ascii = enabled;
  614|      0|    break;
  615|  2.53k|  case CURLOPT_SSL_VERIFYPEER:
  ------------------
  |  Branch (615:3): [True: 2.53k, False: 7.68k]
  ------------------
  616|       |    /*
  617|       |     * Enable peer SSL verifying.
  618|       |     */
  619|  2.53k|    s->ssl.primary.verifypeer = enabled;
  620|       |
  621|       |    /* Update the current connection ssl_config. */
  622|  2.53k|    Curl_ssl_conn_config_update(data, FALSE);
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  623|  2.53k|    break;
  624|      0|#ifndef CURL_DISABLE_DOH
  625|      0|  case CURLOPT_DOH_SSL_VERIFYPEER:
  ------------------
  |  Branch (625:3): [True: 0, False: 10.2k]
  ------------------
  626|       |    /*
  627|       |     * Enable peer SSL verifying for DoH.
  628|       |     */
  629|      0|    s->doh_verifypeer = enabled;
  630|      0|    break;
  631|      0|  case CURLOPT_DOH_SSL_VERIFYHOST:
  ------------------
  |  Branch (631:3): [True: 0, False: 10.2k]
  ------------------
  632|       |    /*
  633|       |     * Enable verification of the hostname in the peer certificate for DoH
  634|       |     */
  635|      0|    s->doh_verifyhost = enabled;
  636|      0|    ok = 2;
  637|      0|    break;
  638|      0|  case CURLOPT_DOH_SSL_VERIFYSTATUS:
  ------------------
  |  Branch (638:3): [True: 0, False: 10.2k]
  ------------------
  639|       |    /*
  640|       |     * Enable certificate status verifying for DoH.
  641|       |     */
  642|      0|    if(!Curl_ssl_cert_status_request())
  ------------------
  |  Branch (642:8): [True: 0, False: 0]
  ------------------
  643|      0|      return CURLE_NOT_BUILT_IN;
  644|       |
  645|      0|    s->doh_verifystatus = enabled;
  646|      0|    ok = 2;
  647|      0|    break;
  648|      0|#endif /* !CURL_DISABLE_DOH */
  649|      0|  case CURLOPT_SSL_VERIFYHOST:
  ------------------
  |  Branch (649:3): [True: 0, False: 10.2k]
  ------------------
  650|       |    /*
  651|       |     * Enable verification of the hostname in the peer certificate
  652|       |     */
  653|       |
  654|       |    /* Obviously people are not reading documentation and too many thought
  655|       |       this argument took a boolean when it was not and misused it.
  656|       |       Treat 1 and 2 the same */
  657|      0|    s->ssl.primary.verifyhost = enabled;
  658|      0|    ok = 2;
  659|       |
  660|       |    /* Update the current connection ssl_config. */
  661|      0|    Curl_ssl_conn_config_update(data, FALSE);
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  662|      0|    break;
  663|      0|  case CURLOPT_SSL_VERIFYSTATUS:
  ------------------
  |  Branch (663:3): [True: 0, False: 10.2k]
  ------------------
  664|       |    /*
  665|       |     * Enable certificate status verifying.
  666|       |     */
  667|      0|    if(!Curl_ssl_cert_status_request())
  ------------------
  |  Branch (667:8): [True: 0, False: 0]
  ------------------
  668|      0|      return CURLE_NOT_BUILT_IN;
  669|       |
  670|      0|    s->ssl.primary.verifystatus = enabled;
  671|       |
  672|       |    /* Update the current connection ssl_config. */
  673|      0|    Curl_ssl_conn_config_update(data, FALSE);
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  674|      0|    break;
  675|      0|  case CURLOPT_CERTINFO:
  ------------------
  |  Branch (675:3): [True: 0, False: 10.2k]
  ------------------
  676|      0|#ifdef USE_SSL
  677|      0|    if(Curl_ssl_supports(data, SSLSUPP_CERTINFO))
  ------------------
  |  |   36|      0|#define SSLSUPP_CERTINFO     (1 << 1) /* supports CURLOPT_CERTINFO */
  ------------------
  |  Branch (677:8): [True: 0, False: 0]
  ------------------
  678|      0|      s->ssl.certinfo = enabled;
  679|      0|    else
  680|      0|#endif
  681|      0|      return CURLE_NOT_BUILT_IN;
  682|      0|    break;
  683|      0|  case CURLOPT_NOSIGNAL:
  ------------------
  |  Branch (683:3): [True: 0, False: 10.2k]
  ------------------
  684|       |    /*
  685|       |     * The application asks not to set any signal() or alarm() handlers,
  686|       |     * even when using a timeout.
  687|       |     */
  688|      0|    s->no_signal = enabled;
  689|      0|    break;
  690|      0|  case CURLOPT_TCP_NODELAY:
  ------------------
  |  Branch (690:3): [True: 0, False: 10.2k]
  ------------------
  691|       |    /*
  692|       |     * Enable or disable TCP_NODELAY, which will disable/enable the Nagle
  693|       |     * algorithm
  694|       |     */
  695|      0|    s->tcp_nodelay = enabled;
  696|      0|    break;
  697|      0|  case CURLOPT_IGNORE_CONTENT_LENGTH:
  ------------------
  |  Branch (697:3): [True: 0, False: 10.2k]
  ------------------
  698|      0|    s->ignorecl = enabled;
  699|      0|    break;
  700|      0|  case CURLOPT_SSL_SESSIONID_CACHE:
  ------------------
  |  Branch (700:3): [True: 0, False: 10.2k]
  ------------------
  701|      0|    s->ssl.primary.cache_session = enabled;
  702|      0|#ifndef CURL_DISABLE_PROXY
  703|      0|    s->proxy_ssl.primary.cache_session = s->ssl.primary.cache_session;
  704|      0|#endif
  705|      0|    break;
  706|       |#ifdef USE_SSH
  707|       |  case CURLOPT_SSH_COMPRESSION:
  708|       |    s->ssh_compression = enabled;
  709|       |    break;
  710|       |#endif /* !USE_SSH */
  711|      0|#ifndef CURL_DISABLE_SMTP
  712|      0|  case CURLOPT_MAIL_RCPT_ALLOWFAILS:
  ------------------
  |  Branch (712:3): [True: 0, False: 10.2k]
  ------------------
  713|       |    /* allow RCPT TO command to fail for some recipients */
  714|      0|    s->mail_rcpt_allowfails = enabled;
  715|      0|    break;
  716|      0|#endif /* !CURL_DISABLE_SMTP */
  717|      0|  case CURLOPT_SASL_IR:
  ------------------
  |  Branch (717:3): [True: 0, False: 10.2k]
  ------------------
  718|       |    /* Enable/disable SASL initial response */
  719|      0|    s->sasl_ir = enabled;
  720|      0|    break;
  721|      0|  case CURLOPT_TCP_KEEPALIVE:
  ------------------
  |  Branch (721:3): [True: 0, False: 10.2k]
  ------------------
  722|      0|    s->tcp_keepalive = enabled;
  723|      0|    break;
  724|      0|  case CURLOPT_TCP_FASTOPEN:
  ------------------
  |  Branch (724:3): [True: 0, False: 10.2k]
  ------------------
  725|      0|#if defined(CONNECT_DATA_IDEMPOTENT) || defined(MSG_FASTOPEN) || \
  726|      0|  defined(TCP_FASTOPEN_CONNECT)
  727|      0|    s->tcp_fastopen = enabled;
  728|      0|    break;
  729|       |#else
  730|       |    return CURLE_NOT_BUILT_IN;
  731|       |#endif
  732|      0|  case CURLOPT_SSL_ENABLE_ALPN:
  ------------------
  |  Branch (732:3): [True: 0, False: 10.2k]
  ------------------
  733|      0|    s->ssl_enable_alpn = enabled;
  734|      0|    break;
  735|      0|  case CURLOPT_PATH_AS_IS:
  ------------------
  |  Branch (735:3): [True: 0, False: 10.2k]
  ------------------
  736|      0|    s->path_as_is = enabled;
  737|      0|    break;
  738|      0|  case CURLOPT_PIPEWAIT:
  ------------------
  |  Branch (738:3): [True: 0, False: 10.2k]
  ------------------
  739|      0|    s->pipewait = enabled;
  740|      0|    break;
  741|      0|  case CURLOPT_SUPPRESS_CONNECT_HEADERS:
  ------------------
  |  Branch (741:3): [True: 0, False: 10.2k]
  ------------------
  742|      0|    s->suppress_connect_headers = enabled;
  743|      0|    break;
  744|      0|#ifndef CURL_DISABLE_SHUFFLE_DNS
  745|      0|  case CURLOPT_DNS_SHUFFLE_ADDRESSES:
  ------------------
  |  Branch (745:3): [True: 0, False: 10.2k]
  ------------------
  746|      0|    s->dns_shuffle_addresses = enabled;
  747|      0|    break;
  748|      0|#endif
  749|      0|  case CURLOPT_DISALLOW_USERNAME_IN_URL:
  ------------------
  |  Branch (749:3): [True: 0, False: 10.2k]
  ------------------
  750|      0|    s->disallow_username_in_url = enabled;
  751|      0|    break;
  752|      0|  case CURLOPT_QUICK_EXIT:
  ------------------
  |  Branch (752:3): [True: 0, False: 10.2k]
  ------------------
  753|      0|    s->quick_exit = enabled;
  754|      0|    break;
  755|  5.07k|  default:
  ------------------
  |  Branch (755:3): [True: 5.07k, False: 5.15k]
  ------------------
  756|  5.07k|    return CURLE_UNKNOWN_OPTION;
  757|  10.2k|  }
  758|  5.15k|  if((arg > ok) || (arg < 0))
  ------------------
  |  Branch (758:6): [True: 0, False: 5.15k]
  |  Branch (758:20): [True: 0, False: 5.15k]
  ------------------
  759|       |    /* reserve other values for future use */
  760|      0|    infof(data, "boolean setopt(%d) got unsupported argument %ld,"
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  761|  5.15k|          " treated as %d", (int)option, arg, enabled);
  762|       |
  763|  5.15k|  return CURLE_OK;
  764|  10.2k|}
setopt.c:setopt_long_net:
  779|  5.07k|{
  780|  5.07k|  CURLcode result = CURLE_OK;
  781|  5.07k|  struct UserDefined *s = &data->set;
  782|       |
  783|  5.07k|  switch(option) {
  784|      0|  case CURLOPT_DNS_CACHE_TIMEOUT:
  ------------------
  |  Branch (784:3): [True: 0, False: 5.07k]
  ------------------
  785|      0|    if(arg != -1)
  ------------------
  |  Branch (785:8): [True: 0, False: 0]
  ------------------
  786|      0|      return setopt_set_timeout_sec(&s->dns_cache_timeout_ms, arg);
  787|      0|    s->dns_cache_timeout_ms = -1;
  788|      0|    break;
  789|      0|  case CURLOPT_MAXCONNECTS:
  ------------------
  |  Branch (789:3): [True: 0, False: 5.07k]
  ------------------
  790|      0|    result = value_range(&arg, 0, 0, INT_MAX);
  791|      0|    if(!result)
  ------------------
  |  Branch (791:8): [True: 0, False: 0]
  ------------------
  792|      0|      s->maxconnects = arg ? (uint32_t)arg : DEFAULT_CONNCACHE_SIZE;
  ------------------
  |  |   38|      0|#define DEFAULT_CONNCACHE_SIZE 5
  ------------------
  |  Branch (792:24): [True: 0, False: 0]
  ------------------
  793|      0|    break;
  794|      0|  case CURLOPT_SERVER_RESPONSE_TIMEOUT:
  ------------------
  |  Branch (794:3): [True: 0, False: 5.07k]
  ------------------
  795|      0|    return setopt_set_timeout_sec(&s->server_response_timeout, arg);
  796|      0|  case CURLOPT_SERVER_RESPONSE_TIMEOUT_MS:
  ------------------
  |  Branch (796:3): [True: 0, False: 5.07k]
  ------------------
  797|      0|    return setopt_set_timeout_ms(&s->server_response_timeout, arg);
  798|      0|  case CURLOPT_LOW_SPEED_LIMIT:
  ------------------
  |  Branch (798:3): [True: 0, False: 5.07k]
  ------------------
  799|      0|    if(arg < 0)
  ------------------
  |  Branch (799:8): [True: 0, False: 0]
  ------------------
  800|      0|      result = CURLE_BAD_FUNCTION_ARGUMENT;
  801|      0|    else
  802|      0|      s->low_speed_limit = arg;
  803|      0|    break;
  804|      0|  case CURLOPT_LOW_SPEED_TIME:
  ------------------
  |  Branch (804:3): [True: 0, False: 5.07k]
  ------------------
  805|      0|    result = value_range(&arg, 0, 0, USHRT_MAX);
  806|      0|    if(!result)
  ------------------
  |  Branch (806:8): [True: 0, False: 0]
  ------------------
  807|      0|      s->low_speed_time = (uint16_t)arg;
  808|      0|    break;
  809|      0|  case CURLOPT_PORT:
  ------------------
  |  Branch (809:3): [True: 0, False: 5.07k]
  ------------------
  810|      0|    if((arg < 0) || (arg > 65535))
  ------------------
  |  Branch (810:8): [True: 0, False: 0]
  |  Branch (810:21): [True: 0, False: 0]
  ------------------
  811|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
  812|      0|    s->use_port = (unsigned short)arg;
  813|      0|    break;
  814|      0|  case CURLOPT_TIMEOUT:
  ------------------
  |  Branch (814:3): [True: 0, False: 5.07k]
  ------------------
  815|      0|    return setopt_set_timeout_sec(&s->timeout, arg);
  816|  2.53k|  case CURLOPT_TIMEOUT_MS:
  ------------------
  |  Branch (816:3): [True: 2.53k, False: 2.53k]
  ------------------
  817|  2.53k|    return setopt_set_timeout_ms(&s->timeout, arg);
  818|      0|  case CURLOPT_CONNECTTIMEOUT:
  ------------------
  |  Branch (818:3): [True: 0, False: 5.07k]
  ------------------
  819|      0|    return setopt_set_timeout_sec(&s->connecttimeout, arg);
  820|  2.53k|  case CURLOPT_CONNECTTIMEOUT_MS:
  ------------------
  |  Branch (820:3): [True: 2.53k, False: 2.53k]
  ------------------
  821|  2.53k|    return setopt_set_timeout_ms(&s->connecttimeout, arg);
  822|      0|#ifndef CURL_DISABLE_BINDLOCAL
  823|      0|  case CURLOPT_LOCALPORT:
  ------------------
  |  Branch (823:3): [True: 0, False: 5.07k]
  ------------------
  824|      0|    if((arg < 0) || (arg > 65535))
  ------------------
  |  Branch (824:8): [True: 0, False: 0]
  |  Branch (824:21): [True: 0, False: 0]
  ------------------
  825|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
  826|      0|    s->localport = curlx_sltous(arg);
  827|      0|    break;
  828|      0|  case CURLOPT_LOCALPORTRANGE:
  ------------------
  |  Branch (828:3): [True: 0, False: 5.07k]
  ------------------
  829|      0|    if((arg < 0) || (arg > 65535))
  ------------------
  |  Branch (829:8): [True: 0, False: 0]
  |  Branch (829:21): [True: 0, False: 0]
  ------------------
  830|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
  831|      0|    s->localportrange = curlx_sltous(arg);
  832|      0|    break;
  833|      0|#endif
  834|      0|  case CURLOPT_BUFFERSIZE:
  ------------------
  |  Branch (834:3): [True: 0, False: 5.07k]
  ------------------
  835|      0|    result = value_range(&arg, 0, READBUFFER_MIN, READBUFFER_MAX);
  ------------------
  |  |  123|      0|#define READBUFFER_MIN  1024
  ------------------
                  result = value_range(&arg, 0, READBUFFER_MIN, READBUFFER_MAX);
  ------------------
  |  |  122|      0|#define READBUFFER_MAX  CURL_MAX_READ_SIZE
  |  |  ------------------
  |  |  |  |  257|      0|#define CURL_MAX_READ_SIZE (10 * 1024 * 1024)
  |  |  ------------------
  ------------------
  836|      0|    if(!result)
  ------------------
  |  Branch (836:8): [True: 0, False: 0]
  ------------------
  837|      0|      s->buffer_size = (unsigned int)arg;
  838|      0|    break;
  839|      0|  case CURLOPT_UPLOAD_BUFFERSIZE:
  ------------------
  |  Branch (839:3): [True: 0, False: 5.07k]
  ------------------
  840|      0|    result = value_range(&arg, 0, UPLOADBUFFER_MIN, UPLOADBUFFER_MAX);
  ------------------
  |  |  135|      0|#define UPLOADBUFFER_MIN     CURL_MAX_WRITE_SIZE
  |  |  ------------------
  |  |  |  |  267|      0|#define CURL_MAX_WRITE_SIZE 16384
  |  |  ------------------
  ------------------
                  result = value_range(&arg, 0, UPLOADBUFFER_MIN, UPLOADBUFFER_MAX);
  ------------------
  |  |  134|      0|#define UPLOADBUFFER_MAX     (2 * 1024 * 1024)
  ------------------
  841|      0|    if(!result)
  ------------------
  |  Branch (841:8): [True: 0, False: 0]
  ------------------
  842|      0|      s->upload_buffer_size = (unsigned int)arg;
  843|      0|    break;
  844|      0|  case CURLOPT_MAXFILESIZE:
  ------------------
  |  Branch (844:3): [True: 0, False: 5.07k]
  ------------------
  845|      0|    if(arg < 0)
  ------------------
  |  Branch (845:8): [True: 0, False: 0]
  ------------------
  846|      0|      result = CURLE_BAD_FUNCTION_ARGUMENT;
  847|      0|    else
  848|      0|      s->max_filesize = arg;
  849|      0|    break;
  850|      0|  case CURLOPT_IPRESOLVE:
  ------------------
  |  Branch (850:3): [True: 0, False: 5.07k]
  ------------------
  851|      0|    if((arg < CURL_IPRESOLVE_WHATEVER) || (arg > CURL_IPRESOLVE_V6))
  ------------------
  |  | 2329|      0|#define CURL_IPRESOLVE_WHATEVER 0L /* default, uses addresses to all IP
  ------------------
                  if((arg < CURL_IPRESOLVE_WHATEVER) || (arg > CURL_IPRESOLVE_V6))
  ------------------
  |  | 2332|      0|#define CURL_IPRESOLVE_V6       2L /* uses only IPv6 addresses/connections */
  ------------------
  |  Branch (851:8): [True: 0, False: 0]
  |  Branch (851:43): [True: 0, False: 0]
  ------------------
  852|      0|      result = CURLE_BAD_FUNCTION_ARGUMENT;
  853|      0|    else
  854|      0|      s->ipver = (unsigned char)arg;
  855|      0|    break;
  856|      0|  case CURLOPT_CONNECT_ONLY:
  ------------------
  |  Branch (856:3): [True: 0, False: 5.07k]
  ------------------
  857|      0|    if(arg < 0 || arg > 2)
  ------------------
  |  Branch (857:8): [True: 0, False: 0]
  |  Branch (857:19): [True: 0, False: 0]
  ------------------
  858|      0|      result = CURLE_BAD_FUNCTION_ARGUMENT;
  859|      0|    else {
  860|      0|      s->connect_only = !!arg;
  861|      0|      s->connect_only_ws = (arg == 2);
  862|      0|    }
  863|      0|    break;
  864|      0|#ifdef USE_IPV6
  865|      0|  case CURLOPT_ADDRESS_SCOPE:
  ------------------
  |  Branch (865:3): [True: 0, False: 5.07k]
  ------------------
  866|      0|#if SIZEOF_LONG > 4
  867|      0|    if((unsigned long)arg > UINT_MAX)
  ------------------
  |  Branch (867:8): [True: 0, False: 0]
  ------------------
  868|      0|      result = CURLE_BAD_FUNCTION_ARGUMENT;
  869|      0|    else
  870|      0|#endif
  871|      0|    s->scope_id = (unsigned int)arg;
  872|      0|    break;
  873|      0|#endif
  874|      0|  case CURLOPT_TCP_KEEPIDLE:
  ------------------
  |  Branch (874:3): [True: 0, False: 5.07k]
  ------------------
  875|      0|    result = value_range(&arg, 0, 0, INT_MAX);
  876|      0|    if(!result)
  ------------------
  |  Branch (876:8): [True: 0, False: 0]
  ------------------
  877|      0|      s->tcp_keepidle = (int)arg;
  878|      0|    break;
  879|      0|  case CURLOPT_TCP_KEEPINTVL:
  ------------------
  |  Branch (879:3): [True: 0, False: 5.07k]
  ------------------
  880|      0|    result = value_range(&arg, 0, 0, INT_MAX);
  881|      0|    if(!result)
  ------------------
  |  Branch (881:8): [True: 0, False: 0]
  ------------------
  882|      0|      s->tcp_keepintvl = (int)arg;
  883|      0|    break;
  884|      0|  case CURLOPT_TCP_KEEPCNT:
  ------------------
  |  Branch (884:3): [True: 0, False: 5.07k]
  ------------------
  885|      0|    result = value_range(&arg, 0, 0, INT_MAX);
  886|      0|    if(!result)
  ------------------
  |  Branch (886:8): [True: 0, False: 0]
  ------------------
  887|      0|      s->tcp_keepcnt = (int)arg;
  888|      0|    break;
  889|      0|  case CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS:
  ------------------
  |  Branch (889:3): [True: 0, False: 5.07k]
  ------------------
  890|      0|    return setopt_set_timeout_ms(&s->happy_eyeballs_timeout, arg);
  891|      0|  case CURLOPT_UPKEEP_INTERVAL_MS:
  ------------------
  |  Branch (891:3): [True: 0, False: 5.07k]
  ------------------
  892|      0|    return setopt_set_timeout_ms(&s->upkeep_interval_ms, arg);
  893|      0|  case CURLOPT_MAXAGE_CONN:
  ------------------
  |  Branch (893:3): [True: 0, False: 5.07k]
  ------------------
  894|      0|    return setopt_set_timeout_sec(&s->conn_max_idle_ms, arg);
  895|      0|  case CURLOPT_MAXLIFETIME_CONN:
  ------------------
  |  Branch (895:3): [True: 0, False: 5.07k]
  ------------------
  896|      0|    return setopt_set_timeout_sec(&s->conn_max_age_ms, arg);
  897|      0|  case CURLOPT_DNS_USE_GLOBAL_CACHE:
  ------------------
  |  Branch (897:3): [True: 0, False: 5.07k]
  ------------------
  898|       |    /* deprecated */
  899|      0|    break;
  900|      0|  default:
  ------------------
  |  Branch (900:3): [True: 0, False: 5.07k]
  ------------------
  901|      0|    return CURLE_UNKNOWN_OPTION;
  902|  5.07k|  }
  903|      0|  return result;
  904|  5.07k|}
setopt.c:setopt_set_timeout_ms:
   68|  5.07k|{
   69|  5.07k|  if(ms < 0)
  ------------------
  |  Branch (69:6): [True: 0, False: 5.07k]
  ------------------
   70|      0|    return CURLE_BAD_FUNCTION_ARGUMENT;
   71|       |#if LONG_MAX > TIMEDIFF_T_MAX
   72|       |  if(ms > TIMEDIFF_T_MAX) {
   73|       |    *ptimeout_ms = TIMEDIFF_T_MAX;
   74|       |    return CURLE_OK;
   75|       |  }
   76|       |#endif
   77|  5.07k|  *ptimeout_ms = (timediff_t)ms;
   78|  5.07k|  return CURLE_OK;
   79|  5.07k|}
setopt.c:changeproxy:
  964|  2.53k|{
  965|  2.53k|  Curl_auth_digest_cleanup(&data->state.proxydigest);
  966|  2.53k|  memset(&data->state.authproxy, 0, sizeof(data->state.authproxy));
  967|  2.53k|}
setopt.c:setopt_slist:
 1293|  3.32k|{
 1294|  3.32k|  CURLcode result = CURLE_OK;
 1295|  3.32k|  struct UserDefined *s = &data->set;
 1296|  3.32k|  switch(option) {
 1297|      0|#ifndef CURL_DISABLE_PROXY
 1298|      0|  case CURLOPT_PROXYHEADER:
  ------------------
  |  Branch (1298:3): [True: 0, False: 3.32k]
  ------------------
 1299|       |    /*
 1300|       |     * Set a list with proxy headers to use (or replace internals with)
 1301|       |     *
 1302|       |     * Since CURLOPT_HTTPHEADER was the only way to set HTTP headers for a
 1303|       |     * long time we remain doing it this way until CURLOPT_PROXYHEADER is
 1304|       |     * used. As soon as this option has been used, if set to anything but
 1305|       |     * NULL, custom headers for proxies are only picked from this list.
 1306|       |     *
 1307|       |     * Set this option to NULL to restore the previous behavior.
 1308|       |     */
 1309|      0|    s->proxyheaders = slist;
 1310|      0|    break;
 1311|      0|#endif
 1312|      0|#ifndef CURL_DISABLE_HTTP
 1313|      0|  case CURLOPT_HTTP200ALIASES:
  ------------------
  |  Branch (1313:3): [True: 0, False: 3.32k]
  ------------------
 1314|       |    /*
 1315|       |     * Set a list of aliases for HTTP 200 in response header
 1316|       |     */
 1317|      0|    s->http200aliases = slist;
 1318|      0|    break;
 1319|      0|#endif
 1320|      0|#if !defined(CURL_DISABLE_FTP) || defined(USE_SSH)
 1321|      0|  case CURLOPT_POSTQUOTE:
  ------------------
  |  Branch (1321:3): [True: 0, False: 3.32k]
  ------------------
 1322|       |    /*
 1323|       |     * List of RAW FTP commands to use after a transfer
 1324|       |     */
 1325|      0|    s->postquote = slist;
 1326|      0|    break;
 1327|      0|  case CURLOPT_PREQUOTE:
  ------------------
  |  Branch (1327:3): [True: 0, False: 3.32k]
  ------------------
 1328|       |    /*
 1329|       |     * List of RAW FTP commands to use prior to RETR (Wesley Laxton)
 1330|       |     */
 1331|      0|    s->prequote = slist;
 1332|      0|    break;
 1333|      0|  case CURLOPT_QUOTE:
  ------------------
  |  Branch (1333:3): [True: 0, False: 3.32k]
  ------------------
 1334|       |    /*
 1335|       |     * List of RAW FTP commands to use before a transfer
 1336|       |     */
 1337|      0|    s->quote = slist;
 1338|      0|    break;
 1339|      0|#endif
 1340|      0|  case CURLOPT_RESOLVE:
  ------------------
  |  Branch (1340:3): [True: 0, False: 3.32k]
  ------------------
 1341|       |    /*
 1342|       |     * List of HOST:PORT:[addresses] strings to populate the DNS cache with
 1343|       |     * Entries added this way will remain in the cache until explicitly
 1344|       |     * removed or the handle is cleaned up.
 1345|       |     *
 1346|       |     * Prefix the HOST with plus sign (+) to have the entry expire like
 1347|       |     * automatically added entries.
 1348|       |     *
 1349|       |     * Prefix the HOST with dash (-) to _remove_ the entry from the cache.
 1350|       |     *
 1351|       |     * This API can remove any entry from the DNS cache, but only entries
 1352|       |     * that are not actually in use right now will be pruned immediately.
 1353|       |     */
 1354|      0|    s->resolve = slist;
 1355|      0|    data->state.resolve = s->resolve;
 1356|      0|    break;
 1357|      0|#if !defined(CURL_DISABLE_HTTP) || !defined(CURL_DISABLE_MIME)
 1358|      0|  case CURLOPT_HTTPHEADER:
  ------------------
  |  Branch (1358:3): [True: 0, False: 3.32k]
  ------------------
 1359|       |    /*
 1360|       |     * Set a list with HTTP headers to use (or replace internals with)
 1361|       |     */
 1362|      0|    s->headers = slist;
 1363|      0|    break;
 1364|      0|#endif
 1365|      0|#ifndef CURL_DISABLE_TELNET
 1366|    790|  case CURLOPT_TELNETOPTIONS:
  ------------------
  |  Branch (1366:3): [True: 790, False: 2.53k]
  ------------------
 1367|       |    /*
 1368|       |     * Set a linked list of telnet options
 1369|       |     */
 1370|    790|    s->telnet_options = slist;
 1371|    790|    break;
 1372|      0|#endif
 1373|      0|#ifndef CURL_DISABLE_SMTP
 1374|      0|  case CURLOPT_MAIL_RCPT:
  ------------------
  |  Branch (1374:3): [True: 0, False: 3.32k]
  ------------------
 1375|       |    /* Set the list of mail recipients */
 1376|      0|    s->mail_rcpt = slist;
 1377|      0|    break;
 1378|      0|#endif
 1379|  2.53k|  case CURLOPT_CONNECT_TO:
  ------------------
  |  Branch (1379:3): [True: 2.53k, False: 790]
  ------------------
 1380|  2.53k|    s->connect_to = slist;
 1381|  2.53k|    break;
 1382|      0|  default:
  ------------------
  |  Branch (1382:3): [True: 0, False: 3.32k]
  ------------------
 1383|      0|    return CURLE_UNKNOWN_OPTION;
 1384|  3.32k|  }
 1385|  3.32k|  return result;
 1386|  3.32k|}
setopt.c:setopt_cptr:
 2500|  36.2k|{
 2501|  36.2k|  typedef CURLcode (*ptrfunc)(struct Curl_easy *data, CURLoption option,
 2502|  36.2k|                              char *ptr);
 2503|       |  /* Order by likeliness */
 2504|  36.2k|  static const ptrfunc setopt_call[] = {
 2505|  36.2k|    setopt_cptr_misc,
 2506|  36.2k|#if defined(USE_SSL) || defined(USE_SSH)
 2507|  36.2k|    setopt_cptr_ssl,
 2508|  36.2k|#endif
 2509|  36.2k|#ifndef CURL_DISABLE_PROXY
 2510|  36.2k|    setopt_cptr_proxy,
 2511|  36.2k|#endif
 2512|  36.2k|    setopt_cptr_net,
 2513|  36.2k|#ifndef CURL_DISABLE_FTP
 2514|  36.2k|    setopt_cptr_ftp,
 2515|  36.2k|#endif
 2516|       |#ifdef USE_SSH
 2517|       |    setopt_cptr_ssh,
 2518|       |#endif
 2519|  36.2k|#if !defined(CURL_DISABLE_HTTP) || !defined(CURL_DISABLE_MQTT)
 2520|  36.2k|    setopt_cptr_http_mqtt,
 2521|  36.2k|#endif
 2522|  36.2k|  };
 2523|  36.2k|  size_t i;
 2524|       |
 2525|  66.7k|  for(i = 0; i < CURL_ARRAYSIZE(setopt_call); i++) {
  ------------------
  |  | 1299|  66.7k|#define CURL_ARRAYSIZE(A) (sizeof(A) / sizeof((A)[0]))
  ------------------
  |  Branch (2525:14): [True: 66.7k, False: 0]
  ------------------
 2526|  66.7k|    CURLcode result = setopt_call[i](data, option, ptr);
 2527|  66.7k|    if(result != CURLE_UNKNOWN_OPTION)
  ------------------
  |  Branch (2527:8): [True: 36.2k, False: 30.4k]
  ------------------
 2528|  36.2k|      return result;
 2529|  66.7k|  }
 2530|      0|  return CURLE_UNKNOWN_OPTION;
 2531|  36.2k|}
setopt.c:setopt_cptr_misc:
 2285|  36.2k|{
 2286|  36.2k|  CURLcode result = CURLE_OK;
 2287|  36.2k|  struct UserDefined *s = &data->set;
 2288|       |
 2289|  36.2k|  switch(option) {
 2290|      0|  case CURLOPT_REQUEST_TARGET:
  ------------------
  |  Branch (2290:3): [True: 0, False: 36.2k]
  ------------------
 2291|      0|    return Curl_setstropt(data, STRING_TARGET, ptr);
 2292|      0|#ifndef CURL_DISABLE_NETRC
 2293|  2.53k|  case CURLOPT_NETRC_FILE:
  ------------------
  |  Branch (2293:3): [True: 2.53k, False: 33.7k]
  ------------------
 2294|  2.53k|    return Curl_setstropt(data, STRING_NETRC_FILE, ptr);
 2295|      0|#endif
 2296|      0|  case CURLOPT_CUSTOMREQUEST:
  ------------------
  |  Branch (2296:3): [True: 0, False: 36.2k]
  ------------------
 2297|      0|    return Curl_setstropt(data, STRING_CUSTOMREQUEST, ptr);
 2298|       |
 2299|       |    /* we do not set s->method = HTTPREQ_CUSTOM; here, we continue as if we
 2300|       |       were using the already set type and this changes the actual request
 2301|       |       keyword */
 2302|      0|  case CURLOPT_SERVICE_NAME:
  ------------------
  |  Branch (2302:3): [True: 0, False: 36.2k]
  ------------------
 2303|      0|    return Curl_setstropt(data, STRING_SERVICE_NAME, ptr);
 2304|       |
 2305|      0|  case CURLOPT_HEADERDATA:
  ------------------
  |  Branch (2305:3): [True: 0, False: 36.2k]
  ------------------
 2306|      0|    s->writeheader = ptr;
 2307|      0|    break;
 2308|  5.07k|  case CURLOPT_READDATA:
  ------------------
  |  Branch (2308:3): [True: 5.07k, False: 31.1k]
  ------------------
 2309|  5.07k|    s->in_set = ptr;
 2310|  5.07k|    break;
 2311|      0|  case CURLOPT_WRITEDATA:
  ------------------
  |  Branch (2311:3): [True: 0, False: 36.2k]
  ------------------
 2312|      0|    s->out = ptr;
 2313|      0|    break;
 2314|      0|  case CURLOPT_DEBUGDATA:
  ------------------
  |  Branch (2314:3): [True: 0, False: 36.2k]
  ------------------
 2315|      0|    s->debugdata = ptr;
 2316|      0|    break;
 2317|      0|  case CURLOPT_PROGRESSDATA:
  ------------------
  |  | 1353|      0|#define CURLOPT_PROGRESSDATA CURLOPT_XFERINFODATA
  ------------------
  |  Branch (2317:3): [True: 0, False: 36.2k]
  ------------------
 2318|      0|    s->progress_client = ptr;
 2319|      0|    break;
 2320|  5.07k|  case CURLOPT_SEEKDATA:
  ------------------
  |  Branch (2320:3): [True: 5.07k, False: 31.1k]
  ------------------
 2321|  5.07k|    s->seek_client = ptr;
 2322|  5.07k|    break;
 2323|      0|  case CURLOPT_IOCTLDATA:
  ------------------
  |  Branch (2323:3): [True: 0, False: 36.2k]
  ------------------
 2324|      0|    s->ioctl_client = ptr;
 2325|      0|    break;
 2326|      0|  case CURLOPT_SOCKOPTDATA:
  ------------------
  |  Branch (2326:3): [True: 0, False: 36.2k]
  ------------------
 2327|      0|    s->sockopt_client = ptr;
 2328|      0|    break;
 2329|  2.53k|  case CURLOPT_OPENSOCKETDATA:
  ------------------
  |  Branch (2329:3): [True: 2.53k, False: 33.7k]
  ------------------
 2330|  2.53k|    s->opensocket_client = ptr;
 2331|  2.53k|    break;
 2332|      0|  case CURLOPT_RESOLVER_START_DATA:
  ------------------
  |  Branch (2332:3): [True: 0, False: 36.2k]
  ------------------
 2333|      0|    s->resolver_start_client = ptr;
 2334|      0|    break;
 2335|      0|  case CURLOPT_CLOSESOCKETDATA:
  ------------------
  |  Branch (2335:3): [True: 0, False: 36.2k]
  ------------------
 2336|      0|    s->closesocket_client = ptr;
 2337|      0|    break;
 2338|      0|  case CURLOPT_PREREQDATA:
  ------------------
  |  Branch (2338:3): [True: 0, False: 36.2k]
  ------------------
 2339|      0|    s->prereq_userp = ptr;
 2340|      0|    break;
 2341|      0|  case CURLOPT_ERRORBUFFER:
  ------------------
  |  Branch (2341:3): [True: 0, False: 36.2k]
  ------------------
 2342|      0|    s->errorbuffer = ptr;
 2343|      0|    break;
 2344|  2.53k|  case CURLOPT_URL:
  ------------------
  |  Branch (2344:3): [True: 2.53k, False: 33.7k]
  ------------------
 2345|  2.53k|    result = Curl_setstropt(data, STRING_SET_URL, ptr);
 2346|  2.53k|    Curl_bufref_set(&data->state.url,
 2347|  2.53k|                    CURL_EASY_STR(data, STRING_SET_URL), 0, NULL);
  ------------------
  |  | 1228|  2.53k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
 2348|  2.53k|    break;
 2349|       |
 2350|    462|  case CURLOPT_USERPWD: {
  ------------------
  |  Branch (2350:3): [True: 462, False: 35.7k]
  ------------------
 2351|    462|    char *u = NULL, *p = NULL;
 2352|    462|    result = setstropt_userpwd(ptr, &u, &p);
 2353|    462|    if(!result) {
  ------------------
  |  Branch (2353:8): [True: 462, False: 0]
  ------------------
 2354|    462|      result = CURL_EASY_STR_SETN(data, STRING_USERNAME, u);
  ------------------
  |  | 1232|    462|  Curl_u8_strset_setn(&(d)->set.strings, (uint8_t)(id), (s))
  ------------------
 2355|    462|      u = NULL;
 2356|    462|    }
 2357|    462|    if(!result) {
  ------------------
  |  Branch (2357:8): [True: 462, False: 0]
  ------------------
 2358|    462|      result = CURL_EASY_STR_SETN(data, STRING_PASSWORD, p);
  ------------------
  |  | 1232|    462|  Curl_u8_strset_setn(&(d)->set.strings, (uint8_t)(id), (s))
  ------------------
 2359|    462|      p = NULL;
 2360|    462|    }
 2361|    462|    curlx_free(u);
  ------------------
  |  | 1476|    462|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 2362|    462|    curlx_free(p);
  ------------------
  |  | 1476|    462|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 2363|    462|    return result;
 2364|      0|  }
 2365|       |
 2366|     86|  case CURLOPT_USERNAME:
  ------------------
  |  Branch (2366:3): [True: 86, False: 36.1k]
  ------------------
 2367|     86|    return Curl_setstropt(data, STRING_USERNAME, ptr);
 2368|       |
 2369|    150|  case CURLOPT_PASSWORD:
  ------------------
  |  Branch (2369:3): [True: 150, False: 36.0k]
  ------------------
 2370|    150|    return Curl_setstropt(data, STRING_PASSWORD, ptr);
 2371|       |
 2372|      0|  case CURLOPT_LOGIN_OPTIONS:
  ------------------
  |  Branch (2372:3): [True: 0, False: 36.2k]
  ------------------
 2373|      0|    return Curl_setstropt(data, STRING_OPTIONS, ptr);
 2374|       |
 2375|      0|  case CURLOPT_XOAUTH2_BEARER:
  ------------------
  |  Branch (2375:3): [True: 0, False: 36.2k]
  ------------------
 2376|      0|    return Curl_setstropt(data, STRING_BEARER, ptr);
 2377|      0|  case CURLOPT_RANGE:
  ------------------
  |  Branch (2377:3): [True: 0, False: 36.2k]
  ------------------
 2378|      0|    return Curl_setstropt(data, STRING_SET_RANGE, ptr);
 2379|      0|  case CURLOPT_PRIVATE:
  ------------------
  |  Branch (2379:3): [True: 0, False: 36.2k]
  ------------------
 2380|      0|    s->private_data = ptr;
 2381|      0|    break;
 2382|  2.53k|  case CURLOPT_PROTOCOLS_STR:
  ------------------
  |  Branch (2382:3): [True: 2.53k, False: 33.7k]
  ------------------
 2383|  2.53k|    if(ptr) {
  ------------------
  |  Branch (2383:8): [True: 2.53k, False: 0]
  ------------------
 2384|  2.53k|      curl_prot_t protos;
 2385|  2.53k|      result = protocol2num(ptr, &protos);
 2386|  2.53k|      if(!result)
  ------------------
  |  Branch (2386:10): [True: 2.53k, False: 0]
  ------------------
 2387|  2.53k|        s->allowed_protocols = protos;
 2388|  2.53k|    }
 2389|      0|    else
 2390|       |      /* make a NULL argument reset to default */
 2391|      0|      s->allowed_protocols = (curl_prot_t)CURLPROTO_64ALL;
  ------------------
  |  |   68|      0|#define CURLPROTO_64ALL ((uint64_t)0xffffffffffffffff)
  ------------------
 2392|  2.53k|    break;
 2393|  2.53k|  case CURLOPT_REDIR_PROTOCOLS_STR:
  ------------------
  |  Branch (2393:3): [True: 2.53k, False: 33.7k]
  ------------------
 2394|  2.53k|    if(ptr) {
  ------------------
  |  Branch (2394:8): [True: 2.53k, False: 0]
  ------------------
 2395|  2.53k|      curl_prot_t protos;
 2396|  2.53k|      result = protocol2num(ptr, &protos);
 2397|  2.53k|      if(!result)
  ------------------
  |  Branch (2397:10): [True: 2.53k, False: 0]
  ------------------
 2398|  2.53k|        s->redir_protocols = protos;
 2399|  2.53k|    }
 2400|      0|    else
 2401|       |      /* make a NULL argument reset to default */
 2402|      0|      s->redir_protocols = (curl_prot_t)CURLPROTO_REDIR;
  ------------------
  |  |   71|      0|#define CURLPROTO_REDIR (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_FTP | \
  |  |  ------------------
  |  |  |  | 1088|      0|#define CURLPROTO_HTTP    (1L << 0)
  |  |  ------------------
  |  |               #define CURLPROTO_REDIR (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_FTP | \
  |  |  ------------------
  |  |  |  | 1089|      0|#define CURLPROTO_HTTPS   (1L << 1)
  |  |  ------------------
  |  |               #define CURLPROTO_REDIR (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_FTP | \
  |  |  ------------------
  |  |  |  | 1090|      0|#define CURLPROTO_FTP     (1L << 2)
  |  |  ------------------
  |  |   72|      0|                         CURLPROTO_FTPS)
  |  |  ------------------
  |  |  |  | 1091|      0|#define CURLPROTO_FTPS    (1L << 3)
  |  |  ------------------
  ------------------
 2403|  2.53k|    break;
 2404|      0|  case CURLOPT_DEFAULT_PROTOCOL:
  ------------------
  |  Branch (2404:3): [True: 0, False: 36.2k]
  ------------------
 2405|       |    /* Set the protocol to use when the URL does not include any protocol */
 2406|      0|    return Curl_setstropt(data, STRING_DEFAULT_PROTOCOL, ptr);
 2407|      0|#ifndef CURL_DISABLE_SMTP
 2408|      0|  case CURLOPT_MAIL_FROM:
  ------------------
  |  Branch (2408:3): [True: 0, False: 36.2k]
  ------------------
 2409|       |    /* Set the SMTP mail originator */
 2410|      0|    return Curl_setstropt(data, STRING_MAIL_FROM, ptr);
 2411|      0|  case CURLOPT_MAIL_AUTH:
  ------------------
  |  Branch (2411:3): [True: 0, False: 36.2k]
  ------------------
 2412|       |    /* Set the SMTP auth originator */
 2413|      0|    return Curl_setstropt(data, STRING_MAIL_AUTH, ptr);
 2414|      0|#endif
 2415|      0|  case CURLOPT_SASL_AUTHZID:
  ------------------
  |  Branch (2415:3): [True: 0, False: 36.2k]
  ------------------
 2416|       |    /* Authorization identity (identity to act as) */
 2417|      0|    return Curl_setstropt(data, STRING_SASL_AUTHZID, ptr);
 2418|      0|#ifndef CURL_DISABLE_RTSP
 2419|      0|  case CURLOPT_RTSP_SESSION_ID:
  ------------------
  |  Branch (2419:3): [True: 0, False: 36.2k]
  ------------------
 2420|      0|    return Curl_setstropt(data, STRING_RTSP_SESSION_ID, ptr);
 2421|      0|  case CURLOPT_RTSP_STREAM_URI:
  ------------------
  |  Branch (2421:3): [True: 0, False: 36.2k]
  ------------------
 2422|      0|    return Curl_setstropt(data, STRING_RTSP_STREAM_URI, ptr);
 2423|      0|  case CURLOPT_RTSP_TRANSPORT:
  ------------------
  |  Branch (2423:3): [True: 0, False: 36.2k]
  ------------------
 2424|      0|    return Curl_setstropt(data, STRING_RTSP_TRANSPORT, ptr);
 2425|      0|  case CURLOPT_INTERLEAVEDATA:
  ------------------
  |  Branch (2425:3): [True: 0, False: 36.2k]
  ------------------
 2426|      0|    s->rtp_out = ptr;
 2427|      0|    break;
 2428|      0|#endif /* !CURL_DISABLE_RTSP */
 2429|      0|  case CURLOPT_TLSAUTH_USERNAME:
  ------------------
  |  Branch (2429:3): [True: 0, False: 36.2k]
  ------------------
 2430|      0|  case CURLOPT_TLSAUTH_PASSWORD:
  ------------------
  |  Branch (2430:3): [True: 0, False: 36.2k]
  ------------------
 2431|      0|  case CURLOPT_TLSAUTH_TYPE:
  ------------------
  |  Branch (2431:3): [True: 0, False: 36.2k]
  ------------------
 2432|      0|  case CURLOPT_PROXY_TLSAUTH_USERNAME:
  ------------------
  |  Branch (2432:3): [True: 0, False: 36.2k]
  ------------------
 2433|      0|  case CURLOPT_PROXY_TLSAUTH_PASSWORD:
  ------------------
  |  Branch (2433:3): [True: 0, False: 36.2k]
  ------------------
 2434|      0|  case CURLOPT_PROXY_TLSAUTH_TYPE:
  ------------------
  |  Branch (2434:3): [True: 0, False: 36.2k]
  ------------------
 2435|      0|    return CURLE_NOT_BUILT_IN;
 2436|      0|#ifndef CURL_DISABLE_HSTS
 2437|      0|  case CURLOPT_HSTSREADDATA:
  ------------------
  |  Branch (2437:3): [True: 0, False: 36.2k]
  ------------------
 2438|      0|    s->hsts_read_userp = ptr;
 2439|      0|    break;
 2440|      0|  case CURLOPT_HSTSWRITEDATA:
  ------------------
  |  Branch (2440:3): [True: 0, False: 36.2k]
  ------------------
 2441|      0|    s->hsts_write_userp = ptr;
 2442|      0|    break;
 2443|  2.53k|  case CURLOPT_HSTS: {
  ------------------
  |  Branch (2443:3): [True: 2.53k, False: 33.7k]
  ------------------
 2444|  2.53k|    struct curl_slist *h;
 2445|  2.53k|    if(!data->hsts) {
  ------------------
  |  Branch (2445:8): [True: 2.53k, False: 0]
  ------------------
 2446|  2.53k|      data->hsts = Curl_hsts_init();
 2447|  2.53k|      if(!data->hsts)
  ------------------
  |  Branch (2447:10): [True: 0, False: 2.53k]
  ------------------
 2448|      0|        return CURLE_OUT_OF_MEMORY;
 2449|  2.53k|    }
 2450|  2.53k|    if(ptr) {
  ------------------
  |  Branch (2450:8): [True: 2.53k, False: 0]
  ------------------
 2451|  2.53k|      result = Curl_setstropt(data, STRING_HSTS, ptr);
 2452|  2.53k|      if(result)
  ------------------
  |  Branch (2452:10): [True: 0, False: 2.53k]
  ------------------
 2453|      0|        return result;
 2454|       |      /* this needs to build a list of filenames to read from, so that it can
 2455|       |         read them later, as we might get a shared HSTS handle to load them
 2456|       |         into */
 2457|  2.53k|      h = curl_slist_append(data->state.hstslist, ptr);
 2458|  2.53k|      if(!h) {
  ------------------
  |  Branch (2458:10): [True: 0, False: 2.53k]
  ------------------
 2459|      0|        curl_slist_free_all(data->state.hstslist);
 2460|      0|        data->state.hstslist = NULL;
 2461|      0|        return CURLE_OUT_OF_MEMORY;
 2462|      0|      }
 2463|  2.53k|      data->state.hstslist = h; /* store the list for later use */
 2464|  2.53k|    }
 2465|      0|    else {
 2466|       |      /* clear the list of HSTS files */
 2467|      0|      curl_slist_free_all(data->state.hstslist);
 2468|      0|      data->state.hstslist = NULL;
 2469|      0|      if(!data->share || !data->share->hsts)
  ------------------
  |  Branch (2469:10): [True: 0, False: 0]
  |  Branch (2469:26): [True: 0, False: 0]
  ------------------
 2470|       |        /* throw away the HSTS cache unless shared */
 2471|      0|        Curl_hsts_cleanup(&data->hsts);
 2472|      0|    }
 2473|  2.53k|    break;
 2474|  2.53k|  }
 2475|  2.53k|#endif /* !CURL_DISABLE_HSTS */
 2476|  2.53k|#ifndef CURL_DISABLE_ALTSVC
 2477|  2.53k|  case CURLOPT_ALTSVC:
  ------------------
  |  Branch (2477:3): [True: 2.53k, False: 33.7k]
  ------------------
 2478|  2.53k|    if(!data->asi) {
  ------------------
  |  Branch (2478:8): [True: 2.53k, False: 0]
  ------------------
 2479|  2.53k|      data->asi = Curl_altsvc_init();
 2480|  2.53k|      if(!data->asi)
  ------------------
  |  Branch (2480:10): [True: 0, False: 2.53k]
  ------------------
 2481|      0|        return CURLE_OUT_OF_MEMORY;
 2482|  2.53k|    }
 2483|  2.53k|    result = Curl_setstropt(data, STRING_ALTSVC, ptr);
 2484|  2.53k|    if(result)
  ------------------
  |  Branch (2484:8): [True: 0, False: 2.53k]
  ------------------
 2485|      0|      break;
 2486|  2.53k|    if(ptr)
  ------------------
  |  Branch (2486:8): [True: 2.53k, False: 0]
  ------------------
 2487|  2.53k|      return Curl_altsvc_load(data->asi, ptr);
 2488|      0|    break;
 2489|      0|#endif /* !CURL_DISABLE_ALTSVC */
 2490|      0|  case CURLOPT_ECH:
  ------------------
  |  Branch (2490:3): [True: 0, False: 36.2k]
  ------------------
 2491|      0|    return setopt_ech(data, ptr);
  ------------------
  |  | 1872|      0|#define setopt_ech(x, y) CURLE_NOT_BUILT_IN
  ------------------
 2492|  7.61k|  default:
  ------------------
  |  Branch (2492:3): [True: 7.61k, False: 28.6k]
  ------------------
 2493|  7.61k|    return CURLE_UNKNOWN_OPTION;
 2494|  36.2k|  }
 2495|  22.8k|  return result;
 2496|  36.2k|}
setopt.c:setstropt_userpwd:
  125|    462|{
  126|    462|  char *user = NULL;
  127|    462|  char *passwd = NULL;
  128|       |
  129|    462|  DEBUGASSERT(userp);
  ------------------
  |  | 1075|    462|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (129:3): [True: 0, False: 462]
  |  Branch (129:3): [True: 462, False: 0]
  ------------------
  130|    462|  DEBUGASSERT(passwdp);
  ------------------
  |  | 1075|    462|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (130:3): [True: 0, False: 462]
  |  Branch (130:3): [True: 462, False: 0]
  ------------------
  131|       |
  132|       |  /* Parse the login details if specified. If not, then we treat NULL as a
  133|       |     hint to clear the existing data */
  134|    462|  if(option) {
  ------------------
  |  Branch (134:6): [True: 462, False: 0]
  ------------------
  135|    462|    size_t len = strlen(option);
  136|    462|    CURLcode result;
  137|    462|    if(len > CURL_MAX_INPUT_LENGTH)
  ------------------
  |  |   45|    462|#define CURL_MAX_INPUT_LENGTH 8000000
  ------------------
  |  Branch (137:8): [True: 0, False: 462]
  ------------------
  138|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
  139|       |
  140|    462|    result = Curl_parse_login_details(option, len, &user, &passwd, NULL);
  141|    462|    if(result)
  ------------------
  |  Branch (141:8): [True: 0, False: 462]
  ------------------
  142|      0|      return result;
  143|    462|  }
  144|       |
  145|    462|  curlx_free(*userp);
  ------------------
  |  | 1476|    462|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  146|    462|  *userp = user;
  147|       |
  148|    462|  curlx_strzero(*passwdp);
  149|    462|  curlx_free(*passwdp);
  ------------------
  |  | 1476|    462|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  150|    462|  *passwdp = passwd;
  151|       |
  152|    462|  return CURLE_OK;
  153|    462|}
setopt.c:protocol2num:
  191|  5.07k|{
  192|       |  /*
  193|       |   * We are asked to cherry-pick protocols, so play it safe and disallow all
  194|       |   * protocols to start with, and re-add the wanted ones back in.
  195|       |   */
  196|  5.07k|  *val = 0;
  197|       |
  198|  5.07k|  if(!str)
  ------------------
  |  Branch (198:6): [True: 0, False: 5.07k]
  ------------------
  199|      0|    return CURLE_BAD_FUNCTION_ARGUMENT;
  200|       |
  201|  5.07k|  if(curl_strequal(str, "all")) {
  ------------------
  |  Branch (201:6): [True: 0, False: 5.07k]
  ------------------
  202|      0|    *val = ~(curl_prot_t)0;
  203|      0|    return CURLE_OK;
  204|      0|  }
  205|       |
  206|  12.6k|  do {
  207|  12.6k|    const char *token = str;
  208|  12.6k|    size_t tlen;
  209|       |
  210|  12.6k|    str = strchr(str, ',');
  211|  12.6k|    tlen = str ? (size_t)(str - token) : strlen(token);
  ------------------
  |  Branch (211:12): [True: 7.61k, False: 5.07k]
  ------------------
  212|  12.6k|    if(tlen) {
  ------------------
  |  Branch (212:8): [True: 12.6k, False: 0]
  ------------------
  213|  12.6k|      const struct Curl_scheme *h = Curl_getn_scheme(token, tlen);
  214|       |
  215|  12.6k|      if(!h || !h->run)
  ------------------
  |  Branch (215:10): [True: 0, False: 12.6k]
  |  Branch (215:16): [True: 0, False: 12.6k]
  ------------------
  216|      0|        return CURLE_UNSUPPORTED_PROTOCOL;
  217|       |
  218|  12.6k|      *val |= h->protocol;
  219|  12.6k|    }
  220|  12.6k|  } while(str && str++);
  ------------------
  |  Branch (220:11): [True: 7.61k, False: 5.07k]
  |  Branch (220:18): [True: 7.61k, False: 0]
  ------------------
  221|       |
  222|  5.07k|  if(!*val)
  ------------------
  |  Branch (222:6): [True: 0, False: 5.07k]
  ------------------
  223|       |    /* no protocol listed */
  224|      0|    return CURLE_BAD_FUNCTION_ARGUMENT;
  225|  5.07k|  return CURLE_OK;
  226|  5.07k|}
setopt.c:setopt_cptr_ssl:
 1879|  7.61k|{
 1880|  7.61k|  CURLcode result = CURLE_OK;
 1881|       |
 1882|  7.61k|  switch(option) {
 1883|      0|  case CURLOPT_KEYPASSWD:
  ------------------
  |  Branch (1883:3): [True: 0, False: 7.61k]
  ------------------
 1884|       |    /*
 1885|       |     * String that holds the SSL or SSH private key password.
 1886|       |     */
 1887|      0|    result = Curl_setstropt(data, STRING_KEY_PASSWD, ptr);
 1888|      0|    break;
 1889|      0|#ifdef USE_SSL
 1890|      0|  case CURLOPT_CAINFO:
  ------------------
  |  Branch (1890:3): [True: 0, False: 7.61k]
  ------------------
 1891|       |    /*
 1892|       |     * Set CA info for SSL connection. Specify filename of the CA certificate
 1893|       |     */
 1894|      0|    result = Curl_setstropt(data, STRING_SSL_CAFILE, ptr);
 1895|      0|    data->set.ssl.custom_cafile = !!CURL_EASY_STR(data, STRING_SSL_CAFILE);
  ------------------
  |  | 1228|      0|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
 1896|      0|    return result;
 1897|      0|  case CURLOPT_CAPATH:
  ------------------
  |  Branch (1897:3): [True: 0, False: 7.61k]
  ------------------
 1898|       |    /*
 1899|       |     * Set CA path info for SSL connection. Specify directory name of the CA
 1900|       |     * certificates which have been prepared using openssl c_rehash utility.
 1901|       |     */
 1902|      0|    if(Curl_ssl_supports(data, SSLSUPP_CA_PATH)) {
  ------------------
  |  |   35|      0|#define SSLSUPP_CA_PATH      (1 << 0) /* supports CAPATH */
  ------------------
  |  Branch (1902:8): [True: 0, False: 0]
  ------------------
 1903|       |      /* This does not work on Windows. */
 1904|      0|      result = Curl_setstropt(data, STRING_SSL_CAPATH, ptr);
 1905|      0|      data->set.ssl.custom_capath = !!CURL_EASY_STR(data, STRING_SSL_CAPATH);
  ------------------
  |  | 1228|      0|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
 1906|      0|      return result;
 1907|      0|    }
 1908|      0|    return CURLE_NOT_BUILT_IN;
 1909|      0|  case CURLOPT_CRLFILE:
  ------------------
  |  Branch (1909:3): [True: 0, False: 7.61k]
  ------------------
 1910|       |    /*
 1911|       |     * Set CRL file info for SSL connection. Specify filename of the CRL
 1912|       |     * to check certificates revocation
 1913|       |     */
 1914|      0|    if(Curl_ssl_supports(data, SSLSUPP_CRLFILE))
  ------------------
  |  |   48|      0|#define SSLSUPP_CRLFILE      (1 << 13) /* supports CURLOPT_CRLFILE */
  ------------------
  |  Branch (1914:8): [True: 0, False: 0]
  ------------------
 1915|      0|      return Curl_setstropt(data, STRING_SSL_CRLFILE, ptr);
 1916|      0|    return CURLE_NOT_BUILT_IN;
 1917|      0|  case CURLOPT_SSL_CIPHER_LIST:
  ------------------
  |  Branch (1917:3): [True: 0, False: 7.61k]
  ------------------
 1918|      0|    if(Curl_ssl_supports(data, SSLSUPP_CIPHER_LIST))
  ------------------
  |  |   44|      0|#define SSLSUPP_CIPHER_LIST  (1 << 9) /* supports TLS 1.0-1.2 ciphersuites */
  ------------------
  |  Branch (1918:8): [True: 0, False: 0]
  ------------------
 1919|       |      /* set a list of cipher we want to use in the SSL connection */
 1920|      0|      return Curl_setstropt(data, STRING_SSL_CIPHER_LIST, ptr);
 1921|      0|    else
 1922|      0|      return CURLE_NOT_BUILT_IN;
 1923|      0|  case CURLOPT_TLS13_CIPHERS:
  ------------------
  |  Branch (1923:3): [True: 0, False: 7.61k]
  ------------------
 1924|      0|    if(Curl_ssl_supports(data, SSLSUPP_TLS13_CIPHERSUITES))
  ------------------
  |  |   40|      0|#define SSLSUPP_TLS13_CIPHERSUITES (1 << 5) /* supports TLS 1.3 ciphersuites */
  ------------------
  |  Branch (1924:8): [True: 0, False: 0]
  ------------------
 1925|       |      /* set preferred list of TLS 1.3 cipher suites */
 1926|      0|      return Curl_setstropt(data, STRING_SSL_CIPHER13_LIST, ptr);
 1927|      0|    else
 1928|      0|      return CURLE_NOT_BUILT_IN;
 1929|      0|  case CURLOPT_RANDOM_FILE:
  ------------------
  |  Branch (1929:3): [True: 0, False: 7.61k]
  ------------------
 1930|      0|    break;
 1931|      0|  case CURLOPT_EGDSOCKET:
  ------------------
  |  Branch (1931:3): [True: 0, False: 7.61k]
  ------------------
 1932|      0|    break;
 1933|      0|  case CURLOPT_SSL_CTX_DATA:
  ------------------
  |  Branch (1933:3): [True: 0, False: 7.61k]
  ------------------
 1934|       |    /*
 1935|       |     * Set an SSL_CTX callback parameter pointer
 1936|       |     */
 1937|      0|    if(Curl_ssl_supports(data, SSLSUPP_SSL_CTX)) {
  ------------------
  |  |   38|      0|#define SSLSUPP_SSL_CTX      (1 << 3) /* supports CURLOPT_SSL_CTX */
  ------------------
  |  Branch (1937:8): [True: 0, False: 0]
  ------------------
 1938|      0|      data->set.ssl.fsslctxp = ptr;
 1939|      0|      break;
 1940|      0|    }
 1941|      0|    else
 1942|      0|      return CURLE_NOT_BUILT_IN;
 1943|      0|  case CURLOPT_SSLCERT:
  ------------------
  |  Branch (1943:3): [True: 0, False: 7.61k]
  ------------------
 1944|       |    /*
 1945|       |     * String that holds filename of the SSL certificate to use
 1946|       |     */
 1947|      0|    return Curl_setstropt(data, STRING_CERT, ptr);
 1948|      0|  case CURLOPT_SSLCERTTYPE:
  ------------------
  |  Branch (1948:3): [True: 0, False: 7.61k]
  ------------------
 1949|       |    /*
 1950|       |     * String that holds file type of the SSL certificate to use
 1951|       |     */
 1952|      0|    return Curl_setstropt(data, STRING_CERT_TYPE, ptr);
 1953|      0|  case CURLOPT_SSLKEY:
  ------------------
  |  Branch (1953:3): [True: 0, False: 7.61k]
  ------------------
 1954|       |    /*
 1955|       |     * String that holds filename of the SSL key to use
 1956|       |     */
 1957|      0|    return Curl_setstropt(data, STRING_KEY, ptr);
 1958|      0|  case CURLOPT_SSLKEYTYPE:
  ------------------
  |  Branch (1958:3): [True: 0, False: 7.61k]
  ------------------
 1959|       |    /*
 1960|       |     * String that holds file type of the SSL key to use
 1961|       |     */
 1962|      0|    return Curl_setstropt(data, STRING_KEY_TYPE, ptr);
 1963|      0|  case CURLOPT_SSLENGINE:
  ------------------
  |  Branch (1963:3): [True: 0, False: 7.61k]
  ------------------
 1964|       |    /*
 1965|       |     * String that holds the SSL crypto engine.
 1966|       |     */
 1967|      0|    if(ptr && ptr[0]) {
  ------------------
  |  Branch (1967:8): [True: 0, False: 0]
  |  Branch (1967:15): [True: 0, False: 0]
  ------------------
 1968|      0|      result = Curl_setstropt(data, STRING_SSL_ENGINE, ptr);
 1969|      0|      if(!result) {
  ------------------
  |  Branch (1969:10): [True: 0, False: 0]
  ------------------
 1970|      0|        result = Curl_ssl_set_engine(data, ptr);
 1971|      0|      }
 1972|      0|    }
 1973|      0|    break;
 1974|      0|  case CURLOPT_ISSUERCERT:
  ------------------
  |  Branch (1974:3): [True: 0, False: 7.61k]
  ------------------
 1975|       |    /*
 1976|       |     * Set Issuer certificate file
 1977|       |     * to check certificates issuer
 1978|       |     */
 1979|      0|    if(Curl_ssl_supports(data, SSLSUPP_ISSUERCERT))
  ------------------
  |  |   46|      0|#define SSLSUPP_ISSUERCERT   (1 << 11) /* supports CURLOPT_ISSUERCERT */
  ------------------
  |  Branch (1979:8): [True: 0, False: 0]
  ------------------
 1980|      0|      return Curl_setstropt(data, STRING_SSL_ISSUERCERT, ptr);
 1981|      0|    return CURLE_NOT_BUILT_IN;
 1982|      0|  case CURLOPT_SSL_EC_CURVES:
  ------------------
  |  Branch (1982:3): [True: 0, False: 7.61k]
  ------------------
 1983|       |    /*
 1984|       |     * Set accepted curves in SSL connection setup.
 1985|       |     * Specify colon-delimited list of curve algorithm names.
 1986|       |     */
 1987|      0|    if(Curl_ssl_supports(data, SSLSUPP_SSL_EC_CURVES))
  ------------------
  |  |   47|      0|#define SSLSUPP_SSL_EC_CURVES (1 << 12) /* supports CURLOPT_SSL_EC_CURVES */
  ------------------
  |  Branch (1987:8): [True: 0, False: 0]
  ------------------
 1988|      0|      return Curl_setstropt(data, STRING_SSL_EC_CURVES, ptr);
 1989|      0|    return CURLE_NOT_BUILT_IN;
 1990|      0|  case CURLOPT_SSL_SIGNATURE_ALGORITHMS:
  ------------------
  |  Branch (1990:3): [True: 0, False: 7.61k]
  ------------------
 1991|       |    /*
 1992|       |     * Set accepted signature algorithms.
 1993|       |     * Specify colon-delimited list of signature scheme names.
 1994|       |     */
 1995|      0|    if(Curl_ssl_supports(data, SSLSUPP_SIGNATURE_ALGORITHMS))
  ------------------
  |  |   45|      0|#define SSLSUPP_SIGNATURE_ALGORITHMS (1 << 10) /* supports TLS sigalgs */
  ------------------
  |  Branch (1995:8): [True: 0, False: 0]
  ------------------
 1996|      0|      return Curl_setstropt(data, STRING_SSL_SIGNATURE_ALGORITHMS, ptr);
 1997|      0|    return CURLE_NOT_BUILT_IN;
 1998|      0|  case CURLOPT_PINNEDPUBLICKEY:
  ------------------
  |  Branch (1998:3): [True: 0, False: 7.61k]
  ------------------
 1999|       |    /*
 2000|       |     * Set pinned public key for SSL connection.
 2001|       |     * Specify filename of the public key in DER format.
 2002|       |     */
 2003|      0|    if(Curl_ssl_supports(data, SSLSUPP_PINNEDPUBKEY))
  ------------------
  |  |   37|      0|#define SSLSUPP_PINNEDPUBKEY (1 << 2) /* supports CURLOPT_PINNEDPUBLICKEY */
  ------------------
  |  Branch (2003:8): [True: 0, False: 0]
  ------------------
 2004|      0|      return Curl_setstropt(data, STRING_SSL_PINNEDPUBLICKEY, ptr);
 2005|      0|    return CURLE_NOT_BUILT_IN;
 2006|      0|  case CURLOPT_ECH:
  ------------------
  |  Branch (2006:3): [True: 0, False: 7.61k]
  ------------------
 2007|      0|    return setopt_ech(data, ptr);
  ------------------
  |  | 1872|      0|#define setopt_ech(x, y) CURLE_NOT_BUILT_IN
  ------------------
 2008|      0|#endif
 2009|  7.61k|  default:
  ------------------
  |  Branch (2009:3): [True: 7.61k, False: 0]
  ------------------
 2010|  7.61k|    return CURLE_UNKNOWN_OPTION;
 2011|  7.61k|  }
 2012|      0|  return result;
 2013|  7.61k|}
setopt.c:setopt_cptr_proxy:
 1610|  7.61k|{
 1611|  7.61k|  CURLcode result = CURLE_OK;
 1612|  7.61k|  struct UserDefined *s = &data->set;
 1613|  7.61k|  switch(option) {
 1614|      0|  case CURLOPT_PROXYUSERPWD: {
  ------------------
  |  Branch (1614:3): [True: 0, False: 7.61k]
  ------------------
 1615|       |    /*
 1616|       |     * user:password needed to use the proxy
 1617|       |     */
 1618|      0|    char *u = NULL;
 1619|      0|    char *p = NULL;
 1620|      0|    result = setstropt_userpwd(ptr, &u, &p);
 1621|       |
 1622|       |    /* URL decode the components */
 1623|      0|    if(!result) {
  ------------------
  |  Branch (1623:8): [True: 0, False: 0]
  ------------------
 1624|      0|      char *str = NULL;
 1625|      0|      CURL_EASY_STR_CLEAR(data, STRING_PROXYUSERNAME);
  ------------------
  |  | 1234|      0|  Curl_u8_strset_unset(&(d)->set.strings, (uint8_t)(id))
  ------------------
 1626|      0|      CURL_EASY_STR_CLEAR(data, STRING_PROXYPASSWORD);
  ------------------
  |  | 1234|      0|  Curl_u8_strset_unset(&(d)->set.strings, (uint8_t)(id))
  ------------------
 1627|      0|      if(u) {
  ------------------
  |  Branch (1627:10): [True: 0, False: 0]
  ------------------
 1628|      0|        result = Curl_urldecode(u, 0, &str, NULL, REJECT_ZERO);
 1629|      0|        if(!result)
  ------------------
  |  Branch (1629:12): [True: 0, False: 0]
  ------------------
 1630|      0|          result = Curl_u8_strset_setn(&s->strings, STRING_PROXYUSERNAME, str);
 1631|      0|      }
 1632|      0|      if(!result && p) {
  ------------------
  |  Branch (1632:10): [True: 0, False: 0]
  |  Branch (1632:21): [True: 0, False: 0]
  ------------------
 1633|      0|        str = NULL;
 1634|      0|        result = Curl_urldecode(p, 0, &str, NULL, REJECT_ZERO);
 1635|      0|        if(!result)
  ------------------
  |  Branch (1635:12): [True: 0, False: 0]
  ------------------
 1636|      0|          result = Curl_u8_strset_setn(&s->strings, STRING_PROXYPASSWORD, str);
 1637|      0|      }
 1638|      0|    }
 1639|      0|    curlx_free(u);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1640|      0|    curlx_strzero(p);
 1641|      0|    curlx_free(p);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1642|      0|    break;
 1643|      0|  }
 1644|      0|  case CURLOPT_PROXYUSERNAME:
  ------------------
  |  Branch (1644:3): [True: 0, False: 7.61k]
  ------------------
 1645|       |    /*
 1646|       |     * authentication username to use in the operation
 1647|       |     */
 1648|      0|    return Curl_setstropt(data, STRING_PROXYUSERNAME, ptr);
 1649|       |
 1650|      0|  case CURLOPT_PROXYPASSWORD:
  ------------------
  |  Branch (1650:3): [True: 0, False: 7.61k]
  ------------------
 1651|       |    /*
 1652|       |     * authentication password to use in the operation
 1653|       |     */
 1654|      0|    return Curl_setstropt(data, STRING_PROXYPASSWORD, ptr);
 1655|       |
 1656|      0|  case CURLOPT_NOPROXY:
  ------------------
  |  Branch (1656:3): [True: 0, False: 7.61k]
  ------------------
 1657|       |    /*
 1658|       |     * proxy exception list
 1659|       |     */
 1660|      0|    return Curl_setstropt(data, STRING_NOPROXY, ptr);
 1661|      0|  case CURLOPT_PROXY_SSLCERT:
  ------------------
  |  Branch (1661:3): [True: 0, False: 7.61k]
  ------------------
 1662|       |    /*
 1663|       |     * String that holds filename of the SSL certificate to use for proxy
 1664|       |     */
 1665|      0|    return Curl_setstropt(data, STRING_CERT_PROXY, ptr);
 1666|      0|  case CURLOPT_PROXY_SSLCERTTYPE:
  ------------------
  |  Branch (1666:3): [True: 0, False: 7.61k]
  ------------------
 1667|       |    /*
 1668|       |     * String that holds file type of the SSL certificate to use for proxy
 1669|       |     */
 1670|      0|    return Curl_setstropt(data, STRING_CERT_TYPE_PROXY, ptr);
 1671|      0|  case CURLOPT_PROXY_SSLKEY:
  ------------------
  |  Branch (1671:3): [True: 0, False: 7.61k]
  ------------------
 1672|       |    /*
 1673|       |     * String that holds filename of the SSL key to use for proxy
 1674|       |     */
 1675|      0|    return Curl_setstropt(data, STRING_KEY_PROXY, ptr);
 1676|      0|  case CURLOPT_PROXY_KEYPASSWD:
  ------------------
  |  Branch (1676:3): [True: 0, False: 7.61k]
  ------------------
 1677|       |    /*
 1678|       |     * String that holds the SSL private key password for proxy.
 1679|       |     */
 1680|      0|    return Curl_setstropt(data, STRING_KEY_PASSWD_PROXY, ptr);
 1681|      0|  case CURLOPT_PROXY_SSLKEYTYPE:
  ------------------
  |  Branch (1681:3): [True: 0, False: 7.61k]
  ------------------
 1682|       |    /*
 1683|       |     * String that holds file type of the SSL key to use for proxy
 1684|       |     */
 1685|      0|    return Curl_setstropt(data, STRING_KEY_TYPE_PROXY, ptr);
 1686|      0|  case CURLOPT_PROXY_SSL_CIPHER_LIST:
  ------------------
  |  Branch (1686:3): [True: 0, False: 7.61k]
  ------------------
 1687|      0|    if(Curl_ssl_supports(data, SSLSUPP_CIPHER_LIST)) {
  ------------------
  |  |   44|      0|#define SSLSUPP_CIPHER_LIST  (1 << 9) /* supports TLS 1.0-1.2 ciphersuites */
  ------------------
  |  Branch (1687:8): [True: 0, False: 0]
  ------------------
 1688|       |      /* set a list of cipher we want to use in the SSL connection for proxy */
 1689|      0|      return Curl_setstropt(data, STRING_SSL_CIPHER_LIST_PROXY, ptr);
 1690|      0|    }
 1691|      0|    else
 1692|      0|      return CURLE_NOT_BUILT_IN;
 1693|      0|  case CURLOPT_PROXY_TLS13_CIPHERS:
  ------------------
  |  Branch (1693:3): [True: 0, False: 7.61k]
  ------------------
 1694|      0|    if(Curl_ssl_supports(data, SSLSUPP_TLS13_CIPHERSUITES))
  ------------------
  |  |   40|      0|#define SSLSUPP_TLS13_CIPHERSUITES (1 << 5) /* supports TLS 1.3 ciphersuites */
  ------------------
  |  Branch (1694:8): [True: 0, False: 0]
  ------------------
 1695|       |      /* set preferred list of TLS 1.3 cipher suites for proxy */
 1696|      0|      return Curl_setstropt(data, STRING_SSL_CIPHER13_LIST_PROXY, ptr);
 1697|      0|    else
 1698|      0|      return CURLE_NOT_BUILT_IN;
 1699|  2.53k|  case CURLOPT_PROXY:
  ------------------
  |  Branch (1699:3): [True: 2.53k, False: 5.07k]
  ------------------
 1700|       |    /*
 1701|       |     * Set proxy server:port to use as proxy.
 1702|       |     *
 1703|       |     * If the proxy is set to "" (and CURLOPT_PRE_PROXY is set to "" or NULL)
 1704|       |     * we explicitly say that we do not want to use a proxy (even though there
 1705|       |     * might be environment variables saying so).
 1706|       |     *
 1707|       |     * Setting it to NULL, means no proxy but allows the environment variables
 1708|       |     * to decide for us (if CURLOPT_PRE_PROXY setting it to NULL).
 1709|       |     */
 1710|  2.53k|    return setproxy(data, ptr);
 1711|      0|  case CURLOPT_PRE_PROXY:
  ------------------
  |  Branch (1711:3): [True: 0, False: 7.61k]
  ------------------
 1712|       |    /*
 1713|       |     * Set proxy server:port to use as SOCKS proxy.
 1714|       |     *
 1715|       |     * If the proxy is set to "" or NULL we explicitly say that we do not want
 1716|       |     * to use the socks proxy.
 1717|       |     */
 1718|      0|    return Curl_setstropt(data, STRING_PRE_PROXY, ptr);
 1719|      0|  case CURLOPT_SOCKS5_GSSAPI_SERVICE:
  ------------------
  |  Branch (1719:3): [True: 0, False: 7.61k]
  ------------------
 1720|      0|  case CURLOPT_PROXY_SERVICE_NAME:
  ------------------
  |  Branch (1720:3): [True: 0, False: 7.61k]
  ------------------
 1721|       |    /*
 1722|       |     * Set proxy authentication service name for Kerberos 5 and SPNEGO
 1723|       |     */
 1724|      0|    return Curl_setstropt(data, STRING_PROXY_SERVICE_NAME, ptr);
 1725|      0|  case CURLOPT_PROXY_PINNEDPUBLICKEY:
  ------------------
  |  Branch (1725:3): [True: 0, False: 7.61k]
  ------------------
 1726|       |    /*
 1727|       |     * Set pinned public key for SSL connection.
 1728|       |     * Specify filename of the public key in DER format.
 1729|       |     */
 1730|      0|#ifdef USE_SSL
 1731|      0|    if(Curl_ssl_supports(data, SSLSUPP_PINNEDPUBKEY))
  ------------------
  |  |   37|      0|#define SSLSUPP_PINNEDPUBKEY (1 << 2) /* supports CURLOPT_PINNEDPUBLICKEY */
  ------------------
  |  Branch (1731:8): [True: 0, False: 0]
  ------------------
 1732|      0|      return Curl_setstropt(data, STRING_SSL_PINNEDPUBLICKEY_PROXY, ptr);
 1733|      0|#endif
 1734|      0|    return CURLE_NOT_BUILT_IN;
 1735|       |
 1736|      0|  case CURLOPT_HAPROXY_CLIENT_IP:
  ------------------
  |  Branch (1736:3): [True: 0, False: 7.61k]
  ------------------
 1737|       |    /*
 1738|       |     * Set the client IP to send through HAProxy PROXY protocol
 1739|       |     */
 1740|      0|    result = Curl_setstropt(data, STRING_HAPROXY_CLIENT_IP, ptr);
 1741|       |
 1742|       |    /* enable the HAProxy protocol if an IP is provided */
 1743|      0|    s->haproxyprotocol = !!CURL_EASY_STR(data, STRING_HAPROXY_CLIENT_IP);
  ------------------
  |  | 1228|      0|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
 1744|      0|    break;
 1745|      0|  case CURLOPT_PROXY_CAINFO:
  ------------------
  |  Branch (1745:3): [True: 0, False: 7.61k]
  ------------------
 1746|       |    /*
 1747|       |     * Set CA info SSL connection for proxy. Specify filename of the
 1748|       |     * CA certificate
 1749|       |     */
 1750|      0|    result = Curl_setstropt(data, STRING_SSL_CAFILE_PROXY, ptr);
 1751|      0|    s->proxy_ssl.custom_cafile =
 1752|      0|      !!CURL_EASY_STR(data, STRING_SSL_CAFILE_PROXY);
  ------------------
  |  | 1228|      0|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
 1753|      0|    return result;
 1754|      0|  case CURLOPT_PROXY_CRLFILE:
  ------------------
  |  Branch (1754:3): [True: 0, False: 7.61k]
  ------------------
 1755|       |    /*
 1756|       |     * Set CRL file info for SSL connection for proxy. Specify filename of the
 1757|       |     * CRL to check certificates revocation
 1758|       |     */
 1759|      0|    if(Curl_ssl_supports(data, SSLSUPP_CRLFILE))
  ------------------
  |  |   48|      0|#define SSLSUPP_CRLFILE      (1 << 13) /* supports CURLOPT_CRLFILE */
  ------------------
  |  Branch (1759:8): [True: 0, False: 0]
  ------------------
 1760|      0|      return Curl_setstropt(data, STRING_SSL_CRLFILE_PROXY, ptr);
 1761|      0|    return CURLE_NOT_BUILT_IN;
 1762|      0|  case CURLOPT_PROXY_ISSUERCERT:
  ------------------
  |  Branch (1762:3): [True: 0, False: 7.61k]
  ------------------
 1763|       |    /*
 1764|       |     * Set Issuer certificate file to check certificates issuer
 1765|       |     */
 1766|      0|    if(Curl_ssl_supports(data, SSLSUPP_ISSUERCERT))
  ------------------
  |  |   46|      0|#define SSLSUPP_ISSUERCERT   (1 << 11) /* supports CURLOPT_ISSUERCERT */
  ------------------
  |  Branch (1766:8): [True: 0, False: 0]
  ------------------
 1767|      0|      return Curl_setstropt(data, STRING_SSL_ISSUERCERT_PROXY, ptr);
 1768|      0|    return CURLE_NOT_BUILT_IN;
 1769|      0|  case CURLOPT_PROXY_CAPATH:
  ------------------
  |  Branch (1769:3): [True: 0, False: 7.61k]
  ------------------
 1770|       |    /*
 1771|       |     * Set CA path info for SSL connection proxy. Specify directory name of the
 1772|       |     * CA certificates which have been prepared using openssl c_rehash utility.
 1773|       |     */
 1774|      0|#ifdef USE_SSL
 1775|      0|    if(Curl_ssl_supports(data, SSLSUPP_CA_PATH)) {
  ------------------
  |  |   35|      0|#define SSLSUPP_CA_PATH      (1 << 0) /* supports CAPATH */
  ------------------
  |  Branch (1775:8): [True: 0, False: 0]
  ------------------
 1776|       |      /* This does not work on Windows. */
 1777|      0|      result = Curl_setstropt(data, STRING_SSL_CAPATH_PROXY, ptr);
 1778|      0|      s->proxy_ssl.custom_capath =
 1779|      0|        !!CURL_EASY_STR(data, STRING_SSL_CAPATH_PROXY);
  ------------------
  |  | 1228|      0|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
 1780|      0|      return result;
 1781|      0|    }
 1782|      0|#endif
 1783|      0|    return CURLE_NOT_BUILT_IN;
 1784|  5.07k|  default:
  ------------------
  |  Branch (1784:3): [True: 5.07k, False: 2.53k]
  ------------------
 1785|  5.07k|    return CURLE_UNKNOWN_OPTION;
 1786|  7.61k|  }
 1787|      0|  return result;
 1788|  7.61k|}
setopt.c:setproxy:
 1597|  2.53k|{
 1598|  2.53k|  const char *str = CURL_EASY_STR(data, STRING_PROXY);
  ------------------
  |  | 1228|  2.53k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
 1599|  2.53k|  if(str && proxy &&
  ------------------
  |  Branch (1599:6): [True: 0, False: 2.53k]
  |  Branch (1599:13): [True: 0, False: 0]
  ------------------
 1600|       |     /* there was one set, is this a new one? */
 1601|      0|     !strcmp(str, proxy))
  ------------------
  |  Branch (1601:6): [True: 0, False: 0]
  ------------------
 1602|      0|    return CURLE_OK; /* same one as before */
 1603|       |
 1604|  2.53k|  changeproxy(data);
 1605|  2.53k|  return Curl_setstropt(data, STRING_PROXY, proxy);
 1606|  2.53k|}
setopt.c:setopt_cptr_net:
 2239|  5.07k|{
 2240|  5.07k|  switch(option) {
 2241|      0|  case CURLOPT_INTERFACE:
  ------------------
  |  Branch (2241:3): [True: 0, False: 5.07k]
  ------------------
 2242|       |    /*
 2243|       |     * Set what interface or address/hostname to bind the socket to when
 2244|       |     * performing an operation and thus what from-IP your connection will use.
 2245|       |     */
 2246|      0|    return setstropt_interface(data, ptr);
 2247|       |
 2248|       |#ifdef USE_RESOLV_ARES
 2249|       |  case CURLOPT_DNS_SERVERS:
 2250|       |    return Curl_setstropt(data, STRING_DNS_SERVERS, ptr);
 2251|       |
 2252|       |  case CURLOPT_DNS_INTERFACE:
 2253|       |    return Curl_setstropt(data, STRING_DNS_INTERFACE, ptr);
 2254|       |
 2255|       |  case CURLOPT_DNS_LOCAL_IP4:
 2256|       |    return Curl_setstropt(data, STRING_DNS_LOCAL_IP4, ptr);
 2257|       |
 2258|       |  case CURLOPT_DNS_LOCAL_IP6:
 2259|       |    return Curl_setstropt(data, STRING_DNS_LOCAL_IP6, ptr);
 2260|       |#endif
 2261|      0|#ifdef USE_UNIX_SOCKETS
 2262|      0|  case CURLOPT_UNIX_SOCKET_PATH:
  ------------------
  |  Branch (2262:3): [True: 0, False: 5.07k]
  ------------------
 2263|      0|    data->set.abstract_unix_socket = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 2264|      0|    return Curl_setstropt(data, STRING_UNIX_SOCKET_PATH, ptr);
 2265|       |
 2266|      0|  case CURLOPT_ABSTRACT_UNIX_SOCKET:
  ------------------
  |  Branch (2266:3): [True: 0, False: 5.07k]
  ------------------
 2267|      0|    data->set.abstract_unix_socket = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 2268|      0|    return Curl_setstropt(data, STRING_UNIX_SOCKET_PATH, ptr);
 2269|      0|#endif
 2270|      0|#ifndef CURL_DISABLE_DOH
 2271|      0|  case CURLOPT_DOH_URL:
  ------------------
  |  Branch (2271:3): [True: 0, False: 5.07k]
  ------------------
 2272|      0|    {
 2273|      0|      CURLcode result = Curl_setstropt(data, STRING_DOH, ptr);
 2274|      0|      data->set.doh = !!CURL_EASY_STR(data, STRING_DOH);
  ------------------
  |  | 1228|      0|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
 2275|      0|      return result;
 2276|      0|    }
 2277|      0|#endif
 2278|  5.07k|  default:
  ------------------
  |  Branch (2278:3): [True: 5.07k, False: 0]
  ------------------
 2279|  5.07k|    return CURLE_UNKNOWN_OPTION;
 2280|  5.07k|  }
 2281|  5.07k|}
setopt.c:setopt_cptr_ftp:
 2204|  5.07k|{
 2205|  5.07k|  CURLcode result = CURLE_OK;
 2206|  5.07k|  struct UserDefined *s = &data->set;
 2207|  5.07k|  switch(option) {
 2208|      0|  case CURLOPT_FTPPORT:
  ------------------
  |  Branch (2208:3): [True: 0, False: 5.07k]
  ------------------
 2209|       |    /*
 2210|       |     * Use FTP PORT, this also specifies which IP address to use
 2211|       |     */
 2212|      0|    result = Curl_setstropt(data, STRING_FTPPORT, ptr);
 2213|      0|    s->ftp_use_port = !!CURL_EASY_STR(data, STRING_FTPPORT);
  ------------------
  |  | 1228|      0|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
 2214|      0|    break;
 2215|       |
 2216|      0|  case CURLOPT_FTP_ACCOUNT:
  ------------------
  |  Branch (2216:3): [True: 0, False: 5.07k]
  ------------------
 2217|      0|    return Curl_setstropt(data, STRING_FTP_ACCOUNT, ptr);
 2218|       |
 2219|      0|  case CURLOPT_FTP_ALTERNATIVE_TO_USER:
  ------------------
  |  Branch (2219:3): [True: 0, False: 5.07k]
  ------------------
 2220|      0|    return Curl_setstropt(data, STRING_FTP_ALTERNATIVE_TO_USER, ptr);
 2221|       |
 2222|      0|  case CURLOPT_KRBLEVEL:
  ------------------
  |  Branch (2222:3): [True: 0, False: 5.07k]
  ------------------
 2223|      0|    return CURLE_NOT_BUILT_IN; /* removed in 8.17.0 */
 2224|      0|  case CURLOPT_CHUNK_DATA:
  ------------------
  |  Branch (2224:3): [True: 0, False: 5.07k]
  ------------------
 2225|      0|    s->wildcardptr = ptr;
 2226|      0|    break;
 2227|      0|  case CURLOPT_FNMATCH_DATA:
  ------------------
  |  Branch (2227:3): [True: 0, False: 5.07k]
  ------------------
 2228|      0|    s->fnmatch_data = ptr;
 2229|      0|    break;
 2230|  5.07k|  default:
  ------------------
  |  Branch (2230:3): [True: 5.07k, False: 0]
  ------------------
 2231|  5.07k|    return CURLE_UNKNOWN_OPTION;
 2232|  5.07k|  }
 2233|      0|  return result;
 2234|  5.07k|}
setopt.c:setopt_cptr_http_mqtt:
 2019|  5.07k|{
 2020|  5.07k|  CURLcode result = CURLE_OK;
 2021|  5.07k|  struct UserDefined *s = &data->set;
 2022|       |
 2023|  5.07k|  switch(option) {
 2024|      0|  case CURLOPT_COPYPOSTFIELDS:
  ------------------
  |  Branch (2024:3): [True: 0, False: 5.07k]
  ------------------
 2025|      0|    return setopt_copypostfields(ptr, s);
 2026|       |
 2027|      0|  case CURLOPT_POSTFIELDS:
  ------------------
  |  Branch (2027:3): [True: 0, False: 5.07k]
  ------------------
 2028|       |    /*
 2029|       |     * Like above, but use static data instead of copying it.
 2030|       |     */
 2031|      0|    s->postfields = ptr;
 2032|       |    /* Release old copied data. */
 2033|      0|    curlx_safefree(s->str_copypostfields);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2034|      0|    s->method = HTTPREQ_POST;
 2035|      0|    break;
 2036|       |
 2037|      0|#ifndef CURL_DISABLE_HTTP
 2038|      0|  case CURLOPT_TRAILERDATA:
  ------------------
  |  Branch (2038:3): [True: 0, False: 5.07k]
  ------------------
 2039|      0|    s->trailer_data = ptr;
 2040|      0|    break;
 2041|      0|  case CURLOPT_ACCEPT_ENCODING:
  ------------------
  |  Branch (2041:3): [True: 0, False: 5.07k]
  ------------------
 2042|       |    /*
 2043|       |     * String to use at the value of Accept-Encoding header.
 2044|       |     *
 2045|       |     * If the encoding is set to "" we use an Accept-Encoding header that
 2046|       |     * encompasses all the encodings we support.
 2047|       |     * If the encoding is set to NULL we do not send an Accept-Encoding header
 2048|       |     * and ignore any received Content-Encoding header.
 2049|       |     *
 2050|       |     */
 2051|      0|    if(ptr && !*ptr) {
  ------------------
  |  Branch (2051:8): [True: 0, False: 0]
  |  Branch (2051:15): [True: 0, False: 0]
  ------------------
 2052|      0|      ptr = Curl_get_content_encodings();
 2053|      0|      if(ptr)
  ------------------
  |  Branch (2053:10): [True: 0, False: 0]
  ------------------
 2054|      0|        result = CURL_EASY_STR_SETN(data, STRING_ENCODING, ptr);
  ------------------
  |  | 1232|      0|  Curl_u8_strset_setn(&(d)->set.strings, (uint8_t)(id), (s))
  ------------------
 2055|      0|      else
 2056|      0|        result = CURLE_OUT_OF_MEMORY;
 2057|      0|      return result;
 2058|      0|    }
 2059|      0|    return Curl_setstropt(data, STRING_ENCODING, ptr);
 2060|       |
 2061|      0|#ifndef CURL_DISABLE_AWS
 2062|      0|  case CURLOPT_AWS_SIGV4:
  ------------------
  |  Branch (2062:3): [True: 0, False: 5.07k]
  ------------------
 2063|       |    /*
 2064|       |     * String that is merged to some authentication
 2065|       |     * parameters are used by the algorithm.
 2066|       |     */
 2067|      0|    result = Curl_setstropt(data, STRING_AWS_SIGV4, ptr);
 2068|       |    /*
 2069|       |     * Basic has been set by default; it needs to be unset here.
 2070|       |     */
 2071|      0|    if(CURL_EASY_STR(data, STRING_AWS_SIGV4))
  ------------------
  |  | 1228|      0|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  |  |  ------------------
  |  |  |  Branch (1228:3): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2072|      0|      s->httpauth = CURLAUTH_AWS_SIGV4;
  ------------------
  |  |  847|      0|#define CURLAUTH_AWS_SIGV4    (((unsigned long)1) << 7)
  ------------------
 2073|      0|    else
 2074|      0|      s->httpauth &= ~(uint32_t)CURLAUTH_AWS_SIGV4;
  ------------------
  |  |  847|      0|#define CURLAUTH_AWS_SIGV4    (((unsigned long)1) << 7)
  ------------------
 2075|      0|    break;
 2076|      0|#endif
 2077|       |#ifndef CURL_DISABLE_HTTPSIG
 2078|       |  case CURLOPT_HTTPSIG_KEY:
 2079|       |    result = Curl_setstropt(data, STRING_HTTPSIG_KEY, ptr);
 2080|       |    break;
 2081|       |  case CURLOPT_HTTPSIG_KEYID:
 2082|       |    result = Curl_setstropt(data, STRING_HTTPSIG_KEYID, ptr);
 2083|       |    break;
 2084|       |  case CURLOPT_HTTPSIG_HEADERS:
 2085|       |    result = Curl_setstropt(data, STRING_HTTPSIG_HEADERS, ptr);
 2086|       |    break;
 2087|       |#endif
 2088|      0|  case CURLOPT_REFERER: {
  ------------------
  |  Branch (2088:3): [True: 0, False: 5.07k]
  ------------------
 2089|       |    /*
 2090|       |     * String to set in the HTTP Referer: field.
 2091|       |     */
 2092|      0|    struct bufref *oldref = &data->state.referer;
 2093|       |    /* free the old after the storing the new in case the input is actually
 2094|       |       pointing back to this */
 2095|      0|    result = Curl_setstropt(data, STRING_SET_REFERER, ptr);
 2096|      0|    Curl_bufref_free(oldref);
 2097|      0|    break;
 2098|      0|  }
 2099|       |
 2100|      0|  case CURLOPT_USERAGENT:
  ------------------
  |  Branch (2100:3): [True: 0, False: 5.07k]
  ------------------
 2101|       |    /*
 2102|       |     * String to use in the HTTP User-Agent field
 2103|       |     */
 2104|      0|    return Curl_setstropt(data, STRING_USERAGENT, ptr);
 2105|       |
 2106|      0|#ifndef CURL_DISABLE_COOKIES
 2107|      0|  case CURLOPT_COOKIE:
  ------------------
  |  Branch (2107:3): [True: 0, False: 5.07k]
  ------------------
 2108|       |    /*
 2109|       |     * Cookie string to send to the remote server in the request.
 2110|       |     */
 2111|      0|    return Curl_setstropt(data, STRING_COOKIE, ptr);
 2112|       |
 2113|  2.53k|  case CURLOPT_COOKIEFILE:
  ------------------
  |  Branch (2113:3): [True: 2.53k, False: 2.53k]
  ------------------
 2114|  2.53k|    return cookiefile(data, ptr);
 2115|       |
 2116|  2.53k|  case CURLOPT_COOKIEJAR:
  ------------------
  |  Branch (2116:3): [True: 2.53k, False: 2.53k]
  ------------------
 2117|       |    /*
 2118|       |     * Set cookie filename to dump all cookies to when we are done.
 2119|       |     */
 2120|  2.53k|    result = Curl_setstropt(data, STRING_COOKIEJAR, ptr);
 2121|  2.53k|    if(!result) {
  ------------------
  |  Branch (2121:8): [True: 2.53k, False: 0]
  ------------------
 2122|       |      /*
 2123|       |       * Activate the cookie parser. This may or may not already
 2124|       |       * have been made.
 2125|       |       */
 2126|  2.53k|      if(!data->cookies)
  ------------------
  |  Branch (2126:10): [True: 2.53k, False: 0]
  ------------------
 2127|  2.53k|        data->cookies = Curl_cookie_init();
 2128|  2.53k|      if(!data->cookies)
  ------------------
  |  Branch (2128:10): [True: 0, False: 2.53k]
  ------------------
 2129|      0|        result = CURLE_OUT_OF_MEMORY;
 2130|  2.53k|      else
 2131|  2.53k|        data->state.cookie_engine = TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
 2132|  2.53k|    }
 2133|  2.53k|    break;
 2134|       |
 2135|      0|  case CURLOPT_COOKIELIST:
  ------------------
  |  Branch (2135:3): [True: 0, False: 5.07k]
  ------------------
 2136|      0|    return cookielist(data, ptr);
 2137|      0|#endif /* !CURL_DISABLE_COOKIES */
 2138|       |
 2139|      0|#endif /* !CURL_DISABLE_HTTP */
 2140|      0|  default:
  ------------------
  |  Branch (2140:3): [True: 0, False: 5.07k]
  ------------------
 2141|      0|    return CURLE_UNKNOWN_OPTION;
 2142|  5.07k|  }
 2143|  2.53k|  return result;
 2144|  5.07k|}
setopt.c:cookiefile:
 1558|  2.53k|{
 1559|       |  /*
 1560|       |   * Set cookie file to read and parse. Can be used multiple times.
 1561|       |   */
 1562|  2.53k|  if(ptr) {
  ------------------
  |  Branch (1562:6): [True: 2.53k, False: 0]
  ------------------
 1563|  2.53k|    struct curl_slist *cl;
 1564|       |    /* general protection against mistakes and abuse */
 1565|  2.53k|    if(strlen(ptr) > CURL_MAX_INPUT_LENGTH)
  ------------------
  |  |   45|  2.53k|#define CURL_MAX_INPUT_LENGTH 8000000
  ------------------
  |  Branch (1565:8): [True: 0, False: 2.53k]
  ------------------
 1566|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
 1567|       |    /* append the cookie filename to the list of filenames, and deal with
 1568|       |       them later */
 1569|  2.53k|    cl = curl_slist_append(data->state.cookielist, ptr);
 1570|  2.53k|    if(!cl) {
  ------------------
  |  Branch (1570:8): [True: 0, False: 2.53k]
  ------------------
 1571|      0|      curl_slist_free_all(data->state.cookielist);
 1572|      0|      data->state.cookielist = NULL;
 1573|      0|      return CURLE_OUT_OF_MEMORY;
 1574|      0|    }
 1575|  2.53k|    data->state.cookielist = cl; /* store the list for later use */
 1576|  2.53k|  }
 1577|      0|  else {
 1578|       |    /* clear the list of cookie files */
 1579|      0|    curl_slist_free_all(data->state.cookielist);
 1580|      0|    data->state.cookielist = NULL;
 1581|       |
 1582|      0|    if(!data->share || !data->share->cookies) {
  ------------------
  |  Branch (1582:8): [True: 0, False: 0]
  |  Branch (1582:24): [True: 0, False: 0]
  ------------------
 1583|       |      /* throw away all existing cookies if this is not a shared cookie
 1584|       |         container */
 1585|      0|      Curl_cookie_clearall(data->cookies);
 1586|      0|      Curl_cookie_cleanup(data->cookies);
 1587|      0|    }
 1588|       |    /* disable the cookie engine */
 1589|      0|    data->cookies = NULL;
 1590|      0|  }
 1591|  2.53k|  return CURLE_OK;
 1592|  2.53k|}
setopt.c:setopt_func:
 2535|  22.8k|{
 2536|  22.8k|  struct UserDefined *s = &data->set;
 2537|  22.8k|  switch(option) {
 2538|      0|  case CURLOPT_PROGRESSFUNCTION:
  ------------------
  |  Branch (2538:3): [True: 0, False: 22.8k]
  ------------------
 2539|       |    /*
 2540|       |     * Progress callback function
 2541|       |     */
 2542|      0|    s->fprogress = va_arg(param, curl_progress_callback);
 2543|      0|    if(s->fprogress)
  ------------------
  |  Branch (2543:8): [True: 0, False: 0]
  ------------------
 2544|      0|      data->progress.callback = TRUE; /* no longer internal */
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 2545|      0|    else
 2546|      0|      data->progress.callback = FALSE; /* NULL enforces internal */
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 2547|      0|    break;
 2548|       |
 2549|      0|  case CURLOPT_XFERINFOFUNCTION:
  ------------------
  |  Branch (2549:3): [True: 0, False: 22.8k]
  ------------------
 2550|       |    /*
 2551|       |     * Transfer info callback function
 2552|       |     */
 2553|      0|    s->fxferinfo = va_arg(param, curl_xferinfo_callback);
 2554|      0|    if(s->fxferinfo)
  ------------------
  |  Branch (2554:8): [True: 0, False: 0]
  ------------------
 2555|      0|      data->progress.callback = TRUE; /* no longer internal */
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 2556|      0|    else
 2557|      0|      data->progress.callback = FALSE; /* NULL enforces internal */
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 2558|       |
 2559|      0|    break;
 2560|  2.53k|  case CURLOPT_DEBUGFUNCTION:
  ------------------
  |  Branch (2560:3): [True: 2.53k, False: 20.3k]
  ------------------
 2561|       |    /*
 2562|       |     * stderr write callback.
 2563|       |     */
 2564|  2.53k|    s->fdebug = va_arg(param, curl_debug_callback);
 2565|       |    /*
 2566|       |     * if the callback provided is NULL, it will use the default callback
 2567|       |     */
 2568|  2.53k|    break;
 2569|  2.53k|  case CURLOPT_HEADERFUNCTION:
  ------------------
  |  Branch (2569:3): [True: 2.53k, False: 20.3k]
  ------------------
 2570|       |    /*
 2571|       |     * Set header write callback
 2572|       |     */
 2573|  2.53k|    s->fwrite_header = va_arg(param, curl_write_callback);
 2574|  2.53k|    break;
 2575|  2.53k|  case CURLOPT_WRITEFUNCTION:
  ------------------
  |  Branch (2575:3): [True: 2.53k, False: 20.3k]
  ------------------
 2576|       |    /*
 2577|       |     * Set data write callback
 2578|       |     */
 2579|  2.53k|    s->fwrite_func = va_arg(param, curl_write_callback);
 2580|  2.53k|    if(!s->fwrite_func)
  ------------------
  |  Branch (2580:8): [True: 0, False: 2.53k]
  ------------------
 2581|      0|#if defined(__clang__) && __clang_major__ >= 16
 2582|      0|#pragma clang diagnostic push
 2583|      0|#pragma clang diagnostic ignored "-Wcast-function-type-strict"
 2584|      0|#endif
 2585|       |      /* When set to NULL, reset to our internal default function */
 2586|      0|      s->fwrite_func = (curl_write_callback)fwrite;
 2587|  2.53k|#if defined(__clang__) && __clang_major__ >= 16
 2588|  2.53k|#pragma clang diagnostic pop
 2589|  2.53k|#endif
 2590|  2.53k|    break;
 2591|  5.07k|  case CURLOPT_READFUNCTION:
  ------------------
  |  Branch (2591:3): [True: 5.07k, False: 17.7k]
  ------------------
 2592|       |    /*
 2593|       |     * Read data callback
 2594|       |     */
 2595|  5.07k|    s->fread_func_set = va_arg(param, curl_read_callback);
 2596|  5.07k|    if(!s->fread_func_set) {
  ------------------
  |  Branch (2596:8): [True: 2.53k, False: 2.53k]
  ------------------
 2597|  2.53k|      s->is_fread_set = 0;
 2598|  2.53k|#if defined(__clang__) && __clang_major__ >= 16
 2599|  2.53k|#pragma clang diagnostic push
 2600|  2.53k|#pragma clang diagnostic ignored "-Wcast-function-type-strict"
 2601|  2.53k|#endif
 2602|       |      /* When set to NULL, reset to our internal default function */
 2603|  2.53k|      s->fread_func_set = (curl_read_callback)fread;
 2604|  2.53k|#if defined(__clang__) && __clang_major__ >= 16
 2605|  2.53k|#pragma clang diagnostic pop
 2606|  2.53k|#endif
 2607|  2.53k|    }
 2608|  2.53k|    else
 2609|  2.53k|      s->is_fread_set = 1;
 2610|  5.07k|    break;
 2611|  5.07k|  case CURLOPT_SEEKFUNCTION:
  ------------------
  |  Branch (2611:3): [True: 5.07k, False: 17.7k]
  ------------------
 2612|       |    /*
 2613|       |     * Seek callback. Might be NULL.
 2614|       |     */
 2615|  5.07k|    s->seek_func = va_arg(param, curl_seek_callback);
 2616|  5.07k|    break;
 2617|      0|  case CURLOPT_IOCTLFUNCTION:
  ------------------
  |  Branch (2617:3): [True: 0, False: 22.8k]
  ------------------
 2618|       |    /*
 2619|       |     * I/O control callback. Might be NULL.
 2620|       |     */
 2621|      0|    s->ioctl_func = va_arg(param, curl_ioctl_callback);
 2622|      0|    break;
 2623|      0|  case CURLOPT_SSL_CTX_FUNCTION:
  ------------------
  |  Branch (2623:3): [True: 0, False: 22.8k]
  ------------------
 2624|       |    /*
 2625|       |     * Set an SSL_CTX callback
 2626|       |     */
 2627|      0|#ifdef USE_SSL
 2628|      0|    if(Curl_ssl_supports(data, SSLSUPP_SSL_CTX)) {
  ------------------
  |  |   38|      0|#define SSLSUPP_SSL_CTX      (1 << 3) /* supports CURLOPT_SSL_CTX */
  ------------------
  |  Branch (2628:8): [True: 0, False: 0]
  ------------------
 2629|      0|      s->ssl.fsslctx = va_arg(param, curl_ssl_ctx_callback);
 2630|      0|      break;
 2631|      0|    }
 2632|      0|    else
 2633|      0|#endif
 2634|      0|      return CURLE_NOT_BUILT_IN;
 2635|       |
 2636|  2.53k|  case CURLOPT_SOCKOPTFUNCTION:
  ------------------
  |  Branch (2636:3): [True: 2.53k, False: 20.3k]
  ------------------
 2637|       |    /*
 2638|       |     * socket callback function: called after socket() but before connect()
 2639|       |     */
 2640|  2.53k|    s->fsockopt = va_arg(param, curl_sockopt_callback);
 2641|  2.53k|    break;
 2642|       |
 2643|  2.53k|  case CURLOPT_OPENSOCKETFUNCTION:
  ------------------
  |  Branch (2643:3): [True: 2.53k, False: 20.3k]
  ------------------
 2644|       |    /*
 2645|       |     * open/create socket callback function: called instead of socket(),
 2646|       |     * before connect()
 2647|       |     */
 2648|  2.53k|    s->fopensocket = va_arg(param, curl_opensocket_callback);
 2649|  2.53k|    break;
 2650|       |
 2651|      0|  case CURLOPT_CLOSESOCKETFUNCTION:
  ------------------
  |  Branch (2651:3): [True: 0, False: 22.8k]
  ------------------
 2652|       |    /*
 2653|       |     * close socket callback function: called instead of close()
 2654|       |     * when shutting down a connection
 2655|       |     */
 2656|      0|    s->fclosesocket = va_arg(param, curl_closesocket_callback);
 2657|      0|    break;
 2658|       |
 2659|      0|  case CURLOPT_RESOLVER_START_FUNCTION:
  ------------------
  |  Branch (2659:3): [True: 0, False: 22.8k]
  ------------------
 2660|       |    /*
 2661|       |     * resolver start callback function: called before a new resolver request
 2662|       |     * is started
 2663|       |     */
 2664|      0|    s->resolver_start = va_arg(param, curl_resolver_start_callback);
 2665|      0|    break;
 2666|       |
 2667|       |#ifdef USE_SSH
 2668|       |#ifdef USE_LIBSSH2
 2669|       |  case CURLOPT_SSH_HOSTKEYFUNCTION:
 2670|       |    /* the callback to check the hostkey without the knownhost file */
 2671|       |    s->ssh_hostkeyfunc = va_arg(param, curl_sshhostkeycallback);
 2672|       |    break;
 2673|       |#endif
 2674|       |
 2675|       |  case CURLOPT_SSH_KEYFUNCTION:
 2676|       |    /* setting to NULL is fine since the ssh.c functions themselves will
 2677|       |       then revert to use the internal default */
 2678|       |    s->ssh_keyfunc = va_arg(param, curl_sshkeycallback);
 2679|       |    break;
 2680|       |
 2681|       |#endif /* USE_SSH */
 2682|       |
 2683|      0|#ifndef CURL_DISABLE_RTSP
 2684|      0|  case CURLOPT_INTERLEAVEFUNCTION:
  ------------------
  |  Branch (2684:3): [True: 0, False: 22.8k]
  ------------------
 2685|       |    /* Set the user defined RTP write function */
 2686|      0|    s->fwrite_rtp = va_arg(param, curl_write_callback);
 2687|      0|    break;
 2688|      0|#endif
 2689|      0|#ifndef CURL_DISABLE_FTP
 2690|      0|  case CURLOPT_CHUNK_BGN_FUNCTION:
  ------------------
  |  Branch (2690:3): [True: 0, False: 22.8k]
  ------------------
 2691|      0|    s->chunk_bgn = va_arg(param, curl_chunk_bgn_callback);
 2692|      0|    break;
 2693|      0|  case CURLOPT_CHUNK_END_FUNCTION:
  ------------------
  |  Branch (2693:3): [True: 0, False: 22.8k]
  ------------------
 2694|      0|    s->chunk_end = va_arg(param, curl_chunk_end_callback);
 2695|      0|    break;
 2696|      0|  case CURLOPT_FNMATCH_FUNCTION:
  ------------------
  |  Branch (2696:3): [True: 0, False: 22.8k]
  ------------------
 2697|      0|    s->fnmatch = va_arg(param, curl_fnmatch_callback);
 2698|      0|    break;
 2699|      0|#endif
 2700|      0|#ifndef CURL_DISABLE_HTTP
 2701|      0|  case CURLOPT_TRAILERFUNCTION:
  ------------------
  |  Branch (2701:3): [True: 0, False: 22.8k]
  ------------------
 2702|      0|    s->trailer_callback = va_arg(param, curl_trailer_callback);
 2703|      0|    break;
 2704|      0|#endif
 2705|      0|#ifndef CURL_DISABLE_HSTS
 2706|      0|  case CURLOPT_HSTSREADFUNCTION:
  ------------------
  |  Branch (2706:3): [True: 0, False: 22.8k]
  ------------------
 2707|      0|    s->hsts_read = va_arg(param, curl_hstsread_callback);
 2708|      0|    break;
 2709|      0|  case CURLOPT_HSTSWRITEFUNCTION:
  ------------------
  |  Branch (2709:3): [True: 0, False: 22.8k]
  ------------------
 2710|      0|    s->hsts_write = va_arg(param, curl_hstswrite_callback);
 2711|      0|    break;
 2712|      0|#endif
 2713|      0|  case CURLOPT_PREREQFUNCTION:
  ------------------
  |  Branch (2713:3): [True: 0, False: 22.8k]
  ------------------
 2714|      0|    s->fprereq = va_arg(param, curl_prereq_callback);
 2715|      0|    break;
 2716|      0|  default:
  ------------------
  |  Branch (2716:3): [True: 0, False: 22.8k]
  ------------------
 2717|      0|    return CURLE_UNKNOWN_OPTION;
 2718|  22.8k|  }
 2719|  22.8k|  return CURLE_OK;
 2720|  22.8k|}
setopt.c:setopt_offt:
 2724|    333|{
 2725|    333|  struct UserDefined *s = &data->set;
 2726|    333|  switch(option) {
 2727|      0|  case CURLOPT_TIMEVALUE_LARGE:
  ------------------
  |  Branch (2727:3): [True: 0, False: 333]
  ------------------
 2728|       |    /*
 2729|       |     * This is the value to compare with the remote document with the
 2730|       |     * method set with CURLOPT_TIMECONDITION
 2731|       |     */
 2732|      0|    s->timevalue = (time_t)offt;
 2733|      0|    break;
 2734|       |
 2735|       |    /* MQTT "borrows" some of the HTTP options */
 2736|      0|  case CURLOPT_POSTFIELDSIZE_LARGE:
  ------------------
  |  Branch (2736:3): [True: 0, False: 333]
  ------------------
 2737|       |    /*
 2738|       |     * The size of the POSTFIELD data to prevent libcurl to do strlen() to
 2739|       |     * figure it out. Enables binary posts.
 2740|       |     */
 2741|      0|    if(offt < -1)
  ------------------
  |  Branch (2741:8): [True: 0, False: 0]
  ------------------
 2742|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
 2743|       |
 2744|      0|    if(s->postfieldsize < offt && s->str_copypostfields) {
  ------------------
  |  Branch (2744:8): [True: 0, False: 0]
  |  Branch (2744:35): [True: 0, False: 0]
  ------------------
 2745|       |      /* Previous CURLOPT_COPYPOSTFIELDS is no longer valid. */
 2746|      0|      curlx_safefree(s->str_copypostfields);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2747|      0|      s->postfields = NULL;
 2748|      0|    }
 2749|      0|    s->postfieldsize = offt;
 2750|      0|    break;
 2751|      0|  case CURLOPT_INFILESIZE_LARGE:
  ------------------
  |  Branch (2751:3): [True: 0, False: 333]
  ------------------
 2752|       |    /*
 2753|       |     * If known, this should inform curl about the file size of the
 2754|       |     * to-be-uploaded file.
 2755|       |     */
 2756|      0|    if(offt < -1)
  ------------------
  |  Branch (2756:8): [True: 0, False: 0]
  ------------------
 2757|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
 2758|      0|    s->filesize = offt;
 2759|      0|    break;
 2760|      0|  case CURLOPT_MAX_SEND_SPEED_LARGE:
  ------------------
  |  Branch (2760:3): [True: 0, False: 333]
  ------------------
 2761|       |    /*
 2762|       |     * When transfer uploads are faster than CURLOPT_MAX_SEND_SPEED_LARGE
 2763|       |     * bytes per second the transfer is throttled..
 2764|       |     */
 2765|      0|    if(offt < 0)
  ------------------
  |  Branch (2765:8): [True: 0, False: 0]
  ------------------
 2766|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
 2767|      0|    s->max_send_speed = offt;
 2768|       |    /* use minimal burst rate of 32k. some protocol batch IO */
 2769|      0|    Curl_rlimit_init(&data->progress.ul.rlimit, offt,
 2770|      0|                     CURLMAX(offt, (32 * 1024)),
  ------------------
  |  | 1287|      0|#define CURLMAX(x, y) ((x) > (y) ? (x) : (y))
  |  |  ------------------
  |  |  |  Branch (1287:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2771|      0|                     Curl_pgrs_now(data));
 2772|      0|    break;
 2773|      0|  case CURLOPT_MAX_RECV_SPEED_LARGE:
  ------------------
  |  Branch (2773:3): [True: 0, False: 333]
  ------------------
 2774|       |    /*
 2775|       |     * When receiving data faster than CURLOPT_MAX_RECV_SPEED_LARGE bytes per
 2776|       |     * second the transfer is throttled..
 2777|       |     */
 2778|      0|    if(offt < 0)
  ------------------
  |  Branch (2778:8): [True: 0, False: 0]
  ------------------
 2779|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
 2780|      0|    s->max_recv_speed = offt;
 2781|       |    /* use minimal burst rate of 32k. some protocol batch IO */
 2782|      0|    Curl_rlimit_init(&data->progress.dl.rlimit, offt,
 2783|      0|                     CURLMAX(offt, (32 * 1024)),
  ------------------
  |  | 1287|      0|#define CURLMAX(x, y) ((x) > (y) ? (x) : (y))
  |  |  ------------------
  |  |  |  Branch (1287:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2784|      0|                     Curl_pgrs_now(data));
 2785|      0|    break;
 2786|      0|  case CURLOPT_RESUME_FROM_LARGE:
  ------------------
  |  Branch (2786:3): [True: 0, False: 333]
  ------------------
 2787|       |    /*
 2788|       |     * Resume transfer at the given file position
 2789|       |     */
 2790|      0|    if(offt < -1)
  ------------------
  |  Branch (2790:8): [True: 0, False: 0]
  ------------------
 2791|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
 2792|      0|    s->set_resume_from = offt;
 2793|      0|    break;
 2794|    333|  case CURLOPT_MAXFILESIZE_LARGE:
  ------------------
  |  Branch (2794:3): [True: 333, False: 0]
  ------------------
 2795|       |    /*
 2796|       |     * Set the maximum size of a file to download.
 2797|       |     */
 2798|    333|    if(offt < 0)
  ------------------
  |  Branch (2798:8): [True: 96, False: 237]
  ------------------
 2799|     96|      return CURLE_BAD_FUNCTION_ARGUMENT;
 2800|    237|    s->max_filesize = offt;
 2801|    237|    break;
 2802|       |
 2803|      0|  default:
  ------------------
  |  Branch (2803:3): [True: 0, False: 333]
  ------------------
 2804|      0|    return CURLE_UNKNOWN_OPTION;
 2805|    333|  }
 2806|    237|  return CURLE_OK;
 2807|    333|}

easy.c:sigpipe_ignore:
   49|  2.53k|{
   50|       |  /* get a local copy of no_signal because the Curl_easy might not be
   51|       |     around when we restore */
   52|  2.53k|  ig->no_signal = data->set.no_signal;
   53|  2.53k|  if(!data->set.no_signal) {
  ------------------
  |  Branch (53:6): [True: 2.53k, False: 0]
  ------------------
   54|  2.53k|    struct sigaction action;
   55|       |    /* first, extract the existing situation */
   56|  2.53k|    sigaction(SIGPIPE, NULL, &ig->old_pipe_act);
   57|  2.53k|    action = ig->old_pipe_act;
   58|       |    /* ignore this signal */
   59|  2.53k|    action.sa_handler = SIG_IGN;
   60|  2.53k|#ifdef SA_SIGINFO
   61|       |    /* clear SA_SIGINFO flag since we are using sa_handler */
   62|  2.53k|    action.sa_flags &= ~SA_SIGINFO;
   63|  2.53k|#endif
   64|  2.53k|    sigaction(SIGPIPE, &action, NULL);
   65|  2.53k|  }
   66|  2.53k|}
easy.c:sigpipe_restore:
   74|  2.53k|{
   75|  2.53k|  if(!ig->no_signal)
  ------------------
  |  Branch (75:6): [True: 2.53k, False: 0]
  ------------------
   76|       |    /* restore the outside state */
   77|  2.53k|    sigaction(SIGPIPE, &ig->old_pipe_act, NULL);
   78|  2.53k|}
multi.c:sigpipe_init:
   37|  2.53k|{
   38|  2.53k|  memset(ig, 0, sizeof(*ig));
   39|       |  ig->no_signal = TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
   40|  2.53k|}
multi.c:sigpipe_apply:
   82|  2.53k|{
   83|  2.53k|  if(data && (data->set.no_signal != ig->no_signal)) {
  ------------------
  |  Branch (83:6): [True: 2.53k, False: 0]
  |  Branch (83:14): [True: 2.53k, False: 0]
  ------------------
   84|  2.53k|    sigpipe_restore(ig);
   85|  2.53k|    sigpipe_ignore(data, ig);
   86|  2.53k|  }
   87|  2.53k|}
multi.c:sigpipe_ignore:
   49|  2.53k|{
   50|       |  /* get a local copy of no_signal because the Curl_easy might not be
   51|       |     around when we restore */
   52|  2.53k|  ig->no_signal = data->set.no_signal;
   53|  2.53k|  if(!data->set.no_signal) {
  ------------------
  |  Branch (53:6): [True: 2.53k, False: 0]
  ------------------
   54|  2.53k|    struct sigaction action;
   55|       |    /* first, extract the existing situation */
   56|  2.53k|    sigaction(SIGPIPE, NULL, &ig->old_pipe_act);
   57|  2.53k|    action = ig->old_pipe_act;
   58|       |    /* ignore this signal */
   59|  2.53k|    action.sa_handler = SIG_IGN;
   60|  2.53k|#ifdef SA_SIGINFO
   61|       |    /* clear SA_SIGINFO flag since we are using sa_handler */
   62|  2.53k|    action.sa_flags &= ~SA_SIGINFO;
   63|  2.53k|#endif
   64|  2.53k|    sigaction(SIGPIPE, &action, NULL);
   65|  2.53k|  }
   66|  2.53k|}
multi.c:sigpipe_restore:
   74|  5.07k|{
   75|  5.07k|  if(!ig->no_signal)
  ------------------
  |  Branch (75:6): [True: 2.53k, False: 2.53k]
  ------------------
   76|       |    /* restore the outside state */
   77|  2.53k|    sigaction(SIGPIPE, &ig->old_pipe_act, NULL);
   78|  5.07k|}
conncache.c:sigpipe_init:
   37|  2.53k|{
   38|  2.53k|  memset(ig, 0, sizeof(*ig));
   39|       |  ig->no_signal = TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
   40|  2.53k|}
conncache.c:sigpipe_restore:
   74|  2.53k|{
   75|  2.53k|  if(!ig->no_signal)
  ------------------
  |  Branch (75:6): [True: 0, False: 2.53k]
  ------------------
   76|       |    /* restore the outside state */
   77|      0|    sigaction(SIGPIPE, &ig->old_pipe_act, NULL);
   78|  2.53k|}
cshutdn.c:sigpipe_init:
   37|  2.53k|{
   38|  2.53k|  memset(ig, 0, sizeof(*ig));
   39|       |  ig->no_signal = TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
   40|  2.53k|}
cshutdn.c:sigpipe_restore:
   74|  2.53k|{
   75|  2.53k|  if(!ig->no_signal)
  ------------------
  |  Branch (75:6): [True: 0, False: 2.53k]
  ------------------
   76|       |    /* restore the outside state */
   77|      0|    sigaction(SIGPIPE, &ig->old_pipe_act, NULL);
   78|  2.53k|}

Curl_slist_append_nodup:
   56|  9.15k|{
   57|  9.15k|  struct curl_slist *last;
   58|  9.15k|  struct curl_slist *new_item;
   59|       |
   60|  9.15k|  DEBUGASSERT(data);
  ------------------
  |  | 1075|  9.15k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (60:3): [True: 0, False: 9.15k]
  |  Branch (60:3): [True: 9.15k, False: 0]
  ------------------
   61|       |
   62|  9.15k|  new_item = curlx_malloc(sizeof(struct curl_slist));
  ------------------
  |  | 1471|  9.15k|#define curlx_malloc(size)         curl_dbg_malloc(size, __LINE__, __FILE__)
  ------------------
   63|  9.15k|  if(!new_item)
  ------------------
  |  Branch (63:6): [True: 0, False: 9.15k]
  ------------------
   64|      0|    return NULL;
   65|       |
   66|  9.15k|  new_item->next = NULL;
   67|  9.15k|  new_item->data = CURL_UNCONST(data);
  ------------------
  |  |  856|  9.15k|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
   68|       |
   69|       |  /* if this is the first item, then new_item *is* the list */
   70|  9.15k|  if(!list)
  ------------------
  |  Branch (70:6): [True: 8.25k, False: 896]
  ------------------
   71|  8.25k|    return new_item;
   72|       |
   73|    896|  last = slist_get_last(list);
   74|    896|  last->next = new_item;
   75|    896|  return list;
   76|  9.15k|}
curl_slist_append:
   86|  9.15k|{
   87|  9.15k|  char *dupdata = curlx_strdup(data);
  ------------------
  |  | 1470|  9.15k|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
   88|       |
   89|  9.15k|  if(!dupdata)
  ------------------
  |  Branch (89:6): [True: 0, False: 9.15k]
  ------------------
   90|      0|    return NULL;
   91|       |
   92|  9.15k|  list = Curl_slist_append_nodup(list, dupdata);
   93|  9.15k|  if(!list)
  ------------------
  |  Branch (93:6): [True: 0, False: 9.15k]
  ------------------
   94|      0|    curlx_free(dupdata);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   95|       |
   96|  9.15k|  return list;
   97|  9.15k|}
curl_slist_free_all:
  125|  19.8k|{
  126|  19.8k|  struct curl_slist *next;
  127|  19.8k|  struct curl_slist *item;
  128|       |
  129|  19.8k|  if(!list)
  ------------------
  |  Branch (129:6): [True: 11.6k, False: 8.25k]
  ------------------
  130|  11.6k|    return;
  131|       |
  132|  8.25k|  item = list;
  133|  9.15k|  do {
  134|  9.15k|    next = item->next;
  135|  9.15k|    curlx_safefree(item->data);
  ------------------
  |  | 1332|  9.15k|  do {                      \
  |  | 1333|  9.15k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  9.15k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  9.15k|    (ptr) = NULL;           \
  |  | 1335|  9.15k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 9.15k]
  |  |  ------------------
  ------------------
  136|  9.15k|    curlx_free(item);
  ------------------
  |  | 1476|  9.15k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  137|  9.15k|    item = next;
  138|  9.15k|  } while(next);
  ------------------
  |  Branch (138:11): [True: 896, False: 8.25k]
  ------------------
  139|  8.25k|}
slist.c:slist_get_last:
   30|    896|{
   31|    896|  struct curl_slist *item;
   32|       |
   33|       |  /* if caller passed us a NULL, return now */
   34|    896|  if(!list)
  ------------------
  |  Branch (34:6): [True: 0, False: 896]
  ------------------
   35|      0|    return NULL;
   36|       |
   37|       |  /* loop through to find the last item */
   38|    896|  item = list;
   39|  2.50k|  while(item->next) {
  ------------------
  |  Branch (39:9): [True: 1.61k, False: 896]
  ------------------
   40|  1.61k|    item = item->next;
   41|  1.61k|  }
   42|    896|  return item;
   43|    896|}

Curl_wakeup_init:
  277|  5.07k|{
  278|  5.07k|#ifdef USE_EVENTFD
  279|  5.07k|  return wakeup_eventfd(socks, nonblocking);
  280|       |#elif defined(HAVE_PIPE)
  281|       |  return wakeup_pipe(socks, nonblocking);
  282|       |#elif defined(HAVE_SOCKETPAIR)
  283|       |  return wakeup_socketpair(socks, nonblocking);
  284|       |#else
  285|       |  return wakeup_inet(socks, nonblocking);
  286|       |#endif
  287|  5.07k|}
Curl_wakeup_consume:
  329|  2.53k|{
  330|  2.53k|  char buf[64];
  331|  2.53k|  ssize_t rc;
  332|  2.53k|  CURLcode result = CURLE_OK;
  333|       |
  334|  2.53k|  do {
  335|  2.53k|    rc = wakeup_read(socks[0], buf, sizeof(buf));
  ------------------
  |  |  292|  2.53k|#define wakeup_read         read
  ------------------
  336|  2.53k|    if(!rc)
  ------------------
  |  Branch (336:8): [True: 0, False: 2.53k]
  ------------------
  337|      0|      break;
  338|  2.53k|    else if(rc < 0) {
  ------------------
  |  Branch (338:13): [True: 2.53k, False: 0]
  ------------------
  339|  2.53k|      int sockerr = SOCKERRNO;
  ------------------
  |  | 1089|  2.53k|#define SOCKERRNO         errno
  ------------------
  340|  2.53k|#ifndef USE_WINSOCK
  341|  2.53k|      if(sockerr == SOCKEINTR)
  ------------------
  |  | 1123|  2.53k|#define SOCKEINTR         EINTR
  ------------------
  |  Branch (341:10): [True: 0, False: 2.53k]
  ------------------
  342|      0|        continue;
  343|  2.53k|#endif
  344|  2.53k|      if(SOCK_EAGAIN(sockerr))
  ------------------
  |  | 1140|  2.53k|#define SOCK_EAGAIN(e) ((e) == SOCKEWOULDBLOCK)
  |  |  ------------------
  |  |  |  | 1131|  2.53k|#define SOCKEWOULDBLOCK   EWOULDBLOCK
  |  |  ------------------
  |  |  |  Branch (1140:24): [True: 2.53k, False: 0]
  |  |  ------------------
  ------------------
  345|  2.53k|        break;
  346|      0|      result = CURLE_READ_ERROR;
  347|      0|      break;
  348|  2.53k|    }
  349|  2.53k|  } while(all);
  ------------------
  |  Branch (349:11): [True: 0, False: 0]
  ------------------
  350|  2.53k|  return result;
  351|  2.53k|}
Curl_wakeup_destroy:
  354|  5.07k|{
  355|       |#ifndef USE_EVENTFD
  356|       |  if(socks[1] != CURL_SOCKET_BAD)
  357|       |    wakeup_close(socks[1]);
  358|       |#endif
  359|  5.07k|  if(socks[0] != CURL_SOCKET_BAD)
  ------------------
  |  |  147|  5.07k|#define CURL_SOCKET_BAD (-1)
  ------------------
  |  Branch (359:6): [True: 5.07k, False: 0]
  ------------------
  360|  5.07k|    wakeup_close(socks[0]);
  ------------------
  |  |  293|  5.07k|#define wakeup_close        close
  ------------------
  361|  5.07k|  socks[0] = socks[1] = CURL_SOCKET_BAD;
  ------------------
  |  |  147|  5.07k|#define CURL_SOCKET_BAD (-1)
  ------------------
  362|  5.07k|}
socketpair.c:wakeup_eventfd:
   39|  5.07k|{
   40|  5.07k|  int efd = eventfd(0, nonblocking ? EFD_CLOEXEC | EFD_NONBLOCK : EFD_CLOEXEC);
  ------------------
  |  Branch (40:24): [True: 5.07k, False: 0]
  ------------------
   41|  5.07k|  if(efd == -1) {
  ------------------
  |  Branch (41:6): [True: 0, False: 5.07k]
  ------------------
   42|      0|    socks[0] = socks[1] = CURL_SOCKET_BAD;
  ------------------
  |  |  147|      0|#define CURL_SOCKET_BAD (-1)
  ------------------
   43|      0|    return -1;
   44|      0|  }
   45|  5.07k|  socks[0] = socks[1] = efd;
   46|  5.07k|  return 0;
   47|  5.07k|}

Curl_timeouts_init:
   32|  2.53k|{
   33|  2.53k|  timeouts->tree = NULL;
   34|  2.53k|  timeouts->time_base = ptime_base ? *ptime_base : curlx_now();
  ------------------
  |  Branch (34:25): [True: 2.53k, False: 0]
  ------------------
   35|  2.53k|}
Curl_timeouts_has:
   38|  16.7k|{
   39|  16.7k|  struct Curl_tree *node = data ? &data->state.timeouts.splaynode : NULL;
  ------------------
  |  Branch (39:28): [True: 16.7k, False: 0]
  ------------------
   40|  16.7k|  return node && node->registered;
  ------------------
  |  Branch (40:10): [True: 16.7k, False: 0]
  |  Branch (40:18): [True: 11.6k, False: 5.07k]
  ------------------
   41|  16.7k|}
Curl_timeouts_offset_us:
   45|  5.07k|{
   46|  5.07k|  return curlx_ptimediff_us(pts, &timeouts->time_base);
   47|  5.07k|}
Curl_timeouts_remove_expired:
   82|  2.53k|{
   83|  2.53k|  if(timeouts->tree) {
  ------------------
  |  Branch (83:6): [True: 0, False: 2.53k]
  ------------------
   84|      0|    struct Curl_tree *t = NULL;
   85|      0|    timediff_t elapsed_us = Curl_timeouts_offset_us(timeouts, ts);
   86|      0|    timeouts->tree = Curl_splaygetbest(elapsed_us, timeouts->tree, &t);
   87|      0|    if(t) {
  ------------------
  |  Branch (87:8): [True: 0, False: 0]
  ------------------
   88|      0|      *pmid = t->id;
   89|      0|      return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
   90|      0|    }
   91|      0|  }
   92|  2.53k|  *pmid = UINT32_MAX;
   93|       |  return FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
   94|  2.53k|}
Curl_timeouts_add:
   99|  2.53k|{
  100|  2.53k|  struct Curl_tree *node = &data->state.timeouts.splaynode;
  101|  2.53k|  DEBUGASSERT(!node->registered);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (101:3): [True: 0, False: 2.53k]
  |  Branch (101:3): [True: 2.53k, False: 0]
  ------------------
  102|  2.53k|  timeouts->tree = Curl_splayinsert(offset_us, timeouts->tree,
  103|  2.53k|                                    node, data->mid);
  104|  2.53k|}
Curl_timeouts_remove:
  108|  5.07k|{
  109|  5.07k|  struct Curl_tree *node = &data->state.timeouts.splaynode;
  110|  5.07k|  if(node->registered) {
  ------------------
  |  Branch (110:6): [True: 2.53k, False: 2.53k]
  ------------------
  111|  2.53k|    int rc = Curl_splayremove(timeouts->tree, node, &timeouts->tree);
  112|  2.53k|#ifdef DEBUGBUILD
  113|  2.53k|    if(rc)
  ------------------
  |  Branch (113:8): [True: 0, False: 2.53k]
  ------------------
  114|      0|      curl_mfprintf(stderr, "Internal error removing splay node = %d\n", rc);
  115|       |#else
  116|       |    (void)rc;
  117|       |#endif
  118|  2.53k|    return TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  119|  2.53k|  }
  120|  2.53k|  return FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  121|  5.07k|}
Curl_splay:
  133|  2.53k|{
  134|  2.53k|  struct Curl_tree N, *l, *r, *y;
  135|       |
  136|  2.53k|  if(!root)
  ------------------
  |  Branch (136:6): [True: 0, False: 2.53k]
  ------------------
  137|      0|    return NULL;
  138|  2.53k|  N.smaller = N.larger = NULL;
  139|  2.53k|  l = r = &N;
  140|       |
  141|  2.53k|  for(;;) {
  142|  2.53k|    if(key < root->key) {
  ------------------
  |  Branch (142:8): [True: 0, False: 2.53k]
  ------------------
  143|       |      /* key is somewhere in root->smaller branch */
  144|      0|      if(!root->smaller)  /* which is empty, done */
  ------------------
  |  Branch (144:10): [True: 0, False: 0]
  ------------------
  145|      0|        break;
  146|      0|      if(key < root->smaller->key) {
  ------------------
  |  Branch (146:10): [True: 0, False: 0]
  ------------------
  147|       |        /* key is somewhere in root->smaller->smaller, make a "Zig step" */
  148|      0|        y = root->smaller;
  149|      0|        root->smaller = y->larger;
  150|      0|        y->larger = root;
  151|      0|        root = y;
  152|      0|        if(!root->smaller)
  ------------------
  |  Branch (152:12): [True: 0, False: 0]
  ------------------
  153|      0|          break;
  154|      0|      }
  155|       |      /* Making root->smaller the new root, the old root is no longer
  156|       |       * referenced. Remember it in the N tree's `r`ight/larger side.
  157|       |       * Everything in old root is smaller than what the right side
  158|       |       * of N already has, so it gets added to r->smaller. */
  159|      0|      r->smaller = root;
  160|      0|      r = root;
  161|      0|      root = root->smaller;
  162|      0|    }
  163|  2.53k|    else if(key > root->key) {
  ------------------
  |  Branch (163:13): [True: 0, False: 2.53k]
  ------------------
  164|       |      /* key is somewhere in root->larger branch */
  165|      0|      if(!root->larger)  /* which is empty, done */
  ------------------
  |  Branch (165:10): [True: 0, False: 0]
  ------------------
  166|      0|        break;
  167|      0|      if(key > root->larger->key) {
  ------------------
  |  Branch (167:10): [True: 0, False: 0]
  ------------------
  168|       |        /* key is somewhere in root->larger->larger, make a "Zig step" */
  169|      0|        y = root->larger;
  170|      0|        root->larger = y->smaller;
  171|      0|        y->smaller = root;
  172|      0|        root = y;
  173|      0|        if(!root->larger)
  ------------------
  |  Branch (173:12): [True: 0, False: 0]
  ------------------
  174|      0|          break;
  175|      0|      }
  176|       |      /* Making root->larger the new root, the old root is no longer
  177|       |       * referenced. Remember it in the N tree's `l`eft/smaller side.
  178|       |       * Everything in old root is larger than what the left side
  179|       |       * of N already has, so it gets added to l->larger. */
  180|      0|      l->larger = root;
  181|      0|      l = root;
  182|      0|      root = root->larger;
  183|      0|    }
  184|  2.53k|    else  /* exact match, root is key, done */
  185|  2.53k|      break;
  186|  2.53k|  }
  187|       |
  188|       |  /* Put it all together again.
  189|       |   * root->smaller has everything larger than current `l`.
  190|       |   * root->larger has everything smaller than current `r`. */
  191|  2.53k|  l->larger = root->smaller;
  192|  2.53k|  r->smaller = root->larger;
  193|  2.53k|  root->smaller = N.larger;
  194|  2.53k|  root->larger = N.smaller;
  195|       |
  196|  2.53k|  return root;
  197|  2.53k|}
Curl_splayinsert:
  208|  2.53k|{
  209|  2.53k|  DEBUGASSERT(node);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (209:3): [True: 0, False: 2.53k]
  |  Branch (209:3): [True: 2.53k, False: 0]
  ------------------
  210|       |
  211|  2.53k|  node->key = key;
  212|  2.53k|  node->id = id;
  213|  2.53k|  node->same = NULL;
  214|  2.53k|  node->registered = TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  215|  2.53k|  if(root) {
  ------------------
  |  Branch (215:6): [True: 0, False: 2.53k]
  ------------------
  216|      0|    root = Curl_splay(key, root);
  217|      0|    DEBUGASSERT(root);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (217:5): [True: 0, False: 0]
  |  Branch (217:5): [True: 0, False: 0]
  ------------------
  218|      0|    if(key == root->key) {
  ------------------
  |  Branch (218:8): [True: 0, False: 0]
  ------------------
  219|       |      /* There already exists a node in the tree with the same key.
  220|       |         Append the new node to the `same` list. */
  221|      0|      struct Curl_tree **panchor = &root->same;
  222|      0|      while(*panchor)
  ------------------
  |  Branch (222:13): [True: 0, False: 0]
  ------------------
  223|      0|        panchor = &(*panchor)->same;
  224|      0|      *panchor = node;
  225|      0|      return root; /* the root node always stays the same */
  226|      0|    }
  227|      0|  }
  228|       |
  229|       |  /* node becomes the new root. Insert old root as sub-branch. */
  230|  2.53k|  if(!root) {
  ------------------
  |  Branch (230:6): [True: 2.53k, False: 0]
  ------------------
  231|  2.53k|    node->smaller = node->larger = NULL;
  232|  2.53k|  }
  233|      0|  else if(key < root->key) {
  ------------------
  |  Branch (233:11): [True: 0, False: 0]
  ------------------
  234|      0|    node->smaller = root->smaller;
  235|      0|    node->larger = root;
  236|      0|    root->smaller = NULL;
  237|      0|  }
  238|      0|  else {
  239|      0|    node->larger = root->larger;
  240|      0|    node->smaller = root;
  241|      0|    root->larger = NULL;
  242|      0|  }
  243|       |
  244|  2.53k|  return node;
  245|  2.53k|}
Curl_splayremove:
  305|  2.53k|{
  306|  2.53k|  struct Curl_tree *x;
  307|       |
  308|  2.53k|  if(!root)
  ------------------
  |  Branch (308:6): [True: 0, False: 2.53k]
  ------------------
  309|      0|    return 1;
  310|       |
  311|  2.53k|  DEBUGASSERT(removenode);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (311:3): [True: 0, False: 2.53k]
  |  Branch (311:3): [True: 2.53k, False: 0]
  ------------------
  312|  2.53k|  if(!removenode->registered)
  ------------------
  |  Branch (312:6): [True: 0, False: 2.53k]
  ------------------
  313|      0|    return 2;
  314|       |
  315|  2.53k|  root = Curl_splay(removenode->key, root);
  316|  2.53k|  DEBUGASSERT(root);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (316:3): [True: 0, False: 2.53k]
  |  Branch (316:3): [True: 2.53k, False: 0]
  ------------------
  317|       |
  318|       |  /* First make sure that we got the same root key as the one we want
  319|       |     to remove, as otherwise we might be trying to remove a node that
  320|       |     is not actually in the tree. */
  321|  2.53k|  if(root->key != removenode->key) {
  ------------------
  |  Branch (321:6): [True: 0, False: 2.53k]
  ------------------
  322|      0|    DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (322:5): [Folded, False: 0]
  |  Branch (322:5): [Folded, False: 0]
  ------------------
  323|      0|    return 2;
  324|      0|  }
  325|       |
  326|  2.53k|  if(root != removenode) {
  ------------------
  |  Branch (326:6): [True: 0, False: 2.53k]
  ------------------
  327|       |    /* Should be in the root->same list then */
  328|      0|    struct Curl_tree **panchor;
  329|      0|    for(panchor = &root->same; *panchor; panchor = &(*panchor)->same) {
  ------------------
  |  Branch (329:32): [True: 0, False: 0]
  ------------------
  330|      0|      if(*panchor == removenode) {
  ------------------
  |  Branch (330:10): [True: 0, False: 0]
  ------------------
  331|      0|        *panchor = removenode->same;
  332|      0|        removenode->same = NULL;
  333|      0|        removenode->registered = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  334|      0|        *newroot = root;
  335|      0|        return 0;
  336|      0|      }
  337|      0|    }
  338|       |    /* not found in same list, error */
  339|      0|    DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (339:5): [Folded, False: 0]
  |  Branch (339:5): [Folded, False: 0]
  ------------------
  340|      0|    return 2;
  341|      0|  }
  342|       |  /* removing the root node */
  343|  2.53k|  if(root->same) {
  ------------------
  |  Branch (343:6): [True: 0, False: 2.53k]
  ------------------
  344|       |    /* 'x' is the new root node, we make it use the root node's
  345|       |       smaller/larger links */
  346|      0|    x = root->same;
  347|      0|    x->larger = root->larger;
  348|      0|    x->smaller = root->smaller;
  349|      0|    root->same = NULL;
  350|      0|  }
  351|  2.53k|  else {
  352|       |    /* Remove the root node */
  353|  2.53k|    if(!root->smaller)
  ------------------
  |  Branch (353:8): [True: 2.53k, False: 0]
  ------------------
  354|  2.53k|      x = root->larger;
  355|      0|    else {
  356|      0|      x = Curl_splay(removenode->key, root->smaller);
  357|      0|      DEBUGASSERT(x);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (357:7): [True: 0, False: 0]
  |  Branch (357:7): [True: 0, False: 0]
  ------------------
  358|      0|      x->larger = root->larger;
  359|      0|    }
  360|  2.53k|  }
  361|  2.53k|  removenode->registered = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  362|  2.53k|  *newroot = x; /* return new root */
  363|  2.53k|  return 0;
  364|  2.53k|}

Curl_strntolower:
   93|  8.62k|{
   94|  8.62k|  if(n < 1)
  ------------------
  |  Branch (94:6): [True: 0, False: 8.62k]
  ------------------
   95|      0|    return;
   96|       |
   97|  88.3k|  do {
   98|  88.3k|    *dest++ = Curl_raw_tolower(*src);
   99|  88.3k|  } while(*src++ && --n);
  ------------------
  |  Branch (99:11): [True: 88.3k, False: 0]
  |  Branch (99:21): [True: 79.7k, False: 8.62k]
  ------------------
  100|  8.62k|}

protocol.c:Curl_raw_tolower:
   43|  47.0k|{
   44|  47.0k|  return (char)Curl_tolowermap[(unsigned char)in];
   45|  47.0k|}
strcase.c:Curl_raw_tolower:
   43|  88.3k|{
   44|  88.3k|  return (char)Curl_tolowermap[(unsigned char)in];
   45|  88.3k|}
strequal.c:Curl_raw_toupper:
   38|   162k|{
   39|   162k|  return (char)Curl_touppermap[(unsigned char)in];
   40|   162k|}
urlapi.c:Curl_raw_tolower:
   43|    661|{
   44|    661|  return (char)Curl_tolowermap[(unsigned char)in];
   45|    661|}

curl_strequal:
   77|  13.3k|{
   78|  13.3k|  if(s1 && s2)
  ------------------
  |  Branch (78:6): [True: 13.3k, False: 1]
  |  Branch (78:12): [True: 13.3k, False: 0]
  ------------------
   79|       |    /* both pointers point to something then compare them */
   80|  13.3k|    return casecompare(s1, s2);
   81|       |
   82|       |  /* if both pointers are NULL then treat them as equal */
   83|      1|  return NULL == s1 && NULL == s2;
  ------------------
  |  Branch (83:10): [True: 1, False: 0]
  |  Branch (83:24): [True: 1, False: 0]
  ------------------
   84|  13.3k|}
curl_strnequal:
   88|  14.7k|{
   89|  14.7k|  if(s1 && s2)
  ------------------
  |  Branch (89:6): [True: 14.7k, False: 0]
  |  Branch (89:12): [True: 14.7k, False: 0]
  ------------------
   90|       |    /* both pointers point to something then compare them */
   91|  14.7k|    return ncasecompare(s1, s2, n);
   92|       |
   93|       |  /* if both pointers are NULL then treat them as equal if max is non-zero */
   94|      0|  return NULL == s1 && NULL == s2 && n;
  ------------------
  |  Branch (94:10): [True: 0, False: 0]
  |  Branch (94:24): [True: 0, False: 0]
  |  Branch (94:38): [True: 0, False: 0]
  ------------------
   95|  14.7k|}
strequal.c:casecompare:
   36|  13.3k|{
   37|  16.8k|  while(*first) {
  ------------------
  |  Branch (37:9): [True: 16.8k, False: 2]
  ------------------
   38|  16.8k|    if(Curl_raw_toupper(*first) != Curl_raw_toupper(*second))
  ------------------
  |  Branch (38:8): [True: 13.3k, False: 3.55k]
  ------------------
   39|       |      /* get out of the loop as soon as they do not match */
   40|  13.3k|      return 0;
   41|  3.55k|    first++;
   42|  3.55k|    second++;
   43|  3.55k|  }
   44|       |  /* If we are here either the strings are the same or the length is different.
   45|       |     We can test if the "current" character is non-zero for one and zero
   46|       |     for the other. Note that the characters may not be exactly the same even
   47|       |     if they match, we only want to compare zero-ness. */
   48|      2|  return !*first == !*second;
   49|  13.3k|}
strequal.c:ncasecompare:
   52|  14.7k|{
   53|  76.8k|  while(*first && max) {
  ------------------
  |  Branch (53:9): [True: 65.3k, False: 11.5k]
  |  Branch (53:19): [True: 64.5k, False: 726]
  ------------------
   54|  64.5k|    if(Curl_raw_toupper(*first) != Curl_raw_toupper(*second))
  ------------------
  |  Branch (54:8): [True: 2.54k, False: 62.0k]
  ------------------
   55|  2.54k|      return 0;
   56|  62.0k|    max--;
   57|  62.0k|    first++;
   58|  62.0k|    second++;
   59|  62.0k|  }
   60|  12.2k|  if(max == 0)
  ------------------
  |  Branch (60:6): [True: 12.2k, False: 0]
  ------------------
   61|  12.2k|    return 1; /* they are equal this far */
   62|       |
   63|      0|  return Curl_raw_toupper(*first) == Curl_raw_toupper(*second);
   64|  12.2k|}

curl_url_strerror:
  421|    354|{
  422|    354|#ifdef CURLVERBOSE
  423|    354|  switch(error) {
  ------------------
  |  Branch (423:10): [True: 354, False: 0]
  ------------------
  424|      0|  case CURLUE_OK:
  ------------------
  |  Branch (424:3): [True: 0, False: 354]
  ------------------
  425|      0|    return "No error";
  426|       |
  427|      0|  case CURLUE_BAD_HANDLE:
  ------------------
  |  Branch (427:3): [True: 0, False: 354]
  ------------------
  428|      0|    return "An invalid CURLU pointer was passed as argument";
  429|       |
  430|      0|  case CURLUE_BAD_PARTPOINTER:
  ------------------
  |  Branch (430:3): [True: 0, False: 354]
  ------------------
  431|      0|    return "An invalid 'part' argument was passed as argument";
  432|       |
  433|     19|  case CURLUE_MALFORMED_INPUT:
  ------------------
  |  Branch (433:3): [True: 19, False: 335]
  ------------------
  434|     19|    return "Malformed input to a URL function";
  435|       |
  436|     14|  case CURLUE_BAD_PORT_NUMBER:
  ------------------
  |  Branch (436:3): [True: 14, False: 340]
  ------------------
  437|     14|    return "Port number was not a decimal number between 0 and 65535";
  438|       |
  439|      0|  case CURLUE_UNSUPPORTED_SCHEME:
  ------------------
  |  Branch (439:3): [True: 0, False: 354]
  ------------------
  440|      0|    return "Unsupported URL scheme";
  441|       |
  442|      0|  case CURLUE_URLDECODE:
  ------------------
  |  Branch (442:3): [True: 0, False: 354]
  ------------------
  443|      0|    return "URL decode error, most likely because of rubbish in the input";
  444|       |
  445|      0|  case CURLUE_OUT_OF_MEMORY:
  ------------------
  |  Branch (445:3): [True: 0, False: 354]
  ------------------
  446|      0|    return "A memory function failed";
  447|       |
  448|      0|  case CURLUE_USER_NOT_ALLOWED:
  ------------------
  |  Branch (448:3): [True: 0, False: 354]
  ------------------
  449|      0|    return "Credentials was passed in the URL when prohibited";
  450|       |
  451|      0|  case CURLUE_UNKNOWN_PART:
  ------------------
  |  Branch (451:3): [True: 0, False: 354]
  ------------------
  452|      0|    return "An unknown part ID was passed to a URL API function";
  453|       |
  454|      0|  case CURLUE_NO_SCHEME:
  ------------------
  |  Branch (454:3): [True: 0, False: 354]
  ------------------
  455|      0|    return "No scheme present";
  456|       |
  457|      0|  case CURLUE_NO_USER:
  ------------------
  |  Branch (457:3): [True: 0, False: 354]
  ------------------
  458|      0|    return "No user present";
  459|       |
  460|      0|  case CURLUE_NO_PASSWORD:
  ------------------
  |  Branch (460:3): [True: 0, False: 354]
  ------------------
  461|      0|    return "No password present";
  462|       |
  463|      0|  case CURLUE_NO_OPTIONS:
  ------------------
  |  Branch (463:3): [True: 0, False: 354]
  ------------------
  464|      0|    return "No options present";
  465|       |
  466|     43|  case CURLUE_NO_HOST:
  ------------------
  |  Branch (466:3): [True: 43, False: 311]
  ------------------
  467|     43|    return "No host present";
  468|       |
  469|      0|  case CURLUE_NO_PORT:
  ------------------
  |  Branch (469:3): [True: 0, False: 354]
  ------------------
  470|      0|    return "No port number present";
  471|       |
  472|      0|  case CURLUE_NO_QUERY:
  ------------------
  |  Branch (472:3): [True: 0, False: 354]
  ------------------
  473|      0|    return "No query present";
  474|       |
  475|      0|  case CURLUE_NO_FRAGMENT:
  ------------------
  |  Branch (475:3): [True: 0, False: 354]
  ------------------
  476|      0|    return "No fragment present";
  477|       |
  478|      0|  case CURLUE_NO_ZONEID:
  ------------------
  |  Branch (478:3): [True: 0, False: 354]
  ------------------
  479|      0|    return "No zoneid present";
  480|       |
  481|      0|  case CURLUE_BAD_LOGIN:
  ------------------
  |  Branch (481:3): [True: 0, False: 354]
  ------------------
  482|      0|    return "Bad login";
  483|       |
  484|     75|  case CURLUE_BAD_IPV6:
  ------------------
  |  Branch (484:3): [True: 75, False: 279]
  ------------------
  485|     75|    return "Bad IPv6 address";
  486|       |
  487|    202|  case CURLUE_BAD_HOSTNAME:
  ------------------
  |  Branch (487:3): [True: 202, False: 152]
  ------------------
  488|    202|    return "Bad hostname";
  489|       |
  490|      0|  case CURLUE_BAD_FILE_URL:
  ------------------
  |  Branch (490:3): [True: 0, False: 354]
  ------------------
  491|      0|    return "Bad file:// URL";
  492|       |
  493|      1|  case CURLUE_BAD_SLASHES:
  ------------------
  |  Branch (493:3): [True: 1, False: 353]
  ------------------
  494|      1|    return "Unsupported number of slashes following scheme";
  495|       |
  496|      0|  case CURLUE_BAD_SCHEME:
  ------------------
  |  Branch (496:3): [True: 0, False: 354]
  ------------------
  497|      0|    return "Bad scheme";
  498|       |
  499|      0|  case CURLUE_BAD_PATH:
  ------------------
  |  Branch (499:3): [True: 0, False: 354]
  ------------------
  500|      0|    return "Bad path";
  501|       |
  502|      0|  case CURLUE_BAD_FRAGMENT:
  ------------------
  |  Branch (502:3): [True: 0, False: 354]
  ------------------
  503|      0|    return "Bad fragment";
  504|       |
  505|      0|  case CURLUE_BAD_QUERY:
  ------------------
  |  Branch (505:3): [True: 0, False: 354]
  ------------------
  506|      0|    return "Bad query";
  507|       |
  508|      0|  case CURLUE_BAD_PASSWORD:
  ------------------
  |  Branch (508:3): [True: 0, False: 354]
  ------------------
  509|      0|    return "Bad password";
  510|       |
  511|      0|  case CURLUE_BAD_USER:
  ------------------
  |  Branch (511:3): [True: 0, False: 354]
  ------------------
  512|      0|    return "Bad user";
  513|       |
  514|      0|  case CURLUE_LACKS_IDN:
  ------------------
  |  Branch (514:3): [True: 0, False: 354]
  ------------------
  515|      0|    return "libcurl lacks IDN support";
  516|       |
  517|      0|  case CURLUE_TOO_LARGE:
  ------------------
  |  Branch (517:3): [True: 0, False: 354]
  ------------------
  518|      0|    return "A value or data field is larger than allowed";
  519|       |
  520|      0|  case CURLUE_BACKSLASH:
  ------------------
  |  Branch (520:3): [True: 0, False: 354]
  ------------------
  521|      0|    return "Found a backslash where a forward slash was expected";
  522|       |
  523|      0|  case CURLUE_LAST:
  ------------------
  |  Branch (523:3): [True: 0, False: 354]
  ------------------
  524|      0|    break;
  525|    354|  }
  526|       |
  527|      0|  return "CURLUcode unknown";
  528|       |#else
  529|       |  if(error == CURLUE_OK)
  530|       |    return "No error";
  531|       |  else
  532|       |    return "Error";
  533|       |#endif
  534|    354|}

telnet.c:telnet_do:
 1220|  2.03k|{
 1221|  2.03k|  CURLcode result;
 1222|  2.03k|  struct connectdata *conn = data->conn;
 1223|  2.03k|  curl_socket_t sockfd = conn->sock[FIRSTSOCKET];
  ------------------
  |  |  234|  2.03k|#define FIRSTSOCKET     0
  ------------------
 1224|       |#ifdef USE_WINSOCK
 1225|       |  WSAEVENT event_handle;
 1226|       |  WSANETWORKEVENTS events;
 1227|       |  HANDLE stdin_handle;
 1228|       |  HANDLE objs[2];
 1229|       |  DWORD obj_count;
 1230|       |  DWORD wait_timeout;
 1231|       |  DWORD readfile_read;
 1232|       |#else
 1233|  2.03k|  timediff_t interval_ms;
 1234|  2.03k|  struct pollfd pfd[2];
 1235|  2.03k|  int poll_cnt;
 1236|  2.03k|  ssize_t snread;
 1237|  2.03k|#endif
 1238|  2.03k|  bool keepon = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
 1239|  2.03k|  char buffer[4 * 1024];
 1240|  2.03k|  struct TELNET *tn;
 1241|       |
 1242|  2.03k|  *done = TRUE; /* unconditionally */
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
 1243|       |
 1244|  2.03k|  result = init_telnet(data);
 1245|  2.03k|  if(result)
  ------------------
  |  Branch (1245:6): [True: 0, False: 2.03k]
  ------------------
 1246|      0|    return result;
 1247|       |
 1248|  2.03k|  tn = Curl_meta_get(data, CURL_META_TELNET_EASY);
  ------------------
  |  |   91|  2.03k|#define CURL_META_TELNET_EASY   "meta:proto:telnet:easy"
  ------------------
 1249|  2.03k|  if(!tn)
  ------------------
  |  Branch (1249:6): [True: 0, False: 2.03k]
  ------------------
 1250|      0|    return CURLE_FAILED_INIT;
 1251|       |
 1252|  2.03k|  result = check_telnet_options(data, tn);
 1253|  2.03k|  if(result)
  ------------------
  |  Branch (1253:6): [True: 111, False: 1.92k]
  ------------------
 1254|    111|    return result;
 1255|       |
 1256|       |#ifdef USE_WINSOCK
 1257|       |  /* We want to wait for both stdin and the socket. Since
 1258|       |   * the select() function in Winsock only works on sockets
 1259|       |   * we have to use the WaitForMultipleObjects() call.
 1260|       |   */
 1261|       |
 1262|       |  /* First, create a sockets event object */
 1263|       |  event_handle = WSACreateEvent();
 1264|       |  if(event_handle == WSA_INVALID_EVENT) {
 1265|       |    failf(data, "WSACreateEvent failed (%d)", SOCKERRNO);
 1266|       |    return CURLE_FAILED_INIT;
 1267|       |  }
 1268|       |
 1269|       |  /* Tell Winsock what events we want to listen to */
 1270|       |  if(WSAEventSelect(sockfd, event_handle, FD_READ | FD_CLOSE) != 0) {
 1271|       |    WSACloseEvent(event_handle);
 1272|       |    return CURLE_RECV_ERROR;
 1273|       |  }
 1274|       |
 1275|       |  /* Then get the Windows file handle for stdin */
 1276|       |  stdin_handle = GetStdHandle(STD_INPUT_HANDLE);
 1277|       |
 1278|       |  /* Create the list of objects to wait for */
 1279|       |  objs[0] = event_handle;
 1280|       |  objs[1] = stdin_handle;
 1281|       |
 1282|       |  /* If stdin_handle is a pipe, use PeekNamedPipe() method to check it,
 1283|       |     else use the old WaitForMultipleObjects() way */
 1284|       |  if(GetFileType(stdin_handle) == FILE_TYPE_PIPE || data->set.is_fread_set) {
 1285|       |    /* Do not wait for stdin_handle, wait for event_handle */
 1286|       |    obj_count = 1;
 1287|       |    /* Check stdin_handle per 100 milliseconds */
 1288|       |    wait_timeout = 100;
 1289|       |  }
 1290|       |  else {
 1291|       |    obj_count = 2;
 1292|       |    wait_timeout = 1000;
 1293|       |  }
 1294|       |
 1295|       |  /* Keep on listening and act on events */
 1296|       |  while(keepon) {
 1297|       |    const DWORD buf_size = (DWORD)sizeof(buffer);
 1298|       |    DWORD waitret = WaitForMultipleObjects(obj_count, objs,
 1299|       |                                           FALSE, wait_timeout);
 1300|       |    switch(waitret) {
 1301|       |
 1302|       |    case WAIT_TIMEOUT: {
 1303|       |      for(;;) {
 1304|       |        if(data->set.is_fread_set) {
 1305|       |          size_t n;
 1306|       |          /* read from user-supplied method */
 1307|       |          n = data->state.fread_func(buffer, 1, buf_size, data->state.in);
 1308|       |          if(n == CURL_READFUNC_ABORT) {
 1309|       |            keepon = FALSE;
 1310|       |            result = CURLE_READ_ERROR;
 1311|       |            break;
 1312|       |          }
 1313|       |
 1314|       |          if(n == CURL_READFUNC_PAUSE)
 1315|       |            break;
 1316|       |
 1317|       |          if(n == 0)                        /* no bytes */
 1318|       |            break;
 1319|       |
 1320|       |          /* fall through with number of bytes read */
 1321|       |          readfile_read = (DWORD)n;
 1322|       |        }
 1323|       |        else {
 1324|       |          /* read from stdin */
 1325|       |          if(!PeekNamedPipe(stdin_handle, NULL, 0, NULL,
 1326|       |                            &readfile_read, NULL)) {
 1327|       |            keepon = FALSE;
 1328|       |            result = CURLE_READ_ERROR;
 1329|       |            break;
 1330|       |          }
 1331|       |
 1332|       |          if(!readfile_read)
 1333|       |            break;
 1334|       |
 1335|       |          if(!ReadFile(stdin_handle, buffer, buf_size, &readfile_read, NULL)) {
 1336|       |            keepon = FALSE;
 1337|       |            result = CURLE_READ_ERROR;
 1338|       |            break;
 1339|       |          }
 1340|       |        }
 1341|       |
 1342|       |        result = send_telnet_data(data, tn, buffer, readfile_read);
 1343|       |        if(result) {
 1344|       |          keepon = FALSE;
 1345|       |          break;
 1346|       |        }
 1347|       |      }
 1348|       |    }
 1349|       |    break;
 1350|       |
 1351|       |    case WAIT_OBJECT_0 + 1: {
 1352|       |      if(!ReadFile(stdin_handle, buffer, buf_size, &readfile_read, NULL)) {
 1353|       |        keepon = FALSE;
 1354|       |        result = CURLE_READ_ERROR;
 1355|       |        break;
 1356|       |      }
 1357|       |
 1358|       |      result = send_telnet_data(data, tn, buffer, readfile_read);
 1359|       |      if(result) {
 1360|       |        keepon = FALSE;
 1361|       |        break;
 1362|       |      }
 1363|       |    }
 1364|       |    break;
 1365|       |
 1366|       |    case WAIT_OBJECT_0: {
 1367|       |      events.lNetworkEvents = 0;
 1368|       |      if(WSAEnumNetworkEvents(sockfd, event_handle, &events) != 0) {
 1369|       |        int sockerr = SOCKERRNO;
 1370|       |        if(sockerr != SOCKEINPROGRESS) {
 1371|       |          infof(data, "WSAEnumNetworkEvents failed (%d)", sockerr);
 1372|       |          keepon = FALSE;
 1373|       |          result = CURLE_READ_ERROR;
 1374|       |        }
 1375|       |        break;
 1376|       |      }
 1377|       |      if(events.lNetworkEvents & FD_READ) {
 1378|       |        /* read data from network */
 1379|       |        size_t nread;
 1380|       |        result = Curl_xfer_recv(data, buffer, sizeof(buffer), &nread);
 1381|       |        /* read would have blocked. Loop again */
 1382|       |        if(result == CURLE_AGAIN)
 1383|       |          break;
 1384|       |        /* returned not-zero, this an error */
 1385|       |        else if(result) {
 1386|       |          keepon = FALSE;
 1387|       |          break;
 1388|       |        }
 1389|       |        /* returned zero but actually received 0 or less here,
 1390|       |           the server closed the connection and we bail out */
 1391|       |        else if(!nread) {
 1392|       |          keepon = FALSE;
 1393|       |          break;
 1394|       |        }
 1395|       |
 1396|       |        result = telrcv(data, tn, (unsigned char *)buffer, nread);
 1397|       |        if(result) {
 1398|       |          keepon = FALSE;
 1399|       |          break;
 1400|       |        }
 1401|       |
 1402|       |        /* Negotiate if the peer has started negotiating,
 1403|       |           otherwise do not. We do not want to speak telnet with
 1404|       |           non-telnet servers, like POP or SMTP. */
 1405|       |        if(tn->please_negotiate && !tn->already_negotiated) {
 1406|       |          telnet_negotiate(data, tn);
 1407|       |          tn->already_negotiated = 1;
 1408|       |        }
 1409|       |      }
 1410|       |      if(events.lNetworkEvents & FD_CLOSE) {
 1411|       |        keepon = FALSE;
 1412|       |      }
 1413|       |      break;
 1414|       |    }
 1415|       |    } /* switch */
 1416|       |
 1417|       |    if(data->set.timeout) {
 1418|       |      if(curlx_ptimediff_ms(Curl_pgrs_now(data), &conn->created) >=
 1419|       |         data->set.timeout) {
 1420|       |        failf(data, "Time-out");
 1421|       |        result = CURLE_OPERATION_TIMEDOUT;
 1422|       |        keepon = FALSE;
 1423|       |      }
 1424|       |    }
 1425|       |  }
 1426|       |
 1427|       |  /* We called WSACreateEvent, so call WSACloseEvent */
 1428|       |  if(!WSACloseEvent(event_handle)) {
 1429|       |    infof(data, "WSACloseEvent failed (%d)", SOCKERRNO);
 1430|       |  }
 1431|       |#else
 1432|  1.92k|  pfd[0].fd = sockfd;
 1433|  1.92k|  pfd[0].events = POLLIN;
 1434|       |
 1435|  1.92k|  if(data->set.is_fread_set) {
  ------------------
  |  Branch (1435:6): [True: 1.92k, False: 0]
  ------------------
 1436|  1.92k|    poll_cnt = 1;
 1437|  1.92k|    interval_ms = 100; /* poll user-supplied read function */
 1438|  1.92k|  }
 1439|      0|  else {
 1440|       |    /* really using fread, so infile is a FILE* */
 1441|      0|    pfd[1].fd = fileno((FILE *)data->state.in);
 1442|      0|    pfd[1].events = POLLIN;
 1443|      0|    poll_cnt = 2;
 1444|      0|    interval_ms = 1 * 1000;
 1445|      0|    if(pfd[1].fd < 0) {
  ------------------
  |  Branch (1445:8): [True: 0, False: 0]
  ------------------
 1446|      0|      failf(data, "cannot read input");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
 1447|      0|      result = CURLE_RECV_ERROR;
 1448|      0|      keepon = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 1449|      0|    }
 1450|      0|  }
 1451|       |
 1452|  4.78k|  while(keepon) {
  ------------------
  |  Branch (1452:9): [True: 2.86k, False: 1.92k]
  ------------------
 1453|  2.86k|    DEBUGF(infof(data, "telnet_do, poll %d fds", poll_cnt));
  ------------------
  |  | 1061|  28.6k|#define DEBUGF(x) x
  |  |  ------------------
  |  |  |  Branch (1061:19): [True: 2.86k, False: 0]
  |  |  |  Branch (1061:19): [True: 2.86k, False: 0]
  |  |  |  Branch (1061:19): [True: 2.86k, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [Folded, False: 2.86k]
  |  |  ------------------
  ------------------
 1454|  2.86k|    switch(Curl_poll(pfd, (unsigned int)poll_cnt, interval_ms)) {
 1455|      0|    case -1:                    /* error, stop reading */
  ------------------
  |  Branch (1455:5): [True: 0, False: 2.86k]
  ------------------
 1456|      0|      keepon = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 1457|      0|      continue;
 1458|      0|    case 0:                     /* timeout */
  ------------------
  |  Branch (1458:5): [True: 0, False: 2.86k]
  ------------------
 1459|      0|      pfd[0].revents = 0;
 1460|      0|      pfd[1].revents = 0;
 1461|      0|      FALLTHROUGH();
  ------------------
  |  |  815|      0|#  define FALLTHROUGH()  __attribute__((fallthrough))
  ------------------
 1462|  2.86k|    default:                    /* read! */
  ------------------
  |  Branch (1462:5): [True: 2.86k, False: 0]
  ------------------
 1463|  2.86k|      if(pfd[0].revents & POLLIN) {
  ------------------
  |  Branch (1463:10): [True: 2.86k, False: 0]
  ------------------
 1464|       |        /* read data from network */
 1465|  2.86k|        size_t nread;
 1466|  2.86k|        result = Curl_xfer_recv(data, buffer, sizeof(buffer), &nread);
 1467|       |        /* read would have blocked. Loop again */
 1468|  2.86k|        if(result == CURLE_AGAIN)
  ------------------
  |  Branch (1468:12): [True: 0, False: 2.86k]
  ------------------
 1469|      0|          break;
 1470|       |        /* returned not-zero, this an error */
 1471|  2.86k|        if(result) {
  ------------------
  |  Branch (1471:12): [True: 0, False: 2.86k]
  ------------------
 1472|      0|          keepon = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 1473|       |          /* In test 1452, macOS sees a ECONNRESET sometimes? Is this the
 1474|       |           * telnet test server not shutting down the socket in a clean way?
 1475|       |           * Seems to be timing related, happens more on slow debug build */
 1476|      0|          if(data->state.os_errno == SOCKECONNRESET) {
  ------------------
  |  | 1121|      0|#define SOCKECONNRESET    ECONNRESET
  ------------------
  |  Branch (1476:14): [True: 0, False: 0]
  ------------------
 1477|      0|            DEBUGF(infof(data, "telnet_do, unexpected ECONNRESET on recv"));
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  |  |  ------------------
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1478|      0|          }
 1479|      0|          break;
 1480|      0|        }
 1481|       |        /* returned zero but actually received 0 or less here,
 1482|       |           the server closed the connection and we bail out */
 1483|  2.86k|        else if(!nread) {
  ------------------
  |  Branch (1483:17): [True: 1.85k, False: 1.01k]
  ------------------
 1484|  1.85k|          keepon = FALSE;
  ------------------
  |  | 1048|  1.85k|#define FALSE false
  ------------------
 1485|  1.85k|          break;
 1486|  1.85k|        }
 1487|       |
 1488|  1.01k|        Curl_pgrs_download_inc(data, nread);
 1489|  1.01k|        result = telrcv(data, tn, (unsigned char *)buffer, nread);
 1490|  1.01k|        if(result) {
  ------------------
  |  Branch (1490:12): [True: 64, False: 946]
  ------------------
 1491|     64|          keepon = FALSE;
  ------------------
  |  | 1048|     64|#define FALSE false
  ------------------
 1492|     64|          break;
 1493|     64|        }
 1494|       |
 1495|       |        /* Negotiate if the peer has started negotiating,
 1496|       |           otherwise do not. We do not want to speak telnet with
 1497|       |           non-telnet servers, like POP or SMTP. */
 1498|    946|        if(tn->please_negotiate && !tn->already_negotiated) {
  ------------------
  |  Branch (1498:12): [True: 306, False: 640]
  |  Branch (1498:36): [True: 273, False: 33]
  ------------------
 1499|    273|          telnet_negotiate(data, tn);
 1500|    273|          tn->already_negotiated = 1;
 1501|    273|        }
 1502|    946|      }
 1503|       |
 1504|    946|      snread = 0;
 1505|    946|      if(poll_cnt == 2) {
  ------------------
  |  Branch (1505:10): [True: 0, False: 946]
  ------------------
 1506|      0|        if(pfd[1].revents & POLLIN) { /* read from in file */
  ------------------
  |  Branch (1506:12): [True: 0, False: 0]
  ------------------
 1507|      0|          snread = read(pfd[1].fd, buffer, sizeof(buffer));
 1508|      0|        }
 1509|      0|      }
 1510|    946|      else {
 1511|       |        /* read from user-supplied method */
 1512|    946|        snread = (int)data->state.fread_func(buffer, 1, sizeof(buffer),
 1513|    946|                                             data->state.in);
 1514|    946|        if(snread == CURL_READFUNC_ABORT) {
  ------------------
  |  |  392|    946|#define CURL_READFUNC_ABORT 0x10000000
  ------------------
  |  Branch (1514:12): [True: 8, False: 938]
  ------------------
 1515|      8|          keepon = FALSE;
  ------------------
  |  | 1048|      8|#define FALSE false
  ------------------
 1516|      8|          break;
 1517|      8|        }
 1518|    938|        if(snread == CURL_READFUNC_PAUSE)
  ------------------
  |  |  395|    938|#define CURL_READFUNC_PAUSE 0x10000001
  ------------------
  |  Branch (1518:12): [True: 7, False: 931]
  ------------------
 1519|      7|          break;
 1520|    938|      }
 1521|       |
 1522|    931|      if(snread > 0) {
  ------------------
  |  Branch (1522:10): [True: 137, False: 794]
  ------------------
 1523|    137|        result = send_telnet_data(data, tn, buffer, snread);
 1524|    137|        if(result) {
  ------------------
  |  Branch (1524:12): [True: 0, False: 137]
  ------------------
 1525|      0|          keepon = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 1526|      0|          break;
 1527|      0|        }
 1528|    137|        Curl_pgrs_upload_inc(data, (size_t)snread);
 1529|    137|      }
 1530|    794|      else if(snread < 0)
  ------------------
  |  Branch (1530:15): [True: 0, False: 794]
  ------------------
 1531|      0|        keepon = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 1532|       |
 1533|    931|      break;
 1534|  2.86k|    } /* poll switch statement */
 1535|       |
 1536|  2.86k|    if(data->set.timeout) {
  ------------------
  |  Branch (1536:8): [True: 2.86k, False: 0]
  ------------------
 1537|  2.86k|      if(curlx_ptimediff_ms(Curl_pgrs_now(data), &conn->created) >=
  ------------------
  |  Branch (1537:10): [True: 0, False: 2.86k]
  ------------------
 1538|  2.86k|         data->set.timeout) {
 1539|      0|        failf(data, "Time-out");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
 1540|      0|        result = CURLE_OPERATION_TIMEDOUT;
 1541|      0|        keepon = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 1542|      0|      }
 1543|  2.86k|    }
 1544|       |
 1545|  2.86k|    if(!result) {
  ------------------
  |  Branch (1545:8): [True: 2.79k, False: 64]
  ------------------
 1546|  2.79k|      result = Curl_pgrsUpdate(data);
 1547|  2.79k|      if(result)
  ------------------
  |  Branch (1547:10): [True: 0, False: 2.79k]
  ------------------
 1548|      0|        keepon = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 1549|  2.79k|    }
 1550|  2.86k|  }
 1551|  1.92k|#endif
 1552|       |  /* mark this as "no further transfer wanted" */
 1553|  1.92k|  Curl_xfer_setup_nop(data);
 1554|       |
 1555|  1.92k|  return result;
 1556|  1.92k|}
telnet.c:init_telnet:
  181|  2.03k|{
  182|  2.03k|  struct TELNET *tn;
  183|       |
  184|  2.03k|  tn = curlx_calloc(1, sizeof(struct TELNET));
  ------------------
  |  | 1473|  2.03k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
  185|  2.03k|  if(!tn)
  ------------------
  |  Branch (185:6): [True: 0, False: 2.03k]
  ------------------
  186|      0|    return CURLE_OUT_OF_MEMORY;
  187|       |
  188|  2.03k|  curlx_dyn_init(&tn->out, 0xffff);
  189|       |
  190|  2.03k|  tn->telrcv_state = CURL_TS_DATA;
  191|       |
  192|       |  /* Init suboptions */
  193|  2.03k|  CURL_SB_CLEAR(tn);
  ------------------
  |  |   62|  2.03k|#define CURL_SB_CLEAR(x) (x)->subpointer = (x)->subbuffer
  ------------------
  194|       |
  195|       |  /* Set the options we want by default */
  196|  2.03k|  tn->us_preferred[CURL_TELOPT_SGA] = CURL_YES;
  ------------------
  |  |   32|  2.03k|#define CURL_TELOPT_SGA         3   /* Suppress Go Ahead */
  ------------------
                tn->us_preferred[CURL_TELOPT_SGA] = CURL_YES;
  ------------------
  |  |   83|  2.03k|#define CURL_YES         1
  ------------------
  197|  2.03k|  tn->him_preferred[CURL_TELOPT_SGA] = CURL_YES;
  ------------------
  |  |   32|  2.03k|#define CURL_TELOPT_SGA         3   /* Suppress Go Ahead */
  ------------------
                tn->him_preferred[CURL_TELOPT_SGA] = CURL_YES;
  ------------------
  |  |   83|  2.03k|#define CURL_YES         1
  ------------------
  198|       |
  199|       |  /* To be compliant with previous releases of libcurl we enable this option
  200|       |     by default. This behavior can be changed with the "BINARY" option in
  201|       |     CURLOPT_TELNETOPTIONS */
  202|  2.03k|  tn->us_preferred[CURL_TELOPT_BINARY] = CURL_YES;
  ------------------
  |  |   30|  2.03k|#define CURL_TELOPT_BINARY      0   /* binary 8-bit data */
  ------------------
                tn->us_preferred[CURL_TELOPT_BINARY] = CURL_YES;
  ------------------
  |  |   83|  2.03k|#define CURL_YES         1
  ------------------
  203|  2.03k|  tn->him_preferred[CURL_TELOPT_BINARY] = CURL_YES;
  ------------------
  |  |   30|  2.03k|#define CURL_TELOPT_BINARY      0   /* binary 8-bit data */
  ------------------
                tn->him_preferred[CURL_TELOPT_BINARY] = CURL_YES;
  ------------------
  |  |   83|  2.03k|#define CURL_YES         1
  ------------------
  204|       |
  205|       |  /* We must allow the server to echo what we sent but it is not necessary
  206|       |     to request the server to do so (it might force the server to close
  207|       |     the connection). Hence, we ignore ECHO in the negotiate function */
  208|  2.03k|  tn->him_preferred[CURL_TELOPT_ECHO] = CURL_YES;
  ------------------
  |  |   31|  2.03k|#define CURL_TELOPT_ECHO        1   /* echo */
  ------------------
                tn->him_preferred[CURL_TELOPT_ECHO] = CURL_YES;
  ------------------
  |  |   83|  2.03k|#define CURL_YES         1
  ------------------
  209|       |
  210|       |  /* Set the subnegotiation fields to send information after negotiation
  211|       |     passed (do/will)
  212|       |
  213|       |     Default values are (0,0) initialized by calloc.
  214|       |     According to the RFC1013 it is valid:
  215|       |     A value equal to zero is acceptable for the width (or height), and means
  216|       |     that no character width (or height) is being sent. In this case, the width
  217|       |     (or height) that will be assumed by the Telnet server is operating system
  218|       |     specific (it will probably be based upon the terminal type information
  219|       |     that may have been sent using the TERMINAL TYPE Telnet option). */
  220|  2.03k|  tn->subnegotiation[CURL_TELOPT_NAWS] = CURL_YES;
  ------------------
  |  |   35|  2.03k|#define CURL_TELOPT_NAWS        31  /* Negotiate About Window Size */
  ------------------
                tn->subnegotiation[CURL_TELOPT_NAWS] = CURL_YES;
  ------------------
  |  |   83|  2.03k|#define CURL_YES         1
  ------------------
  221|       |
  222|  2.03k|  return Curl_meta_set(data, CURL_META_TELNET_EASY, tn, telnet_easy_dtor);
  ------------------
  |  |   91|  2.03k|#define CURL_META_TELNET_EASY   "meta:proto:telnet:easy"
  ------------------
  223|  2.03k|}
telnet.c:telnet_easy_dtor:
  171|  2.03k|{
  172|  2.03k|  struct TELNET *tn = entry;
  173|  2.03k|  (void)key;
  174|  2.03k|  (void)klen;
  175|  2.03k|  curl_slist_free_all(tn->telnet_vars);
  176|  2.03k|  curlx_dyn_free(&tn->out);
  177|  2.03k|  curlx_free(tn);
  ------------------
  |  | 1476|  2.03k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  178|  2.03k|}
telnet.c:check_telnet_options:
  830|  2.03k|{
  831|  2.03k|  struct curl_slist *head;
  832|  2.03k|  struct curl_slist *beg;
  833|  2.03k|  CURLcode result = CURLE_OK;
  834|       |
  835|       |  /* Add the username as an environment variable if it
  836|       |     was given on the command line */
  837|  2.03k|  if(data->state.creds) {
  ------------------
  |  Branch (837:6): [True: 171, False: 1.86k]
  ------------------
  838|    171|    char buffer[256];
  839|    171|    if(str_is_nonascii(Curl_creds_user(data->conn->creds))) {
  ------------------
  |  |   81|    171|#define Curl_creds_user(c)               ((c) ? (c)->user : "")
  |  |  ------------------
  |  |  |  Branch (81:43): [True: 171, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (839:8): [True: 20, False: 151]
  ------------------
  840|     20|      DEBUGF(infof(data, "set a non ASCII username in telnet"));
  ------------------
  |  | 1061|    200|#define DEBUGF(x) x
  |  |  ------------------
  |  |  |  Branch (1061:19): [True: 20, False: 0]
  |  |  |  Branch (1061:19): [True: 20, False: 0]
  |  |  |  Branch (1061:19): [True: 20, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [Folded, False: 20]
  |  |  ------------------
  ------------------
  841|     20|      return CURLE_BAD_FUNCTION_ARGUMENT;
  842|     20|    }
  843|    151|    curl_msnprintf(buffer, sizeof(buffer), "USER,%s",
  844|    151|                   Curl_creds_user(data->conn->creds));
  ------------------
  |  |   81|    151|#define Curl_creds_user(c)               ((c) ? (c)->user : "")
  |  |  ------------------
  |  |  |  Branch (81:43): [True: 151, False: 0]
  |  |  ------------------
  ------------------
  845|    151|    beg = curl_slist_append(tn->telnet_vars, buffer);
  846|    151|    if(!beg) {
  ------------------
  |  Branch (846:8): [True: 0, False: 151]
  ------------------
  847|      0|      curl_slist_free_all(tn->telnet_vars);
  848|      0|      tn->telnet_vars = NULL;
  849|      0|      return CURLE_OUT_OF_MEMORY;
  850|      0|    }
  851|    151|    tn->telnet_vars = beg;
  852|    151|    tn->us_preferred[CURL_TELOPT_NEW_ENVIRON] = CURL_YES;
  ------------------
  |  |   37|    151|#define CURL_TELOPT_NEW_ENVIRON 39  /* NEW ENVIRONment variables */
  ------------------
                  tn->us_preferred[CURL_TELOPT_NEW_ENVIRON] = CURL_YES;
  ------------------
  |  |   83|    151|#define CURL_YES         1
  ------------------
  853|    151|  }
  854|       |
  855|  2.84k|  for(head = data->set.telnet_options; head && !result; head = head->next) {
  ------------------
  |  Branch (855:40): [True: 847, False: 1.99k]
  |  Branch (855:48): [True: 825, False: 22]
  ------------------
  856|    825|    size_t olen;
  857|    825|    const char *option = head->data;
  858|    825|    const char *arg;
  859|    825|    const char *sep = strchr(option, '=');
  860|    825|    if(sep) {
  ------------------
  |  Branch (860:8): [True: 771, False: 54]
  ------------------
  861|    771|      olen = sep - option;
  862|    771|      arg = ++sep;
  863|    771|      if(str_is_nonascii(arg))
  ------------------
  |  Branch (863:10): [True: 35, False: 736]
  ------------------
  864|     35|        continue;
  865|    736|      switch(olen) {
  866|     59|      case 5:
  ------------------
  |  Branch (866:7): [True: 59, False: 677]
  ------------------
  867|       |        /* Terminal type */
  868|     59|        if(curl_strnequal(option, "TTYPE", 5)) {
  ------------------
  |  Branch (868:12): [True: 58, False: 1]
  ------------------
  869|     58|          tn->subopt_ttype = arg;
  870|     58|          tn->us_preferred[CURL_TELOPT_TTYPE] = CURL_YES;
  ------------------
  |  |   34|     58|#define CURL_TELOPT_TTYPE       24  /* Terminal TYPE */
  ------------------
                        tn->us_preferred[CURL_TELOPT_TTYPE] = CURL_YES;
  ------------------
  |  |   83|     58|#define CURL_YES         1
  ------------------
  871|     58|          break;
  872|     58|        }
  873|      1|        result = CURLE_UNKNOWN_OPTION;
  874|      1|        break;
  875|       |
  876|     64|      case 8:
  ------------------
  |  Branch (876:7): [True: 64, False: 672]
  ------------------
  877|       |        /* Display variable */
  878|     64|        if(curl_strnequal(option, "XDISPLOC", 8)) {
  ------------------
  |  Branch (878:12): [True: 63, False: 1]
  ------------------
  879|     63|          tn->subopt_xdisploc = arg;
  880|     63|          tn->us_preferred[CURL_TELOPT_XDISPLOC] = CURL_YES;
  ------------------
  |  |   36|     63|#define CURL_TELOPT_XDISPLOC    35  /* X DISPlay LOCation */
  ------------------
                        tn->us_preferred[CURL_TELOPT_XDISPLOC] = CURL_YES;
  ------------------
  |  |   83|     63|#define CURL_YES         1
  ------------------
  881|     63|          break;
  882|     63|        }
  883|      1|        result = CURLE_UNKNOWN_OPTION;
  884|      1|        break;
  885|       |
  886|    403|      case 7:
  ------------------
  |  Branch (886:7): [True: 403, False: 333]
  ------------------
  887|       |        /* Environment variable */
  888|    403|        if(curl_strnequal(option, "NEW_ENV", 7)) {
  ------------------
  |  Branch (888:12): [True: 402, False: 1]
  ------------------
  889|    402|          beg = curl_slist_append(tn->telnet_vars, arg);
  890|    402|          if(!beg) {
  ------------------
  |  Branch (890:14): [True: 0, False: 402]
  ------------------
  891|      0|            result = CURLE_OUT_OF_MEMORY;
  892|      0|            break;
  893|      0|          }
  894|    402|          tn->telnet_vars = beg;
  895|    402|          tn->us_preferred[CURL_TELOPT_NEW_ENVIRON] = CURL_YES;
  ------------------
  |  |   37|    402|#define CURL_TELOPT_NEW_ENVIRON 39  /* NEW ENVIRONment variables */
  ------------------
                        tn->us_preferred[CURL_TELOPT_NEW_ENVIRON] = CURL_YES;
  ------------------
  |  |   83|    402|#define CURL_YES         1
  ------------------
  896|    402|        }
  897|      1|        else
  898|      1|          result = CURLE_UNKNOWN_OPTION;
  899|    403|        break;
  900|       |
  901|    403|      case 2:
  ------------------
  |  Branch (901:7): [True: 99, False: 637]
  ------------------
  902|       |        /* Window Size */
  903|     99|        if(curl_strnequal(option, "WS", 2)) {
  ------------------
  |  Branch (903:12): [True: 97, False: 2]
  ------------------
  904|     97|          const char *p = arg;
  905|     97|          curl_off_t x = 0;
  906|     97|          curl_off_t y = 0;
  907|     97|          if(curlx_str_number(&p, &x, 0xffff) ||
  ------------------
  |  Branch (907:14): [True: 11, False: 86]
  ------------------
  908|     86|             curlx_str_single(&p, 'x') ||
  ------------------
  |  Branch (908:14): [True: 7, False: 79]
  ------------------
  909|     79|             curlx_str_number(&p, &y, 0xffff)) {
  ------------------
  |  Branch (909:14): [True: 9, False: 70]
  ------------------
  910|     27|            failf(data, "Syntax error in telnet option: %s", head->data);
  ------------------
  |  |   62|     27|#define failf Curl_failf
  ------------------
  911|     27|            result = CURLE_SETOPT_OPTION_SYNTAX;
  912|     27|          }
  913|     70|          else {
  914|     70|            tn->subopt_wsx = (unsigned short)x;
  915|     70|            tn->subopt_wsy = (unsigned short)y;
  916|     70|            tn->us_preferred[CURL_TELOPT_NAWS] = CURL_YES;
  ------------------
  |  |   35|     70|#define CURL_TELOPT_NAWS        31  /* Negotiate About Window Size */
  ------------------
                          tn->us_preferred[CURL_TELOPT_NAWS] = CURL_YES;
  ------------------
  |  |   83|     70|#define CURL_YES         1
  ------------------
  917|     70|          }
  918|     97|        }
  919|      2|        else
  920|      2|          result = CURLE_UNKNOWN_OPTION;
  921|     99|        break;
  922|       |
  923|    108|      case 6:
  ------------------
  |  Branch (923:7): [True: 108, False: 628]
  ------------------
  924|       |        /* To take care or not of the 8th bit in data exchange */
  925|    108|        if(curl_strnequal(option, "BINARY", 6)) {
  ------------------
  |  Branch (925:12): [True: 106, False: 2]
  ------------------
  926|    106|          const char *p = arg;
  927|    106|          curl_off_t binary_option;
  928|    106|          if(!curlx_str_number(&p, &binary_option, 1) &&
  ------------------
  |  Branch (928:14): [True: 77, False: 29]
  ------------------
  929|     77|             (binary_option != 1)) {
  ------------------
  |  Branch (929:14): [True: 18, False: 59]
  ------------------
  930|     18|            tn->us_preferred[CURL_TELOPT_BINARY] = CURL_NO;
  ------------------
  |  |   30|     18|#define CURL_TELOPT_BINARY      0   /* binary 8-bit data */
  ------------------
                          tn->us_preferred[CURL_TELOPT_BINARY] = CURL_NO;
  ------------------
  |  |   82|     18|#define CURL_NO          0
  ------------------
  931|     18|            tn->him_preferred[CURL_TELOPT_BINARY] = CURL_NO;
  ------------------
  |  |   30|     18|#define CURL_TELOPT_BINARY      0   /* binary 8-bit data */
  ------------------
                          tn->him_preferred[CURL_TELOPT_BINARY] = CURL_NO;
  ------------------
  |  |   82|     18|#define CURL_NO          0
  ------------------
  932|     18|          }
  933|    106|        }
  934|      2|        else
  935|      2|          result = CURLE_UNKNOWN_OPTION;
  936|    108|        break;
  937|      3|      default:
  ------------------
  |  Branch (937:7): [True: 3, False: 733]
  ------------------
  938|      3|        failf(data, "Unknown telnet option %s", head->data);
  ------------------
  |  |   62|      3|#define failf Curl_failf
  ------------------
  939|      3|        result = CURLE_UNKNOWN_OPTION;
  940|      3|        break;
  941|    736|      }
  942|    736|    }
  943|     54|    else {
  944|     54|      failf(data, "Syntax error in telnet option: %s", head->data);
  ------------------
  |  |   62|     54|#define failf Curl_failf
  ------------------
  945|     54|      result = CURLE_SETOPT_OPTION_SYNTAX;
  946|     54|    }
  947|    825|  }
  948|       |
  949|  2.01k|  if(result) {
  ------------------
  |  Branch (949:6): [True: 91, False: 1.92k]
  ------------------
  950|     91|    curl_slist_free_all(tn->telnet_vars);
  951|     91|    tn->telnet_vars = NULL;
  952|     91|  }
  953|       |
  954|  2.01k|  return result;
  955|  2.01k|}
telnet.c:str_is_nonascii:
  819|    942|{
  820|    942|  char c;
  821|  86.2k|  while((c = *str++) != 0)
  ------------------
  |  Branch (821:9): [True: 85.3k, False: 887]
  ------------------
  822|  85.3k|    if(c & 0x80)
  ------------------
  |  Branch (822:8): [True: 55, False: 85.2k]
  ------------------
  823|     55|      return TRUE;
  ------------------
  |  | 1045|    997|#define TRUE true
  ------------------
  824|       |
  825|    887|  return FALSE;
  ------------------
  |  | 1048|    887|#define FALSE false
  ------------------
  826|    942|}
telnet.c:telrcv:
 1062|  1.01k|{
 1063|  1.01k|  unsigned char c;
 1064|  1.01k|  CURLcode result;
 1065|  1.01k|  int in = 0;
 1066|  1.01k|  int startwrite = -1;
 1067|       |
 1068|  1.01k|#define startskipping()                                          \
 1069|  1.01k|  if(startwrite >= 0) {                                          \
 1070|  1.01k|    result = Curl_client_write(data,                             \
 1071|  1.01k|                               CLIENTWRITE_BODY,                 \
 1072|  1.01k|                               (const char *)&inbuf[startwrite], \
 1073|  1.01k|                               in-startwrite);                   \
 1074|  1.01k|    if(result)                                                   \
 1075|  1.01k|      return result;                                             \
 1076|  1.01k|  }                                                              \
 1077|  1.01k|  startwrite = -1
 1078|       |
 1079|  1.01k|#define writebyte()  \
 1080|  1.01k|  if(startwrite < 0) \
 1081|  1.01k|    startwrite = in
 1082|       |
 1083|  1.01k|#define bufferflush() startskipping()
 1084|       |
 1085|   450k|  while(count--) {
  ------------------
  |  Branch (1085:9): [True: 449k, False: 965]
  ------------------
 1086|   449k|    c = inbuf[in];
 1087|       |
 1088|   449k|    switch(tn->telrcv_state) {
  ------------------
  |  Branch (1088:12): [True: 449k, False: 0]
  ------------------
 1089|  1.42k|    case CURL_TS_CR:
  ------------------
  |  Branch (1089:5): [True: 1.42k, False: 447k]
  ------------------
 1090|  1.42k|      tn->telrcv_state = CURL_TS_DATA;
 1091|  1.42k|      if(c == '\0') {
  ------------------
  |  Branch (1091:10): [True: 575, False: 847]
  ------------------
 1092|    575|        startskipping();
  ------------------
  |  | 1069|    575|  if(startwrite >= 0) {                                          \
  |  |  ------------------
  |  |  |  Branch (1069:6): [True: 574, False: 1]
  |  |  ------------------
  |  | 1070|    574|    result = Curl_client_write(data,                             \
  |  | 1071|    574|                               CLIENTWRITE_BODY,                 \
  |  |  ------------------
  |  |  |  |   43|    574|#define CLIENTWRITE_BODY    (1 << 0) /* non-meta information, BODY */
  |  |  ------------------
  |  | 1072|    574|                               (const char *)&inbuf[startwrite], \
  |  | 1073|    574|                               in-startwrite);                   \
  |  | 1074|    574|    if(result)                                                   \
  |  |  ------------------
  |  |  |  Branch (1074:8): [True: 2, False: 572]
  |  |  ------------------
  |  | 1075|    574|      return result;                                             \
  |  | 1076|    574|  }                                                              \
  |  | 1077|    575|  startwrite = -1
  ------------------
 1093|    573|        break;   /* Ignore \0 after CR */
 1094|    575|      }
 1095|    847|      writebyte();
  ------------------
  |  | 1080|    847|  if(startwrite < 0) \
  |  |  ------------------
  |  |  |  Branch (1080:6): [True: 1, False: 846]
  |  |  ------------------
  |  | 1081|    847|    startwrite = in
  ------------------
 1096|    847|      break;
 1097|       |
 1098|   312k|    case CURL_TS_DATA:
  ------------------
  |  Branch (1098:5): [True: 312k, False: 137k]
  ------------------
 1099|   312k|      if(c == CURL_IAC) {
  ------------------
  |  |   82|   312k|#define CURL_IAC  255 /* Interpret As Command */
  ------------------
  |  Branch (1099:10): [True: 3.13k, False: 308k]
  ------------------
 1100|  3.13k|        tn->telrcv_state = CURL_TS_IAC;
 1101|  3.13k|        startskipping();
  ------------------
  |  | 1069|  3.13k|  if(startwrite >= 0) {                                          \
  |  |  ------------------
  |  |  |  Branch (1069:6): [True: 1.33k, False: 1.80k]
  |  |  ------------------
  |  | 1070|  1.33k|    result = Curl_client_write(data,                             \
  |  | 1071|  1.33k|                               CLIENTWRITE_BODY,                 \
  |  |  ------------------
  |  |  |  |   43|  1.33k|#define CLIENTWRITE_BODY    (1 << 0) /* non-meta information, BODY */
  |  |  ------------------
  |  | 1072|  1.33k|                               (const char *)&inbuf[startwrite], \
  |  | 1073|  1.33k|                               in-startwrite);                   \
  |  | 1074|  1.33k|    if(result)                                                   \
  |  |  ------------------
  |  |  |  Branch (1074:8): [True: 2, False: 1.33k]
  |  |  ------------------
  |  | 1075|  1.33k|      return result;                                             \
  |  | 1076|  1.33k|  }                                                              \
  |  | 1077|  3.13k|  startwrite = -1
  ------------------
 1102|  3.13k|        break;
 1103|  3.13k|      }
 1104|   308k|      else if(c == '\r')
  ------------------
  |  Branch (1104:15): [True: 1.42k, False: 307k]
  ------------------
 1105|  1.42k|        tn->telrcv_state = CURL_TS_CR;
 1106|   308k|      writebyte();
  ------------------
  |  | 1080|   308k|  if(startwrite < 0) \
  |  |  ------------------
  |  |  |  Branch (1080:6): [True: 1.98k, False: 306k]
  |  |  ------------------
  |  | 1081|   308k|    startwrite = in
  ------------------
 1107|   308k|      break;
 1108|       |
 1109|  3.10k|    case CURL_TS_IAC:
  ------------------
  |  Branch (1109:5): [True: 3.10k, False: 446k]
  ------------------
 1110|  3.10k|      DEBUGASSERT(startwrite < 0);
  ------------------
  |  | 1075|  3.10k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1110:7): [True: 0, False: 3.10k]
  |  Branch (1110:7): [True: 3.10k, False: 0]
  ------------------
 1111|  3.10k|      switch(c) {
 1112|    298|      case CURL_WILL:
  ------------------
  |  |   78|    298|#define CURL_WILL 251 /* Our side WILL use this option */
  ------------------
  |  Branch (1112:7): [True: 298, False: 2.80k]
  ------------------
 1113|    298|        tn->telrcv_state = CURL_TS_WILL;
 1114|    298|        break;
 1115|    216|      case CURL_WONT:
  ------------------
  |  |   79|    216|#define CURL_WONT 252 /* Our side will not use this option */
  ------------------
  |  Branch (1115:7): [True: 216, False: 2.89k]
  ------------------
 1116|    216|        tn->telrcv_state = CURL_TS_WONT;
 1117|    216|        break;
 1118|    504|      case CURL_DO:
  ------------------
  |  |   80|    504|#define CURL_DO   253 /* DO use this option! */
  ------------------
  |  Branch (1118:7): [True: 504, False: 2.60k]
  ------------------
 1119|    504|        tn->telrcv_state = CURL_TS_DO;
 1120|    504|        break;
 1121|    242|      case CURL_DONT:
  ------------------
  |  |   81|    242|#define CURL_DONT 254 /* DO NOT use this option! */
  ------------------
  |  Branch (1121:7): [True: 242, False: 2.86k]
  ------------------
 1122|    242|        tn->telrcv_state = CURL_TS_DONT;
 1123|    242|        break;
 1124|  1.14k|      case CURL_SB:
  ------------------
  |  |   77|  1.14k|#define CURL_SB   250 /* SuBnegotiation */
  ------------------
  |  Branch (1124:7): [True: 1.14k, False: 1.96k]
  ------------------
 1125|  1.14k|        CURL_SB_CLEAR(tn);
  ------------------
  |  |   62|  1.14k|#define CURL_SB_CLEAR(x) (x)->subpointer = (x)->subbuffer
  ------------------
 1126|  1.14k|        tn->telrcv_state = CURL_TS_SB;
 1127|  1.14k|        break;
 1128|    382|      case CURL_IAC:
  ------------------
  |  |   82|    382|#define CURL_IAC  255 /* Interpret As Command */
  ------------------
  |  Branch (1128:7): [True: 382, False: 2.72k]
  ------------------
 1129|    382|        tn->telrcv_state = CURL_TS_DATA;
 1130|    382|        writebyte();
  ------------------
  |  | 1080|    382|  if(startwrite < 0) \
  |  |  ------------------
  |  |  |  Branch (1080:6): [True: 382, False: 0]
  |  |  ------------------
  |  | 1081|    382|    startwrite = in
  ------------------
 1131|    382|        break;
 1132|     17|      case CURL_DM:
  ------------------
  |  |   75|     17|#define CURL_DM   242 /* Data Mark */
  ------------------
  |  Branch (1132:7): [True: 17, False: 3.08k]
  ------------------
 1133|     37|      case CURL_NOP:
  ------------------
  |  |   74|     37|#define CURL_NOP  241 /* No OPeration */
  ------------------
  |  Branch (1133:7): [True: 20, False: 3.08k]
  ------------------
 1134|     53|      case CURL_GA:
  ------------------
  |  |   76|     53|#define CURL_GA   249 /* Go Ahead, reverse the line */
  ------------------
  |  Branch (1134:7): [True: 16, False: 3.09k]
  ------------------
 1135|    322|      default:
  ------------------
  |  Branch (1135:7): [True: 269, False: 2.83k]
  ------------------
 1136|    322|        tn->telrcv_state = CURL_TS_DATA;
 1137|    322|        printoption(data, "RCVD", CURL_IAC, c);
  ------------------
  |  |   82|    322|#define CURL_IAC  255 /* Interpret As Command */
  ------------------
 1138|    322|        break;
 1139|  3.10k|      }
 1140|  3.10k|      break;
 1141|       |
 1142|  3.10k|    case CURL_TS_WILL:
  ------------------
  |  Branch (1142:5): [True: 297, False: 449k]
  ------------------
 1143|    297|      printoption(data, "RCVD", CURL_WILL, c);
  ------------------
  |  |   78|    297|#define CURL_WILL 251 /* Our side WILL use this option */
  ------------------
 1144|    297|      tn->please_negotiate = 1;
 1145|    297|      rec_will(data, tn, c);
 1146|    297|      tn->telrcv_state = CURL_TS_DATA;
 1147|    297|      break;
 1148|       |
 1149|    209|    case CURL_TS_WONT:
  ------------------
  |  Branch (1149:5): [True: 209, False: 449k]
  ------------------
 1150|    209|      printoption(data, "RCVD", CURL_WONT, c);
  ------------------
  |  |   79|    209|#define CURL_WONT 252 /* Our side will not use this option */
  ------------------
 1151|    209|      tn->please_negotiate = 1;
 1152|    209|      rec_wont(data, tn, c);
 1153|    209|      tn->telrcv_state = CURL_TS_DATA;
 1154|    209|      break;
 1155|       |
 1156|    503|    case CURL_TS_DO:
  ------------------
  |  Branch (1156:5): [True: 503, False: 448k]
  ------------------
 1157|    503|      printoption(data, "RCVD", CURL_DO, c);
  ------------------
  |  |   80|    503|#define CURL_DO   253 /* DO use this option! */
  ------------------
 1158|    503|      tn->please_negotiate = 1;
 1159|    503|      rec_do(data, tn, c);
 1160|    503|      tn->telrcv_state = CURL_TS_DATA;
 1161|    503|      break;
 1162|       |
 1163|    241|    case CURL_TS_DONT:
  ------------------
  |  Branch (1163:5): [True: 241, False: 449k]
  ------------------
 1164|    241|      printoption(data, "RCVD", CURL_DONT, c);
  ------------------
  |  |   81|    241|#define CURL_DONT 254 /* DO NOT use this option! */
  ------------------
 1165|    241|      tn->please_negotiate = 1;
 1166|    241|      rec_dont(data, tn, c);
 1167|    241|      tn->telrcv_state = CURL_TS_DATA;
 1168|    241|      break;
 1169|       |
 1170|   130k|    case CURL_TS_SB:
  ------------------
  |  Branch (1170:5): [True: 130k, False: 319k]
  ------------------
 1171|   130k|      if(c == CURL_IAC)
  ------------------
  |  |   82|   130k|#define CURL_IAC  255 /* Interpret As Command */
  ------------------
  |  Branch (1171:10): [True: 1.25k, False: 128k]
  ------------------
 1172|  1.25k|        tn->telrcv_state = CURL_TS_SE;
 1173|   128k|      else
 1174|   128k|        CURL_SB_ACCUM(tn, c);
  ------------------
  |  |   69|   128k|  do {                                                              \
  |  |   70|   128k|    if((x)->subpointer < ((x)->subbuffer + sizeof((x)->subbuffer))) \
  |  |  ------------------
  |  |  |  Branch (70:8): [True: 73.9k, False: 54.9k]
  |  |  ------------------
  |  |   71|   128k|      *(x)->subpointer++ = (c);                                     \
  |  |   72|   128k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (72:11): [Folded, False: 128k]
  |  |  ------------------
  ------------------
 1175|   130k|      break;
 1176|       |
 1177|  1.24k|    case CURL_TS_SE:
  ------------------
  |  Branch (1177:5): [True: 1.24k, False: 448k]
  ------------------
 1178|  1.24k|      if(c != CURL_SE) {
  ------------------
  |  |   73|  1.24k|#define CURL_SE   240 /* Sub negotiation End */
  ------------------
  |  Branch (1178:10): [True: 156, False: 1.08k]
  ------------------
 1179|    156|        if(c != CURL_IAC) {
  ------------------
  |  |   82|    156|#define CURL_IAC  255 /* Interpret As Command */
  ------------------
  |  Branch (1179:12): [True: 26, False: 130]
  ------------------
 1180|       |          /*
 1181|       |           * This is an error. We only expect to get "IAC IAC" or "IAC SE".
 1182|       |           * Several things may have happened. An IAC was not doubled, the IAC
 1183|       |           * SE was left off, or another option got inserted into the
 1184|       |           * suboption are all possibilities.
 1185|       |           */
 1186|     26|          failf(data, "telnet: suboption error");
  ------------------
  |  |   62|     26|#define failf Curl_failf
  ------------------
 1187|     26|          return CURLE_RECV_ERROR;
 1188|     26|        }
 1189|    130|        CURL_SB_ACCUM(tn, c);
  ------------------
  |  |   69|    130|  do {                                                              \
  |  |   70|    130|    if((x)->subpointer < ((x)->subbuffer + sizeof((x)->subbuffer))) \
  |  |  ------------------
  |  |  |  Branch (70:8): [True: 89, False: 41]
  |  |  ------------------
  |  |   71|    130|      *(x)->subpointer++ = (c);                                     \
  |  |   72|    130|  } while(0)
  |  |  ------------------
  |  |  |  Branch (72:11): [Folded, False: 130]
  |  |  ------------------
  ------------------
 1190|    130|        tn->telrcv_state = CURL_TS_SB;
 1191|    130|      }
 1192|  1.08k|      else {
 1193|  1.08k|        CURL_SB_ACCUM(tn, CURL_IAC);
  ------------------
  |  |   69|  1.08k|  do {                                                              \
  |  |   70|  1.08k|    if((x)->subpointer < ((x)->subbuffer + sizeof((x)->subbuffer))) \
  |  |  ------------------
  |  |  |  Branch (70:8): [True: 989, False: 99]
  |  |  ------------------
  |  |   71|  1.08k|      *(x)->subpointer++ = (c);                                     \
  |  |   72|  1.08k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (72:11): [Folded, False: 1.08k]
  |  |  ------------------
  ------------------
 1194|  1.08k|        CURL_SB_ACCUM(tn, CURL_SE);
  ------------------
  |  |   69|  1.08k|  do {                                                              \
  |  |   70|  1.08k|    if((x)->subpointer < ((x)->subbuffer + sizeof((x)->subbuffer))) \
  |  |  ------------------
  |  |  |  Branch (70:8): [True: 977, False: 111]
  |  |  ------------------
  |  |   71|  1.08k|      *(x)->subpointer++ = (c);                                     \
  |  |   72|  1.08k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (72:11): [Folded, False: 1.08k]
  |  |  ------------------
  ------------------
 1195|  1.08k|        tn->subpointer -= 2;
 1196|  1.08k|        CURL_SB_TERM(tn);
  ------------------
  |  |   64|  1.08k|  do {                             \
  |  |   65|  1.08k|    (x)->subend = (x)->subpointer; \
  |  |   66|  1.08k|    CURL_SB_CLEAR(x);              \
  |  |  ------------------
  |  |  |  |   62|  1.08k|#define CURL_SB_CLEAR(x) (x)->subpointer = (x)->subbuffer
  |  |  ------------------
  |  |   67|  1.08k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (67:11): [Folded, False: 1.08k]
  |  |  ------------------
  ------------------
 1197|  1.08k|        result = suboption(data, tn);   /* handle sub-option */
 1198|  1.08k|        if(result)
  ------------------
  |  Branch (1198:12): [True: 15, False: 1.07k]
  ------------------
 1199|     15|          return result;
 1200|  1.07k|        tn->telrcv_state = CURL_TS_DATA;
 1201|  1.07k|      }
 1202|  1.20k|      break;
 1203|   449k|    }
 1204|   449k|    ++in;
 1205|   449k|  }
 1206|    965|  bufferflush();
  ------------------
  |  | 1083|    965|#define bufferflush() startskipping()
  |  |  ------------------
  |  |  |  | 1069|    965|  if(startwrite >= 0) {                                          \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1069:6): [True: 457, False: 508]
  |  |  |  |  ------------------
  |  |  |  | 1070|    457|    result = Curl_client_write(data,                             \
  |  |  |  | 1071|    457|                               CLIENTWRITE_BODY,                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|    457|#define CLIENTWRITE_BODY    (1 << 0) /* non-meta information, BODY */
  |  |  |  |  ------------------
  |  |  |  | 1072|    457|                               (const char *)&inbuf[startwrite], \
  |  |  |  | 1073|    457|                               in-startwrite);                   \
  |  |  |  | 1074|    457|    if(result)                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1074:8): [True: 19, False: 438]
  |  |  |  |  ------------------
  |  |  |  | 1075|    457|      return result;                                             \
  |  |  |  | 1076|    457|  }                                                              \
  |  |  |  | 1077|    965|  startwrite = -1
  |  |  ------------------
  ------------------
 1207|    946|  return CURLE_OK;
 1208|    965|}
telnet.c:printoption:
  136|  3.44k|{
  137|  3.44k|  if(data->set.verbose) {
  ------------------
  |  Branch (137:6): [True: 3.44k, False: 0]
  ------------------
  138|  3.44k|    if(cmd == CURL_IAC) {
  ------------------
  |  |   82|  3.44k|#define CURL_IAC  255 /* Interpret As Command */
  ------------------
  |  Branch (138:8): [True: 322, False: 3.12k]
  ------------------
  139|    322|      if(CURL_TELCMD_OK(option))
  ------------------
  |  |  105|    322|  (((unsigned int)(x) >= CURL_TELCMD_MINIMUM) && \
  |  |  ------------------
  |  |  |  |   96|    322|#define CURL_TELCMD_MINIMUM CURL_xEOF /* the first one */
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|    322|#define CURL_xEOF 236 /* End Of File */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (105:4): [True: 132, False: 190]
  |  |  ------------------
  |  |  106|    322|   ((unsigned int)(x) <= CURL_TELCMD_MAXIMUM))
  |  |  ------------------
  |  |  |  |   97|    132|#define CURL_TELCMD_MAXIMUM CURL_IAC  /* surprise, 255 is the last one! ;-) */
  |  |  |  |  ------------------
  |  |  |  |  |  |   82|    132|#define CURL_IAC  255 /* Interpret As Command */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (106:4): [True: 132, False: 0]
  |  |  ------------------
  ------------------
  140|    132|        infof(data, "%s IAC %s", direction, CURL_TELCMD(option));
  ------------------
  |  |  143|    132|  do {                               \
  |  |  144|    132|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|    132|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 132, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 132, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|    132|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 132, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|    132|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|    132|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|    132|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 132]
  |  |  ------------------
  ------------------
  141|    190|      else
  142|    190|        infof(data, "%s IAC %d", direction, option);
  ------------------
  |  |  143|    190|  do {                               \
  |  |  144|    190|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|    190|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 190, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 190, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|    190|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 190, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|    190|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|    190|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|    190|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 190]
  |  |  ------------------
  ------------------
  143|    322|    }
  144|  3.12k|    else {
  145|  3.12k|      const char *fmt = (cmd == CURL_WILL) ? "WILL" :
  ------------------
  |  |   78|  3.12k|#define CURL_WILL 251 /* Our side WILL use this option */
  ------------------
  |  Branch (145:25): [True: 1.08k, False: 2.03k]
  ------------------
  146|  3.12k|                        (cmd == CURL_WONT) ? "WONT" :
  ------------------
  |  |   79|  2.03k|#define CURL_WONT 252 /* Our side will not use this option */
  ------------------
  |  Branch (146:25): [True: 510, False: 1.52k]
  ------------------
  147|  2.03k|                        (cmd == CURL_DO) ? "DO" :
  ------------------
  |  |   80|  1.52k|#define CURL_DO   253 /* DO use this option! */
  ------------------
  |  Branch (147:25): [True: 1.09k, False: 435]
  ------------------
  148|  1.52k|                        (cmd == CURL_DONT) ? "DONT" : 0;
  ------------------
  |  |   81|    435|#define CURL_DONT 254 /* DO NOT use this option! */
  ------------------
  |  Branch (148:25): [True: 435, False: 0]
  ------------------
  149|  3.12k|      if(fmt) {
  ------------------
  |  Branch (149:10): [True: 3.12k, False: 0]
  ------------------
  150|  3.12k|        const char *opt;
  151|  3.12k|        if(CURL_TELOPT_OK(option))
  ------------------
  |  |   65|  3.12k|#define CURL_TELOPT_OK(x) ((x) <= CURL_TELOPT_MAXIMUM)
  |  |  ------------------
  |  |  |  |   63|  3.12k|#define CURL_TELOPT_MAXIMUM CURL_TELOPT_NEW_ENVIRON
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.12k|#define CURL_TELOPT_NEW_ENVIRON 39  /* NEW ENVIRONment variables */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (65:27): [True: 2.49k, False: 625]
  |  |  ------------------
  ------------------
  152|  2.49k|          opt = CURL_TELOPT(option);
  ------------------
  |  |   58|  2.49k|#define CURL_TELOPT(x) telnetoptions[x]
  ------------------
  153|    625|        else if(option == CURL_TELOPT_EXOPL)
  ------------------
  |  |   33|    625|#define CURL_TELOPT_EXOPL       255 /* EXtended OPtions List */
  ------------------
  |  Branch (153:17): [True: 177, False: 448]
  ------------------
  154|    177|          opt = "EXOPL";
  155|    448|        else
  156|    448|          opt = NULL;
  157|       |
  158|  3.12k|        if(opt)
  ------------------
  |  Branch (158:12): [True: 2.67k, False: 448]
  ------------------
  159|  2.67k|          infof(data, "%s %s %s", direction, fmt, opt);
  ------------------
  |  |  143|  2.67k|  do {                               \
  |  |  144|  2.67k|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|  2.67k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 2.67k, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 2.67k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|  2.67k|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 2.67k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|  2.67k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|  2.67k|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|  2.67k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 2.67k]
  |  |  ------------------
  ------------------
  160|    448|        else
  161|    448|          infof(data, "%s %s %d", direction, fmt, option);
  ------------------
  |  |  143|    448|  do {                               \
  |  |  144|    448|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|    448|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 448, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 448, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|    448|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 448, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|    448|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|    448|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|    448|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 448]
  |  |  ------------------
  ------------------
  162|  3.12k|      }
  163|      0|      else
  164|      0|        infof(data, "%s %d %d", direction, cmd, option);
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  165|  3.12k|    }
  166|  3.44k|  }
  167|  3.44k|}
telnet.c:rec_will:
  405|    297|{
  406|    297|  switch(tn->him[option]) {
  ------------------
  |  Branch (406:10): [True: 297, False: 0]
  ------------------
  407|    227|  case CURL_NO:
  ------------------
  |  |   82|    227|#define CURL_NO          0
  ------------------
  |  Branch (407:3): [True: 227, False: 70]
  ------------------
  408|    227|    if(tn->him_preferred[option] == CURL_YES) {
  ------------------
  |  |   83|    227|#define CURL_YES         1
  ------------------
  |  Branch (408:8): [True: 77, False: 150]
  ------------------
  409|     77|      tn->him[option] = CURL_YES;
  ------------------
  |  |   83|     77|#define CURL_YES         1
  ------------------
  410|     77|      send_negotiation(data, CURL_DO, option);
  ------------------
  |  |   80|     77|#define CURL_DO   253 /* DO use this option! */
  ------------------
  411|     77|    }
  412|    150|    else
  413|    150|      send_negotiation(data, CURL_DONT, option);
  ------------------
  |  |   81|    150|#define CURL_DONT 254 /* DO NOT use this option! */
  ------------------
  414|       |
  415|    227|    break;
  416|       |
  417|     66|  case CURL_YES:
  ------------------
  |  |   83|     66|#define CURL_YES         1
  ------------------
  |  Branch (417:3): [True: 66, False: 231]
  ------------------
  418|       |    /* Already enabled */
  419|     66|    break;
  420|       |
  421|      0|  case CURL_WANTNO:
  ------------------
  |  |   85|      0|#define CURL_WANTNO      3
  ------------------
  |  Branch (421:3): [True: 0, False: 297]
  ------------------
  422|      0|    switch(tn->himq[option]) {
  ------------------
  |  Branch (422:12): [True: 0, False: 0]
  ------------------
  423|      0|    case CURL_EMPTY:
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  |  Branch (423:5): [True: 0, False: 0]
  ------------------
  424|       |      /* Error: DONT answered by WILL */
  425|      0|      tn->him[option] = CURL_NO;
  ------------------
  |  |   82|      0|#define CURL_NO          0
  ------------------
  426|      0|      break;
  427|      0|    case CURL_OPPOSITE:
  ------------------
  |  |   88|      0|#define CURL_OPPOSITE    1
  ------------------
  |  Branch (427:5): [True: 0, False: 0]
  ------------------
  428|       |      /* Error: DONT answered by WILL */
  429|      0|      tn->him[option] = CURL_YES;
  ------------------
  |  |   83|      0|#define CURL_YES         1
  ------------------
  430|      0|      tn->himq[option] = CURL_EMPTY;
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  431|      0|      break;
  432|      0|    }
  433|      0|    break;
  434|       |
  435|      4|  case CURL_WANTYES:
  ------------------
  |  |   84|      4|#define CURL_WANTYES     2
  ------------------
  |  Branch (435:3): [True: 4, False: 293]
  ------------------
  436|      4|    switch(tn->himq[option]) {
  ------------------
  |  Branch (436:12): [True: 4, False: 0]
  ------------------
  437|      4|    case CURL_EMPTY:
  ------------------
  |  |   87|      4|#define CURL_EMPTY       0
  ------------------
  |  Branch (437:5): [True: 4, False: 0]
  ------------------
  438|      4|      tn->him[option] = CURL_YES;
  ------------------
  |  |   83|      4|#define CURL_YES         1
  ------------------
  439|      4|      break;
  440|      0|    case CURL_OPPOSITE:
  ------------------
  |  |   88|      0|#define CURL_OPPOSITE    1
  ------------------
  |  Branch (440:5): [True: 0, False: 4]
  ------------------
  441|      0|      tn->him[option] = CURL_WANTNO;
  ------------------
  |  |   85|      0|#define CURL_WANTNO      3
  ------------------
  442|      0|      tn->himq[option] = CURL_EMPTY;
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  443|      0|      send_negotiation(data, CURL_DONT, option);
  ------------------
  |  |   81|      0|#define CURL_DONT 254 /* DO NOT use this option! */
  ------------------
  444|      0|      break;
  445|      4|    }
  446|      4|    break;
  447|    297|  }
  448|    297|}
telnet.c:send_negotiation:
  226|  1.87k|{
  227|  1.87k|  unsigned char buf[3];
  228|  1.87k|  ssize_t bytes_written;
  229|  1.87k|  struct connectdata *conn = data->conn;
  230|       |
  231|  1.87k|  buf[0] = CURL_IAC;
  ------------------
  |  |   82|  1.87k|#define CURL_IAC  255 /* Interpret As Command */
  ------------------
  232|  1.87k|  buf[1] = (unsigned char)cmd;
  233|  1.87k|  buf[2] = (unsigned char)option;
  234|       |
  235|  1.87k|  bytes_written = swrite(conn->sock[FIRSTSOCKET], buf, 3);
  ------------------
  |  |  966|  1.87k|#define swrite(x, y, z) (ssize_t)send((SEND_TYPE_ARG1)(x), \
  |  |  967|  1.87k|                                      (const SEND_TYPE_ARG2)(y), \
  |  |  968|  1.87k|                                      (SEND_TYPE_ARG3)(z), \
  |  |  969|  1.87k|                                      (SEND_TYPE_ARG4)(SEND_4TH_ARG))
  |  |  ------------------
  |  |  |  |  909|  1.87k|#define SEND_4TH_ARG MSG_NOSIGNAL
  |  |  ------------------
  ------------------
  236|  1.87k|  if(bytes_written < 0)
  ------------------
  |  Branch (236:6): [True: 0, False: 1.87k]
  ------------------
  237|      0|    failf(data, "Sending data failed (%d)", SOCKERRNO);
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
                  failf(data, "Sending data failed (%d)", SOCKERRNO);
  ------------------
  |  | 1089|      0|#define SOCKERRNO         errno
  ------------------
  238|       |
  239|  1.87k|  printoption(data, "SENT", cmd, option);
  240|  1.87k|}
telnet.c:rec_wont:
  451|    209|{
  452|    209|  switch(tn->him[option]) {
  ------------------
  |  Branch (452:10): [True: 209, False: 0]
  ------------------
  453|    161|  case CURL_NO:
  ------------------
  |  |   82|    161|#define CURL_NO          0
  ------------------
  |  Branch (453:3): [True: 161, False: 48]
  ------------------
  454|       |    /* Already disabled */
  455|    161|    break;
  456|       |
  457|     44|  case CURL_YES:
  ------------------
  |  |   83|     44|#define CURL_YES         1
  ------------------
  |  Branch (457:3): [True: 44, False: 165]
  ------------------
  458|     44|    tn->him[option] = CURL_NO;
  ------------------
  |  |   82|     44|#define CURL_NO          0
  ------------------
  459|     44|    send_negotiation(data, CURL_DONT, option);
  ------------------
  |  |   81|     44|#define CURL_DONT 254 /* DO NOT use this option! */
  ------------------
  460|     44|    break;
  461|       |
  462|      0|  case CURL_WANTNO:
  ------------------
  |  |   85|      0|#define CURL_WANTNO      3
  ------------------
  |  Branch (462:3): [True: 0, False: 209]
  ------------------
  463|      0|    switch(tn->himq[option]) {
  ------------------
  |  Branch (463:12): [True: 0, False: 0]
  ------------------
  464|      0|    case CURL_EMPTY:
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  |  Branch (464:5): [True: 0, False: 0]
  ------------------
  465|      0|      tn->him[option] = CURL_NO;
  ------------------
  |  |   82|      0|#define CURL_NO          0
  ------------------
  466|      0|      break;
  467|       |
  468|      0|    case CURL_OPPOSITE:
  ------------------
  |  |   88|      0|#define CURL_OPPOSITE    1
  ------------------
  |  Branch (468:5): [True: 0, False: 0]
  ------------------
  469|      0|      tn->him[option] = CURL_WANTYES;
  ------------------
  |  |   84|      0|#define CURL_WANTYES     2
  ------------------
  470|      0|      tn->himq[option] = CURL_EMPTY;
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  471|      0|      send_negotiation(data, CURL_DO, option);
  ------------------
  |  |   80|      0|#define CURL_DO   253 /* DO use this option! */
  ------------------
  472|      0|      break;
  473|      0|    }
  474|      0|    break;
  475|       |
  476|      4|  case CURL_WANTYES:
  ------------------
  |  |   84|      4|#define CURL_WANTYES     2
  ------------------
  |  Branch (476:3): [True: 4, False: 205]
  ------------------
  477|      4|    switch(tn->himq[option]) {
  ------------------
  |  Branch (477:12): [True: 4, False: 0]
  ------------------
  478|      4|    case CURL_EMPTY:
  ------------------
  |  |   87|      4|#define CURL_EMPTY       0
  ------------------
  |  Branch (478:5): [True: 4, False: 0]
  ------------------
  479|      4|      tn->him[option] = CURL_NO;
  ------------------
  |  |   82|      4|#define CURL_NO          0
  ------------------
  480|      4|      break;
  481|      0|    case CURL_OPPOSITE:
  ------------------
  |  |   88|      0|#define CURL_OPPOSITE    1
  ------------------
  |  Branch (481:5): [True: 0, False: 4]
  ------------------
  482|      0|      tn->him[option] = CURL_NO;
  ------------------
  |  |   82|      0|#define CURL_NO          0
  ------------------
  483|      0|      tn->himq[option] = CURL_EMPTY;
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  484|      0|      break;
  485|      4|    }
  486|      4|    break;
  487|    209|  }
  488|    209|}
telnet.c:rec_do:
  721|    503|{
  722|    503|  switch(tn->us[option]) {
  ------------------
  |  Branch (722:10): [True: 503, False: 0]
  ------------------
  723|    416|  case CURL_NO:
  ------------------
  |  |   82|    416|#define CURL_NO          0
  ------------------
  |  Branch (723:3): [True: 416, False: 87]
  ------------------
  724|    416|    if(tn->us_preferred[option] == CURL_YES) {
  ------------------
  |  |   83|    416|#define CURL_YES         1
  ------------------
  |  Branch (724:8): [True: 126, False: 290]
  ------------------
  725|    126|      tn->us[option] = CURL_YES;
  ------------------
  |  |   83|    126|#define CURL_YES         1
  ------------------
  726|    126|      send_negotiation(data, CURL_WILL, option);
  ------------------
  |  |   78|    126|#define CURL_WILL 251 /* Our side WILL use this option */
  ------------------
  727|    126|      if(tn->subnegotiation[option] == CURL_YES)
  ------------------
  |  |   83|    126|#define CURL_YES         1
  ------------------
  |  Branch (727:10): [True: 44, False: 82]
  ------------------
  728|       |        /* transmission of data option */
  729|     44|        sendsuboption(data, tn, option);
  730|    126|    }
  731|    290|    else if(tn->subnegotiation[option] == CURL_YES) {
  ------------------
  |  |   83|    290|#define CURL_YES         1
  ------------------
  |  Branch (731:13): [True: 110, False: 180]
  ------------------
  732|       |      /* send information to achieve this option */
  733|    110|      tn->us[option] = CURL_YES;
  ------------------
  |  |   83|    110|#define CURL_YES         1
  ------------------
  734|    110|      send_negotiation(data, CURL_WILL, option);
  ------------------
  |  |   78|    110|#define CURL_WILL 251 /* Our side WILL use this option */
  ------------------
  735|    110|      sendsuboption(data, tn, option);
  736|    110|    }
  737|    180|    else
  738|    180|      send_negotiation(data, CURL_WONT, option);
  ------------------
  |  |   79|    180|#define CURL_WONT 252 /* Our side will not use this option */
  ------------------
  739|    416|    break;
  740|       |
  741|     74|  case CURL_YES:
  ------------------
  |  |   83|     74|#define CURL_YES         1
  ------------------
  |  Branch (741:3): [True: 74, False: 429]
  ------------------
  742|       |    /* Already enabled */
  743|     74|    break;
  744|       |
  745|      0|  case CURL_WANTNO:
  ------------------
  |  |   85|      0|#define CURL_WANTNO      3
  ------------------
  |  Branch (745:3): [True: 0, False: 503]
  ------------------
  746|      0|    switch(tn->usq[option]) {
  ------------------
  |  Branch (746:12): [True: 0, False: 0]
  ------------------
  747|      0|    case CURL_EMPTY:
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  |  Branch (747:5): [True: 0, False: 0]
  ------------------
  748|       |      /* Error: DONT answered by WILL */
  749|      0|      tn->us[option] = CURL_NO;
  ------------------
  |  |   82|      0|#define CURL_NO          0
  ------------------
  750|      0|      break;
  751|      0|    case CURL_OPPOSITE:
  ------------------
  |  |   88|      0|#define CURL_OPPOSITE    1
  ------------------
  |  Branch (751:5): [True: 0, False: 0]
  ------------------
  752|       |      /* Error: DONT answered by WILL */
  753|      0|      tn->us[option] = CURL_YES;
  ------------------
  |  |   83|      0|#define CURL_YES         1
  ------------------
  754|      0|      tn->usq[option] = CURL_EMPTY;
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  755|      0|      break;
  756|      0|    }
  757|      0|    break;
  758|       |
  759|     13|  case CURL_WANTYES:
  ------------------
  |  |   84|     13|#define CURL_WANTYES     2
  ------------------
  |  Branch (759:3): [True: 13, False: 490]
  ------------------
  760|     13|    switch(tn->usq[option]) {
  ------------------
  |  Branch (760:12): [True: 13, False: 0]
  ------------------
  761|     13|    case CURL_EMPTY:
  ------------------
  |  |   87|     13|#define CURL_EMPTY       0
  ------------------
  |  Branch (761:5): [True: 13, False: 0]
  ------------------
  762|     13|      tn->us[option] = CURL_YES;
  ------------------
  |  |   83|     13|#define CURL_YES         1
  ------------------
  763|     13|      if(tn->subnegotiation[option] == CURL_YES) {
  ------------------
  |  |   83|     13|#define CURL_YES         1
  ------------------
  |  Branch (763:10): [True: 1, False: 12]
  ------------------
  764|       |        /* transmission of data option */
  765|      1|        sendsuboption(data, tn, option);
  766|      1|      }
  767|     13|      break;
  768|      0|    case CURL_OPPOSITE:
  ------------------
  |  |   88|      0|#define CURL_OPPOSITE    1
  ------------------
  |  Branch (768:5): [True: 0, False: 13]
  ------------------
  769|      0|      tn->us[option] = CURL_WANTNO;
  ------------------
  |  |   85|      0|#define CURL_WANTNO      3
  ------------------
  770|      0|      tn->usq[option] = CURL_EMPTY;
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  771|      0|      send_negotiation(data, CURL_WONT, option);
  ------------------
  |  |   79|      0|#define CURL_WONT 252 /* Our side will not use this option */
  ------------------
  772|      0|      break;
  773|     13|    }
  774|     13|    break;
  775|    503|  }
  776|    503|}
telnet.c:sendsuboption:
  673|    155|{
  674|    155|  ssize_t bytes_written;
  675|    155|  unsigned short x, y;
  676|    155|  const unsigned char *uc1, *uc2;
  677|    155|  struct connectdata *conn = data->conn;
  678|       |
  679|    155|  switch(option) {
  ------------------
  |  Branch (679:10): [True: 155, False: 0]
  ------------------
  680|    155|  case CURL_TELOPT_NAWS:
  ------------------
  |  |   35|    155|#define CURL_TELOPT_NAWS        31  /* Negotiate About Window Size */
  ------------------
  |  Branch (680:3): [True: 155, False: 0]
  ------------------
  681|       |    /* We prepare data to be sent */
  682|    155|    CURL_SB_CLEAR(tn);
  ------------------
  |  |   62|    155|#define CURL_SB_CLEAR(x) (x)->subpointer = (x)->subbuffer
  ------------------
  683|    155|    CURL_SB_ACCUM(tn, CURL_IAC);
  ------------------
  |  |   69|    155|  do {                                                              \
  |  |   70|    155|    if((x)->subpointer < ((x)->subbuffer + sizeof((x)->subbuffer))) \
  |  |  ------------------
  |  |  |  Branch (70:8): [True: 155, False: 0]
  |  |  ------------------
  |  |   71|    155|      *(x)->subpointer++ = (c);                                     \
  |  |   72|    155|  } while(0)
  |  |  ------------------
  |  |  |  Branch (72:11): [Folded, False: 155]
  |  |  ------------------
  ------------------
  684|    155|    CURL_SB_ACCUM(tn, CURL_SB);
  ------------------
  |  |   69|    155|  do {                                                              \
  |  |   70|    155|    if((x)->subpointer < ((x)->subbuffer + sizeof((x)->subbuffer))) \
  |  |  ------------------
  |  |  |  Branch (70:8): [True: 155, False: 0]
  |  |  ------------------
  |  |   71|    155|      *(x)->subpointer++ = (c);                                     \
  |  |   72|    155|  } while(0)
  |  |  ------------------
  |  |  |  Branch (72:11): [Folded, False: 155]
  |  |  ------------------
  ------------------
  685|    155|    CURL_SB_ACCUM(tn, CURL_TELOPT_NAWS);
  ------------------
  |  |   69|    155|  do {                                                              \
  |  |   70|    155|    if((x)->subpointer < ((x)->subbuffer + sizeof((x)->subbuffer))) \
  |  |  ------------------
  |  |  |  Branch (70:8): [True: 155, False: 0]
  |  |  ------------------
  |  |   71|    155|      *(x)->subpointer++ = (c);                                     \
  |  |   72|    155|  } while(0)
  |  |  ------------------
  |  |  |  Branch (72:11): [Folded, False: 155]
  |  |  ------------------
  ------------------
  686|       |    /* We must deal either with little or big endian processors */
  687|       |    /* Window size must be sent according to the 'network order' */
  688|    155|    x = htons(tn->subopt_wsx);
  689|    155|    y = htons(tn->subopt_wsy);
  690|    155|    uc1 = (const unsigned char *)&x;
  691|    155|    uc2 = (const unsigned char *)&y;
  692|    155|    CURL_SB_ACCUM(tn, uc1[0]);
  ------------------
  |  |   69|    155|  do {                                                              \
  |  |   70|    155|    if((x)->subpointer < ((x)->subbuffer + sizeof((x)->subbuffer))) \
  |  |  ------------------
  |  |  |  Branch (70:8): [True: 155, False: 0]
  |  |  ------------------
  |  |   71|    155|      *(x)->subpointer++ = (c);                                     \
  |  |   72|    155|  } while(0)
  |  |  ------------------
  |  |  |  Branch (72:11): [Folded, False: 155]
  |  |  ------------------
  ------------------
  693|    155|    CURL_SB_ACCUM(tn, uc1[1]);
  ------------------
  |  |   69|    155|  do {                                                              \
  |  |   70|    155|    if((x)->subpointer < ((x)->subbuffer + sizeof((x)->subbuffer))) \
  |  |  ------------------
  |  |  |  Branch (70:8): [True: 155, False: 0]
  |  |  ------------------
  |  |   71|    155|      *(x)->subpointer++ = (c);                                     \
  |  |   72|    155|  } while(0)
  |  |  ------------------
  |  |  |  Branch (72:11): [Folded, False: 155]
  |  |  ------------------
  ------------------
  694|    155|    CURL_SB_ACCUM(tn, uc2[0]);
  ------------------
  |  |   69|    155|  do {                                                              \
  |  |   70|    155|    if((x)->subpointer < ((x)->subbuffer + sizeof((x)->subbuffer))) \
  |  |  ------------------
  |  |  |  Branch (70:8): [True: 155, False: 0]
  |  |  ------------------
  |  |   71|    155|      *(x)->subpointer++ = (c);                                     \
  |  |   72|    155|  } while(0)
  |  |  ------------------
  |  |  |  Branch (72:11): [Folded, False: 155]
  |  |  ------------------
  ------------------
  695|    155|    CURL_SB_ACCUM(tn, uc2[1]);
  ------------------
  |  |   69|    155|  do {                                                              \
  |  |   70|    155|    if((x)->subpointer < ((x)->subbuffer + sizeof((x)->subbuffer))) \
  |  |  ------------------
  |  |  |  Branch (70:8): [True: 155, False: 0]
  |  |  ------------------
  |  |   71|    155|      *(x)->subpointer++ = (c);                                     \
  |  |   72|    155|  } while(0)
  |  |  ------------------
  |  |  |  Branch (72:11): [Folded, False: 155]
  |  |  ------------------
  ------------------
  696|       |
  697|    155|    CURL_SB_ACCUM(tn, CURL_IAC);
  ------------------
  |  |   69|    155|  do {                                                              \
  |  |   70|    155|    if((x)->subpointer < ((x)->subbuffer + sizeof((x)->subbuffer))) \
  |  |  ------------------
  |  |  |  Branch (70:8): [True: 155, False: 0]
  |  |  ------------------
  |  |   71|    155|      *(x)->subpointer++ = (c);                                     \
  |  |   72|    155|  } while(0)
  |  |  ------------------
  |  |  |  Branch (72:11): [Folded, False: 155]
  |  |  ------------------
  ------------------
  698|    155|    CURL_SB_ACCUM(tn, CURL_SE);
  ------------------
  |  |   69|    155|  do {                                                              \
  |  |   70|    155|    if((x)->subpointer < ((x)->subbuffer + sizeof((x)->subbuffer))) \
  |  |  ------------------
  |  |  |  Branch (70:8): [True: 155, False: 0]
  |  |  ------------------
  |  |   71|    155|      *(x)->subpointer++ = (c);                                     \
  |  |   72|    155|  } while(0)
  |  |  ------------------
  |  |  |  Branch (72:11): [Folded, False: 155]
  |  |  ------------------
  ------------------
  699|    155|    CURL_SB_TERM(tn);
  ------------------
  |  |   64|    155|  do {                             \
  |  |   65|    155|    (x)->subend = (x)->subpointer; \
  |  |   66|    155|    CURL_SB_CLEAR(x);              \
  |  |  ------------------
  |  |  |  |   62|    155|#define CURL_SB_CLEAR(x) (x)->subpointer = (x)->subbuffer
  |  |  ------------------
  |  |   67|    155|  } while(0)
  |  |  ------------------
  |  |  |  Branch (67:11): [Folded, False: 155]
  |  |  ------------------
  ------------------
  700|       |    /* data suboption is now ready */
  701|       |
  702|    155|    printsub(data, '>', (const unsigned char *)tn->subbuffer + 2,
  703|    155|             CURL_SB_LEN(tn) - 2);
  ------------------
  |  |   75|    155|#define CURL_SB_LEN(x) ((x)->subend - (x)->subpointer)
  ------------------
  704|       |
  705|       |    /* we send the header of the suboption... */
  706|    155|    bytes_written = swrite(conn->sock[FIRSTSOCKET], tn->subbuffer, 3);
  ------------------
  |  |  966|    155|#define swrite(x, y, z) (ssize_t)send((SEND_TYPE_ARG1)(x), \
  |  |  967|    155|                                      (const SEND_TYPE_ARG2)(y), \
  |  |  968|    155|                                      (SEND_TYPE_ARG3)(z), \
  |  |  969|    155|                                      (SEND_TYPE_ARG4)(SEND_4TH_ARG))
  |  |  ------------------
  |  |  |  |  909|    155|#define SEND_4TH_ARG MSG_NOSIGNAL
  |  |  ------------------
  ------------------
  707|    155|    if(bytes_written < 0)
  ------------------
  |  Branch (707:8): [True: 0, False: 155]
  ------------------
  708|      0|      failf(data, "Sending data failed (%d)", SOCKERRNO);
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
                    failf(data, "Sending data failed (%d)", SOCKERRNO);
  ------------------
  |  | 1089|      0|#define SOCKERRNO         errno
  ------------------
  709|       |    /* ... then the window size with the send_telnet_data() function
  710|       |       to deal with 0xFF cases ... */
  711|    155|    send_telnet_data(data, tn, (const char *)tn->subbuffer + 3, 4);
  712|       |    /* ... and the footer */
  713|    155|    bytes_written = swrite(conn->sock[FIRSTSOCKET], tn->subbuffer + 7, 2);
  ------------------
  |  |  966|    155|#define swrite(x, y, z) (ssize_t)send((SEND_TYPE_ARG1)(x), \
  |  |  967|    155|                                      (const SEND_TYPE_ARG2)(y), \
  |  |  968|    155|                                      (SEND_TYPE_ARG3)(z), \
  |  |  969|    155|                                      (SEND_TYPE_ARG4)(SEND_4TH_ARG))
  |  |  ------------------
  |  |  |  |  909|    155|#define SEND_4TH_ARG MSG_NOSIGNAL
  |  |  ------------------
  ------------------
  714|    155|    if(bytes_written < 0)
  ------------------
  |  Branch (714:8): [True: 0, False: 155]
  ------------------
  715|      0|      failf(data, "Sending data failed (%d)", SOCKERRNO);
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
                    failf(data, "Sending data failed (%d)", SOCKERRNO);
  ------------------
  |  | 1089|      0|#define SOCKERRNO         errno
  ------------------
  716|    155|    break;
  717|    155|  }
  718|    155|}
telnet.c:printsub:
  494|  1.93k|{
  495|  1.93k|  if(data->set.verbose) {
  ------------------
  |  Branch (495:6): [True: 1.93k, False: 0]
  ------------------
  496|  1.93k|    unsigned int i = 0;
  497|  1.93k|    if(direction) {
  ------------------
  |  Branch (497:8): [True: 1.93k, False: 0]
  ------------------
  498|  1.93k|      infof(data, "%s IAC SB ", (direction == '<') ? "RCVD" : "SENT");
  ------------------
  |  |  143|  1.93k|  do {                               \
  |  |  144|  1.93k|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|  1.93k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 1.93k, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 1.93k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|  1.93k|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 1.93k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|  1.93k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|  3.86k|      Curl_infof(data, __VA_ARGS__); \
  |  |  ------------------
  |  |  |  Branch (145:24): [True: 1.05k, False: 874]
  |  |  ------------------
  |  |  146|  1.93k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 1.93k]
  |  |  ------------------
  ------------------
  499|  1.93k|      if(length >= 3) {
  ------------------
  |  Branch (499:10): [True: 1.93k, False: 0]
  ------------------
  500|  1.93k|        int j;
  501|       |
  502|  1.93k|        i = pointer[length - 2];
  503|  1.93k|        j = pointer[length - 1];
  504|       |
  505|  1.93k|        if(i != CURL_IAC || j != CURL_SE) {
  ------------------
  |  |   82|  3.86k|#define CURL_IAC  255 /* Interpret As Command */
  ------------------
                      if(i != CURL_IAC || j != CURL_SE) {
  ------------------
  |  |   73|  1.83k|#define CURL_SE   240 /* Sub negotiation End */
  ------------------
  |  Branch (505:12): [True: 98, False: 1.83k]
  |  Branch (505:29): [True: 13, False: 1.81k]
  ------------------
  506|    111|          infof(data, "(terminated by ");
  ------------------
  |  |  143|    111|  do {                               \
  |  |  144|    111|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|    111|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 111, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 111, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|    111|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 111, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|    111|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|    111|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|    111|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 111]
  |  |  ------------------
  ------------------
  507|    111|          if(CURL_TELOPT_OK(i))
  ------------------
  |  |   65|    111|#define CURL_TELOPT_OK(x) ((x) <= CURL_TELOPT_MAXIMUM)
  |  |  ------------------
  |  |  |  |   63|    111|#define CURL_TELOPT_MAXIMUM CURL_TELOPT_NEW_ENVIRON
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    111|#define CURL_TELOPT_NEW_ENVIRON 39  /* NEW ENVIRONment variables */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (65:27): [True: 27, False: 84]
  |  |  ------------------
  ------------------
  508|     27|            infof(data, "%s ", CURL_TELOPT(i));
  ------------------
  |  |  143|     27|  do {                               \
  |  |  144|     27|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|     27|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 27, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 27, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|     27|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 27, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|     27|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|     27|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|     27|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 27]
  |  |  ------------------
  ------------------
  509|     84|          else if(CURL_TELCMD_OK(i))
  ------------------
  |  |  105|     84|  (((unsigned int)(x) >= CURL_TELCMD_MINIMUM) && \
  |  |  ------------------
  |  |  |  |   96|     84|#define CURL_TELCMD_MINIMUM CURL_xEOF /* the first one */
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|     84|#define CURL_xEOF 236 /* End Of File */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (105:4): [True: 19, False: 65]
  |  |  ------------------
  |  |  106|     84|   ((unsigned int)(x) <= CURL_TELCMD_MAXIMUM))
  |  |  ------------------
  |  |  |  |   97|     19|#define CURL_TELCMD_MAXIMUM CURL_IAC  /* surprise, 255 is the last one! ;-) */
  |  |  |  |  ------------------
  |  |  |  |  |  |   82|     19|#define CURL_IAC  255 /* Interpret As Command */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (106:4): [True: 19, False: 0]
  |  |  ------------------
  ------------------
  510|     19|            infof(data, "%s ", CURL_TELCMD(i));
  ------------------
  |  |  143|     19|  do {                               \
  |  |  144|     19|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|     19|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 19, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 19, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|     19|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 19, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|     19|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|     19|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|     19|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 19]
  |  |  ------------------
  ------------------
  511|     65|          else
  512|     65|            infof(data, "%u ", i);
  ------------------
  |  |  143|     65|  do {                               \
  |  |  144|     65|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|     65|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 65, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 65, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|     65|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 65, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|     65|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|     65|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|     65|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 65]
  |  |  ------------------
  ------------------
  513|    111|          if(CURL_TELOPT_OK(j))
  ------------------
  |  |   65|    111|#define CURL_TELOPT_OK(x) ((x) <= CURL_TELOPT_MAXIMUM)
  |  |  ------------------
  |  |  |  |   63|    111|#define CURL_TELOPT_MAXIMUM CURL_TELOPT_NEW_ENVIRON
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    111|#define CURL_TELOPT_NEW_ENVIRON 39  /* NEW ENVIRONment variables */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (65:27): [True: 25, False: 86]
  |  |  ------------------
  ------------------
  514|     25|            infof(data, "%s", CURL_TELOPT(j));
  ------------------
  |  |  143|     25|  do {                               \
  |  |  144|     25|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|     25|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 25, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 25, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|     25|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 25, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|     25|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|     25|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|     25|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 25]
  |  |  ------------------
  ------------------
  515|     86|          else if(CURL_TELCMD_OK(j))
  ------------------
  |  |  105|     86|  (((unsigned int)(x) >= CURL_TELCMD_MINIMUM) && \
  |  |  ------------------
  |  |  |  |   96|     86|#define CURL_TELCMD_MINIMUM CURL_xEOF /* the first one */
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|     86|#define CURL_xEOF 236 /* End Of File */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (105:4): [True: 24, False: 62]
  |  |  ------------------
  |  |  106|     86|   ((unsigned int)(x) <= CURL_TELCMD_MAXIMUM))
  |  |  ------------------
  |  |  |  |   97|     24|#define CURL_TELCMD_MAXIMUM CURL_IAC  /* surprise, 255 is the last one! ;-) */
  |  |  |  |  ------------------
  |  |  |  |  |  |   82|     24|#define CURL_IAC  255 /* Interpret As Command */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (106:4): [True: 24, False: 0]
  |  |  ------------------
  ------------------
  516|     24|            infof(data, "%s", CURL_TELCMD(j));
  ------------------
  |  |  143|     24|  do {                               \
  |  |  144|     24|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|     24|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 24, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 24, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|     24|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 24, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|     24|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|     24|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|     24|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 24]
  |  |  ------------------
  ------------------
  517|     62|          else
  518|     62|            infof(data, "%d", j);
  ------------------
  |  |  143|     62|  do {                               \
  |  |  144|     62|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|     62|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 62, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 62, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|     62|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 62, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|     62|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|     62|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|     62|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 62]
  |  |  ------------------
  ------------------
  519|    111|          infof(data, ", not IAC SE) ");
  ------------------
  |  |  143|    111|  do {                               \
  |  |  144|    111|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|    111|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 111, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 111, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|    111|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 111, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|    111|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|    111|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|    111|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 111]
  |  |  ------------------
  ------------------
  520|    111|        }
  521|  1.93k|      }
  522|  1.93k|      if(length >= 2)
  ------------------
  |  Branch (522:10): [True: 1.93k, False: 0]
  ------------------
  523|  1.93k|        length -= 2;
  524|      0|      else /* bad input */
  525|      0|        return;
  526|  1.93k|    }
  527|  1.93k|    if(length <= 1) {
  ------------------
  |  Branch (527:8): [True: 191, False: 1.73k]
  ------------------
  528|    191|      infof(data, "(Empty suboption?)");
  ------------------
  |  |  143|    191|  do {                               \
  |  |  144|    191|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|    191|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 191, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 191, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|    191|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 191, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|    191|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|    191|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|    191|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 191]
  |  |  ------------------
  ------------------
  529|    191|      return;
  530|    191|    }
  531|       |
  532|  1.73k|    if(CURL_TELOPT_OK(pointer[0])) {
  ------------------
  |  |   65|  1.73k|#define CURL_TELOPT_OK(x) ((x) <= CURL_TELOPT_MAXIMUM)
  |  |  ------------------
  |  |  |  |   63|  1.73k|#define CURL_TELOPT_MAXIMUM CURL_TELOPT_NEW_ENVIRON
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.73k|#define CURL_TELOPT_NEW_ENVIRON 39  /* NEW ENVIRONment variables */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (65:27): [True: 1.57k, False: 164]
  |  |  ------------------
  ------------------
  533|  1.57k|      switch(pointer[0]) {
  534|     80|      case CURL_TELOPT_TTYPE:
  ------------------
  |  |   34|     80|#define CURL_TELOPT_TTYPE       24  /* Terminal TYPE */
  ------------------
  |  Branch (534:7): [True: 80, False: 1.49k]
  ------------------
  535|    173|      case CURL_TELOPT_XDISPLOC:
  ------------------
  |  |   36|    173|#define CURL_TELOPT_XDISPLOC    35  /* X DISPlay LOCation */
  ------------------
  |  Branch (535:7): [True: 93, False: 1.48k]
  ------------------
  536|  1.26k|      case CURL_TELOPT_NEW_ENVIRON:
  ------------------
  |  |   37|  1.26k|#define CURL_TELOPT_NEW_ENVIRON 39  /* NEW ENVIRONment variables */
  ------------------
  |  Branch (536:7): [True: 1.09k, False: 482]
  ------------------
  537|  1.46k|      case CURL_TELOPT_NAWS:
  ------------------
  |  |   35|  1.46k|#define CURL_TELOPT_NAWS        31  /* Negotiate About Window Size */
  ------------------
  |  Branch (537:7): [True: 196, False: 1.37k]
  ------------------
  538|  1.46k|        infof(data, "%s", CURL_TELOPT(pointer[0]));
  ------------------
  |  |  143|  1.46k|  do {                               \
  |  |  144|  1.46k|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|  1.46k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 1.46k, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 1.46k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|  1.46k|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 1.46k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|  1.46k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|  1.46k|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|  1.46k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 1.46k]
  |  |  ------------------
  ------------------
  539|  1.46k|        break;
  540|    113|      default:
  ------------------
  |  Branch (540:7): [True: 113, False: 1.46k]
  ------------------
  541|    113|        infof(data, "%s (unsupported)", CURL_TELOPT(pointer[0]));
  ------------------
  |  |  143|    113|  do {                               \
  |  |  144|    113|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|    113|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 113, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 113, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|    113|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 113, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|    113|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|    113|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|    113|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 113]
  |  |  ------------------
  ------------------
  542|    113|        break;
  543|  1.57k|      }
  544|  1.57k|    }
  545|    164|    else
  546|    164|      infof(data, "%d (unknown)", pointer[0]);
  ------------------
  |  |  143|    164|  do {                               \
  |  |  144|    164|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|    164|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 164, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 164, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|    164|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 164, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|    164|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|    164|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|    164|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 164]
  |  |  ------------------
  ------------------
  547|       |
  548|  1.73k|    switch(pointer[0]) {
  549|    196|    case CURL_TELOPT_NAWS:
  ------------------
  |  |   35|    196|#define CURL_TELOPT_NAWS        31  /* Negotiate About Window Size */
  ------------------
  |  Branch (549:5): [True: 196, False: 1.54k]
  ------------------
  550|    196|      if(length > 4)
  ------------------
  |  Branch (550:10): [True: 177, False: 19]
  ------------------
  551|    177|        infof(data, "Width: %d ; Height: %d", (pointer[1] << 8) | pointer[2],
  ------------------
  |  |  143|    177|  do {                               \
  |  |  144|    177|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|    177|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 177, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 177, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|    177|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 177, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|    177|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|    177|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|    177|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 177]
  |  |  ------------------
  ------------------
  552|    196|              (pointer[3] << 8) | pointer[4]);
  553|    196|      break;
  554|  1.54k|    default:
  ------------------
  |  Branch (554:5): [True: 1.54k, False: 196]
  ------------------
  555|  1.54k|      switch(pointer[1]) {
  ------------------
  |  Branch (555:14): [True: 1.37k, False: 172]
  ------------------
  556|    893|      case CURL_TELQUAL_IS:
  ------------------
  |  |   99|    893|#define CURL_TELQUAL_IS   0
  ------------------
  |  Branch (556:7): [True: 893, False: 650]
  ------------------
  557|    893|        infof(data, " IS");
  ------------------
  |  |  143|    893|  do {                               \
  |  |  144|    893|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|    893|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 893, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 893, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|    893|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 893, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|    893|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|    893|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|    893|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 893]
  |  |  ------------------
  ------------------
  558|    893|        break;
  559|    291|      case CURL_TELQUAL_SEND:
  ------------------
  |  |  100|    291|#define CURL_TELQUAL_SEND 1
  ------------------
  |  Branch (559:7): [True: 291, False: 1.25k]
  ------------------
  560|    291|        infof(data, " SEND");
  ------------------
  |  |  143|    291|  do {                               \
  |  |  144|    291|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|    291|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 291, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 291, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|    291|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 291, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|    291|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|    291|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|    291|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 291]
  |  |  ------------------
  ------------------
  561|    291|        break;
  562|    107|      case CURL_TELQUAL_INFO:
  ------------------
  |  |  101|    107|#define CURL_TELQUAL_INFO 2
  ------------------
  |  Branch (562:7): [True: 107, False: 1.43k]
  ------------------
  563|    107|        infof(data, " INFO/REPLY");
  ------------------
  |  |  143|    107|  do {                               \
  |  |  144|    107|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|    107|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 107, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 107, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|    107|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 107, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|    107|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|    107|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|    107|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 107]
  |  |  ------------------
  ------------------
  564|    107|        break;
  565|     80|      case CURL_TELQUAL_NAME:
  ------------------
  |  |  102|     80|#define CURL_TELQUAL_NAME 3
  ------------------
  |  Branch (565:7): [True: 80, False: 1.46k]
  ------------------
  566|     80|        infof(data, " NAME");
  ------------------
  |  |  143|     80|  do {                               \
  |  |  144|     80|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|     80|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 80, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 80, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|     80|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 80, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|     80|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|     80|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|     80|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 80]
  |  |  ------------------
  ------------------
  567|     80|        break;
  568|  1.54k|      }
  569|       |
  570|  1.54k|      switch(pointer[0]) {
  571|     80|      case CURL_TELOPT_TTYPE:
  ------------------
  |  |   34|     80|#define CURL_TELOPT_TTYPE       24  /* Terminal TYPE */
  ------------------
  |  Branch (571:7): [True: 80, False: 1.46k]
  ------------------
  572|    173|      case CURL_TELOPT_XDISPLOC:
  ------------------
  |  |   36|    173|#define CURL_TELOPT_XDISPLOC    35  /* X DISPlay LOCation */
  ------------------
  |  Branch (572:7): [True: 93, False: 1.45k]
  ------------------
  573|    173|        infof(data, " \"%.*s\"",
  ------------------
  |  |  143|    173|  do {                               \
  |  |  144|    173|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|    173|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 173, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 173, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|    173|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 173, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|    173|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|    346|      Curl_infof(data, __VA_ARGS__); \
  |  |  ------------------
  |  |  |  Branch (145:24): [True: 81, False: 92]
  |  |  ------------------
  |  |  146|    173|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 173]
  |  |  ------------------
  ------------------
  574|    173|              (int)((length > 2) ? (length - 2) : 0), &pointer[2]);
  575|    173|        break;
  576|  1.09k|      case CURL_TELOPT_NEW_ENVIRON:
  ------------------
  |  |   37|  1.09k|#define CURL_TELOPT_NEW_ENVIRON 39  /* NEW ENVIRONment variables */
  ------------------
  |  Branch (576:7): [True: 1.09k, False: 450]
  ------------------
  577|  1.09k|        if(pointer[1] == CURL_TELQUAL_IS) {
  ------------------
  |  |   99|  1.09k|#define CURL_TELQUAL_IS   0
  ------------------
  |  Branch (577:12): [True: 720, False: 373]
  ------------------
  578|    720|          infof(data, " ");
  ------------------
  |  |  143|    720|  do {                               \
  |  |  144|    720|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|    720|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 720, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 720, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|    720|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 720, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|    720|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|    720|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|    720|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 720]
  |  |  ------------------
  ------------------
  579|   201k|          for(i = 3; i < length; i++) {
  ------------------
  |  Branch (579:22): [True: 200k, False: 720]
  ------------------
  580|   200k|            switch(pointer[i]) {
  581|  2.22k|            case CURL_NEW_ENV_VAR:
  ------------------
  |  |   39|  2.22k|#define CURL_NEW_ENV_VAR   0
  ------------------
  |  Branch (581:13): [True: 2.22k, False: 198k]
  ------------------
  582|  2.22k|              infof(data, ", ");
  ------------------
  |  |  143|  2.22k|  do {                               \
  |  |  144|  2.22k|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|  2.22k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 2.22k, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 2.22k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|  2.22k|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 2.22k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|  2.22k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|  2.22k|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|  2.22k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 2.22k]
  |  |  ------------------
  ------------------
  583|  2.22k|              break;
  584|  2.17k|            case CURL_NEW_ENV_VALUE:
  ------------------
  |  |   40|  2.17k|#define CURL_NEW_ENV_VALUE 1
  ------------------
  |  Branch (584:13): [True: 2.17k, False: 198k]
  ------------------
  585|  2.17k|              infof(data, " = ");
  ------------------
  |  |  143|  2.17k|  do {                               \
  |  |  144|  2.17k|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|  2.17k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 2.17k, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 2.17k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|  2.17k|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 2.17k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|  2.17k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|  2.17k|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|  2.17k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 2.17k]
  |  |  ------------------
  ------------------
  586|  2.17k|              break;
  587|   196k|            default:
  ------------------
  |  Branch (587:13): [True: 196k, False: 4.40k]
  ------------------
  588|   196k|              infof(data, "%c", pointer[i]);
  ------------------
  |  |  143|   196k|  do {                               \
  |  |  144|   196k|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|   196k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 196k, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 196k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|   196k|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 196k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|   196k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|   196k|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|   196k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 196k]
  |  |  ------------------
  ------------------
  589|   196k|              break;
  590|   200k|            }
  591|   200k|          }
  592|    720|        }
  593|  1.09k|        break;
  594|  1.09k|      default:
  ------------------
  |  Branch (594:7): [True: 277, False: 1.26k]
  ------------------
  595|  60.9k|        for(i = 2; i < length; i++)
  ------------------
  |  Branch (595:20): [True: 60.6k, False: 277]
  ------------------
  596|  60.6k|          infof(data, " %.2x", pointer[i]);
  ------------------
  |  |  143|  60.9k|  do {                               \
  |  |  144|  60.6k|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|  60.6k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 60.6k, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 60.6k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|  60.6k|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 60.6k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|  60.6k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|  60.6k|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|  60.6k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 60.6k]
  |  |  ------------------
  ------------------
  597|    277|        break;
  598|  1.54k|      }
  599|  1.73k|    }
  600|  1.73k|  }
  601|  1.93k|}
telnet.c:rec_dont:
  779|    241|{
  780|    241|  switch(tn->us[option]) {
  ------------------
  |  Branch (780:10): [True: 241, False: 0]
  ------------------
  781|    117|  case CURL_NO:
  ------------------
  |  |   82|    117|#define CURL_NO          0
  ------------------
  |  Branch (781:3): [True: 117, False: 124]
  ------------------
  782|       |    /* Already disabled */
  783|    117|    break;
  784|       |
  785|    121|  case CURL_YES:
  ------------------
  |  |   83|    121|#define CURL_YES         1
  ------------------
  |  Branch (785:3): [True: 121, False: 120]
  ------------------
  786|    121|    tn->us[option] = CURL_NO;
  ------------------
  |  |   82|    121|#define CURL_NO          0
  ------------------
  787|    121|    send_negotiation(data, CURL_WONT, option);
  ------------------
  |  |   79|    121|#define CURL_WONT 252 /* Our side will not use this option */
  ------------------
  788|    121|    break;
  789|       |
  790|      0|  case CURL_WANTNO:
  ------------------
  |  |   85|      0|#define CURL_WANTNO      3
  ------------------
  |  Branch (790:3): [True: 0, False: 241]
  ------------------
  791|      0|    switch(tn->usq[option]) {
  ------------------
  |  Branch (791:12): [True: 0, False: 0]
  ------------------
  792|      0|    case CURL_EMPTY:
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  |  Branch (792:5): [True: 0, False: 0]
  ------------------
  793|      0|      tn->us[option] = CURL_NO;
  ------------------
  |  |   82|      0|#define CURL_NO          0
  ------------------
  794|      0|      break;
  795|       |
  796|      0|    case CURL_OPPOSITE:
  ------------------
  |  |   88|      0|#define CURL_OPPOSITE    1
  ------------------
  |  Branch (796:5): [True: 0, False: 0]
  ------------------
  797|      0|      tn->us[option] = CURL_WANTYES;
  ------------------
  |  |   84|      0|#define CURL_WANTYES     2
  ------------------
  798|      0|      tn->usq[option] = CURL_EMPTY;
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  799|      0|      send_negotiation(data, CURL_WILL, option);
  ------------------
  |  |   78|      0|#define CURL_WILL 251 /* Our side WILL use this option */
  ------------------
  800|      0|      break;
  801|      0|    }
  802|      0|    break;
  803|       |
  804|      3|  case CURL_WANTYES:
  ------------------
  |  |   84|      3|#define CURL_WANTYES     2
  ------------------
  |  Branch (804:3): [True: 3, False: 238]
  ------------------
  805|      3|    switch(tn->usq[option]) {
  ------------------
  |  Branch (805:12): [True: 3, False: 0]
  ------------------
  806|      3|    case CURL_EMPTY:
  ------------------
  |  |   87|      3|#define CURL_EMPTY       0
  ------------------
  |  Branch (806:5): [True: 3, False: 0]
  ------------------
  807|      3|      tn->us[option] = CURL_NO;
  ------------------
  |  |   82|      3|#define CURL_NO          0
  ------------------
  808|      3|      break;
  809|      0|    case CURL_OPPOSITE:
  ------------------
  |  |   88|      0|#define CURL_OPPOSITE    1
  ------------------
  |  Branch (809:5): [True: 0, False: 3]
  ------------------
  810|      0|      tn->us[option] = CURL_NO;
  ------------------
  |  |   82|      0|#define CURL_NO          0
  ------------------
  811|      0|      tn->usq[option] = CURL_EMPTY;
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  812|      0|      break;
  813|      3|    }
  814|      3|    break;
  815|    241|  }
  816|    241|}
telnet.c:suboption:
  972|  1.08k|{
  973|  1.08k|  struct curl_slist *v;
  974|  1.08k|  unsigned char temp[2048];
  975|  1.08k|  ssize_t bytes_written;
  976|  1.08k|  size_t len;
  977|  1.08k|  struct connectdata *conn = data->conn;
  978|       |
  979|  1.08k|  if(!CURL_SB_LEN(tn)) /* ignore empty suboption */
  ------------------
  |  |   75|  1.08k|#define CURL_SB_LEN(x) ((x)->subend - (x)->subpointer)
  ------------------
  |  Branch (979:6): [True: 32, False: 1.05k]
  ------------------
  980|     32|    return CURLE_OK;
  981|       |
  982|  1.05k|  printsub(data, '<', (const unsigned char *)tn->subbuffer,
  983|  1.05k|           CURL_SB_LEN(tn) + 2);
  ------------------
  |  |   75|  1.05k|#define CURL_SB_LEN(x) ((x)->subend - (x)->subpointer)
  ------------------
  984|  1.05k|  switch(CURL_SB_GET(tn)) {
  ------------------
  |  |   74|  1.05k|#define CURL_SB_GET(x) ((*(x)->subpointer++) & 0xff)
  |  |  ------------------
  |  |  |  Branch (74:24): [True: 734, False: 322]
  |  |  ------------------
  ------------------
  985|     49|  case CURL_TELOPT_TTYPE:
  ------------------
  |  |   34|     49|#define CURL_TELOPT_TTYPE       24  /* Terminal TYPE */
  ------------------
  |  Branch (985:3): [True: 49, False: 1.00k]
  ------------------
  986|     49|    if(bad_option(tn->subopt_ttype))
  ------------------
  |  Branch (986:8): [True: 7, False: 42]
  ------------------
  987|      7|      return CURLE_BAD_FUNCTION_ARGUMENT;
  988|     42|    if(strlen(tn->subopt_ttype) > 1000) {
  ------------------
  |  Branch (988:8): [True: 1, False: 41]
  ------------------
  989|      1|      failf(data, "Too long telnet TTYPE");
  ------------------
  |  |   62|      1|#define failf Curl_failf
  ------------------
  990|      1|      return CURLE_SEND_ERROR;
  991|      1|    }
  992|     41|    len = curl_msnprintf((char *)temp, sizeof(temp), "%c%c%c%c%s%c%c",
  993|     41|                         CURL_IAC, CURL_SB, CURL_TELOPT_TTYPE,
  ------------------
  |  |   82|     41|#define CURL_IAC  255 /* Interpret As Command */
  ------------------
                                       CURL_IAC, CURL_SB, CURL_TELOPT_TTYPE,
  ------------------
  |  |   77|     41|#define CURL_SB   250 /* SuBnegotiation */
  ------------------
                                       CURL_IAC, CURL_SB, CURL_TELOPT_TTYPE,
  ------------------
  |  |   34|     41|#define CURL_TELOPT_TTYPE       24  /* Terminal TYPE */
  ------------------
  994|     41|                         CURL_TELQUAL_IS, tn->subopt_ttype, CURL_IAC,
  ------------------
  |  |   99|     41|#define CURL_TELQUAL_IS   0
  ------------------
                                       CURL_TELQUAL_IS, tn->subopt_ttype, CURL_IAC,
  ------------------
  |  |   82|     41|#define CURL_IAC  255 /* Interpret As Command */
  ------------------
  995|     41|                         CURL_SE);
  ------------------
  |  |   73|     41|#define CURL_SE   240 /* Sub negotiation End */
  ------------------
  996|     41|    bytes_written = swrite(conn->sock[FIRSTSOCKET], temp, len);
  ------------------
  |  |  966|     41|#define swrite(x, y, z) (ssize_t)send((SEND_TYPE_ARG1)(x), \
  |  |  967|     41|                                      (const SEND_TYPE_ARG2)(y), \
  |  |  968|     41|                                      (SEND_TYPE_ARG3)(z), \
  |  |  969|     41|                                      (SEND_TYPE_ARG4)(SEND_4TH_ARG))
  |  |  ------------------
  |  |  |  |  909|     41|#define SEND_4TH_ARG MSG_NOSIGNAL
  |  |  ------------------
  ------------------
  997|       |
  998|     41|    if(bytes_written < 0) {
  ------------------
  |  Branch (998:8): [True: 0, False: 41]
  ------------------
  999|      0|      failf(data, "Sending data failed (%d)", SOCKERRNO);
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
                    failf(data, "Sending data failed (%d)", SOCKERRNO);
  ------------------
  |  | 1089|      0|#define SOCKERRNO         errno
  ------------------
 1000|      0|      return CURLE_SEND_ERROR;
 1001|      0|    }
 1002|     41|    printsub(data, '>', &temp[2], len-2);
 1003|     41|    break;
 1004|     54|  case CURL_TELOPT_XDISPLOC:
  ------------------
  |  |   36|     54|#define CURL_TELOPT_XDISPLOC    35  /* X DISPlay LOCation */
  ------------------
  |  Branch (1004:3): [True: 54, False: 1.00k]
  ------------------
 1005|     54|    if(bad_option(tn->subopt_xdisploc))
  ------------------
  |  Branch (1005:8): [True: 6, False: 48]
  ------------------
 1006|      6|      return CURLE_BAD_FUNCTION_ARGUMENT;
 1007|     48|    if(strlen(tn->subopt_xdisploc) > 1000) {
  ------------------
  |  Branch (1007:8): [True: 1, False: 47]
  ------------------
 1008|      1|      failf(data, "Too long telnet XDISPLOC");
  ------------------
  |  |   62|      1|#define failf Curl_failf
  ------------------
 1009|      1|      return CURLE_SEND_ERROR;
 1010|      1|    }
 1011|     47|    len = curl_msnprintf((char *)temp, sizeof(temp), "%c%c%c%c%s%c%c",
 1012|     47|                         CURL_IAC, CURL_SB, CURL_TELOPT_XDISPLOC,
  ------------------
  |  |   82|     47|#define CURL_IAC  255 /* Interpret As Command */
  ------------------
                                       CURL_IAC, CURL_SB, CURL_TELOPT_XDISPLOC,
  ------------------
  |  |   77|     47|#define CURL_SB   250 /* SuBnegotiation */
  ------------------
                                       CURL_IAC, CURL_SB, CURL_TELOPT_XDISPLOC,
  ------------------
  |  |   36|     47|#define CURL_TELOPT_XDISPLOC    35  /* X DISPlay LOCation */
  ------------------
 1013|     47|                         CURL_TELQUAL_IS, tn->subopt_xdisploc, CURL_IAC,
  ------------------
  |  |   99|     47|#define CURL_TELQUAL_IS   0
  ------------------
                                       CURL_TELQUAL_IS, tn->subopt_xdisploc, CURL_IAC,
  ------------------
  |  |   82|     47|#define CURL_IAC  255 /* Interpret As Command */
  ------------------
 1014|     47|                         CURL_SE);
  ------------------
  |  |   73|     47|#define CURL_SE   240 /* Sub negotiation End */
  ------------------
 1015|     47|    bytes_written = swrite(conn->sock[FIRSTSOCKET], temp, len);
  ------------------
  |  |  966|     47|#define swrite(x, y, z) (ssize_t)send((SEND_TYPE_ARG1)(x), \
  |  |  967|     47|                                      (const SEND_TYPE_ARG2)(y), \
  |  |  968|     47|                                      (SEND_TYPE_ARG3)(z), \
  |  |  969|     47|                                      (SEND_TYPE_ARG4)(SEND_4TH_ARG))
  |  |  ------------------
  |  |  |  |  909|     47|#define SEND_4TH_ARG MSG_NOSIGNAL
  |  |  ------------------
  ------------------
 1016|     47|    if(bytes_written < 0) {
  ------------------
  |  Branch (1016:8): [True: 0, False: 47]
  ------------------
 1017|      0|      failf(data, "Sending data failed (%d)", SOCKERRNO);
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
                    failf(data, "Sending data failed (%d)", SOCKERRNO);
  ------------------
  |  | 1089|      0|#define SOCKERRNO         errno
  ------------------
 1018|      0|      return CURLE_SEND_ERROR;
 1019|      0|    }
 1020|     47|    printsub(data, '>', &temp[2], len - 2);
 1021|     47|    break;
 1022|    631|  case CURL_TELOPT_NEW_ENVIRON:
  ------------------
  |  |   37|    631|#define CURL_TELOPT_NEW_ENVIRON 39  /* NEW ENVIRONment variables */
  ------------------
  |  Branch (1022:3): [True: 631, False: 425]
  ------------------
 1023|    631|    len = curl_msnprintf((char *)temp, sizeof(temp), "%c%c%c%c",
 1024|    631|                         CURL_IAC, CURL_SB, CURL_TELOPT_NEW_ENVIRON,
  ------------------
  |  |   82|    631|#define CURL_IAC  255 /* Interpret As Command */
  ------------------
                                       CURL_IAC, CURL_SB, CURL_TELOPT_NEW_ENVIRON,
  ------------------
  |  |   77|    631|#define CURL_SB   250 /* SuBnegotiation */
  ------------------
                                       CURL_IAC, CURL_SB, CURL_TELOPT_NEW_ENVIRON,
  ------------------
  |  |   37|    631|#define CURL_TELOPT_NEW_ENVIRON 39  /* NEW ENVIRONment variables */
  ------------------
 1025|    631|                         CURL_TELQUAL_IS);
  ------------------
  |  |   99|    631|#define CURL_TELQUAL_IS   0
  ------------------
 1026|  2.53k|    for(v = tn->telnet_vars; v; v = v->next) {
  ------------------
  |  Branch (1026:30): [True: 1.90k, False: 631]
  ------------------
 1027|  1.90k|      size_t tmplen = (strlen(v->data) + 1);
 1028|  1.90k|      if(bad_option(v->data))
  ------------------
  |  Branch (1028:10): [True: 0, False: 1.90k]
  ------------------
 1029|      0|        return CURLE_BAD_FUNCTION_ARGUMENT;
 1030|       |      /* Add the variable if it fits */
 1031|  1.90k|      if(len + tmplen < sizeof(temp) - 6) {
  ------------------
  |  Branch (1031:10): [True: 1.80k, False: 101]
  ------------------
 1032|  1.80k|        const char *s = strchr(v->data, ',');
 1033|  1.80k|        if(!s)
  ------------------
  |  Branch (1033:12): [True: 137, False: 1.67k]
  ------------------
 1034|    137|          len += curl_msnprintf((char *)&temp[len], sizeof(temp) - len,
 1035|    137|                                "%c%s", CURL_NEW_ENV_VAR, v->data);
  ------------------
  |  |   39|    137|#define CURL_NEW_ENV_VAR   0
  ------------------
 1036|  1.67k|        else {
 1037|  1.67k|          size_t vlen = s - v->data;
 1038|  1.67k|          len += curl_msnprintf((char *)&temp[len], sizeof(temp) - len,
 1039|  1.67k|                                "%c%.*s%c%s", CURL_NEW_ENV_VAR,
  ------------------
  |  |   39|  1.67k|#define CURL_NEW_ENV_VAR   0
  ------------------
 1040|  1.67k|                                (int)vlen, v->data, CURL_NEW_ENV_VALUE, ++s);
  ------------------
  |  |   40|  1.67k|#define CURL_NEW_ENV_VALUE 1
  ------------------
 1041|  1.67k|        }
 1042|  1.80k|      }
 1043|  1.90k|    }
 1044|    631|    curl_msnprintf((char *)&temp[len], sizeof(temp) - len,
 1045|    631|                   "%c%c", CURL_IAC, CURL_SE);
  ------------------
  |  |   82|    631|#define CURL_IAC  255 /* Interpret As Command */
  ------------------
                                 "%c%c", CURL_IAC, CURL_SE);
  ------------------
  |  |   73|    631|#define CURL_SE   240 /* Sub negotiation End */
  ------------------
 1046|    631|    len += 2;
 1047|    631|    bytes_written = swrite(conn->sock[FIRSTSOCKET], temp, len);
  ------------------
  |  |  966|    631|#define swrite(x, y, z) (ssize_t)send((SEND_TYPE_ARG1)(x), \
  |  |  967|    631|                                      (const SEND_TYPE_ARG2)(y), \
  |  |  968|    631|                                      (SEND_TYPE_ARG3)(z), \
  |  |  969|    631|                                      (SEND_TYPE_ARG4)(SEND_4TH_ARG))
  |  |  ------------------
  |  |  |  |  909|    631|#define SEND_4TH_ARG MSG_NOSIGNAL
  |  |  ------------------
  ------------------
 1048|    631|    if(bytes_written < 0)
  ------------------
  |  Branch (1048:8): [True: 0, False: 631]
  ------------------
 1049|      0|      failf(data, "Sending data failed (%d)", SOCKERRNO);
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
                    failf(data, "Sending data failed (%d)", SOCKERRNO);
  ------------------
  |  | 1089|      0|#define SOCKERRNO         errno
  ------------------
 1050|    631|    printsub(data, '>', &temp[2], len - 2);
 1051|    631|    break;
 1052|  1.05k|  }
 1053|  1.04k|  return CURLE_OK;
 1054|  1.05k|}
telnet.c:bad_option:
  961|  2.01k|{
  962|  2.01k|  return !data || !!strchr(data, CURL_IAC);
  ------------------
  |  |   82|  1.99k|#define CURL_IAC  255 /* Interpret As Command */
  ------------------
  |  Branch (962:10): [True: 13, False: 1.99k]
  |  Branch (962:19): [True: 0, False: 1.99k]
  ------------------
  963|  2.01k|}
telnet.c:telnet_negotiate:
  389|    273|{
  390|    273|  int i;
  391|       |
  392|  11.1k|  for(i = 0; i < CURL_NTELOPTS; i++) {
  ------------------
  |  |   67|  11.1k|#define CURL_NTELOPTS 40
  ------------------
  |  Branch (392:14): [True: 10.9k, False: 273]
  ------------------
  393|  10.9k|    if(i == CURL_TELOPT_ECHO)
  ------------------
  |  |   31|  10.9k|#define CURL_TELOPT_ECHO        1   /* echo */
  ------------------
  |  Branch (393:8): [True: 273, False: 10.6k]
  ------------------
  394|    273|      continue;
  395|       |
  396|  10.6k|    if(tn->us_preferred[i] == CURL_YES)
  ------------------
  |  |   83|  10.6k|#define CURL_YES         1
  ------------------
  |  Branch (396:8): [True: 613, False: 10.0k]
  ------------------
  397|    613|      set_local_option(data, tn, i, CURL_YES);
  ------------------
  |  |   83|    613|#define CURL_YES         1
  ------------------
  398|       |
  399|  10.6k|    if(tn->him_preferred[i] == CURL_YES)
  ------------------
  |  |   83|  10.6k|#define CURL_YES         1
  ------------------
  |  Branch (399:8): [True: 544, False: 10.1k]
  ------------------
  400|    544|      set_remote_option(data, tn, i, CURL_YES);
  ------------------
  |  |   83|    544|#define CURL_YES         1
  ------------------
  401|  10.6k|  }
  402|    273|}
telnet.c:set_local_option:
  317|    613|{
  318|    613|  if(newstate == CURL_YES) {
  ------------------
  |  |   83|    613|#define CURL_YES         1
  ------------------
  |  Branch (318:6): [True: 613, False: 0]
  ------------------
  319|    613|    switch(tn->us[option]) {
  ------------------
  |  Branch (319:12): [True: 613, False: 0]
  ------------------
  320|    554|    case CURL_NO:
  ------------------
  |  |   82|    554|#define CURL_NO          0
  ------------------
  |  Branch (320:5): [True: 554, False: 59]
  ------------------
  321|    554|      tn->us[option] = CURL_WANTYES;
  ------------------
  |  |   84|    554|#define CURL_WANTYES     2
  ------------------
  322|    554|      send_negotiation(data, CURL_WILL, option);
  ------------------
  |  |   78|    554|#define CURL_WILL 251 /* Our side WILL use this option */
  ------------------
  323|    554|      break;
  324|       |
  325|     59|    case CURL_YES:
  ------------------
  |  |   83|     59|#define CURL_YES         1
  ------------------
  |  Branch (325:5): [True: 59, False: 554]
  ------------------
  326|       |      /* Already enabled */
  327|     59|      break;
  328|       |
  329|      0|    case CURL_WANTNO:
  ------------------
  |  |   85|      0|#define CURL_WANTNO      3
  ------------------
  |  Branch (329:5): [True: 0, False: 613]
  ------------------
  330|      0|      switch(tn->usq[option]) {
  ------------------
  |  Branch (330:14): [True: 0, False: 0]
  ------------------
  331|      0|      case CURL_EMPTY:
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  |  Branch (331:7): [True: 0, False: 0]
  ------------------
  332|       |        /* Already negotiating for CURL_YES, queue the request */
  333|      0|        tn->usq[option] = CURL_OPPOSITE;
  ------------------
  |  |   88|      0|#define CURL_OPPOSITE    1
  ------------------
  334|      0|        break;
  335|      0|      case CURL_OPPOSITE:
  ------------------
  |  |   88|      0|#define CURL_OPPOSITE    1
  ------------------
  |  Branch (335:7): [True: 0, False: 0]
  ------------------
  336|       |        /* Error: already queued an enable request */
  337|      0|        break;
  338|      0|      }
  339|      0|      break;
  340|       |
  341|      0|    case CURL_WANTYES:
  ------------------
  |  |   84|      0|#define CURL_WANTYES     2
  ------------------
  |  Branch (341:5): [True: 0, False: 613]
  ------------------
  342|      0|      switch(tn->usq[option]) {
  ------------------
  |  Branch (342:14): [True: 0, False: 0]
  ------------------
  343|      0|      case CURL_EMPTY:
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  |  Branch (343:7): [True: 0, False: 0]
  ------------------
  344|       |        /* Error: already negotiating for enable */
  345|      0|        break;
  346|      0|      case CURL_OPPOSITE:
  ------------------
  |  |   88|      0|#define CURL_OPPOSITE    1
  ------------------
  |  Branch (346:7): [True: 0, False: 0]
  ------------------
  347|      0|        tn->usq[option] = CURL_EMPTY;
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  348|      0|        break;
  349|      0|      }
  350|      0|      break;
  351|    613|    }
  352|    613|  }
  353|      0|  else { /* NO */
  354|      0|    switch(tn->us[option]) {
  ------------------
  |  Branch (354:12): [True: 0, False: 0]
  ------------------
  355|      0|    case CURL_NO:
  ------------------
  |  |   82|      0|#define CURL_NO          0
  ------------------
  |  Branch (355:5): [True: 0, False: 0]
  ------------------
  356|       |      /* Already disabled */
  357|      0|      break;
  358|       |
  359|      0|    case CURL_YES:
  ------------------
  |  |   83|      0|#define CURL_YES         1
  ------------------
  |  Branch (359:5): [True: 0, False: 0]
  ------------------
  360|      0|      tn->us[option] = CURL_WANTNO;
  ------------------
  |  |   85|      0|#define CURL_WANTNO      3
  ------------------
  361|      0|      send_negotiation(data, CURL_WONT, option);
  ------------------
  |  |   79|      0|#define CURL_WONT 252 /* Our side will not use this option */
  ------------------
  362|      0|      break;
  363|       |
  364|      0|    case CURL_WANTNO:
  ------------------
  |  |   85|      0|#define CURL_WANTNO      3
  ------------------
  |  Branch (364:5): [True: 0, False: 0]
  ------------------
  365|      0|      switch(tn->usq[option]) {
  ------------------
  |  Branch (365:14): [True: 0, False: 0]
  ------------------
  366|      0|      case CURL_EMPTY:
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  |  Branch (366:7): [True: 0, False: 0]
  ------------------
  367|       |        /* Already negotiating for NO */
  368|      0|        break;
  369|      0|      case CURL_OPPOSITE:
  ------------------
  |  |   88|      0|#define CURL_OPPOSITE    1
  ------------------
  |  Branch (369:7): [True: 0, False: 0]
  ------------------
  370|      0|        tn->usq[option] = CURL_EMPTY;
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  371|      0|        break;
  372|      0|      }
  373|      0|      break;
  374|       |
  375|      0|    case CURL_WANTYES:
  ------------------
  |  |   84|      0|#define CURL_WANTYES     2
  ------------------
  |  Branch (375:5): [True: 0, False: 0]
  ------------------
  376|      0|      switch(tn->usq[option]) {
  ------------------
  |  Branch (376:14): [True: 0, False: 0]
  ------------------
  377|      0|      case CURL_EMPTY:
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  |  Branch (377:7): [True: 0, False: 0]
  ------------------
  378|      0|        tn->usq[option] = CURL_OPPOSITE;
  ------------------
  |  |   88|      0|#define CURL_OPPOSITE    1
  ------------------
  379|      0|        break;
  380|      0|      case CURL_OPPOSITE:
  ------------------
  |  |   88|      0|#define CURL_OPPOSITE    1
  ------------------
  |  Branch (380:7): [True: 0, False: 0]
  ------------------
  381|      0|        break;
  382|      0|      }
  383|      0|      break;
  384|      0|    }
  385|      0|  }
  386|    613|}
telnet.c:set_remote_option:
  244|    544|{
  245|    544|  if(newstate == CURL_YES) {
  ------------------
  |  |   83|    544|#define CURL_YES         1
  ------------------
  |  Branch (245:6): [True: 544, False: 0]
  ------------------
  246|    544|    switch(tn->him[option]) {
  ------------------
  |  Branch (246:12): [True: 544, False: 0]
  ------------------
  247|    512|    case CURL_NO:
  ------------------
  |  |   82|    512|#define CURL_NO          0
  ------------------
  |  Branch (247:5): [True: 512, False: 32]
  ------------------
  248|    512|      tn->him[option] = CURL_WANTYES;
  ------------------
  |  |   84|    512|#define CURL_WANTYES     2
  ------------------
  249|    512|      send_negotiation(data, CURL_DO, option);
  ------------------
  |  |   80|    512|#define CURL_DO   253 /* DO use this option! */
  ------------------
  250|    512|      break;
  251|       |
  252|     32|    case CURL_YES:
  ------------------
  |  |   83|     32|#define CURL_YES         1
  ------------------
  |  Branch (252:5): [True: 32, False: 512]
  ------------------
  253|       |      /* Already enabled */
  254|     32|      break;
  255|       |
  256|      0|    case CURL_WANTNO:
  ------------------
  |  |   85|      0|#define CURL_WANTNO      3
  ------------------
  |  Branch (256:5): [True: 0, False: 544]
  ------------------
  257|      0|      switch(tn->himq[option]) {
  ------------------
  |  Branch (257:14): [True: 0, False: 0]
  ------------------
  258|      0|      case CURL_EMPTY:
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  |  Branch (258:7): [True: 0, False: 0]
  ------------------
  259|       |        /* Already negotiating for CURL_YES, queue the request */
  260|      0|        tn->himq[option] = CURL_OPPOSITE;
  ------------------
  |  |   88|      0|#define CURL_OPPOSITE    1
  ------------------
  261|      0|        break;
  262|      0|      case CURL_OPPOSITE:
  ------------------
  |  |   88|      0|#define CURL_OPPOSITE    1
  ------------------
  |  Branch (262:7): [True: 0, False: 0]
  ------------------
  263|       |        /* Error: already queued an enable request */
  264|      0|        break;
  265|      0|      }
  266|      0|      break;
  267|       |
  268|      0|    case CURL_WANTYES:
  ------------------
  |  |   84|      0|#define CURL_WANTYES     2
  ------------------
  |  Branch (268:5): [True: 0, False: 544]
  ------------------
  269|      0|      switch(tn->himq[option]) {
  ------------------
  |  Branch (269:14): [True: 0, False: 0]
  ------------------
  270|      0|      case CURL_EMPTY:
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  |  Branch (270:7): [True: 0, False: 0]
  ------------------
  271|       |        /* Error: already negotiating for enable */
  272|      0|        break;
  273|      0|      case CURL_OPPOSITE:
  ------------------
  |  |   88|      0|#define CURL_OPPOSITE    1
  ------------------
  |  Branch (273:7): [True: 0, False: 0]
  ------------------
  274|      0|        tn->himq[option] = CURL_EMPTY;
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  275|      0|        break;
  276|      0|      }
  277|      0|      break;
  278|    544|    }
  279|    544|  }
  280|      0|  else { /* NO */
  281|      0|    switch(tn->him[option]) {
  ------------------
  |  Branch (281:12): [True: 0, False: 0]
  ------------------
  282|      0|    case CURL_NO:
  ------------------
  |  |   82|      0|#define CURL_NO          0
  ------------------
  |  Branch (282:5): [True: 0, False: 0]
  ------------------
  283|       |      /* Already disabled */
  284|      0|      break;
  285|       |
  286|      0|    case CURL_YES:
  ------------------
  |  |   83|      0|#define CURL_YES         1
  ------------------
  |  Branch (286:5): [True: 0, False: 0]
  ------------------
  287|      0|      tn->him[option] = CURL_WANTNO;
  ------------------
  |  |   85|      0|#define CURL_WANTNO      3
  ------------------
  288|      0|      send_negotiation(data, CURL_DONT, option);
  ------------------
  |  |   81|      0|#define CURL_DONT 254 /* DO NOT use this option! */
  ------------------
  289|      0|      break;
  290|       |
  291|      0|    case CURL_WANTNO:
  ------------------
  |  |   85|      0|#define CURL_WANTNO      3
  ------------------
  |  Branch (291:5): [True: 0, False: 0]
  ------------------
  292|      0|      switch(tn->himq[option]) {
  ------------------
  |  Branch (292:14): [True: 0, False: 0]
  ------------------
  293|      0|      case CURL_EMPTY:
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  |  Branch (293:7): [True: 0, False: 0]
  ------------------
  294|       |        /* Already negotiating for NO */
  295|      0|        break;
  296|      0|      case CURL_OPPOSITE:
  ------------------
  |  |   88|      0|#define CURL_OPPOSITE    1
  ------------------
  |  Branch (296:7): [True: 0, False: 0]
  ------------------
  297|      0|        tn->himq[option] = CURL_EMPTY;
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  298|      0|        break;
  299|      0|      }
  300|      0|      break;
  301|       |
  302|      0|    case CURL_WANTYES:
  ------------------
  |  |   84|      0|#define CURL_WANTYES     2
  ------------------
  |  Branch (302:5): [True: 0, False: 0]
  ------------------
  303|      0|      switch(tn->himq[option]) {
  ------------------
  |  Branch (303:14): [True: 0, False: 0]
  ------------------
  304|      0|      case CURL_EMPTY:
  ------------------
  |  |   87|      0|#define CURL_EMPTY       0
  ------------------
  |  Branch (304:7): [True: 0, False: 0]
  ------------------
  305|      0|        tn->himq[option] = CURL_OPPOSITE;
  ------------------
  |  |   88|      0|#define CURL_OPPOSITE    1
  ------------------
  306|      0|        break;
  307|      0|      case CURL_OPPOSITE:
  ------------------
  |  |   88|      0|#define CURL_OPPOSITE    1
  ------------------
  |  Branch (307:7): [True: 0, False: 0]
  ------------------
  308|      0|        break;
  309|      0|      }
  310|      0|      break;
  311|      0|    }
  312|      0|  }
  313|    544|}
telnet.c:send_telnet_data:
  607|    292|{
  608|    292|  size_t i, outlen;
  609|    292|  const unsigned char *outbuf;
  610|    292|  CURLcode result = CURLE_OK;
  611|    292|  size_t bytes_written;
  612|    292|  size_t total_written = 0;
  613|    292|  struct connectdata *conn = data->conn;
  614|       |
  615|    292|  DEBUGASSERT(tn);
  ------------------
  |  | 1075|    292|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (615:3): [True: 0, False: 292]
  |  Branch (615:3): [True: 292, False: 0]
  ------------------
  616|    292|  DEBUGASSERT(nread > 0);
  ------------------
  |  | 1075|    292|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (616:3): [True: 0, False: 292]
  |  Branch (616:3): [True: 292, False: 0]
  ------------------
  617|    292|  if(nread < 0)
  ------------------
  |  Branch (617:6): [True: 0, False: 292]
  ------------------
  618|      0|    return CURLE_TOO_LARGE;
  619|       |
  620|    292|  if(memchr(buffer, CURL_IAC, nread)) {
  ------------------
  |  |   82|    292|#define CURL_IAC  255 /* Interpret As Command */
  ------------------
  |  Branch (620:6): [True: 109, False: 183]
  ------------------
  621|       |    /* only use the escape buffer when necessary */
  622|    109|    curlx_dyn_reset(&tn->out);
  623|       |
  624|  19.9k|    for(i = 0; i < (size_t)nread && !result; i++) {
  ------------------
  |  Branch (624:16): [True: 19.8k, False: 109]
  |  Branch (624:37): [True: 19.8k, False: 0]
  ------------------
  625|  19.8k|      result = curlx_dyn_addn(&tn->out, &buffer[i], 1);
  626|  19.8k|      if(!result && ((unsigned char)buffer[i] == CURL_IAC))
  ------------------
  |  |   82|  19.8k|#define CURL_IAC  255 /* Interpret As Command */
  ------------------
  |  Branch (626:10): [True: 19.8k, False: 0]
  |  Branch (626:21): [True: 1.31k, False: 18.4k]
  ------------------
  627|       |        /* IAC is FF in hex */
  628|  1.31k|        result = curlx_dyn_addn(&tn->out, "\xff", 1);
  629|  19.8k|    }
  630|       |
  631|    109|    outlen = curlx_dyn_len(&tn->out);
  632|    109|    outbuf = curlx_dyn_uptr(&tn->out);
  633|    109|  }
  634|    183|  else {
  635|    183|    outlen = (size_t)nread;
  636|    183|    outbuf = (const unsigned char *)buffer;
  637|    183|  }
  638|    584|  while(!result && total_written < outlen) {
  ------------------
  |  Branch (638:9): [True: 584, False: 0]
  |  Branch (638:20): [True: 292, False: 292]
  ------------------
  639|       |    /* Make sure socket is writable to avoid EWOULDBLOCK condition */
  640|    292|    struct pollfd pfd[1];
  641|    292|    timediff_t timeout_ms = Curl_timeleft_ms(data);
  642|    292|    pfd[0].fd = conn->sock[FIRSTSOCKET];
  ------------------
  |  |  234|    292|#define FIRSTSOCKET     0
  ------------------
  643|    292|    pfd[0].events = POLLOUT;
  644|    292|    if(timeout_ms < 0)
  ------------------
  |  Branch (644:8): [True: 0, False: 292]
  ------------------
  645|      0|      return CURLE_OPERATION_TIMEDOUT;
  646|       |    /* 0 means no timeout configured; pass -1 to poll for infinite wait */
  647|    292|    switch(Curl_poll(pfd, 1, timeout_ms ? timeout_ms : -1)) {
  ------------------
  |  Branch (647:30): [True: 292, False: 0]
  ------------------
  648|      0|    case -1:                    /* error, abort writing */
  ------------------
  |  Branch (648:5): [True: 0, False: 292]
  ------------------
  649|      0|      result = CURLE_SEND_ERROR;
  650|      0|      break;
  651|      0|    case 0:                     /* timeout */
  ------------------
  |  Branch (651:5): [True: 0, False: 292]
  ------------------
  652|      0|      result = CURLE_OPERATION_TIMEDOUT;
  653|      0|      break;
  654|    292|    default:                    /* write! */
  ------------------
  |  Branch (654:5): [True: 292, False: 0]
  ------------------
  655|    292|      bytes_written = 0;
  656|    292|      result = Curl_xfer_send(data, outbuf + total_written,
  657|    292|                              outlen - total_written, FALSE, &bytes_written);
  ------------------
  |  | 1048|    292|#define FALSE false
  ------------------
  658|    292|      total_written += bytes_written;
  659|    292|      break;
  660|    292|    }
  661|    292|  }
  662|       |
  663|    292|  return result;
  664|    292|}
telnet.c:telnet_done:
 1212|  2.03k|{
 1213|  2.03k|  (void)status;
 1214|  2.03k|  (void)premature;
 1215|  2.03k|  Curl_meta_remove(data, CURL_META_TELNET_EASY);
  ------------------
  |  |   91|  2.03k|#define CURL_META_TELNET_EASY   "meta:proto:telnet:easy"
  ------------------
 1216|  2.03k|  return CURLE_OK;
 1217|  2.03k|}

Curl_thrdpool_set_props:
  282|  2.53k|{
  283|  2.53k|  CURLcode result = CURLE_OK;
  284|  2.53k|  size_t running;
  285|       |
  286|  2.53k|  if(!max_threads || (min_threads > max_threads))
  ------------------
  |  Branch (286:6): [True: 0, False: 2.53k]
  |  Branch (286:22): [True: 0, False: 2.53k]
  ------------------
  287|      0|    return CURLE_BAD_FUNCTION_ARGUMENT;
  288|       |
  289|  2.53k|  Curl_mutex_acquire(&tpool->lock);
  ------------------
  |  |   51|  2.53k|#  define Curl_mutex_acquire(m)  pthread_mutex_lock(m)
  ------------------
  290|  2.53k|  tpool->min_threads = min_threads;
  291|  2.53k|  tpool->max_threads = max_threads;
  292|  2.53k|  tpool->idle_time_ms = idle_time_ms;
  293|  2.53k|  running = Curl_llist_count(&tpool->slots);
  294|  2.53k|  if(tpool->min_threads > running) {
  ------------------
  |  Branch (294:6): [True: 0, False: 2.53k]
  ------------------
  295|      0|    result = thrdpool_signal(tpool, tpool->min_threads - (uint32_t)running);
  296|      0|  }
  297|  2.53k|  Curl_mutex_release(&tpool->lock);
  ------------------
  |  |   52|  2.53k|#  define Curl_mutex_release(m)  pthread_mutex_unlock(m)
  ------------------
  298|       |
  299|  2.53k|  return result;
  300|  2.53k|}
Curl_thrdpool_create:
  311|  2.53k|{
  312|  2.53k|  struct curl_thrdpool *tpool;
  313|  2.53k|  CURLcode result = CURLE_OUT_OF_MEMORY;
  314|  2.53k|  DEBUGASSERT(name);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (314:3): [True: 0, False: 2.53k]
  |  Branch (314:3): [True: 2.53k, False: 0]
  ------------------
  315|       |
  316|  2.53k|  tpool = curlx_calloc(1, sizeof(*tpool));
  ------------------
  |  | 1473|  2.53k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
  317|  2.53k|  if(!tpool)
  ------------------
  |  Branch (317:6): [True: 0, False: 2.53k]
  ------------------
  318|      0|    goto out;
  319|  2.53k|  tpool->refcount = 1;
  320|       |
  321|  2.53k|  Curl_mutex_init(&tpool->lock);
  ------------------
  |  |   50|  2.53k|#  define Curl_mutex_init(m)     pthread_mutex_init(m, NULL)
  ------------------
  322|  2.53k|  Curl_cond_init(&tpool->await);
  ------------------
  |  |   55|  2.53k|#  define Curl_cond_init(c)      pthread_cond_init(c, NULL)
  ------------------
  323|  2.53k|  Curl_llist_init(&tpool->slots, NULL);
  324|  2.53k|  Curl_llist_init(&tpool->zombies, NULL);
  325|  2.53k|  tpool->fn_take = fn_take;
  326|  2.53k|  tpool->fn_process = fn_process;
  327|  2.53k|  tpool->fn_return = fn_return;
  328|  2.53k|  tpool->fn_user_data = user_data;
  329|       |
  330|       |  /* a const string that remains */
  331|  2.53k|  tpool->name = name;
  332|       |
  333|  2.53k|#ifdef DEBUGBUILD
  334|  2.53k|  {
  335|  2.53k|    const char *p = getenv("CURL_DBG_THRDPOOL_FAIL_STARTS");
  336|  2.53k|    if(p) {
  ------------------
  |  Branch (336:8): [True: 0, False: 2.53k]
  ------------------
  337|      0|      curl_off_t l;
  338|      0|      if(!curlx_str_number(&p, &l, INT_MAX))
  ------------------
  |  Branch (338:10): [True: 0, False: 0]
  ------------------
  339|      0|        tpool->dbg_fail_starts = (int)l;
  340|      0|    }
  341|  2.53k|  }
  342|  2.53k|#endif
  343|       |
  344|  2.53k|  result = Curl_thrdpool_set_props(tpool, min_threads, max_threads,
  345|  2.53k|                                   idle_time_ms);
  346|       |
  347|  2.53k|out:
  348|  2.53k|  if(result && tpool) {
  ------------------
  |  Branch (348:6): [True: 0, False: 2.53k]
  |  Branch (348:16): [True: 0, False: 0]
  ------------------
  349|      0|    tpool->aborted = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  350|      0|    thrdpool_unlink(tpool, FALSE);
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  351|       |    tpool = NULL;
  352|      0|  }
  353|  2.53k|  *ptpool = tpool;
  354|  2.53k|  return result;
  355|  2.53k|}
Curl_thrdpool_destroy:
  358|  2.53k|{
  359|  2.53k|  Curl_mutex_acquire(&tpool->lock);
  ------------------
  |  |   51|  2.53k|#  define Curl_mutex_acquire(m)  pthread_mutex_lock(m)
  ------------------
  360|       |
  361|  2.53k|  tpool->aborted = TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  362|       |
  363|  2.53k|  while(join && Curl_llist_count(&tpool->slots)) {
  ------------------
  |  Branch (363:9): [True: 2.53k, False: 0]
  |  Branch (363:17): [True: 0, False: 2.53k]
  ------------------
  364|      0|    thrdpool_wake_all(tpool);
  365|      0|    Curl_cond_wait(&tpool->await, &tpool->lock);
  366|      0|  }
  367|       |
  368|  2.53k|  thrdpool_join_zombies(tpool);
  369|       |
  370|       |  /* detach all still running threads */
  371|  2.53k|  if(Curl_llist_count(&tpool->slots)) {
  ------------------
  |  Branch (371:6): [True: 0, False: 2.53k]
  ------------------
  372|      0|    struct Curl_llist_node *e;
  373|      0|    for(e = Curl_llist_head(&tpool->slots); e; e = Curl_node_next(e)) {
  ------------------
  |  Branch (373:45): [True: 0, False: 0]
  ------------------
  374|      0|      struct thrdslot *tslot = Curl_node_elem(e);
  375|      0|      if(tslot->thread != curl_thread_t_null)
  ------------------
  |  |   49|      0|#  define curl_thread_t_null     (pthread_t *)0
  ------------------
  |  Branch (375:10): [True: 0, False: 0]
  ------------------
  376|      0|        Curl_thread_destroy(&tslot->thread);
  377|      0|    }
  378|      0|    tpool->detached = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  379|      0|  }
  380|       |
  381|  2.53k|  if(!thrdpool_unlink(tpool, TRUE)) {
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  |  Branch (381:6): [True: 0, False: 2.53k]
  ------------------
  382|       |    /* tpool not destroyed */
  383|      0|    Curl_mutex_release(&tpool->lock);
  ------------------
  |  |   52|      0|#  define Curl_mutex_release(m)  pthread_mutex_unlock(m)
  ------------------
  384|      0|  }
  385|  2.53k|}
thrdpool.c:thrdpool_unlink:
  227|  2.53k|{
  228|  2.53k|  DEBUGASSERT(tpool->refcount);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (228:3): [True: 0, False: 2.53k]
  |  Branch (228:3): [True: 2.53k, False: 0]
  ------------------
  229|  2.53k|  if(tpool->refcount)
  ------------------
  |  Branch (229:6): [True: 2.53k, False: 0]
  ------------------
  230|  2.53k|    tpool->refcount--;
  231|  2.53k|  if(tpool->refcount)
  ------------------
  |  Branch (231:6): [True: 0, False: 2.53k]
  ------------------
  232|      0|    return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  233|       |
  234|       |  /* no more references, free */
  235|  2.53k|  DEBUGASSERT(tpool->aborted);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (235:3): [True: 0, False: 2.53k]
  |  Branch (235:3): [True: 2.53k, False: 0]
  ------------------
  236|  2.53k|  thrdpool_join_zombies(tpool);
  237|  2.53k|  if(locked)
  ------------------
  |  Branch (237:6): [True: 2.53k, False: 0]
  ------------------
  238|  2.53k|    Curl_mutex_release(&tpool->lock);
  ------------------
  |  |   52|  2.53k|#  define Curl_mutex_release(m)  pthread_mutex_unlock(m)
  ------------------
  239|  2.53k|  Curl_cond_destroy(&tpool->await);
  ------------------
  |  |   56|  2.53k|#  define Curl_cond_destroy(c)   pthread_cond_destroy(c)
  ------------------
  240|  2.53k|  Curl_mutex_destroy(&tpool->lock);
  ------------------
  |  |   53|  2.53k|#  define Curl_mutex_destroy(m)  pthread_mutex_destroy(m)
  ------------------
  241|  2.53k|  curlx_free(tpool);
  ------------------
  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  242|       |  return TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  243|  2.53k|}
thrdpool.c:thrdpool_join_zombies:
  208|  5.07k|{
  209|  5.07k|  struct Curl_llist_node *e;
  210|       |
  211|  5.07k|  for(e = Curl_llist_head(&tpool->zombies); e;
  ------------------
  |  Branch (211:45): [True: 0, False: 5.07k]
  ------------------
  212|  5.07k|      e = Curl_llist_head(&tpool->zombies)) {
  213|      0|    struct thrdslot *tslot = Curl_node_elem(e);
  214|       |
  215|      0|    Curl_node_remove(&tslot->node);
  216|      0|    if(tslot->thread != curl_thread_t_null) {
  ------------------
  |  |   49|      0|#  define curl_thread_t_null     (pthread_t *)0
  ------------------
  |  Branch (216:8): [True: 0, False: 0]
  ------------------
  217|      0|      Curl_mutex_release(&tpool->lock);
  ------------------
  |  |   52|      0|#  define Curl_mutex_release(m)  pthread_mutex_unlock(m)
  ------------------
  218|      0|      Curl_thread_join(&tslot->thread);
  219|      0|      Curl_mutex_acquire(&tpool->lock);
  ------------------
  |  |   51|      0|#  define Curl_mutex_acquire(m)  pthread_mutex_lock(m)
  ------------------
  220|      0|      tslot->thread = curl_thread_t_null;
  ------------------
  |  |   49|      0|#  define curl_thread_t_null     (pthread_t *)0
  ------------------
  221|      0|    }
  222|      0|    thrdslot_destroy(tslot);
  223|      0|  }
  224|  5.07k|}

Curl_thrdq_create:
  206|  2.53k|{
  207|  2.53k|  struct curl_thrdq *tqueue;
  208|  2.53k|  CURLcode result = CURLE_OUT_OF_MEMORY;
  209|  2.53k|  DEBUGASSERT(name);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (209:3): [True: 0, False: 2.53k]
  |  Branch (209:3): [True: 2.53k, False: 0]
  ------------------
  210|       |
  211|  2.53k|  tqueue = curlx_calloc(1, sizeof(*tqueue));
  ------------------
  |  | 1473|  2.53k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
  212|  2.53k|  if(!tqueue)
  ------------------
  |  Branch (212:6): [True: 0, False: 2.53k]
  ------------------
  213|      0|    goto out;
  214|       |
  215|  2.53k|  Curl_mutex_init(&tqueue->lock);
  ------------------
  |  |   50|  2.53k|#  define Curl_mutex_init(m)     pthread_mutex_init(m, NULL)
  ------------------
  216|  2.53k|  Curl_cond_init(&tqueue->await);
  ------------------
  |  |   55|  2.53k|#  define Curl_cond_init(c)      pthread_cond_init(c, NULL)
  ------------------
  217|  2.53k|  Curl_llist_init(&tqueue->sendq, thrdq_item_list_dtor);
  218|  2.53k|  Curl_llist_init(&tqueue->recvq, thrdq_item_list_dtor);
  219|  2.53k|  tqueue->fn_free = fn_free;
  220|  2.53k|  tqueue->fn_process = fn_process;
  221|  2.53k|  tqueue->fn_event = fn_event;
  222|  2.53k|  tqueue->fn_user_data = user_data;
  223|       |
  224|       |  /* a const string that remains */
  225|  2.53k|  tqueue->name = name;
  226|       |
  227|  2.53k|  result = Curl_thrdpool_create(&tqueue->tpool, name,
  228|  2.53k|                                min_threads, max_threads, idle_time_ms,
  229|  2.53k|                                thrdq_tpool_take,
  230|  2.53k|                                thrdq_tpool_process,
  231|  2.53k|                                thrdq_tpool_return,
  232|  2.53k|                                tqueue);
  233|       |
  234|  2.53k|out:
  235|  2.53k|  if(result && tqueue) {
  ------------------
  |  Branch (235:6): [True: 0, False: 2.53k]
  |  Branch (235:16): [True: 0, False: 0]
  ------------------
  236|      0|    tqueue->aborted = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  237|      0|    thrdq_unlink(tqueue, FALSE, TRUE);
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
                  thrdq_unlink(tqueue, FALSE, TRUE);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  238|       |    tqueue = NULL;
  239|      0|  }
  240|  2.53k|  *ptqueue = tqueue;
  241|  2.53k|  return result;
  242|  2.53k|}
Curl_thrdq_destroy:
  245|  2.53k|{
  246|  2.53k|  Curl_mutex_acquire(&tqueue->lock);
  ------------------
  |  |   51|  2.53k|#  define Curl_mutex_acquire(m)  pthread_mutex_lock(m)
  ------------------
  247|  2.53k|  DEBUGASSERT(!tqueue->aborted);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (247:3): [True: 0, False: 2.53k]
  |  Branch (247:3): [True: 2.53k, False: 0]
  ------------------
  248|  2.53k|  tqueue->aborted = TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  249|       |  thrdq_unlink(tqueue, TRUE, join);
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  250|  2.53k|}
Curl_thrdq_recv:
  307|  2.53k|{
  308|  2.53k|  CURLcode result = CURLE_AGAIN;
  309|  2.53k|  struct Curl_llist_node *e;
  310|  2.53k|  uint32_t signals = 0;
  311|       |
  312|  2.53k|  *pitem = NULL;
  313|  2.53k|  Curl_mutex_acquire(&tqueue->lock);
  ------------------
  |  |   51|  2.53k|#  define Curl_mutex_acquire(m)  pthread_mutex_lock(m)
  ------------------
  314|  2.53k|  if(tqueue->aborted) {
  ------------------
  |  Branch (314:6): [True: 0, False: 2.53k]
  ------------------
  315|      0|    DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (315:5): [Folded, False: 0]
  |  Branch (315:5): [Folded, False: 0]
  ------------------
  316|      0|    result = CURLE_RECV_ERROR;
  317|      0|    goto out;
  318|      0|  }
  319|       |
  320|  2.53k|  e = Curl_llist_head(&tqueue->recvq);
  321|  2.53k|  if(e) {
  ------------------
  |  Branch (321:6): [True: 0, False: 2.53k]
  ------------------
  322|      0|    struct thrdq_item *qitem = Curl_node_take_elem(e);
  323|      0|    *pitem = qitem->item;
  324|      0|    qitem->item = NULL;
  325|      0|    thrdq_item_destroy(qitem);
  326|      0|    result = CURLE_OK;
  327|      0|  }
  328|  2.53k|  else
  329|  2.53k|    signals = thrdq_get_signals(tqueue);
  330|       |
  331|  2.53k|out:
  332|  2.53k|  Curl_mutex_release(&tqueue->lock);
  ------------------
  |  |   52|  2.53k|#  define Curl_mutex_release(m)  pthread_mutex_unlock(m)
  ------------------
  333|       |  /* Signal thread pool unlocked to avoid deadlocks. If items await
  334|       |   * processing while nothing was ready, make sure the pool has a
  335|       |   * thread to work on them. An earlier thread start may have failed,
  336|       |   * which `Curl_thrdq_send()` cannot report to its caller. Without
  337|       |   * this, such items would sit unprocessed until the next send. */
  338|  2.53k|  if(signals)
  ------------------
  |  Branch (338:6): [True: 0, False: 2.53k]
  ------------------
  339|      0|    (void)Curl_thrdpool_signal(tqueue->tpool, (uint32_t)signals);
  340|  2.53k|  return result;
  341|  2.53k|}
Curl_thrdq_trace:
  406|  5.07k|{
  407|  5.07k|  struct curl_trc_feat *feat = &Curl_trc_feat_threads;
  408|  5.07k|  if(Curl_trc_ft_is_verbose(data, feat)) {
  ------------------
  |  |  329|  5.07k|  (Curl_trc_is_verbose(data) &&          \
  |  |  ------------------
  |  |  |  |  322|  10.1k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 5.07k, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 5.07k]
  |  |  |  |  ------------------
  |  |  |  |  323|  10.1k|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  330|  5.07k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  ------------------
  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  ------------------
  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  409|      0|    struct Curl_llist_node *e;
  410|      0|    struct thrdq_item *qitem;
  411|       |
  412|      0|    Curl_thrdpool_trace(tqueue->tpool, data);
  413|      0|    Curl_mutex_acquire(&tqueue->lock);
  ------------------
  |  |   51|      0|#  define Curl_mutex_acquire(m)  pthread_mutex_lock(m)
  ------------------
  414|      0|    if(!Curl_llist_count(&tqueue->sendq) &&
  ------------------
  |  Branch (414:8): [True: 0, False: 0]
  ------------------
  415|      0|       !Curl_llist_count(&tqueue->recvq)) {
  ------------------
  |  Branch (415:8): [True: 0, False: 0]
  ------------------
  416|      0|      Curl_trc_feat_infof(data, feat, "[TQUEUE-%s] empty", tqueue->name);
  417|      0|    }
  418|      0|    for(e = Curl_llist_head(&tqueue->sendq); e; e = Curl_node_next(e)) {
  ------------------
  |  Branch (418:46): [True: 0, False: 0]
  ------------------
  419|      0|      qitem = Curl_node_elem(e);
  420|      0|      Curl_trc_feat_infof(data, feat, "[TQUEUE-%s] in: %s",
  421|      0|                          tqueue->name, qitem->description);
  422|      0|    }
  423|      0|    for(e = Curl_llist_head(&tqueue->recvq); e; e = Curl_node_next(e)) {
  ------------------
  |  Branch (423:46): [True: 0, False: 0]
  ------------------
  424|      0|      qitem = Curl_node_elem(e);
  425|      0|      Curl_trc_feat_infof(data, feat, "[TQUEUE-%s] out: %s",
  426|      0|                          tqueue->name, qitem->description);
  427|      0|    }
  428|      0|    Curl_mutex_release(&tqueue->lock);
  ------------------
  |  |   52|      0|#  define Curl_mutex_release(m)  pthread_mutex_unlock(m)
  ------------------
  429|      0|  }
  430|  5.07k|}
thrdqueue.c:thrdq_unlink:
  177|  2.53k|{
  178|  2.53k|  DEBUGASSERT(tqueue->aborted);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (178:3): [True: 0, False: 2.53k]
  |  Branch (178:3): [True: 2.53k, False: 0]
  ------------------
  179|  2.53k|  if(tqueue->tpool) {
  ------------------
  |  Branch (179:6): [True: 2.53k, False: 0]
  ------------------
  180|  2.53k|    if(locked)
  ------------------
  |  Branch (180:8): [True: 2.53k, False: 0]
  ------------------
  181|  2.53k|      Curl_mutex_release(&tqueue->lock);
  ------------------
  |  |   52|  2.53k|#  define Curl_mutex_release(m)  pthread_mutex_unlock(m)
  ------------------
  182|  2.53k|    Curl_thrdpool_destroy(tqueue->tpool, join);
  183|  2.53k|    tqueue->tpool = NULL;
  184|  2.53k|    if(locked)
  ------------------
  |  Branch (184:8): [True: 2.53k, False: 0]
  ------------------
  185|  2.53k|      Curl_mutex_acquire(&tqueue->lock);
  ------------------
  |  |   51|  2.53k|#  define Curl_mutex_acquire(m)  pthread_mutex_lock(m)
  ------------------
  186|  2.53k|  }
  187|       |
  188|  2.53k|  Curl_llist_destroy(&tqueue->sendq, NULL);
  189|  2.53k|  Curl_llist_destroy(&tqueue->recvq, NULL);
  190|  2.53k|  Curl_cond_destroy(&tqueue->await);
  ------------------
  |  |   56|  2.53k|#  define Curl_cond_destroy(c)   pthread_cond_destroy(c)
  ------------------
  191|  2.53k|  if(locked)
  ------------------
  |  Branch (191:6): [True: 2.53k, False: 0]
  ------------------
  192|  2.53k|    Curl_mutex_release(&tqueue->lock);
  ------------------
  |  |   52|  2.53k|#  define Curl_mutex_release(m)  pthread_mutex_unlock(m)
  ------------------
  193|  2.53k|  Curl_mutex_destroy(&tqueue->lock);
  ------------------
  |  |   53|  2.53k|#  define Curl_mutex_destroy(m)  pthread_mutex_destroy(m)
  ------------------
  194|  2.53k|  curlx_free(tqueue);
  ------------------
  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  195|  2.53k|}
thrdqueue.c:thrdq_get_signals:
  253|  2.53k|{
  254|  2.53k|  size_t qlen = Curl_llist_count(&tqueue->sendq);
  255|  2.53k|  return (qlen <= UINT32_MAX) ? (uint32_t)qlen : UINT32_MAX;
  ------------------
  |  Branch (255:10): [True: 2.53k, False: 0]
  ------------------
  256|  2.53k|}

Curl_init_CONNECT:
  431|  2.53k|{
  432|  2.53k|  data->state.fread_func = data->set.fread_func_set;
  433|  2.53k|  data->state.in = data->set.in_set;
  434|  2.53k|  data->state.upload = (data->state.httpreq == HTTPREQ_PUT);
  435|  2.53k|}
Curl_pretransfer:
  443|  2.53k|{
  444|  2.53k|  CURLcode result = CURLE_OK;
  445|       |
  446|       |  /* Reset the retry count at the start of each request.
  447|       |   * If the retry count is not reset, when the connection drops,
  448|       |   * it will not enter the retry mechanism on CONN_MAX_RETRIES + 1 attempts
  449|       |   * and will immediately throw
  450|       |   * "Connection died, tried CONN_MAX_RETRIES times before giving up".
  451|       |   * By resetting it here, we ensure each new request starts fresh. */
  452|  2.53k|  data->state.retrycount = 0;
  453|       |
  454|  2.53k|  if(!CURL_EASY_STR(data, STRING_SET_URL) && !data->set.uh) {
  ------------------
  |  | 1228|  5.07k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
  |  Branch (454:6): [True: 0, False: 2.53k]
  |  Branch (454:46): [True: 0, False: 0]
  ------------------
  455|       |    /* we cannot do anything without URL */
  456|      0|    failf(data, "No URL set");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  457|      0|    return CURLE_URL_MALFORMAT;
  458|      0|  }
  459|       |
  460|       |  /* CURLOPT_CURLU overrides CURLOPT_URL and the contents of the CURLU handle
  461|       |     is allowed to be changed by the user between transfers */
  462|  2.53k|  if(data->set.uh) {
  ------------------
  |  Branch (462:6): [True: 0, False: 2.53k]
  ------------------
  463|      0|    char *url = NULL;
  464|      0|    CURLUcode uc;
  465|      0|    uc = curl_url_get(data->set.uh, CURLUPART_URL, &url, 0);
  466|      0|    if(uc) {
  ------------------
  |  Branch (466:8): [True: 0, False: 0]
  ------------------
  467|       |      /* clear the pointer to not point to freed memory anymore */
  468|      0|      Curl_bufref_set(&data->state.url, NULL, 0, NULL);
  469|      0|      failf(data, "No URL set");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  470|      0|      return CURLE_URL_MALFORMAT;
  471|      0|    }
  472|      0|    result = CURL_EASY_STR_SETN(data, STRING_SET_URL, url);
  ------------------
  |  | 1232|      0|  Curl_u8_strset_setn(&(d)->set.strings, (uint8_t)(id), (s))
  ------------------
  473|      0|    if(result)
  ------------------
  |  Branch (473:8): [True: 0, False: 0]
  ------------------
  474|      0|      return result;
  475|      0|  }
  476|       |
  477|  2.53k|  Curl_bufref_set(&data->state.url, CURL_EASY_STR(data, STRING_SET_URL),
  ------------------
  |  | 1228|  2.53k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
  478|  2.53k|                  0, NULL);
  479|       |
  480|  2.53k|  if(data->set.postfields && data->set.set_resume_from) {
  ------------------
  |  Branch (480:6): [True: 0, False: 2.53k]
  |  Branch (480:30): [True: 0, False: 0]
  ------------------
  481|       |    /* we cannot */
  482|      0|    failf(data, "cannot mix POSTFIELDS with RESUME_FROM");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  483|      0|    return CURLE_BAD_FUNCTION_ARGUMENT;
  484|      0|  }
  485|       |
  486|  2.53k|  data->state.prefer_ascii = data->set.prefer_ascii;
  487|  2.53k|#ifdef CURL_LIST_ONLY_PROTOCOL
  488|  2.53k|  data->state.list_only = data->set.list_only;
  489|  2.53k|#endif
  490|  2.53k|  data->state.httpreq = data->set.method;
  491|       |
  492|       |  /* initial transfer request coming up, forget the initial origin
  493|       |   * from a previous perform() on this handle. */
  494|  2.53k|  Curl_peer_unlink(&data->state.initial_origin);
  495|  2.53k|  Curl_peer_unlink(&data->state.origin);
  496|  2.53k|  data->state.requests = 0;
  497|  2.53k|  data->state.followlocation = 0; /* reset the location-follow counter */
  498|  2.53k|  data->state.this_is_a_follow = FALSE; /* reset this */
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  499|  2.53k|  data->state.http_ignorecustom = FALSE; /* use custom HTTP method */
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  500|  2.53k|  data->state.errorbuf = FALSE; /* no error has occurred */
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  501|  2.53k|#ifndef CURL_DISABLE_HTTP
  502|  2.53k|  Curl_http_neg_init(data, &data->state.http_neg);
  503|  2.53k|#endif
  504|  2.53k|  data->state.authproblem = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  505|  2.53k|  data->state.authhost.want = data->set.httpauth;
  506|  2.53k|  data->state.authproxy.want = data->set.proxyauth;
  507|  2.53k|  curlx_safefree(data->info.wouldredirect);
  ------------------
  |  | 1332|  2.53k|  do {                      \
  |  | 1333|  2.53k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.53k|    (ptr) = NULL;           \
  |  | 1335|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
  508|  2.53k|  Curl_data_priority_clear_state(data);
  509|  2.53k|  if(data->set.http_auto_referer)
  ------------------
  |  Branch (509:6): [True: 0, False: 2.53k]
  ------------------
  510|      0|    Curl_bufref_free(&data->state.referer);
  511|  2.53k|  if(CURL_EASY_STR(data, STRING_SET_REFERER))
  ------------------
  |  | 1228|  2.53k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  |  |  ------------------
  |  |  |  Branch (1228:3): [True: 0, False: 2.53k]
  |  |  ------------------
  ------------------
  512|      0|    Curl_bufref_set(&data->state.referer,
  513|      0|                    CURL_EASY_STR(data, STRING_SET_REFERER), 0, NULL);
  ------------------
  |  | 1228|      0|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
  514|  2.53k|  else
  515|  2.53k|    Curl_bufref_free(&data->state.referer);
  516|       |
  517|  2.53k|  if(data->state.httpreq == HTTPREQ_PUT)
  ------------------
  |  Branch (517:6): [True: 0, False: 2.53k]
  ------------------
  518|      0|    data->state.infilesize = data->set.filesize;
  519|  2.53k|  else if((data->state.httpreq != HTTPREQ_GET) &&
  ------------------
  |  Branch (519:11): [True: 0, False: 2.53k]
  ------------------
  520|      0|          (data->state.httpreq != HTTPREQ_HEAD)) {
  ------------------
  |  Branch (520:11): [True: 0, False: 0]
  ------------------
  521|      0|    data->state.infilesize = data->set.postfieldsize;
  522|      0|    if(data->set.postfields && (data->state.infilesize == -1))
  ------------------
  |  Branch (522:8): [True: 0, False: 0]
  |  Branch (522:32): [True: 0, False: 0]
  ------------------
  523|      0|      data->state.infilesize = (curl_off_t)strlen(data->set.postfields);
  524|      0|  }
  525|  2.53k|  else
  526|  2.53k|    data->state.infilesize = 0;
  527|       |
  528|       |  /* If there is a list of cookie files to read, do it now! */
  529|  2.53k|  result = Curl_cookie_loadfiles(data,
  530|  2.53k|                                 data->set.cookiesession ?
  ------------------
  |  Branch (530:34): [True: 0, False: 2.53k]
  ------------------
  531|  2.53k|                                 COOKIE_NOSESSION : 0);
  ------------------
  |  |  118|      0|#define COOKIE_NOSESSION  (1<<6) /* drop session cookies */
  ------------------
  532|  2.53k|  if(!result)
  ------------------
  |  Branch (532:6): [True: 2.53k, False: 0]
  ------------------
  533|  2.53k|    Curl_cookie_run(data); /* activate */
  534|       |
  535|       |  /* If there is a list of host pairs to deal with */
  536|  2.53k|  if(!result && data->state.resolve)
  ------------------
  |  Branch (536:6): [True: 2.53k, False: 0]
  |  Branch (536:17): [True: 0, False: 2.53k]
  ------------------
  537|      0|    result = Curl_loadhostpairs(data);
  538|       |
  539|  2.53k|  if(!result)
  ------------------
  |  Branch (539:6): [True: 2.53k, False: 0]
  ------------------
  540|       |    /* If there is a list of hsts files to read */
  541|  2.53k|    result = Curl_hsts_loadfiles(data);
  542|       |
  543|  2.53k|  if(!result) {
  ------------------
  |  Branch (543:6): [True: 2.53k, False: 0]
  ------------------
  544|       |    /* Allow data->set.use_port to set which port to use. This needs to be
  545|       |     * disabled for example when we follow Location: headers to URLs using
  546|       |     * different ports! */
  547|  2.53k|    data->state.allow_port = TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  548|       |
  549|       |#if defined(HAVE_SIGNAL) && defined(SIGPIPE) && !defined(MSG_NOSIGNAL)
  550|       |    /*************************************************************
  551|       |     * Tell signal handler to ignore SIGPIPE
  552|       |     *************************************************************/
  553|       |    if(!data->set.no_signal)
  554|       |      data->state.prev_signal = signal(SIGPIPE, SIG_IGN);
  555|       |#endif
  556|       |
  557|  2.53k|    Curl_initinfo(data); /* reset session-specific information "variables" */
  558|  2.53k|    Curl_pgrsResetTransferSizes(data);
  559|  2.53k|    Curl_pgrsStart(data, NULL);
  560|       |
  561|       |    /* In case the handle is reused and an authentication method was picked
  562|       |       in the session we need to make sure we only use the one(s) we now
  563|       |       consider to be fine */
  564|  2.53k|    data->state.authhost.picked &= data->state.authhost.want;
  565|  2.53k|    data->state.authproxy.picked &= data->state.authproxy.want;
  566|       |
  567|  2.53k|#ifndef CURL_DISABLE_FTP
  568|  2.53k|    data->state.wildcardmatch = data->set.wildcard_enabled;
  569|  2.53k|    if(data->state.wildcardmatch) {
  ------------------
  |  Branch (569:8): [True: 0, False: 2.53k]
  ------------------
  570|      0|      struct WildcardData *wc;
  571|      0|      if(!data->wildcard) {
  ------------------
  |  Branch (571:10): [True: 0, False: 0]
  ------------------
  572|      0|        data->wildcard = curlx_calloc(1, sizeof(struct WildcardData));
  ------------------
  |  | 1473|      0|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
  573|      0|        if(!data->wildcard)
  ------------------
  |  Branch (573:12): [True: 0, False: 0]
  ------------------
  574|      0|          return CURLE_OUT_OF_MEMORY;
  575|      0|      }
  576|      0|      wc = data->wildcard;
  577|      0|      if(wc->state < CURLWC_INIT) {
  ------------------
  |  Branch (577:10): [True: 0, False: 0]
  ------------------
  578|      0|        if(wc->ftpwc)
  ------------------
  |  Branch (578:12): [True: 0, False: 0]
  ------------------
  579|      0|          wc->dtor(wc->ftpwc);
  580|      0|        curlx_safefree(wc->pattern);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  581|      0|        curlx_safefree(wc->path);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  582|      0|        Curl_wildcard_init(wc); /* init wildcard structures */
  583|      0|      }
  584|      0|    }
  585|  2.53k|#endif
  586|  2.53k|    result = Curl_hsts_loadcb(data, data->hsts);
  587|  2.53k|  }
  588|       |
  589|  2.53k|  data->req.headerbytecount = 0;
  590|  2.53k|  Curl_headers_cleanup(data);
  591|  2.53k|  return result;
  592|  2.53k|}
Curl_xfer_setup_nop:
  707|  1.92k|{
  708|  1.92k|  xfer_setup(data, -1, -1, -1);
  709|  1.92k|}
Curl_xfer_write_done:
  793|  2.03k|{
  794|  2.03k|  (void)premature;
  795|  2.03k|  return Curl_cw_out_done(data);
  796|  2.03k|}
Curl_xfer_needs_flush:
  799|  3.95k|{
  800|  3.95k|  return Curl_conn_needs_flush(data, data->conn->send_idx);
  801|  3.95k|}
Curl_xfer_send:
  811|    292|{
  812|    292|  CURLcode result;
  813|       |
  814|    292|  DEBUGASSERT(data);
  ------------------
  |  | 1075|    292|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (814:3): [True: 0, False: 292]
  |  Branch (814:3): [True: 292, False: 0]
  ------------------
  815|    292|  DEBUGASSERT(data->conn);
  ------------------
  |  | 1075|    292|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (815:3): [True: 0, False: 292]
  |  Branch (815:3): [True: 292, False: 0]
  ------------------
  816|       |
  817|    292|  result = Curl_conn_send(data, data->conn->send_idx,
  818|    292|                          buf, blen, eos, pnwritten);
  819|    292|  if(result == CURLE_AGAIN) {
  ------------------
  |  Branch (819:6): [True: 0, False: 292]
  ------------------
  820|      0|    result = CURLE_OK;
  821|      0|    *pnwritten = 0;
  822|      0|  }
  823|    292|  else if(!result && *pnwritten)
  ------------------
  |  Branch (823:11): [True: 292, False: 0]
  |  Branch (823:22): [True: 292, False: 0]
  ------------------
  824|    292|    data->info.request_size += *pnwritten;
  825|       |
  826|    292|  DEBUGF(infof(data, "Curl_xfer_send(len=%zu, eos=%d) -> %d, %zu",
  ------------------
  |  | 1061|  2.92k|#define DEBUGF(x) x
  |  |  ------------------
  |  |  |  Branch (1061:19): [True: 292, False: 0]
  |  |  |  Branch (1061:19): [True: 292, False: 0]
  |  |  |  Branch (1061:19): [True: 292, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [Folded, False: 292]
  |  |  ------------------
  ------------------
  827|    292|               blen, eos, (int)result, *pnwritten));
  828|    292|  return result;
  829|    292|}
Curl_xfer_recv:
  834|  2.86k|{
  835|  2.86k|  DEBUGASSERT(data);
  ------------------
  |  | 1075|  2.86k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (835:3): [True: 0, False: 2.86k]
  |  Branch (835:3): [True: 2.86k, False: 0]
  ------------------
  836|  2.86k|  DEBUGASSERT(data->conn);
  ------------------
  |  | 1075|  2.86k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (836:3): [True: 0, False: 2.86k]
  |  Branch (836:3): [True: 2.86k, False: 0]
  ------------------
  837|  2.86k|  DEBUGASSERT(data->set.buffer_size > 0);
  ------------------
  |  | 1075|  2.86k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (837:3): [True: 0, False: 2.86k]
  |  Branch (837:3): [True: 2.86k, False: 0]
  ------------------
  838|       |
  839|  2.86k|  if(curlx_uitouz(data->set.buffer_size) < blen)
  ------------------
  |  Branch (839:6): [True: 0, False: 2.86k]
  ------------------
  840|      0|    blen = curlx_uitouz(data->set.buffer_size);
  841|  2.86k|  return Curl_conn_recv(data, data->conn->recv_idx, buf, blen, pnrcvd);
  842|  2.86k|}
Curl_xfer_recv_is_paused:
  868|  2.03k|{
  869|  2.03k|  return Curl_rlimit_is_blocked(&data->progress.dl.rlimit);
  870|  2.03k|}
transfer.c:xfer_setup:
  667|  1.92k|{
  668|  1.92k|  struct SingleRequest *k = &data->req;
  669|  1.92k|  struct connectdata *conn = data->conn;
  670|       |
  671|  1.92k|  DEBUGASSERT(conn);
  ------------------
  |  | 1075|  1.92k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (671:3): [True: 0, False: 1.92k]
  |  Branch (671:3): [True: 1.92k, False: 0]
  ------------------
  672|       |  /* indexes are in range */
  673|  1.92k|  DEBUGASSERT((send_idx <= 1) && (send_idx >= -1));
  ------------------
  |  | 1075|  1.92k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (673:3): [True: 0, False: 1.92k]
  |  Branch (673:3): [True: 0, False: 0]
  |  Branch (673:3): [True: 1.92k, False: 0]
  |  Branch (673:3): [True: 1.92k, False: 0]
  ------------------
  674|  1.92k|  DEBUGASSERT((recv_idx <= 1) && (recv_idx >= -1));
  ------------------
  |  | 1075|  1.92k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (674:3): [True: 0, False: 1.92k]
  |  Branch (674:3): [True: 0, False: 0]
  |  Branch (674:3): [True: 1.92k, False: 0]
  |  Branch (674:3): [True: 1.92k, False: 0]
  ------------------
  675|       |  /* if request wants to send, switching off the send direction is wrong */
  676|  1.92k|  DEBUGASSERT((send_idx >= 0) || !Curl_req_want_send(data));
  ------------------
  |  | 1075|  1.92k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (676:3): [True: 1.92k, False: 0]
  |  Branch (676:3): [True: 0, False: 0]
  |  Branch (676:3): [True: 0, False: 1.92k]
  |  Branch (676:3): [True: 1.92k, False: 0]
  ------------------
  677|       |
  678|  1.92k|  conn->send_idx = send_idx;
  679|  1.92k|  conn->recv_idx = recv_idx;
  680|       |
  681|       |  /* without receiving, there should be not recv_size */
  682|  1.92k|  DEBUGASSERT((conn->recv_idx >= 0) || (recv_size == -1));
  ------------------
  |  | 1075|  1.92k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (682:3): [True: 1.92k, False: 0]
  |  Branch (682:3): [True: 0, False: 0]
  |  Branch (682:3): [True: 0, False: 1.92k]
  |  Branch (682:3): [True: 1.92k, False: 0]
  ------------------
  683|  1.92k|  k->size = recv_size;
  684|  1.92k|  k->header = !!conn->scheme->run->write_resp_hd;
  685|       |  /* by default, we do not shutdown at the end of the transfer */
  686|  1.92k|  k->shutdown = FALSE;
  ------------------
  |  | 1048|  1.92k|#define FALSE false
  ------------------
  687|  1.92k|  k->shutdown_err_ignore = FALSE;
  ------------------
  |  | 1048|  1.92k|#define FALSE false
  ------------------
  688|       |
  689|       |  /* The code sequence below is placed in this function because all necessary
  690|       |     input is not always known in do_complete() as this function may be called
  691|       |     after that */
  692|  1.92k|  if(!k->header && (recv_size > 0))
  ------------------
  |  Branch (692:6): [True: 1.92k, False: 0]
  |  Branch (692:20): [True: 0, False: 1.92k]
  ------------------
  693|      0|    Curl_pgrsSetDownloadSize(data, recv_size);
  694|       |
  695|       |  /* we want header and/or body, if neither then do not do this! */
  696|  1.92k|  if(conn->scheme->run->write_resp_hd || !data->req.no_body) {
  ------------------
  |  Branch (696:6): [True: 0, False: 1.92k]
  |  Branch (696:42): [True: 1.92k, False: 0]
  ------------------
  697|  1.92k|    if(conn->recv_idx != -1)
  ------------------
  |  Branch (697:8): [True: 0, False: 1.92k]
  ------------------
  698|      0|      CURL_REQ_SET_RECV(data);
  ------------------
  |  |   45|      0|#define CURL_REQ_SET_RECV(d)   ((d)->req.io_flags |= REQ_IO_RECV)
  |  |  ------------------
  |  |  |  |   35|      0|#define REQ_IO_RECV       (1 << 0) /* there is or may be data to read */
  |  |  ------------------
  ------------------
  699|  1.92k|    if(conn->send_idx != -1)
  ------------------
  |  Branch (699:8): [True: 0, False: 1.92k]
  ------------------
  700|      0|      CURL_REQ_SET_SEND(data);
  ------------------
  |  |   44|      0|#define CURL_REQ_SET_SEND(d)   ((d)->req.io_flags |= REQ_IO_SEND)
  |  |  ------------------
  |  |  |  |   36|      0|#define REQ_IO_SEND       (1 << 1) /* there is or may be data to write */
  |  |  ------------------
  ------------------
  701|  1.92k|  }
  702|  1.92k|  CURL_TRC_M(data, "xfer_setup: recv_idx=%d, send_idx=%d",
  ------------------
  |  |  148|  1.92k|  do {                                   \
  |  |  149|  1.92k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  1.92k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  1.92k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  3.84k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 1.92k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 1.92k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  3.84k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 1.92k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|  1.92k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  1.92k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|  1.92k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 1.92k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  1.92k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|  1.92k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 1.92k]
  |  |  ------------------
  ------------------
  703|  1.92k|             conn->recv_idx, conn->send_idx);
  704|  1.92k|}

Curl_uint32_bset_init:
   33|  12.6k|{
   34|  12.6k|  memset(bset, 0, sizeof(*bset));
   35|  12.6k|#ifdef DEBUGBUILD
   36|  12.6k|  bset->init = CURL_UINT32_BSET_MAGIC;
  ------------------
  |  |   29|  12.6k|#define CURL_UINT32_BSET_MAGIC  0x62757473
  ------------------
   37|  12.6k|#endif
   38|  12.6k|}
Curl_uint32_bset_resize:
   41|  12.6k|{
   42|  12.6k|  uint32_t nslots = (nmax < (UINT32_MAX - 63)) ?
  ------------------
  |  Branch (42:21): [True: 12.6k, False: 0]
  ------------------
   43|  12.6k|                    ((nmax + 63) / 64) : (UINT32_MAX / 64);
   44|       |
   45|  12.6k|  DEBUGASSERT(bset->init == CURL_UINT32_BSET_MAGIC);
  ------------------
  |  | 1075|  12.6k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (45:3): [True: 0, False: 12.6k]
  |  Branch (45:3): [True: 12.6k, False: 0]
  ------------------
   46|  12.6k|  if(nslots != bset->nslots) {
  ------------------
  |  Branch (46:6): [True: 12.6k, False: 0]
  ------------------
   47|  12.6k|    uint64_t *slots = curlx_calloc(nslots, sizeof(uint64_t));
  ------------------
  |  | 1473|  12.6k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
   48|  12.6k|    if(!slots)
  ------------------
  |  Branch (48:8): [True: 0, False: 12.6k]
  ------------------
   49|      0|      return CURLE_OUT_OF_MEMORY;
   50|       |
   51|  12.6k|    if(bset->slots) {
  ------------------
  |  Branch (51:8): [True: 0, False: 12.6k]
  ------------------
   52|      0|      memcpy(slots, bset->slots,
   53|      0|             (CURLMIN(nslots, bset->nslots) * sizeof(uint64_t)));
  ------------------
  |  | 1288|      0|#define CURLMIN(x, y) ((x) < (y) ? (x) : (y))
  |  |  ------------------
  |  |  |  Branch (1288:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   54|      0|      curlx_free(bset->slots);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   55|      0|    }
   56|  12.6k|    bset->slots = slots;
   57|  12.6k|    bset->nslots = nslots;
   58|  12.6k|    bset->first_slot_used = 0;
   59|  12.6k|  }
   60|  12.6k|  return CURLE_OK;
   61|  12.6k|}
Curl_uint32_bset_destroy:
   64|  12.6k|{
   65|  12.6k|  DEBUGASSERT(bset->init == CURL_UINT32_BSET_MAGIC);
  ------------------
  |  | 1075|  12.6k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (65:3): [True: 0, False: 12.6k]
  |  Branch (65:3): [True: 12.6k, False: 0]
  ------------------
   66|  12.6k|  curlx_free(bset->slots);
  ------------------
  |  | 1476|  12.6k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   67|  12.6k|  memset(bset, 0, sizeof(*bset));
   68|  12.6k|}
Curl_uint32_bset_empty:
   91|  2.53k|{
   92|  2.53k|  uint32_t i;
   93|  2.53k|  for(i = bset->first_slot_used; i < bset->nslots; ++i) {
  ------------------
  |  Branch (93:34): [True: 2.53k, False: 0]
  ------------------
   94|  2.53k|    if(bset->slots[i])
  ------------------
  |  Branch (94:8): [True: 2.53k, False: 0]
  ------------------
   95|  2.53k|      return FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
   96|  2.53k|  }
   97|      0|  return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
   98|  2.53k|}
Curl_uint32_bset_add:
  109|  10.1k|{
  110|  10.1k|  uint32_t islot = i / 64;
  111|  10.1k|  if(islot >= bset->nslots)
  ------------------
  |  Branch (111:6): [True: 0, False: 10.1k]
  ------------------
  112|      0|    return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  113|  10.1k|  bset->slots[islot] |= ((uint64_t)1 << (i % 64));
  114|  10.1k|  if(islot < bset->first_slot_used)
  ------------------
  |  Branch (114:6): [True: 0, False: 10.1k]
  ------------------
  115|      0|    bset->first_slot_used = islot;
  116|       |  return TRUE;
  ------------------
  |  | 1045|  10.1k|#define TRUE true
  ------------------
  117|  10.1k|}
Curl_uint32_bset_remove:
  120|  27.9k|{
  121|  27.9k|  size_t islot = i / 64;
  122|  27.9k|  if(islot < bset->nslots)
  ------------------
  |  Branch (122:6): [True: 27.9k, False: 0]
  ------------------
  123|  27.9k|    bset->slots[islot] &= ~((uint64_t)1 << (i % 64));
  124|  27.9k|}
Curl_uint32_bset_contains:
  127|  5.07k|{
  128|  5.07k|  uint32_t islot = i / 64;
  129|  5.07k|  if(islot >= bset->nslots)
  ------------------
  |  Branch (129:6): [True: 0, False: 5.07k]
  ------------------
  130|      0|    return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  131|  5.07k|  return (bset->slots[islot] & ((uint64_t)1 << (i % 64))) != 0;
  132|  5.07k|}
Curl_uint32_bset_first:
  135|  12.3k|{
  136|  12.3k|  uint32_t i;
  137|  17.4k|  for(i = bset->first_slot_used; i < bset->nslots; ++i) {
  ------------------
  |  Branch (137:34): [True: 7.61k, False: 9.82k]
  ------------------
  138|  7.61k|    if(bset->slots[i]) {
  ------------------
  |  Branch (138:8): [True: 2.53k, False: 5.07k]
  ------------------
  139|  2.53k|      *pfirst = (i * 64) + CURL_CTZ64(bset->slots[i]);
  ------------------
  |  |  348|  2.53k|#      define CURL_CTZ64(x)            __builtin_ctzl(x)
  ------------------
  140|  2.53k|      bset->first_slot_used = i;
  141|  2.53k|      return TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  142|  2.53k|    }
  143|  7.61k|  }
  144|  9.82k|  bset->first_slot_used = *pfirst = UINT32_MAX;
  145|       |  return FALSE;
  ------------------
  |  | 1048|  9.82k|#define FALSE false
  ------------------
  146|  12.3k|}
Curl_uint32_bset_next:
  150|  5.07k|{
  151|  5.07k|  uint32_t islot;
  152|  5.07k|  uint64_t x;
  153|       |
  154|  5.07k|  ++last; /* look for number one higher than last */
  155|  5.07k|  islot = last / 64; /* the slot this would be in */
  156|  5.07k|  if(islot < bset->nslots) {
  ------------------
  |  Branch (156:6): [True: 5.07k, False: 0]
  ------------------
  157|       |    /* shift away the bits we already iterated in this slot */
  158|  5.07k|    x = (bset->slots[islot] >> (last % 64));
  159|  5.07k|    if(x) {
  ------------------
  |  Branch (159:8): [True: 2.53k, False: 2.53k]
  ------------------
  160|       |      /* more bits set, next is `last` + trailing 0s of the shifted slot */
  161|  2.53k|      *pnext = last + CURL_CTZ64(x);
  ------------------
  |  |  348|  2.53k|#      define CURL_CTZ64(x)            __builtin_ctzl(x)
  ------------------
  162|  2.53k|      return TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  163|  2.53k|    }
  164|       |    /* no more bits set in the last slot, scan forward */
  165|  5.07k|    for(islot = islot + 1; islot < bset->nslots; ++islot) {
  ------------------
  |  Branch (165:28): [True: 2.53k, False: 2.53k]
  ------------------
  166|  2.53k|      if(bset->slots[islot]) {
  ------------------
  |  Branch (166:10): [True: 0, False: 2.53k]
  ------------------
  167|      0|        *pnext = (islot * 64) + CURL_CTZ64(bset->slots[islot]);
  ------------------
  |  |  348|      0|#      define CURL_CTZ64(x)            __builtin_ctzl(x)
  ------------------
  168|      0|        return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  169|      0|      }
  170|  2.53k|    }
  171|  2.53k|  }
  172|  2.53k|  *pnext = UINT32_MAX; /* a value we cannot store */
  173|       |  return FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  174|  5.07k|}

Curl_u8_strset_init:
   75|  15.2k|{
   76|       |#if defined(__GNUC__) && __GNUC__ >= 13
   77|       |#pragma GCC diagnostic push
   78|       |#pragma GCC diagnostic ignored "-Warray-bounds"
   79|       |#endif
   80|  15.2k|  memset(set, 0, sizeof(*set));
   81|       |#if defined(__GNUC__) && __GNUC__ >= 13
   82|       |#pragma GCC diagnostic pop
   83|       |#endif
   84|  15.2k|  set->data = set->sdata;
   85|  15.2k|  set->ids = set->sids;
   86|  15.2k|  set->psl = set->spsl;
   87|  15.2k|  set->slotbits = CURL_U8_STRSET_START_BITS;
  ------------------
  |  |   39|  15.2k|#define CURL_U8_STRSET_START_BITS   3
  ------------------
   88|  15.2k|  set->count = 0;
   89|  15.2k|#ifdef DEBUGBUILD
   90|  15.2k|  set->init = CURL_U8_STRSET_MAGIC;
  ------------------
  |  |   31|  15.2k|#define CURL_U8_STRSET_MAGIC 0x7117e783
  ------------------
   91|  15.2k|#endif
   92|  15.2k|}
Curl_u8_strset_clear:
   95|  5.07k|{
   96|  5.07k|  uint16_t i;
   97|  5.07k|  DEBUGASSERT(set->init == CURL_U8_STRSET_MAGIC);
  ------------------
  |  | 1075|  5.07k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (97:3): [True: 0, False: 5.07k]
  |  Branch (97:3): [True: 5.07k, False: 0]
  ------------------
   98|  61.9k|  for(i = 0; i < CURL_U8_SET_SLOT_CNT(set); ++i)
  ------------------
  |  |   52|  61.9k|#define CURL_U8_SET_SLOT_CNT(s)       CURL_U8_SLOT_CNT((s)->slotbits)
  |  |  ------------------
  |  |  |  |   51|  61.9k|#define CURL_U8_SLOT_CNT(i)           ((uint16_t)u8_smask[(i)] + 1)
  |  |  ------------------
  ------------------
  |  Branch (98:14): [True: 56.9k, False: 5.07k]
  ------------------
   99|  56.9k|    curlx_safefree(set->data[i]);
  ------------------
  |  | 1332|  61.9k|  do {                      \
  |  | 1333|  56.9k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  56.9k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  56.9k|    (ptr) = NULL;           \
  |  | 1335|  56.9k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 56.9k]
  |  |  ------------------
  ------------------
  100|       |
  101|  5.07k|  if(set->data != set->sdata)
  ------------------
  |  Branch (101:6): [True: 2.03k, False: 3.04k]
  ------------------
  102|       |    curlx_safefree(set->data);
  ------------------
  |  | 1332|  2.03k|  do {                      \
  |  | 1333|  2.03k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  2.03k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.03k|    (ptr) = NULL;           \
  |  | 1335|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  103|  5.07k|  Curl_u8_strset_init(set);
  104|  5.07k|}
Curl_u8_strset_get:
  202|   119k|{
  203|   119k|  uint8_t i;
  204|   119k|  DEBUGASSERT(set->init == CURL_U8_STRSET_MAGIC);
  ------------------
  |  | 1075|   119k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (204:3): [True: 0, False: 119k]
  |  Branch (204:3): [True: 119k, False: 0]
  ------------------
  205|   119k|  if(u8_strset_get_index(set, id, &i))
  ------------------
  |  Branch (205:6): [True: 25.7k, False: 94.1k]
  ------------------
  206|  25.7k|    return set->data[i];
  207|  94.1k|  return NULL;
  208|   119k|}
Curl_u8_strset_setn:
  212|  24.5k|{
  213|  24.5k|  uint8_t i;
  214|       |
  215|  24.5k|  DEBUGASSERT(set->init == CURL_U8_STRSET_MAGIC);
  ------------------
  |  | 1075|  24.5k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (215:3): [True: 0, False: 24.5k]
  |  Branch (215:3): [True: 24.5k, False: 0]
  ------------------
  216|       |#if CURL_U8_STRSET_DEBUG
  217|       |  curl_mfprintf(stderr, "u8_strset_setn %d=%s\n", id, str);
  218|       |#endif
  219|  24.5k|  if(!str) {
  ------------------
  |  Branch (219:6): [True: 382, False: 24.1k]
  ------------------
  220|    382|    Curl_u8_strset_unset(set, id);
  221|    382|    return CURLE_OK;
  222|    382|  }
  223|       |
  224|  24.1k|  if(u8_strset_get_index(set, id, &i)) {
  ------------------
  |  Branch (224:6): [True: 467, False: 23.6k]
  ------------------
  225|       |    /* `id` is in set, replace value */
  226|    467|    curlx_free(set->data[i]);
  ------------------
  |  | 1476|    467|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  227|    467|    set->data[i] = str;
  228|    467|    return CURLE_OK;
  229|    467|  }
  230|       |  /* `id` not in set yet, grow if full */
  231|  23.6k|  if((set->count >= CURL_U8_SET_SLOT_CNT(set)) && !u8_strset_grow(set)) {
  ------------------
  |  |   52|  23.6k|#define CURL_U8_SET_SLOT_CNT(s)       CURL_U8_SLOT_CNT((s)->slotbits)
  |  |  ------------------
  |  |  |  |   51|  23.6k|#define CURL_U8_SLOT_CNT(i)           ((uint16_t)u8_smask[(i)] + 1)
  |  |  ------------------
  ------------------
  |  Branch (231:6): [True: 2.03k, False: 21.6k]
  |  Branch (231:51): [True: 0, False: 2.03k]
  ------------------
  232|      0|    curlx_free(str);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  233|      0|    return CURLE_OUT_OF_MEMORY;
  234|      0|  }
  235|       |
  236|  23.6k|  u8_strset_addn(set, id, str);
  237|  23.6k|  return CURLE_OK;
  238|  23.6k|}
Curl_u8_strset_setx:
  242|  23.6k|{
  243|  23.6k|  char *val;
  244|       |
  245|  23.6k|  DEBUGASSERT(set->init == CURL_U8_STRSET_MAGIC);
  ------------------
  |  | 1075|  23.6k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (245:3): [True: 0, False: 23.6k]
  |  Branch (245:3): [True: 23.6k, False: 0]
  ------------------
  246|  23.6k|  if(!str) {
  ------------------
  |  Branch (246:6): [True: 0, False: 23.6k]
  ------------------
  247|      0|    Curl_u8_strset_unset(set, id);
  248|      0|    return CURLE_OK;
  249|      0|  }
  250|       |
  251|  23.6k|  val = curlx_memdup0(str, slen);
  252|  23.6k|  if(!val)
  ------------------
  |  Branch (252:6): [True: 0, False: 23.6k]
  ------------------
  253|      0|    return CURLE_OUT_OF_MEMORY;
  254|  23.6k|  return Curl_u8_strset_setn(set, id, val);
  255|  23.6k|}
Curl_u8_strset_unset:
  290|    382|{
  291|       |  u8_strset_unset(set, id, FALSE);
  ------------------
  |  | 1048|    382|#define FALSE false
  ------------------
  292|    382|}
Curl_u8_strset_unset0:
  295|  25.3k|{
  296|       |  u8_strset_unset(set, id, TRUE);
  ------------------
  |  | 1045|  25.3k|#define TRUE true
  ------------------
  297|  25.3k|}
uint-hashset.c:u8_strset_get_index:
  175|   169k|{
  176|   169k|  uint8_t i = CURL_U8_SET_SLOT_IDX(set, id);
  ------------------
  |  |   50|   169k|#define CURL_U8_SET_SLOT_IDX(s, i)    (uint8_t)((i) & u8_smask[(s)->slotbits])
  ------------------
  177|   169k|  uint8_t psl = 0;
  178|   304k|  while(set->data[i] && (psl <= set->psl[i])) {
  ------------------
  |  Branch (178:9): [True: 206k, False: 98.2k]
  |  Branch (178:25): [True: 160k, False: 45.1k]
  ------------------
  179|   160k|    if(set->ids[i] == id) {
  ------------------
  |  Branch (179:8): [True: 26.3k, False: 134k]
  ------------------
  180|  26.3k|      *pindex = i;
  181|       |#if CURL_U8_STRSET_DEBUG
  182|       |      curl_mfprintf(stderr, "u8_strset_index %d=%s\n", id, set->data[i]);
  183|       |#endif
  184|  26.3k|      return TRUE;
  ------------------
  |  | 1045|  26.3k|#define TRUE true
  ------------------
  185|  26.3k|    }
  186|   134k|    i = CURL_U8_SET_SLOT_IDX(set, i + 1);
  ------------------
  |  |   50|   134k|#define CURL_U8_SET_SLOT_IDX(s, i)    (uint8_t)((i) & u8_smask[(s)->slotbits])
  ------------------
  187|   134k|    ++psl;
  188|   134k|  }
  189|       |#if CURL_U8_STRSET_DEBUG
  190|       |  curl_mfprintf(stderr, "u8_strset_index %d not found\n", id);
  191|       |#endif
  192|   143k|  *pindex = 0;
  193|       |  return FALSE;
  ------------------
  |  | 1048|   143k|#define FALSE false
  ------------------
  194|   169k|}
uint-hashset.c:u8_strset_grow:
  129|  2.03k|{
  130|  2.03k|  uint8_t i, *prev_ids, nslotbits;
  131|  2.03k|  uint16_t prev_slots;
  132|  2.03k|  char **prev_data;
  133|  2.03k|  size_t nslots;
  134|  2.03k|  void *d;
  135|       |
  136|  2.03k|  if(set->slotbits >= 8)
  ------------------
  |  Branch (136:6): [True: 0, False: 2.03k]
  ------------------
  137|      0|    return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  138|  2.03k|  nslotbits = (uint8_t)(set->slotbits + 1);
  139|       |#if CURL_U8_STRSET_DEBUG
  140|       |  curl_mfprintf(stderr, "u8_strset_grow from %d to %d\n",
  141|       |                set->slotbits, nslotbits);
  142|       |#endif
  143|  2.03k|  nslots = CURL_U8_SLOT_CNT(nslotbits);
  ------------------
  |  |   51|  2.03k|#define CURL_U8_SLOT_CNT(i)           ((uint16_t)u8_smask[(i)] + 1)
  ------------------
  144|  2.03k|  d = curlx_calloc(1, (nslots * sizeof(char *)) + (2 * nslots));
  ------------------
  |  | 1473|  2.03k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
  145|  2.03k|  if(!d)
  ------------------
  |  Branch (145:6): [True: 0, False: 2.03k]
  ------------------
  146|      0|    return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  147|       |
  148|  2.03k|  prev_data = set->data;
  149|  2.03k|  prev_ids = set->ids;
  150|  2.03k|  prev_slots = set->slotbits;
  151|       |#if defined(__GNUC__) && __GNUC__ >= 13
  152|       |#pragma GCC diagnostic push
  153|       |#pragma GCC diagnostic ignored "-Wanalyzer-allocation-size"
  154|       |#endif
  155|  2.03k|  set->data = (char **)d;
  156|       |#if defined(__GNUC__) && __GNUC__ >= 13
  157|       |#pragma GCC diagnostic pop
  158|       |#endif
  159|  2.03k|  set->ids = (uint8_t *)d + (nslots * sizeof(char *));
  160|  2.03k|  set->psl = set->ids + nslots;
  161|  2.03k|  set->slotbits = nslotbits;
  162|  2.03k|  set->count = 0;
  163|       |  /* re-add previous entries */
  164|  18.3k|  for(i = 0; i < CURL_U8_SLOT_CNT(prev_slots); ++i) {
  ------------------
  |  |   51|  18.3k|#define CURL_U8_SLOT_CNT(i)           ((uint16_t)u8_smask[(i)] + 1)
  ------------------
  |  Branch (164:14): [True: 16.2k, False: 2.03k]
  ------------------
  165|  16.2k|    if(prev_data[i])
  ------------------
  |  Branch (165:8): [True: 16.2k, False: 0]
  ------------------
  166|  16.2k|      u8_strset_addn(set, prev_ids[i], prev_data[i]);
  167|  16.2k|  }
  168|  2.03k|  if(prev_data != set->sdata)
  ------------------
  |  Branch (168:6): [True: 0, False: 2.03k]
  ------------------
  169|      0|    curlx_free(prev_data);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  170|       |  return TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  171|  2.03k|}
uint-hashset.c:u8_strset_addn:
  107|  39.9k|{
  108|  39.9k|  uint8_t i = CURL_U8_SET_SLOT_IDX(set, id);
  ------------------
  |  |   50|  39.9k|#define CURL_U8_SET_SLOT_IDX(s, i)    (uint8_t)((i) & u8_smask[(s)->slotbits])
  ------------------
  109|  39.9k|  uint8_t psl = 0;
  110|  66.0k|  while(set->data[i]) {
  ------------------
  |  Branch (110:9): [True: 26.0k, False: 39.9k]
  ------------------
  111|  26.0k|    if(psl > set->psl[i]) { /* SWAP */
  ------------------
  |  Branch (111:8): [True: 6.76k, False: 19.3k]
  ------------------
  112|  6.76k|      char *tmpdata;
  113|  6.76k|      tmpdata = set->data[i];
  114|  6.76k|      set->data[i] = val;
  115|  6.76k|      val = tmpdata;
  116|  6.76k|      CURL_SWAP(set->psl[i], psl);
  ------------------
  |  |   36|  6.76k|#define CURL_SWAP(a, b) (((a) ^= (b)), ((b) ^= (a)), ((a) ^= (b)))
  ------------------
  117|  6.76k|      CURL_SWAP(set->ids[i], id);
  ------------------
  |  |   36|  6.76k|#define CURL_SWAP(a, b) (((a) ^= (b)), ((b) ^= (a)), ((a) ^= (b)))
  ------------------
  118|  6.76k|    }
  119|  26.0k|    i = CURL_U8_SET_SLOT_IDX(set, i + 1);
  ------------------
  |  |   50|  26.0k|#define CURL_U8_SET_SLOT_IDX(s, i)    (uint8_t)((i) & u8_smask[(s)->slotbits])
  ------------------
  120|  26.0k|    ++psl;
  121|  26.0k|  }
  122|  39.9k|  set->ids[i] = id;
  123|  39.9k|  set->data[i] = val;
  124|  39.9k|  set->psl[i] = psl;
  125|  39.9k|  ++set->count;
  126|  39.9k|}
uint-hashset.c:u8_strset_unset:
  264|  25.7k|{
  265|  25.7k|  uint8_t i, j;
  266|       |
  267|  25.7k|  DEBUGASSERT(set->init == CURL_U8_STRSET_MAGIC);
  ------------------
  |  | 1075|  25.7k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (267:3): [True: 0, False: 25.7k]
  |  Branch (267:3): [True: 25.7k, False: 0]
  ------------------
  268|  25.7k|  if(u8_strset_get_index(set, id, &i)) {
  ------------------
  |  Branch (268:6): [True: 151, False: 25.6k]
  ------------------
  269|       |    /* `id` is in set */
  270|    151|    if(zero)
  ------------------
  |  Branch (270:8): [True: 82, False: 69]
  ------------------
  271|     82|      curlx_strzero(set->data[i]);
  272|    151|    curlx_safefree(set->data[i]);
  ------------------
  |  | 1332|    151|  do {                      \
  |  | 1333|    151|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|    151|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|    151|    (ptr) = NULL;           \
  |  | 1335|    151|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 151]
  |  |  ------------------
  ------------------
  273|    151|    set->ids[i] = set->psl[i] = 0;
  274|    151|    --set->count;
  275|    151|    j = CURL_U8_SET_SLOT_IDX(set, i + 1);
  ------------------
  |  |   50|    151|#define CURL_U8_SET_SLOT_IDX(s, i)    (uint8_t)((i) & u8_smask[(s)->slotbits])
  ------------------
  276|       |    /* shift all entries with positive psl "down" */
  277|    171|    while(set->data[j] && set->psl[j]) {
  ------------------
  |  Branch (277:11): [True: 100, False: 71]
  |  Branch (277:27): [True: 20, False: 80]
  ------------------
  278|     20|      set->data[i] = set->data[j];
  279|     20|      set->ids[i] = set->ids[j];
  280|     20|      set->psl[i] = (uint8_t)(set->psl[j] - 1);
  281|     20|      set->data[j] = NULL;
  282|     20|      set->ids[j] = set->psl[j] = 0;
  283|     20|      i = j;
  284|     20|      j = CURL_U8_SET_SLOT_IDX(set, i + 1);
  ------------------
  |  |   50|     20|#define CURL_U8_SET_SLOT_IDX(s, i)    (uint8_t)((i) & u8_smask[(s)->slotbits])
  ------------------
  285|     20|    }
  286|    151|  }
  287|  25.7k|}

Curl_uint32_tbl_init:
   34|  2.53k|{
   35|  2.53k|  memset(tbl, 0, sizeof(*tbl));
   36|  2.53k|  tbl->entry_dtor = entry_dtor;
   37|  2.53k|  tbl->last_key_added = UINT32_MAX;
   38|  2.53k|#ifdef DEBUGBUILD
   39|  2.53k|  tbl->init = CURL_UINT32_TBL_MAGIC;
  ------------------
  |  |   29|  2.53k|#define CURL_UINT32_TBL_MAGIC  0x62757473
  ------------------
   40|  2.53k|#endif
   41|  2.53k|}
Curl_uint32_tbl_resize:
   61|  2.53k|{
   62|       |  /* we use `tbl->nrows + 1` during iteration, want that to work */
   63|  2.53k|  DEBUGASSERT(tbl->init == CURL_UINT32_TBL_MAGIC);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (63:3): [True: 0, False: 2.53k]
  |  Branch (63:3): [True: 2.53k, False: 0]
  ------------------
   64|  2.53k|  if(!nrows)
  ------------------
  |  Branch (64:6): [True: 0, False: 2.53k]
  ------------------
   65|      0|    return CURLE_BAD_FUNCTION_ARGUMENT;
   66|  2.53k|  if(nrows != tbl->nrows) {
  ------------------
  |  Branch (66:6): [True: 2.53k, False: 0]
  ------------------
   67|  2.53k|    void **rows = curlx_calloc(nrows, sizeof(void *));
  ------------------
  |  | 1473|  2.53k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
   68|  2.53k|    if(!rows)
  ------------------
  |  Branch (68:8): [True: 0, False: 2.53k]
  ------------------
   69|      0|      return CURLE_OUT_OF_MEMORY;
   70|  2.53k|    if(tbl->rows) {
  ------------------
  |  Branch (70:8): [True: 0, False: 2.53k]
  ------------------
   71|      0|      memcpy(rows, tbl->rows, (CURLMIN(nrows, tbl->nrows) * sizeof(void *)));
  ------------------
  |  | 1288|      0|#define CURLMIN(x, y) ((x) < (y) ? (x) : (y))
  |  |  ------------------
  |  |  |  Branch (1288:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   72|      0|      if(nrows < tbl->nrows)
  ------------------
  |  Branch (72:10): [True: 0, False: 0]
  ------------------
   73|      0|        uint32_tbl_clear_rows(tbl, nrows, tbl->nrows);
   74|      0|      curlx_free(tbl->rows);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   75|      0|    }
   76|  2.53k|    tbl->rows = rows;
   77|  2.53k|    tbl->nrows = nrows;
   78|  2.53k|  }
   79|  2.53k|  return CURLE_OK;
   80|  2.53k|}
uint32_tbl_clear:
   88|  2.53k|{
   89|  2.53k|  DEBUGASSERT(tbl->init == CURL_UINT32_TBL_MAGIC);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (89:3): [True: 0, False: 2.53k]
  |  Branch (89:3): [True: 2.53k, False: 0]
  ------------------
   90|  2.53k|  uint32_tbl_clear_rows(tbl, 0, tbl->nrows);
   91|  2.53k|  DEBUGASSERT(!tbl->nentries);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (91:3): [True: 0, False: 2.53k]
  |  Branch (91:3): [True: 2.53k, False: 0]
  ------------------
   92|  2.53k|  tbl->last_key_added = UINT32_MAX;
   93|  2.53k|}
Curl_uint32_tbl_destroy:
   96|  2.53k|{
   97|  2.53k|  DEBUGASSERT(tbl->init == CURL_UINT32_TBL_MAGIC);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (97:3): [True: 0, False: 2.53k]
  |  Branch (97:3): [True: 2.53k, False: 0]
  ------------------
   98|  2.53k|  uint32_tbl_clear(tbl);
   99|  2.53k|  curlx_free(tbl->rows);
  ------------------
  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  100|  2.53k|  memset(tbl, 0, sizeof(*tbl));
  101|  2.53k|}
Curl_uint32_tbl_capacity:
  104|  2.53k|{
  105|  2.53k|  return tbl->nrows;
  106|  2.53k|}
Curl_uint32_tbl_count:
  109|  5.07k|{
  110|  5.07k|  return tbl->nentries;
  111|  5.07k|}
Curl_uint32_tbl_get:
  114|  7.61k|{
  115|  7.61k|  return (key < tbl->nrows) ? tbl->rows[key] : NULL;
  ------------------
  |  Branch (115:10): [True: 7.61k, False: 0]
  ------------------
  116|  7.61k|}
Curl_uint32_tbl_add:
  119|  5.07k|{
  120|  5.07k|  uint32_t key, start_pos;
  121|       |
  122|  5.07k|  DEBUGASSERT(tbl->init == CURL_UINT32_TBL_MAGIC);
  ------------------
  |  | 1075|  5.07k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (122:3): [True: 0, False: 5.07k]
  |  Branch (122:3): [True: 5.07k, False: 0]
  ------------------
  123|  5.07k|  if(!entry || !pkey)
  ------------------
  |  Branch (123:6): [True: 0, False: 5.07k]
  |  Branch (123:16): [True: 0, False: 5.07k]
  ------------------
  124|      0|    return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  125|  5.07k|  *pkey = UINT32_MAX;
  126|  5.07k|  if(tbl->nentries == tbl->nrows)  /* full */
  ------------------
  |  Branch (126:6): [True: 0, False: 5.07k]
  ------------------
  127|      0|    return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  128|       |
  129|  5.07k|  start_pos = CURLMIN(tbl->last_key_added, tbl->nrows) + 1;
  ------------------
  |  | 1288|  5.07k|#define CURLMIN(x, y) ((x) < (y) ? (x) : (y))
  |  |  ------------------
  |  |  |  Branch (1288:24): [True: 2.53k, False: 2.53k]
  |  |  ------------------
  ------------------
  130|  5.07k|  for(key = start_pos; key < tbl->nrows; ++key) {
  ------------------
  |  Branch (130:24): [True: 2.53k, False: 2.53k]
  ------------------
  131|  2.53k|    if(!tbl->rows[key]) {
  ------------------
  |  Branch (131:8): [True: 2.53k, False: 0]
  ------------------
  132|  2.53k|      tbl->rows[key] = entry;
  133|  2.53k|      tbl->nentries++;
  134|  2.53k|      tbl->last_key_added = key;
  135|  2.53k|      *pkey = key;
  136|  2.53k|      return TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  137|  2.53k|    }
  138|  2.53k|  }
  139|       |  /* no free entry at or above tbl->maybe_next_key, wrap around */
  140|  2.53k|  for(key = 0; key < start_pos; ++key) {
  ------------------
  |  Branch (140:16): [True: 2.53k, False: 0]
  ------------------
  141|  2.53k|    if(!tbl->rows[key]) {
  ------------------
  |  Branch (141:8): [True: 2.53k, False: 0]
  ------------------
  142|  2.53k|      tbl->rows[key] = entry;
  143|  2.53k|      tbl->nentries++;
  144|  2.53k|      tbl->last_key_added = key;
  145|  2.53k|      *pkey = key;
  146|  2.53k|      return TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  147|  2.53k|    }
  148|  2.53k|  }
  149|       |  /* Did not find any free row? Should not happen */
  150|      0|  DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (150:3): [Folded, False: 0]
  |  Branch (150:3): [Folded, False: 0]
  ------------------
  151|      0|  return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  152|      0|}
Curl_uint32_tbl_remove:
  155|  5.07k|{
  156|  5.07k|  uint32_tbl_clear_rows(tbl, key, key + 1);
  157|  5.07k|}
Curl_uint32_tbl_contains:
  160|  2.53k|{
  161|  2.53k|  return (key < tbl->nrows) ? !!tbl->rows[key] : FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  |  Branch (161:10): [True: 2.53k, False: 0]
  ------------------
  162|  2.53k|}
Curl_uint32_tbl_first:
  181|  2.53k|{
  182|  2.53k|  if(!pkey || !pentry)
  ------------------
  |  Branch (182:6): [True: 0, False: 2.53k]
  |  Branch (182:15): [True: 0, False: 2.53k]
  ------------------
  183|      0|    return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  184|  2.53k|  if(tbl->nentries && uint32_tbl_next_at(tbl, 0, pkey, pentry))
  ------------------
  |  Branch (184:6): [True: 2.53k, False: 0]
  |  Branch (184:23): [True: 2.53k, False: 0]
  ------------------
  185|  2.53k|    return TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  186|      0|  DEBUGASSERT(!tbl->nentries);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (186:3): [True: 0, False: 0]
  |  Branch (186:3): [True: 0, False: 0]
  ------------------
  187|      0|  *pkey = UINT32_MAX;  /* always invalid */
  188|      0|  *pentry = NULL;
  189|       |  return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  190|      0|}
Curl_uint32_tbl_next:
  194|  2.53k|{
  195|  2.53k|  if(!pkey || !pentry)
  ------------------
  |  Branch (195:6): [True: 0, False: 2.53k]
  |  Branch (195:15): [True: 0, False: 2.53k]
  ------------------
  196|      0|    return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  197|  2.53k|  if(uint32_tbl_next_at(tbl, last_key + 1, pkey, pentry))
  ------------------
  |  Branch (197:6): [True: 0, False: 2.53k]
  ------------------
  198|      0|    return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  199|  2.53k|  *pkey = UINT32_MAX;  /* always invalid */
  200|  2.53k|  *pentry = NULL;
  201|       |  return FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  202|  2.53k|}
uint-table.c:uint32_tbl_clear_rows:
   46|  7.61k|{
   47|  7.61k|  uint32_t i, end;
   48|       |
   49|  7.61k|  end = CURLMIN(upto_excluding, tbl->nrows);
  ------------------
  |  | 1288|  7.61k|#define CURLMIN(x, y) ((x) < (y) ? (x) : (y))
  |  |  ------------------
  |  |  |  Branch (1288:24): [True: 5.07k, False: 2.53k]
  |  |  ------------------
  ------------------
   50|   337k|  for(i = from; i < end; ++i) {
  ------------------
  |  Branch (50:17): [True: 330k, False: 7.61k]
  ------------------
   51|   330k|    if(tbl->rows[i]) {
  ------------------
  |  Branch (51:8): [True: 5.07k, False: 324k]
  ------------------
   52|  5.07k|      if(tbl->entry_dtor)
  ------------------
  |  Branch (52:10): [True: 0, False: 5.07k]
  ------------------
   53|      0|        tbl->entry_dtor(i, tbl->rows[i]);
   54|       |      tbl->rows[i] = NULL;
   55|  5.07k|      tbl->nentries--;
   56|  5.07k|    }
   57|   330k|  }
   58|  7.61k|}
uint-table.c:uint32_tbl_next_at:
  166|  5.07k|{
  167|   327k|  for(; key < tbl->nrows; ++key) {
  ------------------
  |  Branch (167:9): [True: 324k, False: 2.53k]
  ------------------
  168|   324k|    if(tbl->rows[key]) {
  ------------------
  |  Branch (168:8): [True: 2.53k, False: 322k]
  ------------------
  169|  2.53k|      *pkey = key;
  170|  2.53k|      *pentry = tbl->rows[key];
  171|  2.53k|      return TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  172|  2.53k|    }
  173|   324k|  }
  174|  2.53k|  *pkey = UINT32_MAX;  /* always invalid */
  175|  2.53k|  *pentry = NULL;
  176|       |  return FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  177|  5.07k|}

Curl_freeset:
  148|  5.07k|{
  149|       |  /* Free all dynamic strings stored in the data->set substructure. */
  150|  5.07k|  enum dupblob j;
  151|       |
  152|  5.07k|  CURL_EASY_STR_CLEAR0(data, STRING_PASSWORD);
  ------------------
  |  | 1236|  5.07k|  Curl_u8_strset_unset0(&(d)->set.strings, (uint8_t)(id))
  ------------------
  153|  5.07k|  CURL_EASY_STR_CLEAR0(data, STRING_KEY_PASSWD);
  ------------------
  |  | 1236|  5.07k|  Curl_u8_strset_unset0(&(d)->set.strings, (uint8_t)(id))
  ------------------
  154|  5.07k|  CURL_EASY_STR_CLEAR0(data, STRING_BEARER);
  ------------------
  |  | 1236|  5.07k|  Curl_u8_strset_unset0(&(d)->set.strings, (uint8_t)(id))
  ------------------
  155|  5.07k|#ifndef CURL_DISABLE_PROXY
  156|  5.07k|  CURL_EASY_STR_CLEAR0(data, STRING_PROXYPASSWORD);
  ------------------
  |  | 1236|  5.07k|  Curl_u8_strset_unset0(&(d)->set.strings, (uint8_t)(id))
  ------------------
  157|  5.07k|  CURL_EASY_STR_CLEAR0(data, STRING_KEY_PASSWD_PROXY);
  ------------------
  |  | 1236|  5.07k|  Curl_u8_strset_unset0(&(d)->set.strings, (uint8_t)(id))
  ------------------
  158|  5.07k|#endif
  159|  5.07k|  Curl_u8_strset_clear(&data->set.strings);
  160|  5.07k|  curlx_safefree(data->set.str_copypostfields);
  ------------------
  |  | 1332|  5.07k|  do {                      \
  |  | 1333|  5.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  5.07k|    (ptr) = NULL;           \
  |  | 1335|  5.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 5.07k]
  |  |  ------------------
  ------------------
  161|       |
  162|  45.7k|  for(j = (enum dupblob)0; j < BLOB_LAST; j++) {
  ------------------
  |  Branch (162:28): [True: 40.6k, False: 5.07k]
  ------------------
  163|  40.6k|    curlx_safefree(data->set.blobs[j]);
  ------------------
  |  | 1332|  40.6k|  do {                      \
  |  | 1333|  40.6k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  40.6k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  40.6k|    (ptr) = NULL;           \
  |  | 1335|  40.6k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 40.6k]
  |  |  ------------------
  ------------------
  164|  40.6k|  }
  165|       |
  166|  5.07k|  Curl_bufref_free(&data->state.referer);
  167|  5.07k|  Curl_bufref_free(&data->state.url);
  168|       |
  169|  5.07k|#if !defined(CURL_DISABLE_MIME) || !defined(CURL_DISABLE_FORM_API)
  170|  5.07k|  Curl_mime_cleanpart(data->set.mimepostp);
  171|  5.07k|  curlx_safefree(data->set.mimepostp);
  ------------------
  |  | 1332|  5.07k|  do {                      \
  |  | 1333|  5.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  5.07k|    (ptr) = NULL;           \
  |  | 1335|  5.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 5.07k]
  |  |  ------------------
  ------------------
  172|  5.07k|#endif
  173|       |
  174|  5.07k|#ifndef CURL_DISABLE_COOKIES
  175|  5.07k|  curl_slist_free_all(data->state.cookielist);
  176|       |  data->state.cookielist = NULL;
  177|  5.07k|#endif
  178|  5.07k|}
Curl_close:
  198|  5.07k|{
  199|  5.07k|  struct Curl_easy *data;
  200|       |
  201|  5.07k|  if(!datap || !*datap)
  ------------------
  |  Branch (201:6): [True: 0, False: 5.07k]
  |  Branch (201:16): [True: 0, False: 5.07k]
  ------------------
  202|      0|    return CURLE_OK;
  203|       |
  204|  5.07k|  data = *datap;
  205|  5.07k|  *datap = NULL;
  206|       |
  207|  5.07k|  if(!data->state.internal && data->multi) {
  ------------------
  |  Branch (207:6): [True: 2.53k, False: 2.53k]
  |  Branch (207:31): [True: 0, False: 2.53k]
  ------------------
  208|       |    /* This handle is still part of a multi handle, take care of this first
  209|       |       and detach this handle from there.
  210|       |       This detaches the connection. */
  211|      0|    Curl_multi_remove_handle(data->multi, data);
  212|      0|  }
  213|  5.07k|  else {
  214|       |    /* Detach connection if any is left. This should not be normal, but can be
  215|       |       the case for example with CONNECT_ONLY + recv/send (test 556) */
  216|  5.07k|    Curl_detach_connection(data);
  217|  5.07k|    if(!data->state.internal && data->multi_easy) {
  ------------------
  |  Branch (217:8): [True: 2.53k, False: 2.53k]
  |  Branch (217:33): [True: 0, False: 2.53k]
  ------------------
  218|       |      /* when curl_easy_perform() is used, it creates its own multi handle to
  219|       |         use and this is the one */
  220|      0|      curl_multi_cleanup(data->multi_easy);
  221|      0|      data->multi_easy = NULL;
  222|      0|    }
  223|  5.07k|  }
  224|  5.07k|  DEBUGASSERT(!data->conn || data->state.internal);
  ------------------
  |  | 1075|  5.07k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (224:3): [True: 5.07k, False: 0]
  |  Branch (224:3): [True: 0, False: 0]
  |  Branch (224:3): [True: 5.07k, False: 0]
  |  Branch (224:3): [True: 0, False: 0]
  ------------------
  225|       |
  226|  5.07k|  Curl_expire_clear_all(data); /* shut off any timers left */
  227|       |
  228|  5.07k|  if(data->state.rangestringalloc)
  ------------------
  |  Branch (228:6): [True: 0, False: 5.07k]
  ------------------
  229|      0|    curlx_free(data->state.range);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  230|       |
  231|       |  /* release any resolve information this transfer kept */
  232|  5.07k|  Curl_resolv_destroy_all(data);
  233|       |
  234|  5.07k|  data->set.verbose = FALSE; /* no more calls to DEBUGFUNCTION */
  ------------------
  |  | 1048|  5.07k|#define FALSE false
  ------------------
  235|  5.07k|  data->magic = 0; /* force a clear AFTER the possibly enforced removal from
  236|       |                    * the multi handle and async dns shutdown. The multi
  237|       |                    * handle might check the magic and so might any
  238|       |                    * DEBUGFUNCTION invoked for tracing */
  239|       |
  240|       |  /* freed here in case DONE was not called */
  241|  5.07k|  Curl_req_free(&data->req, data);
  242|       |
  243|       |  /* Close down all open SSL info and sessions */
  244|  5.07k|  Curl_ssl_close_all(data);
  245|  5.07k|  Curl_peer_unlink(&data->state.origin);
  246|  5.07k|  Curl_peer_unlink(&data->state.initial_origin);
  247|  5.07k|  Curl_ssl_free_certinfo(data);
  248|       |
  249|  5.07k|  Curl_bufref_free(&data->state.referer);
  250|       |
  251|  5.07k|  up_free(data);
  252|  5.07k|  curlx_dyn_free(&data->state.headerb);
  253|  5.07k|  Curl_flush_cookies(data, TRUE);
  ------------------
  |  | 1045|  5.07k|#define TRUE true
  ------------------
  254|  5.07k|#ifndef CURL_DISABLE_ALTSVC
  255|  5.07k|  Curl_altsvc_save(data, data->asi, CURL_EASY_STR(data, STRING_ALTSVC));
  ------------------
  |  | 1228|  5.07k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
  256|  5.07k|  Curl_altsvc_cleanup(&data->asi);
  257|  5.07k|#endif
  258|  5.07k|#ifndef CURL_DISABLE_HSTS
  259|  5.07k|  Curl_hsts_save(data, data->hsts, CURL_EASY_STR(data, STRING_HSTS));
  ------------------
  |  | 1228|  5.07k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
  260|  5.07k|  if(!data->share || !data->share->hsts)
  ------------------
  |  Branch (260:6): [True: 5.07k, False: 0]
  |  Branch (260:22): [True: 0, False: 0]
  ------------------
  261|  5.07k|    Curl_hsts_cleanup(&data->hsts);
  262|  5.07k|  curl_slist_free_all(data->state.hstslist); /* clean up list */
  263|  5.07k|#endif
  264|  5.07k|#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_DIGEST_AUTH)
  265|  5.07k|  Curl_http_auth_cleanup_digest(data);
  266|  5.07k|#endif
  267|  5.07k|  curlx_safefree(data->state.most_recent_ftp_entrypath);
  ------------------
  |  | 1332|  5.07k|  do {                      \
  |  | 1333|  5.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  5.07k|    (ptr) = NULL;           \
  |  | 1335|  5.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 5.07k]
  |  |  ------------------
  ------------------
  268|  5.07k|  curlx_safefree(data->info.contenttype);
  ------------------
  |  | 1332|  5.07k|  do {                      \
  |  | 1333|  5.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  5.07k|    (ptr) = NULL;           \
  |  | 1335|  5.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 5.07k]
  |  |  ------------------
  ------------------
  269|  5.07k|  curlx_safefree(data->info.wouldredirect);
  ------------------
  |  | 1332|  5.07k|  do {                      \
  |  | 1333|  5.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  5.07k|    (ptr) = NULL;           \
  |  | 1335|  5.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 5.07k]
  |  |  ------------------
  ------------------
  270|       |
  271|       |  /* No longer a dirty share, if it exists */
  272|  5.07k|  if(Curl_share_easy_unlink(data))
  ------------------
  |  Branch (272:6): [True: 0, False: 5.07k]
  ------------------
  273|  5.07k|    DEBUGASSERT(0);
  ------------------
  |  | 1075|  5.07k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (273:5): [Folded, False: 0]
  |  Branch (273:5): [Folded, False: 0]
  ------------------
  274|       |
  275|  5.07k|  Curl_hash_destroy(&data->meta_hash);
  276|  5.07k|  Curl_creds_unlink(&data->state.creds);
  277|  5.07k|#ifndef CURL_DISABLE_HTTP
  278|  5.07k|  curlx_safefree(data->state.rangeline);
  ------------------
  |  | 1332|  5.07k|  do {                      \
  |  | 1333|  5.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  5.07k|    (ptr) = NULL;           \
  |  | 1335|  5.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 5.07k]
  |  |  ------------------
  ------------------
  279|  5.07k|  curlx_safefree(data->state.http_host);
  ------------------
  |  | 1332|  5.07k|  do {                      \
  |  | 1333|  5.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  5.07k|    (ptr) = NULL;           \
  |  | 1335|  5.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 5.07k]
  |  |  ------------------
  ------------------
  280|  5.07k|#endif
  281|  5.07k|#ifndef CURL_DISABLE_COOKIES
  282|  5.07k|  curlx_safefree(data->req.cookiehost);
  ------------------
  |  | 1332|  5.07k|  do {                      \
  |  | 1333|  5.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  5.07k|    (ptr) = NULL;           \
  |  | 1335|  5.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 5.07k]
  |  |  ------------------
  ------------------
  283|  5.07k|#endif
  284|       |
  285|  5.07k|#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_FORM_API)
  286|  5.07k|  Curl_mime_cleanpart(data->state.formp);
  287|  5.07k|  curlx_safefree(data->state.formp);
  ------------------
  |  | 1332|  5.07k|  do {                      \
  |  | 1333|  5.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  5.07k|    (ptr) = NULL;           \
  |  | 1335|  5.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 5.07k]
  |  |  ------------------
  ------------------
  288|  5.07k|#endif
  289|       |
  290|       |  /* destruct wildcard structures if it is needed */
  291|  5.07k|  Curl_wildcard_dtor(&data->wildcard);
  292|  5.07k|  Curl_freeset(data);
  293|  5.07k|  Curl_headers_cleanup(data);
  294|  5.07k|  Curl_netrc_cleanup(&data->state.netrc);
  295|  5.07k|#ifndef CURL_DISABLE_DIGEST_AUTH
  296|  5.07k|  curlx_free(data->state.envproxy);
  ------------------
  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  297|  5.07k|#endif
  298|  5.07k|  Curl_ssl_config_cleanup(&data->set.ssl.primary);
  299|  5.07k|#ifndef CURL_DISABLE_PROXY
  300|  5.07k|  Curl_ssl_config_cleanup(&data->set.proxy_ssl.primary);
  301|  5.07k|#endif
  302|  5.07k|  curlx_memzero(data, sizeof(*data));
  303|  5.07k|  curlx_free(data);
  ------------------
  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  304|  5.07k|  return CURLE_OK;
  305|  5.07k|}
Curl_init_userdefined:
  312|  5.07k|{
  313|  5.07k|  struct UserDefined *set = &data->set;
  314|       |
  315|  5.07k|  set->out = stdout;  /* default output to stdout */
  316|  5.07k|  set->in_set = stdin;  /* default input from stdin */
  317|  5.07k|  set->err = stderr;  /* default stderr to stderr */
  318|       |
  319|  5.07k|  Curl_u8_strset_init(&data->set.strings);
  320|       |
  321|  5.07k|#if defined(__clang__) && __clang_major__ >= 16
  322|  5.07k|#pragma clang diagnostic push
  323|  5.07k|#pragma clang diagnostic ignored "-Wcast-function-type-strict"
  324|  5.07k|#endif
  325|       |  /* use fwrite as default function to store output */
  326|  5.07k|  set->fwrite_func = (curl_write_callback)fwrite;
  327|       |
  328|       |  /* use fread as default function to read input */
  329|  5.07k|  set->fread_func_set = (curl_read_callback)fread;
  330|  5.07k|#if defined(__clang__) && __clang_major__ >= 16
  331|  5.07k|#pragma clang diagnostic pop
  332|  5.07k|#endif
  333|  5.07k|  set->is_fread_set = 0;
  334|       |
  335|  5.07k|  set->seek_client = ZERO_NULL;
  ------------------
  |  | 1158|  5.07k|#define ZERO_NULL 0
  ------------------
  336|       |
  337|  5.07k|  set->filesize = -1;        /* we do not know the size */
  338|  5.07k|  set->postfieldsize = -1;   /* unknown size */
  339|  5.07k|  set->maxredirs = 30;       /* sensible default */
  340|       |
  341|  5.07k|  set->method = HTTPREQ_GET; /* Default HTTP request */
  342|  5.07k|#ifndef CURL_DISABLE_RTSP
  343|  5.07k|  set->rtspreq = RTSPREQ_OPTIONS; /* Default RTSP request */
  ------------------
  |  |   34|  5.07k|#define RTSPREQ_OPTIONS CURL_RTSPREQ_OPTIONS
  |  |  ------------------
  |  |  |  | 2367|  5.07k|#define CURL_RTSPREQ_OPTIONS       1L
  |  |  ------------------
  ------------------
  344|  5.07k|#endif
  345|  5.07k|#ifndef CURL_DISABLE_FTP
  346|  5.07k|  set->ftp_use_epsv = TRUE;   /* FTP defaults to EPSV operations */
  ------------------
  |  | 1045|  5.07k|#define TRUE true
  ------------------
  347|  5.07k|  set->ftp_use_eprt = TRUE;   /* FTP defaults to EPRT operations */
  ------------------
  |  | 1045|  5.07k|#define TRUE true
  ------------------
  348|  5.07k|  set->ftp_use_pret = FALSE;  /* mainly useful for drftpd servers */
  ------------------
  |  | 1048|  5.07k|#define FALSE false
  ------------------
  349|  5.07k|  set->ftp_filemethod = FTPFILE_MULTICWD;
  350|  5.07k|  set->ftp_skip_ip = TRUE;    /* skip PASV IP by default */
  ------------------
  |  | 1045|  5.07k|#define TRUE true
  ------------------
  351|  5.07k|#endif
  352|  5.07k|  set->dns_cache_timeout_ms = 60000; /* Timeout every 60 seconds by default */
  353|       |
  354|       |  /* Timeout every 24 hours by default */
  355|  5.07k|  set->general_ssl.ca_cache_timeout = 24 * 60 * 60;
  356|       |
  357|  5.07k|  set->httpauth = CURLAUTH_BASIC;  /* defaults to basic */
  ------------------
  |  |  833|  5.07k|#define CURLAUTH_BASIC        (((unsigned long)1) << 0)
  ------------------
  358|       |
  359|  5.07k|  Curl_ssl_config_init(&data->set.ssl.primary);
  360|  5.07k|#ifndef CURL_DISABLE_PROXY
  361|  5.07k|  Curl_ssl_config_init(&data->set.proxy_ssl.primary);
  362|  5.07k|  set->proxyport = 0;
  363|  5.07k|  set->proxytype = CURLPROXY_HTTP; /* defaults to HTTP proxy */
  ------------------
  |  |  792|  5.07k|#define CURLPROXY_HTTP            0L /* added in 7.10, new in 7.19.4 default is
  ------------------
  364|  5.07k|  set->proxyauth = CURLAUTH_BASIC; /* defaults to basic */
  ------------------
  |  |  833|  5.07k|#define CURLAUTH_BASIC        (((unsigned long)1) << 0)
  ------------------
  365|       |  /* SOCKS5 proxy auth defaults to username/password + GSS-API */
  366|  5.07k|  set->socks5auth = CURLAUTH_BASIC | CURLAUTH_GSSAPI;
  ------------------
  |  |  833|  5.07k|#define CURLAUTH_BASIC        (((unsigned long)1) << 0)
  ------------------
                set->socks5auth = CURLAUTH_BASIC | CURLAUTH_GSSAPI;
  ------------------
  |  |  839|  5.07k|#define CURLAUTH_GSSAPI CURLAUTH_NEGOTIATE
  |  |  ------------------
  |  |  |  |  835|  5.07k|#define CURLAUTH_NEGOTIATE    (((unsigned long)1) << 2)
  |  |  ------------------
  ------------------
  367|  5.07k|#endif
  368|       |
  369|  5.07k|#ifndef CURL_DISABLE_DOH
  370|  5.07k|  set->doh_verifyhost = TRUE;
  ------------------
  |  | 1045|  5.07k|#define TRUE true
  ------------------
  371|  5.07k|  set->doh_verifypeer = TRUE;
  ------------------
  |  | 1045|  5.07k|#define TRUE true
  ------------------
  372|  5.07k|#endif
  373|       |#ifdef USE_SSH
  374|       |  /* defaults to any auth type */
  375|       |  set->ssh_auth_types = CURLSSH_AUTH_DEFAULT;
  376|       |  set->new_directory_perms = 0755; /* Default permissions */
  377|       |#endif
  378|       |
  379|  5.07k|  set->new_file_perms = 0644;    /* Default permissions */
  380|  5.07k|  set->allowed_protocols = (curl_prot_t)CURLPROTO_64ALL;
  ------------------
  |  |   68|  5.07k|#define CURLPROTO_64ALL ((uint64_t)0xffffffffffffffff)
  ------------------
  381|  5.07k|  set->redir_protocols = CURLPROTO_REDIR;
  ------------------
  |  |   71|  5.07k|#define CURLPROTO_REDIR (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_FTP | \
  |  |  ------------------
  |  |  |  | 1088|  5.07k|#define CURLPROTO_HTTP    (1L << 0)
  |  |  ------------------
  |  |               #define CURLPROTO_REDIR (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_FTP | \
  |  |  ------------------
  |  |  |  | 1089|  5.07k|#define CURLPROTO_HTTPS   (1L << 1)
  |  |  ------------------
  |  |               #define CURLPROTO_REDIR (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_FTP | \
  |  |  ------------------
  |  |  |  | 1090|  5.07k|#define CURLPROTO_FTP     (1L << 2)
  |  |  ------------------
  |  |   72|  5.07k|                         CURLPROTO_FTPS)
  |  |  ------------------
  |  |  |  | 1091|  5.07k|#define CURLPROTO_FTPS    (1L << 3)
  |  |  ------------------
  ------------------
  382|       |
  383|       |#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
  384|       |  /*
  385|       |   * disallow unprotected protection negotiation NEC reference implementation
  386|       |   * seem not to follow rfc1961 section 4.3/4.4
  387|       |   */
  388|       |  set->socks5_gssapi_nec = FALSE;
  389|       |#endif
  390|       |
  391|       |  /* set default minimum TLS version */
  392|  5.07k|#ifdef USE_SSL
  393|  5.07k|  Curl_setopt_SSLVERSION(data, CURLOPT_SSLVERSION, CURL_SSLVERSION_DEFAULT);
  ------------------
  |  | 2394|  5.07k|#define CURL_SSLVERSION_DEFAULT 0L
  ------------------
  394|  5.07k|#ifndef CURL_DISABLE_PROXY
  395|  5.07k|  Curl_setopt_SSLVERSION(data, CURLOPT_PROXY_SSLVERSION,
  396|  5.07k|                         CURL_SSLVERSION_DEFAULT);
  ------------------
  |  | 2394|  5.07k|#define CURL_SSLVERSION_DEFAULT 0L
  ------------------
  397|  5.07k|#endif
  398|  5.07k|#endif
  399|  5.07k|#ifndef CURL_DISABLE_FTP
  400|  5.07k|  set->wildcard_enabled = FALSE;
  ------------------
  |  | 1048|  5.07k|#define FALSE false
  ------------------
  401|  5.07k|  set->chunk_bgn = ZERO_NULL;
  ------------------
  |  | 1158|  5.07k|#define ZERO_NULL 0
  ------------------
  402|  5.07k|  set->chunk_end = ZERO_NULL;
  ------------------
  |  | 1158|  5.07k|#define ZERO_NULL 0
  ------------------
  403|  5.07k|  set->fnmatch = ZERO_NULL;
  ------------------
  |  | 1158|  5.07k|#define ZERO_NULL 0
  ------------------
  404|  5.07k|#endif
  405|  5.07k|  set->tcp_keepalive = FALSE;
  ------------------
  |  | 1048|  5.07k|#define FALSE false
  ------------------
  406|  5.07k|  set->tcp_keepintvl = 60;
  407|  5.07k|  set->tcp_keepidle = 60;
  408|  5.07k|  set->tcp_keepcnt = 9;
  409|  5.07k|  set->tcp_fastopen = FALSE;
  ------------------
  |  | 1048|  5.07k|#define FALSE false
  ------------------
  410|  5.07k|  set->tcp_nodelay = TRUE;
  ------------------
  |  | 1045|  5.07k|#define TRUE true
  ------------------
  411|  5.07k|  set->ssl_enable_alpn = TRUE;
  ------------------
  |  | 1045|  5.07k|#define TRUE true
  ------------------
  412|  5.07k|  set->expect_100_timeout = 1000L; /* Wait for a second by default. */
  413|  5.07k|  set->sep_headers = TRUE; /* separated header lists by default */
  ------------------
  |  | 1045|  5.07k|#define TRUE true
  ------------------
  414|  5.07k|  set->buffer_size = READBUFFER_SIZE;
  ------------------
  |  |  121|  5.07k|#define READBUFFER_SIZE CURL_MAX_WRITE_SIZE
  |  |  ------------------
  |  |  |  |  267|  5.07k|#define CURL_MAX_WRITE_SIZE 16384
  |  |  ------------------
  ------------------
  415|  5.07k|  set->upload_buffer_size = UPLOADBUFFER_DEFAULT;
  ------------------
  |  |  133|  5.07k|#define UPLOADBUFFER_DEFAULT 65536
  ------------------
  416|  5.07k|  set->upload_flags = CURLULFLAG_SEEN;
  ------------------
  |  | 1054|  5.07k|#define CURLULFLAG_SEEN     (1L << 4)
  ------------------
  417|  5.07k|  set->happy_eyeballs_timeout = CURL_HET_DEFAULT;
  ------------------
  |  |  979|  5.07k|#define CURL_HET_DEFAULT 200L
  ------------------
  418|  5.07k|  set->upkeep_interval_ms = CURL_UPKEEP_INTERVAL_DEFAULT;
  ------------------
  |  |  982|  5.07k|#define CURL_UPKEEP_INTERVAL_DEFAULT 60000L
  ------------------
  419|  5.07k|  set->maxconnects = DEFAULT_CONNCACHE_SIZE; /* for easy handles */
  ------------------
  |  |   38|  5.07k|#define DEFAULT_CONNCACHE_SIZE 5
  ------------------
  420|  5.07k|  set->conn_max_idle_ms = 118 * 1000;
  421|  5.07k|  set->conn_max_age_ms = 24 * 3600 * 1000;
  422|  5.07k|  set->http09_allowed = FALSE;
  ------------------
  |  | 1048|  5.07k|#define FALSE false
  ------------------
  423|  5.07k|  set->httpwant = CURL_HTTP_VERSION_NONE;
  ------------------
  |  | 2338|  5.07k|#define CURL_HTTP_VERSION_NONE  0L /* setting this means we do not care, and
  ------------------
  424|  5.07k|#if defined(USE_HTTP2) || defined(USE_HTTP3)
  425|  5.07k|  set->weight = 0;
  426|  5.07k|#endif
  427|  5.07k|  set->quick_exit = 0L;
  428|  5.07k|#ifndef CURL_DISABLE_WEBSOCKETS
  429|  5.07k|  set->ws_raw_mode = FALSE;
  ------------------
  |  | 1048|  5.07k|#define FALSE false
  ------------------
  430|       |  set->ws_no_auto_pong = FALSE;
  ------------------
  |  | 1048|  5.07k|#define FALSE false
  ------------------
  431|  5.07k|#endif
  432|  5.07k|}
Curl_open:
  453|  5.07k|{
  454|  5.07k|  struct Curl_easy *data;
  455|       |
  456|       |  /* simple start-up: alloc the struct, init it with zeroes and return */
  457|  5.07k|  data = curlx_calloc(1, sizeof(struct Curl_easy));
  ------------------
  |  | 1473|  5.07k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
  458|  5.07k|  if(!data) {
  ------------------
  |  Branch (458:6): [True: 0, False: 5.07k]
  ------------------
  459|       |    /* this is a serious error */
  460|      0|    DEBUGF(curl_mfprintf(stderr, "Error: calloc of Curl_easy failed\n"));
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  ------------------
  461|      0|    return CURLE_OUT_OF_MEMORY;
  462|      0|  }
  463|       |
  464|  5.07k|  data->magic = CURLEASY_MAGIC_NUMBER;
  ------------------
  |  |   28|  5.07k|#define CURLEASY_MAGIC_NUMBER 0xc0dedbadU
  ------------------
  465|       |  /* most recent connection is not yet defined */
  466|  5.07k|  data->state.lastconnect_id = -1;
  467|       |  /* and not assigned an id yet */
  468|  5.07k|  data->id = -1;
  469|  5.07k|  data->mid = UINT32_MAX;
  470|  5.07k|  data->master_mid = UINT32_MAX;
  471|  5.07k|  data->progress.hide = TRUE;
  ------------------
  |  | 1045|  5.07k|#define TRUE true
  ------------------
  472|       |
  473|  5.07k|  Curl_hash_init(&data->meta_hash, 23,
  474|  5.07k|                 Curl_hash_str, curlx_str_key_compare, easy_meta_freeentry);
  475|  5.07k|  DEBUGASSERT(STRING_LAST <= UINT8_MAX);
  ------------------
  |  | 1075|  5.07k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (475:3): [True: 0, Folded]
  |  Branch (475:3): [True: 5.07k, Folded]
  ------------------
  476|  5.07k|  Curl_u8_strset_init(&data->set.strings);
  477|  5.07k|  curlx_dyn_init(&data->state.headerb, CURL_MAX_HTTP_HEADER);
  ------------------
  |  |  274|  5.07k|#define CURL_MAX_HTTP_HEADER (100 * 1024)
  ------------------
  478|  5.07k|  Curl_bufref_init(&data->state.url);
  479|  5.07k|  Curl_bufref_init(&data->state.referer);
  480|  5.07k|  Curl_req_init(&data->req);
  481|  5.07k|  Curl_initinfo(data);
  482|  5.07k|#ifndef CURL_DISABLE_HTTP
  483|  5.07k|  Curl_llist_init(&data->state.httphdrs, NULL);
  484|  5.07k|#endif
  485|  5.07k|  Curl_netrc_init(&data->state.netrc);
  486|  5.07k|  Curl_init_userdefined(data);
  487|       |
  488|  5.07k|  *curl = data;
  489|  5.07k|  return CURLE_OK;
  490|  5.07k|}
Curl_conn_free:
  493|  2.03k|{
  494|  2.03k|  int8_t i;
  495|       |
  496|  2.03k|  DEBUGASSERT(conn);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (496:3): [True: 0, False: 2.03k]
  |  Branch (496:3): [True: 2.03k, False: 0]
  ------------------
  497|       |
  498|  2.03k|  if(conn->scheme && conn->scheme->run->disconnect &&
  ------------------
  |  Branch (498:6): [True: 2.03k, False: 0]
  |  Branch (498:22): [True: 0, False: 2.03k]
  ------------------
  499|      0|     !conn->bits.shutdown_handler)
  ------------------
  |  Branch (499:6): [True: 0, False: 0]
  ------------------
  500|      0|    conn->scheme->run->disconnect(data, conn, TRUE);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  501|       |
  502|  6.10k|  for(i = 0; i < (int8_t)CURL_ARRAYSIZE(conn->cfilter); ++i) {
  ------------------
  |  | 1299|  6.10k|#define CURL_ARRAYSIZE(A) (sizeof(A) / sizeof((A)[0]))
  ------------------
  |  Branch (502:14): [True: 4.07k, False: 2.03k]
  ------------------
  503|  4.07k|    Curl_conn_cf_discard_all(data, conn, i);
  504|  4.07k|  }
  505|       |
  506|  2.03k|#ifndef CURL_DISABLE_PROXY
  507|  2.03k|  Curl_peer_unlink(&conn->http_proxy.peer);
  508|  2.03k|  Curl_peer_unlink(&conn->socks_proxy.peer);
  509|  2.03k|  Curl_creds_unlink(&conn->http_proxy.creds);
  510|  2.03k|  Curl_creds_unlink(&conn->socks_proxy.creds);
  511|  2.03k|#endif
  512|  2.03k|  Curl_creds_unlink(&conn->creds);
  513|  2.03k|  Curl_peer_unlink(&conn->creds_origin);
  514|  2.03k|  curlx_safefree(conn->options);
  ------------------
  |  | 1332|  2.03k|  do {                      \
  |  | 1333|  2.03k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  2.03k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.03k|    (ptr) = NULL;           \
  |  | 1335|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  515|  2.03k|  curlx_safefree(conn->localdev);
  ------------------
  |  | 1332|  2.03k|  do {                      \
  |  | 1333|  2.03k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  2.03k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.03k|    (ptr) = NULL;           \
  |  | 1335|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  516|  2.03k|  Curl_ssl_conn_config_cleanup(conn);
  517|       |
  518|  2.03k|  curlx_safefree(conn->destination);
  ------------------
  |  | 1332|  2.03k|  do {                      \
  |  | 1333|  2.03k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  2.03k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.03k|    (ptr) = NULL;           \
  |  | 1335|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  519|  2.03k|  Curl_hash_destroy(&conn->meta_hash);
  520|  2.03k|  Curl_peer_unlink(&conn->origin);
  521|  2.03k|  Curl_peer_unlink(&conn->via_peer);
  522|  2.03k|  Curl_peer_unlink(&conn->origin2);
  523|  2.03k|  Curl_peer_unlink(&conn->via_peer2);
  524|       |
  525|  2.03k|  curlx_free(conn); /* free all the connection oriented data */
  ------------------
  |  | 1476|  2.03k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  526|  2.03k|}
Curl_uc_to_curlcode:
 1292|    354|{
 1293|    354|  switch(uc) {
 1294|    354|  default:
  ------------------
  |  Branch (1294:3): [True: 354, False: 0]
  ------------------
 1295|    354|    return CURLE_URL_MALFORMAT;
 1296|      0|  case CURLUE_UNSUPPORTED_SCHEME:
  ------------------
  |  Branch (1296:3): [True: 0, False: 354]
  ------------------
 1297|      0|    return CURLE_UNSUPPORTED_PROTOCOL;
 1298|      0|  case CURLUE_OUT_OF_MEMORY:
  ------------------
  |  Branch (1298:3): [True: 0, False: 354]
  ------------------
 1299|      0|    return CURLE_OUT_OF_MEMORY;
 1300|      0|  case CURLUE_USER_NOT_ALLOWED:
  ------------------
  |  Branch (1300:3): [True: 0, False: 354]
  ------------------
 1301|      0|    return CURLE_LOGIN_DENIED;
 1302|    354|  }
 1303|    354|}
Curl_parse_login_details:
 1703|    514|{
 1704|    514|  char *ubuf = NULL;
 1705|    514|  char *pbuf = NULL;
 1706|    514|  const char *psep = NULL;
 1707|    514|  const char *osep = NULL;
 1708|    514|  size_t ulen;
 1709|    514|  size_t plen;
 1710|    514|  size_t olen;
 1711|       |
 1712|    514|  DEBUGASSERT(userp);
  ------------------
  |  | 1075|    514|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1712:3): [True: 0, False: 514]
  |  Branch (1712:3): [True: 514, False: 0]
  ------------------
 1713|    514|  DEBUGASSERT(passwdp);
  ------------------
  |  | 1075|    514|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1713:3): [True: 0, False: 514]
  |  Branch (1713:3): [True: 514, False: 0]
  ------------------
 1714|       |
 1715|       |  /* Attempt to find the password separator */
 1716|    514|  psep = memchr(login, ':', len);
 1717|       |
 1718|       |  /* Attempt to find the options separator */
 1719|    514|  if(optionsp)
  ------------------
  |  Branch (1719:6): [True: 0, False: 514]
  ------------------
 1720|      0|    osep = memchr(login, ';', len);
 1721|       |
 1722|       |  /* Calculate the portion lengths */
 1723|    514|  ulen = (psep ?
  ------------------
  |  Branch (1723:11): [True: 88, False: 426]
  ------------------
 1724|     88|          (size_t)(osep && psep > osep ? osep - login : psep - login) :
  ------------------
  |  Branch (1724:20): [True: 0, False: 88]
  |  Branch (1724:28): [True: 0, False: 0]
  ------------------
 1725|    514|          (osep ? (size_t)(osep - login) : len));
  ------------------
  |  Branch (1725:12): [True: 0, False: 426]
  ------------------
 1726|    514|  plen = (psep ?
  ------------------
  |  Branch (1726:11): [True: 88, False: 426]
  ------------------
 1727|     88|          (osep && osep > psep ? (size_t)(osep - psep) :
  ------------------
  |  Branch (1727:12): [True: 0, False: 88]
  |  Branch (1727:20): [True: 0, False: 0]
  ------------------
 1728|    426|           (size_t)(login + len - psep)) - 1 : 0);
 1729|    514|  olen = (osep ?
  ------------------
  |  Branch (1729:11): [True: 0, False: 514]
  ------------------
 1730|      0|          (psep && psep > osep ? (size_t)(psep - osep) :
  ------------------
  |  Branch (1730:12): [True: 0, False: 0]
  |  Branch (1730:20): [True: 0, False: 0]
  ------------------
 1731|    514|           (size_t)(login + len - osep)) - 1 : 0);
 1732|       |
 1733|       |  /* Clone the user portion buffer, which can be zero length */
 1734|    514|  ubuf = curlx_memdup0(login, ulen);
 1735|    514|  if(!ubuf)
  ------------------
  |  Branch (1735:6): [True: 0, False: 514]
  ------------------
 1736|      0|    goto error;
 1737|       |
 1738|       |  /* Clone the password portion buffer */
 1739|    514|  if(psep) {
  ------------------
  |  Branch (1739:6): [True: 88, False: 426]
  ------------------
 1740|     88|    pbuf = curlx_memdup0(&psep[1], plen);
 1741|     88|    if(!pbuf)
  ------------------
  |  Branch (1741:8): [True: 0, False: 88]
  ------------------
 1742|      0|      goto error;
 1743|     88|  }
 1744|       |
 1745|       |  /* Allocate the options portion buffer */
 1746|    514|  if(optionsp) {
  ------------------
  |  Branch (1746:6): [True: 0, False: 514]
  ------------------
 1747|      0|    char *obuf = NULL;
 1748|      0|    if(olen) {
  ------------------
  |  Branch (1748:8): [True: 0, False: 0]
  ------------------
 1749|      0|      obuf = curlx_memdup0(&osep[1], olen);
 1750|      0|      if(!obuf)
  ------------------
  |  Branch (1750:10): [True: 0, False: 0]
  ------------------
 1751|      0|        goto error;
 1752|      0|    }
 1753|      0|    *optionsp = obuf;
 1754|      0|  }
 1755|    514|  *userp = ubuf;
 1756|    514|  *passwdp = pbuf;
 1757|    514|  return CURLE_OK;
 1758|      0|error:
 1759|      0|  curlx_free(ubuf);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1760|      0|  curlx_free(pbuf);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1761|      0|  return CURLE_OUT_OF_MEMORY;
 1762|    514|}
Curl_connect:
 2476|  2.53k|{
 2477|  2.53k|  CURLcode result;
 2478|  2.53k|  struct connectdata *conn = NULL;
 2479|       |
 2480|  2.53k|  *pconnected = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
 2481|       |
 2482|       |  /* Set the request to virgin state based on transfer settings */
 2483|  2.53k|  Curl_req_hard_reset(&data->req, data);
 2484|       |  /* Determine the origin of the transfer and what credentials to use */
 2485|  2.53k|  result = url_set_data_origin_and_creds(data);
 2486|  2.53k|  if(result)
  ------------------
  |  Branch (2486:6): [True: 504, False: 2.03k]
  ------------------
 2487|    504|    goto out;
 2488|  2.03k|  if(!data->state.origin) { /* just make really sure */
  ------------------
  |  Branch (2488:6): [True: 0, False: 2.03k]
  ------------------
 2489|      0|    DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (2489:5): [Folded, False: 0]
  |  Branch (2489:5): [Folded, False: 0]
  ------------------
 2490|      0|    result = CURLE_FAILED_INIT;
 2491|      0|    goto out;
 2492|      0|  }
 2493|       |
 2494|       |  /* Get or create a connection for the transfer. */
 2495|  2.03k|  result = url_find_or_create_conn(data);
 2496|  2.03k|  conn = data->conn;
 2497|  2.03k|  if(result)
  ------------------
  |  Branch (2497:6): [True: 0, False: 2.03k]
  ------------------
 2498|      0|    goto out;
 2499|  2.03k|  if(!data->conn) { /* just make really sure */
  ------------------
  |  Branch (2499:6): [True: 0, False: 2.03k]
  ------------------
 2500|      0|    DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (2500:5): [Folded, False: 0]
  |  Branch (2500:5): [Folded, False: 0]
  ------------------
 2501|      0|    result = CURLE_FAILED_INIT;
 2502|      0|    goto out;
 2503|      0|  }
 2504|       |
 2505|  2.03k|  Curl_pgrsTime(data, TIMER_POSTQUEUE);
 2506|  2.03k|  if(conn->bits.reuse) {
  ------------------
  |  Branch (2506:6): [True: 0, False: 2.03k]
  ------------------
 2507|      0|    if(conn->attached_xfers > 1)
  ------------------
  |  Branch (2507:8): [True: 0, False: 0]
  ------------------
 2508|       |      /* multiplexed */
 2509|      0|      *pconnected = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 2510|      0|  }
 2511|  2.03k|  else if(conn->scheme->flags & PROTOPT_NONETWORK) {
  ------------------
  |  |  214|  2.03k|#define PROTOPT_NONETWORK (1 << 4) /* protocol does not use the network! */
  ------------------
  |  Branch (2511:11): [True: 0, False: 2.03k]
  ------------------
 2512|      0|    Curl_pgrsTime(data, TIMER_NAMELOOKUP);
 2513|      0|    *pconnected = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 2514|      0|  }
 2515|  2.03k|  else {
 2516|  2.03k|    result = Curl_conn_setup(data, conn, FIRSTSOCKET, CURL_CF_SSL_DEFAULT);
  ------------------
  |  |  234|  2.03k|#define FIRSTSOCKET     0
  ------------------
                  result = Curl_conn_setup(data, conn, FIRSTSOCKET, CURL_CF_SSL_DEFAULT);
  ------------------
  |  |  364|  2.03k|#define CURL_CF_SSL_DEFAULT  (-1)
  ------------------
 2517|  2.03k|    if(!result)
  ------------------
  |  Branch (2517:8): [True: 2.03k, False: 0]
  ------------------
 2518|  2.03k|      result = Curl_headers_init(data);
 2519|  2.03k|    CURL_TRC_M(data, "Curl_conn_setup() -> %d", (int)result);
  ------------------
  |  |  148|  2.03k|  do {                                   \
  |  |  149|  2.03k|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|  2.03k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.03k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.03k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 2.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  2.03k|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
 2520|  2.03k|  }
 2521|       |
 2522|  2.53k|out:
 2523|  2.53k|  if(result == CURLE_NO_CONNECTION_AVAILABLE)
  ------------------
  |  Branch (2523:6): [True: 0, False: 2.53k]
  ------------------
 2524|  2.53k|    DEBUGASSERT(!conn);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (2524:5): [True: 0, False: 0]
  |  Branch (2524:5): [True: 0, False: 0]
  ------------------
 2525|       |
 2526|  2.53k|  if(result && conn) {
  ------------------
  |  Branch (2526:6): [True: 504, False: 2.03k]
  |  Branch (2526:16): [True: 0, False: 504]
  ------------------
 2527|       |    /* We are not allowed to return failure with memory left allocated in the
 2528|       |       connectdata struct, free those here */
 2529|      0|    Curl_detach_connection(data);
 2530|      0|    Curl_conn_close(data, conn, TRUE);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 2531|      0|  }
 2532|       |
 2533|  2.53k|  return result;
 2534|  2.53k|}
Curl_init_transfer:
 2546|  2.03k|{
 2547|  2.03k|  CURLcode result;
 2548|       |
 2549|  2.03k|  if(conn) {
  ------------------
  |  Branch (2549:6): [True: 2.03k, False: 0]
  ------------------
 2550|  2.03k|    conn->bits.do_more = FALSE; /* by default there is no curl_do_more() to
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
 2551|       |                                   use */
 2552|       |    /* if the protocol used does not support wildcards, switch it off */
 2553|  2.03k|    if(data->state.wildcardmatch &&
  ------------------
  |  Branch (2553:8): [True: 0, False: 2.03k]
  ------------------
 2554|      0|       !(conn->scheme->flags & PROTOPT_WILDCARD))
  ------------------
  |  |  230|      0|#define PROTOPT_WILDCARD (1 << 12)  /* protocol supports wildcard matching */
  ------------------
  |  Branch (2554:8): [True: 0, False: 0]
  ------------------
 2555|      0|      data->state.wildcardmatch = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 2556|  2.03k|  }
 2557|       |
 2558|  2.03k|  data->state.done = FALSE; /* *_done() is not called yet */
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
 2559|       |
 2560|  2.03k|  data->req.no_body = data->set.opt_no_body;
 2561|  2.03k|  if(data->req.no_body)
  ------------------
  |  Branch (2561:6): [True: 0, False: 2.03k]
  ------------------
 2562|       |    /* in HTTP lingo, no body means using the HEAD request... */
 2563|      0|    data->state.httpreq = HTTPREQ_HEAD;
 2564|       |
 2565|  2.03k|  result = Curl_req_start(&data->req, data);
 2566|  2.03k|  if(!result) {
  ------------------
  |  Branch (2566:6): [True: 2.03k, False: 0]
  ------------------
 2567|  2.03k|    Curl_pgrsReset(data);
 2568|  2.03k|  }
 2569|  2.03k|  return result;
 2570|  2.03k|}
Curl_data_priority_clear_state:
 2575|  2.53k|{
 2576|  2.53k|  data->state.weight = 0;
 2577|  2.53k|}
Curl_conn_meta_remove:
 2593|  2.03k|{
 2594|  2.03k|  Curl_hash_delete(&conn->meta_hash, CURL_UNCONST(key), strlen(key) + 1);
  ------------------
  |  |  856|  2.03k|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
 2595|  2.03k|}
Curl_get_admin:
 2603|  6.10k|{
 2604|  6.10k|  struct Curl_easy *admin;
 2605|       |
 2606|  6.10k|  if(!data->mid) /* already an admin handle */
  ------------------
  |  Branch (2606:6): [True: 0, False: 6.10k]
  ------------------
 2607|      0|    admin = data;
 2608|  6.10k|  else if(data->multi)
  ------------------
  |  Branch (2608:11): [True: 6.10k, False: 0]
  ------------------
 2609|  6.10k|    admin = data->multi->admin;
 2610|      0|  else if(data->multi_easy)
  ------------------
  |  Branch (2610:11): [True: 0, False: 0]
  ------------------
 2611|      0|    admin = data->multi_easy->admin;
 2612|      0|  else {
 2613|      0|    DEBUGASSERT(0); /* we do not want this. does it happen? */
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (2613:5): [Folded, False: 0]
  |  Branch (2613:5): [Folded, False: 0]
  ------------------
 2614|      0|    admin = data;
 2615|      0|  }
 2616|  6.10k|  if(admin != data) {
  ------------------
  |  Branch (2616:6): [True: 6.10k, False: 0]
  ------------------
 2617|  6.10k|    admin->set.conn_max_idle_ms = data->set.conn_max_idle_ms;
 2618|  6.10k|    admin->set.conn_max_age_ms = data->set.conn_max_age_ms;
 2619|  6.10k|    admin->set.upkeep_interval_ms = data->set.upkeep_interval_ms;
 2620|  6.10k|    admin->set.timeout = data->set.timeout;
 2621|  6.10k|    admin->set.server_response_timeout = data->set.server_response_timeout;
 2622|  6.10k|    admin->set.no_signal = data->set.no_signal;
 2623|  6.10k|  }
 2624|  6.10k|  return admin;
 2625|  6.10k|}
Curl_1st_fatal:
 2628|  2.03k|{
 2629|  2.03k|  if(r1 && (r1 != CURLE_AGAIN))
  ------------------
  |  Branch (2629:6): [True: 0, False: 2.03k]
  |  Branch (2629:12): [True: 0, False: 0]
  ------------------
 2630|      0|    return r1;
 2631|  2.03k|  if(r2 && (r2 != CURLE_AGAIN))
  ------------------
  |  Branch (2631:6): [True: 0, False: 2.03k]
  |  Branch (2631:12): [True: 0, False: 0]
  ------------------
 2632|      0|    return r2;
 2633|  2.03k|  return r1;
 2634|  2.03k|}
url.c:up_free:
  182|  7.61k|{
  183|  7.61k|  struct urlpieces *up = &data->state.up;
  184|  7.61k|  curlx_safefree(up->options);
  ------------------
  |  | 1332|  7.61k|  do {                      \
  |  | 1333|  7.61k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  7.61k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  7.61k|    (ptr) = NULL;           \
  |  | 1335|  7.61k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 7.61k]
  |  |  ------------------
  ------------------
  185|  7.61k|  curlx_safefree(up->path);
  ------------------
  |  | 1332|  7.61k|  do {                      \
  |  | 1333|  7.61k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  7.61k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  7.61k|    (ptr) = NULL;           \
  |  | 1335|  7.61k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 7.61k]
  |  |  ------------------
  ------------------
  186|  7.61k|  curlx_safefree(up->query);
  ------------------
  |  | 1332|  7.61k|  do {                      \
  |  | 1333|  7.61k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  7.61k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  7.61k|    (ptr) = NULL;           \
  |  | 1335|  7.61k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 7.61k]
  |  |  ------------------
  ------------------
  187|  7.61k|  curl_url_cleanup(data->state.uh);
  188|       |  data->state.uh = NULL;
  189|  7.61k|}
url.c:url_set_data_origin_and_creds:
 2160|  2.53k|{
 2161|  2.53k|  CURLcode result = CURLE_OK;
 2162|  2.53k|  CURLU *uh;
 2163|  2.53k|  CURLUcode uc;
 2164|  2.53k|  bool use_set_uh = (data->set.uh && !data->state.this_is_a_follow);
  ------------------
  |  Branch (2164:22): [True: 0, False: 2.53k]
  |  Branch (2164:38): [True: 0, False: 0]
  ------------------
 2165|  2.53k|  uint16_t port_override = data->state.allow_port ? data->set.use_port : 0;
  ------------------
  |  Branch (2165:28): [True: 2.53k, False: 0]
  ------------------
 2166|  2.53k|  uint32_t scope_id = 0;
 2167|       |
 2168|       |  /*************************************************************
 2169|       |   * Check input data
 2170|       |   *************************************************************/
 2171|  2.53k|  if(!Curl_bufref_ptr(&data->state.url)) {
  ------------------
  |  Branch (2171:6): [True: 0, False: 2.53k]
  ------------------
 2172|      0|    result = CURLE_URL_MALFORMAT;
 2173|      0|    goto out;
 2174|      0|  }
 2175|       |
 2176|  2.53k|  up_free(data); /* cleanup previous leftovers first */
 2177|       |
 2178|       |  /* parse the URL */
 2179|  2.53k|  if(use_set_uh)
  ------------------
  |  Branch (2179:6): [True: 0, False: 2.53k]
  ------------------
 2180|      0|    uh = data->state.uh = curl_url_dup(data->set.uh);
 2181|  2.53k|  else
 2182|  2.53k|    uh = data->state.uh = curl_url();
 2183|  2.53k|  if(!uh) {
  ------------------
  |  Branch (2183:6): [True: 0, False: 2.53k]
  ------------------
 2184|      0|    result = CURLE_OUT_OF_MEMORY;
 2185|      0|    goto out;
 2186|      0|  }
 2187|       |
 2188|       |  /* Calculate the *real* URL this transfer uses, applying defaults
 2189|       |   * where information is missing. */
 2190|  2.53k|  if(CURL_EASY_STR(data, STRING_DEFAULT_PROTOCOL) &&
  ------------------
  |  | 1228|  5.07k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  |  |  ------------------
  |  |  |  Branch (1228:3): [True: 0, False: 2.53k]
  |  |  ------------------
  ------------------
 2191|      0|     !Curl_is_absolute_url(Curl_bufref_ptr(&data->state.url), NULL, 0, TRUE)) {
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  |  Branch (2191:6): [True: 0, False: 0]
  ------------------
 2192|      0|    char *url = curl_maprintf("%s://%s",
 2193|      0|                              CURL_EASY_STR(data, STRING_DEFAULT_PROTOCOL),
  ------------------
  |  | 1228|      0|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
 2194|      0|                              Curl_bufref_ptr(&data->state.url));
 2195|      0|    if(!url) {
  ------------------
  |  Branch (2195:8): [True: 0, False: 0]
  ------------------
 2196|      0|      result = CURLE_OUT_OF_MEMORY;
 2197|      0|      goto out;
 2198|      0|    }
 2199|      0|    Curl_bufref_set(&data->state.url, url, 0, curl_free);
 2200|      0|  }
 2201|       |
 2202|  2.53k|  if(!use_set_uh) {
  ------------------
  |  Branch (2202:6): [True: 2.53k, False: 0]
  ------------------
 2203|  2.53k|    char *newurl;
 2204|  2.53k|    uc = curl_url_set(uh, CURLUPART_URL, Curl_bufref_ptr(&data->state.url),
 2205|  2.53k|                      (unsigned int)(CURLU_GUESS_SCHEME |
  ------------------
  |  |   97|  2.53k|#define CURLU_GUESS_SCHEME (1 << 9)       /* legacy curl-style guessing */
  ------------------
 2206|  2.53k|                       CURLU_NON_SUPPORT_SCHEME |
  ------------------
  |  |   91|  2.53k|#define CURLU_NON_SUPPORT_SCHEME (1 << 3) /* allow non-supported scheme */
  ------------------
 2207|  2.53k|                       (data->set.disallow_username_in_url ?
  ------------------
  |  Branch (2207:25): [True: 0, False: 2.53k]
  ------------------
 2208|  2.53k|                        CURLU_DISALLOW_USER : 0) |
  ------------------
  |  |   93|      0|#define CURLU_DISALLOW_USER (1 << 5)      /* no user+password allowed */
  ------------------
 2209|  2.53k|                       (data->set.path_as_is ? CURLU_PATH_AS_IS : 0)));
  ------------------
  |  |   92|      0|#define CURLU_PATH_AS_IS (1 << 4)         /* leave dot sequences */
  ------------------
  |  Branch (2209:25): [True: 0, False: 2.53k]
  ------------------
 2210|  2.53k|    if(uc) {
  ------------------
  |  Branch (2210:8): [True: 354, False: 2.18k]
  ------------------
 2211|    354|      failf(data, "URL rejected: %s", curl_url_strerror(uc));
  ------------------
  |  |   62|    354|#define failf Curl_failf
  ------------------
 2212|    354|      result = Curl_uc_to_curlcode(uc);
 2213|    354|      goto out;
 2214|    354|    }
 2215|       |
 2216|       |    /* after it was parsed, get the generated normalized version */
 2217|  2.18k|    uc = curl_url_get(uh, CURLUPART_URL, &newurl, CURLU_GET_EMPTY);
  ------------------
  |  |  103|  2.18k|#define CURLU_GET_EMPTY (1 << 14)         /* allow empty queries and fragments
  ------------------
 2218|  2.18k|    if(uc) {
  ------------------
  |  Branch (2218:8): [True: 0, False: 2.18k]
  ------------------
 2219|      0|      result = Curl_uc_to_curlcode(uc);
 2220|      0|      goto out;
 2221|      0|    }
 2222|  2.18k|    Curl_bufref_set(&data->state.url, newurl, 0, curl_free);
 2223|  2.18k|  }
 2224|       |
 2225|  2.18k|#ifdef USE_IPV6
 2226|  2.18k|  scope_id = data->set.scope_id;
 2227|  2.18k|#endif
 2228|       |
 2229|       |  /* `uh` is now as the connection should use it, probably. */
 2230|  2.18k|  result = Curl_peer_from_url(uh, data, port_override, scope_id,
 2231|  2.18k|                              &data->state.origin);
 2232|  2.18k|  if(result)
  ------------------
  |  Branch (2232:6): [True: 121, False: 2.06k]
  ------------------
 2233|    121|    goto out;
 2234|       |  /* The origin might get changed when HSTS applies */
 2235|  2.06k|  result = hsts_upgrade(data, uh, port_override, scope_id);
 2236|  2.06k|  if(result)
  ------------------
  |  Branch (2236:6): [True: 0, False: 2.06k]
  ------------------
 2237|      0|    goto out;
 2238|       |
 2239|       |  /* When the transfers initial_origin is not set, this is the initial
 2240|       |   * request. Remember this starting point. */
 2241|  2.06k|  if(!data->state.initial_origin)
  ------------------
  |  Branch (2241:6): [True: 2.06k, False: 0]
  ------------------
 2242|  2.06k|    Curl_peer_link(&data->state.initial_origin, data->state.origin);
 2243|       |
 2244|  2.06k|  uc = curl_url_get(uh, CURLUPART_PATH, &data->state.up.path, CURLU_URLENCODE);
  ------------------
  |  |   95|  2.06k|#define CURLU_URLENCODE (1 << 7)          /* URL encode on set */
  ------------------
 2245|  2.06k|  if(uc) {
  ------------------
  |  Branch (2245:6): [True: 0, False: 2.06k]
  ------------------
 2246|      0|    result = Curl_uc_to_curlcode(uc);
 2247|      0|    goto out;
 2248|      0|  }
 2249|  2.06k|  uc = curl_url_get(uh, CURLUPART_QUERY, &data->state.up.query,
 2250|  2.06k|                    CURLU_GET_EMPTY);
  ------------------
  |  |  103|  2.06k|#define CURLU_GET_EMPTY (1 << 14)         /* allow empty queries and fragments
  ------------------
 2251|  2.06k|  if(uc && (uc != CURLUE_NO_QUERY)) {
  ------------------
  |  Branch (2251:6): [True: 2.03k, False: 29]
  |  Branch (2251:12): [True: 0, False: 2.03k]
  ------------------
 2252|      0|    result = CURLE_OUT_OF_MEMORY;
 2253|      0|    goto out;
 2254|      0|  }
 2255|       |
 2256|  2.06k|  uc = curl_url_get(uh, CURLUPART_OPTIONS, &data->state.up.options,
 2257|  2.06k|                    CURLU_URLDECODE);
  ------------------
  |  |   94|  2.06k|#define CURLU_URLDECODE (1 << 6)          /* URL decode on get */
  ------------------
 2258|  2.06k|  if(uc && (uc != CURLUE_NO_OPTIONS)) {
  ------------------
  |  Branch (2258:6): [True: 2.06k, False: 0]
  |  Branch (2258:12): [True: 0, False: 2.06k]
  ------------------
 2259|      0|    result = Curl_uc_to_curlcode(uc);
 2260|      0|    goto out;
 2261|      0|  }
 2262|       |
 2263|  2.06k|  result = url_set_data_creds(data, uh);
 2264|  2.06k|  if(result)
  ------------------
  |  Branch (2264:6): [True: 29, False: 2.03k]
  ------------------
 2265|     29|    goto out;
 2266|       |
 2267|  2.53k|out:
 2268|  2.53k|  return result;
 2269|  2.06k|}
url.c:hsts_upgrade:
 1310|  2.06k|{
 1311|       |  /* HSTS upgrade */
 1312|  2.06k|  if(data->hsts && (data->state.origin->scheme == &Curl_scheme_http) &&
  ------------------
  |  Branch (1312:6): [True: 2.06k, False: 0]
  |  Branch (1312:20): [True: 0, False: 2.06k]
  ------------------
 1313|      0|     Curl_hsts_applies(data->hsts, data->state.origin)) {
  ------------------
  |  Branch (1313:6): [True: 0, False: 0]
  ------------------
 1314|      0|    char *url;
 1315|      0|    CURLUcode uc;
 1316|      0|    CURLcode result;
 1317|       |
 1318|      0|    uc = curl_url_set(uh, CURLUPART_SCHEME, "https", 0);
 1319|      0|    if(uc)
  ------------------
  |  Branch (1319:8): [True: 0, False: 0]
  ------------------
 1320|      0|      return Curl_uc_to_curlcode(uc);
 1321|      0|    Curl_bufref_free(&data->state.url);
 1322|       |    /* after update, get the updated version */
 1323|      0|    uc = curl_url_get(uh, CURLUPART_URL, &url, 0);
 1324|      0|    if(uc)
  ------------------
  |  Branch (1324:8): [True: 0, False: 0]
  ------------------
 1325|      0|      return Curl_uc_to_curlcode(uc);
 1326|      0|    Curl_bufref_set(&data->state.url, url, 0, curl_free);
 1327|       |
 1328|      0|    result = Curl_peer_from_url(uh, data, port_override, scope_id,
 1329|      0|                                &data->state.origin);
 1330|      0|    if(result)
  ------------------
  |  Branch (1330:8): [True: 0, False: 0]
  ------------------
 1331|      0|      return result;
 1332|      0|    infof(data, "Switched from HTTP to HTTPS due to HSTS => %s", url);
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1333|      0|  }
 1334|  2.06k|  return CURLE_OK;
 1335|  2.06k|}
url.c:url_set_data_creds:
 1462|  2.06k|{
 1463|  2.06k|  struct Curl_creds *newcreds = NULL;
 1464|  2.06k|  CURLcode result = CURLE_OK;
 1465|       |
 1466|  2.06k|  if((CURL_EASY_STR(data, STRING_USERNAME) ||
  ------------------
  |  | 1228|  4.12k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  |  |  ------------------
  |  |  |  Branch (1228:3): [True: 115, False: 1.94k]
  |  |  ------------------
  ------------------
 1467|  1.94k|      CURL_EASY_STR(data, STRING_PASSWORD) ||
  ------------------
  |  | 1228|  4.01k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  |  |  ------------------
  |  |  |  Branch (1228:3): [True: 52, False: 1.89k]
  |  |  ------------------
  ------------------
 1468|  1.89k|      CURL_EASY_STR(data, STRING_BEARER) ||
  ------------------
  |  | 1228|  3.96k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  |  |  ------------------
  |  |  |  Branch (1228:3): [True: 0, False: 1.89k]
  |  |  ------------------
  ------------------
 1469|  1.89k|      CURL_EASY_STR(data, STRING_SASL_AUTHZID) ||
  ------------------
  |  | 1228|  3.96k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  |  |  ------------------
  |  |  |  Branch (1228:3): [True: 0, False: 1.89k]
  |  |  ------------------
  ------------------
 1470|  1.89k|      CURL_EASY_STR(data, STRING_SERVICE_NAME)) &&
  ------------------
  |  | 1228|  1.89k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  |  |  ------------------
  |  |  |  Branch (1228:3): [True: 0, False: 1.89k]
  |  |  ------------------
  ------------------
 1471|    167|     Curl_auth_allowed_to_origin(data, data->state.origin)) {
  ------------------
  |  Branch (1471:6): [True: 167, False: 0]
  ------------------
 1472|    167|    result = Curl_creds_create(CURL_EASY_STR(data, STRING_USERNAME),
  ------------------
  |  | 1228|    167|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
 1473|    167|                               CURL_EASY_STR(data, STRING_PASSWORD),
  ------------------
  |  | 1228|    167|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
 1474|    167|                               CURL_EASY_STR(data, STRING_BEARER),
  ------------------
  |  | 1228|    167|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
 1475|    167|                               CURL_EASY_STR(data, STRING_SASL_AUTHZID),
  ------------------
  |  | 1228|    167|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
 1476|    167|                               CURL_EASY_STR(data, STRING_SERVICE_NAME),
  ------------------
  |  | 1228|    167|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
 1477|    167|                               CREDS_OPTION, &newcreds);
  ------------------
  |  |   31|    167|#define CREDS_OPTION 2 /* username/passwd set with a CURLOPT_ */
  ------------------
 1478|    167|    if(result)
  ------------------
  |  Branch (1478:8): [True: 0, False: 167]
  ------------------
 1479|      0|      goto out;
 1480|    167|    if(newcreds &&
  ------------------
  |  Branch (1480:8): [True: 167, False: 0]
  ------------------
 1481|    167|       !(data->state.origin->scheme->flags & PROTOPT_USERPWDCTRL) &&
  ------------------
  |  |  231|    167|#define PROTOPT_USERPWDCTRL (1 << 13) /* Allow "control bytes" (< 32 ASCII) in
  ------------------
  |  Branch (1481:8): [True: 167, False: 0]
  ------------------
 1482|    167|       (str_has_ctrl(Curl_creds_user(newcreds)) ||
  ------------------
  |  |   81|    167|#define Curl_creds_user(c)               ((c) ? (c)->user : "")
  |  |  ------------------
  |  |  |  Branch (81:43): [True: 167, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1482:9): [True: 13, False: 154]
  ------------------
 1483|    154|        str_has_ctrl(Curl_creds_passwd(newcreds)))) {
  ------------------
  |  |   82|    154|#define Curl_creds_passwd(c)             ((c) ? (c)->passwd : "")
  |  |  ------------------
  |  |  |  Branch (82:43): [True: 154, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1483:9): [True: 13, False: 141]
  ------------------
 1484|       |      /* if the protocol cannot handle control codes in credentials, make
 1485|       |         sure there are none */
 1486|     26|      failf(data, "control code detected in credentials");
  ------------------
  |  |   62|     26|#define failf Curl_failf
  ------------------
 1487|     26|      result = CURLE_BAD_FUNCTION_ARGUMENT;
 1488|     26|      goto out;
 1489|     26|    }
 1490|    167|  }
 1491|       |
 1492|       |  /* Extract credentials from the URL only if there are none OR
 1493|       |   * if no CURLOPT_USER was set. */
 1494|  2.03k|  if(!newcreds || !Curl_creds_has_user(newcreds)) {
  ------------------
  |  |   75|    141|#define Curl_creds_has_user(c)           ((c) && (c)->user[0])
  |  |  ------------------
  |  |  |  Branch (75:43): [True: 141, False: 0]
  |  |  |  Branch (75:50): [True: 44, False: 97]
  |  |  ------------------
  ------------------
  |  Branch (1494:6): [True: 1.89k, False: 141]
  ------------------
 1495|  1.99k|    char *user = NULL;
 1496|  1.99k|    char *passwd = NULL;
 1497|  1.99k|    char *udecoded = NULL;
 1498|  1.99k|    char *pdecoded = NULL;
 1499|  1.99k|    CURLUcode uc;
 1500|       |
 1501|  1.99k|    uc = curl_url_get(uh, CURLUPART_USER, &user, 0);
 1502|  1.99k|    if(uc && (uc != CURLUE_NO_USER))
  ------------------
  |  Branch (1502:8): [True: 1.95k, False: 35]
  |  Branch (1502:14): [True: 0, False: 1.95k]
  ------------------
 1503|      0|      result = Curl_uc_to_curlcode(uc);
 1504|  1.99k|    if(!result) {
  ------------------
  |  Branch (1504:8): [True: 1.99k, False: 0]
  ------------------
 1505|  1.99k|      uc = curl_url_get(uh, CURLUPART_PASSWORD, &passwd, 0);
 1506|  1.99k|      if(uc && (uc != CURLUE_NO_PASSWORD))
  ------------------
  |  Branch (1506:10): [True: 1.99k, False: 4]
  |  Branch (1506:16): [True: 0, False: 1.99k]
  ------------------
 1507|      0|        result = Curl_uc_to_curlcode(uc);
 1508|  1.99k|    }
 1509|  1.99k|    if(!result && user) {
  ------------------
  |  Branch (1509:8): [True: 1.99k, False: 0]
  |  Branch (1509:19): [True: 35, False: 1.95k]
  ------------------
 1510|     35|      result = Curl_urldecode(user, 0, &udecoded, NULL,
 1511|     35|                              (data->state.origin->scheme->flags &
  ------------------
  |  Branch (1511:31): [True: 0, False: 35]
  ------------------
 1512|     35|                               PROTOPT_USERPWDCTRL) ?
  ------------------
  |  |  231|     35|#define PROTOPT_USERPWDCTRL (1 << 13) /* Allow "control bytes" (< 32 ASCII) in
  ------------------
 1513|     35|                              REJECT_ZERO : REJECT_CTRL);
 1514|     35|    }
 1515|  1.99k|    if(!result && passwd) {
  ------------------
  |  Branch (1515:8): [True: 1.99k, False: 3]
  |  Branch (1515:19): [True: 4, False: 1.98k]
  ------------------
 1516|      4|      result = Curl_urldecode(passwd, 0, &pdecoded, NULL,
 1517|      4|                              (data->state.origin->scheme->flags &
  ------------------
  |  Branch (1517:31): [True: 0, False: 4]
  ------------------
 1518|      4|                               PROTOPT_USERPWDCTRL) ?
  ------------------
  |  |  231|      4|#define PROTOPT_USERPWDCTRL (1 << 13) /* Allow "control bytes" (< 32 ASCII) in
  ------------------
 1519|      4|                              REJECT_ZERO : REJECT_CTRL);
 1520|      4|    }
 1521|  1.99k|    if(!result)
  ------------------
  |  Branch (1521:8): [True: 1.99k, False: 3]
  ------------------
 1522|  1.99k|      result = Curl_creds_merge(udecoded, pdecoded, newcreds,
 1523|  1.99k|                                CREDS_URL, &newcreds);
  ------------------
  |  |   30|  1.99k|#define CREDS_URL    1 /* username/passwd from URL */
  ------------------
 1524|       |
 1525|  1.99k|    curlx_free(udecoded);
  ------------------
  |  | 1476|  1.99k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1526|  1.99k|    curlx_free(pdecoded);
  ------------------
  |  | 1476|  1.99k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1527|  1.99k|    curlx_free(passwd);
  ------------------
  |  | 1476|  1.99k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1528|  1.99k|    curlx_free(user);
  ------------------
  |  | 1476|  1.99k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1529|  1.99k|    if(result) {
  ------------------
  |  Branch (1529:8): [True: 3, False: 1.99k]
  ------------------
 1530|      3|      failf(data, "error extracting credentials from URL");
  ------------------
  |  |   62|      3|#define failf Curl_failf
  ------------------
 1531|      3|      goto out;
 1532|      3|    }
 1533|  1.99k|  }
 1534|       |
 1535|  2.03k|#ifndef CURL_DISABLE_NETRC
 1536|       |  /* Check for overridden login details and set them accordingly so that
 1537|       |     they are known when protocol->setup_connection is called! */
 1538|  2.03k|  result = url_set_data_creds_netrc(data, &newcreds);
 1539|  2.03k|#endif /* CURL_DISABLE_NETRC */
 1540|       |
 1541|  2.06k|out:
 1542|  2.06k|  if(!result && !Curl_creds_equal(data->state.creds, newcreds)) {
  ------------------
  |  Branch (1542:6): [True: 2.03k, False: 29]
  |  Branch (1542:17): [True: 171, False: 1.86k]
  ------------------
 1543|       |    /* Do we have more things to trigger on credentials change? */
 1544|    171|    Curl_creds_link(&data->state.creds, newcreds);
 1545|    171|  }
 1546|  2.06k|  Curl_creds_unlink(&newcreds);
 1547|  2.06k|  return result;
 1548|  2.03k|}
url.c:str_has_ctrl:
 1341|    321|{
 1342|    321|  if(input) {
  ------------------
  |  Branch (1342:6): [True: 321, False: 0]
  ------------------
 1343|    321|    const unsigned char *str = (const unsigned char *)input;
 1344|  37.7k|    while(*str) {
  ------------------
  |  Branch (1344:11): [True: 37.4k, False: 295]
  ------------------
 1345|  37.4k|      if(*str < 0x20)
  ------------------
  |  Branch (1345:10): [True: 26, False: 37.4k]
  ------------------
 1346|     26|        return TRUE;
  ------------------
  |  | 1045|     26|#define TRUE true
  ------------------
 1347|  37.4k|      str++;
 1348|  37.4k|    }
 1349|    321|  }
 1350|    295|  return FALSE;
  ------------------
  |  | 1048|    295|#define FALSE false
  ------------------
 1351|    321|}
url.c:url_set_data_creds_netrc:
 1360|  2.03k|{
 1361|  2.03k|  struct Curl_creds *ncreds_out = NULL;
 1362|  2.03k|  CURLcode result = CURLE_OK;
 1363|       |
 1364|  2.03k|  if(data->set.use_netrc) { /* not CURL_NETRC_IGNORED */
  ------------------
  |  Branch (1364:6): [True: 0, False: 2.03k]
  ------------------
 1365|      0|    struct Curl_creds *ncreds_in = NULL;
 1366|      0|    bool scan_netrc = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 1367|      0|    NETRCcode ret;
 1368|      0|    CURLUcode uc;
 1369|       |
 1370|      0|    if(*pcreds) {
  ------------------
  |  Branch (1370:8): [True: 0, False: 0]
  ------------------
 1371|      0|      switch((*pcreds)->source) {
 1372|      0|      case CREDS_OPTION:
  ------------------
  |  |   31|      0|#define CREDS_OPTION 2 /* username/passwd set with a CURLOPT_ */
  ------------------
  |  Branch (1372:7): [True: 0, False: 0]
  ------------------
 1373|       |        /* we never override credentials set via CURLOPT_*, leave. */
 1374|      0|        scan_netrc = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 1375|      0|        break;
 1376|      0|      case CREDS_URL: /* only apply when netrc is not required */
  ------------------
  |  |   30|      0|#define CREDS_URL    1 /* username/passwd from URL */
  ------------------
  |  Branch (1376:7): [True: 0, False: 0]
  ------------------
 1377|      0|        if(data->set.use_netrc == CURL_NETRC_REQUIRED) {
  ------------------
  |  | 2385|      0|#define CURL_NETRC_REQUIRED 2L /* A user:password in the URL is ignored.
  ------------------
  |  Branch (1377:12): [True: 0, False: 0]
  ------------------
 1378|       |          /* We ignore password from URL */
 1379|      0|          ncreds_in = *pcreds;
 1380|      0|        }
 1381|      0|        else if(!Curl_creds_has_user(*pcreds) ||
  ------------------
  |  |   75|      0|#define Curl_creds_has_user(c)           ((c) && (c)->user[0])
  |  |  ------------------
  |  |  |  Branch (75:43): [True: 0, False: 0]
  |  |  |  Branch (75:50): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1382|      0|                !Curl_creds_has_passwd(*pcreds)) {
  ------------------
  |  |   76|      0|#define Curl_creds_has_passwd(c)         ((c) && (c)->passwd[0])
  |  |  ------------------
  |  |  |  Branch (76:43): [True: 0, False: 0]
  |  |  |  Branch (76:50): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1383|       |          /* We use netrc to complete what is missing */
 1384|      0|          ncreds_in = *pcreds;
 1385|      0|        }
 1386|      0|        else
 1387|      0|          scan_netrc = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 1388|      0|        break;
 1389|      0|      default: /* ignore credentials from other sources */
  ------------------
  |  Branch (1389:7): [True: 0, False: 0]
  ------------------
 1390|      0|        break;
 1391|      0|      }
 1392|      0|    }
 1393|       |
 1394|      0|    if(!scan_netrc)
  ------------------
  |  Branch (1394:8): [True: 0, False: 0]
  ------------------
 1395|      0|      goto out;
 1396|       |
 1397|      0|    ret = Curl_netrc_scan(data, &data->state.netrc,
 1398|      0|                          data->state.origin->hostname,
 1399|      0|                          Curl_creds_user(ncreds_in),
  ------------------
  |  |   81|      0|#define Curl_creds_user(c)               ((c) ? (c)->user : "")
  |  |  ------------------
  |  |  |  Branch (81:43): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1400|      0|                          CURL_EASY_STR(data, STRING_NETRC_FILE),
  ------------------
  |  | 1228|      0|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
 1401|      0|                          &ncreds_out);
 1402|      0|    DEBUGASSERT(!ret || !ncreds_out);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1402:5): [True: 0, False: 0]
  |  Branch (1402:5): [True: 0, False: 0]
  |  Branch (1402:5): [True: 0, False: 0]
  |  Branch (1402:5): [True: 0, False: 0]
  ------------------
 1403|      0|    if(ret == NETRC_OUT_OF_MEMORY) {
  ------------------
  |  Branch (1403:8): [True: 0, False: 0]
  ------------------
 1404|      0|      result = CURLE_OUT_OF_MEMORY;
 1405|      0|      goto out;
 1406|      0|    }
 1407|      0|    else if(ret && ((ret == NETRC_NO_MATCH) ||
  ------------------
  |  Branch (1407:13): [True: 0, False: 0]
  |  Branch (1407:21): [True: 0, False: 0]
  ------------------
 1408|      0|                    (data->set.use_netrc == CURL_NETRC_OPTIONAL))) {
  ------------------
  |  | 2383|      0|#define CURL_NETRC_OPTIONAL 1L /* A user:password in the URL is preferred
  ------------------
  |  Branch (1408:21): [True: 0, False: 0]
  ------------------
 1409|      0|      infof(data, "Could not find host %s in the %s file; using defaults",
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  ------------------
  |  |  |  Branch (145:24): [True: 0, False: 0]
  |  |  ------------------
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1410|      0|            data->state.origin->hostname,
 1411|      0|            (CURL_EASY_STR(data, STRING_NETRC_FILE) ?
 1412|      0|             CURL_EASY_STR(data, STRING_NETRC_FILE) : ".netrc"));
 1413|      0|    }
 1414|      0|    else if(ret) {
  ------------------
  |  Branch (1414:13): [True: 0, False: 0]
  ------------------
 1415|      0|      const char *m = Curl_netrc_strerror(ret);
 1416|      0|      failf(data, ".netrc error: %s", m);
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
 1417|      0|      result = CURLE_READ_ERROR;
 1418|      0|      goto out;
 1419|      0|    }
 1420|      0|    else if(ncreds_out) {
  ------------------
  |  Branch (1420:13): [True: 0, False: 0]
  ------------------
 1421|      0|      if(!(data->state.origin->scheme->flags & PROTOPT_USERPWDCTRL)) {
  ------------------
  |  |  231|      0|#define PROTOPT_USERPWDCTRL (1 << 13) /* Allow "control bytes" (< 32 ASCII) in
  ------------------
  |  Branch (1421:10): [True: 0, False: 0]
  ------------------
 1422|       |        /* if the protocol cannot handle control codes in credentials, make
 1423|       |           sure there are none */
 1424|      0|        if(str_has_ctrl(ncreds_out->user) ||
  ------------------
  |  Branch (1424:12): [True: 0, False: 0]
  ------------------
 1425|      0|           str_has_ctrl(ncreds_out->passwd)) {
  ------------------
  |  Branch (1425:12): [True: 0, False: 0]
  ------------------
 1426|      0|          failf(data, "control code detected in .netrc credentials");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
 1427|      0|          result = CURLE_READ_ERROR;
 1428|      0|          goto out;
 1429|      0|        }
 1430|      0|      }
 1431|      0|      CURL_TRC_M(data, "netrc: using credentials for %s as %s",
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1432|      0|                 data->state.origin->hostname, ncreds_out->user);
 1433|      0|      result = Curl_creds_merge(ncreds_out->user, ncreds_out->passwd,
 1434|      0|                                *pcreds, CREDS_NETRC, pcreds);
  ------------------
  |  |   32|      0|#define CREDS_NETRC  3 /* username/passwd found in netrc */
  ------------------
 1435|      0|      if(result)
  ------------------
  |  Branch (1435:10): [True: 0, False: 0]
  ------------------
 1436|      0|        goto out;
 1437|       |      /* for updated strings, we update them in the URL */
 1438|      0|      uc = curl_url_set(data->state.uh, CURLUPART_USER,
 1439|      0|                        Curl_creds_user(*pcreds), CURLU_URLENCODE);
  ------------------
  |  |   81|      0|#define Curl_creds_user(c)               ((c) ? (c)->user : "")
  |  |  ------------------
  |  |  |  Branch (81:43): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                                      Curl_creds_user(*pcreds), CURLU_URLENCODE);
  ------------------
  |  |   95|      0|#define CURLU_URLENCODE (1 << 7)          /* URL encode on set */
  ------------------
 1440|      0|      if(!uc)
  ------------------
  |  Branch (1440:10): [True: 0, False: 0]
  ------------------
 1441|      0|        uc = curl_url_set(data->state.uh, CURLUPART_PASSWORD,
 1442|      0|                          Curl_creds_passwd(*pcreds),
  ------------------
  |  |   82|      0|#define Curl_creds_passwd(c)             ((c) ? (c)->passwd : "")
  |  |  ------------------
  |  |  |  Branch (82:43): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1443|      0|                          CURLU_URLENCODE);
  ------------------
  |  |   95|      0|#define CURLU_URLENCODE (1 << 7)          /* URL encode on set */
  ------------------
 1444|      0|      if(uc)
  ------------------
  |  Branch (1444:10): [True: 0, False: 0]
  ------------------
 1445|      0|        result = Curl_uc_to_curlcode(uc);
 1446|      0|    }
 1447|      0|    else
 1448|      0|      DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1448:7): [Folded, False: 0]
  |  Branch (1448:7): [Folded, False: 0]
  ------------------
 1449|      0|  }
 1450|       |
 1451|  2.03k|#ifdef CURLVERBOSE
 1452|  2.03k|  Curl_creds_trace(data, data->state.creds, "transfer credentials");
 1453|  2.03k|#endif
 1454|       |
 1455|  2.03k|out:
 1456|  2.03k|  Curl_creds_unlink(&ncreds_out);
 1457|  2.03k|  return result;
 1458|  2.03k|}
url.c:url_find_or_create_conn:
 2280|  2.03k|{
 2281|  2.03k|  struct connectdata *needle = NULL;
 2282|  2.03k|  bool waitpipe = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
 2283|  2.03k|  CURLcode result;
 2284|       |
 2285|       |  /* create the template connection for transfer data. Use this needle to
 2286|       |   * find an existing connection or, if none exists, convert needle
 2287|       |   * to a full connection and attach it to data. */
 2288|  2.03k|  result = url_create_needle(data, &needle);
 2289|  2.03k|  if(result)
  ------------------
  |  Branch (2289:6): [True: 0, False: 2.03k]
  ------------------
 2290|      0|    goto out;
 2291|  2.03k|  DEBUGASSERT(needle);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (2291:3): [True: 0, False: 2.03k]
  |  Branch (2291:3): [True: 2.03k, False: 0]
  ------------------
 2292|       |
 2293|       |  /***********************************************************************
 2294|       |   * file: is a special case in that it does not need a network connection
 2295|       |   ***********************************************************************/
 2296|  2.03k|#ifndef CURL_DISABLE_FILE
 2297|  2.03k|  if(needle->scheme->flags & PROTOPT_NONETWORK) {
  ------------------
  |  |  214|  2.03k|#define PROTOPT_NONETWORK (1 << 4) /* protocol does not use the network! */
  ------------------
  |  Branch (2297:6): [True: 0, False: 2.03k]
  ------------------
 2298|      0|    bool done;
 2299|       |    /* this is supposed to be the connect function so we better at least check
 2300|       |       that the file is present here! */
 2301|      0|    DEBUGASSERT(needle->scheme->run->connect_it);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (2301:5): [True: 0, False: 0]
  |  Branch (2301:5): [True: 0, False: 0]
  ------------------
 2302|      0|    data->info.conn_scheme = needle->scheme->name;
 2303|       |    /* conn_protocol can only provide "old" protocols */
 2304|      0|    data->info.conn_protocol = needle->scheme->protocol & CURLPROTO_MASK;
  ------------------
  |  |   79|      0|#define CURLPROTO_MASK   0x3fffffff
  ------------------
 2305|      0|    result = needle->scheme->run->connect_it(data, &done);
 2306|      0|    if(result)
  ------------------
  |  Branch (2306:8): [True: 0, False: 0]
  ------------------
 2307|      0|      goto out;
 2308|       |
 2309|       |    /* Setup a "faked" transfer that will do nothing */
 2310|      0|    result = Curl_cpool_add(data, needle);
 2311|      0|    Curl_attach_connection(data, needle, TRUE);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 2312|      0|    needle = NULL;
 2313|      0|    if(!result) {
  ------------------
  |  Branch (2313:8): [True: 0, False: 0]
  ------------------
 2314|       |      /* Setup whatever necessary for a resumed transfer */
 2315|      0|      result = setup_range(data);
 2316|      0|      if(!result) {
  ------------------
  |  Branch (2316:10): [True: 0, False: 0]
  ------------------
 2317|      0|        Curl_xfer_setup_nop(data);
 2318|      0|        result = Curl_init_transfer(data, data->conn);
 2319|      0|      }
 2320|      0|    }
 2321|       |
 2322|      0|    if(result) {
  ------------------
  |  Branch (2322:8): [True: 0, False: 0]
  ------------------
 2323|      0|      DEBUGASSERT(data->conn->scheme->run->done);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (2323:7): [True: 0, False: 0]
  |  Branch (2323:7): [True: 0, False: 0]
  ------------------
 2324|       |      /* we ignore the return code for the protocol-specific DONE */
 2325|      0|      (void)data->conn->scheme->run->done(data, result, FALSE);
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 2326|      0|    }
 2327|      0|    goto out;
 2328|      0|  }
 2329|  2.03k|#endif
 2330|       |
 2331|       |  /* Complete the easy's SSL configuration for connection cache matching */
 2332|  2.03k|  result = Curl_ssl_easy_config_complete(data, needle->origin);
 2333|  2.03k|  if(result)
  ------------------
  |  Branch (2333:6): [True: 0, False: 2.03k]
  ------------------
 2334|      0|    goto out;
 2335|       |
 2336|       |  /*************************************************************
 2337|       |   * Reuse of existing connection is not allowed when
 2338|       |   * - connect_only is set or
 2339|       |   * - reuse_fresh is set and this is not a follow-up request
 2340|       |   *   (like with HTTP followlocation)
 2341|       |   *************************************************************/
 2342|  2.03k|  if((!data->set.reuse_fresh || data->state.followlocation) &&
  ------------------
  |  Branch (2342:7): [True: 2.03k, False: 0]
  |  Branch (2342:33): [True: 0, False: 0]
  ------------------
 2343|  2.03k|     !data->set.connect_only) {
  ------------------
  |  Branch (2343:6): [True: 2.03k, False: 0]
  ------------------
 2344|       |    /* Ok, try to find and attach an existing one */
 2345|  2.03k|    url_attach_existing(data, needle, &waitpipe);
 2346|  2.03k|  }
 2347|       |
 2348|  2.03k|  if(data->conn) {
  ------------------
  |  Branch (2348:6): [True: 0, False: 2.03k]
  ------------------
 2349|       |    /* We attached an existing connection for this transfer. Copy
 2350|       |     * over transfer specific properties over from needle. */
 2351|      0|    struct connectdata *conn = data->conn;
 2352|      0|    VERBOSE(bool tls_upgraded = (!(needle->given->flags & PROTOPT_SSL) &&
  ------------------
  |  | 1611|      0|#define VERBOSE(x) x
  |  |  ------------------
  |  |  |  Branch (1611:20): [True: 0, False: 0]
  |  |  |  Branch (1611:20): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2353|      0|                                 Curl_conn_is_ssl(conn, FIRSTSOCKET)));
 2354|       |
 2355|      0|    conn->bits.reuse = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 2356|      0|    url_conn_reuse_adjust(data, needle);
 2357|       |
 2358|      0|#ifndef CURL_DISABLE_PROXY
 2359|      0|    infof(data, "Reusing existing %s: connection%s with %s %s",
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  ------------------
  |  |  |  Branch (145:24): [True: 0, False: 0]
  |  |  |  Branch (145:24): [True: 0, False: 0]
  |  |  |  Branch (145:24): [True: 0, False: 0]
  |  |  |  Branch (145:24): [True: 0, False: 0]
  |  |  |  Branch (145:24): [True: 0, False: 0]
  |  |  ------------------
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2360|      0|          conn->given->name,
 2361|      0|          tls_upgraded ? " (upgraded to SSL)" : "",
 2362|      0|          (conn->socks_proxy.peer || conn->http_proxy.peer) ? "proxy" : "host",
 2363|      0|          conn->socks_proxy.peer ? conn->socks_proxy.peer->user_hostname :
 2364|      0|          conn->http_proxy.peer ? conn->http_proxy.peer->user_hostname :
 2365|      0|          conn->origin->hostname);
 2366|       |#else
 2367|       |    infof(data, "Reusing existing %s: connection%s with host %s",
 2368|       |          conn->given->name,
 2369|       |          tls_upgraded ? " (upgraded to SSL)" : "",
 2370|       |          conn->origin->hostname);
 2371|       |#endif
 2372|      0|  }
 2373|  2.03k|  else {
 2374|       |    /* We have decided that we want a new connection. We may not be able to do
 2375|       |       that if we have reached the limit of how many connections we are
 2376|       |       allowed to open. */
 2377|       |
 2378|  2.03k|    if(waitpipe) {
  ------------------
  |  Branch (2378:8): [True: 0, False: 2.03k]
  ------------------
 2379|       |      /* There is a connection that *might* become usable for multiplexing
 2380|       |         "soon", and we wait for that */
 2381|      0|      infof(data, "Waiting on connection to negotiate possible multiplexing.");
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2382|      0|      result = CURLE_NO_CONNECTION_AVAILABLE;
 2383|      0|      goto out;
 2384|      0|    }
 2385|  2.03k|    else {
 2386|  2.03k|      switch(Curl_cpool_check_limits(data, needle, &needle->created)) {
 2387|      0|      case CPOOL_LIMIT_DEST:
  ------------------
  |  |   93|      0|#define CPOOL_LIMIT_DEST   1
  ------------------
  |  Branch (2387:7): [True: 0, False: 2.03k]
  ------------------
 2388|      0|        infof(data, "No more connections allowed to host");
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2389|      0|        result = CURLE_NO_CONNECTION_AVAILABLE;
 2390|      0|        goto out;
 2391|      0|      case CPOOL_LIMIT_TOTAL:
  ------------------
  |  |   94|      0|#define CPOOL_LIMIT_TOTAL  2
  ------------------
  |  Branch (2391:7): [True: 0, False: 2.03k]
  ------------------
 2392|      0|        if(data->master_mid != UINT32_MAX)
  ------------------
  |  Branch (2392:12): [True: 0, False: 0]
  ------------------
 2393|      0|          CURL_TRC_M(data, "Allowing sub-requests (like DoH) to override "
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2394|      0|                     "max connection limit");
 2395|      0|        else {
 2396|      0|          infof(data, "No connections available, total of %zu reached.",
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2397|      0|                data->multi->max_total_connections);
 2398|      0|          result = CURLE_NO_CONNECTION_AVAILABLE;
 2399|      0|          goto out;
 2400|      0|        }
 2401|      0|        break;
 2402|  2.03k|      default:
  ------------------
  |  Branch (2402:7): [True: 2.03k, False: 0]
  ------------------
 2403|  2.03k|        break;
 2404|  2.03k|      }
 2405|  2.03k|    }
 2406|       |
 2407|       |    /* Convert needle into a full connection by filling in all the
 2408|       |     * remaining parts like the cloned SSL configuration. */
 2409|  2.03k|    result = Curl_ssl_conn_config_init(data, needle);
 2410|  2.03k|    if(result) {
  ------------------
  |  Branch (2410:8): [True: 0, False: 2.03k]
  ------------------
 2411|      0|      DEBUGF(curl_mfprintf(stderr, "Error: init connection SSL config\n"));
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  ------------------
 2412|      0|      goto out;
 2413|      0|    }
 2414|       |
 2415|       |    /* Add needle to conn pool, which assigns the connection id.
 2416|       |     * Attach regardless of result, for correct handling. */
 2417|  2.03k|    result = Curl_cpool_add(data, needle);
 2418|  2.03k|    Curl_attach_connection(data, needle, TRUE);
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
 2419|  2.03k|    needle = NULL;
 2420|  2.03k|    if(result)
  ------------------
  |  Branch (2420:8): [True: 0, False: 2.03k]
  ------------------
 2421|      0|      goto out;
 2422|       |
 2423|       |#ifdef USE_NTLM
 2424|       |    /* If NTLM is requested in a part of this connection, make sure we do not
 2425|       |       assume the state is fine as this is a fresh connection and NTLM is
 2426|       |       connection based. */
 2427|       |    if((data->state.authhost.picked & CURLAUTH_NTLM) &&
 2428|       |       data->state.authhost.done) {
 2429|       |      infof(data, "NTLM picked AND auth done set, clear picked");
 2430|       |      data->state.authhost.picked = CURLAUTH_NONE;
 2431|       |      data->state.authhost.done = FALSE;
 2432|       |    }
 2433|       |
 2434|       |    if((data->state.authproxy.picked & CURLAUTH_NTLM) &&
 2435|       |       data->state.authproxy.done) {
 2436|       |      infof(data, "NTLM-proxy picked AND auth done set, clear picked");
 2437|       |      data->state.authproxy.picked = CURLAUTH_NONE;
 2438|       |      data->state.authproxy.done = FALSE;
 2439|       |    }
 2440|       |#endif
 2441|  2.03k|  }
 2442|       |
 2443|       |  /* Setup and init stuff before DO starts, in preparing for the transfer. */
 2444|  2.03k|  result = Curl_init_transfer(data, data->conn);
 2445|  2.03k|  if(result)
  ------------------
  |  Branch (2445:6): [True: 0, False: 2.03k]
  ------------------
 2446|      0|    goto out;
 2447|       |
 2448|       |  /* Setup whatever necessary for a resumed transfer */
 2449|  2.03k|  result = setup_range(data);
 2450|  2.03k|  if(result)
  ------------------
  |  Branch (2450:6): [True: 0, False: 2.03k]
  ------------------
 2451|      0|    goto out;
 2452|       |
 2453|       |  /* persist the scheme and handler the transfer is using */
 2454|  2.03k|  data->info.conn_scheme = data->conn->scheme->name;
 2455|       |  /* conn_protocol can only provide "old" protocols */
 2456|  2.03k|  data->info.conn_protocol = data->conn->scheme->protocol & CURLPROTO_MASK;
  ------------------
  |  |   79|  2.03k|#define CURLPROTO_MASK   0x3fffffff
  ------------------
 2457|  2.03k|  data->info.used_proxy =
 2458|       |#ifdef CURL_DISABLE_PROXY
 2459|       |    0
 2460|       |#else
 2461|  2.03k|    (data->conn->socks_proxy.peer || data->conn->http_proxy.peer)
  ------------------
  |  Branch (2461:6): [True: 0, False: 2.03k]
  |  Branch (2461:38): [True: 0, False: 2.03k]
  ------------------
 2462|  2.03k|#endif
 2463|  2.03k|    ;
 2464|       |
 2465|       |  /* Lastly, inform connection filters that a new transfer is attached */
 2466|  2.03k|  result = Curl_conn_ev_data_setup(data);
 2467|       |
 2468|  2.03k|out:
 2469|  2.03k|  if(needle)
  ------------------
  |  Branch (2469:6): [True: 0, False: 2.03k]
  ------------------
 2470|      0|    Curl_conn_free(data, needle);
 2471|  2.03k|  DEBUGASSERT(result || data->conn);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (2471:3): [True: 2.03k, False: 0]
  |  Branch (2471:3): [True: 0, False: 0]
  |  Branch (2471:3): [True: 0, False: 2.03k]
  |  Branch (2471:3): [True: 2.03k, False: 0]
  ------------------
 2472|  2.03k|  return result;
 2473|  2.03k|}
url.c:url_create_needle:
 2042|  2.03k|{
 2043|  2.03k|  struct connectdata *needle = NULL;
 2044|  2.03k|  CURLcode result = CURLE_OK;
 2045|  2.03k|  bool network_scheme = TRUE; /* almost all are */
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
 2046|       |
 2047|       |  /* Allocate a temporary connection data struct (needle) and fill in for
 2048|       |     comparison purposes. */
 2049|  2.03k|  needle = allocate_conn(data);
 2050|  2.03k|  if(!needle) {
  ------------------
  |  Branch (2050:6): [True: 0, False: 2.03k]
  ------------------
 2051|      0|    result = CURLE_OUT_OF_MEMORY;
 2052|      0|    goto out;
 2053|      0|  }
 2054|       |
 2055|       |  /* Do the unfailable inits first, before checks that may early return */
 2056|  2.03k|  Curl_hash_init(&needle->meta_hash, 23,
 2057|  2.03k|                 Curl_hash_str, curlx_str_key_compare, conn_meta_freeentry);
 2058|       |
 2059|       |  /*************************************************************
 2060|       |   * Determine `conn->origin` and populate `data->state.up` and
 2061|       |   * other URL related properties.
 2062|       |   *************************************************************/
 2063|  2.03k|  result = url_set_conn_origin_etc(data, needle);
 2064|  2.03k|  if(result)
  ------------------
  |  Branch (2064:6): [True: 0, False: 2.03k]
  ------------------
 2065|      0|    goto out;
 2066|       |
 2067|  2.03k|  DEBUGASSERT(needle->origin);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (2067:3): [True: 0, False: 2.03k]
  |  Branch (2067:3): [True: 2.03k, False: 0]
  ------------------
 2068|  2.03k|  network_scheme = !(needle->origin->scheme->flags & PROTOPT_NONETWORK);
  ------------------
  |  |  214|  2.03k|#define PROTOPT_NONETWORK (1 << 4) /* protocol does not use the network! */
  ------------------
 2069|       |
 2070|  2.03k|#ifdef USE_UNIX_SOCKETS
 2071|       |  /*************************************************************
 2072|       |   * Set UDS first. It overrides "via_peer" and proxy settings.
 2073|       |   *************************************************************/
 2074|  2.03k|  if(network_scheme && CURL_EASY_STR(data, STRING_UNIX_SOCKET_PATH)) {
  ------------------
  |  | 1228|  2.03k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  |  |  ------------------
  |  |  |  Branch (1228:3): [True: 0, False: 2.03k]
  |  |  ------------------
  ------------------
  |  Branch (2074:6): [True: 2.03k, False: 0]
  ------------------
 2075|      0|    result = Curl_peer_uds_create(
 2076|      0|      needle->origin->scheme, CURL_EASY_STR(data, STRING_UNIX_SOCKET_PATH),
  ------------------
  |  | 1228|      0|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
 2077|      0|      (bool)data->set.abstract_unix_socket, &needle->via_peer);
 2078|      0|    if(result)
  ------------------
  |  Branch (2078:8): [True: 0, False: 0]
  ------------------
 2079|      0|      goto out;
 2080|      0|  }
 2081|  2.03k|#endif /* USE_UNIX_SOCKETS */
 2082|       |
 2083|  2.03k|  if(network_scheme && !needle->via_peer) {
  ------------------
  |  Branch (2083:6): [True: 2.03k, False: 0]
  |  Branch (2083:24): [True: 2.03k, False: 0]
  ------------------
 2084|       |    /*************************************************************
 2085|       |     * If the `via_peer` is not already set (via UDS above),
 2086|       |     * determine if we talk to `conn->origin` directly or use
 2087|       |     * `conn->via_peer` using "connect to" and "alt-svc" properties.
 2088|       |     *************************************************************/
 2089|  2.03k|    result = url_set_conn_peer(data, needle);
 2090|  2.03k|    if(result)
  ------------------
  |  Branch (2090:8): [True: 0, False: 2.03k]
  ------------------
 2091|      0|      goto out;
 2092|  2.03k|  }
 2093|       |
 2094|       |  /*************************************************************
 2095|       |   * Check whether the host and the "connect to host" are equal.
 2096|       |   * Do this after the hostnames have been IDN-converted and
 2097|       |   * before initializing the proxy.
 2098|       |   *************************************************************/
 2099|  2.03k|  if(Curl_peer_equal(needle->origin, needle->via_peer)) {
  ------------------
  |  Branch (2099:6): [True: 1, False: 2.03k]
  ------------------
 2100|      1|    Curl_peer_unlink(&needle->via_peer);
 2101|      1|  }
 2102|       |
 2103|  2.03k|#ifndef CURL_DISABLE_PROXY
 2104|       |  /* Going via a unix socket ignores any proxy settings */
 2105|  2.03k|  if(network_scheme &&
  ------------------
  |  Branch (2105:6): [True: 2.03k, False: 0]
  ------------------
 2106|  2.03k|     (!needle->via_peer || !needle->via_peer->unix_socket)) {
  ------------------
  |  Branch (2106:7): [True: 1, False: 2.03k]
  |  Branch (2106:28): [True: 2.03k, False: 0]
  ------------------
 2107|  2.03k|    result = Curl_proxy_init_conn(data, needle);
 2108|  2.03k|    if(result)
  ------------------
  |  Branch (2108:8): [True: 0, False: 2.03k]
  ------------------
 2109|      0|      goto out;
 2110|  2.03k|  }
 2111|  2.03k|#endif /* CURL_DISABLE_PROXY */
 2112|       |
 2113|  2.03k|  result = url_set_conn_login(data, needle); /* default credentials */
 2114|  2.03k|  if(result)
  ------------------
  |  Branch (2114:6): [True: 0, False: 2.03k]
  ------------------
 2115|      0|    goto out;
 2116|       |
 2117|       |  /*************************************************************
 2118|       |   * Setup internals depending on protocol. Needs to be done after
 2119|       |   * we figured out what/if proxy to use.
 2120|       |   *************************************************************/
 2121|  2.03k|  result = setup_connection_internals(data, needle);
 2122|  2.03k|  if(result)
  ------------------
  |  Branch (2122:6): [True: 0, False: 2.03k]
  ------------------
 2123|      0|    goto out;
 2124|       |
 2125|  2.03k|  if(needle->scheme->flags & PROTOPT_ALPN) {
  ------------------
  |  |  222|  2.03k|#define PROTOPT_ALPN (1 << 8) /* set ALPN for this */
  ------------------
  |  Branch (2125:6): [True: 0, False: 2.03k]
  ------------------
 2126|       |    /* The protocol wants it, so set the bits if enabled in the easy handle
 2127|       |       (default) */
 2128|      0|    if(data->set.ssl_enable_alpn)
  ------------------
  |  Branch (2128:8): [True: 0, False: 0]
  ------------------
 2129|      0|      needle->bits.tls_enable_alpn = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 2130|      0|  }
 2131|       |
 2132|  2.03k|  if(network_scheme) {
  ------------------
  |  Branch (2132:6): [True: 2.03k, False: 0]
  ------------------
 2133|       |    /* Setup callbacks for network connections */
 2134|  2.03k|    needle->recv[FIRSTSOCKET] = Curl_cf_recv;
  ------------------
  |  |  234|  2.03k|#define FIRSTSOCKET     0
  ------------------
 2135|  2.03k|    needle->send[FIRSTSOCKET] = Curl_cf_send;
  ------------------
  |  |  234|  2.03k|#define FIRSTSOCKET     0
  ------------------
 2136|  2.03k|    needle->recv[SECONDARYSOCKET] = Curl_cf_recv;
  ------------------
  |  |  235|  2.03k|#define SECONDARYSOCKET 1
  ------------------
 2137|  2.03k|    needle->send[SECONDARYSOCKET] = Curl_cf_send;
  ------------------
  |  |  235|  2.03k|#define SECONDARYSOCKET 1
  ------------------
 2138|  2.03k|    needle->bits.tcp_fastopen = data->set.tcp_fastopen;
 2139|  2.03k|#ifdef USE_UNIX_SOCKETS
 2140|  2.03k|    if(Curl_conn_get_first_peer(needle, FIRSTSOCKET)->unix_socket)
  ------------------
  |  |  234|  2.03k|#define FIRSTSOCKET     0
  ------------------
  |  Branch (2140:8): [True: 0, False: 2.03k]
  ------------------
 2141|      0|      needle->transport_wanted = TRNSPRT_UNIX;
  ------------------
  |  |  241|      0|#define TRNSPRT_UNIX 6
  ------------------
 2142|  2.03k|#endif
 2143|  2.03k|  }
 2144|       |
 2145|  2.03k|out:
 2146|  2.03k|  if(!result) {
  ------------------
  |  Branch (2146:6): [True: 2.03k, False: 0]
  ------------------
 2147|  2.03k|    DEBUGASSERT(needle);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (2147:5): [True: 0, False: 2.03k]
  |  Branch (2147:5): [True: 2.03k, False: 0]
  ------------------
 2148|  2.03k|    DEBUGASSERT(needle->origin);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (2148:5): [True: 0, False: 2.03k]
  |  Branch (2148:5): [True: 2.03k, False: 0]
  ------------------
 2149|  2.03k|    *pneedle = needle;
 2150|  2.03k|  }
 2151|      0|  else {
 2152|      0|    *pneedle = NULL;
 2153|      0|    if(needle)
  ------------------
  |  Branch (2153:8): [True: 0, False: 0]
  ------------------
 2154|      0|      Curl_conn_free(data, needle);
 2155|      0|  }
 2156|  2.03k|  return result;
 2157|  2.03k|}
url.c:allocate_conn:
 1218|  2.03k|{
 1219|  2.03k|  struct connectdata *conn = curlx_calloc(1, sizeof(struct connectdata));
  ------------------
  |  | 1473|  2.03k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
 1220|  2.03k|  if(!conn)
  ------------------
  |  Branch (1220:6): [True: 0, False: 2.03k]
  ------------------
 1221|      0|    return NULL;
 1222|       |
 1223|       |  /* and we setup a few fields in case we end up actually using this struct */
 1224|       |
 1225|  2.03k|  conn->sock[FIRSTSOCKET] = CURL_SOCKET_BAD;     /* no file descriptor */
  ------------------
  |  |  234|  2.03k|#define FIRSTSOCKET     0
  ------------------
                conn->sock[FIRSTSOCKET] = CURL_SOCKET_BAD;     /* no file descriptor */
  ------------------
  |  |  147|  2.03k|#define CURL_SOCKET_BAD (-1)
  ------------------
 1226|  2.03k|  conn->sock[SECONDARYSOCKET] = CURL_SOCKET_BAD; /* no file descriptor */
  ------------------
  |  |  235|  2.03k|#define SECONDARYSOCKET 1
  ------------------
                conn->sock[SECONDARYSOCKET] = CURL_SOCKET_BAD; /* no file descriptor */
  ------------------
  |  |  147|  2.03k|#define CURL_SOCKET_BAD (-1)
  ------------------
 1227|  2.03k|  conn->recv_idx = 0; /* default for receiving transfer data */
 1228|  2.03k|  conn->send_idx = 0; /* default for sending transfer data */
 1229|  2.03k|  conn->connection_id = -1;    /* no ID */
 1230|  2.03k|  conn->attached_xfers = 0;
 1231|       |
 1232|       |  /* Remember time this connection started */
 1233|  2.03k|  conn->lastused = conn->lastupkeep = conn->created = *Curl_pgrs_now(data);
 1234|       |
 1235|  2.03k|#ifndef CURL_DISABLE_FTP
 1236|  2.03k|  conn->bits.ftp_use_epsv = data->set.ftp_use_epsv;
 1237|  2.03k|  conn->bits.ftp_use_eprt = data->set.ftp_use_eprt;
 1238|  2.03k|#endif
 1239|  2.03k|  conn->ip_version = data->set.ipver;
 1240|  2.03k|  conn->bits.connect_only = (bool)data->set.connect_only;
 1241|  2.03k|  conn->transport_wanted = TRNSPRT_TCP; /* most of them are TCP streams */
  ------------------
  |  |  238|  2.03k|#define TRNSPRT_TCP  3
  ------------------
 1242|       |
 1243|       |  /* Store the local bind parameters that will be used for this connection */
 1244|  2.03k|  if(CURL_EASY_STR(data, STRING_DEVICE)) {
  ------------------
  |  | 1228|  2.03k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  |  |  ------------------
  |  |  |  Branch (1228:3): [True: 0, False: 2.03k]
  |  |  ------------------
  ------------------
 1245|      0|    conn->localdev = curlx_strdup(CURL_EASY_STR(data, STRING_DEVICE));
  ------------------
  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
 1246|      0|    if(!conn->localdev)
  ------------------
  |  Branch (1246:8): [True: 0, False: 0]
  ------------------
 1247|      0|      goto error;
 1248|      0|  }
 1249|  2.03k|#ifndef CURL_DISABLE_BINDLOCAL
 1250|  2.03k|  conn->localportrange = data->set.localportrange;
 1251|  2.03k|  conn->localport = data->set.localport;
 1252|  2.03k|#endif
 1253|       |
 1254|       |  /* the close socket stuff needs to be copied to the connection struct as
 1255|       |     it may live on without (this specific) Curl_easy */
 1256|  2.03k|  conn->fclosesocket = data->set.fclosesocket;
 1257|  2.03k|  conn->closesocket_client = data->set.closesocket_client;
 1258|       |#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
 1259|       |  conn->gssapi_delegation = data->set.gssapi_delegation;
 1260|       |#endif
 1261|  2.03k|  return conn;
 1262|      0|error:
 1263|       |
 1264|      0|  curlx_free(conn->localdev);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1265|      0|  curlx_free(conn);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1266|       |  return NULL;
 1267|  2.03k|}
url.c:url_set_conn_origin_etc:
 1552|  2.03k|{
 1553|  2.03k|  CURLcode result = CURLE_OK;
 1554|       |
 1555|  2.03k|  Curl_peer_link(&conn->origin, data->state.origin);
 1556|       |
 1557|       |  /* set the connection scheme */
 1558|  2.03k|  result = url_set_conn_scheme(data, conn, conn->origin->scheme);
 1559|  2.03k|  if(result)
  ------------------
  |  Branch (1559:6): [True: 0, False: 2.03k]
  ------------------
 1560|      0|    goto out;
 1561|       |
 1562|       |  /* set the connection options */
 1563|  2.03k|  if(CURL_EASY_STR(data, STRING_OPTIONS)) {
  ------------------
  |  | 1228|  2.03k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  |  |  ------------------
  |  |  |  Branch (1228:3): [True: 0, False: 2.03k]
  |  |  ------------------
  ------------------
 1564|      0|    conn->options = curlx_strdup(CURL_EASY_STR(data, STRING_OPTIONS));
  ------------------
  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
 1565|      0|    if(!conn->options) {
  ------------------
  |  Branch (1565:8): [True: 0, False: 0]
  ------------------
 1566|      0|      result = CURLE_OUT_OF_MEMORY;
 1567|      0|      goto out;
 1568|      0|    }
 1569|      0|  }
 1570|  2.03k|  else if(data->state.up.options) {
  ------------------
  |  Branch (1570:11): [True: 0, False: 2.03k]
  ------------------
 1571|      0|    conn->options = curlx_strdup(data->state.up.options);
  ------------------
  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
 1572|      0|    if(!conn->options) {
  ------------------
  |  Branch (1572:8): [True: 0, False: 0]
  ------------------
 1573|      0|      result = CURLE_OUT_OF_MEMORY;
 1574|      0|      goto out;
 1575|      0|    }
 1576|      0|  }
 1577|       |
 1578|  2.03k|out:
 1579|  2.03k|  return result;
 1580|  2.03k|}
url.c:url_set_conn_scheme:
 1272|  2.03k|{
 1273|       |  /* URL scheme is usable for connection when it is
 1274|       |   * - allowed
 1275|       |   * - not from a redirect or an allowed redirect protocol */
 1276|  2.03k|  if(scheme->run &&
  ------------------
  |  Branch (1276:6): [True: 2.03k, False: 0]
  ------------------
 1277|  2.03k|     (data->set.allowed_protocols & scheme->protocol) &&
  ------------------
  |  Branch (1277:6): [True: 2.03k, False: 0]
  ------------------
 1278|  2.03k|     (!data->state.this_is_a_follow ||
  ------------------
  |  Branch (1278:7): [True: 2.03k, False: 0]
  ------------------
 1279|  2.03k|       (data->set.redir_protocols & scheme->protocol))) {
  ------------------
  |  Branch (1279:8): [True: 0, False: 0]
  ------------------
 1280|  2.03k|    conn->scheme = conn->given = scheme;
 1281|  2.03k|    return CURLE_OK;
 1282|  2.03k|  }
 1283|      0|  if(scheme->flags & PROTOPT_NO_TRANSFER)
  ------------------
  |  |  238|      0|#define PROTOPT_NO_TRANSFER (1 << 17) /* this protocol is not for transfers */
  ------------------
  |  Branch (1283:6): [True: 0, False: 0]
  ------------------
 1284|      0|    failf(data, "Protocol \"%s\" is not for transfers", scheme->name);
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
 1285|      0|  else
 1286|      0|    failf(data, "Protocol \"%s\" is disabled%s", scheme->name,
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
 1287|      0|          data->state.this_is_a_follow ? " (in redirect)" : "");
  ------------------
  |  Branch (1287:11): [True: 0, False: 0]
  ------------------
 1288|      0|  return CURLE_UNSUPPORTED_PROTOCOL;
 1289|  2.03k|}
url.c:url_set_conn_peer:
 1857|  2.03k|{
 1858|  2.03k|  CURLcode result = CURLE_OK;
 1859|  2.03k|  struct Curl_peer *origin = conn->origin;
 1860|  2.03k|  struct Curl_peer *via_peer = NULL;
 1861|  2.03k|  struct curl_slist *conn_to_entry = data->set.connect_to;
 1862|       |
 1863|  2.03k|  DEBUGASSERT(!conn->via_peer);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1863:3): [True: 0, False: 2.03k]
  |  Branch (1863:3): [True: 2.03k, False: 0]
  ------------------
 1864|  2.03k|  Curl_peer_unlink(&conn->via_peer);
 1865|       |
 1866|  4.07k|  while(conn_to_entry && !via_peer) {
  ------------------
  |  Branch (1866:9): [True: 2.03k, False: 2.03k]
  |  Branch (1866:26): [True: 2.03k, False: 0]
  ------------------
 1867|  2.03k|    result = parse_connect_to_string(data, origin, conn_to_entry->data,
 1868|  2.03k|                                     &via_peer);
 1869|  2.03k|    if(result)
  ------------------
  |  Branch (1869:8): [True: 0, False: 2.03k]
  ------------------
 1870|      0|      return result;
 1871|  2.03k|    conn_to_entry = conn_to_entry->next;
 1872|  2.03k|  }
 1873|       |
 1874|  2.03k|#ifndef CURL_DISABLE_ALTSVC
 1875|  2.03k|  if(data->asi && !via_peer &&
  ------------------
  |  Branch (1875:6): [True: 2.03k, False: 0]
  |  Branch (1875:19): [True: 0, False: 2.03k]
  ------------------
 1876|      0|     ((conn->scheme->protocol == CURLPROTO_HTTPS) ||
  ------------------
  |  | 1089|      0|#define CURLPROTO_HTTPS   (1L << 1)
  ------------------
  |  Branch (1876:7): [True: 0, False: 0]
  ------------------
 1877|      0|#ifdef DEBUGBUILD
 1878|       |      /* allow debug builds to circumvent the HTTPS restriction */
 1879|      0|      getenv("CURL_ALTSVC_HTTP")
  ------------------
  |  Branch (1879:7): [True: 0, False: 0]
  ------------------
 1880|       |#else
 1881|       |      0
 1882|       |#endif
 1883|      0|       )) {
 1884|       |    /* no connect_to match, try alt-svc! */
 1885|      0|    enum alpnid srcalpnid = ALPN_none;
 1886|      0|    bool hit = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 1887|      0|    struct altsvc *as = NULL;
 1888|      0|    int allowed_alpns = ALPN_none;
 1889|      0|    struct http_negotiation *neg = &data->state.http_neg;
 1890|      0|    bool same_dest = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 1891|       |
 1892|      0|    DEBUGF(infof(data, "Alt-svc check wanted=%x, allowed=%x",
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  |  |  ------------------
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1893|      0|                 neg->wanted, neg->allowed));
 1894|       |#ifdef USE_HTTP3
 1895|       |    if(neg->allowed & CURL_HTTP_V3x)
 1896|       |      allowed_alpns |= ALPN_h3;
 1897|       |#endif
 1898|      0|#ifdef USE_HTTP2
 1899|      0|    if(neg->allowed & CURL_HTTP_V2x)
  ------------------
  |  |   41|      0|#define CURL_HTTP_V2x   (1 << 1)
  ------------------
  |  Branch (1899:8): [True: 0, False: 0]
  ------------------
 1900|      0|      allowed_alpns |= ALPN_h2;
 1901|      0|#endif
 1902|      0|    if(neg->allowed & CURL_HTTP_V1x)
  ------------------
  |  |   40|      0|#define CURL_HTTP_V1x   (1 << 0)
  ------------------
  |  Branch (1902:8): [True: 0, False: 0]
  ------------------
 1903|      0|      allowed_alpns |= ALPN_h1;
 1904|      0|    allowed_alpns &= (int)data->asi->flags;
 1905|       |
 1906|      0|    DEBUGF(infof(data, "check Alt-Svc for host '%s'", origin->hostname));
  ------------------
  |  | 1061|      0|#define DEBUGF(x) x
  |  |  ------------------
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [True: 0, False: 0]
  |  |  |  Branch (1061:19): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1907|       |#ifdef USE_HTTP3
 1908|       |    if(!hit && (neg->wanted & CURL_HTTP_V3x)) {
 1909|       |      srcalpnid = ALPN_h3;
 1910|       |      hit = Curl_altsvc_lookup(data->asi,
 1911|       |                               origin, ALPN_h3, /* from */
 1912|       |                               &as /* to */,
 1913|       |                               allowed_alpns, &same_dest);
 1914|       |    }
 1915|       |#endif
 1916|      0|#ifdef USE_HTTP2
 1917|      0|    if(!hit && (neg->wanted & CURL_HTTP_V2x) &&
  ------------------
  |  |   41|      0|#define CURL_HTTP_V2x   (1 << 1)
  ------------------
  |  Branch (1917:8): [True: 0, False: 0]
  |  Branch (1917:16): [True: 0, False: 0]
  ------------------
 1918|      0|       !neg->h2_prior_knowledge) {
  ------------------
  |  Branch (1918:8): [True: 0, False: 0]
  ------------------
 1919|      0|      srcalpnid = ALPN_h2;
 1920|      0|      hit = Curl_altsvc_lookup(data->asi,
 1921|      0|                               origin, ALPN_h2, /* from */
 1922|      0|                               &as /* to */,
 1923|      0|                               allowed_alpns, &same_dest);
 1924|      0|    }
 1925|      0|#endif
 1926|      0|    if(!hit && (neg->wanted & CURL_HTTP_V1x) &&
  ------------------
  |  |   40|      0|#define CURL_HTTP_V1x   (1 << 0)
  ------------------
  |  Branch (1926:8): [True: 0, False: 0]
  |  Branch (1926:16): [True: 0, False: 0]
  ------------------
 1927|      0|       !neg->only_10) {
  ------------------
  |  Branch (1927:8): [True: 0, False: 0]
  ------------------
 1928|      0|      srcalpnid = ALPN_h1;
 1929|      0|      hit = Curl_altsvc_lookup(data->asi,
 1930|      0|                               origin, ALPN_h1, /* from */
 1931|      0|                               &as /* to */,
 1932|      0|                               allowed_alpns, &same_dest);
 1933|      0|    }
 1934|       |
 1935|      0|    if(hit && same_dest) {
  ------------------
  |  Branch (1935:8): [True: 0, False: 0]
  |  Branch (1935:15): [True: 0, False: 0]
  ------------------
 1936|       |      /* same destination, but more HTTPS version options */
 1937|      0|      switch(as->dst.alpnid) {
 1938|      0|      case ALPN_h1:
  ------------------
  |  Branch (1938:7): [True: 0, False: 0]
  ------------------
 1939|      0|        neg->wanted |= CURL_HTTP_V1x;
  ------------------
  |  |   40|      0|#define CURL_HTTP_V1x   (1 << 0)
  ------------------
 1940|      0|        neg->preferred = CURL_HTTP_V1x;
  ------------------
  |  |   40|      0|#define CURL_HTTP_V1x   (1 << 0)
  ------------------
 1941|      0|        break;
 1942|      0|      case ALPN_h2:
  ------------------
  |  Branch (1942:7): [True: 0, False: 0]
  ------------------
 1943|      0|        neg->wanted |= CURL_HTTP_V2x;
  ------------------
  |  |   41|      0|#define CURL_HTTP_V2x   (1 << 1)
  ------------------
 1944|      0|        neg->preferred = CURL_HTTP_V2x;
  ------------------
  |  |   41|      0|#define CURL_HTTP_V2x   (1 << 1)
  ------------------
 1945|      0|        break;
 1946|      0|      case ALPN_h3:
  ------------------
  |  Branch (1946:7): [True: 0, False: 0]
  ------------------
 1947|      0|        neg->wanted |= CURL_HTTP_V3x;
  ------------------
  |  |   42|      0|#define CURL_HTTP_V3x   (1 << 2)
  ------------------
 1948|      0|        neg->preferred = CURL_HTTP_V3x;
  ------------------
  |  |   42|      0|#define CURL_HTTP_V3x   (1 << 2)
  ------------------
 1949|      0|        break;
 1950|      0|      default: /* should not be possible */
  ------------------
  |  Branch (1950:7): [True: 0, False: 0]
  ------------------
 1951|      0|        break;
 1952|      0|      }
 1953|      0|    }
 1954|      0|    else if(hit) {
  ------------------
  |  Branch (1954:13): [True: 0, False: 0]
  ------------------
 1955|      0|      result = Curl_peer_create(data, conn->origin->scheme,
 1956|      0|                                as->dst.host, as->dst.port,
 1957|      0|                                &via_peer);
 1958|      0|      if(result)
  ------------------
  |  Branch (1958:10): [True: 0, False: 0]
  ------------------
 1959|      0|        return result;
 1960|      0|      infof(data, "Alt-svc connecting from [%s]%s:%u to [%s]%s:%u",
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1961|      0|            Curl_alpnid2str(srcalpnid), origin->hostname, origin->port,
 1962|      0|            Curl_alpnid2str(as->dst.alpnid),
 1963|      0|            via_peer->hostname, via_peer->port);
 1964|      0|      conn->bits.altused = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 1965|      0|      if(srcalpnid != as->dst.alpnid) {
  ------------------
  |  Branch (1965:10): [True: 0, False: 0]
  ------------------
 1966|       |        /* protocol version switch */
 1967|      0|        switch(as->dst.alpnid) {
 1968|      0|        case ALPN_h1:
  ------------------
  |  Branch (1968:9): [True: 0, False: 0]
  ------------------
 1969|      0|          neg->wanted = neg->allowed = CURL_HTTP_V1x;
  ------------------
  |  |   40|      0|#define CURL_HTTP_V1x   (1 << 0)
  ------------------
 1970|      0|          neg->only_10 = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 1971|      0|          break;
 1972|      0|        case ALPN_h2:
  ------------------
  |  Branch (1972:9): [True: 0, False: 0]
  ------------------
 1973|      0|          neg->wanted = neg->allowed = CURL_HTTP_V2x;
  ------------------
  |  |   41|      0|#define CURL_HTTP_V2x   (1 << 1)
  ------------------
 1974|      0|          break;
 1975|      0|        case ALPN_h3:
  ------------------
  |  Branch (1975:9): [True: 0, False: 0]
  ------------------
 1976|      0|          conn->transport_wanted = TRNSPRT_QUIC;
  ------------------
  |  |  240|      0|#define TRNSPRT_QUIC 5
  ------------------
 1977|      0|          neg->wanted = neg->allowed = CURL_HTTP_V3x;
  ------------------
  |  |   42|      0|#define CURL_HTTP_V3x   (1 << 2)
  ------------------
 1978|      0|          break;
 1979|      0|        default: /* should not be possible */
  ------------------
  |  Branch (1979:9): [True: 0, False: 0]
  ------------------
 1980|      0|          break;
 1981|      0|        }
 1982|      0|      }
 1983|      0|    }
 1984|      0|  }
 1985|  2.03k|#endif
 1986|       |
 1987|  2.03k|  if(via_peer)
  ------------------
  |  Branch (1987:6): [True: 2.03k, False: 0]
  ------------------
 1988|  2.03k|    conn->via_peer = via_peer;
 1989|       |
 1990|  2.03k|  return result;
 1991|  2.03k|}
url.c:parse_connect_to_string:
 1797|  2.03k|{
 1798|  2.03k|  CURLcode result = CURLE_OK;
 1799|  2.03k|  const char *ptr = conn_to_line;
 1800|  2.03k|  bool host_match = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
 1801|  2.03k|  bool port_match = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
 1802|       |
 1803|  2.03k|  *pvia_dest = NULL;
 1804|       |
 1805|  2.03k|  if(*ptr == ':') {
  ------------------
  |  Branch (1805:6): [True: 2.03k, False: 0]
  ------------------
 1806|       |    /* an empty hostname always matches */
 1807|  2.03k|    host_match = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
 1808|  2.03k|    ptr++;
 1809|  2.03k|  }
 1810|      0|  else {
 1811|       |    /* check whether the URL's hostname matches. Use the URL hostname
 1812|       |     * when it was an IPv6 address. Otherwise use the connection's hostname
 1813|       |     * that has IDN conversion. */
 1814|      0|    size_t hlen = strlen(dest->hostname);
 1815|      0|    host_match = curl_strnequal(ptr, dest->hostname, hlen);
 1816|      0|    if(!host_match && (dest->user_hostname != dest->hostname)) {
  ------------------
  |  Branch (1816:8): [True: 0, False: 0]
  |  Branch (1816:23): [True: 0, False: 0]
  ------------------
 1817|       |      /* hostname was normalized, could be IPv6 or IDN */
 1818|      0|      hlen = strlen(dest->user_hostname);
 1819|      0|      host_match = curl_strnequal(ptr, dest->user_hostname, hlen);
 1820|      0|    }
 1821|      0|    host_match = host_match && ptr[hlen] == ':';
  ------------------
  |  Branch (1821:18): [True: 0, False: 0]
  |  Branch (1821:32): [True: 0, False: 0]
  ------------------
 1822|      0|    if(host_match)
  ------------------
  |  Branch (1822:8): [True: 0, False: 0]
  ------------------
 1823|      0|      ptr += hlen + 1;
 1824|      0|  }
 1825|       |
 1826|  2.03k|  if(host_match) {
  ------------------
  |  Branch (1826:6): [True: 2.03k, False: 0]
  ------------------
 1827|  2.03k|    if(*ptr == ':') {
  ------------------
  |  Branch (1827:8): [True: 2.03k, False: 0]
  ------------------
 1828|       |      /* an empty port always matches */
 1829|  2.03k|      port_match = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
 1830|  2.03k|      ptr++;
 1831|  2.03k|    }
 1832|      0|    else {
 1833|       |      /* check whether the URL's port matches */
 1834|      0|      const char *ptr_next = strchr(ptr, ':');
 1835|      0|      if(ptr_next) {
  ------------------
  |  Branch (1835:10): [True: 0, False: 0]
  ------------------
 1836|      0|        curl_off_t port_to_match;
 1837|      0|        if(!curlx_str_number(&ptr, &port_to_match, 0xffff) &&
  ------------------
  |  Branch (1837:12): [True: 0, False: 0]
  ------------------
 1838|      0|           ((uint16_t)port_to_match == dest->port)) {
  ------------------
  |  Branch (1838:12): [True: 0, False: 0]
  ------------------
 1839|      0|          port_match = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 1840|      0|        }
 1841|      0|        ptr = ptr_next + 1;
 1842|      0|      }
 1843|      0|    }
 1844|  2.03k|  }
 1845|       |
 1846|  2.03k|  if(host_match && port_match && ptr && *ptr)
  ------------------
  |  Branch (1846:6): [True: 2.03k, False: 0]
  |  Branch (1846:20): [True: 2.03k, False: 0]
  |  Branch (1846:34): [True: 2.03k, False: 0]
  |  Branch (1846:41): [True: 2.03k, False: 0]
  ------------------
 1847|  2.03k|    result = Curl_peer_from_connect_to(data, dest, ptr, pvia_dest);
 1848|       |
 1849|  2.03k|  return result;
 1850|  2.03k|}
url.c:url_set_conn_login:
 1769|  2.03k|{
 1770|       |  /* If our protocol needs a password and we have none, use the defaults */
 1771|  2.03k|  if((conn->scheme->flags & PROTOPT_NEEDSPWD) && !conn->creds) {
  ------------------
  |  |  215|  2.03k|#define PROTOPT_NEEDSPWD (1 << 5)  /* needs a password, and if none is set it
  ------------------
  |  Branch (1771:6): [True: 0, False: 2.03k]
  |  Branch (1771:50): [True: 0, False: 0]
  ------------------
 1772|      0|    Curl_peer_link(&conn->creds_origin, data->state.origin);
 1773|      0|    if(data->state.creds)
  ------------------
  |  Branch (1773:8): [True: 0, False: 0]
  ------------------
 1774|      0|      Curl_creds_link(&conn->creds, data->state.creds);
 1775|      0|    else
 1776|      0|      return Curl_creds_create(CURL_DEFAULT_USER, CURL_DEFAULT_PASSWORD,
  ------------------
  |  |   29|      0|#define CURL_DEFAULT_USER     "anonymous"
  ------------------
                    return Curl_creds_create(CURL_DEFAULT_USER, CURL_DEFAULT_PASSWORD,
  ------------------
  |  |   30|      0|#define CURL_DEFAULT_PASSWORD "ftp@example.com"
  ------------------
 1777|      0|                               NULL, NULL, NULL, CREDS_NONE, &conn->creds);
  ------------------
  |  |   29|      0|#define CREDS_NONE   0 /* used for default username/passwd */
  ------------------
 1778|      0|  }
 1779|  2.03k|  else if(!(conn->scheme->flags & PROTOPT_CREDSPERREQUEST)) {
  ------------------
  |  |  219|  2.03k|#define PROTOPT_CREDSPERREQUEST (1 << 7) /* requires login credentials per
  ------------------
  |  Branch (1779:11): [True: 2.03k, False: 0]
  ------------------
 1780|       |    /* for protocols that do not handle credentials per request,
 1781|       |     * the connection credentials are set by the initial transfer. */
 1782|  2.03k|    Curl_peer_link(&conn->creds_origin, data->state.origin);
 1783|  2.03k|    Curl_creds_link(&conn->creds, data->state.creds);
 1784|  2.03k|  }
 1785|       |
 1786|  2.03k|  return CURLE_OK;
 1787|  2.03k|}
url.c:setup_connection_internals:
 1624|  2.03k|{
 1625|  2.03k|  struct Curl_peer *peer = NULL;
 1626|  2.03k|  CURLcode result;
 1627|       |
 1628|  2.03k|  if(conn->scheme->run->setup_connection) {
  ------------------
  |  Branch (1628:6): [True: 0, False: 2.03k]
  ------------------
 1629|      0|    result = conn->scheme->run->setup_connection(data, conn);
 1630|      0|    if(result)
  ------------------
  |  Branch (1630:8): [True: 0, False: 0]
  ------------------
 1631|      0|      return result;
 1632|      0|  }
 1633|       |
 1634|       |  /* Now create the destination name */
 1635|  2.03k|  peer = Curl_conn_get_destination(conn, FIRSTSOCKET);
  ------------------
  |  |  234|  2.03k|#define FIRSTSOCKET     0
  ------------------
 1636|  2.03k|  if(!peer)
  ------------------
  |  Branch (1636:6): [True: 0, False: 2.03k]
  ------------------
 1637|      0|    return CURLE_FAILED_INIT;
 1638|       |
 1639|       |  /* IPv6 addresses with a scope_id (0 is default == global) have a
 1640|       |   * printable representation with a '%<scope_id>' suffix. */
 1641|  2.03k|  if(peer->ipv6)
  ------------------
  |  Branch (1641:6): [True: 0, False: 2.03k]
  ------------------
 1642|      0|    if(peer->scopeid)
  ------------------
  |  Branch (1642:8): [True: 0, False: 0]
  ------------------
 1643|      0|      conn->destination = curl_maprintf("[%s%%%u]:%u",
 1644|      0|        peer->hostname, peer->scopeid, peer->port);
 1645|      0|    else
 1646|      0|      conn->destination = curl_maprintf("[%s]:%u",
 1647|      0|        peer->hostname, peer->port);
 1648|  2.03k|  else
 1649|  2.03k|    conn->destination = curl_maprintf("%s:%u", peer->hostname, peer->port);
 1650|  2.03k|  if(!conn->destination)
  ------------------
  |  Branch (1650:6): [True: 0, False: 2.03k]
  ------------------
 1651|      0|    return CURLE_OUT_OF_MEMORY;
 1652|       |
 1653|  2.03k|  Curl_strntolower(conn->destination, conn->destination,
 1654|  2.03k|                   strlen(conn->destination));
 1655|       |
 1656|  2.03k|#ifdef USE_IPV6
 1657|  2.03k|  if(data->set.scope_id)
  ------------------
  |  Branch (1657:6): [True: 0, False: 2.03k]
  ------------------
 1658|      0|    conn->scope_id = data->set.scope_id;
 1659|  2.03k|  else {
 1660|  2.03k|    struct Curl_peer *first = Curl_conn_get_first_peer(conn, FIRSTSOCKET);
  ------------------
  |  |  234|  2.03k|#define FIRSTSOCKET     0
  ------------------
 1661|  2.03k|    if(!first)
  ------------------
  |  Branch (1661:8): [True: 0, False: 2.03k]
  ------------------
 1662|      0|      return CURLE_FAILED_INIT;
 1663|  2.03k|    conn->scope_id = first->scopeid;
 1664|  2.03k|  }
 1665|  2.03k|#endif
 1666|       |
 1667|  2.03k|  return CURLE_OK;
 1668|  2.03k|}
url.c:setup_range:
 1587|  2.03k|{
 1588|  2.03k|  struct UrlState *s = &data->state;
 1589|  2.03k|  s->resume_from = data->set.set_resume_from;
 1590|  2.03k|  if(s->resume_from || CURL_EASY_STR(data, STRING_SET_RANGE)) {
  ------------------
  |  | 1228|  2.03k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  |  |  ------------------
  |  |  |  Branch (1228:3): [True: 0, False: 2.03k]
  |  |  ------------------
  ------------------
  |  Branch (1590:6): [True: 0, False: 2.03k]
  ------------------
 1591|      0|    if(s->rangestringalloc)
  ------------------
  |  Branch (1591:8): [True: 0, False: 0]
  ------------------
 1592|      0|      curlx_free(s->range);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1593|       |
 1594|      0|    if(s->resume_from)
  ------------------
  |  Branch (1594:8): [True: 0, False: 0]
  ------------------
 1595|      0|      s->range = curl_maprintf("%" FMT_OFF_T "-", s->resume_from);
 1596|      0|    else
 1597|      0|      s->range = curlx_strdup(CURL_EASY_STR(data, STRING_SET_RANGE));
  ------------------
  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
 1598|       |
 1599|      0|    if(!s->range)
  ------------------
  |  Branch (1599:8): [True: 0, False: 0]
  ------------------
 1600|      0|      return CURLE_OUT_OF_MEMORY;
 1601|       |
 1602|      0|    s->rangestringalloc = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 1603|       |
 1604|       |    /* tell ourselves to fetch this range */
 1605|      0|    s->use_range = TRUE;        /* enable range download */
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 1606|      0|  }
 1607|  2.03k|  else
 1608|  2.03k|    s->use_range = FALSE; /* disable range download */
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
 1609|       |
 1610|  2.03k|  return CURLE_OK;
 1611|  2.03k|}
url.c:url_attach_existing:
 1162|  2.03k|{
 1163|  2.03k|  struct cpool *cpool = Curl_cpool_get_instance(data);
 1164|  2.03k|  struct url_conn_match match;
 1165|  2.03k|  bool success;
 1166|       |
 1167|  2.03k|  DEBUGASSERT(!data->conn);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1167:3): [True: 0, False: 2.03k]
  |  Branch (1167:3): [True: 2.03k, False: 0]
  ------------------
 1168|       |
 1169|  2.03k|  memset(&match, 0, sizeof(match));
 1170|  2.03k|  match.data = data;
 1171|  2.03k|  match.needle = needle;
 1172|  2.03k|  match.now = *Curl_pgrs_now(data);
 1173|  2.03k|  match.may_multiplex = xfer_may_multiplex(data, needle);
 1174|       |
 1175|  2.03k|  Curl_cpool_prune_dead(cpool, data);
 1176|       |
 1177|       |#ifdef USE_NTLM
 1178|       |  match.want_ntlm_http =
 1179|       |    (data->state.authhost.want & CURLAUTH_NTLM) &&
 1180|       |    (needle->scheme->protocol & PROTO_FAMILY_HTTP);
 1181|       |#ifndef CURL_DISABLE_PROXY
 1182|       |  match.want_proxy_ntlm_http =
 1183|       |    needle->http_proxy.creds &&
 1184|       |    (data->state.authproxy.want & CURLAUTH_NTLM) &&
 1185|       |    (needle->scheme->protocol & PROTO_FAMILY_HTTP);
 1186|       |#endif
 1187|       |#endif
 1188|       |
 1189|       |#if !defined(CURL_DISABLE_HTTP) && defined(USE_SPNEGO)
 1190|       |  match.want_nego_http =
 1191|       |    (data->state.authhost.want & CURLAUTH_NEGOTIATE) &&
 1192|       |    (needle->scheme->protocol & PROTO_FAMILY_HTTP);
 1193|       |#ifndef CURL_DISABLE_PROXY
 1194|       |  match.want_proxy_nego_http =
 1195|       |    needle->http_proxy.creds &&
 1196|       |    (data->state.authproxy.want & CURLAUTH_NEGOTIATE) &&
 1197|       |    (needle->scheme->protocol & PROTO_FAMILY_HTTP);
 1198|       |#endif
 1199|       |#endif
 1200|  2.03k|  match.require_tls = data->set.use_ssl >= CURLUSESSL_CONTROL;
  ------------------
  |  |  936|  2.03k|#define CURLUSESSL_CONTROL 2L /* SSL for the control connection or fail */
  ------------------
 1201|  2.03k|  match.may_tls = data->set.use_ssl > CURLUSESSL_NONE;
  ------------------
  |  |  934|  2.03k|#define CURLUSESSL_NONE    0L /* do not attempt to use SSL */
  ------------------
 1202|       |
 1203|       |  /* Find a connection in the pool that matches what "data + needle"
 1204|       |   * requires. If a suitable candidate is found, it is attached to "data". */
 1205|  2.03k|  success = Curl_cpool_find(data, needle->destination,
 1206|  2.03k|                            url_match_conn, url_match_result, &match);
 1207|       |
 1208|       |  /* wait_pipe is TRUE if we encounter a bundle that is undecided. There
 1209|       |   * is no matching connection then, yet. */
 1210|  2.03k|  *waitpipe = (bool)match.wait_pipe;
 1211|  2.03k|  return success;
 1212|  2.03k|}
url.c:xfer_may_multiplex:
  536|  2.03k|{
  537|  2.03k|#ifndef CURL_DISABLE_HTTP
  538|       |  /* If an HTTP protocol and multiplexing is enabled */
  539|  2.03k|  if((conn->scheme->protocol & PROTO_FAMILY_HTTP) &&
  ------------------
  |  |   84|  2.03k|#define PROTO_FAMILY_HTTP (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_WS | \
  |  |  ------------------
  |  |  |  | 1088|  2.03k|#define CURLPROTO_HTTP    (1L << 0)
  |  |  ------------------
  |  |               #define PROTO_FAMILY_HTTP (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_WS | \
  |  |  ------------------
  |  |  |  | 1089|  2.03k|#define CURLPROTO_HTTPS   (1L << 1)
  |  |  ------------------
  |  |               #define PROTO_FAMILY_HTTP (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_WS | \
  |  |  ------------------
  |  |  |  |   63|  2.03k|#define CURLPROTO_WS     (1L << 30)
  |  |  ------------------
  |  |   85|  2.03k|                           CURLPROTO_WSS)
  |  |  ------------------
  |  |  |  |   64|  2.03k|#define CURLPROTO_WSS    ((curl_prot_t)1 << 31)
  |  |  ------------------
  ------------------
  |  Branch (539:6): [True: 0, False: 2.03k]
  ------------------
  540|      0|     (!conn->bits.protoconnstart || !conn->bits.close)) {
  ------------------
  |  Branch (540:7): [True: 0, False: 0]
  |  Branch (540:37): [True: 0, False: 0]
  ------------------
  541|       |
  542|      0|    if(Curl_multiplex_wanted(data->multi) &&
  ------------------
  |  Branch (542:8): [True: 0, False: 0]
  ------------------
  543|      0|       (data->state.http_neg.allowed & (CURL_HTTP_V2x | CURL_HTTP_V3x)))
  ------------------
  |  |   41|      0|#define CURL_HTTP_V2x   (1 << 1)
  ------------------
                     (data->state.http_neg.allowed & (CURL_HTTP_V2x | CURL_HTTP_V3x)))
  ------------------
  |  |   42|      0|#define CURL_HTTP_V3x   (1 << 2)
  ------------------
  |  Branch (543:8): [True: 0, False: 0]
  ------------------
  544|       |      /* allows HTTP/2 or newer */
  545|      0|      return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  546|      0|  }
  547|       |#else
  548|       |  (void)data;
  549|       |  (void)conn;
  550|       |#endif
  551|  2.03k|  return FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  552|  2.03k|}
url.c:url_match_result:
 1127|  2.03k|{
 1128|  2.03k|  struct url_conn_match *match = userdata;
 1129|  2.03k|  if(match->found) {
  ------------------
  |  Branch (1129:6): [True: 0, False: 2.03k]
  ------------------
 1130|       |    /* Attach it now while still under lock, so the connection does
 1131|       |     * no longer appear idle and can be reaped. */
 1132|      0|    Curl_attach_connection(match->data, match->found, TRUE);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 1133|      0|    return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 1134|      0|  }
 1135|  2.03k|  else if(match->seen_single_use_conn && !match->seen_multiplex_conn) {
  ------------------
  |  Branch (1135:11): [True: 0, False: 2.03k]
  |  Branch (1135:42): [True: 0, False: 0]
  ------------------
 1136|       |    /* We have seen a single-use, existing connection to the destination and
 1137|       |     * no multiplexed one. It seems safe to assume that the server does
 1138|       |     * not support multiplexing. */
 1139|      0|    match->wait_pipe = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 1140|      0|  }
 1141|  2.03k|  else if(match->seen_pending_conn && match->data->set.pipewait) {
  ------------------
  |  Branch (1141:11): [True: 0, False: 2.03k]
  |  Branch (1141:39): [True: 0, False: 0]
  ------------------
 1142|      0|    infof(match->data,
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1143|      0|          "Found pending candidate for reuse and CURLOPT_PIPEWAIT is set");
 1144|      0|    match->wait_pipe = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 1145|      0|  }
 1146|  2.03k|  match->force_reuse = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
 1147|       |  return FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
 1148|  2.03k|}

urlencode_str:
  133|  2.06k|{
  134|       |  /* we must add this with whitespace-replacing */
  135|  2.06k|  const unsigned char *iptr;
  136|  2.06k|  const unsigned char *host_sep = (const unsigned char *)url;
  137|  2.06k|  CURLcode result = CURLE_OK;
  138|       |
  139|  2.06k|  DEBUGASSERT((query >= QUERY_NO) && (query <= QUERY_YES));
  ------------------
  |  | 1075|  2.06k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (139:3): [True: 0, False: 2.06k]
  |  Branch (139:3): [True: 0, False: 0]
  |  Branch (139:3): [True: 2.06k, False: 0]
  |  Branch (139:3): [True: 2.06k, False: 0]
  ------------------
  140|       |
  141|  2.06k|  if(!relative) {
  ------------------
  |  Branch (141:6): [True: 0, False: 2.06k]
  ------------------
  142|      0|    size_t n;
  143|      0|    host_sep = (const unsigned char *)find_host_sep(url);
  144|       |
  145|       |    /* output the first piece as-is */
  146|      0|    n = (const char *)host_sep - url;
  147|      0|    result = curlx_dyn_addn(o, url, n);
  148|      0|    len -= n;
  149|      0|  }
  150|       |
  151|   905k|  for(iptr = host_sep; len && !result; iptr++, len--) {
  ------------------
  |  Branch (151:24): [True: 903k, False: 2.06k]
  |  Branch (151:31): [True: 903k, False: 0]
  ------------------
  152|   903k|    if(*iptr == ' ') {
  ------------------
  |  Branch (152:8): [True: 0, False: 903k]
  ------------------
  153|      0|      if(query != QUERY_YES)
  ------------------
  |  |   54|      0|#define QUERY_YES     4
  ------------------
  |  Branch (153:10): [True: 0, False: 0]
  ------------------
  154|      0|        result = curlx_dyn_addn(o, "%20", 3);
  155|      0|      else
  156|      0|        result = curlx_dyn_addn(o, "+", 1);
  157|      0|    }
  158|   903k|    else if((*iptr < ' ') || (*iptr >= 0x7f)) {
  ------------------
  |  Branch (158:13): [True: 0, False: 903k]
  |  Branch (158:30): [True: 82.0k, False: 821k]
  ------------------
  159|  82.0k|      unsigned char out[3] = { '%' };
  160|  82.0k|      Curl_hexbyte(&out[1], *iptr);
  161|  82.0k|      result = curlx_dyn_addn(o, out, 3);
  162|  82.0k|    }
  163|   821k|    else if(*iptr == '%' && (len >= 3) &&
  ------------------
  |  Branch (163:13): [True: 170k, False: 651k]
  |  Branch (163:29): [True: 170k, False: 38]
  ------------------
  164|   170k|            ISXDIGIT(iptr[1]) && ISXDIGIT(iptr[2]) &&
  ------------------
  |  |   37|   991k|#define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   42|   340k|#define ISDIGIT(x)  (((x) >= '0') && ((x) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (42:22): [True: 41.4k, False: 128k]
  |  |  |  |  |  Branch (42:38): [True: 18.2k, False: 23.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   27|   322k|#define ISLOWHEXALPHA(x) (((x) >= 'a') && ((x) <= 'f'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (27:27): [True: 21.1k, False: 130k]
  |  |  |  |  |  Branch (27:43): [True: 2.91k, False: 18.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   28|   149k|#define ISUPHEXALPHA(x)  (((x) >= 'A') && ((x) <= 'F'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (28:27): [True: 20.1k, False: 128k]
  |  |  |  |  |  Branch (28:43): [True: 1.63k, False: 18.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          ISXDIGIT(iptr[1]) && ISXDIGIT(iptr[2]) &&
  ------------------
  |  |   37|   844k|#define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   42|  45.5k|#define ISDIGIT(x)  (((x) >= '0') && ((x) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (42:22): [True: 9.98k, False: 12.8k]
  |  |  |  |  |  Branch (42:38): [True: 2.61k, False: 7.37k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   27|  42.9k|#define ISLOWHEXALPHA(x) (((x) >= 'a') && ((x) <= 'f'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (27:27): [True: 6.22k, False: 13.9k]
  |  |  |  |  |  Branch (27:43): [True: 2.00k, False: 4.22k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   28|  18.1k|#define ISUPHEXALPHA(x)  (((x) >= 'A') && ((x) <= 'F'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (28:27): [True: 5.36k, False: 12.8k]
  |  |  |  |  |  Branch (28:43): [True: 998, False: 4.36k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  165|  5.60k|            (ISLOWER(iptr[1]) || ISLOWER(iptr[2]))) {
  ------------------
  |  |   41|  11.2k|#define ISLOWER(x)  (((x) >= 'a') && ((x) <= 'z'))
  |  |  ------------------
  |  |  |  Branch (41:22): [True: 432, False: 5.17k]
  |  |  |  Branch (41:38): [True: 432, False: 0]
  |  |  ------------------
  ------------------
                          (ISLOWER(iptr[1]) || ISLOWER(iptr[2]))) {
  ------------------
  |  |   41|  5.17k|#define ISLOWER(x)  (((x) >= 'a') && ((x) <= 'z'))
  |  |  ------------------
  |  |  |  Branch (41:22): [True: 1.65k, False: 3.52k]
  |  |  |  Branch (41:38): [True: 1.65k, False: 0]
  |  |  ------------------
  ------------------
  166|       |      /* uppercase it */
  167|  2.08k|      unsigned char hex = (unsigned char)((curlx_hexval(iptr[1]) << 4) |
  ------------------
  |  |  111|  2.08k|#define curlx_hexval(x) (unsigned char)(curlx_hexasciitable[(x) - '0'] & 0x0f)
  ------------------
  168|  2.08k|                                          curlx_hexval(iptr[2]));
  ------------------
  |  |  111|  2.08k|#define curlx_hexval(x) (unsigned char)(curlx_hexasciitable[(x) - '0'] & 0x0f)
  ------------------
  169|  2.08k|      unsigned char out[3] = { '%' };
  170|  2.08k|      Curl_hexbyte(&out[1], hex);
  171|  2.08k|      result = curlx_dyn_addn(o, out, 3);
  172|  2.08k|      iptr += 2;
  173|  2.08k|      len -= 2;
  174|  2.08k|    }
  175|   819k|    else {
  176|   819k|      result = curlx_dyn_addn(o, iptr, 1);
  177|   819k|      if(*iptr == '?' && (query == QUERY_NOT_YET))
  ------------------
  |  |   53|      0|#define QUERY_NOT_YET 3 /* allow to change to query */
  ------------------
  |  Branch (177:10): [True: 0, False: 819k]
  |  Branch (177:26): [True: 0, False: 0]
  ------------------
  178|      0|        query = QUERY_YES;
  ------------------
  |  |   54|      0|#define QUERY_YES     4
  ------------------
  179|   819k|    }
  180|   903k|  }
  181|       |
  182|  2.06k|  if(result)
  ------------------
  |  Branch (182:6): [True: 0, False: 2.06k]
  ------------------
  183|      0|    return cc2cu(result);
  ------------------
  |  |  108|      0|  ((x) == CURLE_TOO_LARGE ? CURLUE_TOO_LARGE : CURLUE_OUT_OF_MEMORY)
  |  |  ------------------
  |  |  |  Branch (108:4): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  184|  2.06k|  return CURLUE_OK;
  185|  2.06k|}
Curl_is_absolute_url:
  197|  5.05k|{
  198|  5.05k|  size_t i = 0;
  199|  5.05k|  DEBUGASSERT(!buf || (buflen > MAX_SCHEME_LEN));
  ------------------
  |  | 1075|  5.05k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (199:3): [True: 5.05k, False: 0]
  |  Branch (199:3): [True: 0, False: 0]
  |  Branch (199:3): [True: 2.53k, False: 2.52k]
  |  Branch (199:3): [True: 2.52k, False: 0]
  ------------------
  200|  5.05k|  (void)buflen; /* only used in debug-builds */
  201|  5.05k|  if(buf)
  ------------------
  |  Branch (201:6): [True: 2.52k, False: 2.53k]
  ------------------
  202|  2.52k|    buf[0] = 0; /* always leave a defined value in buf */
  203|       |#ifdef _WIN32
  204|       |  if(guess_scheme && STARTS_WITH_DRIVE_PREFIX(url))
  205|       |    return 0;
  206|       |#endif
  207|  5.05k|  if(ISALPHA(url[0]))
  ------------------
  |  |   36|  5.05k|#define ISALPHA(x)  (ISLOWER(x) || ISUPPER(x))
  |  |  ------------------
  |  |  |  |   41|  10.1k|#define ISLOWER(x)  (((x) >= 'a') && ((x) <= 'z'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (41:22): [True: 5.05k, False: 0]
  |  |  |  |  |  Branch (41:38): [True: 5.05k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISALPHA(x)  (ISLOWER(x) || ISUPPER(x))
  |  |  ------------------
  |  |  |  |   40|      0|#define ISUPPER(x)  (((x) >= 'A') && ((x) <= 'Z'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:22): [True: 0, False: 0]
  |  |  |  |  |  Branch (40:38): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  208|  30.3k|    for(i = 1; i < MAX_SCHEME_LEN; ++i) {
  ------------------
  |  |   55|  30.3k|#define MAX_SCHEME_LEN 40
  ------------------
  |  Branch (208:16): [True: 30.3k, False: 0]
  ------------------
  209|  30.3k|      char s = url[i];
  210|  30.3k|      if(s && (ISALNUM(s) || (s == '+') || (s == '-') || (s == '.'))) {
  ------------------
  |  |   39|  60.7k|#define ISALNUM(x)  (ISDIGIT(x) || ISLOWER(x) || ISUPPER(x))
  |  |  ------------------
  |  |  |  |   42|  60.7k|#define ISDIGIT(x)  (((x) >= '0') && ((x) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (42:22): [True: 30.3k, False: 0]
  |  |  |  |  |  Branch (42:38): [True: 0, False: 30.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISALNUM(x)  (ISDIGIT(x) || ISLOWER(x) || ISUPPER(x))
  |  |  ------------------
  |  |  |  |   41|  60.7k|#define ISLOWER(x)  (((x) >= 'a') && ((x) <= 'z'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (41:22): [True: 25.2k, False: 5.05k]
  |  |  |  |  |  Branch (41:38): [True: 25.2k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISALNUM(x)  (ISDIGIT(x) || ISLOWER(x) || ISUPPER(x))
  |  |  ------------------
  |  |  |  |   40|  5.05k|#define ISUPPER(x)  (((x) >= 'A') && ((x) <= 'Z'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:22): [True: 0, False: 5.05k]
  |  |  |  |  |  Branch (40:38): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (210:10): [True: 30.3k, False: 0]
  |  Branch (210:30): [True: 0, False: 5.05k]
  |  Branch (210:44): [True: 0, False: 5.05k]
  |  Branch (210:58): [True: 0, False: 5.05k]
  ------------------
  211|       |        /* RFC 3986 3.1 explains:
  212|       |           scheme      = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
  213|       |         */
  214|  25.2k|      }
  215|  5.05k|      else {
  216|  5.05k|        break;
  217|  5.05k|      }
  218|  30.3k|    }
  219|  5.05k|  if(i && (url[i] == ':') && ((url[i + 1] == '/') || !guess_scheme)) {
  ------------------
  |  Branch (219:6): [True: 5.05k, False: 0]
  |  Branch (219:11): [True: 5.05k, False: 0]
  |  Branch (219:31): [True: 5.05k, False: 0]
  |  Branch (219:54): [True: 0, False: 0]
  ------------------
  220|       |    /* If this does not guess scheme, the scheme always ends with the colon so
  221|       |       that this also detects data: URLs etc. In guessing mode, data: could
  222|       |       be the hostname "data" with a specified port number. */
  223|       |
  224|       |    /* the length of the scheme is the name part only */
  225|  5.05k|    size_t len = i;
  226|  5.05k|    if(buf) {
  ------------------
  |  Branch (226:8): [True: 2.52k, False: 2.53k]
  ------------------
  227|  2.52k|      Curl_strntolower(buf, url, i);
  228|  2.52k|      buf[i] = 0;
  229|  2.52k|    }
  230|  5.05k|    return len;
  231|  5.05k|  }
  232|      0|  return 0;
  233|  5.05k|}
Curl_junkscan:
  237|  2.53k|{
  238|  2.53k|  size_t n = strlen(url);
  239|  2.53k|  size_t i;
  240|  2.53k|  unsigned char control;
  241|  2.53k|  const unsigned char *p = (const unsigned char *)url;
  242|  2.53k|  if(n > CURL_MAX_INPUT_LENGTH)
  ------------------
  |  |   45|  2.53k|#define CURL_MAX_INPUT_LENGTH 8000000
  ------------------
  |  Branch (242:6): [True: 0, False: 2.53k]
  ------------------
  243|      0|    return CURLUE_MALFORMED_INPUT;
  244|       |
  245|  2.53k|  control = allowspace ? 0x1f : 0x20;
  ------------------
  |  Branch (245:13): [True: 0, False: 2.53k]
  ------------------
  246|  1.59M|  for(i = 0; i < n; i++) {
  ------------------
  |  Branch (246:14): [True: 1.58M, False: 2.52k]
  ------------------
  247|  1.58M|    if(p[i] <= control || p[i] == 127)
  ------------------
  |  Branch (247:8): [True: 19, False: 1.58M]
  |  Branch (247:27): [True: 0, False: 1.58M]
  ------------------
  248|     19|      return CURLUE_MALFORMED_INPUT;
  249|  1.58M|  }
  250|  2.52k|  *urllen = n;
  251|  2.52k|  return CURLUE_OK;
  252|  2.53k|}
parse_hostname_login:
  272|  2.50k|{
  273|  2.50k|  CURLUcode ures = CURLUE_OK;
  274|  2.50k|  CURLcode result;
  275|  2.50k|  char *userp = NULL;
  276|  2.50k|  char *passwdp = NULL;
  277|  2.50k|  char *optionsp = NULL;
  278|  2.50k|  const struct Curl_scheme *h = NULL;
  279|       |
  280|       |  /* At this point, we assume all the other special cases have been taken
  281|       |   * care of, so the host is at most
  282|       |   *
  283|       |   *   [user[:password][;options]]@]hostname
  284|       |   *
  285|       |   * We need somewhere to put the embedded details, so do that first.
  286|       |   */
  287|  2.50k|  const char *ptr;
  288|       |
  289|  2.50k|  DEBUGASSERT(login);
  ------------------
  |  | 1075|  2.50k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (289:3): [True: 0, False: 2.50k]
  |  Branch (289:3): [True: 2.50k, False: 0]
  ------------------
  290|       |
  291|  2.50k|  *hostname_offset = 0;
  292|  2.50k|  ptr = memchr(login, '@', len);
  293|  2.50k|  if(!ptr)
  ------------------
  |  Branch (293:6): [True: 2.45k, False: 52]
  ------------------
  294|  2.45k|    goto out;
  295|       |
  296|       |  /* We will now try to extract the
  297|       |   * possible login information in a string like:
  298|       |   * ftp://user:password@ftp.site.example:8021/README */
  299|     52|  ptr++;
  300|       |
  301|       |  /* if this is a known scheme, get some details */
  302|     52|  if(u->scheme)
  ------------------
  |  Branch (302:6): [True: 52, False: 0]
  ------------------
  303|     52|    h = Curl_get_scheme(u->scheme);
  304|       |
  305|       |  /* We could use the login information in the URL so extract it. Only parse
  306|       |     options if the handler says we should. Note that 'h' might be NULL! */
  307|     52|  result = Curl_parse_login_details(login, ptr - login - 1,
  308|     52|                                    &userp, &passwdp,
  309|     52|                                    (h && (h->flags & PROTOPT_URLOPTIONS)) ?
  ------------------
  |  |  224|     52|#define PROTOPT_URLOPTIONS (1 << 10) /* allow options part in the userinfo
  ------------------
  |  Branch (309:38): [True: 52, False: 0]
  |  Branch (309:43): [True: 0, False: 52]
  ------------------
  310|     52|                                    &optionsp : NULL);
  311|     52|  if(result) {
  ------------------
  |  Branch (311:6): [True: 0, False: 52]
  ------------------
  312|       |    /* the only possible error from Curl_parse_login_details is out of
  313|       |       memory: */
  314|      0|    ures = CURLUE_OUT_OF_MEMORY;
  315|      0|    goto out;
  316|      0|  }
  317|       |
  318|     52|  if(userp) {
  ------------------
  |  Branch (318:6): [True: 52, False: 0]
  ------------------
  319|     52|    if(flags & CURLU_DISALLOW_USER) {
  ------------------
  |  |   93|     52|#define CURLU_DISALLOW_USER (1 << 5)      /* no user+password allowed */
  ------------------
  |  Branch (319:8): [True: 0, False: 52]
  ------------------
  320|       |      /* Option DISALLOW_USER is set and URL contains username. */
  321|      0|      ures = CURLUE_USER_NOT_ALLOWED;
  322|      0|      goto out;
  323|      0|    }
  324|     52|    curlx_free(u->user);
  ------------------
  |  | 1476|     52|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  325|     52|    u->user = userp;
  326|     52|  }
  327|       |
  328|     52|  if(passwdp) {
  ------------------
  |  Branch (328:6): [True: 8, False: 44]
  ------------------
  329|      8|    curlx_strzero(u->password);
  330|      8|    curlx_free(u->password);
  ------------------
  |  | 1476|      8|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  331|      8|    u->password = passwdp;
  332|      8|  }
  333|       |
  334|     52|  if(optionsp) {
  ------------------
  |  Branch (334:6): [True: 0, False: 52]
  ------------------
  335|      0|    curlx_free(u->options);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  336|      0|    u->options = optionsp;
  337|      0|  }
  338|       |
  339|       |  /* the hostname starts at this offset */
  340|     52|  *hostname_offset = ptr - login;
  341|     52|  return CURLUE_OK;
  342|       |
  343|  2.45k|out:
  344|       |
  345|  2.45k|  curlx_free(userp);
  ------------------
  |  | 1476|  2.45k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  346|  2.45k|  curlx_strzero(passwdp);
  347|  2.45k|  curlx_free(passwdp);
  ------------------
  |  | 1476|  2.45k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  348|  2.45k|  curlx_free(optionsp);
  ------------------
  |  | 1476|  2.45k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  349|  2.45k|  curlx_safefree(u->user);
  ------------------
  |  | 1332|  2.45k|  do {                      \
  |  | 1333|  2.45k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  2.45k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.45k|    (ptr) = NULL;           \
  |  | 1335|  2.45k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.45k]
  |  |  ------------------
  ------------------
  350|  2.45k|  curlx_strzero(u->password);
  351|  2.45k|  curlx_safefree(u->password);
  ------------------
  |  | 1332|  2.45k|  do {                      \
  |  | 1333|  2.45k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  2.45k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.45k|    (ptr) = NULL;           \
  |  | 1335|  2.45k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.45k]
  |  |  ------------------
  ------------------
  352|  2.45k|  curlx_safefree(u->options);
  ------------------
  |  | 1332|  2.45k|  do {                      \
  |  | 1333|  2.45k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  2.45k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.45k|    (ptr) = NULL;           \
  |  | 1335|  2.45k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.45k]
  |  |  ------------------
  ------------------
  353|       |
  354|  2.45k|  return ures;
  355|     52|}
parse_port:
  362|  2.50k|{
  363|  2.50k|  const char *portptr;
  364|  2.50k|  const char *hostname = curlx_dyn_ptr(host);
  365|       |  /*
  366|       |   * Find the end of an IPv6 address on the ']' ending bracket.
  367|       |   */
  368|  2.50k|  u->portnum = 0;
  369|  2.50k|  u->port_present = FALSE;
  ------------------
  |  | 1048|  2.50k|#define FALSE false
  ------------------
  370|  2.50k|  if(hostname[0] == '[') {
  ------------------
  |  Branch (370:6): [True: 121, False: 2.38k]
  ------------------
  371|    121|    portptr = strchr(hostname, ']');
  372|    121|    if(!portptr)
  ------------------
  |  Branch (372:8): [True: 4, False: 117]
  ------------------
  373|      4|      return CURLUE_BAD_IPV6;
  374|    117|    portptr++;
  375|       |    /* this is a RFC2732-style specified IP-address */
  376|    117|    if(*portptr) {
  ------------------
  |  Branch (376:8): [True: 5, False: 112]
  ------------------
  377|      5|      if(*portptr != ':')
  ------------------
  |  Branch (377:10): [True: 4, False: 1]
  ------------------
  378|      4|        return CURLUE_BAD_PORT_NUMBER;
  379|      5|    }
  380|    112|    else
  381|    112|      portptr = NULL;
  382|    117|  }
  383|  2.38k|  else
  384|  2.38k|    portptr = strchr(hostname, ':');
  385|       |
  386|  2.49k|  if(portptr) {
  ------------------
  |  Branch (386:6): [True: 62, False: 2.43k]
  ------------------
  387|     62|    curl_off_t port;
  388|     62|    size_t keep = portptr - hostname;
  389|     62|    int rc;
  390|       |
  391|       |    /* Browser behavior adaptation. If there is a colon with no digits after,
  392|       |       cut off the name there which makes us ignore the colon and use the
  393|       |       default port. Firefox, Chrome and Safari all do that.
  394|       |
  395|       |       Do not do it if the URL has no scheme, to make something that looks like
  396|       |       a scheme not work! */
  397|     62|    curlx_dyn_setlen(host, keep);
  398|     62|    portptr++;
  399|     62|    if(!*portptr)
  ------------------
  |  Branch (399:8): [True: 12, False: 50]
  ------------------
  400|     12|      return has_scheme ? CURLUE_OK : CURLUE_BAD_PORT_NUMBER;
  ------------------
  |  Branch (400:14): [True: 12, False: 0]
  ------------------
  401|     50|    if(*portptr == '\\')
  ------------------
  |  Branch (401:8): [True: 1, False: 49]
  ------------------
  402|      1|      return CURLUE_BACKSLASH;
  403|     49|    rc = curlx_str_number(&portptr, &port, 0xffff);
  404|     49|    if(rc)
  ------------------
  |  Branch (404:8): [True: 11, False: 38]
  ------------------
  405|     11|      return CURLUE_BAD_PORT_NUMBER;
  406|     38|    else if(*portptr == '\\')
  ------------------
  |  Branch (406:13): [True: 1, False: 37]
  ------------------
  407|      1|      return CURLUE_BACKSLASH;
  408|     37|    else if(*portptr)
  ------------------
  |  Branch (408:13): [True: 8, False: 29]
  ------------------
  409|      8|      return CURLUE_BAD_PORT_NUMBER;
  410|       |
  411|     29|    u->portnum = (uint16_t)port;
  412|     29|    u->port_present = TRUE;
  ------------------
  |  | 1045|     29|#define TRUE true
  ------------------
  413|     29|  }
  414|       |
  415|  2.46k|  return CURLUE_OK;
  416|  2.49k|}
ipv6_parse:
  427|    121|{
  428|    121|  size_t len;
  429|    121|  DEBUGASSERT(*hostname == '[');
  ------------------
  |  | 1075|    121|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (429:3): [True: 0, False: 121]
  |  Branch (429:3): [True: 121, False: 0]
  ------------------
  430|    121|  if(hlen < 4) /* '[::]' is the shortest possible valid string */
  ------------------
  |  Branch (430:6): [True: 1, False: 120]
  ------------------
  431|      1|    return CURLUE_BAD_IPV6;
  432|    120|  hostname++;
  433|    120|  hlen -= 2;
  434|       |
  435|       |  /* only valid IPv6 letters are ok */
  436|    120|  len = strspn(hostname, "0123456789abcdefABCDEF:.");
  437|       |
  438|    120|  if(hlen != len) {
  ------------------
  |  Branch (438:6): [True: 28, False: 92]
  ------------------
  439|     28|    hlen = len;
  440|     28|    if(hostname[len] == '%') {
  ------------------
  |  Branch (440:8): [True: 21, False: 7]
  ------------------
  441|       |      /* this could now be '%[zone id]' */
  442|     21|      char zoneid[MAX_ZONEID_LEN];
  443|     21|      int i = 0;
  444|     21|      char *h = &hostname[len + 1];
  445|       |      /* pass '25' if present and is a URL encoded percent sign */
  446|     21|      if(!strncmp(h, "25", 2) && h[2] && (h[2] != ']'))
  ------------------
  |  Branch (446:10): [True: 0, False: 21]
  |  Branch (446:34): [True: 0, False: 0]
  |  Branch (446:42): [True: 0, False: 0]
  ------------------
  447|      0|        h += 2;
  448|    146|      while(*h && (*h != ']') && (i < (MAX_ZONEID_LEN - 1)))
  ------------------
  |  |   56|    130|#define MAX_ZONEID_LEN 16
  ------------------
  |  Branch (448:13): [True: 145, False: 1]
  |  Branch (448:19): [True: 130, False: 15]
  |  Branch (448:34): [True: 125, False: 5]
  ------------------
  449|    125|        zoneid[i++] = *h++;
  450|     21|      if(!i || (']' != *h))
  ------------------
  |  Branch (450:10): [True: 1, False: 20]
  |  Branch (450:16): [True: 6, False: 14]
  ------------------
  451|      7|        return CURLUE_BAD_IPV6;
  452|     14|      zoneid[i] = 0;
  453|     14|      u->zoneid = curlx_strdup(zoneid);
  ------------------
  |  | 1470|     14|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
  454|     14|      if(!u->zoneid)
  ------------------
  |  Branch (454:10): [True: 0, False: 14]
  ------------------
  455|      0|        return CURLUE_OUT_OF_MEMORY;
  456|     14|      hostname[len] = ']'; /* insert end bracket */
  457|     14|      hostname[len + 1] = 0; /* terminate the hostname */
  458|     14|    }
  459|      7|    else
  460|      7|      return CURLUE_BAD_IPV6;
  461|       |    /* hostname is fine */
  462|     28|  }
  463|       |
  464|       |  /* Normalize the IPv6 address */
  465|    106|  {
  466|    106|    char dest[16]; /* fits a binary IPv6 address */
  467|    106|    hostname[hlen] = 0; /* end the address there */
  468|    106|    if(curlx_inet_pton(AF_INET6, hostname, dest) != 1)
  ------------------
  |  Branch (468:8): [True: 56, False: 50]
  ------------------
  469|     56|      return CURLUE_BAD_IPV6;
  470|     50|    if(!curlx_inet_ntop(AF_INET6, dest, hostname, hlen + 1)) {
  ------------------
  |  Branch (470:8): [True: 41, False: 9]
  ------------------
  471|     41|      hlen = strlen(hostname); /* might be shorter now */
  472|     41|      hostname[hlen + 1] = 0;
  473|     41|    }
  474|     50|    hostname[hlen] = ']'; /* restore ending bracket */
  475|     50|  }
  476|      0|  return CURLUE_OK;
  477|    106|}
ipv4_normalize:
  525|  2.45k|{
  526|  2.45k|  bool done = FALSE;
  ------------------
  |  | 1048|  2.45k|#define FALSE false
  ------------------
  527|  2.45k|  int n = 0;
  528|  2.45k|  const char *c = curlx_dyn_ptr(host);
  529|  2.45k|  unsigned int parts[4] = { 0, 0, 0, 0 };
  530|  2.45k|  CURLcode result = CURLE_OK;
  531|       |
  532|  2.45k|  if(*c == '[')
  ------------------
  |  Branch (532:6): [True: 121, False: 2.33k]
  ------------------
  533|    121|    return HOST_IPV6;
  ------------------
  |  |   50|    121|#define HOST_IPV6    3
  ------------------
  534|       |
  535|  4.46k|  while(!done) {
  ------------------
  |  Branch (535:9): [True: 3.54k, False: 925]
  ------------------
  536|  3.54k|    int rc;
  537|  3.54k|    curl_off_t l;
  538|  3.54k|    if(*c == '0') {
  ------------------
  |  Branch (538:8): [True: 661, False: 2.88k]
  ------------------
  539|    661|      if(Curl_raw_tolower(c[1]) == 'x') {
  ------------------
  |  Branch (539:10): [True: 12, False: 649]
  ------------------
  540|     12|        c += 2; /* skip the prefix */
  541|     12|        rc = curlx_str_hex(&c, &l, UINT_MAX);
  542|     12|        if(rc)
  ------------------
  |  Branch (542:12): [True: 7, False: 5]
  ------------------
  543|      7|          return HOST_NAME;
  ------------------
  |  |   48|      7|#define HOST_NAME    1
  ------------------
  544|     12|      }
  545|    649|      else
  546|    649|        rc = curlx_str_octal(&c, &l, UINT_MAX);
  547|    661|    }
  548|  2.88k|    else
  549|  2.88k|      rc = curlx_str_number(&c, &l, UINT_MAX);
  550|       |
  551|  3.53k|    if(rc) {
  ------------------
  |  Branch (551:8): [True: 1.36k, False: 2.16k]
  ------------------
  552|  1.36k|      if(!n || (rc != STRE_NO_NUM) || *c)
  ------------------
  |  |   36|    192|#define STRE_NO_NUM   8
  ------------------
  |  Branch (552:10): [True: 1.17k, False: 192]
  |  Branch (552:16): [True: 6, False: 186]
  |  Branch (552:39): [True: 120, False: 66]
  ------------------
  553|  1.30k|        return HOST_NAME;
  ------------------
  |  |   48|  1.30k|#define HOST_NAME    1
  ------------------
  554|     66|      n--;
  555|     66|    }
  556|  2.16k|    else
  557|  2.16k|      parts[n] = (unsigned int)l;
  558|       |
  559|  2.23k|    switch(*c) {
  560|  1.23k|    case '.':
  ------------------
  |  Branch (560:5): [True: 1.23k, False: 996]
  ------------------
  561|  1.23k|      if(n == 3) {
  ------------------
  |  Branch (561:10): [True: 25, False: 1.21k]
  ------------------
  562|     25|        if(c[1])
  ------------------
  |  Branch (562:12): [True: 19, False: 6]
  ------------------
  563|       |          /* something follows this dot */
  564|     19|          return HOST_NAME;
  ------------------
  |  |   48|     19|#define HOST_NAME    1
  ------------------
  565|      6|        done = TRUE;
  ------------------
  |  | 1045|      6|#define TRUE true
  ------------------
  566|      6|      }
  567|  1.21k|      else {
  568|  1.21k|        n++;
  569|  1.21k|        c++;
  570|  1.21k|      }
  571|  1.21k|      break;
  572|       |
  573|  1.21k|    case '\0':
  ------------------
  |  Branch (573:5): [True: 919, False: 1.31k]
  ------------------
  574|    919|      done = TRUE;
  ------------------
  |  | 1045|    919|#define TRUE true
  ------------------
  575|    919|      break;
  576|       |
  577|     77|    default:
  ------------------
  |  Branch (577:5): [True: 77, False: 2.15k]
  ------------------
  578|     77|      return HOST_NAME;
  ------------------
  |  |   48|     77|#define HOST_NAME    1
  ------------------
  579|  2.23k|    }
  580|  2.23k|  }
  581|       |
  582|    925|  switch(n) {
  ------------------
  |  Branch (582:10): [True: 925, False: 0]
  ------------------
  583|    534|  case 0: /* a -- 32 bits */
  ------------------
  |  Branch (583:3): [True: 534, False: 391]
  ------------------
  584|    534|    curlx_dyn_reset(host);
  585|       |
  586|    534|    result = curlx_dyn_addf(host, "%u.%u.%u.%u",
  587|    534|                            (parts[0] >> 24),
  588|    534|                            ((parts[0] >> 16) & 0xff),
  589|    534|                            ((parts[0] >> 8) & 0xff),
  590|    534|                            (parts[0] & 0xff));
  591|    534|    break;
  592|    104|  case 1: /* a.b -- 8.24 bits */
  ------------------
  |  Branch (592:3): [True: 104, False: 821]
  ------------------
  593|    104|    if((parts[0] > 0xff) || (parts[1] > 0xffffff))
  ------------------
  |  Branch (593:8): [True: 31, False: 73]
  |  Branch (593:29): [True: 5, False: 68]
  ------------------
  594|     36|      return HOST_NAME;
  ------------------
  |  |   48|     36|#define HOST_NAME    1
  ------------------
  595|     68|    curlx_dyn_reset(host);
  596|     68|    result = curlx_dyn_addf(host, "%u.%u.%u.%u",
  597|     68|                            parts[0],
  598|     68|                            ((parts[1] >> 16) & 0xff),
  599|     68|                            ((parts[1] >> 8) & 0xff),
  600|     68|                            (parts[1] & 0xff));
  601|     68|    break;
  602|    117|  case 2: /* a.b.c -- 8.8.16 bits */
  ------------------
  |  Branch (602:3): [True: 117, False: 808]
  ------------------
  603|    117|    if((parts[0] > 0xff) || (parts[1] > 0xff) || (parts[2] > 0xffff))
  ------------------
  |  Branch (603:8): [True: 23, False: 94]
  |  Branch (603:29): [True: 21, False: 73]
  |  Branch (603:50): [True: 10, False: 63]
  ------------------
  604|     54|      return HOST_NAME;
  ------------------
  |  |   48|     54|#define HOST_NAME    1
  ------------------
  605|     63|    curlx_dyn_reset(host);
  606|     63|    result = curlx_dyn_addf(host, "%u.%u.%u.%u",
  607|     63|                            parts[0],
  608|     63|                            parts[1],
  609|     63|                            ((parts[2] >> 8) & 0xff),
  610|     63|                            (parts[2] & 0xff));
  611|     63|    break;
  612|    170|  case 3: /* a.b.c.d -- 8.8.8.8 bits */
  ------------------
  |  Branch (612:3): [True: 170, False: 755]
  ------------------
  613|    170|    if((parts[0] > 0xff) || (parts[1] > 0xff) || (parts[2] > 0xff) ||
  ------------------
  |  Branch (613:8): [True: 15, False: 155]
  |  Branch (613:29): [True: 17, False: 138]
  |  Branch (613:50): [True: 18, False: 120]
  ------------------
  614|    120|       (parts[3] > 0xff))
  ------------------
  |  Branch (614:8): [True: 16, False: 104]
  ------------------
  615|     66|      return HOST_NAME;
  ------------------
  |  |   48|     66|#define HOST_NAME    1
  ------------------
  616|    104|    curlx_dyn_reset(host);
  617|    104|    result = curlx_dyn_addf(host, "%u.%u.%u.%u",
  618|    104|                            parts[0],
  619|    104|                            parts[1],
  620|    104|                            parts[2],
  621|    104|                            parts[3]);
  622|    104|    break;
  623|    925|  }
  624|    769|  if(result)
  ------------------
  |  Branch (624:6): [True: 0, False: 769]
  ------------------
  625|      0|    return HOST_ERROR;
  ------------------
  |  |   47|      0|#define HOST_ERROR   (-1) /* out of memory */
  ------------------
  626|    769|  return HOST_IPV4;
  ------------------
  |  |   49|    769|#define HOST_IPV4    2
  ------------------
  627|    769|}
dedotdotify:
  794|    574|{
  795|    574|  struct dynbuf out;
  796|    574|  CURLcode result = CURLE_OK;
  797|       |
  798|       |  /* variables for leading dot checks */
  799|    574|  const char *dinput = input;
  800|    574|  size_t dlen = clen;
  801|       |
  802|    574|  *outp = NULL;
  803|    574|  if(!needs_dedotdot(input, clen))
  ------------------
  |  Branch (803:6): [True: 229, False: 345]
  ------------------
  804|    229|    return 0;
  805|       |
  806|    345|  curlx_dyn_init(&out, clen + 1);
  807|       |
  808|       |  /* if the input buffer begins with a prefix of "../" or "./", then remove
  809|       |     that prefix from the input buffer; otherwise, */
  810|    345|  if(is_dot(&dinput, &dlen)) {
  ------------------
  |  Branch (810:6): [True: 0, False: 345]
  ------------------
  811|      0|    if(ISSLASH(*dinput)) {
  ------------------
  |  |  751|      0|#define ISSLASH(x) ((x) == '/')
  |  |  ------------------
  |  |  |  Branch (751:20): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  812|       |      /* one dot followed by a slash */
  813|      0|      input = dinput + 1;
  814|      0|      clen = dlen - 1;
  815|      0|    }
  816|       |
  817|       |    /* if the input buffer consists only of "." or "..", then remove
  818|       |       that from the input buffer; otherwise, */
  819|      0|    else if(is_dot(&dinput, &dlen)) {
  ------------------
  |  Branch (819:13): [True: 0, False: 0]
  ------------------
  820|      0|      if(!dlen)
  ------------------
  |  Branch (820:10): [True: 0, False: 0]
  ------------------
  821|       |        /* .. [end] */
  822|      0|        goto end;
  823|      0|      else if(ISSLASH(*dinput)) {
  ------------------
  |  |  751|      0|#define ISSLASH(x) ((x) == '/')
  |  |  ------------------
  |  |  |  Branch (751:20): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  824|       |        /* ../ */
  825|      0|        input = dinput + 1;
  826|      0|        clen = dlen - 1;
  827|      0|      }
  828|      0|    }
  829|      0|  }
  830|       |
  831|   762k|  while(clen && !result) { /* until end of path content */
  ------------------
  |  Branch (831:9): [True: 762k, False: 325]
  |  Branch (831:17): [True: 762k, False: 0]
  ------------------
  832|   762k|    if(ISSLASH(*input)) {
  ------------------
  |  |  751|   762k|#define ISSLASH(x) ((x) == '/')
  |  |  ------------------
  |  |  |  Branch (751:20): [True: 136k, False: 625k]
  |  |  ------------------
  ------------------
  833|   136k|      const char *p = &input[1];
  834|   136k|      size_t blen = clen - 1;
  835|       |      /* if the input buffer begins with a prefix of "/./" or "/.", where "."
  836|       |         is a complete path segment, then replace that prefix with "/" in the
  837|       |         input buffer; otherwise, */
  838|   136k|      if(is_dot(&p, &blen)) {
  ------------------
  |  Branch (838:10): [True: 58.7k, False: 78.1k]
  ------------------
  839|  58.7k|        if(!blen) { /* /. */
  ------------------
  |  Branch (839:12): [True: 9, False: 58.7k]
  ------------------
  840|      9|          result = curlx_dyn_addn(&out, "/", 1);
  841|      9|          break;
  842|      9|        }
  843|  58.7k|        else if(ISSLASH(*p)) { /* /./ */
  ------------------
  |  |  751|  58.7k|#define ISSLASH(x) ((x) == '/')
  |  |  ------------------
  |  |  |  Branch (751:20): [True: 2.36k, False: 56.3k]
  |  |  ------------------
  ------------------
  844|  2.36k|          input = p;
  845|  2.36k|          clen = blen;
  846|  2.36k|          continue;
  847|  2.36k|        }
  848|       |
  849|       |        /* if the input buffer begins with a prefix of "/../" or "/..", where
  850|       |           ".." is a complete path segment, then replace that prefix with "/"
  851|       |           in the input buffer and remove the last segment and its preceding
  852|       |           "/" (if any) from the output buffer; otherwise, */
  853|  56.3k|        else if(is_dot(&p, &blen) && (ISSLASH(*p) || !blen)) {
  ------------------
  |  |  751|  36.0k|#define ISSLASH(x) ((x) == '/')
  |  |  ------------------
  |  |  |  Branch (751:20): [True: 14.2k, False: 3.76k]
  |  |  ------------------
  ------------------
  |  Branch (853:17): [True: 18.0k, False: 38.3k]
  |  Branch (853:54): [True: 11, False: 3.75k]
  ------------------
  854|       |          /* remove the last segment from the output buffer */
  855|  14.2k|          size_t len = curlx_dyn_len(&out);
  856|  14.2k|          if(len) {
  ------------------
  |  Branch (856:14): [True: 12.4k, False: 1.86k]
  ------------------
  857|  12.4k|            const char *ptr = curlx_dyn_ptr(&out);
  858|  12.4k|            const char *last = memrchr(ptr, '/', len);
  859|  12.4k|            if(last)
  ------------------
  |  Branch (859:16): [True: 12.4k, False: 0]
  ------------------
  860|       |              /* trim the output at the slash */
  861|  12.4k|              curlx_dyn_setlen(&out, last - ptr);
  862|  12.4k|          }
  863|       |
  864|  14.2k|          if(blen) { /* /../ */
  ------------------
  |  Branch (864:14): [True: 14.2k, False: 11]
  ------------------
  865|  14.2k|            input = p;
  866|  14.2k|            clen = blen;
  867|  14.2k|            continue;
  868|  14.2k|          }
  869|     11|          result = curlx_dyn_addn(&out, "/", 1);
  870|     11|          break;
  871|  14.2k|        }
  872|  58.7k|      }
  873|   136k|    }
  874|       |
  875|       |    /* move the first path segment in the input buffer to the end of the
  876|       |       output buffer, including the initial "/" character (if any) and any
  877|       |       subsequent characters up to, but not including, the next "/" character
  878|       |       or the end of the input buffer. */
  879|       |
  880|   745k|    result = curlx_dyn_addn(&out, input, 1);
  881|   745k|    input++;
  882|   745k|    clen--;
  883|   745k|  }
  884|    345|end:
  885|    345|  if(!result) {
  ------------------
  |  Branch (885:6): [True: 345, False: 0]
  ------------------
  886|    345|    if(curlx_dyn_len(&out))
  ------------------
  |  Branch (886:8): [True: 345, False: 0]
  ------------------
  887|    345|      *outp = curlx_dyn_ptr(&out);
  888|      0|    else {
  889|      0|      *outp = curlx_strdup("");
  ------------------
  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
  890|      0|      if(!*outp)
  ------------------
  |  Branch (890:10): [True: 0, False: 0]
  ------------------
  891|      0|        return 1;
  892|      0|    }
  893|    345|  }
  894|    345|  return result ? 1 : 0; /* success */
  ------------------
  |  Branch (894:10): [True: 0, False: 345]
  ------------------
  895|    345|}
curl_url:
 1358|  2.53k|{
 1359|  2.53k|  return curlx_calloc(1, sizeof(struct Curl_URL));
  ------------------
  |  | 1473|  2.53k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
 1360|  2.53k|}
curl_url_cleanup:
 1363|  7.61k|{
 1364|  7.61k|  if(u) {
  ------------------
  |  Branch (1364:6): [True: 2.53k, False: 5.07k]
  ------------------
 1365|  2.53k|    free_urlhandle(u);
 1366|  2.53k|    curlx_free(u);
  ------------------
  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1367|  2.53k|  }
 1368|  7.61k|}
curl_url_get:
 1625|  18.7k|{
 1626|  18.7k|  const char *ptr;
 1627|  18.7k|  CURLUcode ifmissing = CURLUE_UNKNOWN_PART;
 1628|  18.7k|  char portbuf[7];
 1629|  18.7k|  bool plusdecode = FALSE;
  ------------------
  |  | 1048|  18.7k|#define FALSE false
  ------------------
 1630|  18.7k|  if(!u)
  ------------------
  |  Branch (1630:6): [True: 0, False: 18.7k]
  ------------------
 1631|      0|    return CURLUE_BAD_HANDLE;
 1632|  18.7k|  if(!part)
  ------------------
  |  Branch (1632:6): [True: 0, False: 18.7k]
  ------------------
 1633|      0|    return CURLUE_BAD_PARTPOINTER;
 1634|  18.7k|  *part = NULL;
 1635|       |
 1636|  18.7k|  switch(what) {
 1637|  2.18k|  case CURLUPART_SCHEME:
  ------------------
  |  Branch (1637:3): [True: 2.18k, False: 16.6k]
  ------------------
 1638|  2.18k|    ptr = u->scheme;
 1639|  2.18k|    ifmissing = CURLUE_NO_SCHEME;
 1640|  2.18k|    flags &= ~U_CURLU_URLDECODE; /* never for schemes */
  ------------------
  |  |   63|  2.18k|#define U_CURLU_URLDECODE  (unsigned int)CURLU_URLDECODE
  |  |  ------------------
  |  |  |  |   94|  2.18k|#define CURLU_URLDECODE (1 << 6)          /* URL decode on get */
  |  |  ------------------
  ------------------
 1641|  2.18k|    if((flags & CURLU_NO_GUESS_SCHEME) && u->guessed_scheme)
  ------------------
  |  |  106|  2.18k|#define CURLU_NO_GUESS_SCHEME (1 << 15)   /* for get, do not accept a guess */
  ------------------
  |  Branch (1641:8): [True: 0, False: 2.18k]
  |  Branch (1641:43): [True: 0, False: 0]
  ------------------
 1642|      0|      return CURLUE_NO_SCHEME;
 1643|  2.18k|    break;
 1644|  2.18k|  case CURLUPART_USER:
  ------------------
  |  Branch (1644:3): [True: 1.99k, False: 16.8k]
  ------------------
 1645|  1.99k|    ptr = u->user;
 1646|  1.99k|    ifmissing = CURLUE_NO_USER;
 1647|  1.99k|    break;
 1648|  1.99k|  case CURLUPART_PASSWORD:
  ------------------
  |  Branch (1648:3): [True: 1.99k, False: 16.8k]
  ------------------
 1649|  1.99k|    ptr = u->password;
 1650|  1.99k|    ifmissing = CURLUE_NO_PASSWORD;
 1651|  1.99k|    break;
 1652|  2.06k|  case CURLUPART_OPTIONS:
  ------------------
  |  Branch (1652:3): [True: 2.06k, False: 16.7k]
  ------------------
 1653|  2.06k|    ptr = u->options;
 1654|  2.06k|    ifmissing = CURLUE_NO_OPTIONS;
 1655|  2.06k|    break;
 1656|  2.18k|  case CURLUPART_HOST:
  ------------------
  |  Branch (1656:3): [True: 2.18k, False: 16.6k]
  ------------------
 1657|  2.18k|    ptr = u->host;
 1658|  2.18k|    ifmissing = CURLUE_NO_HOST;
 1659|  2.18k|    break;
 1660|  2.06k|  case CURLUPART_ZONEID:
  ------------------
  |  Branch (1660:3): [True: 2.06k, False: 16.7k]
  ------------------
 1661|  2.06k|    ptr = u->zoneid;
 1662|  2.06k|    ifmissing = CURLUE_NO_ZONEID;
 1663|  2.06k|    break;
 1664|      0|  case CURLUPART_PORT:
  ------------------
  |  Branch (1664:3): [True: 0, False: 18.7k]
  ------------------
 1665|      0|    ptr = NULL;
 1666|      0|    ifmissing = CURLUE_NO_PORT;
 1667|      0|    flags &= ~U_CURLU_URLDECODE; /* never for port */
  ------------------
  |  |   63|      0|#define U_CURLU_URLDECODE  (unsigned int)CURLU_URLDECODE
  |  |  ------------------
  |  |  |  |   94|      0|#define CURLU_URLDECODE (1 << 6)          /* URL decode on get */
  |  |  ------------------
  ------------------
 1668|      0|    if(u->port_present) {
  ------------------
  |  Branch (1668:8): [True: 0, False: 0]
  ------------------
 1669|      0|      const struct Curl_scheme *h = u->scheme ?
  ------------------
  |  Branch (1669:37): [True: 0, False: 0]
  ------------------
 1670|      0|                                    Curl_get_scheme(u->scheme) : NULL;
 1671|       |      /* there is a stored port number, but ask to inhibit if
 1672|       |         it matches the default one for the scheme */
 1673|      0|      if(h && (h->defport == u->portnum) &&
  ------------------
  |  Branch (1673:10): [True: 0, False: 0]
  |  Branch (1673:15): [True: 0, False: 0]
  ------------------
 1674|      0|         (flags & CURLU_NO_DEFAULT_PORT)) {
  ------------------
  |  |   86|      0|#define CURLU_NO_DEFAULT_PORT (1 << 1)    /* act as if no port number was set,
  ------------------
  |  Branch (1674:10): [True: 0, False: 0]
  ------------------
 1675|      0|        ptr = NULL;
 1676|      0|      }
 1677|      0|      else {
 1678|      0|        curl_msnprintf(portbuf, sizeof(portbuf), "%u", u->portnum);
 1679|      0|        ptr = portbuf;
 1680|      0|      }
 1681|      0|    }
 1682|      0|    else if((flags & CURLU_DEFAULT_PORT) && u->scheme) {
  ------------------
  |  |   85|      0|#define CURLU_DEFAULT_PORT (1 << 0)       /* return default port number */
  ------------------
  |  Branch (1682:13): [True: 0, False: 0]
  |  Branch (1682:45): [True: 0, False: 0]
  ------------------
 1683|       |      /* there is no stored port number, but asked to deliver
 1684|       |         a default one for the scheme */
 1685|      0|      const struct Curl_scheme *h = Curl_get_scheme(u->scheme);
 1686|      0|      if(h) {
  ------------------
  |  Branch (1686:10): [True: 0, False: 0]
  ------------------
 1687|      0|        curl_msnprintf(portbuf, sizeof(portbuf), "%u", h->defport);
 1688|      0|        ptr = portbuf;
 1689|      0|      }
 1690|      0|    }
 1691|      0|    break;
 1692|  2.06k|  case CURLUPART_PATH:
  ------------------
  |  Branch (1692:3): [True: 2.06k, False: 16.7k]
  ------------------
 1693|  2.06k|    ptr = u->path;
 1694|  2.06k|    if(!ptr)
  ------------------
  |  Branch (1694:8): [True: 1.50k, False: 559]
  ------------------
 1695|  1.50k|      ptr = "/";
 1696|  2.06k|    break;
 1697|  2.06k|  case CURLUPART_QUERY:
  ------------------
  |  Branch (1697:3): [True: 2.06k, False: 16.7k]
  ------------------
 1698|  2.06k|    ptr = u->query;
 1699|  2.06k|    ifmissing = CURLUE_NO_QUERY;
 1700|  2.06k|    plusdecode = flags & CURLU_URLDECODE;
  ------------------
  |  |   94|  2.06k|#define CURLU_URLDECODE (1 << 6)          /* URL decode on get */
  ------------------
 1701|  2.06k|    if(ptr && !ptr[0] && !(flags & CURLU_GET_EMPTY))
  ------------------
  |  |  103|      7|#define CURLU_GET_EMPTY (1 << 14)         /* allow empty queries and fragments
  ------------------
  |  Branch (1701:8): [True: 29, False: 2.03k]
  |  Branch (1701:15): [True: 7, False: 22]
  |  Branch (1701:26): [True: 0, False: 7]
  ------------------
 1702|       |      /* there was a blank query and the user does not ask for it */
 1703|      0|      ptr = NULL;
 1704|  2.06k|    break;
 1705|      0|  case CURLUPART_FRAGMENT:
  ------------------
  |  Branch (1705:3): [True: 0, False: 18.7k]
  ------------------
 1706|      0|    ptr = u->fragment;
 1707|      0|    ifmissing = CURLUE_NO_FRAGMENT;
 1708|      0|    if(!ptr && u->fragment_present && flags & CURLU_GET_EMPTY)
  ------------------
  |  |  103|      0|#define CURLU_GET_EMPTY (1 << 14)         /* allow empty queries and fragments
  ------------------
  |  Branch (1708:8): [True: 0, False: 0]
  |  Branch (1708:16): [True: 0, False: 0]
  |  Branch (1708:39): [True: 0, False: 0]
  ------------------
 1709|       |      /* there was a blank fragment and the user asks for it */
 1710|      0|      ptr = "";
 1711|      0|    break;
 1712|  2.18k|  case CURLUPART_URL:
  ------------------
  |  Branch (1712:3): [True: 2.18k, False: 16.6k]
  ------------------
 1713|  2.18k|    return urlget_url(u, part, flags);
 1714|      0|  default:
  ------------------
  |  Branch (1714:3): [True: 0, False: 18.7k]
  ------------------
 1715|      0|    ptr = NULL;
 1716|      0|    break;
 1717|  18.7k|  }
 1718|  16.6k|  if(ptr)
  ------------------
  |  Branch (1718:6): [True: 6.50k, False: 10.1k]
  ------------------
 1719|  6.50k|    return urlget_format(u, what, ptr, part, plusdecode, flags);
 1720|       |
 1721|  10.1k|  return ifmissing;
 1722|  16.6k|}
curl_url_set:
 2019|  2.53k|{
 2020|  2.53k|  char **storep = NULL;
 2021|  2.53k|  bool urlencode = (flags & CURLU_URLENCODE) ? 1 : 0;
  ------------------
  |  |   95|  2.53k|#define CURLU_URLENCODE (1 << 7)          /* URL encode on set */
  ------------------
  |  Branch (2021:20): [True: 0, False: 2.53k]
  ------------------
 2022|  2.53k|  bool plusencode = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
 2023|  2.53k|  bool pathmode = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
 2024|  2.53k|  bool leadingslash = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
 2025|  2.53k|  bool appendquery = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
 2026|  2.53k|  bool equalsencode = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
 2027|  2.53k|  size_t nalloc;
 2028|       |
 2029|  2.53k|  if(!u)
  ------------------
  |  Branch (2029:6): [True: 0, False: 2.53k]
  ------------------
 2030|      0|    return CURLUE_BAD_HANDLE;
 2031|  2.53k|  if(!part)
  ------------------
  |  Branch (2031:6): [True: 0, False: 2.53k]
  ------------------
 2032|       |    /* setting a part to NULL clears it */
 2033|      0|    return urlset_clear(u, what);
 2034|       |
 2035|  2.53k|  nalloc = strlen(part);
 2036|  2.53k|  if(nalloc > CURL_MAX_INPUT_LENGTH)
  ------------------
  |  |   45|  2.53k|#define CURL_MAX_INPUT_LENGTH 8000000
  ------------------
  |  Branch (2036:6): [True: 0, False: 2.53k]
  ------------------
 2037|       |    /* excessive input length */
 2038|      0|    return CURLUE_MALFORMED_INPUT;
 2039|       |
 2040|  2.53k|  switch(what) {
 2041|      0|  case CURLUPART_SCHEME: {
  ------------------
  |  Branch (2041:3): [True: 0, False: 2.53k]
  ------------------
 2042|      0|    CURLUcode status = set_url_scheme(u, part, flags);
 2043|      0|    if(status)
  ------------------
  |  Branch (2043:8): [True: 0, False: 0]
  ------------------
 2044|      0|      return status;
 2045|      0|    storep = &u->scheme;
 2046|      0|    urlencode = FALSE; /* never */
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 2047|      0|    break;
 2048|      0|  }
 2049|      0|  case CURLUPART_USER:
  ------------------
  |  Branch (2049:3): [True: 0, False: 2.53k]
  ------------------
 2050|      0|    storep = &u->user;
 2051|      0|    break;
 2052|      0|  case CURLUPART_PASSWORD:
  ------------------
  |  Branch (2052:3): [True: 0, False: 2.53k]
  ------------------
 2053|      0|    storep = &u->password;
 2054|      0|    break;
 2055|      0|  case CURLUPART_OPTIONS:
  ------------------
  |  Branch (2055:3): [True: 0, False: 2.53k]
  ------------------
 2056|      0|    storep = &u->options;
 2057|      0|    break;
 2058|      0|  case CURLUPART_HOST:
  ------------------
  |  Branch (2058:3): [True: 0, False: 2.53k]
  ------------------
 2059|      0|    storep = &u->host;
 2060|      0|    curlx_safefree(u->zoneid);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2061|      0|    break;
 2062|      0|  case CURLUPART_ZONEID:
  ------------------
  |  Branch (2062:3): [True: 0, False: 2.53k]
  ------------------
 2063|      0|    storep = &u->zoneid;
 2064|      0|    break;
 2065|      0|  case CURLUPART_PORT:
  ------------------
  |  Branch (2065:3): [True: 0, False: 2.53k]
  ------------------
 2066|      0|    return set_url_port(u, part);
 2067|      0|  case CURLUPART_PATH:
  ------------------
  |  Branch (2067:3): [True: 0, False: 2.53k]
  ------------------
 2068|      0|    pathmode = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 2069|      0|    leadingslash = TRUE; /* enforce */
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 2070|      0|    storep = &u->path;
 2071|      0|    break;
 2072|      0|  case CURLUPART_QUERY:
  ------------------
  |  Branch (2072:3): [True: 0, False: 2.53k]
  ------------------
 2073|      0|    plusencode = urlencode;
 2074|      0|    appendquery = (flags & CURLU_APPENDQUERY) ? 1 : 0;
  ------------------
  |  |   96|      0|#define CURLU_APPENDQUERY (1 << 8)        /* append a form style part */
  ------------------
  |  Branch (2074:19): [True: 0, False: 0]
  ------------------
 2075|      0|    equalsencode = appendquery;
 2076|      0|    storep = &u->query;
 2077|      0|    u->query_present = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 2078|      0|    break;
 2079|      0|  case CURLUPART_FRAGMENT:
  ------------------
  |  Branch (2079:3): [True: 0, False: 2.53k]
  ------------------
 2080|      0|    storep = &u->fragment;
 2081|      0|    u->fragment_present = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 2082|      0|    break;
 2083|  2.53k|  case CURLUPART_URL:
  ------------------
  |  Branch (2083:3): [True: 2.53k, False: 0]
  ------------------
 2084|  2.53k|    return set_url(u, part, nalloc, flags);
 2085|      0|  default:
  ------------------
  |  Branch (2085:3): [True: 0, False: 2.53k]
  ------------------
 2086|      0|    return CURLUE_UNKNOWN_PART;
 2087|  2.53k|  }
 2088|      0|  DEBUGASSERT(storep);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (2088:3): [True: 0, False: 0]
  |  Branch (2088:3): [True: 0, False: 0]
  ------------------
 2089|      0|  {
 2090|      0|    const char *newp = NULL;
 2091|      0|    struct dynbuf enc;
 2092|      0|    CURLUcode status;
 2093|      0|    curlx_dyn_init(&enc, (nalloc * 3) + 1 + leadingslash);
 2094|       |
 2095|      0|    if(leadingslash && (part[0] != '/')) {
  ------------------
  |  Branch (2095:8): [True: 0, False: 0]
  |  Branch (2095:24): [True: 0, False: 0]
  ------------------
 2096|      0|      CURLcode result = curlx_dyn_addn(&enc, "/", 1);
 2097|      0|      if(result)
  ------------------
  |  Branch (2097:10): [True: 0, False: 0]
  ------------------
 2098|      0|        return cc2cu(result);
  ------------------
  |  |  108|      0|  ((x) == CURLE_TOO_LARGE ? CURLUE_TOO_LARGE : CURLUE_OUT_OF_MEMORY)
  |  |  ------------------
  |  |  |  Branch (108:4): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2099|      0|    }
 2100|      0|    if(urlencode)
  ------------------
  |  Branch (2100:8): [True: 0, False: 0]
  ------------------
 2101|      0|      status = url_encode_part(&enc, part, plusencode, pathmode, equalsencode);
 2102|      0|    else
 2103|      0|      status = url_uppercasehex_part(&enc, part);
 2104|      0|    if(!status) {
  ------------------
  |  Branch (2104:8): [True: 0, False: 0]
  ------------------
 2105|      0|      newp = curlx_dyn_ptr(&enc);
 2106|       |
 2107|      0|      if(appendquery && newp)
  ------------------
  |  Branch (2107:10): [True: 0, False: 0]
  |  Branch (2107:25): [True: 0, False: 0]
  ------------------
 2108|      0|        return url_append_query(u, &enc);
 2109|      0|      else if(what == CURLUPART_HOST)
  ------------------
  |  Branch (2109:15): [True: 0, False: 0]
  ------------------
 2110|      0|        status = url_sethost(u, &enc, urlencode, flags);
 2111|      0|    }
 2112|      0|    if(status)
  ------------------
  |  Branch (2112:8): [True: 0, False: 0]
  ------------------
 2113|      0|      return status;
 2114|       |
 2115|      0|    if(what == CURLUPART_PASSWORD)
  ------------------
  |  Branch (2115:8): [True: 0, False: 0]
  ------------------
 2116|      0|      curlx_strzero(*storep);
 2117|      0|    curlx_free(*storep);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 2118|      0|    *storep = (char *)CURL_UNCONST(newp);
  ------------------
  |  |  856|      0|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
 2119|      0|  }
 2120|      0|  return CURLUE_OK;
 2121|      0|}
Curl_url_get_port:
 2159|  2.06k|{
 2160|  2.06k|  if(u->port_present) {
  ------------------
  |  Branch (2160:6): [True: 24, False: 2.04k]
  ------------------
 2161|     24|    *pport = u->portnum;
 2162|     24|    return CURLUE_OK;
 2163|     24|  }
 2164|  2.04k|  else if(u->scheme) {
  ------------------
  |  Branch (2164:11): [True: 2.04k, False: 0]
  ------------------
 2165|  2.04k|    const struct Curl_scheme *s = Curl_get_scheme(u->scheme);
 2166|  2.04k|    if(s && s->defport) {
  ------------------
  |  Branch (2166:8): [True: 2.04k, False: 0]
  |  Branch (2166:13): [True: 2.04k, False: 0]
  ------------------
 2167|  2.04k|      *pport = s->defport;
 2168|  2.04k|      return CURLUE_OK;
 2169|  2.04k|    }
 2170|  2.04k|  }
 2171|      0|  *pport = 0;
 2172|      0|  return CURLUE_NO_PORT;
 2173|  2.06k|}
urlapi.c:parse_authority:
  661|  2.50k|{
  662|  2.50k|  size_t offset;
  663|  2.50k|  CURLUcode uc;
  664|  2.50k|  CURLcode result;
  665|       |
  666|       |  /*
  667|       |   * Parse the login details and strip them out of the hostname.
  668|       |   */
  669|  2.50k|  uc = parse_hostname_login(u, auth, authlen, flags, &offset);
  670|  2.50k|  if(uc)
  ------------------
  |  Branch (670:6): [True: 0, False: 2.50k]
  ------------------
  671|      0|    return uc;
  672|       |
  673|  2.50k|  result = curlx_dyn_addn(host, auth + offset, authlen - offset);
  674|  2.50k|  if(result) {
  ------------------
  |  Branch (674:6): [True: 0, False: 2.50k]
  ------------------
  675|      0|    uc = cc2cu(result);
  ------------------
  |  |  108|      0|  ((x) == CURLE_TOO_LARGE ? CURLUE_TOO_LARGE : CURLUE_OUT_OF_MEMORY)
  |  |  ------------------
  |  |  |  Branch (108:4): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  676|      0|    return uc;
  677|      0|  }
  678|       |
  679|  2.50k|  uc = parse_port(u, host, has_scheme);
  680|       |
  681|  2.50k|  if(!curlx_dyn_len(host))
  ------------------
  |  Branch (681:6): [True: 27, False: 2.47k]
  ------------------
  682|       |    /* this makes no-host errors override port number problems */
  683|     27|    uc = CURLUE_NO_HOST;
  684|  2.50k|  if(!uc)
  ------------------
  |  Branch (684:6): [True: 2.45k, False: 45]
  ------------------
  685|  2.45k|    uc = urldecode_host(host);
  686|  2.50k|  if(uc)
  ------------------
  |  Branch (686:6): [True: 51, False: 2.45k]
  ------------------
  687|     51|    return uc;
  688|       |
  689|  2.45k|  switch(ipv4_normalize(host)) {
  690|    769|  case HOST_IPV4:
  ------------------
  |  |   49|    769|#define HOST_IPV4    2
  ------------------
  |  Branch (690:3): [True: 769, False: 1.68k]
  ------------------
  691|    769|    break;
  692|    121|  case HOST_IPV6:
  ------------------
  |  |   50|    121|#define HOST_IPV6    3
  ------------------
  |  Branch (692:3): [True: 121, False: 2.33k]
  ------------------
  693|    121|    uc = ipv6_parse(u, curlx_dyn_ptr(host), curlx_dyn_len(host));
  694|    121|    break;
  695|  1.56k|  case HOST_NAME:
  ------------------
  |  |   48|  1.56k|#define HOST_NAME    1
  ------------------
  |  Branch (695:3): [True: 1.56k, False: 890]
  ------------------
  696|  1.56k|    uc = hostname_check(u, curlx_dyn_ptr(host), curlx_dyn_len(host));
  697|  1.56k|    break;
  698|      0|  case HOST_ERROR:
  ------------------
  |  |   47|      0|#define HOST_ERROR   (-1) /* out of memory */
  ------------------
  |  Branch (698:3): [True: 0, False: 2.45k]
  ------------------
  699|      0|    uc = CURLUE_OUT_OF_MEMORY;
  700|      0|    break;
  701|      0|  default:
  ------------------
  |  Branch (701:3): [True: 0, False: 2.45k]
  ------------------
  702|      0|    uc = CURLUE_BAD_HOSTNAME; /* Bad IPv4 address even */
  703|      0|    break;
  704|  2.45k|  }
  705|       |
  706|  2.45k|  return uc;
  707|  2.45k|}
urlapi.c:urldecode_host:
  631|  2.45k|{
  632|  2.45k|  const char *per;
  633|  2.45k|  const char *hostname = curlx_dyn_ptr(host);
  634|  2.45k|  per = strchr(hostname, '%');
  635|  2.45k|  if(!per)
  ------------------
  |  Branch (635:6): [True: 2.27k, False: 184]
  ------------------
  636|       |    /* nothing to decode */
  637|  2.27k|    return CURLUE_OK;
  638|    184|  else {
  639|       |    /* encoded */
  640|    184|    size_t dlen;
  641|    184|    char *decoded;
  642|    184|    CURLcode result = Curl_urldecode(hostname, 0, &decoded, &dlen,
  643|    184|                                     REJECT_CTRL);
  644|    184|    if(result)
  ------------------
  |  Branch (644:8): [True: 6, False: 178]
  ------------------
  645|      6|      return CURLUE_BAD_HOSTNAME;
  646|    178|    curlx_dyn_reset(host);
  647|    178|    result = curlx_dyn_addn(host, decoded, dlen);
  648|    178|    curlx_free(decoded);
  ------------------
  |  | 1476|    178|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  649|    178|    if(result)
  ------------------
  |  Branch (649:8): [True: 0, False: 178]
  ------------------
  650|      0|      return cc2cu(result);
  ------------------
  |  |  108|      0|  ((x) == CURLE_TOO_LARGE ? CURLUE_TOO_LARGE : CURLUE_OUT_OF_MEMORY)
  |  |  ------------------
  |  |  |  Branch (108:4): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  651|    178|  }
  652|       |
  653|    178|  return CURLUE_OK;
  654|  2.45k|}
urlapi.c:hostname_check:
  481|  1.56k|{
  482|  1.56k|  size_t len;
  483|  1.56k|  DEBUGASSERT(hostname);
  ------------------
  |  | 1075|  1.56k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (483:3): [True: 0, False: 1.56k]
  |  Branch (483:3): [True: 1.56k, False: 0]
  ------------------
  484|       |
  485|  1.56k|  if(!hlen)
  ------------------
  |  Branch (485:6): [True: 0, False: 1.56k]
  ------------------
  486|      0|    return CURLUE_NO_HOST;
  487|  1.56k|  else if(hostname[0] == '[')
  ------------------
  |  Branch (487:11): [True: 0, False: 1.56k]
  ------------------
  488|      0|    return ipv6_parse(u, hostname, hlen);
  489|  1.56k|  else {
  490|       |    /* letters from the second string are not ok */
  491|  1.56k|    len = strcspn(hostname, HOSTNAME_INVALID_CHARS);
  ------------------
  |  |   59|  1.56k|#define HOSTNAME_INVALID_CHARS " \r\n\t/:#?!@{}[]\\$\'\"^`*<>=;,+&()%|"
  ------------------
  492|  1.56k|    if(hlen != len)
  ------------------
  |  Branch (492:8): [True: 190, False: 1.37k]
  ------------------
  493|       |      /* hostname with bad content */
  494|    190|      return CURLUE_BAD_HOSTNAME;
  495|  1.37k|    else if((hlen >= 2) &&
  ------------------
  |  Branch (495:13): [True: 486, False: 886]
  ------------------
  496|    486|            (hostname[hlen - 1] == '.') && (hostname[hlen - 2] == '.'))
  ------------------
  |  Branch (496:13): [True: 41, False: 445]
  |  Branch (496:44): [True: 1, False: 40]
  ------------------
  497|       |      /* more than one trailing dot is not allowed */
  498|      1|      return CURLUE_BAD_HOSTNAME;
  499|  1.37k|    else if((hlen == 1) && (hostname[0] == '.'))
  ------------------
  |  Branch (499:13): [True: 886, False: 485]
  |  Branch (499:28): [True: 5, False: 881]
  ------------------
  500|       |      /* a single dot alone is not allowed */
  501|      5|      return CURLUE_BAD_HOSTNAME;
  502|  1.56k|  }
  503|  1.36k|  return CURLUE_OK;
  504|  1.56k|}
urlapi.c:needs_dedotdot:
  755|    574|{
  756|       |  /* a single byte path cannot be cleaned up */
  757|    574|  if(pn < 2)
  ------------------
  |  Branch (757:6): [True: 0, False: 574]
  ------------------
  758|      0|    return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  759|   344k|  while(pn) {
  ------------------
  |  Branch (759:9): [True: 344k, False: 229]
  ------------------
  760|   344k|    if(is_dot(&p, &pn)) {
  ------------------
  |  Branch (760:8): [True: 14.9k, False: 329k]
  ------------------
  761|       |      /* "./" or dot before end of string */
  762|  14.9k|      if(!pn || ISSLASH(*p))
  ------------------
  |  |  751|  14.8k|#define ISSLASH(x) ((x) == '/')
  |  |  ------------------
  |  |  |  Branch (751:20): [True: 117, False: 14.7k]
  |  |  ------------------
  ------------------
  |  Branch (762:10): [True: 72, False: 14.8k]
  ------------------
  763|    189|        return TRUE;
  ------------------
  |  | 1045|    189|#define TRUE true
  ------------------
  764|       |      /* "../" or ".." before end of string */
  765|  14.7k|      else if(is_dot(&p, &pn) && (!pn || ISSLASH(*p)))
  ------------------
  |  |  751|  2.70k|#define ISSLASH(x) ((x) == '/')
  |  |  ------------------
  |  |  |  Branch (751:20): [True: 144, False: 2.55k]
  |  |  ------------------
  ------------------
  |  Branch (765:15): [True: 2.71k, False: 12.0k]
  |  Branch (765:35): [True: 12, False: 2.70k]
  ------------------
  766|    156|        return TRUE;
  ------------------
  |  | 1045|    156|#define TRUE true
  ------------------
  767|  14.9k|    }
  768|   329k|    else {
  769|   329k|      p++;
  770|   329k|      pn--;
  771|   329k|    }
  772|   344k|  }
  773|    229|  return FALSE;
  ------------------
  |  | 1048|    229|#define FALSE false
  ------------------
  774|    574|}
urlapi.c:is_dot:
  735|   552k|{
  736|   552k|  const char *p = *str;
  737|   552k|  if(*p == '.') {
  ------------------
  |  Branch (737:6): [True: 93.0k, False: 459k]
  ------------------
  738|  93.0k|    (*str)++;
  739|  93.0k|    (*clen)--;
  740|  93.0k|    return TRUE;
  ------------------
  |  | 1045|  93.0k|#define TRUE true
  ------------------
  741|  93.0k|  }
  742|   459k|  else if((*clen >= 3) &&
  ------------------
  |  Branch (742:11): [True: 458k, False: 848]
  ------------------
  743|   458k|          (p[0] == '%') && (p[1] == '2') && ((p[2] | 0x20) == 'e')) {
  ------------------
  |  Branch (743:11): [True: 127k, False: 331k]
  |  Branch (743:28): [True: 9.04k, False: 118k]
  |  Branch (743:45): [True: 1.36k, False: 7.68k]
  ------------------
  744|  1.36k|    *str += 3;
  745|  1.36k|    *clen -= 3;
  746|  1.36k|    return TRUE;
  ------------------
  |  | 1045|  1.36k|#define TRUE true
  ------------------
  747|  1.36k|  }
  748|   457k|  return FALSE;
  ------------------
  |  | 1048|   457k|#define FALSE false
  ------------------
  749|   552k|}
urlapi.c:free_urlhandle:
   73|  5.07k|{
   74|  5.07k|  curlx_free(u->scheme);
  ------------------
  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   75|  5.07k|  curlx_free(u->user);
  ------------------
  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   76|  5.07k|  curlx_strzero(u->password);
   77|  5.07k|  curlx_free(u->password);
  ------------------
  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   78|  5.07k|  curlx_free(u->options);
  ------------------
  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   79|  5.07k|  curlx_free(u->host);
  ------------------
  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   80|  5.07k|  curlx_free(u->zoneid);
  ------------------
  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   81|  5.07k|  curlx_free(u->path);
  ------------------
  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   82|  5.07k|  curlx_free(u->query);
  ------------------
  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   83|  5.07k|  curlx_free(u->fragment);
  ------------------
  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   84|  5.07k|}
urlapi.c:urlget_url:
 1511|  2.18k|{
 1512|  2.18k|  char *url;
 1513|  2.18k|  char *allochost = NULL;
 1514|  2.18k|  const char *fragmentsep =
 1515|  2.18k|    (u->fragment || (u->fragment_present && flags & CURLU_GET_EMPTY)) ?
  ------------------
  |  |  103|      1|#define CURLU_GET_EMPTY (1 << 14)         /* allow empty queries and fragments
  ------------------
  |  Branch (1515:6): [True: 6, False: 2.17k]
  |  Branch (1515:22): [True: 1, False: 2.17k]
  |  Branch (1515:45): [True: 1, False: 0]
  ------------------
 1516|  2.17k|    "#" : "";
 1517|  2.18k|  const char *querysep = ((u->query && u->query[0]) ||
  ------------------
  |  Branch (1517:28): [True: 33, False: 2.15k]
  |  Branch (1517:40): [True: 26, False: 7]
  ------------------
 1518|  2.15k|                          (u->query_present && flags & CURLU_GET_EMPTY)) ?
  ------------------
  |  |  103|      7|#define CURLU_GET_EMPTY (1 << 14)         /* allow empty queries and fragments
  ------------------
  |  Branch (1518:28): [True: 7, False: 2.15k]
  |  Branch (1518:48): [True: 7, False: 0]
  ------------------
 1519|  2.15k|    "?" : "";
 1520|  2.18k|  char portbuf[7];
 1521|  2.18k|  if(curl_strequal("file", u->scheme))
  ------------------
  |  Branch (1521:6): [True: 0, False: 2.18k]
  ------------------
 1522|      0|    return file_url(u, part, fragmentsep, querysep);
 1523|  2.18k|  else if(!u->host)
  ------------------
  |  Branch (1523:11): [True: 0, False: 2.18k]
  ------------------
 1524|      0|    return CURLUE_NO_HOST;
 1525|  2.18k|  else {
 1526|  2.18k|    const char *scheme;
 1527|  2.18k|    char *options = u->options;
 1528|  2.18k|    char *port = NULL;
 1529|  2.18k|    const struct Curl_scheme *h = NULL;
 1530|  2.18k|    char schemebuf[MAX_SCHEME_LEN + 5];
 1531|  2.18k|    if(u->scheme)
  ------------------
  |  Branch (1531:8): [True: 2.18k, False: 0]
  ------------------
 1532|  2.18k|      scheme = u->scheme;
 1533|      0|    else if(flags & CURLU_DEFAULT_SCHEME)
  ------------------
  |  |   89|      0|#define CURLU_DEFAULT_SCHEME (1 << 2)     /* return default scheme if
  ------------------
  |  Branch (1533:13): [True: 0, False: 0]
  ------------------
 1534|      0|      scheme = DEFAULT_SCHEME;
  ------------------
  |  |   70|      0|#define DEFAULT_SCHEME "https"
  ------------------
 1535|      0|    else
 1536|      0|      return CURLUE_NO_SCHEME;
 1537|       |
 1538|  2.18k|    if(u->port_present) {
  ------------------
  |  Branch (1538:8): [True: 26, False: 2.15k]
  ------------------
 1539|     26|      curl_msnprintf(portbuf, sizeof(portbuf), "%u", u->portnum);
 1540|     26|      port = portbuf;
 1541|     26|    }
 1542|       |
 1543|  2.18k|    h = Curl_get_scheme(scheme);
 1544|  2.18k|    if(h) {
  ------------------
  |  Branch (1544:8): [True: 2.18k, False: 0]
  ------------------
 1545|  2.18k|      if(!u->port_present && (flags & CURLU_DEFAULT_PORT)) {
  ------------------
  |  |   85|  2.15k|#define CURLU_DEFAULT_PORT (1 << 0)       /* return default port number */
  ------------------
  |  Branch (1545:10): [True: 2.15k, False: 26]
  |  Branch (1545:30): [True: 0, False: 2.15k]
  ------------------
 1546|       |        /* there is no stored port number, but asked to deliver a default one
 1547|       |           for the scheme */
 1548|      0|        curl_msnprintf(portbuf, sizeof(portbuf), "%u", h->defport);
 1549|      0|        port = portbuf;
 1550|      0|      }
 1551|  2.18k|      else if(u->port_present && (h->defport == u->portnum) &&
  ------------------
  |  Branch (1551:15): [True: 26, False: 2.15k]
  |  Branch (1551:34): [True: 1, False: 25]
  ------------------
 1552|      1|              (flags & CURLU_NO_DEFAULT_PORT)) {
  ------------------
  |  |   86|      1|#define CURLU_NO_DEFAULT_PORT (1 << 1)    /* act as if no port number was set,
  ------------------
  |  Branch (1552:15): [True: 0, False: 1]
  ------------------
 1553|       |        /* there is a stored port number, but asked to inhibit if it matches
 1554|       |           the default port for the scheme */
 1555|      0|        port = NULL;
 1556|      0|      }
 1557|       |
 1558|  2.18k|      if(!(h->flags & PROTOPT_URLOPTIONS))
  ------------------
  |  |  224|  2.18k|#define PROTOPT_URLOPTIONS (1 << 10) /* allow options part in the userinfo
  ------------------
  |  Branch (1558:10): [True: 2.18k, False: 0]
  ------------------
 1559|  2.18k|        options = NULL;
 1560|  2.18k|    }
 1561|       |
 1562|  2.18k|    if(u->host[0] == '[') {
  ------------------
  |  Branch (1562:8): [True: 50, False: 2.13k]
  ------------------
 1563|     50|      if(u->zoneid) {
  ------------------
  |  Branch (1563:10): [True: 5, False: 45]
  ------------------
 1564|       |        /* make it '[ host %25 zoneid ]' */
 1565|      5|        struct dynbuf enc;
 1566|      5|        size_t hostlen = strlen(u->host);
 1567|      5|        curlx_dyn_init(&enc, CURL_MAX_INPUT_LENGTH);
  ------------------
  |  |   45|      5|#define CURL_MAX_INPUT_LENGTH 8000000
  ------------------
 1568|      5|        if(curlx_dyn_addf(&enc, "%.*s%%25%s]", (int)hostlen - 1, u->host,
  ------------------
  |  Branch (1568:12): [True: 0, False: 5]
  ------------------
 1569|      5|                          u->zoneid))
 1570|      0|          return CURLUE_OUT_OF_MEMORY;
 1571|      5|        allochost = curlx_dyn_ptr(&enc);
 1572|      5|      }
 1573|     50|    }
 1574|  2.13k|    else if(flags & CURLU_URLENCODE) {
  ------------------
  |  |   95|  2.13k|#define CURLU_URLENCODE (1 << 7)          /* URL encode on set */
  ------------------
  |  Branch (1574:13): [True: 0, False: 2.13k]
  ------------------
 1575|      0|      allochost = curl_easy_escape(NULL, u->host, 0);
 1576|      0|      if(!allochost)
  ------------------
  |  Branch (1576:10): [True: 0, False: 0]
  ------------------
 1577|      0|        return CURLUE_OUT_OF_MEMORY;
 1578|      0|    }
 1579|  2.13k|    else if(flags & CURLU_PUNYCODE) {
  ------------------
  |  |  101|  2.13k|#define CURLU_PUNYCODE (1 << 12)          /* get the hostname in punycode */
  ------------------
  |  Branch (1579:13): [True: 0, False: 2.13k]
  ------------------
 1580|      0|      if(!Curl_is_ASCII_name(u->host)) {
  ------------------
  |  Branch (1580:10): [True: 0, False: 0]
  ------------------
 1581|      0|        CURLUcode ret = host_decode(u->host, &allochost);
 1582|      0|        if(ret)
  ------------------
  |  Branch (1582:12): [True: 0, False: 0]
  ------------------
 1583|      0|          return ret;
 1584|      0|      }
 1585|      0|    }
 1586|  2.13k|    else if(flags & CURLU_PUNY2IDN) {
  ------------------
  |  |  102|  2.13k|#define CURLU_PUNY2IDN (1 << 13)          /* punycode => IDN conversion */
  ------------------
  |  Branch (1586:13): [True: 0, False: 2.13k]
  ------------------
 1587|      0|      if(Curl_is_ASCII_name(u->host)) {
  ------------------
  |  Branch (1587:10): [True: 0, False: 0]
  ------------------
 1588|      0|        CURLUcode ret = host_encode(u->host, &allochost);
 1589|      0|        if(ret)
  ------------------
  |  Branch (1589:12): [True: 0, False: 0]
  ------------------
 1590|      0|          return ret;
 1591|      0|      }
 1592|      0|    }
 1593|       |
 1594|  2.18k|    if(!(flags & CURLU_NO_GUESS_SCHEME) || !u->guessed_scheme)
  ------------------
  |  |  106|  2.18k|#define CURLU_NO_GUESS_SCHEME (1 << 15)   /* for get, do not accept a guess */
  ------------------
  |  Branch (1594:8): [True: 2.18k, False: 0]
  |  Branch (1594:44): [True: 0, False: 0]
  ------------------
 1595|  2.18k|      curl_msnprintf(schemebuf, sizeof(schemebuf), "%s://", scheme);
 1596|      0|    else
 1597|      0|      schemebuf[0] = 0;
 1598|       |
 1599|  2.18k|    url = curl_maprintf("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
 1600|  2.18k|                        schemebuf,
 1601|  2.18k|                        u->user ? u->user : "",
  ------------------
  |  Branch (1601:25): [True: 45, False: 2.14k]
  ------------------
 1602|  2.18k|                        u->password ? ":" : "",
  ------------------
  |  Branch (1602:25): [True: 6, False: 2.17k]
  ------------------
 1603|  2.18k|                        u->password ? u->password : "",
  ------------------
  |  Branch (1603:25): [True: 6, False: 2.17k]
  ------------------
 1604|  2.18k|                        options ? ";" : "",
  ------------------
  |  Branch (1604:25): [True: 0, False: 2.18k]
  ------------------
 1605|  2.18k|                        options ? options : "",
  ------------------
  |  Branch (1605:25): [True: 0, False: 2.18k]
  ------------------
 1606|  2.18k|                        (u->user || u->password || options) ? "@" : "",
  ------------------
  |  Branch (1606:26): [True: 45, False: 2.14k]
  |  Branch (1606:37): [True: 0, False: 2.14k]
  |  Branch (1606:52): [True: 0, False: 2.14k]
  ------------------
 1607|  2.18k|                        allochost ? allochost : u->host,
  ------------------
  |  Branch (1607:25): [True: 5, False: 2.18k]
  ------------------
 1608|  2.18k|                        port ? ":" : "",
  ------------------
  |  Branch (1608:25): [True: 26, False: 2.15k]
  ------------------
 1609|  2.18k|                        port ? port : "",
  ------------------
  |  Branch (1609:25): [True: 26, False: 2.15k]
  ------------------
 1610|  2.18k|                        u->path ? u->path : "/",
  ------------------
  |  Branch (1610:25): [True: 574, False: 1.61k]
  ------------------
 1611|  2.18k|                        querysep,
 1612|  2.18k|                        u->query ? u->query : "",
  ------------------
  |  Branch (1612:25): [True: 33, False: 2.15k]
  ------------------
 1613|  2.18k|                        fragmentsep,
 1614|  2.18k|                        u->fragment ? u->fragment : "");
  ------------------
  |  Branch (1614:25): [True: 6, False: 2.17k]
  ------------------
 1615|  2.18k|    curlx_free(allochost);
  ------------------
  |  | 1476|  2.18k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1616|  2.18k|  }
 1617|  2.18k|  if(!url)
  ------------------
  |  Branch (1617:6): [True: 0, False: 2.18k]
  ------------------
 1618|      0|    return CURLUE_OUT_OF_MEMORY;
 1619|  2.18k|  *part = url;
 1620|  2.18k|  return CURLUE_OK;
 1621|  2.18k|}
urlapi.c:urlget_format:
 1429|  6.50k|{
 1430|  6.50k|  CURLUcode uc = CURLUE_OK;
 1431|  6.50k|  size_t partlen = strlen(ptr);
 1432|  6.50k|  bool urldecode = (flags & CURLU_URLDECODE) ? 1 : 0;
  ------------------
  |  |   94|  6.50k|#define CURLU_URLDECODE (1 << 6)          /* URL decode on get */
  ------------------
  |  Branch (1432:20): [True: 0, False: 6.50k]
  ------------------
 1433|  6.50k|  bool urlencode = (flags & CURLU_URLENCODE) ? 1 : 0;
  ------------------
  |  |   95|  6.50k|#define CURLU_URLENCODE (1 << 7)          /* URL encode on set */
  ------------------
  |  Branch (1433:20): [True: 2.06k, False: 4.44k]
  ------------------
 1434|  6.50k|  bool punycode = (flags & CURLU_PUNYCODE) && (what == CURLUPART_HOST);
  ------------------
  |  |  101|  6.50k|#define CURLU_PUNYCODE (1 << 12)          /* get the hostname in punycode */
  ------------------
  |  Branch (1434:19): [True: 0, False: 6.50k]
  |  Branch (1434:47): [True: 0, False: 0]
  ------------------
 1435|  6.50k|  bool depunyfy = (flags & CURLU_PUNY2IDN) && (what == CURLUPART_HOST);
  ------------------
  |  |  102|  6.50k|#define CURLU_PUNY2IDN (1 << 13)          /* punycode => IDN conversion */
  ------------------
  |  Branch (1435:19): [True: 0, False: 6.50k]
  |  Branch (1435:47): [True: 0, False: 0]
  ------------------
 1436|  6.50k|  char *part = curlx_memdup0(ptr, partlen);
 1437|  6.50k|  *partp = NULL;
 1438|  6.50k|  if(!part)
  ------------------
  |  Branch (1438:6): [True: 0, False: 6.50k]
  ------------------
 1439|      0|    return CURLUE_OUT_OF_MEMORY;
 1440|  6.50k|  if(plusdecode) {
  ------------------
  |  Branch (1440:6): [True: 0, False: 6.50k]
  ------------------
 1441|       |    /* convert + to space */
 1442|      0|    char *plus = part;
 1443|      0|    size_t i = 0;
 1444|      0|    for(i = 0; i < partlen; ++plus, i++) {
  ------------------
  |  Branch (1444:16): [True: 0, False: 0]
  ------------------
 1445|      0|      if(*plus == '+')
  ------------------
  |  Branch (1445:10): [True: 0, False: 0]
  ------------------
 1446|      0|        *plus = ' ';
 1447|      0|    }
 1448|      0|  }
 1449|  6.50k|  if(urldecode) {
  ------------------
  |  Branch (1449:6): [True: 0, False: 6.50k]
  ------------------
 1450|      0|    char *decoded;
 1451|      0|    size_t dlen;
 1452|       |    /* this unconditional rejection of control bytes is documented API
 1453|       |       behavior */
 1454|      0|    CURLcode result = Curl_urldecode(part, partlen, &decoded, &dlen,
 1455|      0|                                     REJECT_CTRL);
 1456|      0|    curlx_free(part);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1457|      0|    if(result)
  ------------------
  |  Branch (1457:8): [True: 0, False: 0]
  ------------------
 1458|      0|      return CURLUE_URLDECODE;
 1459|      0|    part = decoded;
 1460|      0|    partlen = dlen;
 1461|      0|  }
 1462|  6.50k|  if(urlencode) {
  ------------------
  |  Branch (1462:6): [True: 2.06k, False: 4.44k]
  ------------------
 1463|  2.06k|    struct dynbuf enc;
 1464|  2.06k|    curlx_dyn_init(&enc, CURL_MAX_INPUT_LENGTH);
  ------------------
  |  |   45|  2.06k|#define CURL_MAX_INPUT_LENGTH 8000000
  ------------------
 1465|  2.06k|    uc = urlencode_str(&enc, part, partlen, TRUE, what == CURLUPART_QUERY ?
  ------------------
  |  | 1045|  2.06k|#define TRUE true
  ------------------
  |  Branch (1465:51): [True: 0, False: 2.06k]
  ------------------
 1466|  2.06k|                       QUERY_YES : QUERY_NO);
  ------------------
  |  |   54|      0|#define QUERY_YES     4
  ------------------
                                     QUERY_YES : QUERY_NO);
  ------------------
  |  |   52|  4.12k|#define QUERY_NO      2
  ------------------
 1467|  2.06k|    curlx_free(part);
  ------------------
  |  | 1476|  2.06k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1468|  2.06k|    if(uc)
  ------------------
  |  Branch (1468:8): [True: 0, False: 2.06k]
  ------------------
 1469|      0|      return uc;
 1470|  2.06k|    part = curlx_dyn_ptr(&enc);
 1471|  2.06k|  }
 1472|  4.44k|  else if(punycode) {
  ------------------
  |  Branch (1472:11): [True: 0, False: 4.44k]
  ------------------
 1473|      0|    if(!Curl_is_ASCII_name(u->host)) {
  ------------------
  |  Branch (1473:8): [True: 0, False: 0]
  ------------------
 1474|      0|      char *punyversion = NULL;
 1475|      0|      uc = host_decode(part, &punyversion);
 1476|      0|      curlx_free(part);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1477|      0|      if(uc)
  ------------------
  |  Branch (1477:10): [True: 0, False: 0]
  ------------------
 1478|      0|        return uc;
 1479|      0|      part = punyversion;
 1480|      0|    }
 1481|      0|  }
 1482|  4.44k|  else if(depunyfy) {
  ------------------
  |  Branch (1482:11): [True: 0, False: 4.44k]
  ------------------
 1483|      0|    if(Curl_is_ASCII_name(u->host)) {
  ------------------
  |  Branch (1483:8): [True: 0, False: 0]
  ------------------
 1484|      0|      char *unpunified = NULL;
 1485|      0|      uc = host_encode(part, &unpunified);
 1486|      0|      curlx_free(part);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1487|      0|      if(uc)
  ------------------
  |  Branch (1487:10): [True: 0, False: 0]
  ------------------
 1488|      0|        return uc;
 1489|      0|      part = unpunified;
 1490|      0|    }
 1491|      0|  }
 1492|  6.50k|  *partp = part;
 1493|  6.50k|  return CURLUE_OK;
 1494|  6.50k|}
urlapi.c:set_url:
 1771|  2.53k|{
 1772|       |  /*
 1773|       |   * Allow a new URL to replace the existing (if any) contents.
 1774|       |   *
 1775|       |   * If the existing contents is enough for a URL, allow a relative URL to
 1776|       |   * replace it.
 1777|       |   */
 1778|  2.53k|  CURLUcode uc;
 1779|  2.53k|  char *oldurl = NULL;
 1780|       |
 1781|  2.53k|  if(!part_size) {
  ------------------
  |  Branch (1781:6): [True: 0, False: 2.53k]
  ------------------
 1782|       |    /* a blank URL is not a valid URL unless we already have a complete one
 1783|       |       and this is a redirect */
 1784|      0|    uc = curl_url_get(u, CURLUPART_URL, &oldurl, flags);
 1785|      0|    if(!uc) {
  ------------------
  |  Branch (1785:8): [True: 0, False: 0]
  ------------------
 1786|       |      /* success, meaning the "" is a fine relative URL, and the new URL
 1787|       |         inherits scheme/authority/path/query, but not fragment, from the
 1788|       |         existing URL (RFC 3986 section 5.2.2) */
 1789|      0|      curlx_safefree(u->fragment);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1790|      0|      u->fragment_present = FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
 1791|      0|      curlx_free(oldurl);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1792|      0|      return CURLUE_OK;
 1793|      0|    }
 1794|      0|    if(uc == CURLUE_OUT_OF_MEMORY)
  ------------------
  |  Branch (1794:8): [True: 0, False: 0]
  ------------------
 1795|      0|      return uc;
 1796|      0|    return CURLUE_MALFORMED_INPUT;
 1797|      0|  }
 1798|       |
 1799|       |  /* if the new URL is absolute replace the existing with the new. */
 1800|  2.53k|  if(Curl_is_absolute_url(url, NULL, 0,
  ------------------
  |  Branch (1800:6): [True: 2.53k, False: 0]
  ------------------
 1801|  2.53k|                          flags & (CURLU_GUESS_SCHEME | CURLU_DEFAULT_SCHEME)))
  ------------------
  |  |   97|  2.53k|#define CURLU_GUESS_SCHEME (1 << 9)       /* legacy curl-style guessing */
  ------------------
                                        flags & (CURLU_GUESS_SCHEME | CURLU_DEFAULT_SCHEME)))
  ------------------
  |  |   89|  2.53k|#define CURLU_DEFAULT_SCHEME (1 << 2)     /* return default scheme if
  ------------------
 1802|  2.53k|    return parseurl_and_replace(url, u, flags);
 1803|       |
 1804|       |  /* if the old URL is incomplete (we cannot get an absolute URL in
 1805|       |     'oldurl'), replace the existing with the new.
 1806|       |     Always include "scheme://" to make the URL "complete" */
 1807|       |  /* Preserve empty query/fragment separators: they affect where relative
 1808|       |     references splice into the base URL. */
 1809|      0|  uc = curl_url_get(u, CURLUPART_URL, &oldurl,
 1810|      0|                    (flags & ~CURLU_NO_GUESS_SCHEME) | CURLU_GET_EMPTY);
  ------------------
  |  |  106|      0|#define CURLU_NO_GUESS_SCHEME (1 << 15)   /* for get, do not accept a guess */
  ------------------
                                  (flags & ~CURLU_NO_GUESS_SCHEME) | CURLU_GET_EMPTY);
  ------------------
  |  |  103|      0|#define CURLU_GET_EMPTY (1 << 14)         /* allow empty queries and fragments
  ------------------
 1811|      0|  if(uc == CURLUE_OUT_OF_MEMORY)
  ------------------
  |  Branch (1811:6): [True: 0, False: 0]
  ------------------
 1812|      0|    return uc;
 1813|      0|  else if(uc)
  ------------------
  |  Branch (1813:11): [True: 0, False: 0]
  ------------------
 1814|      0|    return parseurl_and_replace(url, u, flags);
 1815|       |
 1816|      0|  DEBUGASSERT(oldurl); /* it is set here */
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1816:3): [True: 0, False: 0]
  |  Branch (1816:3): [True: 0, False: 0]
  ------------------
 1817|       |  /* apply the relative part to create a new URL */
 1818|      0|  uc = redirect_url(oldurl, url, u, flags);
 1819|      0|  curlx_free(oldurl);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1820|      0|  return uc;
 1821|      0|}
urlapi.c:parseurl_and_replace:
 1264|  2.53k|{
 1265|  2.53k|  CURLUcode ures;
 1266|  2.53k|  CURLU tmpurl;
 1267|  2.53k|  memset(&tmpurl, 0, sizeof(tmpurl));
 1268|  2.53k|  ures = parseurl(url, &tmpurl, flags);
 1269|  2.53k|  if(!ures) {
  ------------------
  |  Branch (1269:6): [True: 2.18k, False: 354]
  ------------------
 1270|  2.18k|    free_urlhandle(u);
 1271|  2.18k|    *u = tmpurl;
 1272|  2.18k|  }
 1273|  2.53k|  return ures;
 1274|  2.53k|}
urlapi.c:parseurl:
 1174|  2.53k|{
 1175|  2.53k|  const char *path;
 1176|  2.53k|  size_t pathlen;
 1177|  2.53k|  char schemebuf[MAX_SCHEME_LEN + 1];
 1178|  2.53k|  size_t schemelen = 0;
 1179|  2.53k|  size_t urllen;
 1180|  2.53k|  CURLUcode ures = CURLUE_OK;
 1181|  2.53k|  struct dynbuf host;
 1182|  2.53k|  bool is_file = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
 1183|       |
 1184|  2.53k|  DEBUGASSERT(url);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1184:3): [True: 0, False: 2.53k]
  |  Branch (1184:3): [True: 2.53k, False: 0]
  ------------------
 1185|       |
 1186|  2.53k|  curlx_dyn_init(&host, CURL_MAX_INPUT_LENGTH);
  ------------------
  |  |   45|  2.53k|#define CURL_MAX_INPUT_LENGTH 8000000
  ------------------
 1187|       |
 1188|  2.53k|  ures = Curl_junkscan(url, &urllen, !!(flags & CURLU_ALLOW_SPACE));
  ------------------
  |  |  100|  2.53k|#define CURLU_ALLOW_SPACE (1 << 11)       /* Allow spaces in the URL */
  ------------------
 1189|  2.53k|  if(ures)
  ------------------
  |  Branch (1189:6): [True: 19, False: 2.52k]
  ------------------
 1190|     19|    goto fail;
 1191|       |
 1192|  2.52k|  schemelen = Curl_is_absolute_url(url, schemebuf, sizeof(schemebuf),
 1193|  2.52k|                                   flags & (CURLU_GUESS_SCHEME |
  ------------------
  |  |   97|  2.52k|#define CURLU_GUESS_SCHEME (1 << 9)       /* legacy curl-style guessing */
  ------------------
 1194|  2.52k|                                            CURLU_DEFAULT_SCHEME));
  ------------------
  |  |   89|  2.52k|#define CURLU_DEFAULT_SCHEME (1 << 2)     /* return default scheme if
  ------------------
 1195|       |
 1196|       |  /* handle the file: scheme */
 1197|  2.52k|  if(schemelen && !strcmp(schemebuf, "file")) {
  ------------------
  |  Branch (1197:6): [True: 2.52k, False: 0]
  |  Branch (1197:19): [True: 0, False: 2.52k]
  ------------------
 1198|      0|    is_file = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
 1199|      0|    ures = parse_file(url, urllen, u, &path, &pathlen);
 1200|      0|  }
 1201|  2.52k|  else {
 1202|  2.52k|    const char *hostp = NULL;
 1203|  2.52k|    size_t hostlen;
 1204|  2.52k|    ures = parse_scheme(url, u, schemebuf, schemelen, flags, &hostp);
 1205|  2.52k|    if(ures)
  ------------------
  |  Branch (1205:8): [True: 1, False: 2.51k]
  ------------------
 1206|      1|      goto fail;
 1207|       |
 1208|       |    /* find the end of the hostname + port number */
 1209|  2.51k|    hostlen = strcspn(hostp, "/?#");
 1210|  2.51k|    path = &hostp[hostlen];
 1211|       |
 1212|       |    /* this pathlen also contains the query and the fragment */
 1213|  2.51k|    pathlen = urllen - (path - url);
 1214|  2.51k|    if(hostlen) {
  ------------------
  |  Branch (1214:8): [True: 2.50k, False: 16]
  ------------------
 1215|  2.50k|      ures = parse_authority(u, hostp, hostlen, flags, &host, !!u->scheme);
 1216|  2.50k|      if(!ures && (flags & CURLU_GUESS_SCHEME) && !u->scheme)
  ------------------
  |  |   97|  2.18k|#define CURLU_GUESS_SCHEME (1 << 9)       /* legacy curl-style guessing */
  ------------------
  |  Branch (1216:10): [True: 2.18k, False: 318]
  |  Branch (1216:19): [True: 2.18k, False: 0]
  |  Branch (1216:51): [True: 0, False: 2.18k]
  ------------------
 1217|      0|        ures = guess_scheme(u, &host);
 1218|  2.50k|    }
 1219|     16|    else if(flags & CURLU_NO_AUTHORITY) {
  ------------------
  |  |   98|     16|#define CURLU_NO_AUTHORITY (1 << 10)      /* Allow empty authority when the
  ------------------
  |  Branch (1219:13): [True: 0, False: 16]
  ------------------
 1220|       |      /* allowed to be empty. */
 1221|      0|      if(curlx_dyn_add(&host, ""))
  ------------------
  |  Branch (1221:10): [True: 0, False: 0]
  ------------------
 1222|      0|        ures = CURLUE_OUT_OF_MEMORY;
 1223|      0|    }
 1224|     16|    else
 1225|     16|      ures = CURLUE_NO_HOST;
 1226|  2.51k|  }
 1227|  2.51k|  if(!ures) {
  ------------------
  |  Branch (1227:6): [True: 2.18k, False: 334]
  ------------------
 1228|       |    /* The path might at this point contain a fragment and/or a query to
 1229|       |       handle */
 1230|  2.18k|    const char *fragment = strchr(path, '#');
 1231|  2.18k|    if(fragment) {
  ------------------
  |  Branch (1231:8): [True: 7, False: 2.17k]
  ------------------
 1232|      7|      size_t fraglen = pathlen - (fragment - path);
 1233|      7|      ures = handle_fragment(u, fragment, fraglen, flags);
 1234|       |      /* after this, pathlen still contains the query */
 1235|      7|      pathlen -= fraglen;
 1236|      7|    }
 1237|  2.18k|  }
 1238|  2.51k|  if(!ures) {
  ------------------
  |  Branch (1238:6): [True: 2.18k, False: 334]
  ------------------
 1239|  2.18k|    const char *query = memchr(path, '?', pathlen);
 1240|  2.18k|    if(query) {
  ------------------
  |  Branch (1240:8): [True: 33, False: 2.15k]
  ------------------
 1241|     33|      size_t qlen = pathlen - (query - path);
 1242|     33|      ures = handle_query(u, query, qlen, flags);
 1243|     33|      pathlen -= qlen;
 1244|     33|    }
 1245|  2.18k|  }
 1246|  2.51k|  if(!ures)
  ------------------
  |  Branch (1246:6): [True: 2.18k, False: 334]
  ------------------
 1247|       |    /* the fragment and query parts are trimmed off from the path */
 1248|  2.18k|    ures = handle_path(u, path, pathlen, flags, is_file);
 1249|  2.51k|  if(!ures) {
  ------------------
  |  Branch (1249:6): [True: 2.18k, False: 334]
  ------------------
 1250|  2.18k|    u->host = curlx_dyn_ptr(&host);
 1251|  2.18k|    return CURLUE_OK;
 1252|  2.18k|  }
 1253|    354|fail:
 1254|    354|  curlx_dyn_free(&host);
 1255|    354|  free_urlhandle(u);
 1256|    354|  return ures;
 1257|  2.51k|}
urlapi.c:parse_scheme:
  995|  2.52k|{
  996|       |  /* clear path */
  997|  2.52k|  const char *schemep = NULL;
  998|       |
  999|  2.52k|  if(schemelen) {
  ------------------
  |  Branch (999:6): [True: 2.52k, False: 0]
  ------------------
 1000|  2.52k|    int num_slashes = 0;
 1001|  2.52k|    const char *p = &url[schemelen + 1];
 1002|  2.52k|    if(!Curl_get_scheme(schemebuf) && !(flags & CURLU_NON_SUPPORT_SCHEME))
  ------------------
  |  |   91|      0|#define CURLU_NON_SUPPORT_SCHEME (1 << 3) /* allow non-supported scheme */
  ------------------
  |  Branch (1002:8): [True: 0, False: 2.52k]
  |  Branch (1002:39): [True: 0, False: 0]
  ------------------
 1003|      0|      return CURLUE_UNSUPPORTED_SCHEME;
 1004|       |
 1005|  2.52k|    if(!ISSLASH(*p))
  ------------------
  |  |  751|  2.52k|#define ISSLASH(x) ((x) == '/')
  ------------------
  |  Branch (1005:8): [True: 0, False: 2.52k]
  ------------------
 1006|       |      /* less than one */
 1007|      0|      return CURLUE_BAD_SLASHES;
 1008|  2.52k|    if((flags & CURLU_NO_AUTHORITY)) {
  ------------------
  |  |   98|  2.52k|#define CURLU_NO_AUTHORITY (1 << 10)      /* Allow empty authority when the
  ------------------
  |  Branch (1008:8): [True: 0, False: 2.52k]
  ------------------
 1009|      0|      while(ISSLASH(*p) && (num_slashes < 2)) {
  ------------------
  |  |  751|      0|#define ISSLASH(x) ((x) == '/')
  |  |  ------------------
  |  |  |  Branch (751:20): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1009:28): [True: 0, False: 0]
  ------------------
 1010|      0|        p++;
 1011|      0|        num_slashes++;
 1012|      0|      }
 1013|      0|    }
 1014|  2.52k|    else {
 1015|  7.60k|      while(ISSLASH(*p) && (num_slashes < 4)) {
  ------------------
  |  |  751|  15.2k|#define ISSLASH(x) ((x) == '/')
  |  |  ------------------
  |  |  |  Branch (751:20): [True: 5.08k, False: 2.51k]
  |  |  ------------------
  ------------------
  |  Branch (1015:28): [True: 5.08k, False: 1]
  ------------------
 1016|  5.08k|        p++;
 1017|  5.08k|        num_slashes++;
 1018|  5.08k|      }
 1019|  2.52k|      if(num_slashes > 3)
  ------------------
  |  Branch (1019:10): [True: 1, False: 2.51k]
  ------------------
 1020|      1|        return CURLUE_BAD_SLASHES;
 1021|  2.52k|    }
 1022|       |
 1023|  2.51k|    schemep = schemebuf;
 1024|  2.51k|    *hostpp = p; /* hostname starts here */
 1025|  2.51k|  }
 1026|      0|  else {
 1027|       |    /* no scheme! */
 1028|       |
 1029|      0|    if(!(flags & (CURLU_DEFAULT_SCHEME | CURLU_GUESS_SCHEME)))
  ------------------
  |  |   89|      0|#define CURLU_DEFAULT_SCHEME (1 << 2)     /* return default scheme if
  ------------------
                  if(!(flags & (CURLU_DEFAULT_SCHEME | CURLU_GUESS_SCHEME)))
  ------------------
  |  |   97|      0|#define CURLU_GUESS_SCHEME (1 << 9)       /* legacy curl-style guessing */
  ------------------
  |  Branch (1029:8): [True: 0, False: 0]
  ------------------
 1030|      0|      return CURLUE_BAD_SCHEME;
 1031|       |
 1032|      0|    if(flags & CURLU_DEFAULT_SCHEME)
  ------------------
  |  |   89|      0|#define CURLU_DEFAULT_SCHEME (1 << 2)     /* return default scheme if
  ------------------
  |  Branch (1032:8): [True: 0, False: 0]
  ------------------
 1033|      0|      schemep = DEFAULT_SCHEME;
  ------------------
  |  |   70|      0|#define DEFAULT_SCHEME "https"
  ------------------
 1034|       |
 1035|       |    /*
 1036|       |     * The URL was badly formatted, let's try without scheme specified.
 1037|       |     */
 1038|      0|    *hostpp = url;
 1039|      0|  }
 1040|       |
 1041|  2.51k|  if(schemep) {
  ------------------
  |  Branch (1041:6): [True: 2.51k, False: 0]
  ------------------
 1042|  2.51k|    u->scheme = curlx_strdup(schemep);
  ------------------
  |  | 1470|  2.51k|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
 1043|  2.51k|    if(!u->scheme)
  ------------------
  |  Branch (1043:8): [True: 0, False: 2.51k]
  ------------------
 1044|      0|      return CURLUE_OUT_OF_MEMORY;
 1045|  2.51k|  }
 1046|  2.51k|  return CURLUE_OK;
 1047|  2.51k|}
urlapi.c:handle_fragment:
 1079|      7|{
 1080|      7|  CURLUcode ures;
 1081|      7|  u->fragment_present = TRUE;
  ------------------
  |  | 1045|      7|#define TRUE true
  ------------------
 1082|      7|  if(fraglen > 1) {
  ------------------
  |  Branch (1082:6): [True: 6, False: 1]
  ------------------
 1083|       |    /* skip the leading '#' in the copy but include the null-terminator */
 1084|      6|    if(flags & CURLU_URLENCODE) {
  ------------------
  |  |   95|      6|#define CURLU_URLENCODE (1 << 7)          /* URL encode on set */
  ------------------
  |  Branch (1084:8): [True: 0, False: 6]
  ------------------
 1085|      0|      struct dynbuf enc;
 1086|      0|      curlx_dyn_init(&enc, CURL_MAX_INPUT_LENGTH);
  ------------------
  |  |   45|      0|#define CURL_MAX_INPUT_LENGTH 8000000
  ------------------
 1087|      0|      ures = urlencode_str(&enc, fragment + 1, fraglen - 1, TRUE, QUERY_NO);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
                    ures = urlencode_str(&enc, fragment + 1, fraglen - 1, TRUE, QUERY_NO);
  ------------------
  |  |   52|      0|#define QUERY_NO      2
  ------------------
 1088|      0|      if(ures)
  ------------------
  |  Branch (1088:10): [True: 0, False: 0]
  ------------------
 1089|      0|        return ures;
 1090|      0|      u->fragment = curlx_dyn_ptr(&enc);
 1091|      0|    }
 1092|      6|    else {
 1093|      6|      u->fragment = curlx_memdup0(fragment + 1, fraglen - 1);
 1094|      6|      if(!u->fragment)
  ------------------
  |  Branch (1094:10): [True: 0, False: 6]
  ------------------
 1095|      0|        return CURLUE_OUT_OF_MEMORY;
 1096|      6|    }
 1097|      6|  }
 1098|      7|  return CURLUE_OK;
 1099|      7|}
urlapi.c:handle_query:
 1103|     33|{
 1104|     33|  u->query_present = TRUE;
  ------------------
  |  | 1045|     33|#define TRUE true
  ------------------
 1105|     33|  if(qlen > 1) {
  ------------------
  |  Branch (1105:6): [True: 26, False: 7]
  ------------------
 1106|     26|    if(flags & CURLU_URLENCODE) {
  ------------------
  |  |   95|     26|#define CURLU_URLENCODE (1 << 7)          /* URL encode on set */
  ------------------
  |  Branch (1106:8): [True: 0, False: 26]
  ------------------
 1107|      0|      struct dynbuf enc;
 1108|      0|      CURLUcode ures;
 1109|      0|      curlx_dyn_init(&enc, CURL_MAX_INPUT_LENGTH);
  ------------------
  |  |   45|      0|#define CURL_MAX_INPUT_LENGTH 8000000
  ------------------
 1110|       |      /* skip the leading question mark */
 1111|      0|      ures = urlencode_str(&enc, query + 1, qlen - 1, TRUE, QUERY_YES);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
                    ures = urlencode_str(&enc, query + 1, qlen - 1, TRUE, QUERY_YES);
  ------------------
  |  |   54|      0|#define QUERY_YES     4
  ------------------
 1112|      0|      if(ures)
  ------------------
  |  Branch (1112:10): [True: 0, False: 0]
  ------------------
 1113|      0|        return ures;
 1114|      0|      u->query = curlx_dyn_ptr(&enc);
 1115|      0|    }
 1116|     26|    else {
 1117|     26|      u->query = curlx_memdup0(query + 1, qlen - 1);
 1118|     26|      if(!u->query)
  ------------------
  |  Branch (1118:10): [True: 0, False: 26]
  ------------------
 1119|      0|        return CURLUE_OUT_OF_MEMORY;
 1120|     26|    }
 1121|     26|  }
 1122|      7|  else {
 1123|       |    /* single byte query */
 1124|      7|    u->query = curlx_strdup("");
  ------------------
  |  | 1470|      7|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
 1125|      7|    if(!u->query)
  ------------------
  |  Branch (1125:8): [True: 0, False: 7]
  ------------------
 1126|      0|      return CURLUE_OUT_OF_MEMORY;
 1127|      7|  }
 1128|     33|  return CURLUE_OK;
 1129|     33|}
urlapi.c:handle_path:
 1134|  2.18k|{
 1135|  2.18k|  CURLUcode ures;
 1136|  2.18k|  if(pathlen && (flags & CURLU_URLENCODE)) {
  ------------------
  |  |   95|    821|#define CURLU_URLENCODE (1 << 7)          /* URL encode on set */
  ------------------
  |  Branch (1136:6): [True: 821, False: 1.36k]
  |  Branch (1136:17): [True: 0, False: 821]
  ------------------
 1137|      0|    struct dynbuf enc;
 1138|      0|    curlx_dyn_init(&enc, CURL_MAX_INPUT_LENGTH);
  ------------------
  |  |   45|      0|#define CURL_MAX_INPUT_LENGTH 8000000
  ------------------
 1139|      0|    ures = urlencode_str(&enc, path, pathlen, TRUE, QUERY_NO);
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
                  ures = urlencode_str(&enc, path, pathlen, TRUE, QUERY_NO);
  ------------------
  |  |   52|      0|#define QUERY_NO      2
  ------------------
 1140|      0|    if(ures)
  ------------------
  |  Branch (1140:8): [True: 0, False: 0]
  ------------------
 1141|      0|      return ures;
 1142|      0|    pathlen = curlx_dyn_len(&enc);
 1143|      0|    path = u->path = curlx_dyn_ptr(&enc);
 1144|      0|  }
 1145|       |
 1146|  2.18k|  if(pathlen >= (size_t)(1 + !is_file)) {
  ------------------
  |  Branch (1146:6): [True: 574, False: 1.61k]
  ------------------
 1147|       |    /* paths for file:// scheme can be one byte, others need to be two */
 1148|    574|    if(!u->path) {
  ------------------
  |  Branch (1148:8): [True: 574, False: 0]
  ------------------
 1149|    574|      u->path = curlx_memdup0(path, pathlen);
 1150|    574|      if(!u->path)
  ------------------
  |  Branch (1150:10): [True: 0, False: 574]
  ------------------
 1151|      0|        return CURLUE_OUT_OF_MEMORY;
 1152|    574|      path = u->path;
 1153|    574|    }
 1154|      0|    else if(flags & CURLU_URLENCODE)
  ------------------
  |  |   95|      0|#define CURLU_URLENCODE (1 << 7)          /* URL encode on set */
  ------------------
  |  Branch (1154:13): [True: 0, False: 0]
  ------------------
 1155|       |      /* it might have encoded more than the path so cut it */
 1156|      0|      u->path[pathlen] = 0;
 1157|       |
 1158|    574|    if(!(flags & CURLU_PATH_AS_IS)) {
  ------------------
  |  |   92|    574|#define CURLU_PATH_AS_IS (1 << 4)         /* leave dot sequences */
  ------------------
  |  Branch (1158:8): [True: 574, False: 0]
  ------------------
 1159|       |      /* remove ../ and ./ sequences according to RFC3986 */
 1160|    574|      char *dedot;
 1161|    574|      int err = dedotdotify(path, pathlen, &dedot);
 1162|    574|      if(err)
  ------------------
  |  Branch (1162:10): [True: 0, False: 574]
  ------------------
 1163|      0|        return CURLUE_OUT_OF_MEMORY;
 1164|    574|      if(dedot) {
  ------------------
  |  Branch (1164:10): [True: 345, False: 229]
  ------------------
 1165|    345|        curlx_free(u->path);
  ------------------
  |  | 1476|    345|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1166|    345|        u->path = dedot;
 1167|    345|      }
 1168|    574|    }
 1169|    574|  }
 1170|  2.18k|  return CURLUE_OK;
 1171|  2.18k|}

Curl_auth_digest_cleanup:
 1040|  12.6k|{
 1041|  12.6k|  Curl_peer_unlink(&digest->origin);
 1042|  12.6k|  Curl_creds_unlink(&digest->creds);
 1043|  12.6k|  curlx_safefree(digest->nonce);
  ------------------
  |  | 1332|  12.6k|  do {                      \
  |  | 1333|  12.6k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  12.6k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  12.6k|    (ptr) = NULL;           \
  |  | 1335|  12.6k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 12.6k]
  |  |  ------------------
  ------------------
 1044|  12.6k|  curlx_safefree(digest->cnonce);
  ------------------
  |  | 1332|  12.6k|  do {                      \
  |  | 1333|  12.6k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  12.6k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  12.6k|    (ptr) = NULL;           \
  |  | 1335|  12.6k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 12.6k]
  |  |  ------------------
  ------------------
 1045|  12.6k|  curlx_safefree(digest->realm);
  ------------------
  |  | 1332|  12.6k|  do {                      \
  |  | 1333|  12.6k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  12.6k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  12.6k|    (ptr) = NULL;           \
  |  | 1335|  12.6k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 12.6k]
  |  |  ------------------
  ------------------
 1046|  12.6k|  curlx_safefree(digest->opaque);
  ------------------
  |  | 1332|  12.6k|  do {                      \
  |  | 1333|  12.6k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  12.6k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  12.6k|    (ptr) = NULL;           \
  |  | 1335|  12.6k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 12.6k]
  |  |  ------------------
  ------------------
 1047|  12.6k|  curlx_safefree(digest->qop);
  ------------------
  |  | 1332|  12.6k|  do {                      \
  |  | 1333|  12.6k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  12.6k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  12.6k|    (ptr) = NULL;           \
  |  | 1335|  12.6k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 12.6k]
  |  |  ------------------
  ------------------
 1048|  12.6k|  curlx_safefree(digest->algorithm);
  ------------------
  |  | 1332|  12.6k|  do {                      \
  |  | 1333|  12.6k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  12.6k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  12.6k|    (ptr) = NULL;           \
  |  | 1335|  12.6k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 12.6k]
  |  |  ------------------
  ------------------
 1049|       |
 1050|  12.6k|  digest->nc = 0;
 1051|  12.6k|  digest->algo = ALGO_MD5; /* default algorithm */
  ------------------
  |  |   44|  12.6k|#define ALGO_MD5 0
  ------------------
 1052|  12.6k|  digest->stale = FALSE;   /* default means normal, not stale */
  ------------------
  |  | 1048|  12.6k|#define FALSE false
  ------------------
 1053|       |  digest->userhash = FALSE;
  ------------------
  |  | 1048|  12.6k|#define FALSE false
  ------------------
 1054|  12.6k|}

Curl_auth_allowed_to_origin:
  147|    167|{
  148|    167|  return data->set.allow_auth_to_other_hosts ||
  ------------------
  |  Branch (148:10): [True: 0, False: 167]
  ------------------
  149|    167|         Curl_peer_equal(data->state.initial_origin, origin);
  ------------------
  |  Branch (149:10): [True: 167, False: 0]
  ------------------
  150|    167|}

Curl_async_global_init:
   81|      2|{
   82|       |#if defined(USE_ARES) && defined(CARES_HAVE_ARES_LIBRARY_INIT)
   83|       |  if(ares_library_init(ARES_LIB_INIT_ALL)) {
   84|       |    return CURLE_FAILED_INIT;
   85|       |  }
   86|       |#endif
   87|      2|  return CURLE_OK;
   88|      2|}
Curl_async_thrdd_multi_init:
  477|  2.53k|{
  478|  2.53k|  CURLcode result;
  479|  2.53k|  DEBUGASSERT(!multi->resolv_thrdq);
  ------------------
  |  | 1075|  2.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (479:3): [True: 0, False: 2.53k]
  |  Branch (479:3): [True: 2.53k, False: 0]
  ------------------
  480|  2.53k|  result = Curl_thrdq_create(&multi->resolv_thrdq, "DNS",
  481|  2.53k|                             min_threads, max_threads, idle_time_ms,
  482|  2.53k|                             async_thrdd_item_free,
  483|  2.53k|                             async_thrdd_item_process,
  484|  2.53k|                             async_thrdd_event,
  485|  2.53k|                             multi);
  486|  2.53k|#ifdef DEBUGBUILD
  487|  2.53k|  if(!result) {
  ------------------
  |  Branch (487:6): [True: 2.53k, False: 0]
  ------------------
  488|  2.53k|    const char *p = getenv("CURL_DBG_RESOLV_MAX_THREADS");
  489|  2.53k|    if(p) {
  ------------------
  |  Branch (489:8): [True: 0, False: 2.53k]
  ------------------
  490|      0|      curl_off_t l;
  491|      0|      if(!curlx_str_number(&p, &l, UINT32_MAX)) {
  ------------------
  |  Branch (491:10): [True: 0, False: 0]
  ------------------
  492|      0|        result = Curl_async_thrdd_multi_set_props(
  493|      0|          multi, min_threads, (uint32_t)l, idle_time_ms);
  494|      0|      }
  495|      0|    }
  496|  2.53k|  }
  497|  2.53k|#endif
  498|  2.53k|  return result;
  499|  2.53k|}
Curl_async_thrdd_multi_destroy:
  503|  2.53k|{
  504|  2.53k|  if(multi->resolv_thrdq) {
  ------------------
  |  Branch (504:6): [True: 2.53k, False: 0]
  ------------------
  505|  2.53k|#ifdef CURLVERBOSE
  506|  2.53k|    CURL_TRC_DNS(multi->admin, "destroy thread queue+pool, join=%d", join);
  ------------------
  |  |  168|  2.53k|  do {                                 \
  |  |  169|  2.53k|    if(CURL_TRC_DNS_is_verbose(data))  \
  |  |  ------------------
  |  |  |  |  137|  2.53k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_dns)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.53k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  5.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.53k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 2.53k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  5.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.53k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  170|  2.53k|      Curl_trc_dns(data, __VA_ARGS__); \
  |  |  171|  2.53k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (171:11): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
  507|  2.53k|    Curl_thrdq_trace(multi->resolv_thrdq, multi->admin);
  508|  2.53k|#endif
  509|  2.53k|    Curl_thrdq_destroy(multi->resolv_thrdq, join);
  510|       |    multi->resolv_thrdq = NULL;
  511|  2.53k|  }
  512|  2.53k|}
Curl_async_thrdd_multi_process:
  559|  2.53k|{
  560|  2.53k|  struct Curl_easy *data;
  561|  2.53k|  void *qitem;
  562|       |
  563|  2.53k|  while(!Curl_thrdq_recv(multi->resolv_thrdq, &qitem)) {
  ------------------
  |  Branch (563:9): [True: 0, False: 2.53k]
  ------------------
  564|       |    /* dispatch resolve result */
  565|      0|    struct async_thrdd_item *item = qitem;
  566|      0|    struct Curl_resolv_async *async = NULL;
  567|       |
  568|      0|    data = Curl_multi_get_easy(multi, item->mid);
  569|      0|    if(data)
  ------------------
  |  Branch (569:8): [True: 0, False: 0]
  ------------------
  570|      0|      async = Curl_async_get(data, item->resolv_id);
  571|      0|    if(async) {
  ------------------
  |  Branch (571:8): [True: 0, False: 0]
  ------------------
  572|      0|      struct async_thrdd_item **pdest = &async->thrdd.res_A;
  573|       |
  574|      0|#ifdef CURLRES_IPV6
  575|      0|      if(item->dns_queries & CURL_DNSQ_AAAA)
  ------------------
  |  |   52|      0|#define CURL_DNSQ_AAAA        (1U << 1)
  ------------------
  |  Branch (575:10): [True: 0, False: 0]
  ------------------
  576|      0|        pdest = &async->thrdd.res_AAAA;
  577|      0|#endif
  578|      0|      if(!*pdest) {
  ------------------
  |  Branch (578:10): [True: 0, False: 0]
  ------------------
  579|      0|        *pdest = item;
  580|      0|        item = NULL;
  581|      0|      }
  582|      0|      else
  583|      0|        DEBUGASSERT(0); /* should not receive duplicates here */
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (583:9): [Folded, False: 0]
  |  Branch (583:9): [Folded, False: 0]
  ------------------
  584|       |
  585|      0|      --async->queries_ongoing;
  586|      0|      Curl_multi_mark_dirty(data);
  587|      0|    }
  588|      0|    async_thrdd_item_free(item);
  589|      0|  }
  590|  2.53k|  VERBOSE(Curl_thrdq_trace(multi->resolv_thrdq, multi->admin));
  ------------------
  |  | 1611|  2.53k|#define VERBOSE(x) x
  ------------------
  591|  2.53k|}

Curl_conn_dns_add_addr_resolve:
  561|  2.03k|{
  562|       |  /* should only have address query bits */
  563|  2.03k|  DEBUGASSERT(!(dns_queries & ~CURL_DNSQ_ADDR));
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (563:3): [True: 0, False: 2.03k]
  |  Branch (563:3): [True: 2.03k, False: 0]
  ------------------
  564|  2.03k|  return cf_dns_add_resolve(data, conn, sockindex, peer,
  565|  2.03k|                            (dns_queries & CURL_DNSQ_ADDR), transport);
  ------------------
  |  |   55|  2.03k|#define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  ------------------
  |  |  |  |   51|  2.03k|#define CURL_DNSQ_A           (1U << 0)
  |  |  ------------------
  |  |               #define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  ------------------
  |  |  |  |   52|  2.03k|#define CURL_DNSQ_AAAA        (1U << 1)
  |  |  ------------------
  ------------------
  566|  2.03k|}
Curl_conn_dns_addr_result:
  578|  2.03k|{
  579|  2.03k|  struct Curl_cfilter *cf = conn->cfilter[sockindex];
  580|  2.03k|  for(; cf; cf = cf->next) {
  ------------------
  |  Branch (580:9): [True: 2.03k, False: 0]
  ------------------
  581|  2.03k|    if(cf->cft == &Curl_cft_dns) {
  ------------------
  |  Branch (581:8): [True: 2.03k, False: 0]
  ------------------
  582|  2.03k|      struct cf_dns_ctx *ctx = cf->ctx;
  583|  2.03k|      if(Curl_peer_same_destination(ctx->peer, peer) &&
  ------------------
  |  Branch (583:10): [True: 2.03k, False: 0]
  ------------------
  584|  2.03k|         (ctx->dns_queries & (CURL_DNSQ_A | CURL_DNSQ_AAAA))) {
  ------------------
  |  |   51|  2.03k|#define CURL_DNSQ_A           (1U << 0)
  ------------------
                       (ctx->dns_queries & (CURL_DNSQ_A | CURL_DNSQ_AAAA))) {
  ------------------
  |  |   52|  2.03k|#define CURL_DNSQ_AAAA        (1U << 1)
  ------------------
  |  Branch (584:10): [True: 2.03k, False: 0]
  ------------------
  585|  2.03k|        if(ctx->dns || ctx->resolv_result)
  ------------------
  |  Branch (585:12): [True: 2.03k, False: 0]
  |  Branch (585:24): [True: 0, False: 0]
  ------------------
  586|  2.03k|          return ctx->resolv_result;
  587|      0|        return CURLE_AGAIN;
  588|  2.03k|      }
  589|  2.03k|    }
  590|  2.03k|  }
  591|      0|  return CURLE_FAILED_INIT; /* no one is resolving */
  592|  2.03k|}
Curl_conn_dns_get_ai:
  603|  4.07k|{
  604|  4.07k|  struct connectdata *conn = data->conn;
  605|  4.07k|  struct Curl_cfilter *cf = conn->cfilter[sockindex];
  606|       |
  607|  4.07k|  for(; cf; cf = cf->next) {
  ------------------
  |  Branch (607:9): [True: 4.07k, False: 0]
  ------------------
  608|  4.07k|    if(cf->cft == &Curl_cft_dns) {
  ------------------
  |  Branch (608:8): [True: 4.07k, False: 0]
  ------------------
  609|  4.07k|      struct cf_dns_ctx *ctx = cf->ctx;
  610|  4.07k|      if(Curl_peer_same_destination(ctx->peer, peer) &&
  ------------------
  |  Branch (610:10): [True: 4.07k, False: 0]
  ------------------
  611|  4.07k|         (ctx->dns_queries & (CURL_DNSQ_A | CURL_DNSQ_AAAA))) {
  ------------------
  |  |   51|  4.07k|#define CURL_DNSQ_A           (1U << 0)
  ------------------
                       (ctx->dns_queries & (CURL_DNSQ_A | CURL_DNSQ_AAAA))) {
  ------------------
  |  |   52|  4.07k|#define CURL_DNSQ_AAAA        (1U << 1)
  ------------------
  |  Branch (611:10): [True: 4.07k, False: 0]
  ------------------
  612|  4.07k|        CURL_TRC_CF(data, cf, "get %uth result for %s:%u, family=%d, dns=%d",
  ------------------
  |  |  153|  4.07k|  do {                                          \
  |  |  154|  4.07k|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|  4.07k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  8.14k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 4.07k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 4.07k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  8.14k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 4.07k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  4.07k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|  4.07k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  4.07k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 4.07k, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 4.07k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|  4.07k|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  613|  4.07k|                    index, peer->hostname, peer->port, ai_family, !!ctx->dns);
  614|  4.07k|        if(ctx->resolv_result)
  ------------------
  |  Branch (614:12): [True: 0, False: 4.07k]
  ------------------
  615|      0|          return NULL;
  616|  4.07k|        else if(ctx->dns) {
  ------------------
  |  Branch (616:17): [True: 4.07k, False: 0]
  ------------------
  617|       |          /* A cached DNS entry may contain address families that we
  618|       |           * here never queried for. We want to give no results for those. */
  619|  4.07k|          if((ai_family == AF_INET) && !(ctx->dns_queries & CURL_DNSQ_A))
  ------------------
  |  |   51|  2.03k|#define CURL_DNSQ_A           (1U << 0)
  ------------------
  |  Branch (619:14): [True: 2.03k, False: 2.03k]
  |  Branch (619:40): [True: 0, False: 2.03k]
  ------------------
  620|      0|            return NULL;
  621|  4.07k|#ifdef USE_IPV6
  622|  4.07k|          if((ai_family == AF_INET6) && !(ctx->dns_queries & CURL_DNSQ_AAAA))
  ------------------
  |  |   52|  2.03k|#define CURL_DNSQ_AAAA        (1U << 1)
  ------------------
  |  Branch (622:14): [True: 2.03k, False: 2.03k]
  |  Branch (622:41): [True: 0, False: 2.03k]
  ------------------
  623|      0|            return NULL;
  624|  4.07k|#endif
  625|  4.07k|          return Curl_addrinfo_get(ctx->dns->addr, ai_family, index);
  626|  4.07k|        }
  627|      0|        else
  628|      0|          return Curl_resolv_get_ai(data, ctx->resolv_id, ai_family, index);
  629|  4.07k|      }
  630|  4.07k|    }
  631|  4.07k|  }
  632|      0|  return NULL;
  633|  4.07k|}
cf-dns.c:cf_dns_destroy:
  348|  2.03k|{
  349|  2.03k|  struct cf_dns_ctx *ctx = cf->ctx;
  350|       |
  351|  2.03k|  CURL_TRC_CF(data, cf, "destroy");
  ------------------
  |  |  153|  2.03k|  do {                                          \
  |  |  154|  2.03k|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|  2.03k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|  2.03k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 2.03k, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|  2.03k|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  352|  2.03k|  cf_dns_ctx_destroy(data, ctx);
  353|  2.03k|}
cf-dns.c:cf_dns_ctx_destroy:
   93|  2.03k|{
   94|  2.03k|  if(ctx) {
  ------------------
  |  Branch (94:6): [True: 2.03k, False: 0]
  ------------------
   95|  2.03k|    Curl_peer_unlink(&ctx->peer);
   96|  2.03k|    Curl_dns_entry_unlink(data, &ctx->dns);
   97|  2.03k|    curlx_free(ctx);
  ------------------
  |  | 1476|  2.03k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   98|  2.03k|  }
   99|  2.03k|}
cf-dns.c:cf_dns_connect:
  288|  2.03k|{
  289|  2.03k|  struct cf_dns_ctx *ctx = cf->ctx;
  290|  2.03k|  bool ip_query = (ctx->dns_queries & (CURL_DNSQ_A | CURL_DNSQ_AAAA));
  ------------------
  |  |   51|  2.03k|#define CURL_DNSQ_A           (1U << 0)
  ------------------
                bool ip_query = (ctx->dns_queries & (CURL_DNSQ_A | CURL_DNSQ_AAAA));
  ------------------
  |  |   52|  2.03k|#define CURL_DNSQ_AAAA        (1U << 1)
  ------------------
  291|       |
  292|  2.03k|  if(cf->connected) {
  ------------------
  |  Branch (292:6): [True: 0, False: 2.03k]
  ------------------
  293|      0|    *done = TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  294|      0|    return CURLE_OK;
  295|      0|  }
  296|       |
  297|  2.03k|  *done = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  298|  2.03k|  if(!ctx->started) {
  ------------------
  |  Branch (298:6): [True: 2.03k, False: 0]
  ------------------
  299|  2.03k|    ctx->started = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  300|  2.03k|    ctx->resolv_result = cf_dns_start(cf, data, &ctx->dns);
  301|  2.03k|  }
  302|       |
  303|  2.03k|  if(!ctx->dns && !ctx->resolv_result) {
  ------------------
  |  Branch (303:6): [True: 0, False: 2.03k]
  |  Branch (303:19): [True: 0, False: 0]
  ------------------
  304|      0|    ctx->resolv_result =
  305|      0|      Curl_resolv_take_result(data, ctx->resolv_id, &ctx->dns);
  306|      0|  }
  307|       |
  308|  2.03k|  if(ctx->resolv_result && ip_query) {
  ------------------
  |  Branch (308:6): [True: 0, False: 2.03k]
  |  Branch (308:28): [True: 0, False: 0]
  ------------------
  309|       |    /* failing A|AAAA resolves is a hard failure. */
  310|      0|    CURL_TRC_CF(data, cf, "[%s] error resolving: %d",
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  311|      0|                Curl_resolv_query_str(ctx->dns_queries),
  312|      0|                (int)ctx->resolv_result);
  313|      0|    return ctx->resolv_result;
  314|      0|  }
  315|       |
  316|  2.03k|  if(ctx->dns && !ctx->announced) {
  ------------------
  |  Branch (316:6): [True: 2.03k, False: 0]
  |  Branch (316:18): [True: 2.03k, False: 0]
  ------------------
  317|  2.03k|    ctx->announced = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  318|  2.03k|    if((cf->sockindex == FIRSTSOCKET) && ip_query) {
  ------------------
  |  |  234|  2.03k|#define FIRSTSOCKET     0
  ------------------
  |  Branch (318:8): [True: 2.03k, False: 0]
  |  Branch (318:42): [True: 2.03k, False: 0]
  ------------------
  319|  2.03k|      cf->conn->bits.dns_resolved = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  320|  2.03k|      Curl_pgrsTime(data, TIMER_NAMELOOKUP);
  321|  2.03k|    }
  322|  2.03k|    cf_dns_report(cf, data, ctx->dns);
  323|  2.03k|  }
  324|       |
  325|       |  /* Delay connection sub-filters when we are still waiting for AAAA */
  326|  2.03k|  if(!cf_dns_ready_to_connect(cf, data)) {
  ------------------
  |  Branch (326:6): [True: 0, False: 2.03k]
  ------------------
  327|      0|    return CURLE_OK;
  328|      0|  }
  329|       |
  330|  2.03k|  if(cf->next && !cf->next->connected) {
  ------------------
  |  Branch (330:6): [True: 2.03k, False: 0]
  |  Branch (330:18): [True: 2.03k, False: 0]
  ------------------
  331|  2.03k|    bool sub_done;
  332|  2.03k|    CURLcode result = Curl_conn_cf_connect(cf->next, data, &sub_done);
  333|  2.03k|    if(result || !sub_done)
  ------------------
  |  Branch (333:8): [True: 0, False: 2.03k]
  |  Branch (333:18): [True: 0, False: 2.03k]
  ------------------
  334|      0|      return result;
  335|  2.03k|    DEBUGASSERT(sub_done);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (335:5): [True: 0, False: 2.03k]
  |  Branch (335:5): [True: 2.03k, False: 0]
  ------------------
  336|  2.03k|  }
  337|       |
  338|       |  /* sub filter chain is connected, this means the filter has done
  339|       |   * its work and is connected as well, if it has results or not. */
  340|  2.03k|  CURL_TRC_CF(data, cf, "connected filter chain below");
  ------------------
  |  |  153|  2.03k|  do {                                          \
  |  |  154|  2.03k|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|  2.03k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|  2.03k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 2.03k, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|  2.03k|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  341|  2.03k|  *done = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  342|       |  cf->connected = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  343|  2.03k|  Curl_resolv_destroy(data, ctx->resolv_id);
  344|  2.03k|  return CURLE_OK;
  345|  2.03k|}
cf-dns.c:cf_dns_start:
  187|  2.03k|{
  188|  2.03k|  struct cf_dns_ctx *ctx = cf->ctx;
  189|  2.03k|  timediff_t timeout_ms = Curl_timeleft_ms(data);
  190|  2.03k|  CURLcode result = CURLE_OK;
  191|       |
  192|  2.03k|  *pdns = NULL;
  193|       |
  194|  2.03k|  CURL_TRC_CF(data, cf, "[%s] cf_dns_start %s %s:%u",
  ------------------
  |  |  153|  2.03k|  do {                                          \
  |  |  154|  2.03k|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|  2.03k|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|  2.03k|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 2.03k, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|  2.03k|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  ------------------
  |  |  |  Branch (155:35): [True: 0, False: 0]
  |  |  ------------------
  |  |  156|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  195|  2.03k|              Curl_resolv_query_str(ctx->dns_queries),
  196|  2.03k|              ctx->peer->unix_socket ? "unix-domain-socket" : "host",
  197|  2.03k|              ctx->peer->hostname, ctx->peer->port);
  198|  2.03k|  if(ctx->peer->unix_socket)
  ------------------
  |  Branch (198:6): [True: 0, False: 2.03k]
  ------------------
  199|      0|    ctx->dns_queries = CURL_DNSQ_A; /* treat it like an A resolve */
  ------------------
  |  |   51|      0|#define CURL_DNSQ_A           (1U << 0)
  ------------------
  200|       |
  201|  2.03k|  if(CURL_DNSQ_IS_ADDR(ctx->dns_queries)) {
  ------------------
  |  |   56|  2.03k|#define CURL_DNSQ_IS_ADDR(x)  (uint8_t)((x)&(CURL_DNSQ_ADDR))
  |  |  ------------------
  |  |  |  |   55|  2.03k|#define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|  2.03k|#define CURL_DNSQ_A           (1U << 0)
  |  |  |  |  ------------------
  |  |  |  |               #define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|  2.03k|#define CURL_DNSQ_AAAA        (1U << 1)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (56:31): [True: 2.03k, False: 0]
  |  |  ------------------
  ------------------
  202|  2.03k|    if(Curl_is_ipv4addr(ctx->peer->hostname))
  ------------------
  |  Branch (202:8): [True: 2.03k, False: 0]
  ------------------
  203|  2.03k|      ctx->dns_queries |= CURL_DNSQ_A;
  ------------------
  |  |   51|  2.03k|#define CURL_DNSQ_A           (1U << 0)
  ------------------
  204|      0|#ifdef USE_IPV6
  205|      0|    else if(ctx->peer->ipv6)
  ------------------
  |  Branch (205:13): [True: 0, False: 0]
  ------------------
  206|      0|      ctx->dns_queries |= CURL_DNSQ_AAAA;
  ------------------
  |  |   52|      0|#define CURL_DNSQ_AAAA        (1U << 1)
  ------------------
  207|  2.03k|#endif
  208|       |
  209|  2.03k|    result = Curl_resolv(data, ctx->peer, ctx->dns_queries, ctx->transport,
  210|  2.03k|                         (bool)ctx->for_proxy, timeout_ms,
  211|  2.03k|                         &ctx->resolv_id, pdns);
  212|  2.03k|  }
  213|       |#ifdef USE_HTTPSRR
  214|       |  else if(ctx->dns_queries == CURL_DNSQ_HTTPS) {
  215|       |    result = Curl_resolv_https(data, ctx->peer, (bool)ctx->for_proxy,
  216|       |                               timeout_ms, &ctx->resolv_id, pdns);
  217|       |  }
  218|       |#endif
  219|      0|  else {
  220|      0|    failf(data, "unsupported DNS queries %x", ctx->dns_queries);
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  221|      0|    return CURLE_FAILED_INIT;
  222|      0|  }
  223|       |
  224|  2.03k|  DEBUGASSERT(!result || !*pdns);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (224:3): [True: 2.03k, False: 0]
  |  Branch (224:3): [True: 0, False: 0]
  |  Branch (224:3): [True: 2.03k, False: 0]
  |  Branch (224:3): [True: 0, False: 0]
  ------------------
  225|  2.03k|  if(!result) { /* resolved right away, either sync or from dnscache */
  ------------------
  |  Branch (225:6): [True: 2.03k, False: 0]
  ------------------
  226|  2.03k|    DEBUGASSERT(*pdns);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (226:5): [True: 0, False: 2.03k]
  |  Branch (226:5): [True: 2.03k, False: 0]
  ------------------
  227|  2.03k|    return CURLE_OK;
  228|  2.03k|  }
  229|      0|  else if(result == CURLE_AGAIN) { /* async resolv in progress */
  ------------------
  |  Branch (229:11): [True: 0, False: 0]
  ------------------
  230|      0|    return CURLE_OK;
  231|      0|  }
  232|      0|  else if(result == CURLE_OPERATION_TIMEDOUT) { /* took too long */
  ------------------
  |  Branch (232:11): [True: 0, False: 0]
  ------------------
  233|      0|    failf(data, "Failed to resolve '%s' with timeout after %"
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  234|      0|          FMT_TIMEDIFF_T " ms", ctx->peer->hostname,
  235|      0|          Curl_pgrs_since_ms(data, NULL, TIMER_STARTSINGLE));
  236|      0|    return CURLE_OPERATION_TIMEDOUT;
  237|      0|  }
  238|      0|  else {
  239|      0|    DEBUGASSERT(result);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (239:5): [True: 0, False: 0]
  |  Branch (239:5): [True: 0, False: 0]
  ------------------
  240|      0|    if(ctx->dns_queries & (CURL_DNSQ_A | CURL_DNSQ_AAAA))
  ------------------
  |  |   51|      0|#define CURL_DNSQ_A           (1U << 0)
  ------------------
                  if(ctx->dns_queries & (CURL_DNSQ_A | CURL_DNSQ_AAAA))
  ------------------
  |  |   52|      0|#define CURL_DNSQ_AAAA        (1U << 1)
  ------------------
  |  Branch (240:8): [True: 0, False: 0]
  ------------------
  241|      0|      failf(data, "Could not resolve: %s", ctx->peer->hostname);
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  242|      0|    return result;
  243|      0|  }
  244|  2.03k|}
cf-dns.c:cf_dns_report:
  132|  2.03k|{
  133|  2.03k|  struct cf_dns_ctx *ctx = cf->ctx;
  134|  2.03k|  struct dynbuf tmp;
  135|       |
  136|  2.03k|  if(!Curl_trc_is_verbose(data) ||
  ------------------
  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  ------------------
  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  ------------------
  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  ------------------
  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  ------------------
  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  ------------------
  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  ------------------
  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  137|       |     /* ignore no name or numerical IP addresses */
  138|  2.03k|     !dns->hostname[0] || Curl_host_is_ipnum(dns->hostname))
  ------------------
  |  Branch (138:6): [True: 0, False: 2.03k]
  |  Branch (138:27): [True: 2.03k, False: 0]
  ------------------
  139|  2.03k|    return;
  140|       |
  141|      0|  if(ctx->peer->unix_socket) {
  ------------------
  |  Branch (141:6): [True: 0, False: 0]
  ------------------
  142|      0|#ifdef USE_UNIX_SOCKETS
  143|      0|    CURL_TRC_CF(data, cf, "resolved unix://%s", ctx->peer->hostname);
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  144|       |#else
  145|       |    DEBUGASSERT(0);
  146|       |#endif
  147|      0|  }
  148|      0|  else {
  149|      0|    curlx_dyn_init(&tmp, 1024);
  150|      0|    if(CURL_DNSQ_IS_ADDR(ctx->dns_queries)) {
  ------------------
  |  |   56|      0|#define CURL_DNSQ_IS_ADDR(x)  (uint8_t)((x)&(CURL_DNSQ_ADDR))
  |  |  ------------------
  |  |  |  |   55|      0|#define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define CURL_DNSQ_A           (1U << 0)
  |  |  |  |  ------------------
  |  |  |  |               #define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|#define CURL_DNSQ_AAAA        (1U << 1)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (56:31): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  151|      0|      infof(data, "Host %s:%u was resolved.", dns->hostname, dns->port);
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  152|      0|#ifdef CURLRES_IPV6
  153|      0|      cf_dns_report_addr(data, &tmp, "IPv6: ", AF_INET6, dns->addr);
  154|      0|#endif
  155|      0|      cf_dns_report_addr(data, &tmp, "IPv4: ", AF_INET, dns->addr);
  156|      0|    }
  157|       |#ifdef USE_HTTPSRR
  158|       |    else if(ctx->dns_queries & CURL_DNSQ_HTTPS) {
  159|       |      if(!dns->hinfo)
  160|       |        infof(data, "HTTPS-RR %s:%u: -", dns->hostname, dns->port);
  161|       |      else if(!Curl_httpsrr_applicable(data, dns->hinfo))
  162|       |        infof(data, "HTTPS-RR %s:%u: not applicable",
  163|       |              dns->hostname, dns->port);
  164|       |      else {
  165|       |        CURLcode result = Curl_httpsrr_print(&tmp, dns->hinfo);
  166|       |        if(!result)
  167|       |          infof(data, "HTTPS-RR %s:%u: %s",
  168|       |                dns->hostname, dns->port, curlx_dyn_ptr(&tmp));
  169|       |        else
  170|       |          infof(data, "Error printing HTTPS-RR information");
  171|       |      }
  172|       |    }
  173|       |#endif
  174|      0|    curlx_dyn_free(&tmp);
  175|      0|  }
  176|      0|}
cf-dns.c:cf_dns_ready_to_connect:
  248|  2.03k|{
  249|  2.03k|  struct cf_dns_ctx *ctx = cf->ctx;
  250|       |
  251|  2.03k|  if(ctx->resolv_result)
  ------------------
  |  Branch (251:6): [True: 0, False: 2.03k]
  ------------------
  252|      0|    return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  253|  2.03k|  else if(ctx->dns)
  ------------------
  |  Branch (253:11): [True: 2.03k, False: 0]
  ------------------
  254|  2.03k|    return TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  255|      0|#ifdef USE_CURL_ASYNC
  256|      0|  else if(CURL_DNSQ_IS_ADDR(ctx->dns_queries)) {
  ------------------
  |  |   56|      0|#define CURL_DNSQ_IS_ADDR(x)  (uint8_t)((x)&(CURL_DNSQ_ADDR))
  |  |  ------------------
  |  |  |  |   55|      0|#define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define CURL_DNSQ_A           (1U << 0)
  |  |  |  |  ------------------
  |  |  |  |               #define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|#define CURL_DNSQ_AAAA        (1U << 1)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (56:31): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  257|      0|    timediff_t remain_ms;
  258|       |    /* For Happy Eyeballing, we can start on either A or AAAA resolves,
  259|       |     * but AAAA is preferred. We enforce a small delay for missing
  260|       |     * AAAA to arrive, then we let the connect continue.
  261|       |     * Note: if AAAA was never started (-4), it is considered to have
  262|       |     * an answer (e.g. a negative one). */
  263|      0|    if(Curl_resolv_has_answers(data, ctx->resolv_id, CURL_DNSQ_AAAA))
  ------------------
  |  |   52|      0|#define CURL_DNSQ_AAAA        (1U << 1)
  ------------------
  |  Branch (263:8): [True: 0, False: 0]
  ------------------
  264|      0|      return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  265|      0|    remain_ms = ctx->he_aaaa_await_ms -
  266|      0|                Curl_resolv_elapsed_ms(data, ctx->resolv_id);
  267|      0|    if(remain_ms <= 0)
  ------------------
  |  Branch (267:8): [True: 0, False: 0]
  ------------------
  268|      0|      return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  269|      0|    CURL_TRC_CF(data, cf, "[%s] still waiting %" FMT_TIMEDIFF_T
  ------------------
  |  |  153|      0|  do {                                          \
  |  |  154|      0|    if(Curl_trc_cf_is_verbose(cf, data))        \
  |  |  ------------------
  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  327|      0|   (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  155|      0|      Curl_trc_cf_infof(data, cf, __VA_ARGS__); \
  |  |  156|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (156:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  270|      0|                "ms for AAAA result",
  271|      0|                Curl_resolv_query_str(ctx->dns_queries), remain_ms);
  272|      0|    Curl_expire(data, remain_ms, EXPIRE_HAPPY_EYEBALLS);
  273|      0|    return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  274|      0|  }
  275|      0|  else {
  276|      0|    return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  277|      0|  }
  278|       |#else
  279|       |  (void)data;
  280|       |  DEBUGASSERT(0); /* We should not come here */
  281|       |  return FALSE;
  282|       |#endif /* USE_CURL_ASYNC */
  283|  2.03k|}
cf-dns.c:cf_dns_cntrl:
  389|  4.07k|{
  390|  4.07k|  struct cf_dns_ctx *ctx = cf->ctx;
  391|  4.07k|  CURLcode result = CURLE_OK;
  392|       |
  393|  4.07k|  (void)arg1;
  394|  4.07k|  (void)arg2;
  395|  4.07k|  switch(event) {
  396|      0|  case CF_CTRL_DATA_DONE:
  ------------------
  |  |  118|      0|#define CF_CTRL_DATA_DONE               7  /* premature  NULL     ignored */
  ------------------
  |  Branch (396:3): [True: 0, False: 4.07k]
  ------------------
  397|      0|    if(ctx->dns) {
  ------------------
  |  Branch (397:8): [True: 0, False: 0]
  ------------------
  398|       |      /* Should only come here when the connect attempt failed and
  399|       |       * `data` is giving up on it. On a successful connect, we already
  400|       |       * unlinked the DNS entry. */
  401|      0|      Curl_dns_entry_unlink(data, &ctx->dns);
  402|      0|    }
  403|      0|    break;
  404|  4.07k|  default:
  ------------------
  |  Branch (404:3): [True: 4.07k, False: 0]
  ------------------
  405|  4.07k|    break;
  406|  4.07k|  }
  407|  4.07k|  return result;
  408|  4.07k|}
cf-dns.c:cf_dns_add_resolve:
  511|  2.03k|{
  512|  2.03k|  struct Curl_cfilter *cf = data->conn->cfilter[sockindex];
  513|  2.03k|  struct Curl_cfilter *cf_dns = NULL;
  514|  2.03k|  bool is_addr = CURL_DNSQ_IS_ADDR(dns_queries);
  ------------------
  |  |   56|  2.03k|#define CURL_DNSQ_IS_ADDR(x)  (uint8_t)((x)&(CURL_DNSQ_ADDR))
  |  |  ------------------
  |  |  |  |   55|  2.03k|#define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|  2.03k|#define CURL_DNSQ_A           (1U << 0)
  |  |  |  |  ------------------
  |  |  |  |               #define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|  2.03k|#define CURL_DNSQ_AAAA        (1U << 1)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  515|       |
  516|  2.03k|  if((dns_queries & CURL_DNSQ_HTTPS) &&
  ------------------
  |  |   53|  2.03k|#define CURL_DNSQ_HTTPS       (1U << 2)
  ------------------
  |  Branch (516:6): [True: 0, False: 2.03k]
  ------------------
  517|      0|     Curl_is_ipaddr(peer->hostname)) {
  ------------------
  |  Branch (517:6): [True: 0, False: 0]
  ------------------
  518|      0|    dns_queries = (uint8_t)(dns_queries & ~CURL_DNSQ_HTTPS);
  ------------------
  |  |   53|      0|#define CURL_DNSQ_HTTPS       (1U << 2)
  ------------------
  519|      0|  }
  520|       |
  521|  4.07k|  for(; cf && dns_queries; cf = cf->next) {
  ------------------
  |  Branch (521:9): [True: 2.03k, False: 2.03k]
  |  Branch (521:15): [True: 2.03k, False: 0]
  ------------------
  522|  2.03k|    if(cf->cft == &Curl_cft_dns) {
  ------------------
  |  Branch (522:8): [True: 0, False: 2.03k]
  ------------------
  523|      0|      struct cf_dns_ctx *ctx = cf->ctx;
  524|      0|      cf_dns = cf;
  525|      0|      if(Curl_peer_same_destination(ctx->peer, peer)) {
  ------------------
  |  Branch (525:10): [True: 0, False: 0]
  ------------------
  526|       |        /* subtract queries already being scheduled/ongoing */
  527|      0|        dns_queries = (uint8_t)(~ctx->dns_queries & dns_queries);
  528|      0|        if(!dns_queries) { /* already there */
  ------------------
  |  Branch (528:12): [True: 0, False: 0]
  ------------------
  529|      0|          return CURLE_OK;
  530|      0|        }
  531|      0|        else if(is_addr && !ctx->started &&
  ------------------
  |  Branch (531:17): [True: 0, False: 0]
  |  Branch (531:28): [True: 0, False: 0]
  ------------------
  532|      0|                CURL_DNSQ_IS_ADDR(ctx->dns_queries)) {
  ------------------
  |  |   56|      0|#define CURL_DNSQ_IS_ADDR(x)  (uint8_t)((x)&(CURL_DNSQ_ADDR))
  |  |  ------------------
  |  |  |  |   55|      0|#define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define CURL_DNSQ_A           (1U << 0)
  |  |  |  |  ------------------
  |  |  |  |               #define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|#define CURL_DNSQ_AAAA        (1U << 1)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (56:31): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  533|      0|          ctx->dns_queries |= dns_queries;
  534|      0|          CURL_TRC_DNS(data, "[%s] added queries=%s for %s:%u",
  ------------------
  |  |  168|      0|  do {                                 \
  |  |  169|      0|    if(CURL_TRC_DNS_is_verbose(data))  \
  |  |  ------------------
  |  |  |  |  137|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_dns)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  170|      0|      Curl_trc_dns(data, __VA_ARGS__); \
  |  |  171|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (171:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  535|      0|                       Curl_resolv_query_str(ctx->dns_queries),
  536|      0|                       Curl_resolv_query_str(dns_queries),
  537|      0|                       peer->hostname, peer->port);
  538|      0|          return CURLE_OK;
  539|      0|        }
  540|      0|      }
  541|      0|    }
  542|  2.03k|  }
  543|       |
  544|  2.03k|  if(dns_queries) {
  ------------------
  |  Branch (544:6): [True: 2.03k, False: 0]
  ------------------
  545|       |    /* No existing filter is handling these, add a new DNS filter
  546|       |     * (after the last one if there was one already. FCFS. */
  547|  2.03k|    if(cf_dns)
  ------------------
  |  Branch (547:8): [True: 0, False: 2.03k]
  ------------------
  548|      0|      return cf_dns_insert_after(cf_dns, data, peer, dns_queries, transport);
  549|  2.03k|    else
  550|  2.03k|      return cf_dns_add(data, conn, sockindex, peer, dns_queries, transport);
  551|  2.03k|  }
  552|      0|  return CURLE_OK;
  553|  2.03k|}
cf-dns.c:cf_dns_create:
  433|  2.03k|{
  434|  2.03k|  struct Curl_cfilter *cf = NULL;
  435|  2.03k|  struct cf_dns_ctx *ctx;
  436|  2.03k|  CURLcode result = CURLE_OK;
  437|       |
  438|  2.03k|  (void)data;
  439|  2.03k|  ctx = cf_dns_ctx_create(data, peer, dns_queries, transport, for_proxy);
  440|  2.03k|  if(!ctx) {
  ------------------
  |  Branch (440:6): [True: 0, False: 2.03k]
  ------------------
  441|      0|    result = CURLE_OUT_OF_MEMORY;
  442|      0|    goto out;
  443|      0|  }
  444|       |
  445|  2.03k|  result = Curl_cf_create(&cf, &Curl_cft_dns, ctx);
  446|       |
  447|  2.03k|out:
  448|  2.03k|  *pcf = result ? NULL : cf;
  ------------------
  |  Branch (448:10): [True: 0, False: 2.03k]
  ------------------
  449|  2.03k|  if(result)
  ------------------
  |  Branch (449:6): [True: 0, False: 2.03k]
  ------------------
  450|      0|    cf_dns_ctx_destroy(data, ctx);
  451|  2.03k|  return result;
  452|  2.03k|}
cf-dns.c:cf_dns_ctx_create:
   61|  2.03k|{
   62|  2.03k|  struct cf_dns_ctx *ctx;
   63|       |
   64|  2.03k|  ctx = curlx_calloc(1, sizeof(*ctx));
  ------------------
  |  | 1473|  2.03k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
   65|  2.03k|  if(!ctx)
  ------------------
  |  Branch (65:6): [True: 0, False: 2.03k]
  ------------------
   66|      0|    return NULL;
   67|       |
   68|  2.03k|  Curl_peer_link(&ctx->peer, peer);
   69|  2.03k|  ctx->dns_queries = dns_queries;
   70|  2.03k|  ctx->transport = transport;
   71|  2.03k|  ctx->for_proxy = for_proxy;
   72|  2.03k|  ctx->he_aaaa_await_ms = CURL_HE_AAAA_AWAIT_MS;
  ------------------
  |  |   41|  2.03k|#define CURL_HE_AAAA_AWAIT_MS    25
  ------------------
   73|  2.03k|#ifdef DEBUGBUILD
   74|  2.03k|  {
   75|  2.03k|    const char *p = getenv("CURL_DBG_HE_AAAA_AWAIT_MS");
   76|  2.03k|    if(p) {
  ------------------
  |  Branch (76:8): [True: 0, False: 2.03k]
  ------------------
   77|      0|      curl_off_t l;
   78|      0|      if(!curlx_str_number(&p, &l, UINT32_MAX)) {
  ------------------
  |  Branch (78:10): [True: 0, False: 0]
  ------------------
   79|      0|        ctx->he_aaaa_await_ms = (uint32_t)l;
   80|      0|      }
   81|      0|    }
   82|  2.03k|  }
   83|  2.03k|#endif
   84|       |
   85|  2.03k|  CURL_TRC_DNS(data, "[%s] created DNS filter for %s:%u, transport=%x",
  ------------------
  |  |  168|  2.03k|  do {                                 \
  |  |  169|  2.03k|    if(CURL_TRC_DNS_is_verbose(data))  \
  |  |  ------------------
  |  |  |  |  137|  2.03k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_dns)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.03k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.03k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 2.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  170|  2.03k|      Curl_trc_dns(data, __VA_ARGS__); \
  |  |  171|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (171:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
   86|  2.03k|               Curl_resolv_query_str(ctx->dns_queries),
   87|  2.03k|               peer->hostname, peer->port, ctx->transport);
   88|  2.03k|  return ctx;
   89|  2.03k|}
cf-dns.c:cf_dns_add:
  462|  2.03k|{
  463|  2.03k|  struct Curl_cfilter *cf = NULL;
  464|  2.03k|  bool for_proxy = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  465|  2.03k|  CURLcode result;
  466|       |
  467|  2.03k|  if(!peer)
  ------------------
  |  Branch (467:6): [True: 0, False: 2.03k]
  ------------------
  468|      0|    return CURLE_FAILED_INIT;
  469|  2.03k|#ifndef CURL_DISABLE_PROXY
  470|  2.03k|  for_proxy = (peer == conn->socks_proxy.peer) ||
  ------------------
  |  Branch (470:15): [True: 0, False: 2.03k]
  ------------------
  471|  2.03k|              (peer == conn->http_proxy.peer);
  ------------------
  |  Branch (471:15): [True: 0, False: 2.03k]
  ------------------
  472|  2.03k|#endif
  473|       |
  474|  2.03k|  result = cf_dns_create(&cf, data, peer, dns_queries, transport, for_proxy);
  475|  2.03k|  if(result)
  ------------------
  |  Branch (475:6): [True: 0, False: 2.03k]
  ------------------
  476|      0|    goto out;
  477|  2.03k|  Curl_conn_cf_add(data, conn, sockindex, cf);
  478|  2.03k|out:
  479|  2.03k|  return result;
  480|  2.03k|}

Curl_dnscache_prune:
  196|  2.03k|{
  197|  2.03k|  struct Curl_dnscache *dnscache = dnscache_get(data);
  198|       |  /* the timeout may be set -1 (forever) */
  199|  2.03k|  timediff_t timeout_ms = data->set.dns_cache_timeout_ms;
  200|       |
  201|  2.03k|  if(!dnscache || (timeout_ms == -1))
  ------------------
  |  Branch (201:6): [True: 0, False: 2.03k]
  |  Branch (201:19): [True: 0, False: 2.03k]
  ------------------
  202|       |    /* NULL hostcache means we cannot do it */
  203|      0|    return;
  204|       |
  205|  2.03k|  dnscache_lock(data, dnscache);
  206|       |
  207|  2.03k|  do {
  208|       |    /* Remove outdated and unused entries from the hostcache */
  209|  2.03k|    timediff_t oldest_ms =
  210|  2.03k|      dnscache_prune(&dnscache->entries, timeout_ms, *Curl_pgrs_now(data));
  211|       |
  212|  2.03k|    if(Curl_hash_count(&dnscache->entries) > MAX_DNS_CACHE_SIZE)
  ------------------
  |  |   61|  2.03k|#define MAX_DNS_CACHE_SIZE 29999
  ------------------
  |  Branch (212:8): [True: 0, False: 2.03k]
  ------------------
  213|       |      /* prune the ones over half this age */
  214|      0|      timeout_ms = oldest_ms / 2;
  215|  2.03k|    else
  216|  2.03k|      break;
  217|       |
  218|       |    /* if the cache size is still too big, use the oldest age as new prune
  219|       |       limit */
  220|  2.03k|  } while(timeout_ms);
  ------------------
  |  Branch (220:11): [True: 0, False: 0]
  ------------------
  221|       |
  222|  2.03k|  dnscache_unlock(data, dnscache);
  223|  2.03k|}
Curl_dnscache_get:
  328|  2.03k|{
  329|  2.03k|  struct Curl_dnscache *dnscache = dnscache_get(data);
  330|  2.03k|  struct Curl_dns_entry *dns = NULL;
  331|  2.03k|  CURLcode result = CURLE_OK;
  332|       |
  333|  2.03k|  dnscache_lock(data, dnscache);
  334|  2.03k|  result = fetch_addr(data, dnscache, dns_queries, peer, &dns);
  335|  2.03k|  if(!result && dns)
  ------------------
  |  Branch (335:6): [True: 2.03k, False: 0]
  |  Branch (335:17): [True: 0, False: 2.03k]
  ------------------
  336|      0|    dns->refcount++; /* we pass out a reference */
  337|  2.03k|  else if(result) {
  ------------------
  |  Branch (337:11): [True: 0, False: 2.03k]
  ------------------
  338|      0|    DEBUGASSERT(!dns);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (338:5): [True: 0, False: 0]
  |  Branch (338:5): [True: 0, False: 0]
  ------------------
  339|      0|    dns = NULL;
  340|      0|  }
  341|  2.03k|  dnscache_unlock(data, dnscache);
  342|       |
  343|  2.03k|  CURL_TRC_DNS(data, "cache lookup %s:%u queries=%s -> %d %sfound",
  ------------------
  |  |  168|  2.03k|  do {                                 \
  |  |  169|  2.03k|    if(CURL_TRC_DNS_is_verbose(data))  \
  |  |  ------------------
  |  |  |  |  137|  2.03k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_dns)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.03k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.03k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 2.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  170|  2.03k|      Curl_trc_dns(data, __VA_ARGS__); \
  |  |  ------------------
  |  |  |  Branch (170:26): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (171:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  344|  2.03k|               peer->hostname, peer->port, Curl_resolv_query_str(dns_queries),
  345|  2.03k|               (int)result, dns ? "" : "not ");
  346|  2.03k|  *pentry = dns;
  347|  2.03k|  return result;
  348|  2.03k|}
Curl_dnsc_mk_addr:
  543|  2.03k|{
  544|  2.03k|  struct dnsc_id id;
  545|  2.03k|  struct Curl_dns_entry *dns;
  546|       |
  547|  2.03k|  dnsc_peer2id(&id, CURL_DNST_ADDR, peer);
  ------------------
  |  |   41|  2.03k|#define CURL_DNST_ADDR      'A'
  ------------------
  548|  2.03k|  dns = dnsc_entry_create(data, &id, FALSE);
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  549|       |  dns = dnsc_entry_assign_addr(data, dns, dns_queries, paddr, NULL);
  550|  2.03k|  return dns;
  551|  2.03k|}
Curl_dnscache_add:
  698|  2.03k|{
  699|  2.03k|  struct Curl_dnscache *dnscache = dnscache_get(data);
  700|  2.03k|  struct Curl_str name;
  701|  2.03k|  struct dnsc_id id;
  702|  2.03k|  struct dnsc_key key;
  703|       |
  704|  2.03k|  if(!dnscache)
  ------------------
  |  Branch (704:6): [True: 0, False: 2.03k]
  ------------------
  705|      0|    return CURLE_FAILED_INIT;
  706|  2.03k|  if(!entry || (entry->type == CURL_DNST_INIT))
  ------------------
  |  |   40|  2.03k|#define CURL_DNST_INIT      '\0'
  ------------------
  |  Branch (706:6): [True: 0, False: 2.03k]
  |  Branch (706:16): [True: 0, False: 2.03k]
  ------------------
  707|      0|    return CURLE_BAD_FUNCTION_ARGUMENT;
  708|       |
  709|  2.03k|  curlx_str_assign(&name, entry->hostname, entry->hostlen);
  710|  2.03k|  dnsc_str2id(&id, entry->type, &name, entry->port);
  711|  2.03k|  dnsc_id2key(&key, &id);
  712|       |
  713|       |  /* Store the resolved data in our DNS cache and up ref count */
  714|  2.03k|  dnscache_lock(data, dnscache);
  715|  2.03k|  if(!Curl_hash_add(&dnscache->entries, key.data, key.len, (void *)entry)) {
  ------------------
  |  Branch (715:6): [True: 0, False: 2.03k]
  ------------------
  716|      0|    dnscache_unlock(data, dnscache);
  717|      0|    return CURLE_OUT_OF_MEMORY;
  718|      0|  }
  719|  2.03k|  entry->refcount++;
  720|  2.03k|  dnscache_unlock(data, dnscache);
  721|  2.03k|  CURL_TRC_DNS(data, "cached entry for %s:%u queries=%s",
  ------------------
  |  |  168|  2.03k|  do {                                 \
  |  |  169|  2.03k|    if(CURL_TRC_DNS_is_verbose(data))  \
  |  |  ------------------
  |  |  |  |  137|  2.03k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_dns)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.03k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.03k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 2.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  170|  2.03k|      Curl_trc_dns(data, __VA_ARGS__); \
  |  |  171|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (171:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  722|  2.03k|               entry->hostname, entry->port,
  723|  2.03k|               Curl_resolv_query_str(entry->dns_queries));
  724|  2.03k|  return CURLE_OK;
  725|  2.03k|}
Curl_dns_entry_unlink:
  783|  2.03k|{
  784|  2.03k|  if(*pdns) {
  ------------------
  |  Branch (784:6): [True: 2.03k, False: 0]
  ------------------
  785|  2.03k|    struct Curl_dnscache *dnscache = dnscache_get(data);
  786|  2.03k|    struct Curl_dns_entry *dns = *pdns;
  787|  2.03k|    *pdns = NULL;
  788|  2.03k|    dnscache_lock(data, dnscache);
  789|  2.03k|    dns->refcount--;
  790|  2.03k|    if(dns->refcount == 0)
  ------------------
  |  Branch (790:8): [True: 0, False: 2.03k]
  ------------------
  791|      0|      dnscache_entry_free(dns);
  792|  2.03k|    dnscache_unlock(data, dnscache);
  793|  2.03k|  }
  794|  2.03k|}
Curl_dnscache_init:
  809|  2.53k|{
  810|  2.53k|  Curl_hash_init(&dns->entries, size, Curl_hash_str, curlx_str_key_compare,
  811|  2.53k|                 dnscache_entry_dtor);
  812|  2.53k|}
Curl_dnscache_destroy:
  815|  2.53k|{
  816|  2.53k|  Curl_hash_destroy(&dns->entries);
  817|  2.53k|}
dnscache.c:dnscache_get:
  169|  8.14k|{
  170|  8.14k|  if(data->share && data->share->specifier & (1 << CURL_LOCK_DATA_DNS))
  ------------------
  |  Branch (170:6): [True: 0, False: 8.14k]
  |  Branch (170:21): [True: 0, False: 0]
  ------------------
  171|      0|    return &data->share->dnscache;
  172|  8.14k|  if(data->multi)
  ------------------
  |  Branch (172:6): [True: 8.14k, False: 0]
  ------------------
  173|  8.14k|    return &data->multi->dnscache;
  174|      0|  return NULL;
  175|  8.14k|}
dnscache.c:dnscache_lock:
  179|  8.14k|{
  180|  8.14k|  if(data->share && dnscache == &data->share->dnscache)
  ------------------
  |  Branch (180:6): [True: 0, False: 8.14k]
  |  Branch (180:21): [True: 0, False: 0]
  ------------------
  181|      0|    Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
  182|  8.14k|}
dnscache.c:dnscache_prune:
  154|  2.03k|{
  155|  2.03k|  struct dnscache_prune_data user;
  156|       |
  157|  2.03k|  user.max_age_ms = cache_timeout_ms;
  158|  2.03k|  user.now = now;
  159|  2.03k|  user.oldest_ms = 0;
  160|       |
  161|  2.03k|  Curl_hash_clean_with_criterium(hostcache,
  162|  2.03k|                                 (void *)&user,
  163|  2.03k|                                 dnscache_entry_is_stale);
  164|       |
  165|  2.03k|  return user.oldest_ms;
  166|  2.03k|}
dnscache.c:dnscache_entry_is_stale:
  130|  2.03k|{
  131|  2.03k|  struct dnscache_prune_data *prune = (struct dnscache_prune_data *)datap;
  132|  2.03k|  struct Curl_dns_entry *dns = (struct Curl_dns_entry *)hc;
  133|       |
  134|  2.03k|  if(dns->timestamp.tv_sec || dns->timestamp.tv_usec) {
  ------------------
  |  Branch (134:6): [True: 2.03k, False: 0]
  |  Branch (134:31): [True: 0, False: 0]
  ------------------
  135|       |    /* get age in milliseconds */
  136|  2.03k|    timediff_t age = curlx_ptimediff_ms(&prune->now, &dns->timestamp);
  137|  2.03k|    if(!dns->addr)
  ------------------
  |  Branch (137:8): [True: 0, False: 2.03k]
  ------------------
  138|      0|      age *= 2; /* negative entries age twice as fast */
  139|  2.03k|    if(age >= prune->max_age_ms)
  ------------------
  |  Branch (139:8): [True: 0, False: 2.03k]
  ------------------
  140|      0|      return TRUE;
  ------------------
  |  | 1045|      0|#define TRUE true
  ------------------
  141|  2.03k|    if(age > prune->oldest_ms)
  ------------------
  |  Branch (141:8): [True: 5, False: 2.03k]
  ------------------
  142|      5|      prune->oldest_ms = age;
  143|  2.03k|  }
  144|  2.03k|  return FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  145|  2.03k|}
dnscache.c:dnscache_unlock:
  186|  8.14k|{
  187|  8.14k|  if(data->share && dnscache == &data->share->dnscache)
  ------------------
  |  Branch (187:6): [True: 0, False: 8.14k]
  |  Branch (187:21): [True: 0, False: 0]
  ------------------
  188|      0|    Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
  189|  8.14k|}
dnscache.c:fetch_addr:
  241|  2.03k|{
  242|  2.03k|  struct Curl_dns_entry *dns = NULL;
  243|  2.03k|  struct dnsc_id id;
  244|  2.03k|  struct dnsc_key key;
  245|  2.03k|  char type = CURL_DNSQ_IS_ADDR(dns_queries) ?
  ------------------
  |  |   56|  2.03k|#define CURL_DNSQ_IS_ADDR(x)  (uint8_t)((x)&(CURL_DNSQ_ADDR))
  |  |  ------------------
  |  |  |  |   55|  2.03k|#define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|  2.03k|#define CURL_DNSQ_A           (1U << 0)
  |  |  |  |  ------------------
  |  |  |  |               #define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|  2.03k|#define CURL_DNSQ_AAAA        (1U << 1)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (56:31): [True: 2.03k, False: 0]
  |  |  ------------------
  ------------------
  246|  2.03k|              CURL_DNST_ADDR : CURL_DNST_HTTPS;
  ------------------
  |  |   41|  2.03k|#define CURL_DNST_ADDR      'A'
  ------------------
                            CURL_DNST_ADDR : CURL_DNST_HTTPS;
  ------------------
  |  |   42|  2.03k|#define CURL_DNST_HTTPS     'H'
  ------------------
  247|  2.03k|  CURLcode result = CURLE_OK;
  248|       |
  249|  2.03k|  *pdns = NULL;
  250|  2.03k|  if(!dnscache)
  ------------------
  |  Branch (250:6): [True: 0, False: 2.03k]
  ------------------
  251|      0|    return CURLE_OK;
  252|       |
  253|  2.03k|  dnsc_peer2id(&id, type, peer);
  254|  2.03k|  dnsc_id2key(&key, &id);
  255|       |
  256|       |  /* See if it is already in our dns cache */
  257|  2.03k|  dns = Curl_hash_pick(&dnscache->entries, key.data, key.len);
  258|       |
  259|       |  /* No entry found in cache, check if we might have a wildcard entry */
  260|  2.03k|  if(!dns && (type == CURL_DNST_ADDR) && data->state.wildcard_resolve) {
  ------------------
  |  |   41|  2.03k|#define CURL_DNST_ADDR      'A'
  ------------------
  |  Branch (260:6): [True: 2.03k, False: 0]
  |  Branch (260:14): [True: 2.03k, False: 0]
  |  Branch (260:42): [True: 0, False: 2.03k]
  ------------------
  261|      0|    struct Curl_str wildname;
  262|       |
  263|      0|    curlx_str_assign(&wildname, "*", 1);
  264|      0|    dnsc_str2id(&id, CURL_DNST_ADDR, &wildname, peer->port);
  ------------------
  |  |   41|      0|#define CURL_DNST_ADDR      'A'
  ------------------
  265|      0|    dnsc_id2key(&key, &id);
  266|       |
  267|       |    /* See if it is already in our dns cache */
  268|      0|    dns = Curl_hash_pick(&dnscache->entries, key.data, key.len);
  269|      0|  }
  270|       |
  271|  2.03k|  if(dns && (data->set.dns_cache_timeout_ms != -1)) {
  ------------------
  |  Branch (271:6): [True: 0, False: 2.03k]
  |  Branch (271:13): [True: 0, False: 0]
  ------------------
  272|       |    /* See whether the returned entry is stale. Done before we release lock */
  273|      0|    struct dnscache_prune_data user;
  274|       |
  275|      0|    user.now = *Curl_pgrs_now(data);
  276|      0|    user.max_age_ms = data->set.dns_cache_timeout_ms;
  277|      0|    user.oldest_ms = 0;
  278|       |
  279|      0|    if(dnscache_entry_is_stale(&user, dns)) {
  ------------------
  |  Branch (279:8): [True: 0, False: 0]
  ------------------
  280|      0|      infof(data, "Hostname in DNS cache was stale, zapped");
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  281|      0|      dns = NULL; /* the memory deallocation is being handled by the hash */
  282|      0|      Curl_hash_delete(&dnscache->entries, key.data, key.len);
  283|      0|    }
  284|      0|  }
  285|       |
  286|       |  /* We need to cache address information and HTTPS-RR separately. */
  287|  2.03k|  if(dns && CURL_DNSQ_IS_ADDR(dns_queries)) {
  ------------------
  |  |   56|      0|#define CURL_DNSQ_IS_ADDR(x)  (uint8_t)((x)&(CURL_DNSQ_ADDR))
  |  |  ------------------
  |  |  |  |   55|      0|#define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define CURL_DNSQ_A           (1U << 0)
  |  |  |  |  ------------------
  |  |  |  |               #define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|#define CURL_DNSQ_AAAA        (1U << 1)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (56:31): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (287:6): [True: 0, False: 2.03k]
  ------------------
  288|      0|    if((uint8_t)(dns->dns_queries & dns_queries) !=
  ------------------
  |  Branch (288:8): [True: 0, False: 0]
  ------------------
  289|      0|       (uint8_t)(dns_queries & CURL_DNSQ_ADDR)) {
  ------------------
  |  |   55|      0|#define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  ------------------
  |  |  |  |   51|      0|#define CURL_DNSQ_A           (1U << 0)
  |  |  ------------------
  |  |               #define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  ------------------
  |  |  |  |   52|      0|#define CURL_DNSQ_AAAA        (1U << 1)
  |  |  ------------------
  ------------------
  290|       |      /* The entry does not cover all wanted address queries, a miss. */
  291|      0|      dns = NULL;
  292|      0|    }
  293|      0|    else if(!(dns->dns_responses & dns_queries)) {
  ------------------
  |  Branch (293:13): [True: 0, False: 0]
  ------------------
  294|       |      /* The entry has no responses for the wanted DNS queries. */
  295|      0|      CURL_TRC_DNS(data, "cache entry does not have type=%s addresses",
  ------------------
  |  |  168|      0|  do {                                 \
  |  |  169|      0|    if(CURL_TRC_DNS_is_verbose(data))  \
  |  |  ------------------
  |  |  |  |  137|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_dns)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  170|      0|      Curl_trc_dns(data, __VA_ARGS__); \
  |  |  171|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (171:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  296|      0|                   Curl_resolv_query_str(dns_queries));
  297|      0|      dns = NULL;
  298|      0|      result = CURLE_COULDNT_RESOLVE_HOST;
  299|      0|    }
  300|      0|    else if(dns && !dns->addr) { /* negative entry */
  ------------------
  |  Branch (300:13): [True: 0, False: 0]
  |  Branch (300:20): [True: 0, False: 0]
  ------------------
  301|      0|      dns = NULL;
  302|      0|      result = CURLE_COULDNT_RESOLVE_HOST;
  303|      0|    }
  304|      0|  }
  305|       |
  306|  2.03k|  *pdns = dns;
  307|  2.03k|  return result;
  308|  2.03k|}
dnscache.c:dnsc_peer2id:
   71|  4.07k|{
   72|  4.07k|  curlx_str_assign(&pid->name, peer->hostname, strlen(peer->hostname));
   73|  4.07k|  pid->port = peer->port;
   74|  4.07k|  pid->type = type;
   75|  4.07k|}
dnscache.c:dnsc_entry_create:
  444|  2.03k|{
  445|  2.03k|  struct Curl_dns_entry *dns = NULL;
  446|       |
  447|       |  /* Create a new cache entry, struct already has the hostname NUL */
  448|  2.03k|  dns = curlx_calloc(1, sizeof(struct Curl_dns_entry) +
  ------------------
  |  | 1473|  2.03k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
  449|  2.03k|                     curlx_strlen(&pid->name));
  450|  2.03k|  if(!dns)
  ------------------
  |  Branch (450:6): [True: 0, False: 2.03k]
  ------------------
  451|      0|    goto out;
  452|       |
  453|  2.03k|  dns->refcount = 1; /* the cache has the first reference */
  454|  2.03k|  dns->hostlen = curlx_strlen(&pid->name);
  ------------------
  |  |   50|  2.03k|#define curlx_strlen(x) ((x)->len)
  ------------------
  455|  2.03k|  dns->port = pid->port;
  456|  2.03k|  if(dns->hostlen)
  ------------------
  |  Branch (456:6): [True: 2.03k, False: 0]
  ------------------
  457|  2.03k|    memcpy(dns->hostname, curlx_str(&pid->name), dns->hostlen);
  ------------------
  |  |   49|  2.03k|#define curlx_str(x)    ((x)->str)
  ------------------
  458|       |
  459|  2.03k|  if(permanent) {
  ------------------
  |  Branch (459:6): [True: 0, False: 2.03k]
  ------------------
  460|      0|    dns->timestamp.tv_sec = 0; /* an entry that never goes stale */
  461|      0|    dns->timestamp.tv_usec = 0; /* an entry that never goes stale */
  462|      0|  }
  463|  2.03k|  else {
  464|  2.03k|    dns->timestamp = *Curl_pgrs_now(data);
  465|  2.03k|  }
  466|       |
  467|  2.03k|out:
  468|  2.03k|  return dns;
  469|  2.03k|}
dnscache.c:dnsc_entry_assign_addr:
  477|  2.03k|{
  478|  2.03k|  if(!dns)
  ------------------
  |  Branch (478:6): [True: 0, False: 2.03k]
  ------------------
  479|      0|    goto out;
  480|       |  /* only do this when this is the only reference */
  481|  2.03k|  DEBUGASSERT(dns->refcount == 1);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (481:3): [True: 0, False: 2.03k]
  |  Branch (481:3): [True: 2.03k, False: 0]
  ------------------
  482|  2.03k|  DEBUGASSERT(dns->type == CURL_DNST_INIT);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (482:3): [True: 0, False: 2.03k]
  |  Branch (482:3): [True: 2.03k, False: 0]
  ------------------
  483|       |
  484|  2.03k|  dns->type = CURL_DNST_ADDR;
  ------------------
  |  |   41|  2.03k|#define CURL_DNST_ADDR      'A'
  ------------------
  485|       |  /* queries should only be about addresses */
  486|  2.03k|  DEBUGASSERT(!(dns_queries & ~CURL_DNSQ_ADDR));
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (486:3): [True: 0, False: 2.03k]
  |  Branch (486:3): [True: 2.03k, False: 0]
  ------------------
  487|  2.03k|  dns->dns_queries = (dns_queries & CURL_DNSQ_ADDR);
  ------------------
  |  |   55|  2.03k|#define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  ------------------
  |  |  |  |   51|  2.03k|#define CURL_DNSQ_A           (1U << 0)
  |  |  ------------------
  |  |               #define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  ------------------
  |  |  |  |   52|  2.03k|#define CURL_DNSQ_AAAA        (1U << 1)
  |  |  ------------------
  ------------------
  488|       |
  489|       |  /* Take the given address lists into the entry */
  490|  2.03k|  if(paddr1 && *paddr1) {
  ------------------
  |  Branch (490:6): [True: 2.03k, False: 0]
  |  Branch (490:16): [True: 2.03k, False: 0]
  ------------------
  491|  2.03k|    dns->addr = *paddr1;
  492|  2.03k|    *paddr1 = NULL;
  493|  2.03k|  }
  494|  2.03k|  if(paddr2 && *paddr2) {
  ------------------
  |  Branch (494:6): [True: 0, False: 2.03k]
  |  Branch (494:16): [True: 0, False: 0]
  ------------------
  495|      0|    struct Curl_addrinfo **phead = &dns->addr;
  496|      0|    while(*phead)
  ------------------
  |  Branch (496:11): [True: 0, False: 0]
  ------------------
  497|      0|      phead = &(*phead)->ai_next;
  498|      0|    *phead = *paddr2;
  499|      0|    *paddr2 = NULL;
  500|      0|  }
  501|       |
  502|  2.03k|  if((dns_queries & CURL_DNSQ_A) &&
  ------------------
  |  |   51|  2.03k|#define CURL_DNSQ_A           (1U << 0)
  ------------------
  |  Branch (502:6): [True: 2.03k, False: 0]
  ------------------
  503|  2.03k|     dnscache_ai_has_family(dns->addr, PF_INET))
  ------------------
  |  Branch (503:6): [True: 2.03k, False: 0]
  ------------------
  504|  2.03k|    dns->dns_responses |= CURL_DNSQ_A;
  ------------------
  |  |   51|  2.03k|#define CURL_DNSQ_A           (1U << 0)
  ------------------
  505|       |
  506|  2.03k|#ifdef USE_IPV6
  507|  2.03k|  if((dns_queries & CURL_DNSQ_AAAA) &&
  ------------------
  |  |   52|  2.03k|#define CURL_DNSQ_AAAA        (1U << 1)
  ------------------
  |  Branch (507:6): [True: 2.03k, False: 0]
  ------------------
  508|  2.03k|     dnscache_ai_has_family(dns->addr, PF_INET6))
  ------------------
  |  Branch (508:6): [True: 0, False: 2.03k]
  ------------------
  509|      0|    dns->dns_responses |= CURL_DNSQ_AAAA;
  ------------------
  |  |   52|      0|#define CURL_DNSQ_AAAA        (1U << 1)
  ------------------
  510|  2.03k|#endif /* USE_IPV6 */
  511|       |
  512|  2.03k|#ifndef CURL_DISABLE_SHUFFLE_DNS
  513|       |  /* shuffle addresses if requested */
  514|  2.03k|  if(data->set.dns_shuffle_addresses && dns->addr) {
  ------------------
  |  Branch (514:6): [True: 0, False: 2.03k]
  |  Branch (514:41): [True: 0, False: 0]
  ------------------
  515|      0|    CURLcode result = dns_shuffle_addr(data, &dns->addr);
  516|      0|    if(result) {
  ------------------
  |  Branch (516:8): [True: 0, False: 0]
  ------------------
  517|       |      /* free without lock, we are the sole owner */
  518|      0|      dnscache_entry_free(dns);
  519|      0|      dns = NULL;
  520|      0|      goto out;
  521|      0|    }
  522|      0|  }
  523|       |#else
  524|       |  (void)data;
  525|       |#endif
  526|       |
  527|  2.03k|out:
  528|  2.03k|  if(paddr1 && *paddr1) {
  ------------------
  |  Branch (528:6): [True: 2.03k, False: 0]
  |  Branch (528:16): [True: 0, False: 2.03k]
  ------------------
  529|      0|    Curl_freeaddrinfo(*paddr1);
  530|      0|    *paddr1 = NULL;
  531|      0|  }
  532|  2.03k|  if(paddr2 && *paddr2) {
  ------------------
  |  Branch (532:6): [True: 0, False: 2.03k]
  |  Branch (532:16): [True: 0, False: 0]
  ------------------
  533|      0|    Curl_freeaddrinfo(*paddr2);
  534|       |    *paddr2 = NULL;
  535|      0|  }
  536|  2.03k|  return dns;
  537|  2.03k|}
dnscache.c:dnscache_ai_has_family:
  433|  4.07k|{
  434|  6.10k|  for(; ai; ai = ai->ai_next) {
  ------------------
  |  Branch (434:9): [True: 4.07k, False: 2.03k]
  ------------------
  435|  4.07k|    if(ai->ai_family == ai_family)
  ------------------
  |  Branch (435:8): [True: 2.03k, False: 2.03k]
  ------------------
  436|  2.03k|      return TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  437|  4.07k|  }
  438|  2.03k|  return FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  439|  4.07k|}
dnscache.c:dnsc_str2id:
   79|  2.03k|{
   80|  2.03k|  pid->name = *name;
   81|  2.03k|  pid->port = port;
   82|  2.03k|  pid->type = type;
   83|  2.03k|}
dnscache.c:dnsc_id2key:
   95|  4.07k|{
   96|  4.07k|  size_t namelen = curlx_strlen(&id->name);
  ------------------
  |  |   50|  4.07k|#define curlx_strlen(x) ((x)->len)
  ------------------
   97|  4.07k|  if(namelen > (sizeof(key->data) - 8))
  ------------------
  |  Branch (97:6): [True: 0, False: 4.07k]
  ------------------
   98|      0|    namelen = sizeof(key->data) - 8;
   99|       |  /* store and lower case the name */
  100|  4.07k|  key->data[0] = id->type;
  101|  4.07k|  Curl_strntolower(key->data + 1, curlx_str(&id->name), namelen);
  ------------------
  |  |   49|  4.07k|#define curlx_str(x)    ((x)->str)
  ------------------
  102|       |  /* include the terminating 0 in key length */
  103|  4.07k|  key->len = namelen + 2 +
  104|  4.07k|             curl_msnprintf(&key->data[namelen + 1], 7, ":%u", id->port);
  105|  4.07k|}
dnscache.c:dnscache_entry_free:
  108|  2.03k|{
  109|  2.03k|  Curl_freeaddrinfo(dns->addr);
  110|       |#ifdef USE_HTTPSRR
  111|       |  Curl_httpsrr_destroy(dns->hinfo);
  112|       |#endif
  113|  2.03k|  curlx_free(dns);
  ------------------
  |  | 1476|  2.03k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  114|  2.03k|}
dnscache.c:dnscache_entry_dtor:
  797|  2.03k|{
  798|  2.03k|  struct Curl_dns_entry *dns = (struct Curl_dns_entry *)entry;
  799|  2.03k|  DEBUGASSERT(dns && (dns->refcount > 0));
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (799:3): [True: 0, False: 2.03k]
  |  Branch (799:3): [True: 0, False: 0]
  |  Branch (799:3): [True: 2.03k, False: 0]
  |  Branch (799:3): [True: 2.03k, False: 0]
  ------------------
  800|  2.03k|  dns->refcount--;
  801|  2.03k|  if(dns->refcount == 0)
  ------------------
  |  Branch (801:6): [True: 2.03k, False: 0]
  ------------------
  802|  2.03k|    dnscache_entry_free(dns);
  803|  2.03k|}

Curl_resolv_dns_queries:
  126|  2.03k|{
  127|  2.03k|  (void)data;
  128|  2.03k|  switch(ip_version) {
  129|      0|  case CURL_IPRESOLVE_V6:
  ------------------
  |  | 2332|      0|#define CURL_IPRESOLVE_V6       2L /* uses only IPv6 addresses/connections */
  ------------------
  |  Branch (129:3): [True: 0, False: 2.03k]
  ------------------
  130|      0|    return CURL_DNSQ_AAAA;
  ------------------
  |  |   52|      0|#define CURL_DNSQ_AAAA        (1U << 1)
  ------------------
  131|      0|  case CURL_IPRESOLVE_V4:
  ------------------
  |  | 2331|      0|#define CURL_IPRESOLVE_V4       1L /* uses only IPv4 addresses/connections */
  ------------------
  |  Branch (131:3): [True: 0, False: 2.03k]
  ------------------
  132|      0|    return CURL_DNSQ_A;
  ------------------
  |  |   51|      0|#define CURL_DNSQ_A           (1U << 0)
  ------------------
  133|  2.03k|  default:
  ------------------
  |  Branch (133:3): [True: 2.03k, False: 0]
  ------------------
  134|  2.03k|    if(ipv6works(data))
  ------------------
  |  Branch (134:8): [True: 2.03k, False: 0]
  ------------------
  135|  2.03k|      return (CURL_DNSQ_A | CURL_DNSQ_AAAA);
  ------------------
  |  |   51|  2.03k|#define CURL_DNSQ_A           (1U << 0)
  ------------------
                    return (CURL_DNSQ_A | CURL_DNSQ_AAAA);
  ------------------
  |  |   52|  2.03k|#define CURL_DNSQ_AAAA        (1U << 1)
  ------------------
  136|      0|    else
  137|      0|      return CURL_DNSQ_A;
  ------------------
  |  |   51|      0|#define CURL_DNSQ_A           (1U << 0)
  ------------------
  138|  2.03k|  }
  139|  2.03k|}
Curl_probeipv6:
  290|  2.53k|{
  291|       |  /* probe to see if we have a working IPv6 stack */
  292|  2.53k|  curl_socket_t s = CURL_SOCKET(PF_INET6, SOCK_DGRAM, 0);
  ------------------
  |  | 1429|  2.53k|  curl_dbg_socket((int)(domain), type, protocol, __LINE__, __FILE__)
  ------------------
  293|  2.53k|  multi->ipv6_works = FALSE;
  ------------------
  |  | 1048|  2.53k|#define FALSE false
  ------------------
  294|  2.53k|  if(s == CURL_SOCKET_BAD) {
  ------------------
  |  |  147|  2.53k|#define CURL_SOCKET_BAD (-1)
  ------------------
  |  Branch (294:6): [True: 0, False: 2.53k]
  ------------------
  295|      0|    if(SOCKERRNO == SOCKENOMEM)
  ------------------
  |  | 1089|      0|#define SOCKERRNO         errno
  ------------------
                  if(SOCKERRNO == SOCKENOMEM)
  ------------------
  |  | 1127|      0|#define SOCKENOMEM        ENOMEM
  ------------------
  |  Branch (295:8): [True: 0, False: 0]
  ------------------
  296|      0|      return CURLE_OUT_OF_MEMORY;
  297|      0|  }
  298|  2.53k|  else {
  299|  2.53k|    multi->ipv6_works = TRUE;
  ------------------
  |  | 1045|  2.53k|#define TRUE true
  ------------------
  300|  2.53k|    sclose(s);
  ------------------
  |  | 1421|  2.53k|#define sclose(sockfd) curl_dbg_sclose(sockfd, __LINE__, __FILE__)
  ------------------
  301|  2.53k|  }
  302|  2.53k|  return CURLE_OK;
  303|  2.53k|}
Curl_host_is_ipnum:
  321|  2.03k|{
  322|  2.03k|  struct in_addr in;
  323|  2.03k|#ifdef USE_IPV6
  324|  2.03k|  struct in6_addr in6;
  325|  2.03k|#endif
  326|  2.03k|  if(curlx_inet_pton(AF_INET, hostname, &in) > 0
  ------------------
  |  Branch (326:6): [True: 2.03k, False: 0]
  ------------------
  327|      0|#ifdef USE_IPV6
  328|      0|     || curlx_inet_pton(AF_INET6, hostname, &in6) > 0
  ------------------
  |  Branch (328:9): [True: 0, False: 0]
  ------------------
  329|  2.03k|#endif
  330|  2.03k|    )
  331|  2.03k|    return TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  332|      0|  return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  333|  2.03k|}
Curl_resolv_announce_start:
  364|  2.03k|{
  365|  2.03k|  if(data->set.resolver_start) {
  ------------------
  |  Branch (365:6): [True: 0, False: 2.03k]
  ------------------
  366|      0|    struct Curl_mapi_guard guard;
  367|      0|    int rc;
  368|       |
  369|      0|    CURL_TRC_DNS(data, "announcing resolve to application");
  ------------------
  |  |  168|      0|  do {                                 \
  |  |  169|      0|    if(CURL_TRC_DNS_is_verbose(data))  \
  |  |  ------------------
  |  |  |  |  137|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_dns)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  170|      0|      Curl_trc_dns(data, __VA_ARGS__); \
  |  |  171|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (171:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  370|      0|    CURL_CBAPI_START(&guard, data, easy_resolver_start);
  ------------------
  |  |  201|      0|  Curl_cbapi_enter((g), (d), NULL, CURL_CBAPI_FN_##fn)
  ------------------
  371|      0|    rc = data->set.resolver_start(resolver, NULL,
  372|      0|                                  data->set.resolver_start_client);
  373|      0|    CURL_CBAPI_END(&guard);
  ------------------
  |  |  205|      0|  Curl_cbapi_leave(g)
  ------------------
  374|      0|    if(rc) {
  ------------------
  |  Branch (374:8): [True: 0, False: 0]
  ------------------
  375|      0|      CURL_TRC_DNS(data, "application aborted resolve");
  ------------------
  |  |  168|      0|  do {                                 \
  |  |  169|      0|    if(CURL_TRC_DNS_is_verbose(data))  \
  |  |  ------------------
  |  |  |  |  137|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_dns)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  170|      0|      Curl_trc_dns(data, __VA_ARGS__); \
  |  |  171|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (171:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  376|      0|      return CURLE_ABORTED_BY_CALLBACK;
  377|      0|    }
  378|      0|  }
  379|  2.03k|  return CURLE_OK;
  380|  2.03k|}
Curl_resolv:
 1031|  2.03k|{
 1032|  2.03k|  *presolv_id = 0;
 1033|  2.03k|  *pdns = NULL;
 1034|       |
 1035|  2.03k|  if(timeout_ms < 0)
  ------------------
  |  Branch (1035:6): [True: 0, False: 2.03k]
  ------------------
 1036|       |    /* got an already expired timeout */
 1037|      0|    return CURLE_OPERATION_TIMEDOUT;
 1038|  2.03k|  else if(!timeout_ms)
  ------------------
  |  Branch (1038:11): [True: 0, False: 2.03k]
  ------------------
 1039|      0|    timeout_ms = CURL_TIMEOUT_RESOLVE_MS;
  ------------------
  |  |   38|      0|#define CURL_TIMEOUT_RESOLVE_MS (300 * 1000)
  ------------------
 1040|       |
 1041|  2.03k|#ifdef USE_UNIX_SOCKETS
 1042|  2.03k|  if((dns_queries & CURL_DNSQ_ADDR) && peer->unix_socket)
  ------------------
  |  |   55|  2.03k|#define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  ------------------
  |  |  |  |   51|  2.03k|#define CURL_DNSQ_A           (1U << 0)
  |  |  ------------------
  |  |               #define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  ------------------
  |  |  |  |   52|  2.03k|#define CURL_DNSQ_AAAA        (1U << 1)
  |  |  ------------------
  ------------------
  |  Branch (1042:6): [True: 2.03k, False: 0]
  |  Branch (1042:40): [True: 0, False: 2.03k]
  ------------------
 1043|      0|    return resolv_unix(data, peer, pdns);
 1044|       |#else
 1045|       |  if(peer->unix_socket)
 1046|       |    return hostip_resolv_failed(data, peer, for_proxy);
 1047|       |#endif
 1048|       |
 1049|       |#ifdef USE_ALARM_TIMEOUT
 1050|       |  if(dns_queries & CURL_DNSQ_ADDR) {
 1051|       |    if(timeout_ms && data->set.no_signal) {
 1052|       |      /* Cannot use ALARM when signals are disabled */
 1053|       |      timeout_ms = 0;
 1054|       |    }
 1055|       |    if(timeout_ms && !Curl_doh_wanted(data)) {
 1056|       |      return resolv_alarm_timeout(data, dns_queries, peer, transport,
 1057|       |                                  for_proxy, timeout_ms, presolv_id, pdns);
 1058|       |    }
 1059|       |  }
 1060|       |#endif /* !USE_ALARM_TIMEOUT */
 1061|       |
 1062|       |#ifndef CURLRES_ASYNCH
 1063|       |  if(timeout_ms)
 1064|       |    infof(data, "timeout on name lookup is not supported");
 1065|       |#endif
 1066|       |
 1067|  2.03k|  return hostip_resolv(data, dns_queries, peer, transport,
 1068|       |                       for_proxy, timeout_ms, TRUE, presolv_id, pdns);
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
 1069|  2.03k|}
Curl_resolv_destroy:
 1152|  2.03k|{
 1153|  2.03k|  struct Curl_resolv_async **panchor = &data->state.async;
 1154|       |
 1155|  2.03k|  for(; *panchor; panchor = &(*panchor)->next) {
  ------------------
  |  Branch (1155:9): [True: 0, False: 2.03k]
  ------------------
 1156|      0|    struct Curl_resolv_async *async = *panchor;
 1157|      0|    if(async->id == resolv_id) {
  ------------------
  |  Branch (1157:8): [True: 0, False: 0]
  ------------------
 1158|      0|      *panchor = async->next;
 1159|      0|      Curl_async_destroy(data, async);
 1160|      0|      break;
 1161|      0|    }
 1162|      0|  }
 1163|  2.03k|}
Curl_resolv_shutdown_all:
 1166|  2.03k|{
 1167|  2.03k|  struct Curl_resolv_async *async = data->state.async;
 1168|  2.03k|  for(; async; async = async->next) {
  ------------------
  |  Branch (1168:9): [True: 0, False: 2.03k]
  ------------------
 1169|      0|    Curl_async_shutdown(data, async);
 1170|      0|  }
 1171|  2.03k|}
Curl_resolv_destroy_all:
 1174|  7.61k|{
 1175|  7.61k|  while(data->state.async) {
  ------------------
  |  Branch (1175:9): [True: 0, False: 7.61k]
  ------------------
 1176|      0|    struct Curl_resolv_async *async = data->state.async;
 1177|      0|    data->state.async = async->next;
 1178|      0|    Curl_async_destroy(data, async);
 1179|      0|  }
 1180|  7.61k|}
hostip.c:ipv6works:
  309|  2.03k|{
  310|  2.03k|  DEBUGASSERT(data);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (310:3): [True: 0, False: 2.03k]
  |  Branch (310:3): [True: 2.03k, False: 0]
  ------------------
  311|  2.03k|  DEBUGASSERT(data->multi);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (311:3): [True: 0, False: 2.03k]
  |  Branch (311:3): [True: 2.03k, False: 0]
  ------------------
  312|  2.03k|  return data ? data->multi->ipv6_works : FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  |  Branch (312:10): [True: 2.03k, False: 0]
  ------------------
  313|  2.03k|}
hostip.c:hostip_resolv:
  712|  2.03k|{
  713|  2.03k|  size_t hostname_len;
  714|  2.03k|  CURLcode result = RESOLV_FAIL(for_proxy);
  ------------------
  |  |   74|  2.03k|  ((for_proxy) ? CURLE_COULDNT_RESOLVE_PROXY : CURLE_COULDNT_RESOLVE_HOST)
  |  |  ------------------
  |  |  |  Branch (74:4): [True: 0, False: 2.03k]
  |  |  ------------------
  ------------------
  715|  2.03k|  bool cache_dns = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  716|  2.03k|  bool negative = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  717|       |
  718|  2.03k|  (void)timeout_ms; /* not used in all ifdefs */
  719|  2.03k|  *presolv_id = 0;
  720|  2.03k|  *pdns = NULL;
  721|       |
  722|       |#ifdef CURL_DISABLE_DOH
  723|       |  (void)allowDOH;
  724|       |#endif
  725|       |
  726|       |  /* We should intentionally error and not resolve .onion TLDs */
  727|  2.03k|  hostname_len = strlen(peer->hostname);
  728|  2.03k|  DEBUGASSERT(hostname_len);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (728:3): [True: 0, False: 2.03k]
  |  Branch (728:3): [True: 2.03k, False: 0]
  ------------------
  729|  2.03k|  if(hostname_len >= 7 &&
  ------------------
  |  Branch (729:6): [True: 2.03k, False: 0]
  ------------------
  730|  2.03k|     (curl_strequal(&peer->hostname[hostname_len - 6], ".onion") ||
  ------------------
  |  Branch (730:7): [True: 0, False: 2.03k]
  ------------------
  731|  2.03k|      curl_strequal(&peer->hostname[hostname_len - 7], ".onion."))) {
  ------------------
  |  Branch (731:7): [True: 0, False: 2.03k]
  ------------------
  732|      0|    failf(data, "Not resolving .onion address (RFC 7686)");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  733|      0|    goto out;
  734|      0|  }
  735|       |
  736|  2.03k|#ifdef DEBUGBUILD
  737|  2.03k|  CURL_TRC_DNS(data, "[%s] hostip_resolv(%s:%u)",
  ------------------
  |  |  168|  2.03k|  do {                                 \
  |  |  169|  2.03k|    if(CURL_TRC_DNS_is_verbose(data))  \
  |  |  ------------------
  |  |  |  |  137|  2.03k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_dns)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.03k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.03k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 2.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  170|  2.03k|      Curl_trc_dns(data, __VA_ARGS__); \
  |  |  171|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (171:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  738|  2.03k|               Curl_resolv_query_str(dns_queries), peer->hostname, peer->port);
  739|  2.03k|  if((CURL_DNSQ_IS_ADDR(dns_queries) == CURL_DNSQ_AAAA) &&
  ------------------
  |  |   56|  2.03k|#define CURL_DNSQ_IS_ADDR(x)  (uint8_t)((x)&(CURL_DNSQ_ADDR))
  |  |  ------------------
  |  |  |  |   55|  2.03k|#define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|  2.03k|#define CURL_DNSQ_A           (1U << 0)
  |  |  |  |  ------------------
  |  |  |  |               #define CURL_DNSQ_ADDR        (uint8_t)(CURL_DNSQ_A | CURL_DNSQ_AAAA)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|  2.03k|#define CURL_DNSQ_AAAA        (1U << 1)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                if((CURL_DNSQ_IS_ADDR(dns_queries) == CURL_DNSQ_AAAA) &&
  ------------------
  |  |   52|  2.03k|#define CURL_DNSQ_AAAA        (1U << 1)
  ------------------
  |  Branch (739:6): [True: 0, False: 2.03k]
  ------------------
  740|      0|     getenv("CURL_DBG_RESOLV_FAIL_IPV6")) {
  ------------------
  |  Branch (740:6): [True: 0, False: 0]
  ------------------
  741|      0|    infof(data, "DEBUG fail ipv6 resolve");
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  742|      0|    result = hostip_resolv_failed(data, peer, for_proxy);
  743|      0|    goto out;
  744|      0|  }
  745|  2.03k|#endif
  746|       |  /* Let's check our DNS cache first */
  747|  2.03k|  result = Curl_dnscache_get(data, dns_queries, peer, pdns);
  748|  2.03k|  if(*pdns) {
  ------------------
  |  Branch (748:6): [True: 0, False: 2.03k]
  ------------------
  749|      0|    infof(data, "Hostname %s was found in DNS cache", peer->hostname);
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  750|      0|    result = CURLE_OK;
  751|      0|  }
  752|  2.03k|  else if(result) {
  ------------------
  |  Branch (752:11): [True: 0, False: 2.03k]
  ------------------
  753|      0|    infof(data, "Negative DNS entry");
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  322|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (322:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  754|      0|    result = hostip_resolv_failed(data, peer, for_proxy);
  755|      0|  }
  756|  2.03k|  else {
  757|       |    /* No luck, we need to start resolving. */
  758|  2.03k|    cache_dns = TRUE;
  ------------------
  |  | 1045|  2.03k|#define TRUE true
  ------------------
  759|  2.03k|    result = hostip_resolv_start(data, dns_queries, peer, transport,
  760|  2.03k|                                 for_proxy, timeout_ms, allowDOH,
  761|  2.03k|                                 presolv_id, pdns, &negative);
  762|  2.03k|    CURL_TRC_DNS(data, "[%s] hostip_resolv started -> %d",
  ------------------
  |  |  168|  2.03k|  do {                                 \
  |  |  169|  2.03k|    if(CURL_TRC_DNS_is_verbose(data))  \
  |  |  ------------------
  |  |  |  |  137|  2.03k|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_dns)
  |  |  |  |  ------------------
  |  |  |  |  |  |  329|  2.03k|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  322|  4.07k|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (322:4): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (322:14): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  323|  4.07k|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (323:5): [True: 2.03k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  324|  2.03k|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (324:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  330|  2.03k|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|  2.03k|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (330:4): [True: 0, False: 2.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  170|  2.03k|      Curl_trc_dns(data, __VA_ARGS__); \
  |  |  171|  2.03k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (171:11): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  763|  2.03k|                 Curl_resolv_query_str(dns_queries), (int)result);
  764|  2.03k|  }
  765|       |
  766|  2.03k|out:
  767|  2.03k|  if(result && (result != CURLE_AGAIN)) {
  ------------------
  |  Branch (767:6): [True: 0, False: 2.03k]
  |  Branch (767:16): [True: 0, False: 0]
  ------------------
  768|      0|    Curl_dns_entry_unlink(data, pdns);
  769|      0|    if(IS_RESOLV_FAIL(result)) {
  ------------------
  |  |   77|      0|  (((result) == CURLE_COULDNT_RESOLVE_HOST) || \
  |  |  ------------------
  |  |  |  Branch (77:4): [True: 0, False: 0]
  |  |  ------------------
  |  |   78|      0|   ((result) == CURLE_COULDNT_RESOLVE_PROXY))
  |  |  ------------------
  |  |  |  Branch (78:4): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  770|      0|      if(cache_dns && negative)
  ------------------
  |  Branch (770:10): [True: 0, False: 0]
  |  Branch (770:23): [True: 0, False: 0]
  ------------------
  771|      0|        Curl_dnscache_add_negative(data, dns_queries, peer);
  772|      0|      if(dns_queries & (CURL_DNSQ_A | CURL_DNSQ_AAAA))
  ------------------
  |  |   51|      0|#define CURL_DNSQ_A           (1U << 0)
  ------------------
                    if(dns_queries & (CURL_DNSQ_A | CURL_DNSQ_AAAA))
  ------------------
  |  |   52|      0|#define CURL_DNSQ_AAAA        (1U << 1)
  ------------------
  |  Branch (772:10): [True: 0, False: 0]
  ------------------
  773|      0|        failf(data, "Could not resolve: %s:%u", peer->hostname, peer->port);
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  774|      0|    }
  775|      0|    else {
  776|      0|      failf(data, "Error %d resolving %s:%u",
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  777|      0|            (int)result, peer->hostname, peer->port);
  778|      0|    }
  779|      0|  }
  780|  2.03k|  else if(cache_dns && *pdns) {
  ------------------
  |  Branch (780:11): [True: 2.03k, False: 0]
  |  Branch (780:24): [True: 2.03k, False: 0]
  ------------------
  781|  2.03k|    result = Curl_dnscache_add(data, *pdns);
  782|  2.03k|    if(result)
  ------------------
  |  Branch (782:8): [True: 0, False: 2.03k]
  ------------------
  783|      0|      Curl_dns_entry_unlink(data, pdns);
  784|  2.03k|  }
  785|       |
  786|  2.03k|  return result;
  787|  2.03k|}
hostip.c:hostip_resolv_start:
  567|  2.03k|{
  568|  2.03k|#ifdef USE_CURL_ASYNC
  569|  2.03k|  struct Curl_resolv_async *async = NULL;
  570|  2.03k|#endif
  571|  2.03k|  struct Curl_addrinfo *addr = NULL;
  572|  2.03k|  size_t hostname_len;
  573|  2.03k|  bool addr_queries = (dns_queries & (CURL_DNSQ_A | CURL_DNSQ_AAAA));
  ------------------
  |  |   51|  2.03k|#define CURL_DNSQ_A           (1U << 0)
  ------------------
                bool addr_queries = (dns_queries & (CURL_DNSQ_A | CURL_DNSQ_AAAA));
  ------------------
  |  |   52|  2.03k|#define CURL_DNSQ_AAAA        (1U << 1)
  ------------------
  574|  2.03k|  CURLcode result = CURLE_OK;
  575|       |
  576|  2.03k|  *pnegative = FALSE;
  ------------------
  |  | 1048|  2.03k|#define FALSE false
  ------------------
  577|       |
  578|  2.03k|  (void)timeout_ms; /* not in all ifdefs */
  579|  2.03k|  *presolv_id = 0;
  580|  2.03k|  *pdns = NULL;
  581|       |
  582|       |  /* Check for "known" things to resolve ourselves. */
  583|  2.03k|  if(addr_queries) {
  ------------------
  |  Branch (583:6): [True: 2.03k, False: 0]
  ------------------
  584|  2.03k|#ifndef USE_RESOLVE_ON_IPS
  585|  2.03k|    if(Curl_is_ipaddr(peer->hostname)) {
  ------------------
  |  Branch (585:8): [True: 2.03k, False: 0]
  ------------------
  586|       |      /* test655 verifies that the announce is done, even though there
  587|       |       * is no real resolving. So, keep doing this. */
  588|  2.03k|      result = Curl_resolv_announce_start(data, NULL);
  589|  2.03k|      if(result)
  ------------------
  |  Branch (589:10): [True: 0, False: 2.03k]
  ------------------
  590|      0|        goto out;
  591|       |      /* shortcut literal IP addresses, if we are not told to resolve them. */
  592|  2.03k|      result = Curl_str2addr(peer->hostname, peer->port, &addr);
  593|  2.03k|      goto out;
  594|  2.03k|    }
  595|      0|#endif
  596|       |
  597|      0|    hostname_len = strlen(peer->hostname);
  598|      0|    if(curl_strequal(peer->hostname, "localhost") ||
  ------------------
  |  Branch (598:8): [True: 0, False: 0]
  ------------------
  599|      0|       curl_strequal(peer->hostname, "localhost.") ||
  ------------------
  |  Branch (599:8): [True: 0, False: 0]
  ------------------
  600|      0|       tailmatch(peer->hostname, hostname_len, STRCONST(".localhost")) ||
  ------------------
  |  | 1297|      0|#define STRCONST(x) x, CURL_CSTRLEN(x)
  |  |  ------------------
  |  |  |  | 1292|      0|#define CURL_CSTRLEN(x) (sizeof(x) - 1)
  |  |  ------------------
  ------------------
  |  Branch (600:8): [True: 0, False: 0]
  ------------------
  601|      0|       tailmatch(peer->hostname, hostname_len, STRCONST(".localhost."))) {
  ------------------
  |  | 1297|      0|#define STRCONST(x) x, CURL_CSTRLEN(x)
  |  |  ------------------
  |  |  |  | 1292|      0|#define CURL_CSTRLEN(x) (sizeof(x) - 1)
  |  |  ------------------
  ------------------
  |  Branch (601:8): [True: 0, False: 0]
  ------------------
  602|      0|      result = Curl_resolv_announce_start(data, NULL);
  603|      0|      if(result)
  ------------------
  |  Branch (603:10): [True: 0, False: 0]
  ------------------
  604|      0|        goto out;
  605|      0|      addr = get_localhost(peer->port, peer->hostname);
  606|      0|      if(!addr)
  ------------------
  |  Branch (606:10): [True: 0, False: 0]
  ------------------
  607|      0|        result = CURLE_OUT_OF_MEMORY;
  608|      0|      goto out;
  609|      0|    }
  610|      0|  }
  611|      0|#ifndef CURL_DISABLE_DOH
  612|      0|  if(!Curl_is_ipaddr(peer->hostname) && allowDOH && data->set.doh) {
  ------------------
  |  Branch (612:6): [True: 0, False: 0]
  |  Branch (612:41): [True: 0, False: 0]
  |  Branch (612:53): [True: 0, False: 0]
  ------------------
  613|      0|    result = Curl_resolv_announce_start(data, NULL);
  614|      0|    if(result)
  ------------------
  |  Branch (614:8): [True: 0, False: 0]
  ------------------
  615|      0|      goto out;
  616|      0|    if(!async) {
  ------------------
  |  Branch (616:8): [True: 0, False: 0]
  ------------------
  617|      0|      async = hostip_async_new(data, dns_queries, peer, transport,
  618|      0|                               for_proxy, timeout_ms);
  619|      0|      if(!async) {
  ------------------
  |  Branch (619:10): [True: 0, False: 0]
  ------------------
  620|      0|        result = CURLE_OUT_OF_MEMORY;
  621|      0|        goto out;
  622|      0|      }
  623|      0|    }
  624|      0|    result = Curl_doh(data, async);
  625|      0|    goto out;
  626|      0|  }
  627|       |#else
  628|       |  (void)allowDOH;
  629|       |#endif
  630|       |
  631|       |  /* Can we provide the requested IP specifics in resolving? */
  632|      0|  if(!can_resolve_dns_queries(data, dns_queries)) {
  ------------------
  |  Branch (632:6): [True: 0, False: 0]
  ------------------
  633|      0|    result = RESOLV_FAIL(for_proxy);
  ------------------
  |  |   74|      0|  ((for_proxy) ? CURLE_COULDNT_RESOLVE_PROXY : CURLE_COULDNT_RESOLVE_HOST)
  |  |  ------------------
  |  |  |  Branch (74:4): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  634|      0|    goto out;
  635|      0|  }
  636|       |
  637|      0|#ifdef CURLRES_ASYNCH
  638|      0|  (void)addr;
  639|      0|  if(!async) {
  ------------------
  |  Branch (639:6): [True: 0, False: 0]
  ------------------
  640|      0|    async = hostip_async_new(data, dns_queries, peer, transport,
  641|      0|                             for_proxy, timeout_ms);
  642|      0|    if(!async) {
  ------------------
  |  Branch (642:8): [True: 0, False: 0]
  ------------------
  643|      0|      result = CURLE_OUT_OF_MEMORY;
  644|      0|      goto out;
  645|      0|    }
  646|      0|  }
  647|      0|  result = Curl_async_getaddrinfo(data, async);
  648|      0|  if(result == CURLE_AGAIN) {
  ------------------
  |  Branch (648:6): [True: 0, False: 0]
  ------------------
  649|       |    /* the answer might be there already. Check. */
  650|      0|    CURLcode r2 = hostip_resolv_take_result(data, async, pdns);
  651|      0|    if(r2)
  ------------------
  |  Branch (651:8): [True: 0, False: 0]
  ------------------
  652|      0|      result = r2;
  653|      0|    else if(*pdns)
  ------------------
  |  Branch (653:13): [True: 0, False: 0]
  ------------------
  654|      0|      result = CURLE_OK;
  655|      0|  }
  656|       |#else
  657|       |  result = Curl_resolv_announce_start(data, NULL);
  658|       |  if(result)
  659|       |    goto out;
  660|       |  addr = Curl_sync_getaddrinfo(data, dns_queries, peer->hostname, peer->port,
  661|       |                               transport);
  662|       |  if(!addr) {
  663|       |    result = RESOLV_FAIL(for_proxy);
  664|       |    /* the synchronous resolvers do not tell a transient failure from
  665|       |       an authoritative negative answer, treat it as before */
  666|       |    *pnegative = TRUE;
  667|       |  }
  668|       |#endif
  669|       |
  670|  2.03k|out:
  671|  2.03k|  if(!result) {
  ------------------
  |  Branch (671:6): [True: 2.03k, False: 0]
  ------------------
  672|  2.03k|    if(addr) {
  ------------------
  |  Branch (672:8): [True: 2.03k, False: 0]
  ------------------
  673|       |      /* we got a response, create a dns entry, add to cache, return */
  674|  2.03k|      DEBUGASSERT(!*pdns);
  ------------------
  |  | 1075|  2.03k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (674:7): [True: 0, False: 2.03k]
  |  Branch (674:7): [True: 2.03k, False: 0]
  ------------------
  675|  2.03k|      *pdns = Curl_dnsc_mk_addr(data, dns_queries, &addr, peer);
  676|  2.03k|      if(!*pdns)
  ------------------
  |  Branch (676:10): [True: 0, False: 2.03k]
  ------------------
  677|      0|        result = CURLE_OUT_OF_MEMORY;
  678|  2.03k|    }
  679|      0|    else if(!*pdns)
  ------------------
  |  Branch (679:13): [True: 0, False: 0]
  ------------------
  680|      0|      result = CURLE_AGAIN;
  681|  2.03k|  }
  682|      0|  else if(*pdns)
  ------------------
  |  Branch (682:11): [True: 0, False: 0]
  ------------------
  683|      0|    Curl_dns_entry_unlink(data, pdns);
  684|      0|  else if(addr)
  ------------------
  |  Branch (684:11): [True: 0, False: 0]
  ------------------
  685|      0|    Curl_freeaddrinfo(addr);
  686|       |
  687|  2.03k|#ifdef USE_CURL_ASYNC
  688|  2.03k|  if(async) {
  ------------------
  |  Branch (688:6): [True: 0, False: 2.03k]
  ------------------
  689|      0|    if(result == CURLE_AGAIN) { /* still need it, link, return id. */
  ------------------
  |  Branch (689:8): [True: 0, False: 0]
  ------------------
  690|      0|      *presolv_id = async->id;
  691|      0|      async->next = data->state.async;
  692|      0|      data->state.async = async;
  693|      0|    }
  694|      0|    else {
  695|      0|      *pnegative = !!async->negative_answer;
  696|      0|      Curl_async_destroy(data, async);
  697|      0|    }
  698|      0|  }
  699|  2.03k|#endif
  700|  2.03k|  return result;
  701|  2.03k|}

Curl_tls_keylog_open:
   39|      2|{
   40|      2|  if(!keylog_file_fp) {
  ------------------
  |  Branch (40:6): [True: 2, False: 0]
  ------------------
   41|      2|    keylog_file_name = getenv("SSLKEYLOGFILE");
   42|      2|    if(keylog_file_name) {
  ------------------
  |  Branch (42:8): [True: 0, False: 2]
  ------------------
   43|      0|      keylog_file_fp = curlx_fopen(keylog_file_name, FOPEN_APPENDTEXT);
  ------------------
  |  |   76|      0|#define curlx_fopen(file, mode) curl_dbg_fopen(file, mode, __LINE__, __FILE__)
  ------------------
   44|      0|      if(keylog_file_fp) {
  ------------------
  |  Branch (44:10): [True: 0, False: 0]
  ------------------
   45|       |#ifdef _WIN32
   46|       |        if(setvbuf(keylog_file_fp, NULL, _IONBF, 0))
   47|       |#else
   48|      0|        if(setvbuf(keylog_file_fp, NULL, _IOLBF, 4096))
  ------------------
  |  Branch (48:12): [True: 0, False: 0]
  ------------------
   49|      0|#endif
   50|      0|        {
   51|      0|          curlx_fclose(keylog_file_fp);
  ------------------
  |  |   81|      0|#define curlx_fclose(file)      curl_dbg_fclose(file, __LINE__, __FILE__)
  ------------------
   52|       |          keylog_file_fp = NULL;
   53|      0|        }
   54|      0|      }
   55|      0|    }
   56|      2|  }
   57|      2|}

openssl.c:ossl_provider_cleanup:
 1743|  5.07k|{
 1744|  5.07k|  if(data->state.baseprov) {
  ------------------
  |  Branch (1744:6): [True: 0, False: 5.07k]
  ------------------
 1745|      0|    OSSL_PROVIDER_unload(data->state.baseprov);
 1746|      0|    data->state.baseprov = NULL;
 1747|      0|  }
 1748|  5.07k|  if(data->state.provider) {
  ------------------
  |  Branch (1748:6): [True: 0, False: 5.07k]
  ------------------
 1749|      0|    OSSL_PROVIDER_unload(data->state.provider);
 1750|      0|    data->state.provider = NULL;
 1751|      0|  }
 1752|  5.07k|  OSSL_LIB_CTX_free(data->state.libctx);
 1753|  5.07k|  data->state.libctx = NULL;
 1754|  5.07k|  curlx_safefree(data->state.propq);
  ------------------
  |  | 1332|  5.07k|  do {                      \
  |  | 1333|  5.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  5.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  5.07k|    (ptr) = NULL;           \
  |  | 1335|  5.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 5.07k]
  |  |  ------------------
  ------------------
 1755|       |  data->state.provider_loaded = FALSE;
  ------------------
  |  | 1048|  5.07k|#define FALSE false
  ------------------
 1756|  5.07k|}
openssl.c:ossl_init:
 1627|      2|{
 1628|      2|  const uint64_t flags =
 1629|      2|#ifdef OPENSSL_INIT_ENGINE_ALL_BUILTIN
 1630|       |    /* not present in BoringSSL */
 1631|      2|    OPENSSL_INIT_ENGINE_ALL_BUILTIN |
 1632|      2|#endif
 1633|       |#ifdef CURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG
 1634|       |    OPENSSL_INIT_NO_LOAD_CONFIG |
 1635|       |#else
 1636|      2|    OPENSSL_INIT_LOAD_CONFIG |
 1637|      2|#endif
 1638|      2|    0;
 1639|      2|  OPENSSL_init_ssl(flags, NULL);
 1640|       |
 1641|      2|#ifndef HAVE_KEYLOG_UPSTREAM
 1642|      2|  Curl_tls_keylog_open();
 1643|      2|#endif
 1644|       |
 1645|      2|  return 1;
 1646|      2|}
openssl.c:ossl_close_all:
 1990|  5.07k|{
 1991|       |#ifdef USE_OPENSSL_ENGINE
 1992|       |  if(data->state.engine) {
 1993|       |    ENGINE_finish(data->state.engine);
 1994|       |    ENGINE_free(data->state.engine);
 1995|       |    data->state.engine = NULL;
 1996|       |  }
 1997|       |#else
 1998|  5.07k|  (void)data;
 1999|  5.07k|#endif
 2000|  5.07k|#ifdef OPENSSL_HAS_PROVIDERS
 2001|  5.07k|  ossl_provider_cleanup(data);
 2002|  5.07k|#endif
 2003|  5.07k|}

Curl_ssl_backend:
  131|  4.07k|{
  132|  4.07k|#ifdef USE_SSL
  133|  4.07k|  multissl_setup(NULL);
  134|  4.07k|  return Curl_ssl->info.id;
  135|       |#else
  136|       |  return CURLSSLBACKEND_NONE;
  137|       |#endif
  138|  4.07k|}
Curl_ssl_init:
  152|      2|{
  153|       |  /* make sure this is only done once */
  154|      2|  if(init_ssl)
  ------------------
  |  Branch (154:6): [True: 0, False: 2]
  ------------------
  155|      0|    return 1;
  156|      2|  init_ssl = TRUE; /* never again */
  ------------------
  |  | 1045|      2|#define TRUE true
  ------------------
  157|       |
  158|      2|  if(Curl_ssl->init)
  ------------------
  |  Branch (158:6): [True: 2, False: 0]
  ------------------
  159|      2|    return Curl_ssl->init();
  160|      0|  return 1;
  161|      2|}
Curl_ssl_close_all:
  227|  5.07k|{
  228|  5.07k|  if(Curl_ssl->close_all)
  ------------------
  |  Branch (228:6): [True: 5.07k, False: 0]
  ------------------
  229|  5.07k|    Curl_ssl->close_all(data);
  230|  5.07k|}
Curl_ssl_free_certinfo:
  296|  12.6k|{
  297|  12.6k|  struct curl_certinfo *ci = &data->info.certs;
  298|       |
  299|  12.6k|  if(ci->num_of_certs) {
  ------------------
  |  Branch (299:6): [True: 0, False: 12.6k]
  ------------------
  300|       |    /* free all individual lists used */
  301|      0|    int i;
  302|      0|    for(i = 0; i < ci->num_of_certs; i++) {
  ------------------
  |  Branch (302:16): [True: 0, False: 0]
  ------------------
  303|      0|      curl_slist_free_all(ci->certinfo[i]);
  304|      0|      ci->certinfo[i] = NULL;
  305|      0|    }
  306|       |
  307|       |    curlx_safefree(ci->certinfo); /* free the actual array too */
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  308|      0|    ci->num_of_certs = 0;
  309|      0|  }
  310|  12.6k|}
vtls.c:multissl_setup:
  779|  4.07k|{
  780|  4.07k|  int i;
  781|  4.07k|  char *env;
  782|       |
  783|  4.07k|  if(Curl_ssl != &Curl_ssl_multi)
  ------------------
  |  Branch (783:6): [True: 4.07k, False: 0]
  ------------------
  784|  4.07k|    return 1;
  785|       |
  786|      0|  if(backend) {
  ------------------
  |  Branch (786:6): [True: 0, False: 0]
  ------------------
  787|      0|    Curl_ssl = backend;
  788|      0|    return 0;
  789|      0|  }
  790|       |
  791|      0|  if(!available_backends[0])
  ------------------
  |  Branch (791:6): [True: 0, False: 0]
  ------------------
  792|      0|    return 1;
  793|       |
  794|      0|  env = curl_getenv("CURL_SSL_BACKEND");
  795|      0|  if(env) {
  ------------------
  |  Branch (795:6): [True: 0, False: 0]
  ------------------
  796|      0|    for(i = 0; available_backends[i]; i++) {
  ------------------
  |  Branch (796:16): [True: 0, False: 0]
  ------------------
  797|      0|      if(curl_strequal(env, available_backends[i]->info.name)) {
  ------------------
  |  Branch (797:10): [True: 0, False: 0]
  ------------------
  798|      0|        Curl_ssl = available_backends[i];
  799|      0|        curlx_free(env);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  800|      0|        return 0;
  801|      0|      }
  802|      0|    }
  803|      0|  }
  804|       |
  805|       |#ifdef CURL_DEFAULT_SSL_BACKEND
  806|       |  for(i = 0; available_backends[i]; i++) {
  807|       |    if(curl_strequal(CURL_DEFAULT_SSL_BACKEND,
  808|       |                     available_backends[i]->info.name)) {
  809|       |      Curl_ssl = available_backends[i];
  810|       |      curlx_free(env);
  811|       |      return 0;
  812|       |    }
  813|       |  }
  814|       |#endif
  815|       |
  816|       |  /* Fall back to first available backend */
  817|      0|  Curl_ssl = available_backends[0];
  818|      0|  curlx_free(env);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  819|      0|  return 0;
  820|      0|}

Curl_ssl_config_init:
  101|  10.1k|{
  102|       |  /*
  103|       |   * libcurl 7.10 introduced SSL verification *by default*! This needs to be
  104|       |   * switched off unless wanted.
  105|       |   */
  106|  10.1k|  sslc->verifypeer = TRUE;
  ------------------
  |  | 1045|  10.1k|#define TRUE true
  ------------------
  107|  10.1k|  sslc->verifyhost = TRUE;
  ------------------
  |  | 1045|  10.1k|#define TRUE true
  ------------------
  108|       |  sslc->cache_session = TRUE; /* caching by default */
  ------------------
  |  | 1045|  10.1k|#define TRUE true
  ------------------
  109|  10.1k|}
Curl_ssl_config_cleanup:
  112|  14.2k|{
  113|  14.2k|  if(sslc->deep_copy) {
  ------------------
  |  Branch (113:6): [True: 4.07k, False: 10.1k]
  ------------------
  114|  4.07k|    curlx_safefree(sslc->CApath);
  ------------------
  |  | 1332|  4.07k|  do {                      \
  |  | 1333|  4.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  4.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  4.07k|    (ptr) = NULL;           \
  |  | 1335|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  115|  4.07k|    curlx_safefree(sslc->CAfile);
  ------------------
  |  | 1332|  4.07k|  do {                      \
  |  | 1333|  4.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  4.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  4.07k|    (ptr) = NULL;           \
  |  | 1335|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  116|  4.07k|    curlx_safefree(sslc->issuercert);
  ------------------
  |  | 1332|  4.07k|  do {                      \
  |  | 1333|  4.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  4.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  4.07k|    (ptr) = NULL;           \
  |  | 1335|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  117|  4.07k|    curlx_safefree(sslc->clientcert);
  ------------------
  |  | 1332|  4.07k|  do {                      \
  |  | 1333|  4.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  4.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  4.07k|    (ptr) = NULL;           \
  |  | 1335|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  118|  4.07k|    curlx_safefree(sslc->cipher_list);
  ------------------
  |  | 1332|  4.07k|  do {                      \
  |  | 1333|  4.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  4.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  4.07k|    (ptr) = NULL;           \
  |  | 1335|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  119|  4.07k|    curlx_safefree(sslc->cipher_list13);
  ------------------
  |  | 1332|  4.07k|  do {                      \
  |  | 1333|  4.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  4.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  4.07k|    (ptr) = NULL;           \
  |  | 1335|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  120|  4.07k|    curlx_safefree(sslc->pinned_key);
  ------------------
  |  | 1332|  4.07k|  do {                      \
  |  | 1333|  4.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  4.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  4.07k|    (ptr) = NULL;           \
  |  | 1335|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  121|  4.07k|    curlx_safefree(sslc->cert_blob);
  ------------------
  |  | 1332|  4.07k|  do {                      \
  |  | 1333|  4.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  4.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  4.07k|    (ptr) = NULL;           \
  |  | 1335|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  122|  4.07k|    curlx_safefree(sslc->ca_info_blob);
  ------------------
  |  | 1332|  4.07k|  do {                      \
  |  | 1333|  4.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  4.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  4.07k|    (ptr) = NULL;           \
  |  | 1335|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  123|  4.07k|    curlx_safefree(sslc->issuercert_blob);
  ------------------
  |  | 1332|  4.07k|  do {                      \
  |  | 1333|  4.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  4.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  4.07k|    (ptr) = NULL;           \
  |  | 1335|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  124|  4.07k|    curlx_safefree(sslc->key_blob);
  ------------------
  |  | 1332|  4.07k|  do {                      \
  |  | 1333|  4.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  4.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  4.07k|    (ptr) = NULL;           \
  |  | 1335|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  125|  4.07k|    curlx_safefree(sslc->curves);
  ------------------
  |  | 1332|  4.07k|  do {                      \
  |  | 1333|  4.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  4.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  4.07k|    (ptr) = NULL;           \
  |  | 1335|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  126|  4.07k|    curlx_safefree(sslc->signature_algorithms);
  ------------------
  |  | 1332|  4.07k|  do {                      \
  |  | 1333|  4.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  4.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  4.07k|    (ptr) = NULL;           \
  |  | 1335|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  127|  4.07k|    curlx_safefree(sslc->CRLfile);
  ------------------
  |  | 1332|  4.07k|  do {                      \
  |  | 1333|  4.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  4.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  4.07k|    (ptr) = NULL;           \
  |  | 1335|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  128|  4.07k|    curlx_safefree(sslc->cert_type);
  ------------------
  |  | 1332|  4.07k|  do {                      \
  |  | 1333|  4.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  4.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  4.07k|    (ptr) = NULL;           \
  |  | 1335|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  129|  4.07k|    curlx_safefree(sslc->key);
  ------------------
  |  | 1332|  4.07k|  do {                      \
  |  | 1333|  4.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  4.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  4.07k|    (ptr) = NULL;           \
  |  | 1335|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  130|  4.07k|    curlx_safefree(sslc->key_type);
  ------------------
  |  | 1332|  4.07k|  do {                      \
  |  | 1333|  4.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  4.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  4.07k|    (ptr) = NULL;           \
  |  | 1335|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  131|  4.07k|    curlx_safefree(sslc->key_passwd);
  ------------------
  |  | 1332|  4.07k|  do {                      \
  |  | 1333|  4.07k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  4.07k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  4.07k|    (ptr) = NULL;           \
  |  | 1335|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  132|       |    sslc->deep_copy = FALSE;
  ------------------
  |  | 1048|  4.07k|#define FALSE false
  ------------------
  133|  4.07k|  }
  134|  14.2k|}
Curl_ssl_easy_config_complete:
  250|  2.03k|{
  251|  2.03k|  struct ssl_config_data *sslc = &data->set.ssl;
  252|  2.03k|#if defined(CURL_CA_PATH) || defined(CURL_CA_BUNDLE)
  253|  2.03k|  CURLcode result;
  254|  2.03k|#endif
  255|       |
  256|  2.03k|  ssl_easy_config_compl_options(origin, data->state.initial_origin, sslc);
  257|       |
  258|  2.03k|  if(Curl_ssl_backend() != CURLSSLBACKEND_SCHANNEL) {
  ------------------
  |  Branch (258:6): [True: 2.03k, False: 0]
  ------------------
  259|       |#if defined(USE_APPLE_SECTRUST) || defined(CURL_CA_NATIVE)
  260|       |    if(!sslc->custom_capath && !sslc->custom_cafile && !sslc->custom_cablob)
  261|       |      sslc->primary.native_ca_store = TRUE;
  262|       |#endif
  263|  2.03k|#ifdef CURL_CA_PATH
  264|  2.03k|    if(!sslc->custom_capath && !CURL_EASY_STR(data, STRING_SSL_CAPATH)) {
  ------------------
  |  | 1228|  2.03k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
  |  Branch (264:8): [True: 2.03k, False: 0]
  |  Branch (264:32): [True: 2.03k, False: 0]
  ------------------
  265|  2.03k|      result = Curl_setstropt(data, STRING_SSL_CAPATH, CURL_CA_PATH);
  ------------------
  |  |   32|  2.03k|#define CURL_CA_PATH "/etc/ssl/certs"
  ------------------
  266|  2.03k|      if(result)
  ------------------
  |  Branch (266:10): [True: 0, False: 2.03k]
  ------------------
  267|      0|        return result;
  268|  2.03k|    }
  269|  2.03k|#endif
  270|  2.03k|#ifdef CURL_CA_BUNDLE
  271|  2.03k|    if(!sslc->custom_cafile && !CURL_EASY_STR(data, STRING_SSL_CAFILE)) {
  ------------------
  |  | 1228|  2.03k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
  |  Branch (271:8): [True: 2.03k, False: 0]
  |  Branch (271:32): [True: 2.03k, False: 0]
  ------------------
  272|  2.03k|      result = Curl_setstropt(data, STRING_SSL_CAFILE, CURL_CA_BUNDLE);
  ------------------
  |  |   26|  2.03k|#define CURL_CA_BUNDLE "/etc/ssl/certs/ca-certificates.crt"
  ------------------
  273|  2.03k|      if(result)
  ------------------
  |  Branch (273:10): [True: 0, False: 2.03k]
  ------------------
  274|      0|        return result;
  275|  2.03k|    }
  276|  2.03k|#endif
  277|  2.03k|  }
  278|  2.03k|  sslc->primary.CAfile = ssl_easy_steal(data, STRING_SSL_CAFILE);
  279|  2.03k|  sslc->primary.CRLfile = ssl_easy_steal(data, STRING_SSL_CRLFILE);
  280|  2.03k|  sslc->primary.CApath = ssl_easy_steal(data, STRING_SSL_CAPATH);
  281|  2.03k|  sslc->primary.cipher_list = ssl_easy_steal(data, STRING_SSL_CIPHER_LIST);
  282|  2.03k|  sslc->primary.cipher_list13 = ssl_easy_steal(data, STRING_SSL_CIPHER13_LIST);
  283|  2.03k|  sslc->primary.signature_algorithms =
  284|  2.03k|    ssl_easy_steal(data, STRING_SSL_SIGNATURE_ALGORITHMS);
  285|  2.03k|  sslc->primary.ca_info_blob = data->set.blobs[BLOB_CAINFO];
  286|  2.03k|  sslc->primary.curves = ssl_easy_steal(data, STRING_SSL_EC_CURVES);
  287|       |  /* Maybe these should not be used for another origin. But for
  288|       |   * backwards compatibility, keep them in. */
  289|  2.03k|  sslc->primary.issuercert = ssl_easy_steal(data, STRING_SSL_ISSUERCERT);
  290|  2.03k|  sslc->primary.issuercert_blob = data->set.blobs[BLOB_SSL_ISSUERCERT];
  291|       |
  292|  2.03k|  if(Curl_peer_equal(data->state.initial_origin, origin)) {
  ------------------
  |  Branch (292:6): [True: 2.03k, False: 0]
  ------------------
  293|  2.03k|    sslc->primary.pinned_key =
  294|  2.03k|      ssl_easy_steal(data, STRING_SSL_PINNEDPUBLICKEY);
  295|  2.03k|    sslc->primary.cert_blob = data->set.blobs[BLOB_CERT];
  296|  2.03k|    sslc->primary.cert_type = ssl_easy_steal(data, STRING_CERT_TYPE);
  297|  2.03k|    sslc->primary.key = ssl_easy_steal(data, STRING_KEY);
  298|  2.03k|    sslc->primary.key_type = ssl_easy_steal(data, STRING_KEY_TYPE);
  299|  2.03k|    sslc->primary.key_passwd = ssl_easy_steal(data, STRING_KEY_PASSWD);
  300|  2.03k|    sslc->primary.clientcert = ssl_easy_steal(data, STRING_CERT);
  301|  2.03k|    sslc->primary.key_blob = data->set.blobs[BLOB_KEY];
  302|  2.03k|  }
  303|      0|  else {
  304|      0|    sslc->primary.pinned_key = NULL;
  305|      0|    sslc->primary.cert_blob = NULL;
  306|      0|    sslc->primary.cert_type = NULL;
  307|      0|    sslc->primary.key = NULL;
  308|      0|    sslc->primary.key_type = NULL;
  309|      0|    sslc->primary.key_passwd = NULL;
  310|      0|    sslc->primary.clientcert = NULL;
  311|      0|    sslc->primary.key_blob = NULL;
  312|      0|  }
  313|       |
  314|  2.03k|#ifndef CURL_DISABLE_PROXY
  315|  2.03k|  sslc = &data->set.proxy_ssl;
  316|       |  /* no initial origin for proxy, it is not changed for redirects */
  317|  2.03k|  ssl_easy_config_compl_options(NULL, NULL, sslc);
  318|       |
  319|  2.03k|  if(Curl_ssl_backend() != CURLSSLBACKEND_SCHANNEL) {
  ------------------
  |  Branch (319:6): [True: 2.03k, False: 0]
  ------------------
  320|       |#if defined(USE_APPLE_SECTRUST) || defined(CURL_CA_NATIVE)
  321|       |    if(!sslc->custom_capath && !sslc->custom_cafile && !sslc->custom_cablob)
  322|       |      sslc->primary.native_ca_store = TRUE;
  323|       |#endif
  324|  2.03k|#ifdef CURL_CA_PATH
  325|  2.03k|    if(!sslc->custom_capath &&
  ------------------
  |  Branch (325:8): [True: 2.03k, False: 0]
  ------------------
  326|  2.03k|       !CURL_EASY_STR(data, STRING_SSL_CAPATH_PROXY)) {
  ------------------
  |  | 1228|  2.03k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
  |  Branch (326:8): [True: 2.03k, False: 0]
  ------------------
  327|  2.03k|      result = Curl_setstropt(data, STRING_SSL_CAPATH_PROXY, CURL_CA_PATH);
  ------------------
  |  |   32|  2.03k|#define CURL_CA_PATH "/etc/ssl/certs"
  ------------------
  328|  2.03k|      if(result)
  ------------------
  |  Branch (328:10): [True: 0, False: 2.03k]
  ------------------
  329|      0|        return result;
  330|  2.03k|    }
  331|  2.03k|#endif
  332|  2.03k|#ifdef CURL_CA_BUNDLE
  333|  2.03k|    if(!sslc->custom_cafile &&
  ------------------
  |  Branch (333:8): [True: 2.03k, False: 0]
  ------------------
  334|  2.03k|       !CURL_EASY_STR(data, STRING_SSL_CAFILE_PROXY)) {
  ------------------
  |  | 1228|  2.03k|  Curl_u8_strset_get(&(d)->set.strings, (uint8_t)(id))
  ------------------
  |  Branch (334:8): [True: 2.03k, False: 0]
  ------------------
  335|  2.03k|      result = Curl_setstropt(data, STRING_SSL_CAFILE_PROXY, CURL_CA_BUNDLE);
  ------------------
  |  |   26|  2.03k|#define CURL_CA_BUNDLE "/etc/ssl/certs/ca-certificates.crt"
  ------------------
  336|  2.03k|      if(result)
  ------------------
  |  Branch (336:10): [True: 0, False: 2.03k]
  ------------------
  337|      0|        return result;
  338|  2.03k|    }
  339|  2.03k|#endif
  340|  2.03k|  }
  341|  2.03k|  sslc->primary.CAfile = ssl_easy_steal(data, STRING_SSL_CAFILE_PROXY);
  342|  2.03k|  sslc->primary.CApath = ssl_easy_steal(data, STRING_SSL_CAPATH_PROXY);
  343|  2.03k|  sslc->primary.cipher_list =
  344|  2.03k|    ssl_easy_steal(data, STRING_SSL_CIPHER_LIST_PROXY);
  345|  2.03k|  sslc->primary.cipher_list13 =
  346|  2.03k|    ssl_easy_steal(data, STRING_SSL_CIPHER13_LIST_PROXY);
  347|  2.03k|  sslc->primary.pinned_key =
  348|  2.03k|    ssl_easy_steal(data, STRING_SSL_PINNEDPUBLICKEY_PROXY);
  349|  2.03k|  sslc->primary.cert_blob = data->set.blobs[BLOB_CERT_PROXY];
  350|  2.03k|  sslc->primary.ca_info_blob = data->set.blobs[BLOB_CAINFO_PROXY];
  351|  2.03k|  sslc->primary.issuercert = ssl_easy_steal(data, STRING_SSL_ISSUERCERT_PROXY);
  352|  2.03k|  sslc->primary.issuercert_blob = data->set.blobs[BLOB_SSL_ISSUERCERT_PROXY];
  353|  2.03k|  sslc->primary.CRLfile = ssl_easy_steal(data, STRING_SSL_CRLFILE_PROXY);
  354|  2.03k|  sslc->primary.cert_type = ssl_easy_steal(data, STRING_CERT_TYPE_PROXY);
  355|  2.03k|  sslc->primary.key = ssl_easy_steal(data, STRING_KEY_PROXY);
  356|  2.03k|  sslc->primary.key_type = ssl_easy_steal(data, STRING_KEY_TYPE_PROXY);
  357|  2.03k|  sslc->primary.key_passwd = ssl_easy_steal(data, STRING_KEY_PASSWD_PROXY);
  358|  2.03k|  sslc->primary.clientcert = ssl_easy_steal(data, STRING_CERT_PROXY);
  359|  2.03k|  sslc->primary.key_blob = data->set.blobs[BLOB_KEY_PROXY];
  360|  2.03k|#endif /* CURL_DISABLE_PROXY */
  361|       |
  362|  2.03k|  return CURLE_OK;
  363|  2.03k|}
Curl_ssl_conn_config_init:
  367|  2.03k|{
  368|       |  /* Clone "primary" SSL configurations from the easy handle to
  369|       |   * the connection. They are used for connection cache matching and
  370|       |   * probably outlive the easy handle */
  371|  2.03k|  if(!clone_ssl_primary_config(&data->set.ssl.primary, &conn->ssl_config))
  ------------------
  |  Branch (371:6): [True: 0, False: 2.03k]
  ------------------
  372|      0|    return CURLE_OUT_OF_MEMORY;
  373|  2.03k|#ifndef CURL_DISABLE_PROXY
  374|  2.03k|  if(!clone_ssl_primary_config(&data->set.proxy_ssl.primary,
  ------------------
  |  Branch (374:6): [True: 0, False: 2.03k]
  ------------------
  375|  2.03k|                               &conn->proxy_ssl_config))
  376|      0|    return CURLE_OUT_OF_MEMORY;
  377|  2.03k|#endif
  378|  2.03k|  return CURLE_OK;
  379|  2.03k|}
Curl_ssl_conn_config_cleanup:
  382|  2.03k|{
  383|  2.03k|  Curl_ssl_config_cleanup(&conn->ssl_config);
  384|  2.03k|#ifndef CURL_DISABLE_PROXY
  385|  2.03k|  Curl_ssl_config_cleanup(&conn->proxy_ssl_config);
  386|  2.03k|#endif
  387|  2.03k|}
Curl_ssl_conn_config_update:
  390|  2.53k|{
  391|       |  /* May be called on an easy that has no connection yet */
  392|  2.53k|  if(data->conn) {
  ------------------
  |  Branch (392:6): [True: 0, False: 2.53k]
  ------------------
  393|      0|    struct ssl_primary_config *src, *dest;
  394|      0|#ifndef CURL_DISABLE_PROXY
  395|      0|    src = for_proxy ? &data->set.proxy_ssl.primary : &data->set.ssl.primary;
  ------------------
  |  Branch (395:11): [True: 0, False: 0]
  ------------------
  396|      0|    dest = for_proxy ? &data->conn->proxy_ssl_config : &data->conn->ssl_config;
  ------------------
  |  Branch (396:12): [True: 0, False: 0]
  ------------------
  397|       |#else
  398|       |    (void)for_proxy;
  399|       |    src = &data->set.ssl.primary;
  400|       |    dest = &data->conn->ssl_config;
  401|       |#endif
  402|      0|    dest->verifyhost = src->verifyhost;
  403|      0|    dest->verifypeer = src->verifypeer;
  404|      0|    dest->verifystatus = src->verifystatus;
  405|      0|  }
  406|  2.53k|}
vtls_config.c:ssl_easy_config_compl_options:
  225|  4.07k|{
  226|  4.07k|  uint8_t options = sslc->primary.ssl_options;
  227|       |  /* If set via CURLOPT_(PROXY_)SSL_OPTIONS, we definitely use it.
  228|       |   * If not, we switch it on for supported backends if no custom
  229|       |   * CA settings exist. */
  230|  4.07k|  sslc->primary.native_ca_store = !!(options & CURLSSLOPT_NATIVE_CA);
  ------------------
  |  |  967|  4.07k|#define CURLSSLOPT_NATIVE_CA (1L << 4)
  ------------------
  231|  4.07k|  sslc->enable_beast = !!(options & CURLSSLOPT_ALLOW_BEAST);
  ------------------
  |  |  950|  4.07k|#define CURLSSLOPT_ALLOW_BEAST (1L << 0)
  ------------------
  232|  4.07k|  sslc->no_partialchain = !!(options & CURLSSLOPT_NO_PARTIALCHAIN);
  ------------------
  |  |  958|  4.07k|#define CURLSSLOPT_NO_PARTIALCHAIN (1L << 2)
  ------------------
  233|  4.07k|  sslc->no_revoke = !!(options & CURLSSLOPT_NO_REVOKE);
  ------------------
  |  |  954|  4.07k|#define CURLSSLOPT_NO_REVOKE (1L << 1)
  ------------------
  234|  4.07k|  sslc->revoke_best_effort = !!(options & CURLSSLOPT_REVOKE_BEST_EFFORT);
  ------------------
  |  |  963|  4.07k|#define CURLSSLOPT_REVOKE_BEST_EFFORT (1L << 3)
  ------------------
  235|  4.07k|  sslc->earlydata = !!(options & CURLSSLOPT_EARLYDATA);
  ------------------
  |  |  974|  4.07k|#define CURLSSLOPT_EARLYDATA (1L << 6)
  ------------------
  236|       |
  237|  4.07k|  sslc->auto_client_cert = Curl_peer_equal(origin, initial_origin) &&
  ------------------
  |  Branch (237:28): [True: 4.07k, False: 0]
  ------------------
  238|  4.07k|                           !!(options & CURLSSLOPT_AUTO_CLIENT_CERT);
  ------------------
  |  |  971|  4.07k|#define CURLSSLOPT_AUTO_CLIENT_CERT (1L << 5)
  ------------------
  |  Branch (238:28): [True: 0, False: 4.07k]
  ------------------
  239|  4.07k|}
vtls_config.c:ssl_easy_steal:
  242|  52.9k|{
  243|       |  /* For connection matching, we borrow string references from data
  244|       |   * THIS IS NOT REALLY NICE. */
  245|  52.9k|  return CURL_UNCONST(CURL_EASY_STR(data, id));
  ------------------
  |  |  856|  52.9k|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
  246|  52.9k|}
vtls_config.c:clone_ssl_primary_config:
  188|  4.07k|{
  189|  4.07k|  DEBUGASSERT(!dest->deep_copy);
  ------------------
  |  | 1075|  4.07k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (189:3): [True: 0, False: 4.07k]
  |  Branch (189:3): [True: 4.07k, False: 0]
  ------------------
  190|  4.07k|  dest->deep_copy = TRUE;
  ------------------
  |  | 1045|  4.07k|#define TRUE true
  ------------------
  191|  4.07k|  dest->version = source->version;
  192|  4.07k|  dest->version_max = source->version_max;
  193|  4.07k|  dest->verifypeer = source->verifypeer;
  194|  4.07k|  dest->verifyhost = source->verifyhost;
  195|  4.07k|  dest->verifystatus = source->verifystatus;
  196|  4.07k|  dest->native_ca_store = source->native_ca_store;
  197|  4.07k|  dest->cache_session = source->cache_session;
  198|  4.07k|  dest->ssl_options = source->ssl_options;
  199|       |
  200|  4.07k|  CLONE_BLOB(cert_blob);
  ------------------
  |  |   62|  4.07k|  do {                                   \
  |  |   63|  4.07k|    if(blobdup(&dest->var, source->var)) \
  |  |  ------------------
  |  |  |  Branch (63:8): [True: 0, False: 4.07k]
  |  |  ------------------
  |  |   64|  4.07k|      return FALSE;                      \
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  |  |   65|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (65:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  201|  4.07k|  CLONE_BLOB(ca_info_blob);
  ------------------
  |  |   62|  4.07k|  do {                                   \
  |  |   63|  4.07k|    if(blobdup(&dest->var, source->var)) \
  |  |  ------------------
  |  |  |  Branch (63:8): [True: 0, False: 4.07k]
  |  |  ------------------
  |  |   64|  4.07k|      return FALSE;                      \
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  |  |   65|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (65:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  202|  4.07k|  CLONE_BLOB(issuercert_blob);
  ------------------
  |  |   62|  4.07k|  do {                                   \
  |  |   63|  4.07k|    if(blobdup(&dest->var, source->var)) \
  |  |  ------------------
  |  |  |  Branch (63:8): [True: 0, False: 4.07k]
  |  |  ------------------
  |  |   64|  4.07k|      return FALSE;                      \
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  |  |   65|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (65:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  203|  4.07k|  CLONE_STRING(CApath);
  ------------------
  |  |   51|  4.07k|  do {                                       \
  |  |   52|  4.07k|    if(source->var) {                        \
  |  |  ------------------
  |  |  |  Branch (52:8): [True: 4.07k, False: 0]
  |  |  ------------------
  |  |   53|  4.07k|      dest->var = curlx_strdup(source->var); \
  |  |  ------------------
  |  |  |  | 1470|  4.07k|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  |   54|  4.07k|      if(!dest->var)                         \
  |  |  ------------------
  |  |  |  Branch (54:10): [True: 0, False: 4.07k]
  |  |  ------------------
  |  |   55|  4.07k|        return FALSE;                        \
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  |  |   56|  4.07k|    }                                        \
  |  |   57|  4.07k|    else                                     \
  |  |   58|  4.07k|      dest->var = NULL;                      \
  |  |   59|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (59:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  204|  4.07k|  CLONE_STRING(CAfile);
  ------------------
  |  |   51|  4.07k|  do {                                       \
  |  |   52|  4.07k|    if(source->var) {                        \
  |  |  ------------------
  |  |  |  Branch (52:8): [True: 4.07k, False: 0]
  |  |  ------------------
  |  |   53|  4.07k|      dest->var = curlx_strdup(source->var); \
  |  |  ------------------
  |  |  |  | 1470|  4.07k|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  |   54|  4.07k|      if(!dest->var)                         \
  |  |  ------------------
  |  |  |  Branch (54:10): [True: 0, False: 4.07k]
  |  |  ------------------
  |  |   55|  4.07k|        return FALSE;                        \
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  |  |   56|  4.07k|    }                                        \
  |  |   57|  4.07k|    else                                     \
  |  |   58|  4.07k|      dest->var = NULL;                      \
  |  |   59|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (59:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  205|  4.07k|  CLONE_STRING(issuercert);
  ------------------
  |  |   51|  4.07k|  do {                                       \
  |  |   52|  4.07k|    if(source->var) {                        \
  |  |  ------------------
  |  |  |  Branch (52:8): [True: 0, False: 4.07k]
  |  |  ------------------
  |  |   53|      0|      dest->var = curlx_strdup(source->var); \
  |  |  ------------------
  |  |  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  |   54|      0|      if(!dest->var)                         \
  |  |  ------------------
  |  |  |  Branch (54:10): [True: 0, False: 0]
  |  |  ------------------
  |  |   55|      0|        return FALSE;                        \
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  |  |   56|      0|    }                                        \
  |  |   57|  4.07k|    else                                     \
  |  |   58|  4.07k|      dest->var = NULL;                      \
  |  |   59|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (59:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  206|  4.07k|  CLONE_STRING(cipher_list);
  ------------------
  |  |   51|  4.07k|  do {                                       \
  |  |   52|  4.07k|    if(source->var) {                        \
  |  |  ------------------
  |  |  |  Branch (52:8): [True: 0, False: 4.07k]
  |  |  ------------------
  |  |   53|      0|      dest->var = curlx_strdup(source->var); \
  |  |  ------------------
  |  |  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  |   54|      0|      if(!dest->var)                         \
  |  |  ------------------
  |  |  |  Branch (54:10): [True: 0, False: 0]
  |  |  ------------------
  |  |   55|      0|        return FALSE;                        \
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  |  |   56|      0|    }                                        \
  |  |   57|  4.07k|    else                                     \
  |  |   58|  4.07k|      dest->var = NULL;                      \
  |  |   59|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (59:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  207|  4.07k|  CLONE_STRING(cipher_list13);
  ------------------
  |  |   51|  4.07k|  do {                                       \
  |  |   52|  4.07k|    if(source->var) {                        \
  |  |  ------------------
  |  |  |  Branch (52:8): [True: 0, False: 4.07k]
  |  |  ------------------
  |  |   53|      0|      dest->var = curlx_strdup(source->var); \
  |  |  ------------------
  |  |  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  |   54|      0|      if(!dest->var)                         \
  |  |  ------------------
  |  |  |  Branch (54:10): [True: 0, False: 0]
  |  |  ------------------
  |  |   55|      0|        return FALSE;                        \
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  |  |   56|      0|    }                                        \
  |  |   57|  4.07k|    else                                     \
  |  |   58|  4.07k|      dest->var = NULL;                      \
  |  |   59|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (59:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  208|  4.07k|  CLONE_STRING(pinned_key);
  ------------------
  |  |   51|  4.07k|  do {                                       \
  |  |   52|  4.07k|    if(source->var) {                        \
  |  |  ------------------
  |  |  |  Branch (52:8): [True: 0, False: 4.07k]
  |  |  ------------------
  |  |   53|      0|      dest->var = curlx_strdup(source->var); \
  |  |  ------------------
  |  |  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  |   54|      0|      if(!dest->var)                         \
  |  |  ------------------
  |  |  |  Branch (54:10): [True: 0, False: 0]
  |  |  ------------------
  |  |   55|      0|        return FALSE;                        \
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  |  |   56|      0|    }                                        \
  |  |   57|  4.07k|    else                                     \
  |  |   58|  4.07k|      dest->var = NULL;                      \
  |  |   59|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (59:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  209|  4.07k|  CLONE_STRING(curves);
  ------------------
  |  |   51|  4.07k|  do {                                       \
  |  |   52|  4.07k|    if(source->var) {                        \
  |  |  ------------------
  |  |  |  Branch (52:8): [True: 0, False: 4.07k]
  |  |  ------------------
  |  |   53|      0|      dest->var = curlx_strdup(source->var); \
  |  |  ------------------
  |  |  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  |   54|      0|      if(!dest->var)                         \
  |  |  ------------------
  |  |  |  Branch (54:10): [True: 0, False: 0]
  |  |  ------------------
  |  |   55|      0|        return FALSE;                        \
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  |  |   56|      0|    }                                        \
  |  |   57|  4.07k|    else                                     \
  |  |   58|  4.07k|      dest->var = NULL;                      \
  |  |   59|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (59:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  210|  4.07k|  CLONE_STRING(signature_algorithms);
  ------------------
  |  |   51|  4.07k|  do {                                       \
  |  |   52|  4.07k|    if(source->var) {                        \
  |  |  ------------------
  |  |  |  Branch (52:8): [True: 0, False: 4.07k]
  |  |  ------------------
  |  |   53|      0|      dest->var = curlx_strdup(source->var); \
  |  |  ------------------
  |  |  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  |   54|      0|      if(!dest->var)                         \
  |  |  ------------------
  |  |  |  Branch (54:10): [True: 0, False: 0]
  |  |  ------------------
  |  |   55|      0|        return FALSE;                        \
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  |  |   56|      0|    }                                        \
  |  |   57|  4.07k|    else                                     \
  |  |   58|  4.07k|      dest->var = NULL;                      \
  |  |   59|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (59:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  211|  4.07k|  CLONE_STRING(CRLfile);
  ------------------
  |  |   51|  4.07k|  do {                                       \
  |  |   52|  4.07k|    if(source->var) {                        \
  |  |  ------------------
  |  |  |  Branch (52:8): [True: 0, False: 4.07k]
  |  |  ------------------
  |  |   53|      0|      dest->var = curlx_strdup(source->var); \
  |  |  ------------------
  |  |  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  |   54|      0|      if(!dest->var)                         \
  |  |  ------------------
  |  |  |  Branch (54:10): [True: 0, False: 0]
  |  |  ------------------
  |  |   55|      0|        return FALSE;                        \
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  |  |   56|      0|    }                                        \
  |  |   57|  4.07k|    else                                     \
  |  |   58|  4.07k|      dest->var = NULL;                      \
  |  |   59|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (59:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  212|       |  /* SSL credentials: client certificate */
  213|  4.07k|  CLONE_STRING(clientcert);
  ------------------
  |  |   51|  4.07k|  do {                                       \
  |  |   52|  4.07k|    if(source->var) {                        \
  |  |  ------------------
  |  |  |  Branch (52:8): [True: 0, False: 4.07k]
  |  |  ------------------
  |  |   53|      0|      dest->var = curlx_strdup(source->var); \
  |  |  ------------------
  |  |  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  |   54|      0|      if(!dest->var)                         \
  |  |  ------------------
  |  |  |  Branch (54:10): [True: 0, False: 0]
  |  |  ------------------
  |  |   55|      0|        return FALSE;                        \
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  |  |   56|      0|    }                                        \
  |  |   57|  4.07k|    else                                     \
  |  |   58|  4.07k|      dest->var = NULL;                      \
  |  |   59|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (59:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  214|  4.07k|  CLONE_STRING(cert_type);
  ------------------
  |  |   51|  4.07k|  do {                                       \
  |  |   52|  4.07k|    if(source->var) {                        \
  |  |  ------------------
  |  |  |  Branch (52:8): [True: 0, False: 4.07k]
  |  |  ------------------
  |  |   53|      0|      dest->var = curlx_strdup(source->var); \
  |  |  ------------------
  |  |  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  |   54|      0|      if(!dest->var)                         \
  |  |  ------------------
  |  |  |  Branch (54:10): [True: 0, False: 0]
  |  |  ------------------
  |  |   55|      0|        return FALSE;                        \
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  |  |   56|      0|    }                                        \
  |  |   57|  4.07k|    else                                     \
  |  |   58|  4.07k|      dest->var = NULL;                      \
  |  |   59|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (59:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  215|  4.07k|  CLONE_STRING(key);
  ------------------
  |  |   51|  4.07k|  do {                                       \
  |  |   52|  4.07k|    if(source->var) {                        \
  |  |  ------------------
  |  |  |  Branch (52:8): [True: 0, False: 4.07k]
  |  |  ------------------
  |  |   53|      0|      dest->var = curlx_strdup(source->var); \
  |  |  ------------------
  |  |  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  |   54|      0|      if(!dest->var)                         \
  |  |  ------------------
  |  |  |  Branch (54:10): [True: 0, False: 0]
  |  |  ------------------
  |  |   55|      0|        return FALSE;                        \
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  |  |   56|      0|    }                                        \
  |  |   57|  4.07k|    else                                     \
  |  |   58|  4.07k|      dest->var = NULL;                      \
  |  |   59|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (59:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  216|  4.07k|  CLONE_STRING(key_type);
  ------------------
  |  |   51|  4.07k|  do {                                       \
  |  |   52|  4.07k|    if(source->var) {                        \
  |  |  ------------------
  |  |  |  Branch (52:8): [True: 0, False: 4.07k]
  |  |  ------------------
  |  |   53|      0|      dest->var = curlx_strdup(source->var); \
  |  |  ------------------
  |  |  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  |   54|      0|      if(!dest->var)                         \
  |  |  ------------------
  |  |  |  Branch (54:10): [True: 0, False: 0]
  |  |  ------------------
  |  |   55|      0|        return FALSE;                        \
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  |  |   56|      0|    }                                        \
  |  |   57|  4.07k|    else                                     \
  |  |   58|  4.07k|      dest->var = NULL;                      \
  |  |   59|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (59:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  217|  4.07k|  CLONE_STRING(key_passwd);
  ------------------
  |  |   51|  4.07k|  do {                                       \
  |  |   52|  4.07k|    if(source->var) {                        \
  |  |  ------------------
  |  |  |  Branch (52:8): [True: 0, False: 4.07k]
  |  |  ------------------
  |  |   53|      0|      dest->var = curlx_strdup(source->var); \
  |  |  ------------------
  |  |  |  | 1470|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  |   54|      0|      if(!dest->var)                         \
  |  |  ------------------
  |  |  |  Branch (54:10): [True: 0, False: 0]
  |  |  ------------------
  |  |   55|      0|        return FALSE;                        \
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  |  |   56|      0|    }                                        \
  |  |   57|  4.07k|    else                                     \
  |  |   58|  4.07k|      dest->var = NULL;                      \
  |  |   59|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (59:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  218|  4.07k|  CLONE_BLOB(key_blob);
  ------------------
  |  |   62|  4.07k|  do {                                   \
  |  |   63|  4.07k|    if(blobdup(&dest->var, source->var)) \
  |  |  ------------------
  |  |  |  Branch (63:8): [True: 0, False: 4.07k]
  |  |  ------------------
  |  |   64|  4.07k|      return FALSE;                      \
  |  |  ------------------
  |  |  |  | 1048|      0|#define FALSE false
  |  |  ------------------
  |  |   65|  4.07k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (65:11): [Folded, False: 4.07k]
  |  |  ------------------
  ------------------
  219|  4.07k|  return TRUE;
  ------------------
  |  | 1045|  4.07k|#define TRUE true
  ------------------
  220|  4.07k|}
vtls_config.c:blobdup:
   68|  16.2k|{
   69|  16.2k|  DEBUGASSERT(dest);
  ------------------
  |  | 1075|  16.2k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (69:3): [True: 0, False: 16.2k]
  |  Branch (69:3): [True: 16.2k, False: 0]
  ------------------
   70|  16.2k|  DEBUGASSERT(!*dest);
  ------------------
  |  | 1075|  16.2k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (70:3): [True: 0, False: 16.2k]
  |  Branch (70:3): [True: 16.2k, False: 0]
  ------------------
   71|  16.2k|  if(src) {
  ------------------
  |  Branch (71:6): [True: 0, False: 16.2k]
  ------------------
   72|       |    /* only if there is data to dupe! */
   73|      0|    struct curl_blob *d;
   74|      0|    d = curlx_malloc(sizeof(struct curl_blob) + src->len);
  ------------------
  |  | 1471|      0|#define curlx_malloc(size)         curl_dbg_malloc(size, __LINE__, __FILE__)
  ------------------
   75|      0|    if(!d)
  ------------------
  |  Branch (75:8): [True: 0, False: 0]
  ------------------
   76|      0|      return CURLE_OUT_OF_MEMORY;
   77|      0|    d->len = src->len;
   78|       |    /* Always duplicate because the connection may survive longer than the
   79|       |       handle that passed in the blob. */
   80|      0|    d->flags = CURL_BLOB_COPY;
  ------------------
  |  |   31|      0|#define CURL_BLOB_COPY   1 /* tell libcurl to copy the data */
  ------------------
   81|      0|    d->data = (void *)((char *)d + sizeof(struct curl_blob));
   82|      0|    memcpy(d->data, src->data, src->len);
   83|      0|    *dest = d;
   84|      0|  }
   85|  16.2k|  return CURLE_OK;
   86|  16.2k|}

Curl_ssl_scache_create:
  627|  2.53k|{
  628|  2.53k|  struct Curl_ssl_scache *scache;
  629|  2.53k|  struct Curl_ssl_scache_peer *peers;
  630|  2.53k|  size_t i;
  631|       |
  632|  2.53k|  *pscache = NULL;
  633|  2.53k|  peers = curlx_calloc(max_peers, sizeof(*peers));
  ------------------
  |  | 1473|  2.53k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
  634|  2.53k|  if(!peers)
  ------------------
  |  Branch (634:6): [True: 0, False: 2.53k]
  ------------------
  635|      0|    return CURLE_OUT_OF_MEMORY;
  636|       |
  637|  2.53k|  scache = curlx_calloc(1, sizeof(*scache));
  ------------------
  |  | 1473|  2.53k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
  638|  2.53k|  if(!scache) {
  ------------------
  |  Branch (638:6): [True: 0, False: 2.53k]
  ------------------
  639|      0|    curlx_free(peers);
  ------------------
  |  | 1476|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  640|      0|    return CURLE_OUT_OF_MEMORY;
  641|      0|  }
  642|       |
  643|  2.53k|  scache->magic = CURL_SCACHE_MAGIC;
  ------------------
  |  |   62|  2.53k|#define CURL_SCACHE_MAGIC 0x000e1551
  ------------------
  644|  2.53k|  scache->default_lifetime_secs = (24 * 60 * 60); /* 1 day */
  645|  2.53k|  scache->peer_count = max_peers;
  646|  2.53k|  scache->peers = peers;
  647|  2.53k|  scache->age = 1;
  648|  66.0k|  for(i = 0; i < scache->peer_count; ++i) {
  ------------------
  |  Branch (648:14): [True: 63.4k, False: 2.53k]
  ------------------
  649|  63.4k|    scache->peers[i].max_sessions = max_sessions_per_peer;
  650|  63.4k|    Curl_llist_init(&scache->peers[i].sessions,
  651|  63.4k|                    cf_ssl_scache_session_ldestroy);
  652|  63.4k|  }
  653|  2.53k|#ifdef USE_MUTEX
  654|       |  Curl_mutex_init(&scache->mutex);
  ------------------
  |  |   50|  2.53k|#  define Curl_mutex_init(m)     pthread_mutex_init(m, NULL)
  ------------------
  655|  2.53k|#endif
  656|  2.53k|  *pscache = scache;
  657|  2.53k|  return CURLE_OK;
  658|  2.53k|}
Curl_ssl_scache_destroy:
  661|  2.53k|{
  662|  2.53k|  if(GOOD_SCACHE(scache)) {
  ------------------
  |  |   64|  2.53k|#define GOOD_SCACHE(x) ((x) && (x)->magic == CURL_SCACHE_MAGIC)
  |  |  ------------------
  |  |  |  |   62|  2.53k|#define CURL_SCACHE_MAGIC 0x000e1551
  |  |  ------------------
  |  |  |  Branch (64:25): [True: 2.53k, False: 0]
  |  |  |  Branch (64:32): [True: 2.53k, False: 0]
  |  |  ------------------
  ------------------
  663|  2.53k|    size_t i;
  664|  2.53k|    scache->magic = 0;
  665|  66.0k|    for(i = 0; i < scache->peer_count; ++i) {
  ------------------
  |  Branch (665:16): [True: 63.4k, False: 2.53k]
  ------------------
  666|  63.4k|      cf_ssl_scache_clear_peer(&scache->peers[i]);
  667|  63.4k|    }
  668|  2.53k|    curlx_free(scache->peers);
  ------------------
  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  669|  2.53k|#ifdef USE_MUTEX
  670|  2.53k|    Curl_mutex_destroy(&scache->mutex);
  ------------------
  |  |   53|  2.53k|#  define Curl_mutex_destroy(m)  pthread_mutex_destroy(m)
  ------------------
  671|  2.53k|#endif
  672|  2.53k|    curlx_free(scache);
  ------------------
  |  | 1476|  2.53k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  673|  2.53k|  }
  674|  2.53k|}
Curl_ssl_scache_is_locked_by_current_thread:
  727|  5.07k|{
  728|  5.07k|  struct Curl_ssl_scache *scache = cf_ssl_scache_get(data);
  729|  5.07k|  bool locked = FALSE;
  ------------------
  |  | 1048|  5.07k|#define FALSE false
  ------------------
  730|  5.07k|  if(!scache)
  ------------------
  |  Branch (730:6): [True: 0, False: 5.07k]
  ------------------
  731|      0|    return FALSE;
  ------------------
  |  | 1048|      0|#define FALSE false
  ------------------
  732|  5.07k|#ifdef USE_MUTEX
  733|  5.07k|  Curl_mutex_acquire(&scache->mutex);
  ------------------
  |  |   51|  5.07k|#  define Curl_mutex_acquire(m)  pthread_mutex_lock(m)
  ------------------
  734|  5.07k|  locked = scache->is_locked && Curl_thread_is_current(scache->locking_thread);
  ------------------
  |  Branch (734:12): [True: 0, False: 5.07k]
  |  Branch (734:33): [True: 0, False: 0]
  ------------------
  735|  5.07k|  Curl_mutex_release(&scache->mutex);
  ------------------
  |  |   52|  5.07k|#  define Curl_mutex_release(m)  pthread_mutex_unlock(m)
  ------------------
  736|       |#else
  737|       |  locked = (bool)scache->is_locked;
  738|       |#endif
  739|  5.07k|  return locked;
  740|  5.07k|}
vtls_scache.c:cf_ssl_scache_clear_peer:
  504|  63.4k|{
  505|  63.4k|  Curl_llist_destroy(&peer->sessions, NULL);
  506|  63.4k|  if(peer->sobj) {
  ------------------
  |  Branch (506:6): [True: 0, False: 63.4k]
  ------------------
  507|      0|    DEBUGASSERT(peer->sobj_free);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (507:5): [True: 0, False: 0]
  |  Branch (507:5): [True: 0, False: 0]
  ------------------
  508|      0|    if(peer->sobj_free)
  ------------------
  |  Branch (508:8): [True: 0, False: 0]
  ------------------
  509|      0|      peer->sobj_free(peer->sobj);
  510|      0|    peer->sobj = NULL;
  511|      0|  }
  512|  63.4k|  peer->sobj_free = NULL;
  513|  63.4k|  curlx_safefree(peer->clientcert);
  ------------------
  |  | 1332|  63.4k|  do {                      \
  |  | 1333|  63.4k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  63.4k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  63.4k|    (ptr) = NULL;           \
  |  | 1335|  63.4k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 63.4k]
  |  |  ------------------
  ------------------
  514|  63.4k|  curlx_safefree(peer->key_passwd);
  ------------------
  |  | 1332|  63.4k|  do {                      \
  |  | 1333|  63.4k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  63.4k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  63.4k|    (ptr) = NULL;           \
  |  | 1335|  63.4k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 63.4k]
  |  |  ------------------
  ------------------
  515|  63.4k|  curlx_safefree(peer->ssl_peer_key);
  ------------------
  |  | 1332|  63.4k|  do {                      \
  |  | 1333|  63.4k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1476|  63.4k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  63.4k|    (ptr) = NULL;           \
  |  | 1335|  63.4k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 63.4k]
  |  |  ------------------
  ------------------
  516|  63.4k|  peer->age = 0;
  517|       |  peer->hmac_set = FALSE;
  ------------------
  |  | 1048|  63.4k|#define FALSE false
  ------------------
  518|  63.4k|}
vtls_scache.c:cf_ssl_scache_get:
  368|  5.07k|{
  369|  5.07k|  struct Curl_ssl_scache *scache = NULL;
  370|       |  /* If a share is present, its ssl_scache has preference over the multi */
  371|  5.07k|  if(data->share && data->share->ssl_scache)
  ------------------
  |  Branch (371:6): [True: 0, False: 5.07k]
  |  Branch (371:21): [True: 0, False: 0]
  ------------------
  372|      0|    scache = data->share->ssl_scache;
  373|  5.07k|  else if(data->multi && data->multi->ssl_scache)
  ------------------
  |  Branch (373:11): [True: 5.07k, False: 0]
  |  Branch (373:26): [True: 5.07k, False: 0]
  ------------------
  374|  5.07k|    scache = data->multi->ssl_scache;
  375|  5.07k|  if(scache && !GOOD_SCACHE(scache)) {
  ------------------
  |  |   64|  5.07k|#define GOOD_SCACHE(x) ((x) && (x)->magic == CURL_SCACHE_MAGIC)
  |  |  ------------------
  |  |  |  |   62|  5.07k|#define CURL_SCACHE_MAGIC 0x000e1551
  |  |  ------------------
  |  |  |  Branch (64:25): [True: 5.07k, False: 0]
  |  |  |  Branch (64:32): [True: 5.07k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (375:6): [True: 5.07k, False: 0]
  ------------------
  376|      0|    failf(data, "transfer would use an invalid scache at %p, denied",
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  377|      0|          (void *)scache);
  378|      0|    DEBUGASSERT(0);
  ------------------
  |  | 1075|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (378:5): [Folded, False: 0]
  |  Branch (378:5): [Folded, False: 0]
  ------------------
  379|      0|    return NULL;
  380|      0|  }
  381|  5.07k|  return scache;
  382|  5.07k|}

_ZN4curl6fuzzer5proto8ScenarioC2EPN6google8protobuf5ArenaE:
  826|  2.57k|    : ::google::protobuf::Message(arena) {
  827|  2.57k|#endif  // PROTOBUF_CUSTOM_VTABLE
  828|  2.57k|  SharedCtor(arena);
  829|       |  // @@protoc_insertion_point(arena_constructor:curl.fuzzer.proto.Scenario)
  830|  2.57k|}
_ZN4curl6fuzzer5proto8ScenarioD2Ev:
  891|  2.57k|Scenario::~Scenario() {
  892|       |  // @@protoc_insertion_point(destructor:curl.fuzzer.proto.Scenario)
  893|  2.57k|  SharedDtor(*this);
  894|  2.57k|}
_ZNK4curl6fuzzer5proto8Scenario12GetClassDataEv:
  961|  23.1k|const ::google::protobuf::internal::ClassData* Scenario::GetClassData() const {
  962|  23.1k|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
  963|  23.1k|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
  964|  23.1k|  return _class_data_.base();
  965|  23.1k|}
_ZN4curl6fuzzer5proto8Scenario5ClearEv:
 1065|  5.14k|PROTOBUF_NOINLINE void Scenario::Clear() {
 1066|       |// @@protoc_insertion_point(message_clear_start:curl.fuzzer.proto.Scenario)
 1067|  5.14k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 1068|  5.14k|  ::uint32_t cached_has_bits = 0;
 1069|       |  // Prevent compiler warnings about cached_has_bits being unused
 1070|  5.14k|  (void) cached_has_bits;
 1071|       |
 1072|  5.14k|  _impl_.options_.Clear();
 1073|  5.14k|  _impl_.request_headers_.Clear();
 1074|  5.14k|  _impl_.subsequent_connections_.Clear();
 1075|  5.14k|  _impl_.telnet_options_.Clear();
 1076|  5.14k|  _impl_.host_path_.ClearToEmpty();
 1077|  5.14k|  cached_has_bits = _impl_._has_bits_[0];
 1078|  5.14k|  if (cached_has_bits & 0x0000000fu) {
  ------------------
  |  Branch (1078:7): [True: 0, False: 5.14k]
  ------------------
 1079|      0|    if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (1079:9): [True: 0, False: 0]
  ------------------
 1080|      0|      ABSL_DCHECK(_impl_.connection_ != nullptr);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   40|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(condition, condition_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1081|      0|      _impl_.connection_->Clear();
 1082|      0|    }
 1083|      0|    if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (1083:9): [True: 0, False: 0]
  ------------------
 1084|      0|      ABSL_DCHECK(_impl_.mime_post_ != nullptr);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   40|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(condition, condition_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1085|      0|      _impl_.mime_post_->Clear();
 1086|      0|    }
 1087|      0|    if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (1087:9): [True: 0, False: 0]
  ------------------
 1088|      0|      ABSL_DCHECK(_impl_.upload_ != nullptr);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   40|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(condition, condition_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1089|      0|      _impl_.upload_->Clear();
 1090|      0|    }
 1091|      0|    if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (1091:9): [True: 0, False: 0]
  ------------------
 1092|      0|      ABSL_DCHECK(_impl_.api_plan_ != nullptr);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   40|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(condition, condition_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1093|      0|      _impl_.api_plan_->Clear();
 1094|      0|    }
 1095|      0|  }
 1096|  5.14k|  _impl_.scheme_ = 0;
 1097|  5.14k|  _impl_._has_bits_.Clear();
 1098|  5.14k|  _internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>();
 1099|  5.14k|}
_ZNK4curl6fuzzer5proto8Scenario11GetMetadataEv:
 1382|      1|::google::protobuf::Metadata Scenario::GetMetadata() const {
 1383|      1|  return ::google::protobuf::Message::GetMetadataImpl(GetClassData()->full());
 1384|      1|}
_ZNK4curl6fuzzer5proto7ApiPlan12GetClassDataEv:
 1507|      1|const ::google::protobuf::internal::ClassData* ApiPlan::GetClassData() const {
 1508|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 1509|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 1510|      1|  return _class_data_.base();
 1511|      1|}
_ZN4curl6fuzzer5proto12UploadScriptD2Ev:
 1848|    249|UploadScript::~UploadScript() {
 1849|       |  // @@protoc_insertion_point(destructor:curl.fuzzer.proto.UploadScript)
 1850|    249|  SharedDtor(*this);
 1851|    249|}
_ZNK4curl6fuzzer5proto12UploadScript12GetClassDataEv:
 1902|  1.49k|const ::google::protobuf::internal::ClassData* UploadScript::GetClassData() const {
 1903|  1.49k|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 1904|  1.49k|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 1905|  1.49k|  return _class_data_.base();
 1906|  1.49k|}
_ZNK4curl6fuzzer5proto8MimePost12GetClassDataEv:
 2218|      1|const ::google::protobuf::internal::ClassData* MimePost::GetClassData() const {
 2219|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 2220|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 2221|      1|  return _class_data_.base();
 2222|      1|}
_ZNK4curl6fuzzer5proto8MimePart12GetClassDataEv:
 2527|      1|const ::google::protobuf::internal::ClassData* MimePart::GetClassData() const {
 2528|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 2529|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 2530|      1|  return _class_data_.base();
 2531|      1|}
_ZNK4curl6fuzzer5proto12MimeSubparts12GetClassDataEv:
 2932|      1|const ::google::protobuf::internal::ClassData* MimeSubparts::GetClassData() const {
 2933|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 2934|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 2935|      1|  return _class_data_.base();
 2936|      1|}
_ZNK4curl6fuzzer5proto12MimeDataPart12GetClassDataEv:
 3188|      1|const ::google::protobuf::internal::ClassData* MimeDataPart::GetClassData() const {
 3189|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 3190|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 3191|      1|  return _class_data_.base();
 3192|      1|}
_ZN4curl6fuzzer5proto9SetOptionD2Ev:
 3509|  1.13k|SetOption::~SetOption() {
 3510|       |  // @@protoc_insertion_point(destructor:curl.fuzzer.proto.SetOption)
 3511|  1.13k|  SharedDtor(*this);
 3512|  1.13k|}
_ZN4curl6fuzzer5proto9SetOption11clear_valueEv:
 3523|  1.13k|void SetOption::clear_value() {
 3524|       |// @@protoc_insertion_point(one_of_clear_start:curl.fuzzer.proto.SetOption)
 3525|  1.13k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 3526|  1.13k|  switch (value_case()) {
  ------------------
  |  Branch (3526:11): [True: 1.13k, False: 0]
  ------------------
 3527|    718|    case kStringValue: {
  ------------------
  |  Branch (3527:5): [True: 718, False: 417]
  ------------------
 3528|    718|      _impl_.value_.string_value_.Destroy();
 3529|    718|      break;
 3530|      0|    }
 3531|    339|    case kUintValue: {
  ------------------
  |  Branch (3531:5): [True: 339, False: 796]
  ------------------
 3532|       |      // No need to clear
 3533|    339|      break;
 3534|      0|    }
 3535|     78|    case kBoolValue: {
  ------------------
  |  Branch (3535:5): [True: 78, False: 1.05k]
  ------------------
 3536|       |      // No need to clear
 3537|     78|      break;
 3538|      0|    }
 3539|      0|    case VALUE_NOT_SET: {
  ------------------
  |  Branch (3539:5): [True: 0, False: 1.13k]
  ------------------
 3540|      0|      break;
 3541|      0|    }
 3542|  1.13k|  }
 3543|  1.13k|  _impl_._oneof_case_[0] = VALUE_NOT_SET;
 3544|  1.13k|}
_ZNK4curl6fuzzer5proto9SetOption12GetClassDataEv:
 3577|  6.81k|const ::google::protobuf::internal::ClassData* SetOption::GetClassData() const {
 3578|  6.81k|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 3579|  6.81k|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 3580|  6.81k|  return _class_data_.base();
 3581|  6.81k|}
_ZN4curl6fuzzer5proto10ConnectionC2EPN6google8protobuf5ArenaE:
 3814|  2.03k|    : ::google::protobuf::Message(arena) {
 3815|  2.03k|#endif  // PROTOBUF_CUSTOM_VTABLE
 3816|  2.03k|  SharedCtor(arena);
 3817|       |  // @@protoc_insertion_point(arena_constructor:curl.fuzzer.proto.Connection)
 3818|  2.03k|}
_ZN4curl6fuzzer5proto10ConnectionD2Ev:
 3868|  4.60k|Connection::~Connection() {
 3869|       |  // @@protoc_insertion_point(destructor:curl.fuzzer.proto.Connection)
 3870|  4.60k|  SharedDtor(*this);
 3871|  4.60k|}
_ZNK4curl6fuzzer5proto10Connection12GetClassDataEv:
 3928|  15.4k|const ::google::protobuf::internal::ClassData* Connection::GetClassData() const {
 3929|  15.4k|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 3930|  15.4k|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 3931|  15.4k|  return _class_data_.base();
 3932|  15.4k|}
_ZNK4curl6fuzzer5proto14WsManualProbes12GetClassDataEv:
 4283|      1|const ::google::protobuf::internal::ClassData* WsManualProbes::GetClassData() const {
 4284|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 4285|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 4286|      1|  return _class_data_.base();
 4287|      1|}
_ZNK4curl6fuzzer5proto18BackpressureConfig12GetClassDataEv:
 4543|      1|const ::google::protobuf::internal::ClassData* BackpressureConfig::GetClassData() const {
 4544|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 4545|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 4546|      1|  return _class_data_.base();
 4547|      1|}
_ZNK4curl6fuzzer5proto14WebSocketFrame12GetClassDataEv:
 4810|      1|const ::google::protobuf::internal::ClassData* WebSocketFrame::GetClassData() const {
 4811|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 4812|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 4813|      1|  return _class_data_.base();
 4814|      1|}
_ZN4curl6fuzzer5proto8Scenario10SharedCtorEPN6google8protobuf5ArenaE:
  882|  2.57k|inline void Scenario::SharedCtor(::_pb::Arena* arena) {
  883|  2.57k|  new (&_impl_) Impl_(internal_visibility(), arena);
  884|  2.57k|  ::memset(reinterpret_cast<char *>(&_impl_) +
  885|  2.57k|               offsetof(Impl_, connection_),
  886|  2.57k|           0,
  887|  2.57k|           offsetof(Impl_, scheme_) -
  888|       |               offsetof(Impl_, connection_) +
  889|  2.57k|               sizeof(Impl_::scheme_));
  890|  2.57k|}
_ZN4curl6fuzzer5proto8Scenario5Impl_C2EN6google8protobuf8internal18InternalVisibilityEPNS5_5ArenaE:
  875|  2.57k|      : _cached_size_{0},
  876|  2.57k|        options_{visibility, arena},
  877|  2.57k|        request_headers_{visibility, arena},
  878|  2.57k|        subsequent_connections_{visibility, arena},
  879|  2.57k|        telnet_options_{visibility, arena},
  880|  2.57k|        host_path_(arena) {}
_ZN4curl6fuzzer5proto8Scenario10SharedDtorERN6google8protobuf11MessageLiteE:
  895|  2.57k|inline void Scenario::SharedDtor(MessageLite& self) {
  896|  2.57k|  Scenario& this_ = static_cast<Scenario&>(self);
  897|  2.57k|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
  898|  2.57k|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|  2.57k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   40|  2.57k|  ABSL_LOG_INTERNAL_CHECK_IMPL(condition, condition_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  5.14k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  2.57k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  5.14k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  5.14k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2.57k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  2.57k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2.57k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  5.14k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2.57k, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 2.57k]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 2.57k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  5.14k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  5.14k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  899|  2.57k|  this_._impl_.host_path_.Destroy();
  900|  2.57k|  delete this_._impl_.connection_;
  901|  2.57k|  delete this_._impl_.mime_post_;
  902|  2.57k|  delete this_._impl_.upload_;
  903|  2.57k|  delete this_._impl_.api_plan_;
  904|  2.57k|  this_._impl_.~Impl_();
  905|  2.57k|}
_ZN4curl6fuzzer5proto12UploadScript10SharedDtorERN6google8protobuf11MessageLiteE:
 1852|    249|inline void UploadScript::SharedDtor(MessageLite& self) {
 1853|    249|  UploadScript& this_ = static_cast<UploadScript&>(self);
 1854|    249|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 1855|    249|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|    249|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   40|    249|  ABSL_LOG_INTERNAL_CHECK_IMPL(condition, condition_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    498|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    249|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    498|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    498|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 249, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    249|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 249]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    498|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 249, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 249]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 249]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|    498|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    498|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1856|    249|  this_._impl_.data_.Destroy();
 1857|    249|  this_._impl_.~Impl_();
 1858|    249|}
_ZN4curl6fuzzer5proto9SetOption10SharedDtorERN6google8protobuf11MessageLiteE:
 3513|  1.13k|inline void SetOption::SharedDtor(MessageLite& self) {
 3514|  1.13k|  SetOption& this_ = static_cast<SetOption&>(self);
 3515|  1.13k|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 3516|  1.13k|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|  1.13k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   40|  1.13k|  ABSL_LOG_INTERNAL_CHECK_IMPL(condition, condition_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  2.27k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  1.13k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  2.27k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  2.27k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1.13k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  1.13k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1.13k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  2.27k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1.13k, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 1.13k]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 1.13k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  2.27k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  2.27k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3517|  1.13k|  if (this_.has_value()) {
  ------------------
  |  Branch (3517:7): [True: 1.13k, False: 0]
  ------------------
 3518|  1.13k|    this_.clear_value();
 3519|  1.13k|  }
 3520|  1.13k|  this_._impl_.~Impl_();
 3521|  1.13k|}
_ZN4curl6fuzzer5proto10Connection10SharedCtorEPN6google8protobuf5ArenaE:
 3859|  2.03k|inline void Connection::SharedCtor(::_pb::Arena* arena) {
 3860|  2.03k|  new (&_impl_) Impl_(internal_visibility(), arena);
 3861|  2.03k|  ::memset(reinterpret_cast<char *>(&_impl_) +
 3862|  2.03k|               offsetof(Impl_, backpressure_),
 3863|  2.03k|           0,
 3864|  2.03k|           offsetof(Impl_, manual_probes_) -
 3865|       |               offsetof(Impl_, backpressure_) +
 3866|  2.03k|               sizeof(Impl_::manual_probes_));
 3867|  2.03k|}
_ZN4curl6fuzzer5proto10Connection5Impl_C2EN6google8protobuf8internal18InternalVisibilityEPNS5_5ArenaE:
 3854|  2.03k|      : _cached_size_{0},
 3855|  2.03k|        on_readable_{visibility, arena},
 3856|  2.03k|        server_frames_{visibility, arena},
 3857|  2.03k|        initial_response_(arena) {}
_ZN4curl6fuzzer5proto10Connection10SharedDtorERN6google8protobuf11MessageLiteE:
 3872|  4.60k|inline void Connection::SharedDtor(MessageLite& self) {
 3873|  4.60k|  Connection& this_ = static_cast<Connection&>(self);
 3874|  4.60k|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 3875|  4.60k|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|  4.60k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   40|  4.60k|  ABSL_LOG_INTERNAL_CHECK_IMPL(condition, condition_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  9.21k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  4.60k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  9.21k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  9.21k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4.60k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  4.60k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4.60k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  9.21k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4.60k, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4.60k]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4.60k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  9.21k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  9.21k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3876|  4.60k|  this_._impl_.initial_response_.Destroy();
 3877|  4.60k|  delete this_._impl_.backpressure_;
 3878|  4.60k|  delete this_._impl_.manual_probes_;
 3879|  4.60k|  this_._impl_.~Impl_();
 3880|  4.60k|}

_ZN4curl6fuzzer5proto10ConnectionC2Ev:
 2363|  2.03k|  inline Connection() : Connection(nullptr) {}
_ZN4curl6fuzzer5proto8ScenarioC2Ev:
 3158|  2.57k|  inline Scenario() : Scenario(nullptr) {}
_ZN4curl6fuzzer5proto8Scenario10descriptorEv:
 3198|      1|  static const ::google::protobuf::Descriptor* descriptor() {
 3199|      1|    return GetDescriptor();
 3200|      1|  }
_ZN4curl6fuzzer5proto8Scenario13GetDescriptorEv:
 3201|      1|  static const ::google::protobuf::Descriptor* GetDescriptor() {
 3202|      1|    return default_instance().GetMetadata().descriptor;
 3203|      1|  }
_ZN4curl6fuzzer5proto8Scenario16default_instanceEv:
 3207|  2.57k|  static const Scenario& default_instance() {
 3208|  2.57k|    return *internal_default_instance();
 3209|  2.57k|  }
_ZN4curl6fuzzer5proto8Scenario25internal_default_instanceEv:
 3210|  2.57k|  static inline const Scenario* internal_default_instance() {
 3211|  2.57k|    return reinterpret_cast<const Scenario*>(
 3212|  2.57k|        &_Scenario_default_instance_);
 3213|  2.57k|  }
_ZNK4curl6fuzzer5proto8Scenario6schemeEv:
 3538|  18.7k|inline ::curl::fuzzer::proto::Scheme Scenario::scheme() const {
 3539|       |  // @@protoc_insertion_point(field_get:curl.fuzzer.proto.Scenario.scheme)
 3540|  18.7k|  return _internal_scheme();
 3541|  18.7k|}
_ZN4curl6fuzzer5proto8Scenario10set_schemeENS1_6SchemeE:
 3542|  2.57k|inline void Scenario::set_scheme(::curl::fuzzer::proto::Scheme value) {
 3543|  2.57k|  _internal_set_scheme(value);
 3544|       |  // @@protoc_insertion_point(field_set:curl.fuzzer.proto.Scenario.scheme)
 3545|  2.57k|}
_ZNK4curl6fuzzer5proto8Scenario16_internal_schemeEv:
 3546|  18.7k|inline ::curl::fuzzer::proto::Scheme Scenario::_internal_scheme() const {
 3547|  18.7k|  ::google::protobuf::internal::TSanRead(&_impl_);
 3548|  18.7k|  return static_cast<::curl::fuzzer::proto::Scheme>(_impl_.scheme_);
 3549|  18.7k|}
_ZN4curl6fuzzer5proto8Scenario20_internal_set_schemeENS1_6SchemeE:
 3550|  2.57k|inline void Scenario::_internal_set_scheme(::curl::fuzzer::proto::Scheme value) {
 3551|  2.57k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 3552|  2.57k|  _impl_.scheme_ = value;
 3553|  2.57k|}
_ZNK4curl6fuzzer5proto8Scenario9host_pathEv:
 3561|  5.10k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3562|       |  // @@protoc_insertion_point(field_get:curl.fuzzer.proto.Scenario.host_path)
 3563|  5.10k|  return _internal_host_path();
 3564|  5.10k|}
_ZNK4curl6fuzzer5proto8Scenario19_internal_host_pathEv:
 3577|  5.10k|inline const std::string& Scenario::_internal_host_path() const {
 3578|  5.10k|  ::google::protobuf::internal::TSanRead(&_impl_);
 3579|  5.10k|  return _impl_.host_path_.Get();
 3580|  5.10k|}
_ZNK4curl6fuzzer5proto8Scenario22_internal_options_sizeEv:
 3604|  2.53k|inline int Scenario::_internal_options_size() const {
 3605|  2.53k|  return _internal_options().size();
 3606|  2.53k|}
_ZNK4curl6fuzzer5proto8Scenario12options_sizeEv:
 3607|  2.53k|inline int Scenario::options_size() const {
 3608|  2.53k|  return _internal_options_size();
 3609|  2.53k|}
_ZN4curl6fuzzer5proto8Scenario15mutable_optionsEv:
 3620|  10.2k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3621|       |  // @@protoc_insertion_point(field_mutable_list:curl.fuzzer.proto.Scenario.options)
 3622|  10.2k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 3623|  10.2k|  return _internal_mutable_options();
 3624|  10.2k|}
_ZNK4curl6fuzzer5proto8Scenario7optionsEi:
 3626|  1.10k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3627|       |  // @@protoc_insertion_point(field_get:curl.fuzzer.proto.Scenario.options)
 3628|  1.10k|  return _internal_options().Get(index);
 3629|  1.10k|}
_ZNK4curl6fuzzer5proto8Scenario17_internal_optionsEv:
 3642|  3.64k|Scenario::_internal_options() const {
 3643|  3.64k|  ::google::protobuf::internal::TSanRead(&_impl_);
 3644|  3.64k|  return _impl_.options_;
 3645|  3.64k|}
_ZN4curl6fuzzer5proto8Scenario25_internal_mutable_optionsEv:
 3647|  10.2k|Scenario::_internal_mutable_options() {
 3648|  10.2k|  ::google::protobuf::internal::TSanRead(&_impl_);
 3649|  10.2k|  return &_impl_.options_;
 3650|  10.2k|}
_ZNK4curl6fuzzer5proto8Scenario20_internal_connectionEv:
 3663|  4.57k|inline const ::curl::fuzzer::proto::Connection& Scenario::_internal_connection() const {
 3664|  4.57k|  ::google::protobuf::internal::TSanRead(&_impl_);
 3665|  4.57k|  const ::curl::fuzzer::proto::Connection* p = _impl_.connection_;
 3666|  4.57k|  return p != nullptr ? *p : reinterpret_cast<const ::curl::fuzzer::proto::Connection&>(::curl::fuzzer::proto::_Connection_default_instance_);
  ------------------
  |  Branch (3666:10): [True: 4.57k, False: 0]
  ------------------
 3667|  4.57k|}
_ZNK4curl6fuzzer5proto8Scenario10connectionEv:
 3668|  4.57k|inline const ::curl::fuzzer::proto::Connection& Scenario::connection() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3669|       |  // @@protoc_insertion_point(field_get:curl.fuzzer.proto.Scenario.connection)
 3670|  4.57k|  return _internal_connection();
 3671|  4.57k|}
_ZN4curl6fuzzer5proto8Scenario28_internal_mutable_connectionEv:
 3713|  7.71k|inline ::curl::fuzzer::proto::Connection* Scenario::_internal_mutable_connection() {
 3714|  7.71k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 3715|  7.71k|  if (_impl_.connection_ == nullptr) {
  ------------------
  |  Branch (3715:7): [True: 0, False: 7.71k]
  ------------------
 3716|      0|    auto* p = ::google::protobuf::Message::DefaultConstruct<::curl::fuzzer::proto::Connection>(GetArena());
 3717|      0|    _impl_.connection_ = reinterpret_cast<::curl::fuzzer::proto::Connection*>(p);
 3718|      0|  }
 3719|  7.71k|  return _impl_.connection_;
 3720|  7.71k|}
_ZN4curl6fuzzer5proto8Scenario18mutable_connectionEv:
 3721|  7.71k|inline ::curl::fuzzer::proto::Connection* Scenario::mutable_connection() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3722|  7.71k|  _impl_._has_bits_[0] |= 0x00000001u;
 3723|  7.71k|  ::curl::fuzzer::proto::Connection* _msg = _internal_mutable_connection();
 3724|       |  // @@protoc_insertion_point(field_mutable:curl.fuzzer.proto.Scenario.connection)
 3725|  7.71k|  return _msg;
 3726|  7.71k|}
_ZN4curl6fuzzer5proto8Scenario21clear_request_headersEv:
 3755|  2.57k|inline void Scenario::clear_request_headers() {
 3756|  2.57k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 3757|  2.57k|  _impl_.request_headers_.Clear();
 3758|  2.57k|}
_ZN4curl6fuzzer5proto8Scenario23mutable_request_headersEv:
 3796|  2.57k|Scenario::mutable_request_headers() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3797|       |  // @@protoc_insertion_point(field_mutable_list:curl.fuzzer.proto.Scenario.request_headers)
 3798|  2.57k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 3799|  2.57k|  return _internal_mutable_request_headers();
 3800|  2.57k|}
_ZN4curl6fuzzer5proto8Scenario33_internal_mutable_request_headersEv:
 3807|  2.57k|Scenario::_internal_mutable_request_headers() {
 3808|  2.57k|  ::google::protobuf::internal::TSanRead(&_impl_);
 3809|  2.57k|  return &_impl_.request_headers_;
 3810|  2.57k|}
_ZNK4curl6fuzzer5proto8Scenario13has_mime_postEv:
 3813|  2.57k|inline bool Scenario::has_mime_post() const {
 3814|  2.57k|  bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0;
 3815|  2.57k|  PROTOBUF_ASSUME(!value || _impl_.mime_post_ != nullptr);
  ------------------
  |  |  944|  2.57k|  if (!(pred)) {                                                               \
  |  |  ------------------
  |  |  |  Branch (944:9): [True: 2.57k, False: 0]
  |  |  |  Branch (944:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  945|      0|    ::google::protobuf::internal::protobuf_assumption_failed(#pred, __FILE__, __LINE__); \
  |  |  946|      0|  }                                                                            \
  |  |  947|  2.57k|  __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (947:20): [True: 2.57k, False: 0]
  |  |  |  Branch (947:20): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3816|  2.57k|  return value;
 3817|  2.57k|}
_ZN4curl6fuzzer5proto8Scenario15clear_mime_postEv:
 3818|  2.57k|inline void Scenario::clear_mime_post() {
 3819|  2.57k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 3820|  2.57k|  if (_impl_.mime_post_ != nullptr) _impl_.mime_post_->Clear();
  ------------------
  |  Branch (3820:7): [True: 0, False: 2.57k]
  ------------------
 3821|  2.57k|  _impl_._has_bits_[0] &= ~0x00000002u;
 3822|  2.57k|}
_ZN4curl6fuzzer5proto8Scenario28clear_subsequent_connectionsEv:
 3915|  2.57k|inline void Scenario::clear_subsequent_connections() {
 3916|  2.57k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 3917|  2.57k|  _impl_.subsequent_connections_.Clear();
 3918|  2.57k|}
_ZN4curl6fuzzer5proto8Scenario30mutable_subsequent_connectionsEv:
 3925|  5.14k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3926|       |  // @@protoc_insertion_point(field_mutable_list:curl.fuzzer.proto.Scenario.subsequent_connections)
 3927|  5.14k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 3928|  5.14k|  return _internal_mutable_subsequent_connections();
 3929|  5.14k|}
_ZN4curl6fuzzer5proto8Scenario40_internal_mutable_subsequent_connectionsEv:
 3952|  5.14k|Scenario::_internal_mutable_subsequent_connections() {
 3953|  5.14k|  ::google::protobuf::internal::TSanRead(&_impl_);
 3954|  5.14k|  return &_impl_.subsequent_connections_;
 3955|  5.14k|}
_ZNK4curl6fuzzer5proto8Scenario10has_uploadEv:
 3958|  5.10k|inline bool Scenario::has_upload() const {
 3959|  5.10k|  bool value = (_impl_._has_bits_[0] & 0x00000004u) != 0;
 3960|  5.10k|  PROTOBUF_ASSUME(!value || _impl_.upload_ != nullptr);
  ------------------
  |  |  944|  5.59k|  if (!(pred)) {                                                               \
  |  |  ------------------
  |  |  |  Branch (944:9): [True: 4.61k, False: 490]
  |  |  |  Branch (944:9): [True: 490, False: 0]
  |  |  ------------------
  |  |  945|      0|    ::google::protobuf::internal::protobuf_assumption_failed(#pred, __FILE__, __LINE__); \
  |  |  946|      0|  }                                                                            \
  |  |  947|  5.59k|  __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (947:20): [True: 4.61k, False: 490]
  |  |  |  Branch (947:20): [True: 490, False: 0]
  |  |  ------------------
  ------------------
 3961|  5.10k|  return value;
 3962|  5.10k|}
_ZNK4curl6fuzzer5proto8Scenario16_internal_uploadEv:
 3968|    241|inline const ::curl::fuzzer::proto::UploadScript& Scenario::_internal_upload() const {
 3969|    241|  ::google::protobuf::internal::TSanRead(&_impl_);
 3970|    241|  const ::curl::fuzzer::proto::UploadScript* p = _impl_.upload_;
 3971|    241|  return p != nullptr ? *p : reinterpret_cast<const ::curl::fuzzer::proto::UploadScript&>(::curl::fuzzer::proto::_UploadScript_default_instance_);
  ------------------
  |  Branch (3971:10): [True: 241, False: 0]
  ------------------
 3972|    241|}
_ZNK4curl6fuzzer5proto8Scenario6uploadEv:
 3973|    241|inline const ::curl::fuzzer::proto::UploadScript& Scenario::upload() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3974|       |  // @@protoc_insertion_point(field_get:curl.fuzzer.proto.Scenario.upload)
 3975|    241|  return _internal_upload();
 3976|    241|}
_ZN4curl6fuzzer5proto8Scenario24_internal_mutable_uploadEv:
 4018|    249|inline ::curl::fuzzer::proto::UploadScript* Scenario::_internal_mutable_upload() {
 4019|    249|  ::google::protobuf::internal::TSanWrite(&_impl_);
 4020|    249|  if (_impl_.upload_ == nullptr) {
  ------------------
  |  Branch (4020:7): [True: 0, False: 249]
  ------------------
 4021|      0|    auto* p = ::google::protobuf::Message::DefaultConstruct<::curl::fuzzer::proto::UploadScript>(GetArena());
 4022|      0|    _impl_.upload_ = reinterpret_cast<::curl::fuzzer::proto::UploadScript*>(p);
 4023|      0|  }
 4024|    249|  return _impl_.upload_;
 4025|    249|}
_ZN4curl6fuzzer5proto8Scenario14mutable_uploadEv:
 4026|    249|inline ::curl::fuzzer::proto::UploadScript* Scenario::mutable_upload() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 4027|    249|  _impl_._has_bits_[0] |= 0x00000004u;
 4028|    249|  ::curl::fuzzer::proto::UploadScript* _msg = _internal_mutable_upload();
 4029|       |  // @@protoc_insertion_point(field_mutable:curl.fuzzer.proto.Scenario.upload)
 4030|    249|  return _msg;
 4031|    249|}
_ZNK4curl6fuzzer5proto8Scenario14telnet_optionsEv:
 4096|  2.53k|Scenario::telnet_options() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 4097|       |  // @@protoc_insertion_point(field_list:curl.fuzzer.proto.Scenario.telnet_options)
 4098|  2.53k|  return _internal_telnet_options();
 4099|  2.53k|}
_ZN4curl6fuzzer5proto8Scenario22mutable_telnet_optionsEv:
 4101|  2.57k|Scenario::mutable_telnet_options() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 4102|       |  // @@protoc_insertion_point(field_mutable_list:curl.fuzzer.proto.Scenario.telnet_options)
 4103|  2.57k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 4104|  2.57k|  return _internal_mutable_telnet_options();
 4105|  2.57k|}
_ZNK4curl6fuzzer5proto8Scenario24_internal_telnet_optionsEv:
 4107|  2.53k|Scenario::_internal_telnet_options() const {
 4108|  2.53k|  ::google::protobuf::internal::TSanRead(&_impl_);
 4109|  2.53k|  return _impl_.telnet_options_;
 4110|  2.53k|}
_ZN4curl6fuzzer5proto8Scenario32_internal_mutable_telnet_optionsEv:
 4112|  2.57k|Scenario::_internal_mutable_telnet_options() {
 4113|  2.57k|  ::google::protobuf::internal::TSanRead(&_impl_);
 4114|  2.57k|  return &_impl_.telnet_options_;
 4115|  2.57k|}
_ZN4curl6fuzzer5proto8Scenario14clear_api_planEv:
 4123|  2.57k|inline void Scenario::clear_api_plan() {
 4124|  2.57k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 4125|  2.57k|  if (_impl_.api_plan_ != nullptr) _impl_.api_plan_->Clear();
  ------------------
  |  Branch (4125:7): [True: 0, False: 2.57k]
  ------------------
 4126|  2.57k|  _impl_._has_bits_[0] &= ~0x00000008u;
 4127|  2.57k|}
_ZNK4curl6fuzzer5proto12UploadScript4dataEv:
 4427|    731|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 4428|       |  // @@protoc_insertion_point(field_get:curl.fuzzer.proto.UploadScript.data)
 4429|    731|  return _internal_data();
 4430|    731|}
_ZNK4curl6fuzzer5proto12UploadScript14_internal_dataEv:
 4443|    731|inline const std::string& UploadScript::_internal_data() const {
 4444|    731|  ::google::protobuf::internal::TSanRead(&_impl_);
 4445|    731|  return _impl_.data_.Get();
 4446|    731|}
_ZNK4curl6fuzzer5proto12UploadScript25_internal_read_sizes_sizeEv:
 4470|    866|inline int UploadScript::_internal_read_sizes_size() const {
 4471|    866|  return _internal_read_sizes().size();
 4472|    866|}
_ZNK4curl6fuzzer5proto12UploadScript15read_sizes_sizeEv:
 4473|    866|inline int UploadScript::read_sizes_size() const {
 4474|    866|  return _internal_read_sizes_size();
 4475|    866|}
_ZNK4curl6fuzzer5proto12UploadScript10read_sizesEi:
 4480|    246|inline ::uint32_t UploadScript::read_sizes(int index) const {
 4481|       |  // @@protoc_insertion_point(field_get:curl.fuzzer.proto.UploadScript.read_sizes)
 4482|    246|  return _internal_read_sizes().Get(index);
 4483|    246|}
_ZNK4curl6fuzzer5proto12UploadScript20_internal_read_sizesEv:
 4505|  1.11k|UploadScript::_internal_read_sizes() const {
 4506|  1.11k|  ::google::protobuf::internal::TSanRead(&_impl_);
 4507|  1.11k|  return _impl_.read_sizes_;
 4508|  1.11k|}
_ZNK4curl6fuzzer5proto12UploadScript8terminalEv:
 4519|    241|inline ::curl::fuzzer::proto::UploadTerminal UploadScript::terminal() const {
 4520|       |  // @@protoc_insertion_point(field_get:curl.fuzzer.proto.UploadScript.terminal)
 4521|    241|  return _internal_terminal();
 4522|    241|}
_ZNK4curl6fuzzer5proto12UploadScript18_internal_terminalEv:
 4527|    241|inline ::curl::fuzzer::proto::UploadTerminal UploadScript::_internal_terminal() const {
 4528|    241|  ::google::protobuf::internal::TSanRead(&_impl_);
 4529|    241|  return static_cast<::curl::fuzzer::proto::UploadTerminal>(_impl_.terminal_);
 4530|    241|}
_ZNK4curl6fuzzer5proto12UploadScript11seek_resultEv:
 4541|    241|inline ::curl::fuzzer::proto::UploadSeekResult UploadScript::seek_result() const {
 4542|       |  // @@protoc_insertion_point(field_get:curl.fuzzer.proto.UploadScript.seek_result)
 4543|    241|  return _internal_seek_result();
 4544|    241|}
_ZNK4curl6fuzzer5proto12UploadScript21_internal_seek_resultEv:
 4549|    241|inline ::curl::fuzzer::proto::UploadSeekResult UploadScript::_internal_seek_result() const {
 4550|    241|  ::google::protobuf::internal::TSanRead(&_impl_);
 4551|    241|  return static_cast<::curl::fuzzer::proto::UploadSeekResult>(_impl_.seek_result_);
 4552|    241|}
_ZNK4curl6fuzzer5proto9SetOption9option_idEv:
 5362|  3.37k|inline ::curl::fuzzer::proto::CurlOptionId SetOption::option_id() const {
 5363|       |  // @@protoc_insertion_point(field_get:curl.fuzzer.proto.SetOption.option_id)
 5364|  3.37k|  return _internal_option_id();
 5365|  3.37k|}
_ZNK4curl6fuzzer5proto9SetOption19_internal_option_idEv:
 5370|  3.37k|inline ::curl::fuzzer::proto::CurlOptionId SetOption::_internal_option_id() const {
 5371|  3.37k|  ::google::protobuf::internal::TSanRead(&_impl_);
 5372|  3.37k|  return static_cast<::curl::fuzzer::proto::CurlOptionId>(_impl_.option_id_);
 5373|  3.37k|}
_ZNK4curl6fuzzer5proto9SetOption12string_valueEv:
 5394|    698|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 5395|       |  // @@protoc_insertion_point(field_get:curl.fuzzer.proto.SetOption.string_value)
 5396|    698|  return _internal_string_value();
 5397|    698|}
_ZN4curl6fuzzer5proto9SetOption20mutable_string_valueEv:
 5411|    718|inline std::string* SetOption::mutable_string_value() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 5412|    718|  std::string* _s = _internal_mutable_string_value();
 5413|       |  // @@protoc_insertion_point(field_mutable:curl.fuzzer.proto.SetOption.string_value)
 5414|    718|  return _s;
 5415|    718|}
_ZNK4curl6fuzzer5proto9SetOption22_internal_string_valueEv:
 5416|    698|inline const std::string& SetOption::_internal_string_value() const {
 5417|    698|  ::google::protobuf::internal::TSanRead(&_impl_);
 5418|    698|  if (value_case() != kStringValue) {
  ------------------
  |  Branch (5418:7): [True: 0, False: 698]
  ------------------
 5419|      0|    return ::google::protobuf::internal::GetEmptyStringAlreadyInited();
 5420|      0|  }
 5421|    698|  return _impl_.value_.string_value_.Get();
 5422|    698|}
_ZN4curl6fuzzer5proto9SetOption30_internal_mutable_string_valueEv:
 5433|    718|inline std::string* SetOption::_internal_mutable_string_value() {
 5434|    718|  ::google::protobuf::internal::TSanWrite(&_impl_);
 5435|    718|  if (value_case() != kStringValue) {
  ------------------
  |  Branch (5435:7): [True: 0, False: 718]
  ------------------
 5436|      0|    clear_value();
 5437|       |
 5438|      0|    set_has_string_value();
 5439|      0|    _impl_.value_.string_value_.InitDefault();
 5440|      0|  }
 5441|    718|  return _impl_.value_.string_value_.Mutable( GetArena());
 5442|    718|}
_ZNK4curl6fuzzer5proto9SetOption10uint_valueEv:
 5478|    333|inline ::uint64_t SetOption::uint_value() const {
 5479|       |  // @@protoc_insertion_point(field_get:curl.fuzzer.proto.SetOption.uint_value)
 5480|    333|  return _internal_uint_value();
 5481|    333|}
_ZNK4curl6fuzzer5proto9SetOption20_internal_uint_valueEv:
 5490|    333|inline ::uint64_t SetOption::_internal_uint_value() const {
 5491|    333|  if (value_case() == kUintValue) {
  ------------------
  |  Branch (5491:7): [True: 333, False: 0]
  ------------------
 5492|    333|    return _impl_.value_.uint_value_;
 5493|    333|  }
 5494|      0|  return ::uint64_t{0u};
 5495|    333|}
_ZNK4curl6fuzzer5proto9SetOption10bool_valueEv:
 5511|     72|inline bool SetOption::bool_value() const {
 5512|       |  // @@protoc_insertion_point(field_get:curl.fuzzer.proto.SetOption.bool_value)
 5513|     72|  return _internal_bool_value();
 5514|     72|}
_ZNK4curl6fuzzer5proto9SetOption20_internal_bool_valueEv:
 5523|     72|inline bool SetOption::_internal_bool_value() const {
 5524|     72|  if (value_case() == kBoolValue) {
  ------------------
  |  Branch (5524:7): [True: 72, False: 0]
  ------------------
 5525|     72|    return _impl_.value_.bool_value_;
 5526|     72|  }
 5527|      0|  return false;
 5528|     72|}
_ZNK4curl6fuzzer5proto9SetOption9has_valueEv:
 5530|  1.13k|inline bool SetOption::has_value() const {
 5531|  1.13k|  return value_case() != VALUE_NOT_SET;
 5532|  1.13k|}
_ZNK4curl6fuzzer5proto9SetOption10value_caseEv:
 5536|  6.76k|inline SetOption::ValueCase SetOption::value_case() const {
 5537|  6.76k|  return SetOption::ValueCase(_impl_._oneof_case_[0]);
 5538|  6.76k|}
_ZNK4curl6fuzzer5proto10Connection16initial_responseEv:
 5549|  4.07k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 5550|       |  // @@protoc_insertion_point(field_get:curl.fuzzer.proto.Connection.initial_response)
 5551|  4.07k|  return _internal_initial_response();
 5552|  4.07k|}
_ZN4curl6fuzzer5proto10Connection24mutable_initial_responseEv:
 5560|  6.64k|inline std::string* Connection::mutable_initial_response() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 5561|  6.64k|  std::string* _s = _internal_mutable_initial_response();
 5562|       |  // @@protoc_insertion_point(field_mutable:curl.fuzzer.proto.Connection.initial_response)
 5563|  6.64k|  return _s;
 5564|  6.64k|}
_ZNK4curl6fuzzer5proto10Connection26_internal_initial_responseEv:
 5565|  4.07k|inline const std::string& Connection::_internal_initial_response() const {
 5566|  4.07k|  ::google::protobuf::internal::TSanRead(&_impl_);
 5567|  4.07k|  return _impl_.initial_response_.Get();
 5568|  4.07k|}
_ZN4curl6fuzzer5proto10Connection34_internal_mutable_initial_responseEv:
 5573|  6.64k|inline std::string* Connection::_internal_mutable_initial_response() {
 5574|  6.64k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 5575|  6.64k|  return _impl_.initial_response_.Mutable( GetArena());
 5576|  6.64k|}
_ZNK4curl6fuzzer5proto10Connection26_internal_on_readable_sizeEv:
 5592|  14.0k|inline int Connection::_internal_on_readable_size() const {
 5593|  14.0k|  return _internal_on_readable().size();
 5594|  14.0k|}
_ZNK4curl6fuzzer5proto10Connection16on_readable_sizeEv:
 5595|  14.0k|inline int Connection::on_readable_size() const {
 5596|  14.0k|  return _internal_on_readable_size();
 5597|  14.0k|}
_ZN4curl6fuzzer5proto10Connection15add_on_readableEv:
 5602|  1.37k|inline std::string* Connection::add_on_readable() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 5603|  1.37k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 5604|  1.37k|  std::string* _s = _internal_mutable_on_readable()->Add();
 5605|       |  // @@protoc_insertion_point(field_add_mutable:curl.fuzzer.proto.Connection.on_readable)
 5606|  1.37k|  return _s;
 5607|  1.37k|}
_ZNK4curl6fuzzer5proto10Connection11on_readableEi:
 5609|  2.74k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 5610|       |  // @@protoc_insertion_point(field_get:curl.fuzzer.proto.Connection.on_readable)
 5611|  2.74k|  return _internal_on_readable().Get(index);
 5612|  2.74k|}
_ZN4curl6fuzzer5proto10Connection19mutable_on_readableEi:
 5614|  2.80k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 5615|       |  // @@protoc_insertion_point(field_mutable:curl.fuzzer.proto.Connection.on_readable)
 5616|  2.80k|  return _internal_mutable_on_readable()->Mutable(index);
 5617|  2.80k|}
_ZN4curl6fuzzer5proto10Connection19mutable_on_readableEv:
 5639|  11.7k|Connection::mutable_on_readable() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 5640|       |  // @@protoc_insertion_point(field_mutable_list:curl.fuzzer.proto.Connection.on_readable)
 5641|  11.7k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 5642|  11.7k|  return _internal_mutable_on_readable();
 5643|  11.7k|}
_ZNK4curl6fuzzer5proto10Connection21_internal_on_readableEv:
 5645|  16.7k|Connection::_internal_on_readable() const {
 5646|  16.7k|  ::google::protobuf::internal::TSanRead(&_impl_);
 5647|  16.7k|  return _impl_.on_readable_;
 5648|  16.7k|}
_ZN4curl6fuzzer5proto10Connection29_internal_mutable_on_readableEv:
 5650|  15.9k|Connection::_internal_mutable_on_readable() {
 5651|  15.9k|  ::google::protobuf::internal::TSanRead(&_impl_);
 5652|  15.9k|  return &_impl_.on_readable_;
 5653|  15.9k|}
_ZN4curl6fuzzer5proto10Connection19clear_server_framesEv:
 5662|  2.57k|inline void Connection::clear_server_frames() {
 5663|  2.57k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 5664|  2.57k|  _impl_.server_frames_.Clear();
 5665|  2.57k|}
_ZN4curl6fuzzer5proto10Connection21mutable_server_framesEv:
 5672|  2.57k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 5673|       |  // @@protoc_insertion_point(field_mutable_list:curl.fuzzer.proto.Connection.server_frames)
 5674|  2.57k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 5675|  2.57k|  return _internal_mutable_server_frames();
 5676|  2.57k|}
_ZN4curl6fuzzer5proto10Connection31_internal_mutable_server_framesEv:
 5699|  2.57k|Connection::_internal_mutable_server_frames() {
 5700|  2.57k|  ::google::protobuf::internal::TSanRead(&_impl_);
 5701|  2.57k|  return &_impl_.server_frames_;
 5702|  2.57k|}
_ZN4curl6fuzzer5proto10Connection18clear_backpressureEv:
 5710|  2.57k|inline void Connection::clear_backpressure() {
 5711|  2.57k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 5712|  2.57k|  if (_impl_.backpressure_ != nullptr) _impl_.backpressure_->Clear();
  ------------------
  |  Branch (5712:7): [True: 0, False: 2.57k]
  ------------------
 5713|  2.57k|  _impl_._has_bits_[0] &= ~0x00000001u;
 5714|  2.57k|}
_ZNK4curl6fuzzer5proto10Connection22_internal_backpressureEv:
 5715|  2.53k|inline const ::curl::fuzzer::proto::BackpressureConfig& Connection::_internal_backpressure() const {
 5716|  2.53k|  ::google::protobuf::internal::TSanRead(&_impl_);
 5717|  2.53k|  const ::curl::fuzzer::proto::BackpressureConfig* p = _impl_.backpressure_;
 5718|  2.53k|  return p != nullptr ? *p : reinterpret_cast<const ::curl::fuzzer::proto::BackpressureConfig&>(::curl::fuzzer::proto::_BackpressureConfig_default_instance_);
  ------------------
  |  Branch (5718:10): [True: 0, False: 2.53k]
  ------------------
 5719|  2.53k|}
_ZNK4curl6fuzzer5proto10Connection12backpressureEv:
 5720|  2.53k|inline const ::curl::fuzzer::proto::BackpressureConfig& Connection::backpressure() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 5721|       |  // @@protoc_insertion_point(field_get:curl.fuzzer.proto.Connection.backpressure)
 5722|  2.53k|  return _internal_backpressure();
 5723|  2.53k|}
_ZN4curl6fuzzer5proto10Connection19clear_manual_probesEv:
 5806|  2.57k|inline void Connection::clear_manual_probes() {
 5807|  2.57k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 5808|  2.57k|  if (_impl_.manual_probes_ != nullptr) _impl_.manual_probes_->Clear();
  ------------------
  |  Branch (5808:7): [True: 0, False: 2.57k]
  ------------------
 5809|  2.57k|  _impl_._has_bits_[0] &= ~0x00000002u;
 5810|  2.57k|}
_ZNK4curl6fuzzer5proto18BackpressureConfig14recv_buf_bytesEv:
 5975|  2.53k|inline ::uint32_t BackpressureConfig::recv_buf_bytes() const {
 5976|       |  // @@protoc_insertion_point(field_get:curl.fuzzer.proto.BackpressureConfig.recv_buf_bytes)
 5977|  2.53k|  return _internal_recv_buf_bytes();
 5978|  2.53k|}
_ZNK4curl6fuzzer5proto18BackpressureConfig24_internal_recv_buf_bytesEv:
 5983|  2.53k|inline ::uint32_t BackpressureConfig::_internal_recv_buf_bytes() const {
 5984|  2.53k|  ::google::protobuf::internal::TSanRead(&_impl_);
 5985|  2.53k|  return _impl_.recv_buf_bytes_;
 5986|  2.53k|}
_ZNK4curl6fuzzer5proto18BackpressureConfig11drain_limitEv:
 5997|  2.53k|inline ::uint32_t BackpressureConfig::drain_limit() const {
 5998|       |  // @@protoc_insertion_point(field_get:curl.fuzzer.proto.BackpressureConfig.drain_limit)
 5999|  2.53k|  return _internal_drain_limit();
 6000|  2.53k|}
_ZNK4curl6fuzzer5proto18BackpressureConfig21_internal_drain_limitEv:
 6005|  2.53k|inline ::uint32_t BackpressureConfig::_internal_drain_limit() const {
 6006|  2.53k|  ::google::protobuf::internal::TSanRead(&_impl_);
 6007|  2.53k|  return _impl_.drain_limit_;
 6008|  2.53k|}

option_apply.cc:_ZN12proto_fuzzerL22LookupOptionDescriptorEN4curl6fuzzer5proto12CurlOptionIdE:
   87|  2.23k|    curl::fuzzer::proto::CurlOptionId id) {
   88|  2.23k|  switch (id) {
   89|      0|    case curl::fuzzer::proto::CURLOPT_CUSTOMREQUEST:
  ------------------
  |  Branch (89:5): [True: 0, False: 2.23k]
  ------------------
   90|      0|      return &kOptionManifest[0];
   91|      0|    case curl::fuzzer::proto::CURLOPT_HTTPGET:
  ------------------
  |  Branch (91:5): [True: 0, False: 2.23k]
  ------------------
   92|      0|      return &kOptionManifest[1];
   93|      0|    case curl::fuzzer::proto::CURLOPT_NOBODY:
  ------------------
  |  Branch (93:5): [True: 0, False: 2.23k]
  ------------------
   94|      0|      return &kOptionManifest[2];
   95|      0|    case curl::fuzzer::proto::CURLOPT_POST:
  ------------------
  |  Branch (95:5): [True: 0, False: 2.23k]
  ------------------
   96|      0|      return &kOptionManifest[3];
   97|      0|    case curl::fuzzer::proto::CURLOPT_POSTFIELDS:
  ------------------
  |  Branch (97:5): [True: 0, False: 2.23k]
  ------------------
   98|      0|      return &kOptionManifest[4];
   99|      0|    case curl::fuzzer::proto::CURLOPT_FOLLOWLOCATION:
  ------------------
  |  Branch (99:5): [True: 0, False: 2.23k]
  ------------------
  100|      0|      return &kOptionManifest[5];
  101|      0|    case curl::fuzzer::proto::CURLOPT_MAXREDIRS:
  ------------------
  |  Branch (101:5): [True: 0, False: 2.23k]
  ------------------
  102|      0|      return &kOptionManifest[6];
  103|      0|    case curl::fuzzer::proto::CURLOPT_USERAGENT:
  ------------------
  |  Branch (103:5): [True: 0, False: 2.23k]
  ------------------
  104|      0|      return &kOptionManifest[7];
  105|      0|    case curl::fuzzer::proto::CURLOPT_ACCEPT_ENCODING:
  ------------------
  |  Branch (105:5): [True: 0, False: 2.23k]
  ------------------
  106|      0|      return &kOptionManifest[8];
  107|      0|    case curl::fuzzer::proto::CURLOPT_HEADER:
  ------------------
  |  Branch (107:5): [True: 0, False: 2.23k]
  ------------------
  108|      0|      return &kOptionManifest[9];
  109|      0|    case curl::fuzzer::proto::CURLOPT_FAILONERROR:
  ------------------
  |  Branch (109:5): [True: 0, False: 2.23k]
  ------------------
  110|      0|      return &kOptionManifest[10];
  111|      0|    case curl::fuzzer::proto::CURLOPT_HTTP_VERSION:
  ------------------
  |  Branch (111:5): [True: 0, False: 2.23k]
  ------------------
  112|      0|      return &kOptionManifest[11];
  113|      0|    case curl::fuzzer::proto::CURLOPT_HTTP09_ALLOWED:
  ------------------
  |  Branch (113:5): [True: 0, False: 2.23k]
  ------------------
  114|      0|      return &kOptionManifest[12];
  115|      0|    case curl::fuzzer::proto::CURLOPT_AUTOREFERER:
  ------------------
  |  Branch (115:5): [True: 0, False: 2.23k]
  ------------------
  116|      0|      return &kOptionManifest[13];
  117|      0|    case curl::fuzzer::proto::CURLOPT_REFERER:
  ------------------
  |  Branch (117:5): [True: 0, False: 2.23k]
  ------------------
  118|      0|      return &kOptionManifest[14];
  119|      0|    case curl::fuzzer::proto::CURLOPT_CONNECT_ONLY:
  ------------------
  |  Branch (119:5): [True: 0, False: 2.23k]
  ------------------
  120|      0|      return &kOptionManifest[15];
  121|      0|    case curl::fuzzer::proto::CURLOPT_WS_OPTIONS:
  ------------------
  |  Branch (121:5): [True: 0, False: 2.23k]
  ------------------
  122|      0|      return &kOptionManifest[16];
  123|      0|    case curl::fuzzer::proto::CURLOPT_UPLOAD:
  ------------------
  |  Branch (123:5): [True: 0, False: 2.23k]
  ------------------
  124|      0|      return &kOptionManifest[17];
  125|      0|    case curl::fuzzer::proto::CURLOPT_INFILESIZE_LARGE:
  ------------------
  |  Branch (125:5): [True: 0, False: 2.23k]
  ------------------
  126|      0|      return &kOptionManifest[18];
  127|    150|    case curl::fuzzer::proto::CURLOPT_CRLF:
  ------------------
  |  Branch (127:5): [True: 150, False: 2.08k]
  ------------------
  128|    150|      return &kOptionManifest[19];
  129|      0|    case curl::fuzzer::proto::CURLOPT_SSL_VERIFYPEER:
  ------------------
  |  Branch (129:5): [True: 0, False: 2.23k]
  ------------------
  130|      0|      return &kOptionManifest[20];
  131|      0|    case curl::fuzzer::proto::CURLOPT_SSL_VERIFYHOST:
  ------------------
  |  Branch (131:5): [True: 0, False: 2.23k]
  ------------------
  132|      0|      return &kOptionManifest[21];
  133|      0|    case curl::fuzzer::proto::CURLOPT_CERTINFO:
  ------------------
  |  Branch (133:5): [True: 0, False: 2.23k]
  ------------------
  134|      0|      return &kOptionManifest[22];
  135|      0|    case curl::fuzzer::proto::CURLOPT_SSLVERSION:
  ------------------
  |  Branch (135:5): [True: 0, False: 2.23k]
  ------------------
  136|      0|      return &kOptionManifest[23];
  137|      0|    case curl::fuzzer::proto::CURLOPT_SSL_CIPHER_LIST:
  ------------------
  |  Branch (137:5): [True: 0, False: 2.23k]
  ------------------
  138|      0|      return &kOptionManifest[24];
  139|      0|    case curl::fuzzer::proto::CURLOPT_TLS13_CIPHERS:
  ------------------
  |  Branch (139:5): [True: 0, False: 2.23k]
  ------------------
  140|      0|      return &kOptionManifest[25];
  141|      0|    case curl::fuzzer::proto::CURLOPT_SSL_EC_CURVES:
  ------------------
  |  Branch (141:5): [True: 0, False: 2.23k]
  ------------------
  142|      0|      return &kOptionManifest[26];
  143|      0|    case curl::fuzzer::proto::CURLOPT_SSL_SIGNATURE_ALGORITHMS:
  ------------------
  |  Branch (143:5): [True: 0, False: 2.23k]
  ------------------
  144|      0|      return &kOptionManifest[27];
  145|      0|    case curl::fuzzer::proto::CURLOPT_SSL_SESSIONID_CACHE:
  ------------------
  |  Branch (145:5): [True: 0, False: 2.23k]
  ------------------
  146|      0|      return &kOptionManifest[28];
  147|      0|    case curl::fuzzer::proto::CURLOPT_SSL_ENABLE_ALPN:
  ------------------
  |  Branch (147:5): [True: 0, False: 2.23k]
  ------------------
  148|      0|      return &kOptionManifest[29];
  149|      0|    case curl::fuzzer::proto::CURLOPT_SSL_OPTIONS:
  ------------------
  |  Branch (149:5): [True: 0, False: 2.23k]
  ------------------
  150|      0|      return &kOptionManifest[30];
  151|      0|    case curl::fuzzer::proto::CURLOPT_PINNEDPUBLICKEY:
  ------------------
  |  Branch (151:5): [True: 0, False: 2.23k]
  ------------------
  152|      0|      return &kOptionManifest[31];
  153|      0|    case curl::fuzzer::proto::CURLOPT_COOKIE:
  ------------------
  |  Branch (153:5): [True: 0, False: 2.23k]
  ------------------
  154|      0|      return &kOptionManifest[32];
  155|      0|    case curl::fuzzer::proto::CURLOPT_COOKIELIST:
  ------------------
  |  Branch (155:5): [True: 0, False: 2.23k]
  ------------------
  156|      0|      return &kOptionManifest[33];
  157|      0|    case curl::fuzzer::proto::CURLOPT_COOKIESESSION:
  ------------------
  |  Branch (157:5): [True: 0, False: 2.23k]
  ------------------
  158|      0|      return &kOptionManifest[34];
  159|      0|    case curl::fuzzer::proto::CURLOPT_HTTPAUTH:
  ------------------
  |  Branch (159:5): [True: 0, False: 2.23k]
  ------------------
  160|      0|      return &kOptionManifest[35];
  161|    932|    case curl::fuzzer::proto::CURLOPT_USERPWD:
  ------------------
  |  Branch (161:5): [True: 932, False: 1.30k]
  ------------------
  162|    932|      return &kOptionManifest[36];
  163|    176|    case curl::fuzzer::proto::CURLOPT_USERNAME:
  ------------------
  |  Branch (163:5): [True: 176, False: 2.06k]
  ------------------
  164|    176|      return &kOptionManifest[37];
  165|    308|    case curl::fuzzer::proto::CURLOPT_PASSWORD:
  ------------------
  |  Branch (165:5): [True: 308, False: 1.93k]
  ------------------
  166|    308|      return &kOptionManifest[38];
  167|      0|    case curl::fuzzer::proto::CURLOPT_UNRESTRICTED_AUTH:
  ------------------
  |  Branch (167:5): [True: 0, False: 2.23k]
  ------------------
  168|      0|      return &kOptionManifest[39];
  169|      0|    case curl::fuzzer::proto::CURLOPT_XOAUTH2_BEARER:
  ------------------
  |  Branch (169:5): [True: 0, False: 2.23k]
  ------------------
  170|      0|      return &kOptionManifest[40];
  171|      0|    case curl::fuzzer::proto::CURLOPT_AWS_SIGV4:
  ------------------
  |  Branch (171:5): [True: 0, False: 2.23k]
  ------------------
  172|      0|      return &kOptionManifest[41];
  173|      0|    case curl::fuzzer::proto::CURLOPT_TIMECONDITION:
  ------------------
  |  Branch (173:5): [True: 0, False: 2.23k]
  ------------------
  174|      0|      return &kOptionManifest[42];
  175|      0|    case curl::fuzzer::proto::CURLOPT_TIMEVALUE_LARGE:
  ------------------
  |  Branch (175:5): [True: 0, False: 2.23k]
  ------------------
  176|      0|      return &kOptionManifest[43];
  177|      0|    case curl::fuzzer::proto::CURLOPT_ALTSVC_CTRL:
  ------------------
  |  Branch (177:5): [True: 0, False: 2.23k]
  ------------------
  178|      0|      return &kOptionManifest[44];
  179|      0|    case curl::fuzzer::proto::CURLOPT_HSTS_CTRL:
  ------------------
  |  Branch (179:5): [True: 0, False: 2.23k]
  ------------------
  180|      0|      return &kOptionManifest[45];
  181|      0|    case curl::fuzzer::proto::CURLOPT_RANGE:
  ------------------
  |  Branch (181:5): [True: 0, False: 2.23k]
  ------------------
  182|      0|      return &kOptionManifest[46];
  183|      0|    case curl::fuzzer::proto::CURLOPT_RESUME_FROM_LARGE:
  ------------------
  |  Branch (183:5): [True: 0, False: 2.23k]
  ------------------
  184|      0|      return &kOptionManifest[47];
  185|      0|    case curl::fuzzer::proto::CURLOPT_FILETIME:
  ------------------
  |  Branch (185:5): [True: 0, False: 2.23k]
  ------------------
  186|      0|      return &kOptionManifest[48];
  187|      0|    case curl::fuzzer::proto::CURLOPT_REQUEST_TARGET:
  ------------------
  |  Branch (187:5): [True: 0, False: 2.23k]
  ------------------
  188|      0|      return &kOptionManifest[49];
  189|      0|    case curl::fuzzer::proto::CURLOPT_PATH_AS_IS:
  ------------------
  |  Branch (189:5): [True: 0, False: 2.23k]
  ------------------
  190|      0|      return &kOptionManifest[50];
  191|      0|    case curl::fuzzer::proto::CURLOPT_EXPECT_100_TIMEOUT_MS:
  ------------------
  |  Branch (191:5): [True: 0, False: 2.23k]
  ------------------
  192|      0|      return &kOptionManifest[51];
  193|      0|    case curl::fuzzer::proto::CURLOPT_KEEP_SENDING_ON_ERROR:
  ------------------
  |  Branch (193:5): [True: 0, False: 2.23k]
  ------------------
  194|      0|      return &kOptionManifest[52];
  195|      0|    case curl::fuzzer::proto::CURLOPT_POSTREDIR:
  ------------------
  |  Branch (195:5): [True: 0, False: 2.23k]
  ------------------
  196|      0|      return &kOptionManifest[53];
  197|      0|    case curl::fuzzer::proto::CURLOPT_TRANSFER_ENCODING:
  ------------------
  |  Branch (197:5): [True: 0, False: 2.23k]
  ------------------
  198|      0|      return &kOptionManifest[54];
  199|      0|    case curl::fuzzer::proto::CURLOPT_HTTP_TRANSFER_DECODING:
  ------------------
  |  Branch (199:5): [True: 0, False: 2.23k]
  ------------------
  200|      0|      return &kOptionManifest[55];
  201|      0|    case curl::fuzzer::proto::CURLOPT_HTTP_CONTENT_DECODING:
  ------------------
  |  Branch (201:5): [True: 0, False: 2.23k]
  ------------------
  202|      0|      return &kOptionManifest[56];
  203|      0|    case curl::fuzzer::proto::CURLOPT_IGNORE_CONTENT_LENGTH:
  ------------------
  |  Branch (203:5): [True: 0, False: 2.23k]
  ------------------
  204|      0|      return &kOptionManifest[57];
  205|      0|    case curl::fuzzer::proto::CURLOPT_DISALLOW_USERNAME_IN_URL:
  ------------------
  |  Branch (205:5): [True: 0, False: 2.23k]
  ------------------
  206|      0|      return &kOptionManifest[58];
  207|      0|    case curl::fuzzer::proto::CURLOPT_FRESH_CONNECT:
  ------------------
  |  Branch (207:5): [True: 0, False: 2.23k]
  ------------------
  208|      0|      return &kOptionManifest[59];
  209|      0|    case curl::fuzzer::proto::CURLOPT_FORBID_REUSE:
  ------------------
  |  Branch (209:5): [True: 0, False: 2.23k]
  ------------------
  210|      0|      return &kOptionManifest[60];
  211|      0|    case curl::fuzzer::proto::CURLOPT_MAXAGE_CONN:
  ------------------
  |  Branch (211:5): [True: 0, False: 2.23k]
  ------------------
  212|      0|      return &kOptionManifest[61];
  213|      0|    case curl::fuzzer::proto::CURLOPT_MAXLIFETIME_CONN:
  ------------------
  |  Branch (213:5): [True: 0, False: 2.23k]
  ------------------
  214|      0|      return &kOptionManifest[62];
  215|      0|    case curl::fuzzer::proto::CURLOPT_UPLOAD_BUFFERSIZE:
  ------------------
  |  Branch (215:5): [True: 0, False: 2.23k]
  ------------------
  216|      0|      return &kOptionManifest[63];
  217|      0|    case curl::fuzzer::proto::CURLOPT_MIME_OPTIONS:
  ------------------
  |  Branch (217:5): [True: 0, False: 2.23k]
  ------------------
  218|      0|      return &kOptionManifest[64];
  219|    672|    case curl::fuzzer::proto::CURLOPT_MAXFILESIZE_LARGE:
  ------------------
  |  Branch (219:5): [True: 672, False: 1.56k]
  ------------------
  220|    672|      return &kOptionManifest[65];
  221|      0|    case curl::fuzzer::proto::CURLOPT_BUFFERSIZE:
  ------------------
  |  Branch (221:5): [True: 0, False: 2.23k]
  ------------------
  222|      0|      return &kOptionManifest[66];
  223|      0|    case curl::fuzzer::proto::CURLOPT_DIRLISTONLY:
  ------------------
  |  Branch (223:5): [True: 0, False: 2.23k]
  ------------------
  224|      0|      return &kOptionManifest[67];
  225|      0|    case curl::fuzzer::proto::CURLOPT_APPEND:
  ------------------
  |  Branch (225:5): [True: 0, False: 2.23k]
  ------------------
  226|      0|      return &kOptionManifest[68];
  227|      0|    case curl::fuzzer::proto::CURLOPT_TRANSFERTEXT:
  ------------------
  |  Branch (227:5): [True: 0, False: 2.23k]
  ------------------
  228|      0|      return &kOptionManifest[69];
  229|      0|    case curl::fuzzer::proto::CURLOPT_FTP_USE_EPSV:
  ------------------
  |  Branch (229:5): [True: 0, False: 2.23k]
  ------------------
  230|      0|      return &kOptionManifest[70];
  231|      0|    case curl::fuzzer::proto::CURLOPT_FTP_CREATE_MISSING_DIRS:
  ------------------
  |  Branch (231:5): [True: 0, False: 2.23k]
  ------------------
  232|      0|      return &kOptionManifest[71];
  233|      0|    case curl::fuzzer::proto::CURLOPT_FTP_ACCOUNT:
  ------------------
  |  Branch (233:5): [True: 0, False: 2.23k]
  ------------------
  234|      0|      return &kOptionManifest[72];
  235|      0|    case curl::fuzzer::proto::CURLOPT_FTP_SKIP_PASV_IP:
  ------------------
  |  Branch (235:5): [True: 0, False: 2.23k]
  ------------------
  236|      0|      return &kOptionManifest[73];
  237|      0|    case curl::fuzzer::proto::CURLOPT_FTP_FILEMETHOD:
  ------------------
  |  Branch (237:5): [True: 0, False: 2.23k]
  ------------------
  238|      0|      return &kOptionManifest[74];
  239|      0|    case curl::fuzzer::proto::CURLOPT_FTP_ALTERNATIVE_TO_USER:
  ------------------
  |  Branch (239:5): [True: 0, False: 2.23k]
  ------------------
  240|      0|      return &kOptionManifest[75];
  241|      0|    case curl::fuzzer::proto::CURLOPT_FTP_USE_PRET:
  ------------------
  |  Branch (241:5): [True: 0, False: 2.23k]
  ------------------
  242|      0|      return &kOptionManifest[76];
  243|      0|    case curl::fuzzer::proto::CURLOPT_WILDCARDMATCH:
  ------------------
  |  Branch (243:5): [True: 0, False: 2.23k]
  ------------------
  244|      0|      return &kOptionManifest[77];
  245|      0|    case curl::fuzzer::proto::CURLOPT_TFTP_BLKSIZE:
  ------------------
  |  Branch (245:5): [True: 0, False: 2.23k]
  ------------------
  246|      0|      return &kOptionManifest[78];
  247|      0|    case curl::fuzzer::proto::CURLOPT_TFTP_NO_OPTIONS:
  ------------------
  |  Branch (247:5): [True: 0, False: 2.23k]
  ------------------
  248|      0|      return &kOptionManifest[79];
  249|      0|    default:
  ------------------
  |  Branch (249:5): [True: 0, False: 2.23k]
  ------------------
  250|      0|      return nullptr;
  251|  2.23k|  }
  252|  2.23k|}

freea:
  107|    242|{
  108|       |  /* Check argument.  */
  109|    242|  uintptr_t u = (uintptr_t) p;
  110|    242|  if (u & (sa_alignment_max - 1))
  ------------------
  |  Branch (110:7): [True: 0, False: 242]
  ------------------
  111|      0|    {
  112|       |      /* p was not the result of a malloca() call.  Invalid argument.  */
  113|      0|      abort ();
  114|      0|    }
  115|       |  /* Determine whether p was a non-NULL pointer returned by mmalloca().  */
  116|    242|  if (u & sa_alignment_max)
  ------------------
  |  Branch (116:7): [True: 0, False: 242]
  ------------------
  117|      0|    {
  118|      0|      char *cp = p;
  119|      0|      small_t *sp = p;
  120|       |# if defined __CHERI_PURE_CAPABILITY__
  121|       |      void *mem = (void *) sp[-1];
  122|       |# else
  123|      0|      void *mem = cp - sp[-1];
  124|      0|# endif
  125|      0|      free (mem);
  126|      0|    }
  127|    242|}

idn2_lookup_ul:
  656|    242|{
  657|    242|  uint8_t *utf8src = NULL;
  658|    242|  int rc;
  659|       |
  660|    242|  if (src)
  ------------------
  |  Branch (660:7): [True: 242, False: 0]
  ------------------
  661|    242|    {
  662|    242|      const char *encoding = locale_charset ();
  663|       |
  664|    242|      utf8src = u8_strconv_from_encoding (src, encoding, iconveh_error);
  665|       |
  666|    242|      if (!utf8src)
  ------------------
  |  Branch (666:11): [True: 242, False: 0]
  ------------------
  667|    242|	{
  668|    242|	  if (errno == ENOMEM)
  ------------------
  |  Branch (668:8): [True: 0, False: 242]
  ------------------
  669|      0|	    return IDN2_MALLOC;
  670|    242|	  return IDN2_ICONV_FAIL;
  671|    242|	}
  672|    242|    }
  673|       |
  674|      0|  rc = idn2_lookup_u8 (utf8src, (uint8_t **) lookupname,
  675|      0|		       flags | IDN2_NFC_INPUT);
  676|       |
  677|      0|  free (utf8src);
  678|       |
  679|      0|  return rc;
  680|    242|}

idn2_check_version:
   62|    121|{
   63|    121|  if (!req_version || strverscmp (req_version, IDN2_VERSION) <= 0)
  ------------------
  |  |  119|    121|# define IDN2_VERSION "2.3.8"
  ------------------
  |  Branch (63:7): [True: 0, False: 121]
  |  Branch (63:23): [True: 121, False: 0]
  ------------------
   64|    121|    return IDN2_VERSION;
  ------------------
  |  |  119|    121|# define IDN2_VERSION "2.3.8"
  ------------------
   65|       |
   66|      0|  return NULL;
   67|    121|}

c_tolower:
  338|  8.22k|{
  339|  8.22k|  switch (c)
  340|  8.22k|    {
  341|  5.80k|    _C_CTYPE_UPPER:
  ------------------
  |  |  148|      0|#define _C_CTYPE_UPPER _C_CTYPE_LOWER_N ('A' - 'a')
  |  |  ------------------
  |  |  |  |  122|  1.21k|   _C_CTYPE_LOWER_A_THRU_F_N(N): \
  |  |  |  |  ------------------
  |  |  |  |  |  |  119|    726|   case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (119:4): [True: 726, False: 7.50k]
  |  |  |  |  |  |  |  Branch (119:20): [True: 0, False: 8.22k]
  |  |  |  |  |  |  |  Branch (119:36): [True: 0, False: 8.22k]
  |  |  |  |  |  |  |  Branch (119:52): [True: 0, False: 8.22k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  120|  1.21k|   case 'e' + (N): case 'f' + (N)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (120:4): [True: 0, False: 8.22k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (122:4): [True: 484, False: 7.74k]
  |  |  |  |  ------------------
  |  |  |  |  123|  1.69k|   case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (123:4): [True: 0, False: 8.22k]
  |  |  |  |  |  Branch (123:20): [True: 0, False: 8.22k]
  |  |  |  |  |  Branch (123:36): [True: 484, False: 7.74k]
  |  |  |  |  |  Branch (123:52): [True: 0, False: 8.22k]
  |  |  |  |  ------------------
  |  |  |  |  124|  2.66k|   case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:4): [True: 0, False: 8.22k]
  |  |  |  |  |  Branch (124:20): [True: 484, False: 7.74k]
  |  |  |  |  |  Branch (124:36): [True: 0, False: 8.22k]
  |  |  |  |  |  Branch (124:52): [True: 484, False: 7.74k]
  |  |  |  |  ------------------
  |  |  |  |  125|  3.14k|   case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (125:4): [True: 0, False: 8.22k]
  |  |  |  |  |  Branch (125:20): [True: 0, False: 8.22k]
  |  |  |  |  |  Branch (125:36): [True: 0, False: 8.22k]
  |  |  |  |  |  Branch (125:52): [True: 484, False: 7.74k]
  |  |  |  |  ------------------
  |  |  |  |  126|  5.80k|   case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (126:4): [True: 484, False: 7.74k]
  |  |  |  |  |  Branch (126:20): [True: 1.45k, False: 6.77k]
  |  |  |  |  |  Branch (126:36): [True: 726, False: 7.50k]
  |  |  |  |  |  Branch (126:52): [True: 0, False: 8.22k]
  |  |  |  |  ------------------
  |  |  |  |  127|  5.80k|   case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (127:4): [True: 0, False: 8.22k]
  |  |  |  |  |  Branch (127:20): [True: 0, False: 8.22k]
  |  |  |  |  |  Branch (127:36): [True: 0, False: 8.22k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  342|  5.80k|      return c - 'A' + 'a';
  343|  2.42k|    default:
  ------------------
  |  Branch (343:5): [True: 2.42k, False: 5.80k]
  ------------------
  344|  2.42k|      return c;
  345|  8.22k|    }
  346|  8.22k|}
c_isupper:
  313|  1.93k|{
  314|  1.93k|  switch (c)
  315|  1.93k|    {
  316|  1.21k|    _C_CTYPE_UPPER:
  ------------------
  |  |  148|      0|#define _C_CTYPE_UPPER _C_CTYPE_LOWER_N ('A' - 'a')
  |  |  ------------------
  |  |  |  |  122|    242|   _C_CTYPE_LOWER_A_THRU_F_N(N): \
  |  |  |  |  ------------------
  |  |  |  |  |  |  119|      0|   case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (119:4): [True: 0, False: 1.93k]
  |  |  |  |  |  |  |  Branch (119:20): [True: 0, False: 1.93k]
  |  |  |  |  |  |  |  Branch (119:36): [True: 0, False: 1.93k]
  |  |  |  |  |  |  |  Branch (119:52): [True: 0, False: 1.93k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  120|    242|   case 'e' + (N): case 'f' + (N)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (120:4): [True: 0, False: 1.93k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (122:4): [True: 242, False: 1.69k]
  |  |  |  |  ------------------
  |  |  |  |  123|    242|   case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (123:4): [True: 0, False: 1.93k]
  |  |  |  |  |  Branch (123:20): [True: 0, False: 1.93k]
  |  |  |  |  |  Branch (123:36): [True: 0, False: 1.93k]
  |  |  |  |  |  Branch (123:52): [True: 0, False: 1.93k]
  |  |  |  |  ------------------
  |  |  |  |  124|    242|   case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:4): [True: 0, False: 1.93k]
  |  |  |  |  |  Branch (124:20): [True: 0, False: 1.93k]
  |  |  |  |  |  Branch (124:36): [True: 0, False: 1.93k]
  |  |  |  |  |  Branch (124:52): [True: 0, False: 1.93k]
  |  |  |  |  ------------------
  |  |  |  |  125|    242|   case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (125:4): [True: 0, False: 1.93k]
  |  |  |  |  |  Branch (125:20): [True: 0, False: 1.93k]
  |  |  |  |  |  Branch (125:36): [True: 0, False: 1.93k]
  |  |  |  |  |  Branch (125:52): [True: 0, False: 1.93k]
  |  |  |  |  ------------------
  |  |  |  |  126|  1.21k|   case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (126:4): [True: 0, False: 1.93k]
  |  |  |  |  |  Branch (126:20): [True: 242, False: 1.69k]
  |  |  |  |  |  Branch (126:36): [True: 726, False: 1.21k]
  |  |  |  |  |  Branch (126:52): [True: 0, False: 1.93k]
  |  |  |  |  ------------------
  |  |  |  |  127|  1.21k|   case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (127:4): [True: 0, False: 1.93k]
  |  |  |  |  |  Branch (127:20): [True: 0, False: 1.93k]
  |  |  |  |  |  Branch (127:36): [True: 0, False: 1.93k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  317|  1.21k|      return true;
  318|    726|    default:
  ------------------
  |  Branch (318:5): [True: 726, False: 1.21k]
  ------------------
  319|       |      return false;
  320|  1.93k|    }
  321|  1.93k|}

c_strcasecmp:
   28|    484|{
   29|    484|  register const unsigned char *p1 = (const unsigned char *) s1;
   30|    484|  register const unsigned char *p2 = (const unsigned char *) s2;
   31|    484|  unsigned char c1, c2;
   32|       |
   33|    484|  if (p1 == p2)
  ------------------
  |  Branch (33:7): [True: 0, False: 484]
  ------------------
   34|      0|    return 0;
   35|       |
   36|    484|  do
   37|  4.11k|    {
   38|  4.11k|      c1 = c_tolower (*p1);
   39|  4.11k|      c2 = c_tolower (*p2);
   40|       |
   41|  4.11k|      if (c1 == '\0')
  ------------------
  |  Branch (41:11): [True: 242, False: 3.87k]
  ------------------
   42|    242|        break;
   43|       |
   44|  3.87k|      ++p1;
   45|  3.87k|      ++p2;
   46|  3.87k|    }
   47|  3.87k|  while (c1 == c2);
  ------------------
  |  Branch (47:10): [True: 3.63k, False: 242]
  ------------------
   48|       |
   49|    484|  if (UCHAR_MAX <= INT_MAX)
  ------------------
  |  Branch (49:7): [True: 484, Folded]
  ------------------
   50|    484|    return c1 - c2;
   51|      0|  else
   52|       |    /* On machines where 'char' and 'int' are types of the same size, the
   53|       |       difference of two 'unsigned char' values - including the sign bit -
   54|       |       doesn't fit in an 'int'.  */
   55|      0|    return _GL_CMP (c1, c2);
  ------------------
  |  | 1797|      0|#define _GL_CMP(n1, n2) (((n1) > (n2)) - ((n1) < (n2)))
  ------------------
   56|    484|}

u8-conv-from-enc.c:strcaseeq0:
  166|    242|{
  167|    242|  if (CASEEQ (s1[0], s20))
  ------------------
  |  |   40|    242|     (c_isupper (upper) ? ((other) & ~0x20) == (upper) : (other) == (upper))
  |  |  ------------------
  |  |  |  Branch (40:6): [True: 0, False: 242]
  |  |  |  Branch (40:7): [True: 242, False: 0]
  |  |  ------------------
  ------------------
  168|      0|    {
  169|      0|      if (s20 == 0)
  ------------------
  |  Branch (169:11): [True: 0, False: 0]
  ------------------
  170|      0|        return 1;
  171|      0|      else
  172|      0|        return strcaseeq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28);
  173|      0|    }
  174|    242|  else
  175|    242|    return 0;
  176|    242|}
striconveh.c:strcaseeq0:
  166|    484|{
  167|    484|  if (CASEEQ (s1[0], s20))
  ------------------
  |  |   40|    484|     (c_isupper (upper) ? ((other) & ~0x20) == (upper) : (other) == (upper))
  |  |  ------------------
  |  |  |  Branch (40:6): [True: 242, False: 242]
  |  |  |  Branch (40:7): [True: 484, False: 0]
  |  |  ------------------
  ------------------
  168|    242|    {
  169|    242|      if (s20 == 0)
  ------------------
  |  Branch (169:11): [True: 0, False: 242]
  ------------------
  170|      0|        return 1;
  171|    242|      else
  172|    242|        return strcaseeq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28);
  173|    242|    }
  174|    242|  else
  175|    242|    return 0;
  176|    484|}
striconveh.c:strcaseeq1:
  152|    242|{
  153|    242|  if (CASEEQ (s1[1], s21))
  ------------------
  |  |   40|    242|     (c_isupper (upper) ? ((other) & ~0x20) == (upper) : (other) == (upper))
  |  |  ------------------
  |  |  |  Branch (40:6): [True: 242, False: 0]
  |  |  |  Branch (40:7): [True: 242, False: 0]
  |  |  ------------------
  ------------------
  154|    242|    {
  155|    242|      if (s21 == 0)
  ------------------
  |  Branch (155:11): [True: 0, False: 242]
  ------------------
  156|      0|        return 1;
  157|    242|      else
  158|    242|        return strcaseeq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28);
  159|    242|    }
  160|      0|  else
  161|      0|    return 0;
  162|    242|}
striconveh.c:strcaseeq2:
  138|    242|{
  139|    242|  if (CASEEQ (s1[2], s22))
  ------------------
  |  |   40|    242|     (c_isupper (upper) ? ((other) & ~0x20) == (upper) : (other) == (upper))
  |  |  ------------------
  |  |  |  Branch (40:6): [True: 242, False: 0]
  |  |  |  Branch (40:7): [True: 242, False: 0]
  |  |  ------------------
  ------------------
  140|    242|    {
  141|    242|      if (s22 == 0)
  ------------------
  |  Branch (141:11): [True: 0, False: 242]
  ------------------
  142|      0|        return 1;
  143|    242|      else
  144|    242|        return strcaseeq3 (s1, s2, s23, s24, s25, s26, s27, s28);
  145|    242|    }
  146|      0|  else
  147|      0|    return 0;
  148|    242|}
striconveh.c:strcaseeq3:
  124|    242|{
  125|    242|  if (CASEEQ (s1[3], s23))
  ------------------
  |  |   40|    242|     (c_isupper (upper) ? ((other) & ~0x20) == (upper) : (other) == (upper))
  |  |  ------------------
  |  |  |  Branch (40:6): [True: 242, False: 0]
  |  |  |  Branch (40:7): [True: 0, False: 242]
  |  |  ------------------
  ------------------
  126|    242|    {
  127|    242|      if (s23 == 0)
  ------------------
  |  Branch (127:11): [True: 0, False: 242]
  ------------------
  128|      0|        return 1;
  129|    242|      else
  130|    242|        return strcaseeq4 (s1, s2, s24, s25, s26, s27, s28);
  131|    242|    }
  132|      0|  else
  133|      0|    return 0;
  134|    242|}
striconveh.c:strcaseeq4:
  110|    242|{
  111|    242|  if (CASEEQ (s1[4], s24))
  ------------------
  |  |   40|    242|     (c_isupper (upper) ? ((other) & ~0x20) == (upper) : (other) == (upper))
  |  |  ------------------
  |  |  |  Branch (40:6): [True: 242, False: 0]
  |  |  |  Branch (40:7): [True: 0, False: 242]
  |  |  ------------------
  ------------------
  112|    242|    {
  113|    242|      if (s24 == 0)
  ------------------
  |  Branch (113:11): [True: 0, False: 242]
  ------------------
  114|      0|        return 1;
  115|    242|      else
  116|    242|        return strcaseeq5 (s1, s2, s25, s26, s27, s28);
  117|    242|    }
  118|      0|  else
  119|      0|    return 0;
  120|    242|}
striconveh.c:strcaseeq5:
   96|    242|{
   97|    242|  if (CASEEQ (s1[5], s25))
  ------------------
  |  |   40|    242|     (c_isupper (upper) ? ((other) & ~0x20) == (upper) : (other) == (upper))
  |  |  ------------------
  |  |  |  Branch (40:6): [True: 0, False: 242]
  |  |  |  Branch (40:7): [True: 0, False: 242]
  |  |  ------------------
  ------------------
   98|      0|    {
   99|      0|      if (s25 == 0)
  ------------------
  |  Branch (99:11): [True: 0, False: 0]
  ------------------
  100|      0|        return 1;
  101|      0|      else
  102|      0|        return strcaseeq6 (s1, s2, s26, s27, s28);
  103|      0|    }
  104|    242|  else
  105|    242|    return 0;
  106|    242|}

locale_charset:
  832|    242|{
  833|    242|  const char *codeset;
  834|       |
  835|       |  /* This function must be multithread-safe.  To achieve this without using
  836|       |     thread-local storage, we use a simple strcpy or memcpy to fill this static
  837|       |     buffer.  Filling it through, for example, strcpy + strcat would not be
  838|       |     guaranteed to leave the buffer's contents intact if another thread is
  839|       |     currently accessing it.  If necessary, the contents is first assembled in
  840|       |     a stack-allocated buffer.  */
  841|       |
  842|    242|#if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2
  843|       |
  844|    242|# if HAVE_LANGINFO_CODESET
  845|       |
  846|       |  /* Most systems support nl_langinfo (CODESET) nowadays.  */
  847|    242|  codeset = nl_langinfo (CODESET);
  848|       |
  849|       |#  ifdef __CYGWIN__
  850|       |  /* Cygwin < 1.7 does not have locales.  nl_langinfo (CODESET) always
  851|       |     returns "US-ASCII".  Return the suffix of the locale name from the
  852|       |     environment variables (if present) or the codepage as a number.  */
  853|       |  if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0)
  854|       |    {
  855|       |      const char *locale;
  856|       |      static char resultbuf[2 + 10 + 1];
  857|       |
  858|       |      locale = getenv ("LC_ALL");
  859|       |      if (locale == NULL || locale[0] == '\0')
  860|       |        {
  861|       |          locale = getenv ("LC_CTYPE");
  862|       |          if (locale == NULL || locale[0] == '\0')
  863|       |            locale = getenv ("LANG");
  864|       |        }
  865|       |      if (locale != NULL && locale[0] != '\0')
  866|       |        {
  867|       |          /* If the locale name contains an encoding after the dot, return
  868|       |             it.  */
  869|       |          const char *dot = strchr (locale, '.');
  870|       |
  871|       |          if (dot != NULL)
  872|       |            {
  873|       |              const char *modifier;
  874|       |
  875|       |              dot++;
  876|       |              /* Look for the possible @... trailer and remove it, if any.  */
  877|       |              modifier = strchr (dot, '@');
  878|       |              if (modifier == NULL)
  879|       |                return dot;
  880|       |              if (modifier - dot < sizeof (resultbuf))
  881|       |                {
  882|       |                  /* This way of filling resultbuf is multithread-safe.  */
  883|       |                  memcpy (resultbuf, dot, modifier - dot);
  884|       |                  resultbuf [modifier - dot] = '\0';
  885|       |                  return resultbuf;
  886|       |                }
  887|       |            }
  888|       |        }
  889|       |
  890|       |      /* The Windows API has a function returning the locale's codepage as a
  891|       |         number: GetACP().  This encoding is used by Cygwin, unless the user
  892|       |         has set the environment variable CYGWIN=codepage:oem (which very few
  893|       |         people do).
  894|       |         Output directed to console windows needs to be converted (to
  895|       |         GetOEMCP() if the console is using a raster font, or to
  896|       |         GetConsoleOutputCP() if it is using a TrueType font).  Cygwin does
  897|       |         this conversion transparently (see winsup/cygwin/fhandler_console.cc),
  898|       |         converting to GetConsoleOutputCP().  This leads to correct results,
  899|       |         except when SetConsoleOutputCP has been called and a raster font is
  900|       |         in use.  */
  901|       |      {
  902|       |        char buf[2 + 10 + 1];
  903|       |
  904|       |        sprintf (buf, "CP%u", GetACP ());
  905|       |        strcpy (resultbuf, buf);
  906|       |        codeset = resultbuf;
  907|       |      }
  908|       |    }
  909|       |#  endif
  910|       |
  911|    242|  if (codeset == NULL)
  ------------------
  |  Branch (911:7): [True: 0, False: 242]
  ------------------
  912|       |    /* The canonical name cannot be determined.  */
  913|      0|    codeset = "";
  914|       |
  915|       |# elif defined WINDOWS_NATIVE
  916|       |
  917|       |  char buf[2 + 10 + 1];
  918|       |  static char resultbuf[2 + 10 + 1];
  919|       |
  920|       |  /* The Windows API has a function returning the locale's codepage as
  921|       |     a number, but the value doesn't change according to what the
  922|       |     'setlocale' call specified.  So we use it as a last resort, in
  923|       |     case the string returned by 'setlocale' doesn't specify the
  924|       |     codepage.  */
  925|       |  char *current_locale = setlocale (LC_CTYPE, NULL);
  926|       |  char *pdot = strrchr (current_locale, '.');
  927|       |
  928|       |  if (pdot && 2 + strlen (pdot + 1) + 1 <= sizeof (buf))
  929|       |    sprintf (buf, "CP%s", pdot + 1);
  930|       |  else
  931|       |    {
  932|       |      /* The Windows API has a function returning the locale's codepage as a
  933|       |         number: GetACP().
  934|       |         When the output goes to a console window, it needs to be provided in
  935|       |         GetOEMCP() encoding if the console is using a raster font, or in
  936|       |         GetConsoleOutputCP() encoding if it is using a TrueType font.
  937|       |         But in GUI programs and for output sent to files and pipes, GetACP()
  938|       |         encoding is the best bet.  */
  939|       |      sprintf (buf, "CP%u", GetACP ());
  940|       |    }
  941|       |  /* For a locale name such as "French_France.65001", in Windows 10,
  942|       |     setlocale now returns "French_France.utf8" instead, or in the UTF-8
  943|       |     environment (with modern system settings) "fr_FR.UTF-8".  */
  944|       |  if (strcmp (buf + 2, "65001") == 0 || strcmp (buf + 2, "utf8") == 0
  945|       |      || strcmp (buf + 2, "UTF-8") == 0)
  946|       |    codeset = "UTF-8";
  947|       |  else
  948|       |    {
  949|       |      strcpy (resultbuf, buf);
  950|       |      codeset = resultbuf;
  951|       |    }
  952|       |
  953|       |# elif defined OS2
  954|       |
  955|       |  const char *locale;
  956|       |  static char resultbuf[2 + 10 + 1];
  957|       |  ULONG cp[3];
  958|       |  ULONG cplen;
  959|       |
  960|       |  codeset = NULL;
  961|       |
  962|       |  /* Allow user to override the codeset, as set in the operating system,
  963|       |     with standard language environment variables.  */
  964|       |  locale = getenv ("LC_ALL");
  965|       |  if (locale == NULL || locale[0] == '\0')
  966|       |    {
  967|       |      locale = getenv ("LC_CTYPE");
  968|       |      if (locale == NULL || locale[0] == '\0')
  969|       |        locale = getenv ("LANG");
  970|       |    }
  971|       |  if (locale != NULL && locale[0] != '\0')
  972|       |    {
  973|       |      /* If the locale name contains an encoding after the dot, return it.  */
  974|       |      const char *dot = strchr (locale, '.');
  975|       |
  976|       |      if (dot != NULL)
  977|       |        {
  978|       |          const char *modifier;
  979|       |
  980|       |          dot++;
  981|       |          /* Look for the possible @... trailer and remove it, if any.  */
  982|       |          modifier = strchr (dot, '@');
  983|       |          if (modifier == NULL)
  984|       |            return dot;
  985|       |          if (modifier - dot < sizeof (resultbuf))
  986|       |            {
  987|       |              /* This way of filling resultbuf is multithread-safe.  */
  988|       |              memcpy (resultbuf, dot, modifier - dot);
  989|       |              resultbuf [modifier - dot] = '\0';
  990|       |              return resultbuf;
  991|       |            }
  992|       |        }
  993|       |
  994|       |      /* For the POSIX locale, don't use the system's codepage.  */
  995|       |      if (strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0)
  996|       |        codeset = "";
  997|       |    }
  998|       |
  999|       |  if (codeset == NULL)
 1000|       |    {
 1001|       |      /* OS/2 has a function returning the locale's codepage as a number.  */
 1002|       |      if (DosQueryCp (sizeof (cp), cp, &cplen))
 1003|       |        codeset = "";
 1004|       |      else
 1005|       |        {
 1006|       |          char buf[2 + 10 + 1];
 1007|       |
 1008|       |          sprintf (buf, "CP%u", cp[0]);
 1009|       |          strcpy (resultbuf, buf);
 1010|       |          codeset = resultbuf;
 1011|       |        }
 1012|       |    }
 1013|       |
 1014|       |# else
 1015|       |
 1016|       |#  error "Add code for other platforms here."
 1017|       |
 1018|       |# endif
 1019|       |
 1020|       |  /* Resolve alias.  */
 1021|    242|  {
 1022|       |# ifdef alias_table_defined
 1023|       |    /* On some platforms, UTF-8 locales are the most frequently used ones.
 1024|       |       Speed up the common case and slow down the less common cases by
 1025|       |       testing for this case first.  */
 1026|       |#  if defined __OpenBSD__ || (defined __APPLE__ && defined __MACH__) || defined __sun || defined __CYGWIN__
 1027|       |    if (strcmp (codeset, "UTF-8") == 0)
 1028|       |      goto done_table_lookup;
 1029|       |    else
 1030|       |#  endif
 1031|       |      {
 1032|       |        const struct table_entry * const table = alias_table;
 1033|       |        size_t const table_size =
 1034|       |          sizeof (alias_table) / sizeof (struct table_entry);
 1035|       |        /* The table is sorted.  Perform a binary search.  */
 1036|       |        size_t hi = table_size;
 1037|       |        size_t lo = 0;
 1038|       |        while (lo < hi)
 1039|       |          {
 1040|       |            /* Invariant:
 1041|       |               for i < lo, strcmp (table[i].alias, codeset) < 0,
 1042|       |               for i >= hi, strcmp (table[i].alias, codeset) > 0.  */
 1043|       |            size_t mid = (hi + lo) >> 1; /* >= lo, < hi */
 1044|       |            int cmp = strcmp (table[mid].alias, codeset);
 1045|       |            if (cmp < 0)
 1046|       |              lo = mid + 1;
 1047|       |            else if (cmp > 0)
 1048|       |              hi = mid;
 1049|       |            else
 1050|       |              {
 1051|       |                /* Found an i with
 1052|       |                     strcmp (table[i].alias, codeset) == 0.  */
 1053|       |                codeset = table[mid].canonical;
 1054|       |                goto done_table_lookup;
 1055|       |              }
 1056|       |          }
 1057|       |      }
 1058|       |    if (0)
 1059|       |      done_table_lookup: {}
 1060|       |    else
 1061|       |# endif
 1062|    242|      {
 1063|       |        /* Did not find it in the table.  */
 1064|       |        /* On Mac OS X, all modern locales use the UTF-8 encoding.
 1065|       |           BeOS and Haiku have a single locale, and it has UTF-8 encoding.  */
 1066|       |# if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__
 1067|       |        codeset = "UTF-8";
 1068|       |# else
 1069|       |        /* Don't return an empty string.  GNU libc and GNU libiconv interpret
 1070|       |           the empty string as denoting "the locale's character encoding",
 1071|       |           thus GNU libiconv would call this function a second time.  */
 1072|    242|        if (codeset[0] == '\0')
  ------------------
  |  Branch (1072:13): [True: 0, False: 242]
  ------------------
 1073|      0|          codeset = "ASCII";
 1074|    242|# endif
 1075|    242|      }
 1076|    242|  }
 1077|       |
 1078|       |#else
 1079|       |
 1080|       |  /* On old systems which lack it, use setlocale or getenv.  */
 1081|       |  const char *locale = NULL;
 1082|       |
 1083|       |  /* But most old systems don't have a complete set of locales.  Some
 1084|       |     (like DJGPP) have only the C locale.  Therefore we don't use setlocale
 1085|       |     here; it would return "C" when it doesn't support the locale name the
 1086|       |     user has set.  */
 1087|       |# if 0
 1088|       |  locale = setlocale (LC_CTYPE, NULL);
 1089|       |# endif
 1090|       |  if (locale == NULL || locale[0] == '\0')
 1091|       |    {
 1092|       |      locale = getenv ("LC_ALL");
 1093|       |      if (locale == NULL || locale[0] == '\0')
 1094|       |        {
 1095|       |          locale = getenv ("LC_CTYPE");
 1096|       |          if (locale == NULL || locale[0] == '\0')
 1097|       |            locale = getenv ("LANG");
 1098|       |            if (locale == NULL)
 1099|       |              locale = "";
 1100|       |        }
 1101|       |    }
 1102|       |
 1103|       |  /* Map locale name to canonical encoding name.  */
 1104|       |  {
 1105|       |# ifdef locale_table_defined
 1106|       |    const struct table_entry * const table = locale_table;
 1107|       |    size_t const table_size =
 1108|       |      sizeof (locale_table) / sizeof (struct table_entry);
 1109|       |    /* The table is sorted.  Perform a binary search.  */
 1110|       |    size_t hi = table_size;
 1111|       |    size_t lo = 0;
 1112|       |    while (lo < hi)
 1113|       |      {
 1114|       |        /* Invariant:
 1115|       |           for i < lo, strcmp (table[i].locale, locale) < 0,
 1116|       |           for i >= hi, strcmp (table[i].locale, locale) > 0.  */
 1117|       |        size_t mid = (hi + lo) >> 1; /* >= lo, < hi */
 1118|       |        int cmp = strcmp (table[mid].locale, locale);
 1119|       |        if (cmp < 0)
 1120|       |          lo = mid + 1;
 1121|       |        else if (cmp > 0)
 1122|       |          hi = mid;
 1123|       |        else
 1124|       |          {
 1125|       |            /* Found an i with
 1126|       |                 strcmp (table[i].locale, locale) == 0.  */
 1127|       |            codeset = table[mid].canonical;
 1128|       |            goto done_table_lookup;
 1129|       |          }
 1130|       |      }
 1131|       |    if (0)
 1132|       |      done_table_lookup: ;
 1133|       |    else
 1134|       |# endif
 1135|       |      {
 1136|       |        /* Did not find it in the table.  */
 1137|       |        /* On Mac OS X, all modern locales use the UTF-8 encoding.
 1138|       |           BeOS and Haiku have a single locale, and it has UTF-8 encoding.  */
 1139|       |# if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__
 1140|       |        codeset = "UTF-8";
 1141|       |# else
 1142|       |        /* The canonical name cannot be determined.  */
 1143|       |        /* Don't return an empty string.  GNU libc and GNU libiconv interpret
 1144|       |           the empty string as denoting "the locale's character encoding",
 1145|       |           thus GNU libiconv would call this function a second time.  */
 1146|       |        codeset = "ASCII";
 1147|       |# endif
 1148|       |      }
 1149|       |  }
 1150|       |
 1151|       |#endif
 1152|       |
 1153|       |#ifdef DARWIN7
 1154|       |  /* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8"
 1155|       |     (the default codeset) does not work when MB_CUR_MAX is 1.  */
 1156|       |  if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX_L (uselocale (NULL)) <= 1)
 1157|       |    codeset = "ASCII";
 1158|       |#endif
 1159|       |
 1160|    242|  return codeset;
 1161|    242|}

iconveh_open:
   48|    242|{
   49|    242|  iconv_t cd;
   50|    242|  iconv_t cd1;
   51|    242|  iconv_t cd2;
   52|       |
   53|    242|  cd = iconv_open (to_codeset, from_codeset);
   54|       |
   55|    242|  if (STRCASEEQ (from_codeset, "UTF-8", 'U','T','F','-','8',0,0,0,0))
  ------------------
  |  |  179|    242|  strcaseeq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28)
  |  |  ------------------
  |  |  |  Branch (179:3): [True: 0, False: 242]
  |  |  ------------------
  ------------------
   56|      0|    cd1 = (iconv_t)(-1);
   57|    242|  else
   58|    242|    {
   59|    242|      cd1 = iconv_open ("UTF-8", from_codeset);
   60|    242|      if (cd1 == (iconv_t)(-1))
  ------------------
  |  Branch (60:11): [True: 0, False: 242]
  ------------------
   61|      0|        {
   62|      0|          int saved_errno = errno;
   63|      0|          if (cd != (iconv_t)(-1))
  ------------------
  |  Branch (63:15): [True: 0, False: 0]
  ------------------
   64|      0|            iconv_close (cd);
   65|      0|          errno = saved_errno;
   66|      0|          return -1;
   67|      0|        }
   68|    242|    }
   69|       |
   70|    242|  if (STRCASEEQ (to_codeset, "UTF-8", 'U','T','F','-','8',0,0,0,0)
  ------------------
  |  |  179|    484|  strcaseeq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28)
  |  |  ------------------
  |  |  |  Branch (179:3): [True: 0, False: 242]
  |  |  ------------------
  ------------------
   71|    242|# if (((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2) \
   72|    242|      && !defined __UCLIBC__) \
   73|    242|     || _LIBICONV_VERSION >= 0x0105 \
   74|    242|     || defined ICONV_SET_TRANSLITERATE
   75|    242|      || c_strcasecmp (to_codeset, "UTF-8//TRANSLIT") == 0
  ------------------
  |  Branch (75:10): [True: 242, False: 0]
  ------------------
   76|    242|# endif
   77|    242|     )
   78|    242|    cd2 = (iconv_t)(-1);
   79|      0|  else
   80|      0|    {
   81|      0|      cd2 = iconv_open (to_codeset, "UTF-8");
   82|      0|      if (cd2 == (iconv_t)(-1))
  ------------------
  |  Branch (82:11): [True: 0, False: 0]
  ------------------
   83|      0|        {
   84|      0|          int saved_errno = errno;
   85|      0|          if (cd1 != (iconv_t)(-1))
  ------------------
  |  Branch (85:15): [True: 0, False: 0]
  ------------------
   86|      0|            iconv_close (cd1);
   87|      0|          if (cd != (iconv_t)(-1))
  ------------------
  |  Branch (87:15): [True: 0, False: 0]
  ------------------
   88|      0|            iconv_close (cd);
   89|      0|          errno = saved_errno;
   90|      0|          return -1;
   91|      0|        }
   92|      0|    }
   93|       |
   94|    242|  cdp->cd = cd;
   95|    242|  cdp->cd1 = cd1;
   96|    242|  cdp->cd2 = cd2;
   97|    242|  return 0;
   98|    242|}
iconveh_close:
  102|    242|{
  103|    242|  if (cd->cd2 != (iconv_t)(-1) && iconv_close (cd->cd2) < 0)
  ------------------
  |  Branch (103:7): [True: 0, False: 242]
  |  Branch (103:35): [True: 0, False: 0]
  ------------------
  104|      0|    {
  105|       |      /* Return -1, but preserve the errno from iconv_close.  */
  106|      0|      int saved_errno = errno;
  107|      0|      if (cd->cd1 != (iconv_t)(-1))
  ------------------
  |  Branch (107:11): [True: 0, False: 0]
  ------------------
  108|      0|        iconv_close (cd->cd1);
  109|      0|      if (cd->cd != (iconv_t)(-1))
  ------------------
  |  Branch (109:11): [True: 0, False: 0]
  ------------------
  110|      0|        iconv_close (cd->cd);
  111|      0|      errno = saved_errno;
  112|      0|      return -1;
  113|      0|    }
  114|    242|  if (cd->cd1 != (iconv_t)(-1) && iconv_close (cd->cd1) < 0)
  ------------------
  |  Branch (114:7): [True: 242, False: 0]
  |  Branch (114:35): [True: 0, False: 242]
  ------------------
  115|      0|    {
  116|       |      /* Return -1, but preserve the errno from iconv_close.  */
  117|      0|      int saved_errno = errno;
  118|      0|      if (cd->cd != (iconv_t)(-1))
  ------------------
  |  Branch (118:11): [True: 0, False: 0]
  ------------------
  119|      0|        iconv_close (cd->cd);
  120|      0|      errno = saved_errno;
  121|      0|      return -1;
  122|      0|    }
  123|    242|  if (cd->cd != (iconv_t)(-1) && iconv_close (cd->cd) < 0)
  ------------------
  |  Branch (123:7): [True: 242, False: 0]
  |  Branch (123:34): [True: 0, False: 242]
  ------------------
  124|      0|    return -1;
  125|    242|  return 0;
  126|    242|}
mem_cd_iconveh:
 1055|    242|{
 1056|    242|  return mem_cd_iconveh_internal (src, srclen, cd->cd, cd->cd1, cd->cd2,
 1057|    242|                                  handler, 0, offsets, resultp, lengthp);
 1058|    242|}
mem_iconveh:
 1095|    242|{
 1096|    242|  if (srclen == 0)
  ------------------
  |  Branch (1096:7): [True: 0, False: 242]
  ------------------
 1097|      0|    {
 1098|       |      /* Nothing to convert.  */
 1099|      0|      *lengthp = 0;
 1100|      0|      return 0;
 1101|      0|    }
 1102|    242|  else if (offsets == NULL && c_strcasecmp (from_codeset, to_codeset) == 0)
  ------------------
  |  Branch (1102:12): [True: 242, False: 0]
  |  Branch (1102:31): [True: 0, False: 242]
  ------------------
 1103|      0|    {
 1104|      0|      char *result;
 1105|       |
 1106|      0|      if (*resultp != NULL && *lengthp >= srclen)
  ------------------
  |  Branch (1106:11): [True: 0, False: 0]
  |  Branch (1106:31): [True: 0, False: 0]
  ------------------
 1107|      0|        result = *resultp;
 1108|      0|      else
 1109|      0|        {
 1110|      0|          result = (char *) malloc (srclen);
 1111|      0|          if (result == NULL)
  ------------------
  |  Branch (1111:15): [True: 0, False: 0]
  ------------------
 1112|      0|            {
 1113|      0|              errno = ENOMEM;
 1114|      0|              return -1;
 1115|      0|            }
 1116|      0|        }
 1117|      0|      memcpy (result, src, srclen);
 1118|      0|      *resultp = result;
 1119|      0|      *lengthp = srclen;
 1120|      0|      return 0;
 1121|      0|    }
 1122|    242|  else
 1123|    242|    {
 1124|    242|#if HAVE_ICONV
 1125|    242|      iconveh_t cd;
 1126|    242|      char *result;
 1127|    242|      size_t length;
 1128|    242|      int retval;
 1129|       |
 1130|    242|      if (iconveh_open (to_codeset, from_codeset, &cd) < 0)
  ------------------
  |  Branch (1130:11): [True: 0, False: 242]
  ------------------
 1131|      0|        return -1;
 1132|       |
 1133|    242|      result = *resultp;
 1134|    242|      length = *lengthp;
 1135|    242|      retval = mem_cd_iconveh (src, srclen, &cd, handler, offsets,
 1136|    242|                               &result, &length);
 1137|       |
 1138|    242|      if (retval < 0)
  ------------------
  |  Branch (1138:11): [True: 242, False: 0]
  ------------------
 1139|    242|        {
 1140|       |          /* Close cd, but preserve the errno from str_cd_iconv.  */
 1141|    242|          int saved_errno = errno;
 1142|    242|          iconveh_close (&cd);
 1143|    242|          errno = saved_errno;
 1144|    242|        }
 1145|      0|      else
 1146|      0|        {
 1147|      0|          if (iconveh_close (&cd) < 0)
  ------------------
  |  Branch (1147:15): [True: 0, False: 0]
  ------------------
 1148|      0|            {
 1149|      0|              if (result != *resultp)
  ------------------
  |  Branch (1149:19): [True: 0, False: 0]
  ------------------
 1150|      0|                free (result);
 1151|      0|              return -1;
 1152|      0|            }
 1153|      0|          *resultp = result;
 1154|      0|          *lengthp = length;
 1155|      0|        }
 1156|    242|      return retval;
 1157|       |#else
 1158|       |      /* This is a different error code than if iconv_open existed but didn't
 1159|       |         support from_codeset and to_codeset, so that the caller can emit
 1160|       |         an error message such as
 1161|       |           "iconv() is not supported. Installing GNU libiconv and
 1162|       |            then reinstalling this package would fix this."  */
 1163|       |      errno = ENOSYS;
 1164|       |      return -1;
 1165|       |#endif
 1166|    242|    }
 1167|    242|}
striconveh.c:mem_cd_iconveh_internal:
  347|    242|{
  348|       |  /* When a conversion error occurs, we cannot start using CD1 and CD2 at
  349|       |     this point: FROM_CODESET may be a stateful encoding like ISO-2022-KR.
  350|       |     Instead, we have to start afresh from the beginning of SRC.  */
  351|       |  /* Use a temporary buffer, so that for small strings, a single malloc()
  352|       |     call will be sufficient.  */
  353|    242|# define tmpbufsize 4096
  354|       |  /* The alignment is needed when converting e.g. to glibc's WCHAR_T or
  355|       |     libiconv's UCS-4-INTERNAL encoding.  */
  356|    242|  union { unsigned int align; char buf[tmpbufsize]; } tmp;
  357|    242|# define tmpbuf tmp.buf
  358|       |
  359|    242|  char *initial_result;
  360|    242|  char *result;
  361|    242|  size_t allocated;
  362|    242|  size_t length;
  363|    242|  size_t last_length = (size_t)(-1); /* only needed if offsets != NULL */
  364|       |
  365|    242|  if (*resultp != NULL && *lengthp >= sizeof (tmpbuf))
  ------------------
  |  |  357|      0|# define tmpbuf tmp.buf
  ------------------
  |  Branch (365:7): [True: 0, False: 242]
  |  Branch (365:27): [True: 0, False: 0]
  ------------------
  366|      0|    {
  367|      0|      initial_result = *resultp;
  368|      0|      allocated = *lengthp;
  369|      0|    }
  370|    242|  else
  371|    242|    {
  372|    242|      initial_result = tmpbuf;
  ------------------
  |  |  357|    242|# define tmpbuf tmp.buf
  ------------------
  373|    242|      allocated = sizeof (tmpbuf);
  ------------------
  |  |  357|    242|# define tmpbuf tmp.buf
  ------------------
  374|    242|    }
  375|    242|  result = initial_result;
  376|       |
  377|       |  /* Test whether a direct conversion is possible at all.  */
  378|    242|  if (cd == (iconv_t)(-1))
  ------------------
  |  Branch (378:7): [True: 0, False: 242]
  ------------------
  379|      0|    goto indirectly;
  380|       |
  381|    242|  if (offsets != NULL)
  ------------------
  |  Branch (381:7): [True: 0, False: 242]
  ------------------
  382|      0|    {
  383|      0|      size_t i;
  384|       |
  385|      0|      for (i = 0; i < srclen; i++)
  ------------------
  |  Branch (385:19): [True: 0, False: 0]
  ------------------
  386|      0|        offsets[i] = (size_t)(-1);
  387|       |
  388|      0|      last_length = (size_t)(-1);
  389|      0|    }
  390|    242|  length = 0;
  391|       |
  392|       |  /* First, try a direct conversion, and see whether a conversion error
  393|       |     occurs at all.  */
  394|    242|  {
  395|    242|    const char *inptr = src;
  396|    242|    size_t insize = srclen;
  397|       |
  398|       |    /* Set to the initial state.  */
  399|    242|    iconv (cd, NULL, NULL, NULL, NULL);
  400|       |
  401|    280|    while (insize > 0)
  ------------------
  |  Branch (401:12): [True: 280, False: 0]
  ------------------
  402|    280|      {
  403|    280|        char *outptr = result + length;
  404|    280|        size_t outsize = allocated - extra_alloc - length;
  405|    280|        bool incremented;
  406|    280|        size_t res;
  407|    280|        bool grow;
  408|       |
  409|    280|        if (offsets != NULL)
  ------------------
  |  Branch (409:13): [True: 0, False: 280]
  ------------------
  410|      0|          {
  411|      0|            if (length != last_length) /* ensure that offset[] be increasing */
  ------------------
  |  Branch (411:17): [True: 0, False: 0]
  ------------------
  412|      0|              {
  413|      0|                offsets[inptr - src] = length;
  414|      0|                last_length = length;
  415|      0|              }
  416|      0|            res = iconv_carefully_1 (cd,
  417|      0|                                     &inptr, &insize,
  418|      0|                                     &outptr, &outsize,
  419|      0|                                     &incremented);
  420|      0|          }
  421|    280|        else
  422|       |          /* Use iconv_carefully instead of iconv here, because:
  423|       |             - If TO_CODESET is UTF-8, we can do the error handling in this
  424|       |               loop, no need for a second loop,
  425|       |             - With iconv() implementations other than GNU libiconv and GNU
  426|       |               libc, if we use iconv() in a big swoop, checking for an E2BIG
  427|       |               return, we lose the number of irreversible conversions.  */
  428|    280|          res = iconv_carefully (cd,
  ------------------
  |  |  201|    280|     (*(incremented) = false, \
  |  |  202|    280|      iconv (cd, (ICONV_CONST char **) (inbuf), inbytesleft, outbuf, outbytesleft))
  ------------------
  429|    280|                                 &inptr, &insize,
  430|    280|                                 &outptr, &outsize,
  431|    280|                                 &incremented);
  432|       |
  433|    280|        length = outptr - result;
  434|    280|        grow = (length + extra_alloc > allocated / 2);
  435|    280|        if (res == (size_t)(-1))
  ------------------
  |  Branch (435:13): [True: 280, False: 0]
  ------------------
  436|    280|          {
  437|    280|            if (errno == E2BIG)
  ------------------
  |  Branch (437:17): [True: 38, False: 242]
  ------------------
  438|     38|              grow = true;
  439|    242|            else if (errno == EINVAL)
  ------------------
  |  Branch (439:22): [True: 0, False: 242]
  ------------------
  440|      0|              break;
  441|    242|            else if (errno == EILSEQ && handler != iconveh_error)
  ------------------
  |  Branch (441:22): [True: 242, False: 0]
  |  Branch (441:41): [True: 0, False: 242]
  ------------------
  442|      0|              {
  443|      0|                if (cd2 == (iconv_t)(-1))
  ------------------
  |  Branch (443:21): [True: 0, False: 0]
  ------------------
  444|      0|                  {
  445|       |                    /* TO_CODESET is UTF-8.  */
  446|       |                    /* Error handling can produce up to 1 or 3 bytes of
  447|       |                       output.  */
  448|      0|                    size_t extra_need =
  449|      0|                      (handler == iconveh_replacement_character ? 3 : 1);
  ------------------
  |  Branch (449:24): [True: 0, False: 0]
  ------------------
  450|      0|                    if (length + extra_need + extra_alloc > allocated)
  ------------------
  |  Branch (450:25): [True: 0, False: 0]
  ------------------
  451|      0|                      {
  452|      0|                        char *memory;
  453|       |
  454|      0|                        allocated = 2 * allocated;
  455|      0|                        if (length + extra_need + extra_alloc > allocated)
  ------------------
  |  Branch (455:29): [True: 0, False: 0]
  ------------------
  456|      0|                          allocated = 2 * allocated;
  457|      0|                        if (length + extra_need + extra_alloc > allocated)
  ------------------
  |  Branch (457:29): [True: 0, False: 0]
  ------------------
  458|      0|                          abort ();
  459|      0|                        if (result == initial_result)
  ------------------
  |  Branch (459:29): [True: 0, False: 0]
  ------------------
  460|      0|                          memory = (char *) malloc (allocated);
  461|      0|                        else
  462|      0|                          memory = (char *) realloc (result, allocated);
  463|      0|                        if (memory == NULL)
  ------------------
  |  Branch (463:29): [True: 0, False: 0]
  ------------------
  464|      0|                          {
  465|      0|                            if (result != initial_result)
  ------------------
  |  Branch (465:33): [True: 0, False: 0]
  ------------------
  466|      0|                              free (result);
  467|      0|                            errno = ENOMEM;
  468|      0|                            return -1;
  469|      0|                          }
  470|      0|                        if (result == initial_result)
  ------------------
  |  Branch (470:29): [True: 0, False: 0]
  ------------------
  471|      0|                          memcpy (memory, initial_result, length);
  472|      0|                        result = memory;
  473|      0|                        grow = false;
  474|      0|                      }
  475|       |                    /* The input is invalid in FROM_CODESET.  Eat up one byte
  476|       |                       and emit a replacement character or a question mark.  */
  477|      0|                    if (!incremented)
  ------------------
  |  Branch (477:25): [True: 0, False: 0]
  ------------------
  478|      0|                      {
  479|      0|                        if (insize == 0)
  ------------------
  |  Branch (479:29): [True: 0, False: 0]
  ------------------
  480|      0|                          abort ();
  481|      0|                        inptr++;
  482|      0|                        insize--;
  483|      0|                      }
  484|      0|                    if (handler == iconveh_replacement_character)
  ------------------
  |  Branch (484:25): [True: 0, False: 0]
  ------------------
  485|      0|                      {
  486|       |                        /* U+FFFD in UTF-8 encoding.  */
  487|      0|                        result[length+0] = '\357';
  488|      0|                        result[length+1] = '\277';
  489|      0|                        result[length+2] = '\275';
  490|      0|                        length += 3;
  491|      0|                      }
  492|      0|                    else
  493|      0|                      {
  494|      0|                        result[length] = '?';
  495|      0|                        length++;
  496|      0|                      }
  497|      0|                  }
  498|      0|                else
  499|      0|                  goto indirectly;
  500|      0|              }
  501|    242|            else
  502|    242|              {
  503|    242|                if (result != initial_result)
  ------------------
  |  Branch (503:21): [True: 28, False: 214]
  ------------------
  504|     28|                  free (result);
  505|    242|                return -1;
  506|    242|              }
  507|    280|          }
  508|     38|        if (insize == 0)
  ------------------
  |  Branch (508:13): [True: 0, False: 38]
  ------------------
  509|      0|          break;
  510|     38|        if (grow)
  ------------------
  |  Branch (510:13): [True: 38, False: 0]
  ------------------
  511|     38|          {
  512|     38|            char *memory;
  513|       |
  514|     38|            allocated = 2 * allocated;
  515|     38|            if (result == initial_result)
  ------------------
  |  Branch (515:17): [True: 28, False: 10]
  ------------------
  516|     28|              memory = (char *) malloc (allocated);
  517|     10|            else
  518|     10|              memory = (char *) realloc (result, allocated);
  519|     38|            if (memory == NULL)
  ------------------
  |  Branch (519:17): [True: 0, False: 38]
  ------------------
  520|      0|              {
  521|      0|                if (result != initial_result)
  ------------------
  |  Branch (521:21): [True: 0, False: 0]
  ------------------
  522|      0|                  free (result);
  523|      0|                errno = ENOMEM;
  524|      0|                return -1;
  525|      0|              }
  526|     38|            if (result == initial_result)
  ------------------
  |  Branch (526:17): [True: 28, False: 10]
  ------------------
  527|     28|              memcpy (memory, initial_result, length);
  528|     38|            result = memory;
  529|     38|          }
  530|     38|      }
  531|    242|  }
  532|       |
  533|       |  /* Now get the conversion state back to the initial state.
  534|       |     But avoid glibc-2.1 bug and Solaris 2.7 bug.  */
  535|      0|#if defined _LIBICONV_VERSION \
  536|      0|    || !(((__GLIBC__ == 2 && __GLIBC_MINOR__ <= 1) && !defined __UCLIBC__) \
  537|      0|         || defined __sun)
  538|      0|  for (;;)
  539|      0|    {
  540|      0|      char *outptr = result + length;
  541|      0|      size_t outsize = allocated - extra_alloc - length;
  542|      0|      size_t res;
  543|       |
  544|      0|      res = iconv (cd, NULL, NULL, &outptr, &outsize);
  545|      0|      length = outptr - result;
  546|      0|      if (res == (size_t)(-1))
  ------------------
  |  Branch (546:11): [True: 0, False: 0]
  ------------------
  547|      0|        {
  548|      0|          if (errno == E2BIG)
  ------------------
  |  Branch (548:15): [True: 0, False: 0]
  ------------------
  549|      0|            {
  550|      0|              char *memory;
  551|       |
  552|      0|              allocated = 2 * allocated;
  553|      0|              if (result == initial_result)
  ------------------
  |  Branch (553:19): [True: 0, False: 0]
  ------------------
  554|      0|                memory = (char *) malloc (allocated);
  555|      0|              else
  556|      0|                memory = (char *) realloc (result, allocated);
  557|      0|              if (memory == NULL)
  ------------------
  |  Branch (557:19): [True: 0, False: 0]
  ------------------
  558|      0|                {
  559|      0|                  if (result != initial_result)
  ------------------
  |  Branch (559:23): [True: 0, False: 0]
  ------------------
  560|      0|                    free (result);
  561|      0|                  errno = ENOMEM;
  562|      0|                  return -1;
  563|      0|                }
  564|      0|              if (result == initial_result)
  ------------------
  |  Branch (564:19): [True: 0, False: 0]
  ------------------
  565|      0|                memcpy (memory, initial_result, length);
  566|      0|              result = memory;
  567|      0|            }
  568|      0|          else
  569|      0|            {
  570|      0|              if (result != initial_result)
  ------------------
  |  Branch (570:19): [True: 0, False: 0]
  ------------------
  571|      0|                free (result);
  572|      0|              return -1;
  573|      0|            }
  574|      0|        }
  575|      0|      else
  576|      0|        break;
  577|      0|    }
  578|      0|#endif
  579|       |
  580|       |  /* The direct conversion succeeded.  */
  581|      0|  goto done;
  582|       |
  583|      0| indirectly:
  584|       |  /* The direct conversion failed.
  585|       |     Use a conversion through UTF-8.  */
  586|      0|  if (offsets != NULL)
  ------------------
  |  Branch (586:7): [True: 0, False: 0]
  ------------------
  587|      0|    {
  588|      0|      size_t i;
  589|       |
  590|      0|      for (i = 0; i < srclen; i++)
  ------------------
  |  Branch (590:19): [True: 0, False: 0]
  ------------------
  591|      0|        offsets[i] = (size_t)(-1);
  592|       |
  593|      0|      last_length = (size_t)(-1);
  594|      0|    }
  595|      0|  length = 0;
  596|      0|  {
  597|      0|    const bool slowly = (offsets != NULL || handler == iconveh_error);
  ------------------
  |  Branch (597:26): [True: 0, False: 0]
  |  Branch (597:45): [True: 0, False: 0]
  ------------------
  598|      0|# define utf8bufsize 4096 /* may also be smaller or larger than tmpbufsize */
  599|      0|    char utf8buf[utf8bufsize + 3];
  600|      0|    size_t utf8len = 0;
  601|      0|    const char *in1ptr = src;
  602|      0|    size_t in1size = srclen;
  603|      0|    bool do_final_flush1 = true;
  604|      0|    bool do_final_flush2 = true;
  605|       |
  606|       |    /* Set to the initial state.  */
  607|      0|    if (cd1 != (iconv_t)(-1))
  ------------------
  |  Branch (607:9): [True: 0, False: 0]
  ------------------
  608|      0|      iconv (cd1, NULL, NULL, NULL, NULL);
  609|      0|    if (cd2 != (iconv_t)(-1))
  ------------------
  |  Branch (609:9): [True: 0, False: 0]
  ------------------
  610|      0|      iconv (cd2, NULL, NULL, NULL, NULL);
  611|       |
  612|      0|    while (in1size > 0 || do_final_flush1 || utf8len > 0 || do_final_flush2)
  ------------------
  |  Branch (612:12): [True: 0, False: 0]
  |  Branch (612:27): [True: 0, False: 0]
  |  Branch (612:46): [True: 0, False: 0]
  |  Branch (612:61): [True: 0, False: 0]
  ------------------
  613|      0|      {
  614|      0|        char *out1ptr = utf8buf + utf8len;
  615|      0|        size_t out1size = utf8bufsize - utf8len;
  ------------------
  |  |  598|      0|# define utf8bufsize 4096 /* may also be smaller or larger than tmpbufsize */
  ------------------
  616|      0|        bool incremented1;
  617|      0|        size_t res1;
  618|      0|        int errno1;
  619|       |
  620|       |        /* Conversion step 1: from FROM_CODESET to UTF-8.  */
  621|      0|        if (in1size > 0)
  ------------------
  |  Branch (621:13): [True: 0, False: 0]
  ------------------
  622|      0|          {
  623|      0|            if (offsets != NULL
  ------------------
  |  Branch (623:17): [True: 0, False: 0]
  ------------------
  624|      0|                && length != last_length) /* ensure that offset[] be increasing */
  ------------------
  |  Branch (624:20): [True: 0, False: 0]
  ------------------
  625|      0|              {
  626|      0|                offsets[in1ptr - src] = length;
  627|      0|                last_length = length;
  628|      0|              }
  629|      0|            if (cd1 != (iconv_t)(-1))
  ------------------
  |  Branch (629:17): [True: 0, False: 0]
  ------------------
  630|      0|              {
  631|      0|                if (slowly)
  ------------------
  |  Branch (631:21): [True: 0, False: 0]
  ------------------
  632|      0|                  res1 = iconv_carefully_1 (cd1,
  633|      0|                                            &in1ptr, &in1size,
  634|      0|                                            &out1ptr, &out1size,
  635|      0|                                            &incremented1);
  636|      0|                else
  637|      0|                  res1 = iconv_carefully (cd1,
  ------------------
  |  |  201|      0|     (*(incremented) = false, \
  |  |  202|      0|      iconv (cd, (ICONV_CONST char **) (inbuf), inbytesleft, outbuf, outbytesleft))
  ------------------
  638|      0|                                          &in1ptr, &in1size,
  639|      0|                                          &out1ptr, &out1size,
  640|      0|                                          &incremented1);
  641|      0|              }
  642|      0|            else
  643|      0|              {
  644|       |                /* FROM_CODESET is UTF-8.  */
  645|      0|                res1 = utf8conv_carefully (slowly,
  646|      0|                                           &in1ptr, &in1size,
  647|      0|                                           &out1ptr, &out1size,
  648|      0|                                           &incremented1);
  649|      0|              }
  650|      0|          }
  651|      0|        else if (do_final_flush1)
  ------------------
  |  Branch (651:18): [True: 0, False: 0]
  ------------------
  652|      0|          {
  653|       |            /* Now get the conversion state of CD1 back to the initial state.
  654|       |               But avoid glibc-2.1 bug and Solaris 2.7 bug.  */
  655|      0|# if defined _LIBICONV_VERSION \
  656|      0|     || !(((__GLIBC__ == 2 && __GLIBC_MINOR__ <= 1) && !defined __UCLIBC__) \
  657|      0|          || defined __sun)
  658|      0|            if (cd1 != (iconv_t)(-1))
  ------------------
  |  Branch (658:17): [True: 0, False: 0]
  ------------------
  659|      0|              res1 = iconv (cd1, NULL, NULL, &out1ptr, &out1size);
  660|      0|            else
  661|      0|# endif
  662|      0|              res1 = 0;
  663|      0|            do_final_flush1 = false;
  664|      0|            incremented1 = true;
  665|      0|          }
  666|      0|        else
  667|      0|          {
  668|      0|            res1 = 0;
  669|      0|            incremented1 = true;
  670|      0|          }
  671|      0|        if (res1 == (size_t)(-1)
  ------------------
  |  Branch (671:13): [True: 0, False: 0]
  ------------------
  672|      0|            && !(errno == E2BIG || errno == EINVAL || errno == EILSEQ))
  ------------------
  |  Branch (672:18): [True: 0, False: 0]
  |  Branch (672:36): [True: 0, False: 0]
  |  Branch (672:55): [True: 0, False: 0]
  ------------------
  673|      0|          {
  674|      0|            if (result != initial_result)
  ------------------
  |  Branch (674:17): [True: 0, False: 0]
  ------------------
  675|      0|              free (result);
  676|      0|            return -1;
  677|      0|          }
  678|      0|        if (res1 == (size_t)(-1)
  ------------------
  |  Branch (678:13): [True: 0, False: 0]
  ------------------
  679|      0|            && errno == EILSEQ && handler != iconveh_error)
  ------------------
  |  Branch (679:16): [True: 0, False: 0]
  |  Branch (679:35): [True: 0, False: 0]
  ------------------
  680|      0|          {
  681|       |            /* The input is invalid in FROM_CODESET.  Eat up one byte and
  682|       |               emit a U+FFFD character or a question mark.  Room for this
  683|       |               character was allocated at the end of utf8buf.  */
  684|      0|            if (!incremented1)
  ------------------
  |  Branch (684:17): [True: 0, False: 0]
  ------------------
  685|      0|              {
  686|      0|                if (in1size == 0)
  ------------------
  |  Branch (686:21): [True: 0, False: 0]
  ------------------
  687|      0|                  abort ();
  688|      0|                in1ptr++;
  689|      0|                in1size--;
  690|      0|              }
  691|      0|            if (handler == iconveh_replacement_character)
  ------------------
  |  Branch (691:17): [True: 0, False: 0]
  ------------------
  692|      0|              {
  693|       |                /* U+FFFD in UTF-8 encoding.  */
  694|      0|                out1ptr[0] = '\357';
  695|      0|                out1ptr[1] = '\277';
  696|      0|                out1ptr[2] = '\275';
  697|      0|                out1ptr += 3;
  698|      0|              }
  699|      0|            else
  700|      0|              *out1ptr++ = '?';
  701|      0|            res1 = 0;
  702|      0|          }
  703|      0|        errno1 = errno;
  704|      0|        utf8len = out1ptr - utf8buf;
  705|       |
  706|      0|        if (offsets != NULL
  ------------------
  |  Branch (706:13): [True: 0, False: 0]
  ------------------
  707|      0|            || in1size == 0
  ------------------
  |  Branch (707:16): [True: 0, False: 0]
  ------------------
  708|      0|            || utf8len > utf8bufsize / 2
  ------------------
  |  |  598|      0|# define utf8bufsize 4096 /* may also be smaller or larger than tmpbufsize */
  ------------------
  |  Branch (708:16): [True: 0, False: 0]
  ------------------
  709|      0|            || (res1 == (size_t)(-1) && errno1 == E2BIG))
  ------------------
  |  Branch (709:17): [True: 0, False: 0]
  |  Branch (709:41): [True: 0, False: 0]
  ------------------
  710|      0|          {
  711|       |            /* Conversion step 2: from UTF-8 to TO_CODESET.  */
  712|      0|            const char *in2ptr = utf8buf;
  713|      0|            size_t in2size = utf8len;
  714|       |
  715|      0|            while (in2size > 0
  ------------------
  |  Branch (715:20): [True: 0, False: 0]
  ------------------
  716|      0|                   || (in1size == 0 && !do_final_flush1 && do_final_flush2))
  ------------------
  |  Branch (716:24): [True: 0, False: 0]
  |  Branch (716:40): [True: 0, False: 0]
  |  Branch (716:60): [True: 0, False: 0]
  ------------------
  717|      0|              {
  718|      0|                char *out2ptr = result + length;
  719|      0|                size_t out2size = allocated - extra_alloc - length;
  720|      0|                bool incremented2;
  721|      0|                size_t res2;
  722|      0|                bool grow;
  723|       |
  724|      0|                if (in2size > 0)
  ------------------
  |  Branch (724:21): [True: 0, False: 0]
  ------------------
  725|      0|                  {
  726|      0|                    if (cd2 != (iconv_t)(-1))
  ------------------
  |  Branch (726:25): [True: 0, False: 0]
  ------------------
  727|      0|                      res2 = iconv_carefully (cd2,
  ------------------
  |  |  201|      0|     (*(incremented) = false, \
  |  |  202|      0|      iconv (cd, (ICONV_CONST char **) (inbuf), inbytesleft, outbuf, outbytesleft))
  ------------------
  728|      0|                                              &in2ptr, &in2size,
  729|      0|                                              &out2ptr, &out2size,
  730|      0|                                              &incremented2);
  731|      0|                    else
  732|       |                      /* TO_CODESET is UTF-8.  */
  733|      0|                      res2 = utf8conv_carefully (false,
  734|      0|                                                 &in2ptr, &in2size,
  735|      0|                                                 &out2ptr, &out2size,
  736|      0|                                                 &incremented2);
  737|      0|                  }
  738|      0|                else /* in1size == 0 && !do_final_flush1
  739|       |                        && in2size == 0 && do_final_flush2 */
  740|      0|                  {
  741|       |                    /* Now get the conversion state of CD1 back to the initial
  742|       |                       state.  But avoid glibc-2.1 bug and Solaris 2.7 bug.  */
  743|      0|# if defined _LIBICONV_VERSION \
  744|      0|     || !(((__GLIBC__ == 2 && __GLIBC_MINOR__ <= 1) && !defined __UCLIBC__) \
  745|      0|          || defined __sun)
  746|      0|                    if (cd2 != (iconv_t)(-1))
  ------------------
  |  Branch (746:25): [True: 0, False: 0]
  ------------------
  747|      0|                      res2 = iconv (cd2, NULL, NULL, &out2ptr, &out2size);
  748|      0|                    else
  749|      0|# endif
  750|      0|                      res2 = 0;
  751|      0|                    do_final_flush2 = false;
  752|      0|                    incremented2 = true;
  753|      0|                  }
  754|       |
  755|      0|                length = out2ptr - result;
  756|      0|                grow = (length + extra_alloc > allocated / 2);
  757|      0|                if (res2 == (size_t)(-1))
  ------------------
  |  Branch (757:21): [True: 0, False: 0]
  ------------------
  758|      0|                  {
  759|      0|                    if (errno == E2BIG)
  ------------------
  |  Branch (759:25): [True: 0, False: 0]
  ------------------
  760|      0|                      grow = true;
  761|      0|                    else if (errno == EINVAL)
  ------------------
  |  Branch (761:30): [True: 0, False: 0]
  ------------------
  762|      0|                      break;
  763|      0|                    else if (errno == EILSEQ && handler != iconveh_error)
  ------------------
  |  Branch (763:30): [True: 0, False: 0]
  |  Branch (763:49): [True: 0, False: 0]
  ------------------
  764|      0|                      {
  765|       |                        /* Error handling can produce up to 10 bytes of UTF-8
  766|       |                           output.  But TO_CODESET may be UCS-2, UTF-16 or
  767|       |                           UCS-4, so use CD2 here as well.  */
  768|      0|                        char scratchbuf[10];
  769|      0|                        size_t scratchlen;
  770|      0|                        ucs4_t uc;
  771|      0|                        const char *inptr;
  772|      0|                        size_t insize;
  773|      0|                        size_t res;
  774|       |
  775|      0|                        if (incremented2)
  ------------------
  |  Branch (775:29): [True: 0, False: 0]
  ------------------
  776|      0|                          {
  777|      0|                            if (u8_prev (&uc, (const uint8_t *) in2ptr,
  ------------------
  |  Branch (777:33): [True: 0, False: 0]
  ------------------
  778|      0|                                         (const uint8_t *) utf8buf)
  779|      0|                                == NULL)
  780|      0|                              abort ();
  781|      0|                          }
  782|      0|                        else
  783|      0|                          {
  784|      0|                            int n;
  785|      0|                            if (in2size == 0)
  ------------------
  |  Branch (785:33): [True: 0, False: 0]
  ------------------
  786|      0|                              abort ();
  787|      0|                            n = u8_mbtouc_unsafe (&uc, (const uint8_t *) in2ptr,
  788|      0|                                                  in2size);
  789|      0|                            in2ptr += n;
  790|      0|                            in2size -= n;
  791|      0|                          }
  792|       |
  793|      0|                        if (handler == iconveh_escape_sequence)
  ------------------
  |  Branch (793:29): [True: 0, False: 0]
  ------------------
  794|      0|                          {
  795|      0|                            static char const hex[16] = "0123456789ABCDEF";
  796|      0|                            scratchlen = 0;
  797|      0|                            scratchbuf[scratchlen++] = '\\';
  798|      0|                            if (uc < 0x10000)
  ------------------
  |  Branch (798:33): [True: 0, False: 0]
  ------------------
  799|      0|                              scratchbuf[scratchlen++] = 'u';
  800|      0|                            else
  801|      0|                              {
  802|      0|                                scratchbuf[scratchlen++] = 'U';
  803|      0|                                scratchbuf[scratchlen++] = hex[(uc>>28) & 15];
  804|      0|                                scratchbuf[scratchlen++] = hex[(uc>>24) & 15];
  805|      0|                                scratchbuf[scratchlen++] = hex[(uc>>20) & 15];
  806|      0|                                scratchbuf[scratchlen++] = hex[(uc>>16) & 15];
  807|      0|                              }
  808|      0|                            scratchbuf[scratchlen++] = hex[(uc>>12) & 15];
  809|      0|                            scratchbuf[scratchlen++] = hex[(uc>>8) & 15];
  810|      0|                            scratchbuf[scratchlen++] = hex[(uc>>4) & 15];
  811|      0|                            scratchbuf[scratchlen++] = hex[uc & 15];
  812|      0|                          }
  813|      0|                        else if (handler == iconveh_replacement_character)
  ------------------
  |  Branch (813:34): [True: 0, False: 0]
  ------------------
  814|      0|                          {
  815|       |                            /* U+FFFD in UTF-8 encoding.  */
  816|      0|                            scratchbuf[0] = '\357';
  817|      0|                            scratchbuf[1] = '\277';
  818|      0|                            scratchbuf[2] = '\275';
  819|      0|                            scratchlen = 3;
  820|      0|                          }
  821|      0|                        else
  822|      0|                          {
  823|      0|                            scratchbuf[0] = '?';
  824|      0|                            scratchlen = 1;
  825|      0|                          }
  826|       |
  827|      0|                        inptr = scratchbuf;
  828|      0|                        insize = scratchlen;
  829|      0|                        if (cd2 != (iconv_t)(-1))
  ------------------
  |  Branch (829:29): [True: 0, False: 0]
  ------------------
  830|      0|                          {
  831|      0|                            char *out2ptr_try = out2ptr;
  832|      0|                            size_t out2size_try = out2size;
  833|      0|                            res = iconv (cd2,
  834|      0|                                         (ICONV_CONST char **) &inptr, &insize,
  835|      0|                                         &out2ptr_try, &out2size_try);
  836|      0|                            if (handler == iconveh_replacement_character
  ------------------
  |  Branch (836:33): [True: 0, False: 0]
  ------------------
  837|      0|                                && (res == (size_t)(-1)
  ------------------
  |  Branch (837:36): [True: 0, False: 0]
  |  Branch (837:37): [True: 0, False: 0]
  ------------------
  838|      0|                                    ? errno == EILSEQ
  839|       |                                    /* FreeBSD iconv(), NetBSD iconv(), and
  840|       |                                       Solaris 11 iconv() insert a '?' if they
  841|       |                                       cannot convert.  This is what we want.
  842|       |                                       But IRIX iconv() inserts a NUL byte if it
  843|       |                                       cannot convert.
  844|       |                                       And musl libc iconv() inserts a '*' if it
  845|       |                                       cannot convert.  */
  846|      0|                                    : (res > 0
  ------------------
  |  Branch (846:40): [True: 0, False: 0]
  ------------------
  847|      0|                                       && !(out2ptr_try - out2ptr == 1
  ------------------
  |  Branch (847:45): [True: 0, False: 0]
  ------------------
  848|      0|                                            && *out2ptr == '?'))))
  ------------------
  |  Branch (848:48): [True: 0, False: 0]
  ------------------
  849|      0|                              {
  850|       |                                /* The iconv() call failed.
  851|       |                                   U+FFFD can't be converted to TO_CODESET.
  852|       |                                   Use '?' instead.  */
  853|      0|                                scratchbuf[0] = '?';
  854|      0|                                scratchlen = 1;
  855|      0|                                inptr = scratchbuf;
  856|      0|                                insize = scratchlen;
  857|      0|                                res = iconv (cd2,
  858|      0|                                             (ICONV_CONST char **) &inptr, &insize,
  859|      0|                                             &out2ptr, &out2size);
  860|      0|                              }
  861|      0|                            else
  862|      0|                              {
  863|       |                                /* Accept the results of the iconv() call.  */
  864|      0|                                out2ptr = out2ptr_try;
  865|      0|                                out2size = out2size_try;
  866|      0|                                res = 0;
  867|      0|                              }
  868|      0|                          }
  869|      0|                        else
  870|      0|                          {
  871|       |                            /* TO_CODESET is UTF-8.  */
  872|      0|                            if (out2size >= insize)
  ------------------
  |  Branch (872:33): [True: 0, False: 0]
  ------------------
  873|      0|                              {
  874|      0|                                memcpy (out2ptr, inptr, insize);
  875|      0|                                out2ptr += insize;
  876|      0|                                out2size -= insize;
  877|      0|                                inptr += insize;
  878|      0|                                insize = 0;
  879|      0|                                res = 0;
  880|      0|                              }
  881|      0|                            else
  882|      0|                              {
  883|      0|                                errno = E2BIG;
  884|      0|                                res = (size_t)(-1);
  885|      0|                              }
  886|      0|                          }
  887|      0|                        length = out2ptr - result;
  888|      0|                        if (res == (size_t)(-1) && errno == E2BIG)
  ------------------
  |  Branch (888:29): [True: 0, False: 0]
  |  Branch (888:52): [True: 0, False: 0]
  ------------------
  889|      0|                          {
  890|      0|                            char *memory;
  891|       |
  892|      0|                            allocated = 2 * allocated;
  893|      0|                            if (length + 1 + extra_alloc > allocated)
  ------------------
  |  Branch (893:33): [True: 0, False: 0]
  ------------------
  894|      0|                              abort ();
  895|      0|                            if (result == initial_result)
  ------------------
  |  Branch (895:33): [True: 0, False: 0]
  ------------------
  896|      0|                              memory = (char *) malloc (allocated);
  897|      0|                            else
  898|      0|                              memory = (char *) realloc (result, allocated);
  899|      0|                            if (memory == NULL)
  ------------------
  |  Branch (899:33): [True: 0, False: 0]
  ------------------
  900|      0|                              {
  901|      0|                                if (result != initial_result)
  ------------------
  |  Branch (901:37): [True: 0, False: 0]
  ------------------
  902|      0|                                  free (result);
  903|      0|                                errno = ENOMEM;
  904|      0|                                return -1;
  905|      0|                              }
  906|      0|                            if (result == initial_result)
  ------------------
  |  Branch (906:33): [True: 0, False: 0]
  ------------------
  907|      0|                              memcpy (memory, initial_result, length);
  908|      0|                            result = memory;
  909|      0|                            grow = false;
  910|       |
  911|      0|                            out2ptr = result + length;
  912|      0|                            out2size = allocated - extra_alloc - length;
  913|      0|                            if (cd2 != (iconv_t)(-1))
  ------------------
  |  Branch (913:33): [True: 0, False: 0]
  ------------------
  914|      0|                              res = iconv (cd2,
  915|      0|                                           (ICONV_CONST char **) &inptr,
  916|      0|                                           &insize,
  917|      0|                                           &out2ptr, &out2size);
  918|      0|                            else
  919|      0|                              {
  920|       |                                /* TO_CODESET is UTF-8.  */
  921|      0|                                if (!(out2size >= insize))
  ------------------
  |  Branch (921:37): [True: 0, False: 0]
  ------------------
  922|      0|                                  abort ();
  923|      0|                                memcpy (out2ptr, inptr, insize);
  924|      0|                                out2ptr += insize;
  925|      0|                                out2size -= insize;
  926|      0|                                inptr += insize;
  927|      0|                                insize = 0;
  928|      0|                                res = 0;
  929|      0|                              }
  930|      0|                            length = out2ptr - result;
  931|      0|                          }
  932|       |# if !(defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) \
  933|       |     && !(defined __GLIBC__ && !defined __UCLIBC__)
  934|       |                        /* IRIX iconv() inserts a NUL byte if it cannot convert.
  935|       |                           FreeBSD iconv(), NetBSD iconv(), and Solaris 11
  936|       |                           iconv() insert a '?' if they cannot convert.
  937|       |                           musl libc iconv() inserts a '*' if it cannot convert.
  938|       |                           Only GNU libiconv (excluding the bastard Apple iconv)
  939|       |                           and GNU libc are known to prefer to fail rather than
  940|       |                           doing a lossy conversion.  */
  941|       |                        if (res != (size_t)(-1) && res > 0)
  942|       |                          {
  943|       |                            errno = EILSEQ;
  944|       |                            res = (size_t)(-1);
  945|       |                          }
  946|       |# endif
  947|      0|                        if (res == (size_t)(-1))
  ------------------
  |  Branch (947:29): [True: 0, False: 0]
  ------------------
  948|      0|                          {
  949|       |                            /* Failure converting the ASCII replacement.  */
  950|      0|                            if (result != initial_result)
  ------------------
  |  Branch (950:33): [True: 0, False: 0]
  ------------------
  951|      0|                              free (result);
  952|      0|                            return -1;
  953|      0|                          }
  954|      0|                      }
  955|      0|                    else
  956|      0|                      {
  957|      0|                        if (result != initial_result)
  ------------------
  |  Branch (957:29): [True: 0, False: 0]
  ------------------
  958|      0|                          free (result);
  959|      0|                        return -1;
  960|      0|                      }
  961|      0|                  }
  962|      0|                if (!(in2size > 0
  ------------------
  |  Branch (962:23): [True: 0, False: 0]
  ------------------
  963|      0|                      || (in1size == 0 && !do_final_flush1 && do_final_flush2)))
  ------------------
  |  Branch (963:27): [True: 0, False: 0]
  |  Branch (963:43): [True: 0, False: 0]
  |  Branch (963:63): [True: 0, False: 0]
  ------------------
  964|      0|                  break;
  965|      0|                if (grow)
  ------------------
  |  Branch (965:21): [True: 0, False: 0]
  ------------------
  966|      0|                  {
  967|      0|                    char *memory;
  968|       |
  969|      0|                    allocated = 2 * allocated;
  970|      0|                    if (result == initial_result)
  ------------------
  |  Branch (970:25): [True: 0, False: 0]
  ------------------
  971|      0|                      memory = (char *) malloc (allocated);
  972|      0|                    else
  973|      0|                      memory = (char *) realloc (result, allocated);
  974|      0|                    if (memory == NULL)
  ------------------
  |  Branch (974:25): [True: 0, False: 0]
  ------------------
  975|      0|                      {
  976|      0|                        if (result != initial_result)
  ------------------
  |  Branch (976:29): [True: 0, False: 0]
  ------------------
  977|      0|                          free (result);
  978|      0|                        errno = ENOMEM;
  979|      0|                        return -1;
  980|      0|                      }
  981|      0|                    if (result == initial_result)
  ------------------
  |  Branch (981:25): [True: 0, False: 0]
  ------------------
  982|      0|                      memcpy (memory, initial_result, length);
  983|      0|                    result = memory;
  984|      0|                  }
  985|      0|              }
  986|       |
  987|       |            /* Move the remaining bytes to the beginning of utf8buf.  */
  988|      0|            if (in2size > 0)
  ------------------
  |  Branch (988:17): [True: 0, False: 0]
  ------------------
  989|      0|              memmove (utf8buf, in2ptr, in2size);
  990|      0|            utf8len = in2size;
  991|      0|          }
  992|       |
  993|      0|        if (res1 == (size_t)(-1))
  ------------------
  |  Branch (993:13): [True: 0, False: 0]
  ------------------
  994|      0|          {
  995|      0|            if (errno1 == EINVAL)
  ------------------
  |  Branch (995:17): [True: 0, False: 0]
  ------------------
  996|      0|              in1size = 0;
  997|      0|            else if (errno1 == EILSEQ)
  ------------------
  |  Branch (997:22): [True: 0, False: 0]
  ------------------
  998|      0|              {
  999|      0|                if (result != initial_result)
  ------------------
  |  Branch (999:21): [True: 0, False: 0]
  ------------------
 1000|      0|                  free (result);
 1001|      0|                errno = errno1;
 1002|      0|                return -1;
 1003|      0|              }
 1004|      0|          }
 1005|      0|      }
 1006|      0|# undef utf8bufsize
 1007|      0|  }
 1008|       |
 1009|      0| done:
 1010|       |  /* Now the final memory allocation.  */
 1011|      0|  if (result == tmpbuf)
  ------------------
  |  |  357|      0|# define tmpbuf tmp.buf
  ------------------
  |  Branch (1011:7): [True: 0, False: 0]
  ------------------
 1012|      0|    {
 1013|      0|      size_t memsize = length + extra_alloc;
 1014|       |
 1015|      0|      if (*resultp != NULL && *lengthp >= memsize)
  ------------------
  |  Branch (1015:11): [True: 0, False: 0]
  |  Branch (1015:31): [True: 0, False: 0]
  ------------------
 1016|      0|        result = *resultp;
 1017|      0|      else
 1018|      0|        {
 1019|      0|          char *memory;
 1020|       |
 1021|      0|          memory = (char *) malloc (memsize > 0 ? memsize : 1);
  ------------------
  |  Branch (1021:37): [True: 0, False: 0]
  ------------------
 1022|      0|          if (memory != NULL)
  ------------------
  |  Branch (1022:15): [True: 0, False: 0]
  ------------------
 1023|      0|            result = memory;
 1024|      0|          else
 1025|      0|            {
 1026|      0|              errno = ENOMEM;
 1027|      0|              return -1;
 1028|      0|            }
 1029|      0|        }
 1030|      0|      memcpy (result, tmpbuf, length);
  ------------------
  |  |  357|      0|# define tmpbuf tmp.buf
  ------------------
 1031|      0|    }
 1032|      0|  else if (result != *resultp && length + extra_alloc < allocated)
  ------------------
  |  Branch (1032:12): [True: 0, False: 0]
  |  Branch (1032:34): [True: 0, False: 0]
  ------------------
 1033|      0|    {
 1034|       |      /* Shrink the allocated memory if possible.  */
 1035|      0|      size_t memsize = length + extra_alloc;
 1036|      0|      char *memory;
 1037|       |
 1038|      0|      memory = (char *) realloc (result, memsize > 0 ? memsize : 1);
  ------------------
  |  Branch (1038:42): [True: 0, False: 0]
  ------------------
 1039|      0|      if (memory != NULL)
  ------------------
  |  Branch (1039:11): [True: 0, False: 0]
  ------------------
 1040|      0|        result = memory;
 1041|      0|    }
 1042|      0|  *resultp = result;
 1043|      0|  *lengthp = length;
 1044|      0|  return 0;
 1045|      0|# undef tmpbuf
 1046|      0|# undef tmpbufsize
 1047|      0|}

mem_iconveha:
  214|    242|{
  215|    242|  if (srclen == 0)
  ------------------
  |  Branch (215:7): [True: 0, False: 242]
  ------------------
  216|      0|    {
  217|       |      /* Nothing to convert.  */
  218|      0|      *lengthp = 0;
  219|      0|      return 0;
  220|      0|    }
  221|       |
  222|       |  /* When using GNU libc >= 2.2 or GNU libiconv >= 1.5 or Citrus/FreeBSD/macOS
  223|       |     iconv, we want to use transliteration.  */
  224|    242|#if (((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2) \
  225|    242|     && !defined __UCLIBC__) \
  226|    242|    || _LIBICONV_VERSION >= 0x0105 \
  227|    242|    || defined ICONV_SET_TRANSLITERATE
  228|    242|  if (transliterate)
  ------------------
  |  Branch (228:7): [True: 242, False: 0]
  ------------------
  229|    242|    {
  230|    242|      int retval;
  231|    242|      size_t len = strlen (to_codeset);
  232|    242|      char *to_codeset_suffixed = (char *) malloca (len + 10 + 1);
  ------------------
  |  |   86|    242|    ((N) < 4032 - (2 * sa_alignment_max - 1)                                   \
  |  |  ------------------
  |  |  |  Branch (86:6): [True: 242, False: 0]
  |  |  ------------------
  |  |   87|    242|     ? (void *) (((uintptr_t) (char *) alloca ((N) + 2 * sa_alignment_max - 1) \
  |  |   88|    242|                  + (2 * sa_alignment_max - 1))                                \
  |  |   89|    242|                 & ~(uintptr_t)(2 * sa_alignment_max - 1))                     \
  |  |   90|    242|     : mmalloca (N))
  ------------------
  233|    242|      if (to_codeset_suffixed == NULL)
  ------------------
  |  Branch (233:11): [True: 0, False: 242]
  ------------------
  234|      0|        {
  235|      0|          errno = ENOMEM;
  236|      0|          return -1;
  237|      0|        }
  238|    242|      memcpy (to_codeset_suffixed, to_codeset, len);
  239|    242|      memcpy (to_codeset_suffixed + len, "//TRANSLIT", 10 + 1);
  240|       |
  241|    242|      retval = mem_iconveha_notranslit (src, srclen,
  242|    242|                                        from_codeset, to_codeset_suffixed,
  243|    242|                                        handler, offsets, resultp, lengthp);
  244|       |
  245|    242|      freea (to_codeset_suffixed);
  246|       |
  247|    242|      return retval;
  248|    242|    }
  249|      0|  else
  250|      0|#endif
  251|      0|    return mem_iconveha_notranslit (src, srclen,
  252|      0|                                    from_codeset, to_codeset,
  253|      0|                                    handler, offsets, resultp, lengthp);
  254|    242|}
striconveha.c:mem_iconveha_notranslit:
  151|    242|{
  152|    242|  int retval = mem_iconveh (src, srclen, from_codeset, to_codeset, handler,
  153|    242|                            offsets, resultp, lengthp);
  154|    242|  if (retval >= 0 || errno != EINVAL)
  ------------------
  |  Branch (154:7): [True: 0, False: 242]
  |  Branch (154:22): [True: 242, False: 0]
  ------------------
  155|    242|    return retval;
  156|      0|  else
  157|      0|    {
  158|      0|      struct autodetect_alias *alias;
  159|       |
  160|       |      /* Unsupported from_codeset or to_codeset. Check whether the caller
  161|       |         requested autodetection.  */
  162|      0|      for (alias = autodetect_list; alias != NULL; alias = alias->next)
  ------------------
  |  Branch (162:37): [True: 0, False: 0]
  ------------------
  163|      0|        if (strcmp (from_codeset, alias->name) == 0)
  ------------------
  |  Branch (163:13): [True: 0, False: 0]
  ------------------
  164|      0|          {
  165|      0|            const char * const *encodings;
  166|       |
  167|      0|            if (handler != iconveh_error)
  ------------------
  |  Branch (167:17): [True: 0, False: 0]
  ------------------
  168|      0|              {
  169|       |                /* First try all encodings without any forgiving.  */
  170|      0|                encodings = alias->encodings_to_try;
  171|      0|                do
  172|      0|                  {
  173|      0|                    retval = mem_iconveha_notranslit (src, srclen,
  174|      0|                                                      *encodings, to_codeset,
  175|      0|                                                      iconveh_error, offsets,
  176|      0|                                                      resultp, lengthp);
  177|      0|                    if (!(retval < 0 && errno == EILSEQ))
  ------------------
  |  Branch (177:27): [True: 0, False: 0]
  |  Branch (177:41): [True: 0, False: 0]
  ------------------
  178|      0|                      return retval;
  179|      0|                    encodings++;
  180|      0|                  }
  181|      0|                while (*encodings != NULL);
  ------------------
  |  Branch (181:24): [True: 0, False: 0]
  ------------------
  182|      0|              }
  183|       |
  184|      0|            encodings = alias->encodings_to_try;
  185|      0|            do
  186|      0|              {
  187|      0|                retval = mem_iconveha_notranslit (src, srclen,
  188|      0|                                                  *encodings, to_codeset,
  189|      0|                                                  handler, offsets,
  190|      0|                                                  resultp, lengthp);
  191|      0|                if (!(retval < 0 && errno == EILSEQ))
  ------------------
  |  Branch (191:23): [True: 0, False: 0]
  |  Branch (191:37): [True: 0, False: 0]
  ------------------
  192|      0|                  return retval;
  193|      0|                encodings++;
  194|      0|              }
  195|      0|            while (*encodings != NULL);
  ------------------
  |  Branch (195:20): [True: 0, False: 0]
  ------------------
  196|       |
  197|       |            /* Return the last call's result.  */
  198|      0|            return -1;
  199|      0|          }
  200|       |
  201|       |      /* It wasn't an autodetection name.  */
  202|      0|      errno = EINVAL;
  203|      0|      return -1;
  204|      0|    }
  205|    242|}

u8_strconv_from_encoding:
   21|    242|{
   22|    242|  UNIT *result;
  ------------------
  |  |   31|    242|#define UNIT uint8_t
  ------------------
   23|    242|  size_t length;
   24|       |
   25|    242|  result =
   26|    242|    U_CONV_FROM_ENCODING (fromcode, handler,
  ------------------
  |  |   32|    242|#define U_CONV_FROM_ENCODING u8_conv_from_encoding
  ------------------
   27|    242|                          string, strlen (string) + 1, NULL,
   28|    242|                          NULL, &length);
   29|    242|  if (result == NULL)
  ------------------
  |  Branch (29:7): [True: 242, False: 0]
  ------------------
   30|    242|    return NULL;
   31|       |  /* Verify the result has exactly one NUL unit, at the end.  */
   32|      0|  if (!(length > 0 && result[length-1] == 0
  ------------------
  |  Branch (32:9): [True: 0, False: 0]
  |  Branch (32:23): [True: 0, False: 0]
  ------------------
   33|      0|        && U_STRLEN (result) == length-1))
  ------------------
  |  |   33|      0|#define U_STRLEN u8_strlen
  ------------------
  |  Branch (33:12): [True: 0, False: 0]
  ------------------
   34|      0|    {
   35|      0|      free (result);
   36|      0|      errno = EILSEQ;
   37|      0|      return NULL;
   38|      0|    }
   39|      0|  return result;
   40|      0|}

u8_conv_from_encoding:
   38|    242|{
   39|    242|  if (STRCASEEQ (fromcode, "UTF-8", 'U','T','F','-','8',0,0,0,0))
  ------------------
  |  |  179|    242|  strcaseeq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28)
  |  |  ------------------
  |  |  |  Branch (179:3): [True: 0, False: 242]
  |  |  ------------------
  ------------------
   40|      0|    {
   41|       |      /* Conversion from UTF-8 to UTF-8.  No need to go through iconv().  */
   42|      0|      uint8_t *result;
   43|       |
   44|      0|      if (u8_check ((const uint8_t *) src, srclen))
  ------------------
  |  Branch (44:11): [True: 0, False: 0]
  ------------------
   45|      0|        {
   46|      0|          errno = EILSEQ;
   47|      0|          return NULL;
   48|      0|        }
   49|       |
   50|      0|      if (offsets != NULL)
  ------------------
  |  Branch (50:11): [True: 0, False: 0]
  ------------------
   51|      0|        {
   52|      0|          size_t i;
   53|       |
   54|      0|          for (i = 0; i < srclen; )
  ------------------
  |  Branch (54:23): [True: 0, False: 0]
  ------------------
   55|      0|            {
   56|      0|              int count = u8_mblen ((const uint8_t *) src + i, srclen - i);
   57|       |              /* We can rely on count > 0 because of the previous u8_check.  */
   58|      0|              if (count <= 0)
  ------------------
  |  Branch (58:19): [True: 0, False: 0]
  ------------------
   59|      0|                abort ();
   60|      0|              offsets[i] = i;
   61|      0|              i++;
   62|      0|              while (--count > 0)
  ------------------
  |  Branch (62:22): [True: 0, False: 0]
  ------------------
   63|      0|                offsets[i++] = (size_t)(-1);
   64|      0|            }
   65|      0|        }
   66|       |
   67|       |      /* Memory allocation.  */
   68|      0|      if (resultbuf != NULL && *lengthp >= srclen)
  ------------------
  |  Branch (68:11): [True: 0, False: 0]
  |  Branch (68:32): [True: 0, False: 0]
  ------------------
   69|      0|        result = resultbuf;
   70|      0|      else
   71|      0|        {
   72|      0|          result = (uint8_t *) malloc (srclen > 0 ? srclen : 1);
  ------------------
  |  Branch (72:40): [True: 0, False: 0]
  ------------------
   73|      0|          if (result == NULL)
  ------------------
  |  Branch (73:15): [True: 0, False: 0]
  ------------------
   74|      0|            {
   75|      0|              errno = ENOMEM;
   76|      0|              return NULL;
   77|      0|            }
   78|      0|        }
   79|       |
   80|      0|      if (srclen > 0)
  ------------------
  |  Branch (80:11): [True: 0, False: 0]
  ------------------
   81|      0|        memcpy ((char *) result, src, srclen);
   82|      0|      *lengthp = srclen;
   83|      0|      return result;
   84|      0|    }
   85|    242|  else
   86|    242|    {
   87|    242|      char *result = (char *) resultbuf;
   88|    242|      size_t length = *lengthp;
   89|       |
   90|    242|      if (mem_iconveha (src, srclen, fromcode, "UTF-8", true, handler,
  ------------------
  |  Branch (90:11): [True: 242, False: 0]
  ------------------
   91|    242|                        offsets, &result, &length) < 0)
   92|    242|        return NULL;
   93|       |
   94|      0|      if (result == NULL) /* when (resultbuf == NULL && length == 0)  */
  ------------------
  |  Branch (94:11): [True: 0, False: 0]
  ------------------
   95|      0|        {
   96|      0|          result = (char *) malloc (1);
   97|      0|          if (result == NULL)
  ------------------
  |  Branch (97:15): [True: 0, False: 0]
  ------------------
   98|      0|            {
   99|      0|              errno = ENOMEM;
  100|      0|              return NULL;
  101|      0|            }
  102|      0|        }
  103|      0|      *lengthp = length;
  104|      0|      return (uint8_t *) result;
  105|      0|    }
  106|    242|}

_ZN4absl12lts_2024011620PrefetchToLocalCacheEPKv:
  146|   135k|    const void* addr) {
  147|   135k|  __builtin_prefetch(addr, 0, 3);
  148|   135k|}

_ZN4absl12lts_2024011612log_internal12Check_EQImplIbbEEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKT_RKT0_PKc:
  348|  1.61k|                                             const char* exprtext) {     \
  349|  1.61k|    using U1 = CheckOpStreamType<T1>;                                    \
  350|  1.61k|    using U2 = CheckOpStreamType<T2>;                                    \
  351|  1.61k|    return ABSL_PREDICT_TRUE(v1 op v2)                                   \
  ------------------
  |  |  179|  1.61k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 1.61k, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 1.61k]
  |  |  |  Branch (179:57): [True: 1.61k, False: 0]
  |  |  ------------------
  ------------------
  352|  1.61k|               ? nullptr                                                 \
  353|  1.61k|               : ABSL_LOG_INTERNAL_CHECK_OP_IMPL_RESULT(U1, U2, v1, v2,  \
  ------------------
  |  |  338|      0|  MakeCheckOpString<U1, U2>(v1, v2, exprtext)
  ------------------
  354|  1.61k|                                                        exprtext);       \
  355|  1.61k|  }                                                                      \
_ZN4absl12lts_2024011612log_internal21GetReferenceableValueIbEERKT_S5_:
  386|  3.23k|inline constexpr const T& GetReferenceableValue(const T& t) {
  387|  3.23k|  return t;
  388|  3.23k|}
_ZN4absl12lts_2024011612log_internal12Check_GEImplEiiPKc:
  357|  47.5k|                                             const char* exprtext) {     \
  358|  47.5k|    return name##Impl<int, int>(v1, v2, exprtext);                       \
  359|  47.5k|  }
_ZN4absl12lts_2024011612log_internal12Check_GEImplIiiEEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKT_RKT0_PKc:
  348|  47.5k|                                             const char* exprtext) {     \
  349|  47.5k|    using U1 = CheckOpStreamType<T1>;                                    \
  350|  47.5k|    using U2 = CheckOpStreamType<T2>;                                    \
  351|  47.5k|    return ABSL_PREDICT_TRUE(v1 op v2)                                   \
  ------------------
  |  |  179|  47.5k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 47.5k, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 47.5k]
  |  |  |  Branch (179:57): [True: 47.5k, False: 0]
  |  |  ------------------
  ------------------
  352|  47.5k|               ? nullptr                                                 \
  353|  47.5k|               : ABSL_LOG_INTERNAL_CHECK_OP_IMPL_RESULT(U1, U2, v1, v2,  \
  ------------------
  |  |  338|      0|  MakeCheckOpString<U1, U2>(v1, v2, exprtext)
  ------------------
  354|  47.5k|                                                        exprtext);       \
  355|  47.5k|  }                                                                      \
_ZN4absl12lts_2024011612log_internal21GetReferenceableValueEi:
  399|   130k|inline constexpr int GetReferenceableValue(int t) { return t; }
_ZN4absl12lts_2024011612log_internal12Check_LTImplEiiPKc:
  357|  9.01k|                                             const char* exprtext) {     \
  358|  9.01k|    return name##Impl<int, int>(v1, v2, exprtext);                       \
  359|  9.01k|  }
_ZN4absl12lts_2024011612log_internal12Check_LTImplIiiEEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKT_RKT0_PKc:
  348|  9.01k|                                             const char* exprtext) {     \
  349|  9.01k|    using U1 = CheckOpStreamType<T1>;                                    \
  350|  9.01k|    using U2 = CheckOpStreamType<T2>;                                    \
  351|  9.01k|    return ABSL_PREDICT_TRUE(v1 op v2)                                   \
  ------------------
  |  |  179|  9.01k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 9.01k, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 9.01k]
  |  |  |  Branch (179:57): [True: 9.01k, False: 0]
  |  |  ------------------
  ------------------
  352|  9.01k|               ? nullptr                                                 \
  353|  9.01k|               : ABSL_LOG_INTERNAL_CHECK_OP_IMPL_RESULT(U1, U2, v1, v2,  \
  ------------------
  |  |  338|      0|  MakeCheckOpString<U1, U2>(v1, v2, exprtext)
  ------------------
  354|  9.01k|                                                        exprtext);       \
  355|  9.01k|  }                                                                      \
_ZN4absl12lts_2024011612log_internal12Check_GTImplEiiPKc:
  357|    252|                                             const char* exprtext) {     \
  358|    252|    return name##Impl<int, int>(v1, v2, exprtext);                       \
  359|    252|  }
_ZN4absl12lts_2024011612log_internal12Check_GTImplIiiEEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKT_RKT0_PKc:
  348|    252|                                             const char* exprtext) {     \
  349|    252|    using U1 = CheckOpStreamType<T1>;                                    \
  350|    252|    using U2 = CheckOpStreamType<T2>;                                    \
  351|    252|    return ABSL_PREDICT_TRUE(v1 op v2)                                   \
  ------------------
  |  |  179|    252|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 252, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 252]
  |  |  |  Branch (179:57): [True: 252, False: 0]
  |  |  ------------------
  ------------------
  352|    252|               ? nullptr                                                 \
  353|    252|               : ABSL_LOG_INTERNAL_CHECK_OP_IMPL_RESULT(U1, U2, v1, v2,  \
  ------------------
  |  |  338|      0|  MakeCheckOpString<U1, U2>(v1, v2, exprtext)
  ------------------
  354|    252|                                                        exprtext);       \
  355|    252|  }                                                                      \
_ZN4absl12lts_2024011612log_internal12Check_NEImplIPcDnEEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERKT_RKT0_PKc:
  348|      3|                                             const char* exprtext) {     \
  349|      3|    using U1 = CheckOpStreamType<T1>;                                    \
  350|      3|    using U2 = CheckOpStreamType<T2>;                                    \
  351|      3|    return ABSL_PREDICT_TRUE(v1 op v2)                                   \
  ------------------
  |  |  179|      3|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 3, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 3]
  |  |  |  Branch (179:57): [True: 3, False: 0]
  |  |  ------------------
  ------------------
  352|      3|               ? nullptr                                                 \
  353|      3|               : ABSL_LOG_INTERNAL_CHECK_OP_IMPL_RESULT(U1, U2, v1, v2,  \
  ------------------
  |  |  338|      0|  MakeCheckOpString<U1, U2>(v1, v2, exprtext)
  ------------------
  354|      3|                                                        exprtext);       \
  355|      3|  }                                                                      \
_ZN4absl12lts_2024011612log_internal21GetReferenceableValueIPcEERKT_S6_:
  386|      3|inline constexpr const T& GetReferenceableValue(const T& t) {
  387|      3|  return t;
  388|      3|}
_ZN4absl12lts_2024011612log_internal21GetReferenceableValueIDnEERKT_S5_:
  386|      6|inline constexpr const T& GetReferenceableValue(const T& t) {
  387|      6|  return t;
  388|      6|}
_ZN4absl12lts_2024011612log_internal12Check_EQImplIiiEEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKT_RKT0_PKc:
  348|  2.43k|                                             const char* exprtext) {     \
  349|  2.43k|    using U1 = CheckOpStreamType<T1>;                                    \
  350|  2.43k|    using U2 = CheckOpStreamType<T2>;                                    \
  351|  2.43k|    return ABSL_PREDICT_TRUE(v1 op v2)                                   \
  ------------------
  |  |  179|  2.43k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 2.43k, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 2.43k]
  |  |  |  Branch (179:57): [True: 2.43k, False: 0]
  |  |  ------------------
  ------------------
  352|  2.43k|               ? nullptr                                                 \
  353|  2.43k|               : ABSL_LOG_INTERNAL_CHECK_OP_IMPL_RESULT(U1, U2, v1, v2,  \
  ------------------
  |  |  338|      0|  MakeCheckOpString<U1, U2>(v1, v2, exprtext)
  ------------------
  354|  2.43k|                                                        exprtext);       \
  355|  2.43k|  }                                                                      \
_ZN4absl12lts_2024011612log_internal12Check_LEImplIiiEEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKT_RKT0_PKc:
  348|  6.15k|                                             const char* exprtext) {     \
  349|  6.15k|    using U1 = CheckOpStreamType<T1>;                                    \
  350|  6.15k|    using U2 = CheckOpStreamType<T2>;                                    \
  351|  6.15k|    return ABSL_PREDICT_TRUE(v1 op v2)                                   \
  ------------------
  |  |  179|  6.15k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 6.15k, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 6.15k]
  |  |  |  Branch (179:57): [True: 6.15k, False: 0]
  |  |  ------------------
  ------------------
  352|  6.15k|               ? nullptr                                                 \
  353|  6.15k|               : ABSL_LOG_INTERNAL_CHECK_OP_IMPL_RESULT(U1, U2, v1, v2,  \
  ------------------
  |  |  338|      0|  MakeCheckOpString<U1, U2>(v1, v2, exprtext)
  ------------------
  354|  6.15k|                                                        exprtext);       \
  355|  6.15k|  }                                                                      \
_ZN4absl12lts_2024011612log_internal12Check_EQImplEiiPKc:
  357|  2.43k|                                             const char* exprtext) {     \
  358|  2.43k|    return name##Impl<int, int>(v1, v2, exprtext);                       \
  359|  2.43k|  }
_ZN4absl12lts_2024011612log_internal12Check_LEImplEiiPKc:
  357|  6.15k|                                             const char* exprtext) {     \
  358|  6.15k|    return name##Impl<int, int>(v1, v2, exprtext);                       \
  359|  6.15k|  }
_ZN4absl12lts_2024011612log_internal21GetReferenceableValueEm:
  405|  1.36k|    unsigned long t) {                                             // NOLINT
  406|  1.36k|  return t;
  407|  1.36k|}
_ZN4absl12lts_2024011612log_internal12Check_LEImplImmEEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKT_RKT0_PKc:
  348|    677|                                             const char* exprtext) {     \
  349|    677|    using U1 = CheckOpStreamType<T1>;                                    \
  350|    677|    using U2 = CheckOpStreamType<T2>;                                    \
  351|    677|    return ABSL_PREDICT_TRUE(v1 op v2)                                   \
  ------------------
  |  |  179|    677|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 677, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 677]
  |  |  |  Branch (179:57): [True: 677, False: 0]
  |  |  ------------------
  ------------------
  352|    677|               ? nullptr                                                 \
  353|    677|               : ABSL_LOG_INTERNAL_CHECK_OP_IMPL_RESULT(U1, U2, v1, v2,  \
  ------------------
  |  |  338|      0|  MakeCheckOpString<U1, U2>(v1, v2, exprtext)
  ------------------
  354|    677|                                                        exprtext);       \
  355|    677|  }                                                                      \
_ZN4absl12lts_2024011612log_internal12Check_EQImplImmEEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKT_RKT0_PKc:
  348|      3|                                             const char* exprtext) {     \
  349|      3|    using U1 = CheckOpStreamType<T1>;                                    \
  350|      3|    using U2 = CheckOpStreamType<T2>;                                    \
  351|      3|    return ABSL_PREDICT_TRUE(v1 op v2)                                   \
  ------------------
  |  |  179|      3|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 3, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 3]
  |  |  |  Branch (179:57): [True: 3, False: 0]
  |  |  ------------------
  ------------------
  352|      3|               ? nullptr                                                 \
  353|      3|               : ABSL_LOG_INTERNAL_CHECK_OP_IMPL_RESULT(U1, U2, v1, v2,  \
  ------------------
  |  |  338|      0|  MakeCheckOpString<U1, U2>(v1, v2, exprtext)
  ------------------
  354|      3|                                                        exprtext);       \
  355|      3|  }                                                                      \
_ZN4absl12lts_2024011612log_internal21GetReferenceableValueIPvEERKT_S6_:
  386|      3|inline constexpr const T& GetReferenceableValue(const T& t) {
  387|      3|  return t;
  388|      3|}
_ZN4absl12lts_2024011612log_internal12Check_NEImplIPvDnEEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERKT_RKT0_PKc:
  348|      3|                                             const char* exprtext) {     \
  349|      3|    using U1 = CheckOpStreamType<T1>;                                    \
  350|      3|    using U2 = CheckOpStreamType<T2>;                                    \
  351|      3|    return ABSL_PREDICT_TRUE(v1 op v2)                                   \
  ------------------
  |  |  179|      3|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 3, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 3]
  |  |  |  Branch (179:57): [True: 3, False: 0]
  |  |  ------------------
  ------------------
  352|      3|               ? nullptr                                                 \
  353|      3|               : ABSL_LOG_INTERNAL_CHECK_OP_IMPL_RESULT(U1, U2, v1, v2,  \
  ------------------
  |  |  338|      0|  MakeCheckOpString<U1, U2>(v1, v2, exprtext)
  ------------------
  354|      3|                                                        exprtext);       \
  355|      3|  }                                                                      \

_ZN4absl12lts_2024011611countl_zeroImEENSt3__19enable_ifIXsr3std11is_unsignedIT_EE5valueEiE4typeES4_:
  103|  1.94k|    countl_zero(T x) noexcept {
  104|  1.94k|  return numeric_internal::CountLeadingZeroes(x);
  105|  1.94k|}
_ZN4absl12lts_202401169bit_widthImEENSt3__19enable_ifIXsr3std11is_unsignedIT_EE5valueEiE4typeES4_:
  160|    208|    bit_width(T x) noexcept {
  161|    208|  return std::numeric_limits<T>::digits - countl_zero(x);
  162|    208|}
_ZN4absl12lts_2024011611countl_zeroIjEENSt3__19enable_ifIXsr3std11is_unsignedIT_EE5valueEiE4typeES4_:
  103|  1.00k|    countl_zero(T x) noexcept {
  104|  1.00k|  return numeric_internal::CountLeadingZeroes(x);
  105|  1.00k|}

_ZN4absl12lts_2024011616numeric_internal20CountLeadingZeroes32Ej:
  133|  1.00k|CountLeadingZeroes32(uint32_t x) {
  134|  1.00k|#if ABSL_NUMERIC_INTERNAL_HAVE_BUILTIN_OR_GCC(__builtin_clz)
  135|       |  // Use __builtin_clz, which uses the following instructions:
  136|       |  //  x86: bsr, lzcnt
  137|       |  //  ARM64: clz
  138|       |  //  PPC: cntlzd
  139|       |
  140|  1.00k|  static_assert(sizeof(unsigned int) == sizeof(x),
  141|  1.00k|                "__builtin_clz does not take 32-bit arg");
  142|       |  // Handle 0 as a special case because __builtin_clz(0) is undefined.
  143|  1.00k|  return x == 0 ? 32 : __builtin_clz(x);
  ------------------
  |  Branch (143:10): [True: 0, False: 1.00k]
  ------------------
  144|       |#elif defined(_MSC_VER) && !defined(__clang__)
  145|       |  unsigned long result = 0;  // NOLINT(runtime/int)
  146|       |  if (_BitScanReverse(&result, x)) {
  147|       |    return 31 - result;
  148|       |  }
  149|       |  return 32;
  150|       |#else
  151|       |  int zeroes = 28;
  152|       |  if (x >> 16) {
  153|       |    zeroes -= 16;
  154|       |    x >>= 16;
  155|       |  }
  156|       |  if (x >> 8) {
  157|       |    zeroes -= 8;
  158|       |    x >>= 8;
  159|       |  }
  160|       |  if (x >> 4) {
  161|       |    zeroes -= 4;
  162|       |    x >>= 4;
  163|       |  }
  164|       |  return "\4\3\2\2\1\1\1\1\0\0\0\0\0\0\0"[x] + zeroes;
  165|       |#endif
  166|  1.00k|}
_ZN4absl12lts_2024011616numeric_internal20CountLeadingZeroes64Em:
  180|  1.94k|CountLeadingZeroes64(uint64_t x) {
  181|  1.94k|#if ABSL_NUMERIC_INTERNAL_HAVE_BUILTIN_OR_GCC(__builtin_clzll)
  182|       |  // Use __builtin_clzll, which uses the following instructions:
  183|       |  //  x86: bsr, lzcnt
  184|       |  //  ARM64: clz
  185|       |  //  PPC: cntlzd
  186|  1.94k|  static_assert(sizeof(unsigned long long) == sizeof(x),  // NOLINT(runtime/int)
  187|  1.94k|                "__builtin_clzll does not take 64-bit arg");
  188|       |
  189|       |  // Handle 0 as a special case because __builtin_clzll(0) is undefined.
  190|  1.94k|  return x == 0 ? 64 : __builtin_clzll(x);
  ------------------
  |  Branch (190:10): [True: 0, False: 1.94k]
  ------------------
  191|       |#elif defined(_MSC_VER) && !defined(__clang__) && \
  192|       |    (defined(_M_X64) || defined(_M_ARM64))
  193|       |  // MSVC does not have __buitin_clzll. Use _BitScanReverse64.
  194|       |  unsigned long result = 0;  // NOLINT(runtime/int)
  195|       |  if (_BitScanReverse64(&result, x)) {
  196|       |    return 63 - result;
  197|       |  }
  198|       |  return 64;
  199|       |#elif defined(_MSC_VER) && !defined(__clang__)
  200|       |  // MSVC does not have __buitin_clzll. Compose two calls to _BitScanReverse
  201|       |  unsigned long result = 0;  // NOLINT(runtime/int)
  202|       |  if ((x >> 32) &&
  203|       |      _BitScanReverse(&result, static_cast<unsigned long>(x >> 32))) {
  204|       |    return 31 - result;
  205|       |  }
  206|       |  if (_BitScanReverse(&result, static_cast<unsigned long>(x))) {
  207|       |    return 63 - result;
  208|       |  }
  209|       |  return 64;
  210|       |#else
  211|       |  int zeroes = 60;
  212|       |  if (x >> 32) {
  213|       |    zeroes -= 32;
  214|       |    x >>= 32;
  215|       |  }
  216|       |  if (x >> 16) {
  217|       |    zeroes -= 16;
  218|       |    x >>= 16;
  219|       |  }
  220|       |  if (x >> 8) {
  221|       |    zeroes -= 8;
  222|       |    x >>= 8;
  223|       |  }
  224|       |  if (x >> 4) {
  225|       |    zeroes -= 4;
  226|       |    x >>= 4;
  227|       |  }
  228|       |  return "\4\3\2\2\1\1\1\1\0\0\0\0\0\0\0"[x] + zeroes;
  229|       |#endif
  230|  1.94k|}
_ZN4absl12lts_2024011616numeric_internal18CountLeadingZeroesImEEiT_:
  234|  1.94k|CountLeadingZeroes(T x) {
  235|  1.94k|  static_assert(std::is_unsigned<T>::value, "T must be unsigned");
  236|  1.94k|  static_assert(IsPowerOf2(std::numeric_limits<T>::digits),
  237|  1.94k|                "T must have a power-of-2 size");
  238|  1.94k|  static_assert(sizeof(T) <= sizeof(uint64_t), "T too large");
  239|  1.94k|  return sizeof(T) <= sizeof(uint16_t)
  ------------------
  |  Branch (239:10): [Folded, False: 1.94k]
  ------------------
  240|  1.94k|             ? CountLeadingZeroes16(static_cast<uint16_t>(x)) -
  241|      0|                   (std::numeric_limits<uint16_t>::digits -
  242|      0|                    std::numeric_limits<T>::digits)
  243|  1.94k|             : (sizeof(T) <= sizeof(uint32_t)
  ------------------
  |  Branch (243:17): [Folded, False: 1.94k]
  ------------------
  244|  1.94k|                    ? CountLeadingZeroes32(static_cast<uint32_t>(x)) -
  245|      0|                          (std::numeric_limits<uint32_t>::digits -
  246|      0|                           std::numeric_limits<T>::digits)
  247|  1.94k|                    : CountLeadingZeroes64(x));
  248|  1.94k|}
_ZN4absl12lts_2024011616numeric_internal18CountLeadingZeroesIjEEiT_:
  234|  1.00k|CountLeadingZeroes(T x) {
  235|  1.00k|  static_assert(std::is_unsigned<T>::value, "T must be unsigned");
  236|  1.00k|  static_assert(IsPowerOf2(std::numeric_limits<T>::digits),
  237|  1.00k|                "T must have a power-of-2 size");
  238|  1.00k|  static_assert(sizeof(T) <= sizeof(uint64_t), "T too large");
  239|  1.00k|  return sizeof(T) <= sizeof(uint16_t)
  ------------------
  |  Branch (239:10): [Folded, False: 1.00k]
  ------------------
  240|  1.00k|             ? CountLeadingZeroes16(static_cast<uint16_t>(x)) -
  241|      0|                   (std::numeric_limits<uint16_t>::digits -
  242|      0|                    std::numeric_limits<T>::digits)
  243|  1.00k|             : (sizeof(T) <= sizeof(uint32_t)
  ------------------
  |  Branch (243:17): [True: 1.00k, Folded]
  ------------------
  244|  1.00k|                    ? CountLeadingZeroes32(static_cast<uint32_t>(x)) -
  245|  1.00k|                          (std::numeric_limits<uint32_t>::digits -
  246|  1.00k|                           std::numeric_limits<T>::digits)
  247|  1.00k|                    : CountLeadingZeroes64(x));
  248|  1.00k|}

_ZN4absl12lts_2024011611string_viewC2INSt3__19allocatorIcEEEERKNS3_12basic_stringIcNS3_11char_traitsIcEET_EE:
  192|  14.5k|      : string_view(str.data(), str.size(), SkipCheckLengthTag{}) {}
_ZN4absl12lts_2024011611string_viewC2EPKcmNS1_18SkipCheckLengthTagE:
  663|  14.5k|      : ptr_(data), length_(len) {}
_ZN4absl12lts_2024011611string_viewC2EPKc:
  200|  1.06k|      : ptr_(str), length_(str ? StrlenInternal(str) : 0) {}
  ------------------
  |  Branch (200:28): [True: 1.06k, False: 0]
  ------------------
_ZN4absl12lts_2024011611string_view14StrlenInternalEPKc:
  672|  1.06k|  static constexpr size_type StrlenInternal(absl::Nonnull<const char*> str) {
  673|       |#if defined(_MSC_VER) && _MSC_VER >= 1910 && !defined(__clang__)
  674|       |    // MSVC 2017+ can evaluate this at compile-time.
  675|       |    const char* begin = str;
  676|       |    while (*str != '\0') ++str;
  677|       |    return str - begin;
  678|       |#elif ABSL_HAVE_BUILTIN(__builtin_strlen) || \
  679|       |    (defined(__GNUC__) && !defined(__clang__))
  680|       |    // GCC has __builtin_strlen according to
  681|       |    // https://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Other-Builtins.html, but
  682|       |    // ABSL_HAVE_BUILTIN doesn't detect that, so we use the extra checks above.
  683|       |    // __builtin_strlen is constexpr.
  684|  1.06k|    return __builtin_strlen(str);
  685|       |#else
  686|       |    return str ? strlen(str) : 0;
  687|       |#endif
  688|  1.06k|  }

_ZN6google8protobuf3Any10descriptorEv:
  113|  13.0k|  static const ::google::protobuf::Descriptor* descriptor() {
  114|  13.0k|    return GetDescriptor();
  115|  13.0k|  }
_ZN6google8protobuf3Any13GetDescriptorEv:
  116|  13.0k|  static const ::google::protobuf::Descriptor* GetDescriptor() {
  117|  13.0k|    return default_instance().GetMetadata().descriptor;
  118|  13.0k|  }
_ZN6google8protobuf3Any16default_instanceEv:
  122|  13.0k|  static const Any& default_instance() {
  123|  13.0k|    return *internal_default_instance();
  124|  13.0k|  }
_ZN6google8protobuf3Any25internal_default_instanceEv:
  125|  13.0k|  static inline const Any* internal_default_instance() {
  126|  13.0k|    return reinterpret_cast<const Any*>(
  127|  13.0k|        &_Any_default_instance_);
  128|  13.0k|  }

_ZN6google8protobuf5Arena15AllocateAlignedEmm:
  264|    577|  void* AllocateAligned(size_t size, size_t align = 8) {
  265|    577|    if (align <= internal::ArenaAlignDefault::align) {
  ------------------
  |  Branch (265:9): [True: 577, False: 0]
  ------------------
  266|    577|      return Allocate(internal::ArenaAlignDefault::Ceil(size));
  267|    577|    } else {
  268|       |      // We are wasting space by over allocating align - 8 bytes. Compared
  269|       |      // to a dedicated function that takes current alignment in consideration.
  270|       |      // Such a scheme would only waste (align - 8)/2 bytes on average, but
  271|       |      // requires a dedicated function in the outline arena allocation
  272|       |      // functions. Possibly re-evaluate tradeoffs later.
  273|      0|      auto align_as = internal::ArenaAlignAs(align);
  274|      0|      return align_as.Ceil(Allocate(align_as.Padded(size)));
  275|      0|    }
  276|    577|  }
_ZN6google8protobuf5Arena17ReturnArrayMemoryEPvm:
  527|     60|  void ReturnArrayMemory(void* p, size_t size) {
  528|     60|    impl_.ReturnArrayMemory(p, size);
  529|     60|  }
_ZN6google8protobuf5Arena23AllocateAlignedForArrayEmm:
  634|    148|  void* AllocateAlignedForArray(size_t n, size_t align) {
  635|    148|    if (align <= internal::ArenaAlignDefault::align) {
  ------------------
  |  Branch (635:9): [True: 148, False: 0]
  ------------------
  636|    148|      return AllocateForArray(internal::ArenaAlignDefault::Ceil(n));
  637|    148|    } else {
  638|       |      // We are wasting space by over allocating align - 8 bytes. Compared
  639|       |      // to a dedicated function that takes current alignment in consideration.
  640|       |      // Such a scheme would only waste (align - 8)/2 bytes on average, but
  641|       |      // requires a dedicated function in the outline arena allocation
  642|       |      // functions. Possibly re-evaluate tradeoffs later.
  643|      0|      auto align_as = internal::ArenaAlignAs(align);
  644|      0|      return align_as.Ceil(AllocateForArray(align_as.Padded(n)));
  645|      0|    }
  646|    148|  }
_ZN6google8protobuf5Arena11CreateArrayIcEEPT_PS1_m:
  286|    148|                                               size_t num_elements) {
  287|    148|    static_assert(std::is_trivial<T>::value,
  288|    148|                  "CreateArray requires a trivially constructible type");
  289|    148|    static_assert(std::is_trivially_destructible<T>::value,
  290|    148|                  "CreateArray requires a trivially destructible type");
  291|    148|    ABSL_CHECK_LE(num_elements, std::numeric_limits<size_t>::max() / sizeof(T))
  ------------------
  |  |   54|      0|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|    148|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|    148|  while (                                                                      \
  |  |  |  |  |  |   62|    148|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 148]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|    148|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|    148|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|    148|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|    148|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|    148|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|    148|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|    148|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|    148|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  292|      0|        << "Requested size is too large to fit into size_t.";
  293|    148|    if (PROTOBUF_PREDICT_FALSE(arena == nullptr)) {
  ------------------
  |  |  365|    148|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 148]
  |  |  |  Branch (365:54): [Folded, False: 148]
  |  |  |  Branch (365:63): [True: 0, False: 148]
  |  |  ------------------
  ------------------
  294|      0|      return new T[num_elements];
  295|    148|    } else {
  296|       |      // We count on compiler to realize that if sizeof(T) is a multiple of
  297|       |      // 8 AlignUpTo can be elided.
  298|    148|      return static_cast<T*>(
  299|    148|          arena->AllocateAlignedForArray(sizeof(T) * num_elements, alignof(T)));
  300|    148|    }
  301|    148|  }

_ZN6google8protobuf8internal17ArenaAlignDefault4CeilEm:
   79|    725|  static inline PROTOBUF_ALWAYS_INLINE constexpr size_t Ceil(size_t n) {
   80|    725|    return (n + align - 1) & ~(align - 1);
   81|    725|  }

_ZN6google8protobuf8internal15TaggedStringPtrC2EPNS1_21ExplicitlyConstructedINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEELm8EEE:
  111|  5.37k|      : ptr_(ptr) {}
_ZNK6google8protobuf8internal15TaggedStringPtr9IsDefaultEv:
  144|  5.14k|  inline bool IsDefault() const { return (as_int() & kMask) == kDefault; }
_ZNK6google8protobuf8internal15TaggedStringPtr3GetEv:
  167|  16.8k|  inline std::string* Get() const {
  168|  16.8k|    return reinterpret_cast<std::string*>(as_int() & ~kMask);
  169|  16.8k|  }
_ZNK6google8protobuf8internal15TaggedStringPtr6as_intEv:
  203|  44.5k|  uintptr_t as_int() const { return reinterpret_cast<uintptr_t>(ptr_); }
_ZN6google8protobuf8internal14ArenaStringPtrC2EPNS0_5ArenaE:
  242|  4.65k|      : tagged_ptr_(&fixed_address_empty_string) {
  243|  4.65k|    if (DebugHardenForceCopyDefaultString()) {
  ------------------
  |  Branch (243:9): [Folded, False: 4.65k]
  ------------------
  244|      0|      Set(absl::string_view(""), arena);
  245|      0|    }
  246|  4.65k|  }
_ZNK6google8protobuf8internal14ArenaStringPtr3GetEv:
  335|  13.3k|  PROTOBUF_NDEBUG_INLINE const std::string& Get() const {
  336|       |    // Unconditionally mask away the tag.
  337|  13.3k|    return *tagged_ptr_.Get();
  338|  13.3k|  }
_ZN6google8protobuf8internal14ArenaStringPtr11InitDefaultEv:
  451|    718|inline void ArenaStringPtr::InitDefault() {
  452|    718|  tagged_ptr_ = TaggedStringPtr(&fixed_address_empty_string);
  453|    718|}

_ZNK6google8protobuf10Descriptor4fileEv:
 2510|    273|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf10Descriptor11field_countEv:
 2510|   103k|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf10Descriptor5fieldEi:
 2529|  89.9k|  inline TYPE CLASS::FIELD(int index) const {              \
 2530|  89.9k|    ABSL_DCHECK_LE(0, index);                              \
  ------------------
  |  |   78|  89.9k|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|  89.9k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  89.9k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 89.9k]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  89.9k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|  89.9k|    ABSL_DCHECK_LT(index, FIELD##_count());                \
  ------------------
  |  |   80|  89.9k|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|  89.9k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  89.9k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 89.9k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  89.9k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2532|  89.9k|    return FIELD##s_ + index;                              \
 2533|  89.9k|  }
_ZNK6google8protobuf10Descriptor7optionsEv:
 2536|  61.8k|  inline const TYPE& CLASS::options() const { return *options_; }
_ZNK6google8protobuf15OneofDescriptor11field_countEv:
 2510|      9|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf14EnumDescriptor11value_countEv:
 2510|  1.09k|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf14EnumDescriptor5valueEi:
 2529|  1.16k|  inline TYPE CLASS::FIELD(int index) const {              \
 2530|  1.16k|    ABSL_DCHECK_LE(0, index);                              \
  ------------------
  |  |   78|  1.16k|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|  1.16k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  1.16k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 1.16k]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  1.16k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|  1.16k|    ABSL_DCHECK_LT(index, FIELD##_count());                \
  ------------------
  |  |   80|  1.16k|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|  1.16k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  1.16k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 1.16k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  1.16k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2532|  1.16k|    return FIELD##s_ + index;                              \
 2533|  1.16k|  }
_ZNK6google8protobuf19EnumValueDescriptor4typeEv:
 2510|  2.16k|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf15FieldDescriptor16containing_oneofEv:
 2711|    712|inline const OneofDescriptor* FieldDescriptor::containing_oneof() const {
 2712|    712|  if (is_oneof_) {
  ------------------
  |  Branch (2712:7): [True: 23, False: 689]
  ------------------
 2713|     23|    auto* res = scope_.containing_oneof;
 2714|     23|    PROTOBUF_ASSUME(res != nullptr);
  ------------------
  |  |  941|     23|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
 2715|     23|    return res;
 2716|     23|  }
 2717|    689|  return nullptr;
 2718|    712|}
_ZNK6google8protobuf15FieldDescriptor4typeEv:
 2734|   153k|inline FieldDescriptor::Type FieldDescriptor::type() const {
 2735|   153k|  return static_cast<Type>(type_);
 2736|   153k|}
_ZNK6google8protobuf15FieldDescriptor11is_repeatedEv:
 2742|  46.2k|inline bool FieldDescriptor::is_repeated() const {
 2743|  46.2k|  ABSL_DCHECK_EQ(is_repeated_, label() == LABEL_REPEATED);
  ------------------
  |  |   74|  46.2k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|  46.2k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  46.2k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 46.2k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  46.2k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2744|  46.2k|  return is_repeated_;
 2745|  46.2k|}
_ZNK6google8protobuf19EnumValueDescriptor5indexEv:
 2813|    190|inline int EnumValueDescriptor::index() const {
 2814|    190|  return static_cast<int>(this - type_->values_);
 2815|    190|}
_ZNK6google8protobuf15FieldDescriptor8cpp_typeEv:
 2833|   112k|inline FieldDescriptor::CppType FieldDescriptor::cpp_type() const {
 2834|   112k|  return kTypeToCppTypeMap[type()];
 2835|   112k|}

_ZNK6google8protobuf14MessageOptions9map_entryEv:
17247|  61.8k|inline bool MessageOptions::map_entry() const {
17248|       |  // @@protoc_insertion_point(field_get:google.protobuf.MessageOptions.map_entry)
17249|  61.8k|  return _internal_map_entry();
17250|  61.8k|}
_ZNK6google8protobuf14MessageOptions19_internal_map_entryEv:
17256|  61.8k|inline bool MessageOptions::_internal_map_entry() const {
17257|  61.8k|  ::google::protobuf::internal::TSanRead(&_impl_);
17258|  61.8k|  return _impl_.map_entry_;
17259|  61.8k|}

_ZNK6google8protobuf8internal21ExplicitlyConstructedINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEELm8EE3getEv:
   49|     61|  constexpr const T& get() const { return reinterpret_cast<const T&>(union_); }

_ZNK6google8protobuf8internal7HasBitsILi1EEixEi:
   45|  17.1k|  PROTOBUF_NDEBUG_INLINE const uint32_t& operator[](int index) const {
   46|  17.1k|    return has_bits_[index];
   47|  17.1k|  }
_ZN6google8protobuf8internal7HasBitsILi1EEixEi:
   41|  25.1k|  PROTOBUF_NDEBUG_INLINE uint32_t& operator[](int index) {
   42|  25.1k|    return has_bits_[index];
   43|  25.1k|  }
_ZN6google8protobuf8internal7HasBitsILi1EEC2Ev:
   31|  4.89k|  PROTOBUF_NDEBUG_INLINE constexpr HasBits() : has_bits_{} {}
_ZN6google8protobuf8internal7HasBitsILi1EE5ClearEv:
   37|  5.17k|  PROTOBUF_NDEBUG_INLINE void Clear() {
   38|  5.17k|    memset(has_bits_, 0, sizeof(has_bits_));
   39|  5.17k|  }

_ZN6google8protobuf8internal18InternalVisibilityC2Ev:
   38|  5.67k|inline constexpr InternalVisibility::InternalVisibility() = default;

_ZN6google8protobuf2io19EpsCopyOutputStream11EnsureSpaceEPh:
  662|  2.48k|  PROTOBUF_NODISCARD uint8_t* EnsureSpace(uint8_t* ptr) {
  663|  2.48k|    if (PROTOBUF_PREDICT_FALSE(ptr >= end_)) {
  ------------------
  |  |  365|  2.48k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 2.48k]
  |  |  |  Branch (365:54): [Folded, False: 2.48k]
  |  |  |  Branch (365:63): [True: 0, False: 2.48k]
  |  |  ------------------
  ------------------
  664|      0|      return EnsureSpaceFallback(ptr);
  665|      0|    }
  666|  2.48k|    return ptr;
  667|  2.48k|  }
_ZN6google8protobuf2io19EpsCopyOutputStream23WriteStringMaybeAliasedEjRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPh:
  697|     29|                                   uint8_t* ptr) {
  698|     29|    std::ptrdiff_t size = s.size();
  699|     29|    if (PROTOBUF_PREDICT_FALSE(
  ------------------
  |  |  365|     57|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 1, False: 28]
  |  |  |  Branch (365:54): [Folded, False: 29]
  |  |  |  Branch (365:64): [True: 1, False: 28]
  |  |  |  Branch (365:64): [True: 0, False: 28]
  |  |  ------------------
  ------------------
  700|     29|            size >= 128 || end_ - ptr + 16 - TagSize(num << 3) - 1 < size)) {
  701|      1|      return WriteStringMaybeAliasedOutline(num, s, ptr);
  702|      1|    }
  703|     28|    ptr = UnsafeVarint((num << 3) | 2, ptr);
  704|     28|    *ptr++ = static_cast<uint8_t>(size);
  705|     28|    std::memcpy(ptr, s.data(), size);
  706|     28|    return ptr + size;
  707|     29|  }
_ZN6google8protobuf2io19EpsCopyOutputStream7TagSizeEj:
  843|     28|  static constexpr int TagSize(uint32_t tag) {
  844|     28|    return (tag < (1 << 7))    ? 1
  ------------------
  |  Branch (844:12): [True: 24, False: 4]
  ------------------
  845|     28|           : (tag < (1 << 14)) ? 2
  ------------------
  |  Branch (845:14): [True: 4, False: 0]
  ------------------
  846|      4|           : (tag < (1 << 21)) ? 3
  ------------------
  |  Branch (846:14): [True: 0, False: 0]
  ------------------
  847|      0|           : (tag < (1 << 28)) ? 4
  ------------------
  |  Branch (847:14): [True: 0, False: 0]
  ------------------
  848|      0|                               : 5;
  849|     28|  }
_ZN6google8protobuf2io19EpsCopyOutputStream8WriteTagEjjPh:
  852|      1|                                           uint8_t* ptr) {
  853|      1|    ABSL_DCHECK(ptr < end_);  // NOLINT
  ------------------
  |  |   47|      1|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   40|      1|  ABSL_LOG_INTERNAL_CHECK_IMPL(condition, condition_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      2|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      1|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      2|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      2|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      1|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      1|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      2|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      2|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  854|      1|    return UnsafeVarint((num << 3) | wt, ptr);
  855|      1|  }
_ZN6google8protobuf2io19EpsCopyOutputStream16WriteLengthDelimEijPh:
  858|      1|                                                   uint8_t* ptr) {
  859|      1|    ptr = WriteTag(num, 2, ptr);
  860|      1|    return UnsafeWriteSize(size, ptr);
  861|      1|  }
_ZN6google8protobuf2io19EpsCopyOutputStream15UnsafeWriteSizeEjPh:
  911|      1|                                                         uint8_t* ptr) {
  912|      2|    while (PROTOBUF_PREDICT_FALSE(value >= 0x80)) {
  ------------------
  |  |  365|      2|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 1, False: 1]
  |  |  |  Branch (365:54): [Folded, False: 2]
  |  |  |  Branch (365:63): [True: 1, False: 1]
  |  |  ------------------
  ------------------
  913|      1|      *ptr = static_cast<uint8_t>(value | 0x80);
  914|      1|      value >>= 7;
  915|      1|      ++ptr;
  916|      1|    }
  917|      1|    *ptr++ = static_cast<uint8_t>(value);
  918|      1|    return ptr;
  919|      1|  }
_ZN6google8protobuf2io17CodedOutputStream20WriteVarint32ToArrayEjPh:
 1641|  3.23k|                                                        uint8_t* target) {
 1642|  3.23k|  return EpsCopyOutputStream::UnsafeVarint(value, target);
 1643|  3.23k|}
_ZN6google8protobuf2io17CodedOutputStream20WriteVarint64ToArrayEmPh:
 1646|  1.73k|                                                        uint8_t* target) {
 1647|  1.73k|  return EpsCopyOutputStream::UnsafeVarint(value, target);
 1648|  1.73k|}
_ZN6google8protobuf2io17CodedOutputStream32WriteVarint32SignExtendedToArrayEiPh:
 1655|  1.73k|    int32_t value, uint8_t* target) {
 1656|  1.73k|  return WriteVarint64ToArray(static_cast<uint64_t>(value), target);
 1657|  1.73k|}
_ZN6google8protobuf2io17CodedOutputStream15WriteTagToArrayEjPh:
 1716|  2.48k|                                                   uint8_t* target) {
 1717|  2.48k|  return WriteVarint32ToArray(value, target);
 1718|  2.48k|}
_ZN6google8protobuf2io17CodedOutputStream12VarintSize32Ej:
 1730|  1.00k|inline size_t CodedOutputStream::VarintSize32(uint32_t value) {
 1731|  1.00k|#if PROTOBUF_CODED_STREAM_H_PREFER_BSR
 1732|       |  // Explicit OR 0x1 to avoid calling absl::countl_zero(0), which
 1733|       |  // requires a branch to check for on platforms without a clz instruction.
 1734|  1.00k|  uint32_t log2value = (std::numeric_limits<uint32_t>::digits - 1) -
 1735|  1.00k|                       absl::countl_zero(value | 0x1);
 1736|  1.00k|  return static_cast<size_t>((log2value * 9 + (64 + 9)) / 64);
 1737|       |#else
 1738|       |  uint32_t clz = absl::countl_zero(value);
 1739|       |  return static_cast<size_t>(
 1740|       |      ((std::numeric_limits<uint32_t>::digits * 9 + 64) - (clz * 9)) / 64);
 1741|       |#endif
 1742|  1.00k|}
_ZN6google8protobuf2io17CodedOutputStream12VarintSize64Em:
 1757|  1.73k|inline size_t CodedOutputStream::VarintSize64(uint64_t value) {
 1758|  1.73k|#if PROTOBUF_CODED_STREAM_H_PREFER_BSR
 1759|       |  // Explicit OR 0x1 to avoid calling absl::countl_zero(0), which
 1760|       |  // requires a branch to check for on platforms without a clz instruction.
 1761|  1.73k|  uint32_t log2value = (std::numeric_limits<uint64_t>::digits - 1) -
 1762|  1.73k|                       absl::countl_zero(value | 0x1);
 1763|  1.73k|  return static_cast<size_t>((log2value * 9 + (64 + 9)) / 64);
 1764|       |#else
 1765|       |  uint32_t clz = absl::countl_zero(value);
 1766|       |  return static_cast<size_t>(
 1767|       |      ((std::numeric_limits<uint64_t>::digits * 9 + 64) - (clz * 9)) / 64);
 1768|       |#endif
 1769|  1.73k|}
_ZN6google8protobuf2io17CodedOutputStream24VarintSize32SignExtendedEi:
 1784|  1.73k|inline size_t CodedOutputStream::VarintSize32SignExtended(int32_t value) {
 1785|  1.73k|  return VarintSize64(static_cast<uint64_t>(int64_t{value}));
 1786|  1.73k|}
_ZN6google8protobuf2io19EpsCopyOutputStream12UnsafeVarintIjEEPhT_S4_:
  898|  3.26k|  PROTOBUF_ALWAYS_INLINE static uint8_t* UnsafeVarint(T value, uint8_t* ptr) {
  899|  3.26k|    static_assert(std::is_unsigned<T>::value,
  900|  3.26k|                  "Varint serialization must be unsigned");
  901|  3.56k|    while (PROTOBUF_PREDICT_FALSE(value >= 0x80)) {
  ------------------
  |  |  365|  3.56k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 302, False: 3.26k]
  |  |  |  Branch (365:54): [Folded, False: 3.56k]
  |  |  |  Branch (365:63): [True: 302, False: 3.26k]
  |  |  ------------------
  ------------------
  902|    302|      *ptr = static_cast<uint8_t>(value | 0x80);
  903|    302|      value >>= 7;
  904|    302|      ++ptr;
  905|    302|    }
  906|  3.26k|    *ptr++ = static_cast<uint8_t>(value);
  907|  3.26k|    return ptr;
  908|  3.26k|  }
_ZN6google8protobuf2io19EpsCopyOutputStream12UnsafeVarintImEEPhT_S4_:
  898|  1.73k|  PROTOBUF_ALWAYS_INLINE static uint8_t* UnsafeVarint(T value, uint8_t* ptr) {
  899|  1.73k|    static_assert(std::is_unsigned<T>::value,
  900|  1.73k|                  "Varint serialization must be unsigned");
  901|  1.76k|    while (PROTOBUF_PREDICT_FALSE(value >= 0x80)) {
  ------------------
  |  |  365|  1.76k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 28, False: 1.73k]
  |  |  |  Branch (365:54): [Folded, False: 1.76k]
  |  |  |  Branch (365:63): [True: 28, False: 1.73k]
  |  |  ------------------
  ------------------
  902|     28|      *ptr = static_cast<uint8_t>(value | 0x80);
  903|     28|      value >>= 7;
  904|     28|      ++ptr;
  905|     28|    }
  906|  1.73k|    *ptr++ = static_cast<uint8_t>(value);
  907|  1.73k|    return ptr;
  908|  1.73k|  }

_ZNK6google8protobuf7Message13GetDescriptorEv:
  363|  26.0k|  const Descriptor* GetDescriptor() const { return GetMetadata().descriptor; }
_ZNK6google8protobuf7Message13GetReflectionEv:
  369|  13.0k|  const Reflection* GetReflection() const { return GetMetadata().reflection; }

_ZN6google8protobuf8internal10CachedSizeC2Ei:
  173|  5.67k|  constexpr CachedSize(Scalar desired) noexcept : atom_(desired) {}
_ZNK6google8protobuf8internal10CachedSize3GetEv:
  178|    782|  Scalar Get() const noexcept {
  179|    782|    return __atomic_load_n(&atom_, __ATOMIC_RELAXED);
  180|    782|  }
_ZNK6google8protobuf8internal13ClassDataFull4baseEv:
  454|  62.2k|  constexpr const ClassData* base() const { return this; }
_ZNK6google8protobuf11MessageLite8GetArenaEv:
  531|  25.1k|  Arena* GetArena() const { return _internal_metadata_.arena(); }
_ZN6google8protobuf11MessageLite19internal_visibilityEv:
  816|  5.67k|  static constexpr internal::InternalVisibility internal_visibility() {
  817|  5.67k|    return internal::InternalVisibility{};
  818|  5.67k|  }
_ZN6google8protobuf11MessageLiteC2EPNS0_5ArenaE:
  879|  5.67k|  explicit MessageLite(Arena* arena) : _internal_metadata_(arena) {}
_ZN6google8protobuf6TypeId3GetERKNS0_11MessageLiteE:
 1035|  2.57k|  static TypeId Get(const MessageLite& msg) {
 1036|  2.57k|    return TypeId(msg.GetClassData());
 1037|  2.57k|  }
_ZN6google8protobufeqENS0_6TypeIdES1_:
 1048|  2.57k|  friend constexpr bool operator==(TypeId a, TypeId b) {
 1049|  2.57k|    return a.data_ == b.data_;
 1050|  2.57k|  }
_ZN6google8protobufneENS0_6TypeIdES1_:
 1051|  2.57k|  friend constexpr bool operator!=(TypeId a, TypeId b) { return !(a == b); }
_ZN6google8protobuf6TypeIdC2EPKNS0_8internal9ClassDataE:
 1078|  5.14k|  constexpr explicit TypeId(const internal::ClassData* data) : data_(data) {}
_ZN6google8protobuf8internal11FromIntSizeEi:
  288|     17|inline size_t FromIntSize(int size) {
  289|       |  // Convert to unsigned before widening so sign extension is not necessary.
  290|     17|  return static_cast<unsigned int>(size);
  291|     17|}
_ZN6google8protobuf8internal27GetEmptyStringAlreadyInitedEv:
  314|     61|PROTOBUF_EXPORT constexpr const std::string& GetEmptyStringAlreadyInited() {
  315|     61|  return fixed_address_empty_string.get();
  316|     61|}
_ZNK6google8protobuf8internal9ClassData4fullEv:
  474|  52.2k|inline const ClassDataFull& ClassData::full() const {
  475|  52.2k|  ABSL_DCHECK(!is_lite);
  ------------------
  |  |   47|  52.2k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   40|  52.2k|  ABSL_LOG_INTERNAL_CHECK_IMPL(condition, condition_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|   104k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  52.2k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|   104k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|   104k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 52.2k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  52.2k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 52.2k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  52.2k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 52.2k, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 1]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|   104k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|   104k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  476|  52.2k|  return *static_cast<const ClassDataFull*>(this);
  477|  52.2k|}
_ZN6google8protobuf15DownCastMessageIN4curl6fuzzer5proto8ScenarioEEEPT_PNS0_11MessageLiteE:
 1379|  2.57k|T* DownCastMessage(MessageLite* from) {
 1380|  2.57k|  return const_cast<T*>(
 1381|  2.57k|      DownCastMessage<T>(static_cast<const MessageLite*>(from)));
 1382|  2.57k|}
_ZN6google8protobuf15DownCastMessageIN4curl6fuzzer5proto8ScenarioEEEPKT_PKNS0_11MessageLiteE:
 1370|  2.57k|const T* DownCastMessage(const MessageLite* from) {
 1371|  2.57k|  internal::StrongReferenceToType<T>();
 1372|  5.14k|  ABSL_DCHECK(DynamicCastMessage<T>(from) == from)
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   40|  2.57k|  ABSL_LOG_INTERNAL_CHECK_IMPL(condition, condition_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  2.57k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  5.14k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  5.14k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2.57k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  2.57k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2.57k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  5.14k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2.57k, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 2.57k]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 2.57k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  2.57k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|  2.57k|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1373|  5.14k|      << "Cannot downcast " << from->GetTypeName() << " to "
 1374|  5.14k|      << T::default_instance().GetTypeName();
 1375|  2.57k|  return static_cast<const T*>(from);
 1376|  2.57k|}
_ZN6google8protobuf18DynamicCastMessageIN4curl6fuzzer5proto8ScenarioEEEPKT_PKNS0_11MessageLiteE:
 1329|  2.57k|const T* DynamicCastMessage(const MessageLite* from) {
 1330|  2.57k|  static_assert(std::is_base_of<MessageLite, T>::value, "");
 1331|       |
 1332|       |  // We might avoid the call to T::GetClassData() altogether if T were to
 1333|       |  // expose the class data pointer.
 1334|  2.57k|  if (from == nullptr || TypeId::Get<T>() != TypeId::Get(*from)) {
  ------------------
  |  Branch (1334:7): [True: 0, False: 2.57k]
  |  Branch (1334:26): [True: 0, False: 2.57k]
  ------------------
 1335|      0|    return nullptr;
 1336|      0|  }
 1337|       |
 1338|  2.57k|  return static_cast<const T*>(from);
 1339|  2.57k|}
_ZN6google8protobuf6TypeId3GetIN4curl6fuzzer5proto8ScenarioEEES1_v:
 1040|  2.57k|  static TypeId Get() {
 1041|  2.57k|    return TypeId(MessageLite::GetClassDataGenerated<T>());
 1042|  2.57k|  }
_ZN6google8protobuf11MessageLite21GetClassDataGeneratedIN4curl6fuzzer5proto8ScenarioEEEDav:
  902|  2.57k|  static auto GetClassDataGenerated() {
  903|  2.57k|    static_assert(std::is_base_of<MessageLite, T>::value, "");
  904|       |    // We could speed this up if needed by avoiding the function call.
  905|       |    // In LTO this is likely inlined, so it might not matter.
  906|  2.57k|    static_assert(
  907|  2.57k|        std::is_same<const T&, decltype(T::default_instance())>::value, "");
  908|  2.57k|    return T::default_instance().T::GetClassData();
  909|  2.57k|  }
_ZN6google8protobuf11MessageLiteD2Ev:
  511|  10.8k|  PROTOBUF_VIRTUAL ~MessageLite() = default;

_ZN6google8protobuf8internal16InternalMetadataC2EPNS0_5ArenaE:
   46|  5.67k|  explicit InternalMetadata(Arena* arena) {
   47|  5.67k|    ptr_ = reinterpret_cast<intptr_t>(arena);
   48|  5.67k|  }
_ZNK6google8protobuf8internal16InternalMetadata5arenaEv:
   65|  25.1k|  PROTOBUF_NDEBUG_INLINE Arena* arena() const {
   66|  25.1k|    if (PROTOBUF_PREDICT_FALSE(have_unknown_fields())) {
  ------------------
  |  |  365|  25.1k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 25.1k]
  |  |  |  Branch (365:54): [Folded, False: 25.1k]
  |  |  |  Branch (365:63): [True: 0, False: 25.1k]
  |  |  ------------------
  ------------------
   67|      0|      return PtrValue<ContainerBase>()->arena;
   68|  25.1k|    } else {
   69|  25.1k|      return PtrValue<Arena>();
   70|  25.1k|    }
   71|  25.1k|  }
_ZNK6google8protobuf8internal16InternalMetadata19have_unknown_fieldsEv:
   73|  44.9k|  PROTOBUF_NDEBUG_INLINE bool have_unknown_fields() const {
   74|  44.9k|    return HasUnknownFieldsTag();
   75|  44.9k|  }
_ZN6google8protobuf8internal16InternalMetadata12InternalSwapEPS2_:
  114|    259|      InternalMetadata* PROTOBUF_RESTRICT other) {
  115|    259|    std::swap(ptr_, other->ptr_);
  116|    259|  }
_ZNK6google8protobuf8internal16InternalMetadata19HasUnknownFieldsTagEv:
  141|  44.9k|  PROTOBUF_ALWAYS_INLINE bool HasUnknownFieldsTag() const {
  142|  44.9k|    return ptr_ & kUnknownFieldsTagMask;
  143|  44.9k|  }
_ZNK6google8protobuf8internal16InternalMetadata8PtrValueINS0_5ArenaEEEPT_v:
  146|  25.1k|  U* PtrValue() const {
  147|  25.1k|    return reinterpret_cast<U*>(ptr_ & kPtrValueMask);
  148|  25.1k|  }
_ZNK6google8protobuf8internal16InternalMetadata14unknown_fieldsINS0_15UnknownFieldSetEEERKT_PFS7_vE:
   83|     19|      const T& (*default_instance)()) const {
   84|     19|    if (PROTOBUF_PREDICT_FALSE(have_unknown_fields())) {
  ------------------
  |  |  365|     19|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 19]
  |  |  |  Branch (365:54): [Folded, False: 19]
  |  |  |  Branch (365:63): [True: 0, False: 19]
  |  |  ------------------
  ------------------
   85|      0|      return PtrValue<Container<T>>()->unknown_fields;
   86|     19|    } else {
   87|     19|      return default_instance();
   88|     19|    }
   89|     19|  }
_ZN6google8protobuf8internal16InternalMetadata6DeleteINS0_15UnknownFieldSetEEEvv:
   58|  10.8k|  void Delete() {
   59|       |    // Note that Delete<> should be called not more than once.
   60|  10.8k|    if (have_unknown_fields()) {
  ------------------
  |  Branch (60:9): [True: 0, False: 10.8k]
  ------------------
   61|      0|      DeleteOutOfLineHelper<T>();
   62|      0|    }
   63|  10.8k|  }
_ZN6google8protobuf8internal16InternalMetadata9MergeFromINS0_15UnknownFieldSetEEEvRKS2_:
  119|  2.02k|  PROTOBUF_NDEBUG_INLINE void MergeFrom(const InternalMetadata& other) {
  120|  2.02k|    if (other.have_unknown_fields()) {
  ------------------
  |  Branch (120:9): [True: 0, False: 2.02k]
  ------------------
  121|      0|      DoMergeFrom<T>(other.unknown_fields<T>(nullptr));
  122|      0|    }
  123|  2.02k|  }
_ZN6google8protobuf8internal16InternalMetadata5ClearINS0_15UnknownFieldSetEEEvv:
  126|  5.17k|  PROTOBUF_NDEBUG_INLINE void Clear() {
  127|  5.17k|    if (have_unknown_fields()) {
  ------------------
  |  Branch (127:9): [True: 0, False: 5.17k]
  ------------------
  128|      0|      DoClear<T>();
  129|      0|    }
  130|  5.17k|  }

_ZN6google8protobuf8internal8TSanReadEPKv:
  365|   234k|inline PROTOBUF_ALWAYS_INLINE void TSanRead(const void*) {}
_ZN6google8protobuf8internal15AllocateAtLeastEm:
  129|  1.59k|inline SizedPtr AllocateAtLeast(size_t size) {
  130|  1.59k|#if !defined(NDEBUG) && defined(ABSL_HAVE_THREAD_LOCAL) && \
  131|  1.59k|    defined(__cpp_inline_variables)
  132|  1.59k|  if (allocate_at_least_hook != nullptr) {
  ------------------
  |  Branch (132:7): [True: 0, False: 1.59k]
  ------------------
  133|      0|    return allocate_at_least_hook(size, allocate_at_least_hook_context);
  134|      0|  }
  135|  1.59k|#endif  // !NDEBUG && ABSL_HAVE_THREAD_LOCAL && __cpp_inline_variables
  136|  1.59k|  return {::operator new(size), size};
  137|  1.59k|}
_ZN6google8protobuf8internal11SizedDeleteEPvm:
  139|  1.59k|inline void SizedDelete(void* p, size_t size) {
  140|  1.59k|#if defined(__cpp_sized_deallocation)
  141|  1.59k|  ::operator delete(p, size);
  142|       |#else
  143|       |  // Avoid -Wunused-parameter
  144|       |  (void)size;
  145|       |  ::operator delete(p);
  146|       |#endif
  147|  1.59k|}
_ZN6google8protobuf8internal24Prefetch5LinesFrom7LinesEPKv:
  314|  1.27k|inline PROTOBUF_ALWAYS_INLINE void Prefetch5LinesFrom7Lines(const void* ptr) {
  315|  1.27k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 448);
  ------------------
  |  |  670|  1.27k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  316|  1.27k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 512);
  ------------------
  |  |  670|  1.27k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  317|  1.27k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 576);
  ------------------
  |  |  670|  1.27k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  318|  1.27k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 640);
  ------------------
  |  |  670|  1.27k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  319|  1.27k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 704);
  ------------------
  |  |  670|  1.27k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  320|  1.27k|}
_ZN6google8protobuf8internal9TSanWriteEPKv:
  366|  78.4k|inline PROTOBUF_ALWAYS_INLINE void TSanWrite(const void*) {}
_ZN6google8protobuf8internal20PrefetchToLocalCacheEPKv:
  371|   124k|inline void PrefetchToLocalCache(const void* ptr) {
  372|   124k|  absl::PrefetchToLocalCache(ptr);
  373|   124k|}
_ZN6google8protobuf8internal21StrongReferenceToTypeIN4curl6fuzzer5proto8ScenarioENS1_17MessageTraitsImplEEEvv:
   67|  2.57k|inline PROTOBUF_ALWAYS_INLINE void StrongReferenceToType() {
   68|  2.57k|  static constexpr auto ptr =
   69|  2.57k|      decltype(TraitsImpl::template value<T>)::StrongPointer();
   70|       |  // This is identical to the implementation of StrongPointer() above, but it
   71|       |  // has to be explicitly inlined here or else Clang 19 will raise an error in
   72|       |  // some configurations.
   73|  2.57k|  asm(".reloc ., BFD_RELOC_NONE, %p0" ::"Ws"(ptr));
   74|  2.57k|}

_ZNK6google8protobuf13RepeatedFieldIjE4sizeEv:
  738|  1.36k|inline int RepeatedField<Element>::size() const {
  739|  1.36k|  return size(is_soo());
  740|  1.36k|}
_ZNK6google8protobuf13RepeatedFieldIjE4sizeEb:
  477|  2.16k|  int size(bool is_soo) const { return soo_rep_.size(is_soo); }
_ZNK6google8protobuf8internal6SooRep4sizeEb:
  196|  2.39k|  int size(bool is_soo) const {
  197|  2.39k|    ABSL_DCHECK_EQ(is_soo, this->is_soo());
  ------------------
  |  |   74|  2.39k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   73|  2.39k|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|  2.39k|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|  2.39k|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|  2.39k|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 2.39k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|  2.39k|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|  2.39k|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|  2.39k|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|  2.39k|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|  2.39k|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|  2.39k|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|    771|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 771, False: 18.4E]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|    771|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 771]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|  1.54k|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|    771|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  198|       |#if !defined(__clang__) && defined(__GNUC__)
  199|       |#pragma GCC diagnostic push
  200|       |#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
  201|       |#endif
  202|  2.39k|    return is_soo ? short_rep.size() : long_rep.size;
  ------------------
  |  Branch (202:12): [True: 1.61k, False: 782]
  ------------------
  203|       |#if !defined(__clang__) && defined(__GNUC__)
  204|       |#pragma GCC diagnostic pop
  205|       |#endif
  206|  2.39k|  }
_ZNK6google8protobuf8internal6SooRep6is_sooEv:
  183|  5.36k|  bool is_soo() const {
  184|  5.36k|    static_assert(sizeof(LongSooRep) == sizeof(ShortSooRep), "");
  185|  5.36k|    static_assert(offsetof(SooRep, long_rep) == offsetof(SooRep, short_rep),
  186|  5.36k|                  "");
  187|  5.36k|    static_assert(offsetof(LongSooRep, elements_int) ==
  188|  5.36k|                      offsetof(ShortSooRep, arena_and_size),
  189|  5.36k|                  "");
  190|  5.36k|    return short_rep.is_soo();
  191|  5.36k|  }
_ZNK6google8protobuf8internal11ShortSooRep6is_sooEv:
  168|  5.36k|  bool is_soo() const { return (arena_and_size & kNotSooBit) == 0; }
_ZNK6google8protobuf8internal11ShortSooRep4sizeEv:
  167|  2.38k|  int size() const { return arena_and_size & kSooSizeMask; }
_ZNK6google8protobuf13RepeatedFieldIjE6is_sooEv:
  476|  3.14k|  bool is_soo() const { return soo_rep_.is_soo(); }
_ZNK6google8protobuf13RepeatedFieldIjE3GetEi:
  805|    246|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  806|    246|  ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|    246|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   81|    246|  ABSL_LOG_INTERNAL_CHECK_GE_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    246|  ABSL_LOG_INTERNAL_CHECK_OP(Check_GE, >=, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|    246|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|    246|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 246]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|    246|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|    246|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|    246|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|    246|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|    246|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|    246|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  807|    246|  ABSL_DCHECK_LT(index, size());
  ------------------
  |  |   80|    246|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   79|    246|  ABSL_LOG_INTERNAL_CHECK_LT_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|    246|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LT, <, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|    246|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|    246|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 246]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|    246|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|    246|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|    246|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|    246|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|    246|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|    246|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  808|    246|  return elements(is_soo())[index];
  809|    246|}
_ZNK6google8protobuf13RepeatedFieldIjE8elementsEb:
  585|    246|  const Element* elements(bool is_soo) const {
  586|    246|    return const_cast<RepeatedField*>(this)->elements(is_soo);
  587|    246|  }
_ZN6google8protobuf13RepeatedFieldIjE8elementsEb:
  581|    249|  Element* elements(bool is_soo) {
  582|    249|    ABSL_DCHECK_GT(Capacity(is_soo), 0);
  ------------------
  |  |   84|    249|  ABSL_LOG_INTERNAL_DCHECK_GT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   83|    249|  ABSL_LOG_INTERNAL_CHECK_GT_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|    249|  ABSL_LOG_INTERNAL_CHECK_OP(Check_GT, >, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|    249|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|    249|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 249]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|    249|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|    249|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|    249|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|    249|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|    249|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|    249|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  583|    249|    return unsafe_elements(is_soo);
  584|    249|  }
_ZNK6google8protobuf13RepeatedFieldIjE8CapacityEb:
  478|    878|  int Capacity(bool is_soo) const {
  479|       |#if !defined(__clang__) && defined(__GNUC__)
  480|       |#pragma GCC diagnostic push
  481|       |#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
  482|       |#endif
  483|    878|    return is_soo ? kSooCapacityElements : soo_rep_.long_rep.capacity;
  ------------------
  |  Branch (483:12): [True: 869, False: 9]
  ------------------
  484|       |#if !defined(__clang__) && defined(__GNUC__)
  485|       |#pragma GCC diagnostic pop
  486|       |#endif
  487|    878|  }
_ZN6google8protobuf13RepeatedFieldIjE15unsafe_elementsEb:
  592|  1.13k|  Element* unsafe_elements(bool is_soo) {
  593|  1.13k|    return is_soo ? reinterpret_cast<Element*>(soo_rep_.short_rep.data)
  ------------------
  |  Branch (593:12): [True: 1.11k, False: 12]
  ------------------
  594|  1.13k|                  : reinterpret_cast<Element*>(soo_rep_.long_rep.elements());
  595|  1.13k|  }
_ZNK6google8protobuf8internal10LongSooRep8elementsEv:
  150|     20|  char* elements() const {
  151|     20|    auto ret = reinterpret_cast<char*>(elements_int & kSooPtrMask);
  152|     20|    ABSL_DCHECK_NE(ret, nullptr);
  ------------------
  |  |   76|     20|  ABSL_LOG_INTERNAL_DCHECK_NE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   75|     20|  ABSL_LOG_INTERNAL_CHECK_NE_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|     20|  ABSL_LOG_INTERNAL_CHECK_OP(Check_NE, !=, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|     20|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|     20|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 20]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|     20|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|     20|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|     20|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|     20|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|     20|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|     20|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  153|     20|    return ret;
  154|     20|  }
_ZN6google8protobuf8internal11ShortSooRepC2EPNS0_5ArenaE:
  163|     37|      : arena_and_size(reinterpret_cast<uintptr_t>(arena)) {
  164|     37|    ABSL_DCHECK_EQ(size(), 0);
  ------------------
  |  |   74|     37|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   73|     37|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     37|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|     37|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|     37|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 37]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|     37|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|     37|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|     37|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|     37|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|     37|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|     37|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  165|     37|  }
_ZN6google8protobuf8internal6SooRepC2EPNS0_5ArenaE:
  181|     37|  explicit SooRep(Arena* arena) : short_rep(arena) {}
_ZNK6google8protobuf8internal6SooRep9soo_arenaEv:
  192|    252|  Arena* soo_arena() const {
  193|    252|    ABSL_DCHECK(is_soo());
  ------------------
  |  |   47|    252|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   40|    252|  ABSL_LOG_INTERNAL_CHECK_IMPL(condition, condition_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    504|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    252|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    504|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    504|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 252, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    252|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 252]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    504|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 252, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 252]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 252]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|    504|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    504|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  194|    252|    return reinterpret_cast<Arena*>(short_rep.arena_and_size & kSooPtrMask);
  195|    252|  }
_ZN6google8protobuf8internal6SooRep8set_sizeEbi:
  207|    221|  void set_size(bool is_soo, int size) {
  208|    221|    ABSL_DCHECK_EQ(is_soo, this->is_soo());
  ------------------
  |  |   74|    221|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   73|    221|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|    221|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|    221|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|    221|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 221]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|    221|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|    221|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|    221|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|    221|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|    221|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|    436|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|    218|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 218, False: 18.4E]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|    218|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 218]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|    436|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|    218|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  209|    221|    if (is_soo) {
  ------------------
  |  Branch (209:9): [True: 0, False: 221]
  ------------------
  210|      0|      ABSL_DCHECK_LE(size, kSooSizeMask);
  ------------------
  |  |   78|      0|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   77|      0|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|      0|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|      0|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|      0|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|      0|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|      0|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|      0|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|      0|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  211|      0|      short_rep.arena_and_size &= kSooPtrMask;
  212|      0|      short_rep.arena_and_size |= size;
  213|    221|    } else {
  214|    221|      long_rep.size = size;
  215|    221|    }
  216|    221|  }
_ZN6google8protobuf8internal6SooRep11set_non_sooEbiPv:
  219|      3|  void set_non_soo(bool was_soo, int capacity, void* elements) {
  220|      3|    ABSL_DCHECK_EQ(was_soo, is_soo());
  ------------------
  |  |   74|      3|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   73|      3|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      3|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      3|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|      3|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 3]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|      3|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|      3|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|      3|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|      3|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|      3|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|      3|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  221|      3|    ABSL_DCHECK_NE(elements, nullptr);
  ------------------
  |  |   76|      3|  ABSL_LOG_INTERNAL_DCHECK_NE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   75|      3|  ABSL_LOG_INTERNAL_CHECK_NE_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|      3|  ABSL_LOG_INTERNAL_CHECK_OP(Check_NE, !=, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      3|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|      3|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 3]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|      3|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|      3|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|      3|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|      3|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|      3|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|      3|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  222|      3|    ABSL_DCHECK_EQ(reinterpret_cast<uintptr_t>(elements) % kSooPtrAlignment,
  ------------------
  |  |   74|      3|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   73|      3|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      3|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      3|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|      3|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 3]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|      3|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|      3|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|      3|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|      3|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|      3|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|      3|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  223|      3|                   uintptr_t{0});
  224|      3|    if (was_soo) long_rep.size = short_rep.size();
  ------------------
  |  Branch (224:9): [True: 3, False: 0]
  ------------------
  225|      3|    long_rep.capacity = capacity;
  226|      3|    long_rep.elements_int = reinterpret_cast<uintptr_t>(elements) | kNotSooBit;
  227|      3|  }
_ZNK6google8protobuf13RepeatedFieldIjE8CapacityEv:
  743|    255|inline int RepeatedField<Element>::Capacity() const {
  744|    255|  return Capacity(is_soo());
  745|    255|}
_ZN6google8protobuf13RepeatedFieldIjE19ExchangeCurrentSizeEbi:
  572|    184|  inline int ExchangeCurrentSize(bool is_soo, int new_size) {
  573|    184|    const int prev_size = size(is_soo);
  574|    184|    AnnotateSize(prev_size, new_size);
  575|    184|    set_size(is_soo, new_size);
  576|    184|    return prev_size;
  577|    184|  }
_ZNK6google8protobuf13RepeatedFieldIjE12AnnotateSizeEii:
  543|    439|  void AnnotateSize(int old_size, int new_size) const {
  544|    439|    if (old_size != new_size) {
  ------------------
  |  Branch (544:9): [True: 410, False: 29]
  ------------------
  545|    410|      ABSL_ATTRIBUTE_UNUSED const bool is_soo = this->is_soo();
  ------------------
  |  |  557|    410|#define ABSL_ATTRIBUTE_UNUSED __attribute__((__unused__))
  ------------------
  546|    410|      ABSL_ATTRIBUTE_UNUSED const Element* elem = unsafe_elements(is_soo);
  ------------------
  |  |  557|    410|#define ABSL_ATTRIBUTE_UNUSED __attribute__((__unused__))
  ------------------
  547|    410|      ABSL_ANNOTATE_CONTIGUOUS_CONTAINER(elem, elem + Capacity(is_soo),
  548|    410|                                         elem + old_size, elem + new_size);
  549|    410|      if (new_size < old_size) {
  ------------------
  |  Branch (549:11): [True: 3, False: 407]
  ------------------
  550|      3|        ABSL_ANNOTATE_MEMORY_IS_UNINITIALIZED(
  551|      3|            elem + new_size, (old_size - new_size) * sizeof(Element));
  552|      3|      }
  553|    410|    }
  554|    439|  }
_ZNK6google8protobuf13RepeatedFieldIjE15unsafe_elementsEb:
  596|    410|  const Element* unsafe_elements(bool is_soo) const {
  597|    410|    return const_cast<RepeatedField*>(this)->unsafe_elements(is_soo);
  598|    410|  }
_ZN6google8protobuf13RepeatedFieldIjE8set_sizeEbi:
  488|    184|  void set_size(bool is_soo, int size) {
  489|    184|    ABSL_DCHECK_LE(size, Capacity(is_soo));
  ------------------
  |  |   78|    184|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   77|    184|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|    184|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|    184|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|    184|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 184]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|    184|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|    184|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|    184|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|    184|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|    184|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|    184|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  490|    184|    soo_rep_.set_size(is_soo, size);
  491|    184|  }
_ZN6google8protobuf8internal7HeapRepILm8EE8elementsEv:
  107|      6|  void* elements() { return this + 1; }
_ZN6google8protobuf13RepeatedFieldIjE4GrowEbii:
 1240|      3|                                                    int new_size) {
 1241|      3|  UnpoisonBuffer();
 1242|      3|  GrowNoAnnotate(was_soo, old_size, new_size);
 1243|      3|  AnnotateSize(Capacity(), old_size);
 1244|      3|}
_ZNK6google8protobuf13RepeatedFieldIjE14UnpoisonBufferEv:
  557|    252|  void UnpoisonBuffer() const {
  558|    252|    AnnotateSize(size(), Capacity());
  559|    252|    if (is_soo()) {
  ------------------
  |  Branch (559:9): [True: 252, False: 0]
  ------------------
  560|       |      // We need to manually unpoison the SOO buffer because in reflection for
  561|       |      // split repeated fields, we poison the whole SOO buffer even when we
  562|       |      // don't actually use the whole SOO buffer (e.g. for RepeatedField<bool>).
  563|    252|      PROTOBUF_UNPOISON_MEMORY_REGION(soo_rep_.short_rep.data,
  564|    252|                                      sizeof(soo_rep_.short_rep.data));
  565|    252|    }
  566|    252|  }
_ZN6google8protobuf13RepeatedFieldIjE14GrowNoAnnotateEbii:
 1184|      3|                                                              int new_size) {
 1185|      3|  const int old_capacity = Capacity(was_soo);
 1186|      3|  ABSL_DCHECK_GT(new_size, old_capacity);
  ------------------
  |  |   84|      3|  ABSL_LOG_INTERNAL_DCHECK_GT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   83|      3|  ABSL_LOG_INTERNAL_CHECK_GT_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      3|  ABSL_LOG_INTERNAL_CHECK_OP(Check_GT, >, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      3|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|      3|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 3]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|      3|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|      3|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|      3|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|      3|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|      3|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|      3|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1187|      3|  HeapRep* new_rep;
 1188|      3|  Arena* arena = GetArena();
 1189|       |
 1190|      3|  new_size = internal::CalculateReserveSize<Element, kHeapRepHeaderSize>(
 1191|      3|      old_capacity, new_size);
 1192|       |
 1193|      3|  ABSL_DCHECK_LE(static_cast<size_t>(new_size),
  ------------------
  |  |   78|      0|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   77|      0|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      3|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      3|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|      3|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 3]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|      3|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|      3|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|      3|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|      3|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|      3|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|      3|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      3|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      3|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1194|      0|                 (std::numeric_limits<size_t>::max() - kHeapRepHeaderSize) /
 1195|      0|                     sizeof(Element))
 1196|      0|      << "Requested size is too large to fit into size_t.";
 1197|      3|  size_t bytes =
 1198|      3|      kHeapRepHeaderSize + sizeof(Element) * static_cast<size_t>(new_size);
 1199|      3|  if (arena == nullptr) {
  ------------------
  |  Branch (1199:7): [True: 2, False: 1]
  ------------------
 1200|      2|    ABSL_DCHECK_LE((bytes - kHeapRepHeaderSize) / sizeof(Element),
  ------------------
  |  |   78|      0|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   77|      0|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      2|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      2|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|      2|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|      2|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|      2|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|      2|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|      2|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|      2|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|      2|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      2|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      2|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1201|      0|                   static_cast<size_t>(std::numeric_limits<int>::max()))
 1202|      0|        << "Requested size is too large to fit element count into int.";
 1203|      2|    internal::SizedPtr res = internal::AllocateAtLeast(bytes);
 1204|      2|    size_t num_available =
 1205|      2|        std::min((res.n - kHeapRepHeaderSize) / sizeof(Element),
 1206|      2|                 static_cast<size_t>(std::numeric_limits<int>::max()));
 1207|      2|    new_size = static_cast<int>(num_available);
 1208|      2|    new_rep = static_cast<HeapRep*>(res.p);
 1209|      2|  } else {
 1210|      1|    new_rep =
 1211|      1|        reinterpret_cast<HeapRep*>(Arena::CreateArray<char>(arena, bytes));
 1212|      1|  }
 1213|      3|  new_rep->arena = arena;
 1214|       |
 1215|      3|  if (old_size > 0) {
  ------------------
  |  Branch (1215:7): [True: 3, False: 0]
  ------------------
 1216|      3|    Element* pnew = static_cast<Element*>(new_rep->elements());
 1217|      3|    Element* pold = elements(was_soo);
 1218|       |    // TODO: add absl::is_trivially_relocatable<Element>
 1219|      3|    if (std::is_trivial<Element>::value) {
  ------------------
  |  Branch (1219:9): [True: 3, Folded]
  ------------------
 1220|      3|      memcpy(static_cast<void*>(pnew), pold, old_size * sizeof(Element));
 1221|      3|    } else {
 1222|      0|      for (Element* end = pnew + old_size; pnew != end; ++pnew, ++pold) {
  ------------------
  |  Branch (1222:44): [True: 0, False: 0]
  ------------------
 1223|      0|        ::new (static_cast<void*>(pnew)) Element(std::move(*pold));
 1224|      0|        pold->~Element();
 1225|      0|      }
 1226|      0|    }
 1227|      3|  }
 1228|      3|  if (!was_soo) InternalDeallocate();
  ------------------
  |  Branch (1228:7): [True: 0, False: 3]
  ------------------
 1229|       |
 1230|      3|  soo_rep_.set_non_soo(was_soo, new_size, new_rep->elements());
 1231|      3|}
_ZN6google8protobuf13RepeatedFieldIjE8GetArenaEv:
  440|      3|  inline Arena* GetArena() { return GetArena(is_soo()); }
_ZNK6google8protobuf13RepeatedFieldIjE8GetArenaEb:
  472|    252|  inline Arena* GetArena(bool is_soo) const {
  473|    252|    return is_soo ? soo_rep_.soo_arena() : heap_rep()->arena;
  ------------------
  |  Branch (473:12): [True: 252, False: 0]
  ------------------
  474|    252|  }
_ZN6google8protobuf8internal20CalculateReserveSizeIjLi8EEEiii:
 1142|      3|inline int CalculateReserveSize(int capacity, int new_size) {
 1143|      3|  constexpr int lower_limit =
 1144|      3|      RepeatedFieldLowerClampLimit<T, kHeapRepHeaderSize>();
 1145|      3|  if (new_size < lower_limit) {
  ------------------
  |  Branch (1145:7): [True: 0, False: 3]
  ------------------
 1146|       |    // Clamp to smallest allowed size.
 1147|      0|    return lower_limit;
 1148|      0|  }
 1149|      3|  constexpr int kMaxSizeBeforeClamp =
 1150|      3|      (std::numeric_limits<int>::max() - kHeapRepHeaderSize) / 2;
 1151|      3|  if (PROTOBUF_PREDICT_FALSE(capacity > kMaxSizeBeforeClamp)) {
  ------------------
  |  |  365|      3|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 3]
  |  |  |  Branch (365:54): [Folded, False: 3]
  |  |  |  Branch (365:63): [True: 0, False: 3]
  |  |  ------------------
  ------------------
 1152|      0|    return std::numeric_limits<int>::max();
 1153|      0|  }
 1154|      3|  constexpr int kSooCapacityElements = SooCapacityElements(sizeof(T));
 1155|      3|  if (kSooCapacityElements > 0 && kSooCapacityElements < lower_limit) {
  ------------------
  |  Branch (1155:7): [True: 0, Folded]
  |  Branch (1155:35): [Folded, False: 0]
  ------------------
 1156|       |    // In this case, we need to set capacity to 0 here to ensure power-of-two
 1157|       |    // sized allocations.
 1158|      0|    if (capacity < lower_limit) capacity = 0;
  ------------------
  |  Branch (1158:9): [True: 0, False: 0]
  ------------------
 1159|      3|  } else {
 1160|      6|    ABSL_DCHECK(capacity == 0 || capacity >= lower_limit)
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   40|      3|  ABSL_LOG_INTERNAL_CHECK_IMPL(condition, condition_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      3|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      6|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      6|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 3, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      3|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 3]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     12|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 3, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 3]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 3, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 3]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      3|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      3|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1161|      6|        << capacity << " " << lower_limit;
 1162|      3|  }
 1163|       |  // We want to double the number of bytes, not the number of elements, to try
 1164|       |  // to stay within power-of-two allocations.
 1165|       |  // The allocation has kHeapRepHeaderSize + sizeof(T) * capacity.
 1166|      3|  int doubled_size = 2 * capacity + kHeapRepHeaderSize / sizeof(T);
 1167|      3|  return std::max(doubled_size, new_size);
 1168|      3|}
_ZN6google8protobuf13RepeatedFieldIjE7DestroyEPKjS4_:
  518|    101|  static void Destroy(const Element* begin, const Element* end) {
  519|    101|    if (!std::is_trivial<Element>::value) {
  ------------------
  |  Branch (519:9): [Folded, False: 101]
  ------------------
  520|      0|      std::for_each(begin, end, [&](const Element& e) { e.~Element(); });
  521|      0|    }
  522|    101|  }
_ZN6google8protobuf13RepeatedFieldIjE19StaticValidityCheckEv:
  259|    249|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  260|    249|    static_assert(
  261|    249|        absl::disjunction<internal::is_supported_integral_type<Element>,
  262|    249|                          internal::is_supported_floating_point_type<Element>,
  263|    249|                          std::is_same<absl::Cord, Element>,
  264|    249|                          std::is_same<UnknownField, Element>,
  265|    249|                          is_proto_enum<Element>>::value,
  266|    249|        "We only support non-string scalars in RepeatedField.");
  267|    249|  }
_ZN6google8protobuf13RepeatedFieldIjED2Ev:
  680|    249|RepeatedField<Element>::~RepeatedField() {
  681|    249|  StaticValidityCheck();
  682|    249|  const bool is_soo = this->is_soo();
  683|    249|#ifndef NDEBUG
  684|       |  // Try to trigger segfault / asan failure in non-opt builds if arena_
  685|       |  // lifetime has ended before the destructor.
  686|    249|  auto arena = GetArena(is_soo);
  687|    249|  if (arena) (void)arena->SpaceAllocated();
  ------------------
  |  Branch (687:7): [True: 0, False: 249]
  ------------------
  688|    249|#endif
  689|    249|  const int size = this->size(is_soo);
  690|    249|  if (size > 0) {
  ------------------
  |  Branch (690:7): [True: 101, False: 148]
  ------------------
  691|    101|    Element* elem = unsafe_elements(is_soo);
  692|    101|    Destroy(elem, elem + size);
  693|    101|  }
  694|    249|  UnpoisonBuffer();
  695|    249|  if (!is_soo) InternalDeallocate<true>();
  ------------------
  |  Branch (695:7): [True: 0, False: 249]
  ------------------
  696|    249|}

_ZN6google8protobuf8internal20RepeatedPtrFieldBaseC2EPNS0_5ArenaE:
  146|  14.4k|      : tagged_rep_or_elem_(nullptr),
  147|  14.4k|        current_size_(0),
  148|  14.4k|        capacity_proxy_(0),
  149|  14.4k|        arena_(arena) {}
_ZN6google8protobuf8internal20RepeatedPtrFieldBaseD2Ev:
  154|  20.1k|  ~RepeatedPtrFieldBase() {
  155|  20.1k|#ifndef NDEBUG
  156|       |    // Try to trigger segfault / asan failure in non-opt builds if arena_
  157|       |    // lifetime has ended before the destructor.
  158|  20.1k|    if (arena_) (void)arena_->SpaceAllocated();
  ------------------
  |  Branch (158:9): [True: 0, False: 20.1k]
  ------------------
  159|  20.1k|#endif
  160|  20.1k|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase4sizeEv:
  163|  87.8k|  int size() const { return current_size_; }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase8CapacityEv:
  170|  5.34k|  int Capacity() const { return capacity_proxy_ + kSSOCapacity; }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase12NeedsDestroyEv:
  239|  21.8k|  inline bool NeedsDestroy() const {
  240|       |    // Either there is an allocated element in SSO buffer or there is an
  241|       |    // allocated Rep.
  242|  21.8k|    return tagged_rep_or_elem_ != nullptr;
  243|  21.8k|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase8raw_dataEv:
  347|  26.8k|  void* const* raw_data() const { return elements(); }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase16raw_mutable_dataEv:
  348|  2.57k|  void** raw_mutable_data() { return elements(); }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase8GetArenaEv:
  535|  11.8k|  inline Arena* GetArena() const { return arena_; }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase19ExchangeCurrentSizeEi:
  602|  6.23k|  inline int ExchangeCurrentSize(int new_size) {
  603|  6.23k|    return std::exchange(current_size_, new_size);
  604|  6.23k|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase8elementsEv:
  625|  26.8k|  void* const* elements() const {
  626|  26.8k|    return using_sso() ? &tagged_rep_or_elem_ : +rep()->elements;
  ------------------
  |  Branch (626:12): [True: 25.7k, False: 1.10k]
  ------------------
  627|  26.8k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase8elementsEv:
  628|  4.95k|  void** elements() {
  629|  4.95k|    return using_sso() ? &tagged_rep_or_elem_ : +rep()->elements;
  ------------------
  |  Branch (629:12): [True: 3.79k, False: 1.16k]
  ------------------
  630|  4.95k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase10element_atEi:
  632|  14.9k|  void*& element_at(int index) {
  633|  14.9k|    if (using_sso()) {
  ------------------
  |  Branch (633:9): [True: 3.36k, False: 11.6k]
  ------------------
  634|  3.36k|      ABSL_DCHECK_EQ(index, 0);
  ------------------
  |  |   74|  3.36k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   73|  3.36k|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|  3.36k|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|  3.36k|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|  3.36k|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 3.36k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|  3.36k|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|  3.36k|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|  3.36k|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|  3.36k|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|  3.36k|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|  3.36k|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  635|  3.36k|      return tagged_rep_or_elem_;
  636|  3.36k|    }
  637|  11.6k|    return rep()->elements[index];
  638|  14.9k|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase10element_atEi:
  639|  11.0k|  const void* element_at(int index) const {
  640|  11.0k|    return const_cast<RepeatedPtrFieldBase*>(this)->element_at(index);
  641|  11.0k|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase14allocated_sizeEv:
  643|  2.38k|  int allocated_size() const {
  644|  2.38k|    return using_sso() ? (tagged_rep_or_elem_ != nullptr ? 1 : 0)
  ------------------
  |  Branch (644:12): [True: 1.36k, False: 1.02k]
  |  Branch (644:27): [True: 1.35k, False: 3]
  ------------------
  645|  2.38k|                       : rep()->allocated_size;
  646|  2.38k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase3repEv:
  647|  20.8k|  Rep* rep() {
  648|  20.8k|    ABSL_DCHECK(!using_sso());
  ------------------
  |  |   47|  20.8k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   40|  20.8k|  ABSL_LOG_INTERNAL_CHECK_IMPL(condition, condition_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  41.7k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  20.8k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  41.7k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  41.7k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 20.8k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  20.8k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 20.8k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  30.6k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 20.8k, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 9.79k]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 9.79k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  41.7k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  41.7k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  649|  20.8k|    return reinterpret_cast<Rep*>(
  650|  20.8k|        reinterpret_cast<uintptr_t>(tagged_rep_or_elem_) - 1);
  651|  20.8k|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3repEv:
  652|  2.13k|  const Rep* rep() const {
  653|  2.13k|    return const_cast<RepeatedPtrFieldBase*>(this)->rep();
  654|  2.13k|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase9using_ssoEv:
  656|  66.8k|  bool using_sso() const {
  657|  66.8k|    return (reinterpret_cast<uintptr_t>(tagged_rep_or_elem_) & 1) == 0;
  658|  66.8k|  }
_ZN6google8protobuf8internal18GenericTypeHandlerINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEE6DeleteEPS9_PNS0_5ArenaE:
  912|  3.80k|  static inline void Delete(Type* value, Arena* arena) {
  913|  3.80k|    if (arena == nullptr) {
  ------------------
  |  Branch (913:9): [True: 3.80k, False: 0]
  ------------------
  914|  3.80k|      delete value;
  915|  3.80k|    }
  916|  3.80k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEPNT_4TypeEPv:
  661|  10.4k|  static inline Value<TypeHandler>* cast(void* element) {
  662|  10.4k|    return reinterpret_cast<Value<TypeHandler>*>(element);
  663|  10.4k|  }
_ZNK6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto9SetOptionEE4sizeEv:
 1340|  21.6k|inline int RepeatedPtrField<Element>::size() const {
 1341|  21.6k|  return RepeatedPtrFieldBase::size();
 1342|  21.6k|}
_ZN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto9SetOptionEE5ClearEv:
 1469|  5.14k|inline void RepeatedPtrField<Element>::Clear() {
 1470|  5.14k|  RepeatedPtrFieldBase::Clear<TypeHandler>();
 1471|  5.14k|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS1_18GenericTypeHandlerIN4curl6fuzzer5proto9SetOptionEEEEEvv:
  265|  5.14k|  void Clear() {
  266|  5.14k|    const int n = current_size_;
  267|  5.14k|    ABSL_DCHECK_GE(n, 0);
  ------------------
  |  |   82|  5.14k|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   81|  5.14k|  ABSL_LOG_INTERNAL_CHECK_GE_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  5.14k|  ABSL_LOG_INTERNAL_CHECK_OP(Check_GE, >=, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|  5.14k|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|  5.14k|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 5.14k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|  5.14k|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|  5.14k|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|  5.14k|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|  5.14k|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|  5.14k|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|  5.14k|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|  5.14k|    if (n > 0) {
  ------------------
  |  Branch (268:9): [True: 0, False: 5.14k]
  ------------------
  269|      0|      using H = CommonHandler<TypeHandler>;
  270|      0|      ClearNonEmpty<H>();
  271|      0|    }
  272|  5.14k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_11MessageLiteEEEEEPNT_4TypeEPv:
  661|  1.86k|  static inline Value<TypeHandler>* cast(void* element) {
  662|  1.86k|    return reinterpret_cast<Value<TypeHandler>*>(element);
  663|  1.86k|  }
_ZNK6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto9SetOptionEE3GetEi:
 1346|  2.23k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|  2.23k|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|  2.23k|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerIN4curl6fuzzer5proto9SetOptionEEEEERKNT_4TypeEi:
  252|  2.23k|  const Value<TypeHandler>& Get(int index) const {
  253|  2.23k|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|  2.23k|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   81|  2.23k|  ABSL_LOG_INTERNAL_CHECK_GE_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  2.23k|  ABSL_LOG_INTERNAL_CHECK_OP(Check_GE, >=, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|  2.23k|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|  2.23k|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 2.23k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|  2.23k|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|  2.23k|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|  2.23k|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|  2.23k|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|  2.23k|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|  2.23k|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|  2.23k|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|  2.23k|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   79|  2.23k|  ABSL_LOG_INTERNAL_CHECK_LT_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|  2.23k|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LT, <, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|  2.23k|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|  2.23k|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 2.23k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|  2.23k|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|  2.23k|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|  2.23k|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|  2.23k|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|  2.23k|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|  2.23k|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|  2.23k|    return *cast<TypeHandler>(element_at(index));
  256|  2.23k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerIN4curl6fuzzer5proto9SetOptionEEEEEPKNT_4TypeEPKv:
  665|  2.23k|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|  2.23k|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|  2.23k|  }
_ZNK6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE4sizeEv:
 1340|  38.9k|inline int RepeatedPtrField<Element>::size() const {
 1341|  38.9k|  return RepeatedPtrFieldBase::size();
 1342|  38.9k|}
_ZN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE5ClearEv:
 1469|  12.8k|inline void RepeatedPtrField<Element>::Clear() {
 1470|  12.8k|  RepeatedPtrFieldBase::Clear<TypeHandler>();
 1471|  12.8k|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS1_18GenericTypeHandlerINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEvv:
  265|  12.8k|  void Clear() {
  266|  12.8k|    const int n = current_size_;
  267|  12.8k|    ABSL_DCHECK_GE(n, 0);
  ------------------
  |  |   82|  12.8k|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   81|  12.8k|  ABSL_LOG_INTERNAL_CHECK_GE_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  12.8k|  ABSL_LOG_INTERNAL_CHECK_OP(Check_GE, >=, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|  12.8k|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|  12.8k|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 12.8k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|  12.8k|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|  12.8k|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|  12.8k|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|  12.8k|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|  12.8k|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|  12.8k|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|  12.8k|    if (n > 0) {
  ------------------
  |  Branch (268:9): [True: 0, False: 12.8k]
  ------------------
  269|      0|      using H = CommonHandler<TypeHandler>;
  270|      0|      ClearNonEmpty<H>();
  271|      0|    }
  272|  12.8k|  }
_ZN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3AddEv:
 1370|  3.80k|inline Element* RepeatedPtrField<Element>::Add() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1371|  3.80k|  return RepeatedPtrFieldBase::Add<TypeHandler>();
 1372|  3.80k|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase3AddINS1_18GenericTypeHandlerINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEPNT_4TypeEv:
  194|  3.80k|  Value<TypeHandler>* Add() {
  195|  3.80k|    if (std::is_same<Value<TypeHandler>, std::string>{}) {
  ------------------
  |  Branch (195:9): [True: 3.80k, Folded]
  ------------------
  196|  3.80k|      return cast<TypeHandler>(AddString());
  197|  3.80k|    }
  198|      0|    return cast<TypeHandler>(AddMessageLite(TypeHandler::GetNewFunc()));
  199|  3.80k|  }
_ZNK6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3GetEi:
 1346|  3.73k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|  3.73k|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|  3.73k|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEERKNT_4TypeEi:
  252|  3.73k|  const Value<TypeHandler>& Get(int index) const {
  253|  3.73k|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|  3.73k|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   81|  3.73k|  ABSL_LOG_INTERNAL_CHECK_GE_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  3.73k|  ABSL_LOG_INTERNAL_CHECK_OP(Check_GE, >=, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|  3.73k|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|  3.73k|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 3.73k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|  3.73k|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|  3.73k|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|  3.73k|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|  3.73k|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|  3.73k|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|  3.73k|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|  3.73k|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|  3.73k|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   79|  3.73k|  ABSL_LOG_INTERNAL_CHECK_LT_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|  3.73k|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LT, <, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|  3.73k|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|  3.73k|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 3.73k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|  3.73k|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|  3.73k|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|  3.73k|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|  3.73k|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|  3.73k|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|  3.73k|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|  3.73k|    return *cast<TypeHandler>(element_at(index));
  256|  3.73k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEPKNT_4TypeEPKv:
  665|  3.73k|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|  3.73k|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|  3.73k|  }
_ZN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE7MutableEi:
 1365|  2.80k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1366|  2.80k|  return RepeatedPtrFieldBase::Mutable<TypeHandler>(index);
 1367|  2.80k|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase7MutableINS1_18GenericTypeHandlerINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEPNT_4TypeEi:
  187|  2.80k|  Value<TypeHandler>* Mutable(int index) {
  188|  2.80k|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|  2.80k|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   81|  2.80k|  ABSL_LOG_INTERNAL_CHECK_GE_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  2.80k|  ABSL_LOG_INTERNAL_CHECK_OP(Check_GE, >=, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|  2.80k|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|  2.80k|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 2.80k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|  2.80k|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|  2.80k|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|  2.80k|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|  2.80k|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|  2.80k|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|  2.80k|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|  2.80k|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|  2.80k|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   79|  2.80k|  ABSL_LOG_INTERNAL_CHECK_LT_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|  2.80k|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LT, <, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|  2.80k|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|  2.80k|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 2.80k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|  2.80k|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|  2.80k|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|  2.80k|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|  2.80k|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|  2.80k|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|  2.80k|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  190|  2.80k|    return cast<TypeHandler>(element_at(index));
  191|  2.80k|  }
_ZNK6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto10ConnectionEE4sizeEv:
 1340|  5.14k|inline int RepeatedPtrField<Element>::size() const {
 1341|  5.14k|  return RepeatedPtrFieldBase::size();
 1342|  5.14k|}
_ZN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto10ConnectionEE5ClearEv:
 1469|  7.71k|inline void RepeatedPtrField<Element>::Clear() {
 1470|  7.71k|  RepeatedPtrFieldBase::Clear<TypeHandler>();
 1471|  7.71k|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS1_18GenericTypeHandlerIN4curl6fuzzer5proto10ConnectionEEEEEvv:
  265|  7.71k|  void Clear() {
  266|  7.71k|    const int n = current_size_;
  267|  7.71k|    ABSL_DCHECK_GE(n, 0);
  ------------------
  |  |   82|  7.71k|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   81|  7.71k|  ABSL_LOG_INTERNAL_CHECK_GE_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  7.71k|  ABSL_LOG_INTERNAL_CHECK_OP(Check_GE, >=, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|  7.71k|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|  7.71k|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 7.71k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|  7.71k|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|  7.71k|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|  7.71k|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|  7.71k|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|  7.71k|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|  7.71k|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|  7.71k|    if (n > 0) {
  ------------------
  |  Branch (268:9): [True: 0, False: 7.71k]
  ------------------
  269|      0|      using H = CommonHandler<TypeHandler>;
  270|      0|      ClearNonEmpty<H>();
  271|      0|    }
  272|  7.71k|  }
_ZNK6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto14WebSocketFrameEE4sizeEv:
 1340|  2.57k|inline int RepeatedPtrField<Element>::size() const {
 1341|  2.57k|  return RepeatedPtrFieldBase::size();
 1342|  2.57k|}
_ZN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto14WebSocketFrameEE5ClearEv:
 1469|  2.57k|inline void RepeatedPtrField<Element>::Clear() {
 1470|  2.57k|  RepeatedPtrFieldBase::Clear<TypeHandler>();
 1471|  2.57k|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS1_18GenericTypeHandlerIN4curl6fuzzer5proto14WebSocketFrameEEEEEvv:
  265|  2.57k|  void Clear() {
  266|  2.57k|    const int n = current_size_;
  267|  2.57k|    ABSL_DCHECK_GE(n, 0);
  ------------------
  |  |   82|  2.57k|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   81|  2.57k|  ABSL_LOG_INTERNAL_CHECK_GE_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  2.57k|  ABSL_LOG_INTERNAL_CHECK_OP(Check_GE, >=, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|  2.57k|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|  2.57k|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 2.57k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|  2.57k|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|  2.57k|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|  2.57k|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|  2.57k|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|  2.57k|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|  2.57k|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|  2.57k|    if (n > 0) {
  ------------------
  |  Branch (268:9): [True: 0, False: 2.57k]
  ------------------
  269|      0|      using H = CommonHandler<TypeHandler>;
  270|      0|      ClearNonEmpty<H>();
  271|      0|    }
  272|  2.57k|  }
_ZN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto9SetOptionEE5beginEv:
 1831|  5.14k|RepeatedPtrField<Element>::begin() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1832|  5.14k|  return iterator(raw_data());
 1833|  5.14k|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIN4curl6fuzzer5proto9SetOptionEEC2EPKPv:
 1617|  10.2k|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto9SetOptionEE3endEv:
 1846|  5.14k|RepeatedPtrField<Element>::end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1847|  5.14k|  return iterator(raw_data() + size());
 1848|  5.14k|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIN4curl6fuzzer5proto9SetOptionEEES9_:
 1647|  7.41k|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|  7.41k|    return x.it_ != y.it_;
 1649|  7.41k|  }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIN4curl6fuzzer5proto9SetOptionEEppEv:
 1632|  2.27k|  iterator& operator++() {
 1633|  2.27k|    ++it_;
 1634|  2.27k|    return *this;
 1635|  2.27k|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIN4curl6fuzzer5proto9SetOptionEEdeEv:
 1628|  2.27k|  reference operator*() const { return *reinterpret_cast<Element*>(*it_); }
_ZN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto9SetOptionEE14DeleteSubrangeEii:
 1399|  2.57k|inline void RepeatedPtrField<Element>::DeleteSubrange(int start, int num) {
 1400|  2.57k|  ABSL_DCHECK_GE(start, 0);
  ------------------
  |  |   82|  2.57k|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   81|  2.57k|  ABSL_LOG_INTERNAL_CHECK_GE_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  2.57k|  ABSL_LOG_INTERNAL_CHECK_OP(Check_GE, >=, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|  2.57k|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|  2.57k|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 2.57k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|  2.57k|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|  2.57k|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|  2.57k|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|  2.57k|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|  2.57k|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|  2.57k|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1401|  2.57k|  ABSL_DCHECK_GE(num, 0);
  ------------------
  |  |   82|  2.57k|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   81|  2.57k|  ABSL_LOG_INTERNAL_CHECK_GE_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  2.57k|  ABSL_LOG_INTERNAL_CHECK_OP(Check_GE, >=, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|  2.57k|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|  2.57k|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 2.57k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|  2.57k|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|  2.57k|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|  2.57k|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|  2.57k|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|  2.57k|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|  2.57k|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1402|  2.57k|  ABSL_DCHECK_LE(start + num, size());
  ------------------
  |  |   78|  2.57k|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   77|  2.57k|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|  2.57k|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|  2.57k|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|  2.57k|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 2.57k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|  2.57k|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|  2.57k|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|  2.57k|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|  2.57k|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|  2.57k|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|  2.57k|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1403|  2.57k|  void** subrange = raw_mutable_data() + start;
 1404|  2.57k|  Arena* arena = GetArena();
 1405|  2.57k|  for (int i = 0; i < num; ++i) {
  ------------------
  |  Branch (1405:19): [True: 0, False: 2.57k]
  ------------------
 1406|      0|    using H = CommonHandler<TypeHandler>;
 1407|      0|    H::Delete(static_cast<Element*>(subrange[i]), arena);
 1408|      0|  }
 1409|  2.57k|  UnsafeArenaExtractSubrange(start, num, nullptr);
 1410|  2.57k|}
_ZN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto9SetOptionEE8GetArenaEv:
 1541|  2.57k|inline Arena* RepeatedPtrField<Element>::GetArena() {
 1542|  2.57k|  return RepeatedPtrFieldBase::GetArena();
 1543|  2.57k|}
_ZN6google8protobuf8internal18GenericTypeHandlerINS0_11MessageLiteEE6DeleteEPS3_PNS0_5ArenaE:
  837|  1.86k|  static inline void Delete(Type* value, Arena* arena) {
  838|  1.86k|    if (arena != nullptr) return;
  ------------------
  |  Branch (838:9): [True: 0, False: 1.86k]
  ------------------
  839|  1.86k|#ifdef __cpp_if_constexpr
  840|  1.86k|    if constexpr (std::is_base_of<MessageLite, Type>::value) {
  841|       |      // Using virtual destructor to reduce generated code size that would have
  842|       |      // happened otherwise due to inlined `~Type()`.
  843|  1.86k|      InternalOutOfLineDeleteMessageLite(value);
  844|       |    } else {
  845|       |      delete value;
  846|       |    }
  847|       |#else
  848|       |    delete value;
  849|       |#endif
  850|  1.86k|  }
_ZN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto9SetOptionEE26UnsafeArenaExtractSubrangeEiiPPS5_:
 1454|  2.57k|    int start, int num, Element** elements) {
 1455|  2.57k|  ABSL_DCHECK_GE(start, 0);
  ------------------
  |  |   82|  2.57k|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   81|  2.57k|  ABSL_LOG_INTERNAL_CHECK_GE_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  2.57k|  ABSL_LOG_INTERNAL_CHECK_OP(Check_GE, >=, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|  2.57k|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|  2.57k|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 2.57k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|  2.57k|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|  2.57k|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|  2.57k|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|  2.57k|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|  2.57k|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|  2.57k|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1456|  2.57k|  ABSL_DCHECK_GE(num, 0);
  ------------------
  |  |   82|  2.57k|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   81|  2.57k|  ABSL_LOG_INTERNAL_CHECK_GE_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  2.57k|  ABSL_LOG_INTERNAL_CHECK_OP(Check_GE, >=, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|  2.57k|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|  2.57k|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 2.57k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|  2.57k|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|  2.57k|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|  2.57k|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|  2.57k|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|  2.57k|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|  2.57k|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1457|  2.57k|  ABSL_DCHECK_LE(start + num, size());
  ------------------
  |  |   78|  2.57k|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   77|  2.57k|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL(val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|  2.57k|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|  2.57k|  while (                                                                      \
  |  |  |  |  |  |  |  |   62|  2.57k|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 2.57k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|  2.57k|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |  |  |   64|  2.57k|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |  |  |   65|  2.57k|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |  |  |   66|  2.57k|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |  |  |   67|  2.57k|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |  |  |   68|  2.57k|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1458|       |
 1459|  2.57k|  if (num > 0) {
  ------------------
  |  Branch (1459:7): [True: 0, False: 2.57k]
  ------------------
 1460|       |    // Save the values of the removed elements if requested.
 1461|      0|    if (elements != nullptr) {
  ------------------
  |  Branch (1461:9): [True: 0, False: 0]
  ------------------
 1462|      0|      memcpy(elements, data() + start, num * sizeof(Element*));
 1463|      0|    }
 1464|      0|    CloseGap(start, num);
 1465|      0|  }
 1466|  2.57k|}
_ZN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE8GetArenaEv:
 1541|  1.29k|inline Arena* RepeatedPtrField<Element>::GetArena() {
 1542|  1.29k|  return RepeatedPtrFieldBase::GetArena();
 1543|  1.29k|}
_ZN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE5beginEv:
 1831|  5.14k|RepeatedPtrField<Element>::begin() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1832|  5.14k|  return iterator(raw_data());
 1833|  5.14k|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEC2EPKPv:
 1617|  10.4k|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3endEv:
 1846|  5.14k|RepeatedPtrField<Element>::end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1847|  5.14k|  return iterator(raw_data() + size());
 1848|  5.14k|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEESC_:
 1647|  6.13k|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|  6.13k|    return x.it_ != y.it_;
 1649|  6.13k|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEdeEv:
 1628|    997|  reference operator*() const { return *reinterpret_cast<Element*>(*it_); }
_ZN6google8protobuf8internal19RepeatedPtrIteratorINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEppEv:
 1632|    997|  iterator& operator++() {
 1633|    997|    ++it_;
 1634|    997|    return *this;
 1635|    997|  }
_ZN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto10ConnectionEE5beginEv:
 1831|  2.57k|RepeatedPtrField<Element>::begin() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1832|  2.57k|  return iterator(raw_data());
 1833|  2.57k|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIN4curl6fuzzer5proto10ConnectionEEC2EPKPv:
 1617|  5.14k|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto10ConnectionEE3endEv:
 1846|  2.57k|RepeatedPtrField<Element>::end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1847|  2.57k|  return iterator(raw_data() + size());
 1848|  2.57k|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIN4curl6fuzzer5proto10ConnectionEEES9_:
 1647|  2.57k|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|  2.57k|    return x.it_ != y.it_;
 1649|  2.57k|  }
_ZN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto9SetOptionEE19StaticValidityCheckEv:
  938|  2.57k|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|  2.57k|    static_assert(
  940|  2.57k|        absl::disjunction<
  941|  2.57k|            internal::is_supported_string_type<Element>,
  942|  2.57k|            internal::is_supported_message_type<Element>>::value,
  943|  2.57k|        "We only support string and Message types in RepeatedPtrField.");
  944|  2.57k|  }
_ZN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE19StaticValidityCheckEv:
  938|  9.84k|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|  9.84k|    static_assert(
  940|  9.84k|        absl::disjunction<
  941|  9.84k|            internal::is_supported_string_type<Element>,
  942|  9.84k|            internal::is_supported_message_type<Element>>::value,
  943|  9.84k|        "We only support string and Message types in RepeatedPtrField.");
  944|  9.84k|  }
_ZN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto10ConnectionEE19StaticValidityCheckEv:
  938|  2.57k|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|  2.57k|    static_assert(
  940|  2.57k|        absl::disjunction<
  941|  2.57k|            internal::is_supported_string_type<Element>,
  942|  2.57k|            internal::is_supported_message_type<Element>>::value,
  943|  2.57k|        "We only support string and Message types in RepeatedPtrField.");
  944|  2.57k|  }
_ZN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEED2Ev:
 1285|  9.84k|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|  9.84k|  StaticValidityCheck();
 1287|  9.84k|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 8.11k, False: 1.73k]
  ------------------
 1288|  1.73k|#ifdef __cpp_if_constexpr
 1289|       |  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|       |  if (std::is_base_of<MessageLite, Element>::value) {
 1292|       |#endif
 1293|       |    DestroyProtos();
 1294|  1.73k|  } else {
 1295|  1.73k|    Destroy<TypeHandler>();
 1296|  1.73k|  }
 1297|  1.73k|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase7DestroyINS1_18GenericTypeHandlerINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEvv:
  220|  1.73k|  void Destroy() {
  221|  1.73k|    ABSL_DCHECK(NeedsDestroy());
  ------------------
  |  |   47|  1.73k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   40|  1.73k|  ABSL_LOG_INTERNAL_CHECK_IMPL(condition, condition_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  3.46k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  1.73k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  3.46k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  3.46k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1.73k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  1.73k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1.73k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  3.46k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1.73k, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 1.73k]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 1.73k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  3.46k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  3.46k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  222|       |
  223|       |    // TODO: arena check is redundant once all `RepeatedPtrField`s
  224|       |    // with non-null arena are owned by the arena.
  225|  1.73k|    if (PROTOBUF_PREDICT_FALSE(arena_ != nullptr)) return;
  ------------------
  |  |  365|  1.73k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1.73k]
  |  |  |  Branch (365:54): [Folded, False: 1.73k]
  |  |  |  Branch (365:63): [True: 0, False: 1.73k]
  |  |  ------------------
  ------------------
  226|       |
  227|  1.73k|    using H = CommonHandler<TypeHandler>;
  228|  1.73k|    int n = allocated_size();
  229|  1.73k|    void** elems = elements();
  230|  5.53k|    for (int i = 0; i < n; i++) {
  ------------------
  |  Branch (230:21): [True: 3.80k, False: 1.73k]
  ------------------
  231|  3.80k|      Delete<H>(elems[i], nullptr);
  232|  3.80k|    }
  233|  1.73k|    if (!using_sso()) {
  ------------------
  |  Branch (233:9): [True: 790, False: 940]
  ------------------
  234|    790|      internal::SizedDelete(rep(),
  235|    790|                            Capacity() * sizeof(elems[0]) + kRepHeaderSize);
  236|    790|    }
  237|  1.73k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase6DeleteINS1_18GenericTypeHandlerINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEvPvPNS0_5ArenaE:
  669|  3.80k|  static inline void Delete(void* obj, Arena* arena) {
  670|  3.80k|    TypeHandler::Delete(cast<TypeHandler>(obj), arena);
  671|  3.80k|  }
_ZN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto10ConnectionEED2Ev:
 1285|  2.57k|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|  2.57k|  StaticValidityCheck();
 1287|  2.57k|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 2.57k, False: 0]
  ------------------
 1288|      0|#ifdef __cpp_if_constexpr
 1289|      0|  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|       |  if (std::is_base_of<MessageLite, Element>::value) {
 1292|       |#endif
 1293|      0|    DestroyProtos();
 1294|       |  } else {
 1295|       |    Destroy<TypeHandler>();
 1296|       |  }
 1297|      0|}
_ZN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto9SetOptionEED2Ev:
 1285|  2.57k|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|  2.57k|  StaticValidityCheck();
 1287|  2.57k|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 2.06k, False: 507]
  ------------------
 1288|    507|#ifdef __cpp_if_constexpr
 1289|    507|  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|       |  if (std::is_base_of<MessageLite, Element>::value) {
 1292|       |#endif
 1293|    507|    DestroyProtos();
 1294|       |  } else {
 1295|       |    Destroy<TypeHandler>();
 1296|       |  }
 1297|    507|}
_ZN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto9SetOptionEEC2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
  970|  2.57k|      : RepeatedPtrField(arena) {}
_ZN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto9SetOptionEEC2EPNS0_5ArenaE:
 1263|  2.57k|    : RepeatedPtrFieldBase(arena) {
 1264|       |  // We can't have StaticValidityCheck here because that requires Element to be
 1265|       |  // a complete type, and in split repeated fields cases, we call
 1266|       |  // CreateMessage<RepeatedPtrField<T>> for incomplete Ts.
 1267|  2.57k|}
_ZN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEC2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
  970|  7.18k|      : RepeatedPtrField(arena) {}
_ZN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEC2EPNS0_5ArenaE:
 1263|  7.18k|    : RepeatedPtrFieldBase(arena) {
 1264|       |  // We can't have StaticValidityCheck here because that requires Element to be
 1265|       |  // a complete type, and in split repeated fields cases, we call
 1266|       |  // CreateMessage<RepeatedPtrField<T>> for incomplete Ts.
 1267|  7.18k|}
_ZN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto10ConnectionEEC2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
  970|  2.57k|      : RepeatedPtrField(arena) {}
_ZN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto10ConnectionEEC2EPNS0_5ArenaE:
 1263|  2.57k|    : RepeatedPtrFieldBase(arena) {
 1264|       |  // We can't have StaticValidityCheck here because that requires Element to be
 1265|       |  // a complete type, and in split repeated fields cases, we call
 1266|       |  // CreateMessage<RepeatedPtrField<T>> for incomplete Ts.
 1267|  2.57k|}
_ZN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto14WebSocketFrameEE19StaticValidityCheckEv:
  938|  4.60k|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|  4.60k|    static_assert(
  940|  4.60k|        absl::disjunction<
  941|  4.60k|            internal::is_supported_string_type<Element>,
  942|  4.60k|            internal::is_supported_message_type<Element>>::value,
  943|  4.60k|        "We only support string and Message types in RepeatedPtrField.");
  944|  4.60k|  }
_ZN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto14WebSocketFrameEED2Ev:
 1285|  4.60k|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|  4.60k|  StaticValidityCheck();
 1287|  4.60k|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 4.60k, False: 0]
  ------------------
 1288|      0|#ifdef __cpp_if_constexpr
 1289|      0|  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|       |  if (std::is_base_of<MessageLite, Element>::value) {
 1292|       |#endif
 1293|      0|    DestroyProtos();
 1294|       |  } else {
 1295|       |    Destroy<TypeHandler>();
 1296|       |  }
 1297|      0|}
_ZN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto14WebSocketFrameEEC2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
  970|  2.03k|      : RepeatedPtrField(arena) {}
_ZN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto14WebSocketFrameEEC2EPNS0_5ArenaE:
 1263|  2.03k|    : RepeatedPtrFieldBase(arena) {
 1264|       |  // We can't have StaticValidityCheck here because that requires Element to be
 1265|       |  // a complete type, and in split repeated fields cases, we call
 1266|       |  // CreateMessage<RepeatedPtrField<T>> for incomplete Ts.
 1267|  2.03k|}

_ZN6google8protobuf8internal11SerialArena17ReturnArrayMemoryEPvm:
  151|     60|  void ReturnArrayMemory(void* p, size_t size) {
  152|       |    // We only need to check for 32-bit platforms.
  153|       |    // In 64-bit platforms the minimum allocation size from Repeated*Field will
  154|       |    // be 16 guaranteed.
  155|     60|    if (sizeof(void*) < 8) {
  ------------------
  |  Branch (155:9): [Folded, False: 60]
  ------------------
  156|      0|      if (PROTOBUF_PREDICT_FALSE(size < 16)) return;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  157|     60|    } else {
  158|     60|      PROTOBUF_ASSUME(size >= 16);
  ------------------
  |  |  944|     60|  if (!(pred)) {                                                               \
  |  |  ------------------
  |  |  |  Branch (944:7): [True: 4, False: 56]
  |  |  ------------------
  |  |  945|      4|    ::google::protobuf::internal::protobuf_assumption_failed(#pred, __FILE__, __LINE__); \
  |  |  946|      4|  }                                                                            \
  |  |  947|     60|  __builtin_assume(pred)
  ------------------
  159|     60|    }
  160|       |
  161|       |    // We round down to the next smaller block in case the memory doesn't match
  162|       |    // the pattern we are looking for. eg, someone might have called Reserve()
  163|       |    // on the repeated field.
  164|     60|    const size_t index = absl::bit_width(size) - 5;
  165|       |
  166|     60|    if (PROTOBUF_PREDICT_FALSE(index >= cached_block_length_)) {
  ------------------
  |  |  365|     60|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 60, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 56]
  |  |  |  Branch (365:63): [True: 56, False: 0]
  |  |  ------------------
  ------------------
  167|       |      // We can't put this object on the freelist so make this object the
  168|       |      // freelist. It is guaranteed it is larger than the one we have, and
  169|       |      // large enough to hold another allocation of `size`.
  170|     60|      CachedBlock** new_list = static_cast<CachedBlock**>(p);
  171|     60|      size_t new_size = size / sizeof(CachedBlock*);
  172|       |
  173|     60|      std::copy(cached_blocks_, cached_blocks_ + cached_block_length_,
  174|     60|                new_list);
  175|       |
  176|       |      // We need to unpoison this memory before filling it in case it has been
  177|       |      // poisoned by another sanitizer client.
  178|     60|      PROTOBUF_UNPOISON_MEMORY_REGION(
  179|     60|          new_list + cached_block_length_,
  180|     60|          (new_size - cached_block_length_) * sizeof(CachedBlock*));
  181|       |
  182|     60|      std::fill(new_list + cached_block_length_, new_list + new_size, nullptr);
  183|       |
  184|     60|      cached_blocks_ = new_list;
  185|       |      // Make the size fit in uint8_t. This is the power of two, so we don't
  186|       |      // need anything larger.
  187|     60|      cached_block_length_ =
  188|     60|          static_cast<uint8_t>(std::min(size_t{64}, new_size));
  189|       |
  190|     60|      return;
  191|     60|    }
  192|       |
  193|      0|    auto& cached_head = cached_blocks_[index];
  194|      0|    auto* new_node = static_cast<CachedBlock*>(p);
  195|      0|    new_node->next = cached_head;
  196|      0|    cached_head = new_node;
  197|      0|    PROTOBUF_POISON_MEMORY_REGION(p, size);
  198|      0|  }

_ZN6google8protobuf8internal15ThreadSafeArena17ReturnArrayMemoryEPvm:
   78|     60|  void ReturnArrayMemory(void* p, size_t size) {
   79|     60|    SerialArena* arena;
   80|     60|    if (PROTOBUF_PREDICT_TRUE(GetSerialArenaFast(&arena))) {
  ------------------
  |  |  364|     60|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 60, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 60]
  |  |  |  Branch (364:62): [True: 60, False: 0]
  |  |  ------------------
  ------------------
   81|     60|      arena->ReturnArrayMemory(p, size);
   82|     60|    }
   83|     60|  }
_ZN6google8protobuf8internal15ThreadSafeArena18GetSerialArenaFastEPPNS1_11SerialArenaE:
  173|  1.45k|  PROTOBUF_NDEBUG_INLINE bool GetSerialArenaFast(SerialArena** arena) {
  174|       |    // If this thread already owns a block in this arena then try to use that.
  175|       |    // This fast path optimizes the case where multiple threads allocate from
  176|       |    // the same arena.
  177|  1.45k|    ThreadCache* tc = &thread_cache();
  178|  1.45k|    if (PROTOBUF_PREDICT_TRUE(tc->last_lifecycle_id_seen == tag_and_id_)) {
  ------------------
  |  |  364|  1.45k|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 1.45k, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 1.45k]
  |  |  |  Branch (364:62): [True: 1.45k, False: 0]
  |  |  ------------------
  ------------------
  179|  1.45k|      *arena = tc->last_serial_arena;
  180|  1.45k|      return true;
  181|  1.45k|    }
  182|      0|    return false;
  183|  1.45k|  }
_ZN6google8protobuf8internal15ThreadSafeArena12thread_cacheEv:
  257|  1.46k|  static ThreadCache& thread_cache() { return thread_cache_; }

_ZN6google8protobuf15UnknownFieldSet16default_instanceEv:
  320|     19|inline const UnknownFieldSet& UnknownFieldSet::default_instance() {
  321|     19|  PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT static const UnknownFieldSet
  ------------------
  |  |  481|     19|#define PROTOBUF_ATTRIBUTE_NO_DESTROY [[clang::no_destroy]]
  ------------------
  322|     19|      instance;
  323|     19|  return instance;
  324|     19|}

_ZN6google8protobuf8internal14WireFormatLite7MakeTagEiNS2_8WireTypeE:
  828|  2.48k|                                                  WireType type) {
  829|  2.48k|  return GOOGLE_PROTOBUF_WIRE_FORMAT_MAKE_TAG(field_number, type);
  ------------------
  |  |  191|  2.48k|  static_cast<uint32_t>((static_cast<uint32_t>(FIELD_NUMBER) << 3) | (TYPE))
  ------------------
  830|  2.48k|}
_ZN6google8protobuf8internal14WireFormatLite15WriteTagToArrayEiNS2_8WireTypeEPh:
 1415|  2.48k|                                                uint8_t* target) {
 1416|  2.48k|  return io::CodedOutputStream::WriteTagToArray(MakeTag(field_number, type),
 1417|  2.48k|                                                target);
 1418|  2.48k|}
_ZN6google8protobuf8internal14WireFormatLite21WriteBoolNoTagToArrayEbPh:
 1476|    486|                                                      uint8_t* target) {
 1477|    486|  return io::CodedOutputStream::WriteVarint32ToArray(value ? 1 : 0, target);
  ------------------
  |  Branch (1477:54): [True: 184, False: 302]
  ------------------
 1478|    486|}
_ZN6google8protobuf8internal14WireFormatLite21WriteEnumNoTagToArrayEiPh:
 1480|  1.73k|                                                      uint8_t* target) {
 1481|  1.73k|  return io::CodedOutputStream::WriteVarint32SignExtendedToArray(value, target);
 1482|  1.73k|}
_ZN6google8protobuf8internal14WireFormatLite16WriteBoolToArrayEibPh:
 1648|    486|                                                 uint8_t* target) {
 1649|    486|  target = WriteTagToArray(field_number, WIRETYPE_VARINT, target);
 1650|    486|  return WriteBoolNoTagToArray(value, target);
 1651|    486|}
_ZN6google8protobuf8internal14WireFormatLite16WriteEnumToArrayEiiPh:
 1653|  1.73k|                                                 uint8_t* target) {
 1654|  1.73k|  target = WriteTagToArray(field_number, WIRETYPE_VARINT, target);
 1655|  1.73k|  return WriteEnumNoTagToArray(value, target);
 1656|  1.73k|}
_ZN6google8protobuf8internal14WireFormatLite8EnumSizeEi:
 1799|  1.71k|inline size_t WireFormatLite::EnumSize(int value) {
 1800|  1.71k|  return io::CodedOutputStream::VarintSize32SignExtended(value);
 1801|  1.71k|}
_ZN6google8protobuf8internal14WireFormatLite19LengthDelimitedSizeEm:
 1873|    530|inline size_t WireFormatLite::LengthDelimitedSize(size_t length) {
 1874|       |  // The static_cast here prevents an error in certain compiler configurations
 1875|       |  // but is not technically correct--if length is too large to fit in a uint32_t
 1876|       |  // then it will be silently truncated. We will need to fix this if we ever
 1877|       |  // decide to start supporting serialized messages greater than 2 GiB in size.
 1878|    530|  return length +
 1879|    530|         io::CodedOutputStream::VarintSize32(static_cast<uint32_t>(length));
 1880|    530|}

_ZNK6google8protobuf3Any12GetClassDataEv:
  220|  13.0k|const ::google::protobuf::internal::ClassData* Any::GetClassData() const {
  221|  13.0k|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
  222|  13.0k|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
  223|  13.0k|  return _class_data_.base();
  224|  13.0k|}
_ZNK6google8protobuf3Any11GetMetadataEv:
  383|  13.0k|::google::protobuf::Metadata Any::GetMetadata() const {
  384|  13.0k|  return ::google::protobuf::Message::GetMetadataImpl(GetClassData()->full());
  385|  13.0k|}

_ZN6google8protobuf8internal7cleanup9ChunkList7CleanupERKNS1_11SerialArenaE:
  148|      4|void ChunkList::Cleanup(const SerialArena& arena) {
  149|      4|  Chunk* c = head_;
  150|      4|  if (c == nullptr) return;
  ------------------
  |  Branch (150:7): [True: 4, False: 0]
  ------------------
  151|      0|  GetDeallocator deallocator(arena.parent_.AllocPolicy());
  152|       |
  153|       |  // Iterate backwards in order to destroy in the right order.
  154|      0|  CleanupNode* it = next_ - 1;
  155|      0|  while (true) {
  ------------------
  |  Branch (155:10): [True: 0, Folded]
  ------------------
  156|      0|    CleanupNode* first = c->First();
  157|       |    // A prefetch distance of 8 here was chosen arbitrarily.
  158|      0|    constexpr int kPrefetchDistance = 8;
  159|      0|    CleanupNode* prefetch = it;
  160|       |    // Prefetch the first kPrefetchDistance nodes.
  161|      0|    for (int i = 0; prefetch >= first && i < kPrefetchDistance;
  ------------------
  |  Branch (161:21): [True: 0, False: 0]
  |  Branch (161:42): [True: 0, False: 0]
  ------------------
  162|      0|         --prefetch, ++i) {
  163|      0|      prefetch->Prefetch();
  164|      0|    }
  165|       |    // For the middle nodes, run destructor and prefetch the node
  166|       |    // kPrefetchDistance after the current one.
  167|      0|    for (; prefetch >= first; --it, --prefetch) {
  ------------------
  |  Branch (167:12): [True: 0, False: 0]
  ------------------
  168|      0|      it->Destroy();
  169|      0|      prefetch->Prefetch();
  170|      0|    }
  171|       |    // Note: we could consider prefetching `next` chunk earlier.
  172|      0|    absl::PrefetchToLocalCacheNta(c->next);
  173|       |    // Destroy the rest without prefetching.
  174|      0|    for (; it >= first; --it) {
  ------------------
  |  Branch (174:12): [True: 0, False: 0]
  ------------------
  175|      0|      it->Destroy();
  176|      0|    }
  177|      0|    Chunk* next = c->next;
  178|      0|    deallocator({c, c->size});
  179|      0|    if (next == nullptr) return;
  ------------------
  |  Branch (179:9): [True: 0, False: 0]
  ------------------
  180|      0|    c = next;
  181|      0|    it = c->Last();
  182|      0|  };
  183|      0|}
_ZN6google8protobuf8internal11SerialArena23AllocateAlignedFallbackEm:
  272|     22|void* SerialArena::AllocateAlignedFallback(size_t n) {
  273|     22|  AllocateNewBlock(n);
  274|     22|  void* ret = nullptr;
  275|     22|  bool res = MaybeAllocateAligned(n, &ret);
  276|     22|  ABSL_DCHECK(res);
  ------------------
  |  |   47|     22|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     22|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     44|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     22|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     44|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     44|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 22, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     22|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 22]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     22|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 22, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     44|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     44|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  277|     22|  return ret;
  278|     22|}
_ZN6google8protobuf8internal11SerialArena31AllocateFromStringBlockFallbackEv:
  281|     18|void* SerialArena::AllocateFromStringBlockFallback() {
  282|     18|  ABSL_DCHECK_EQ(string_block_unused_.load(std::memory_order_relaxed), 0U);
  ------------------
  |  |   74|     18|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|     18|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     18|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 18]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     18|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  283|     18|  StringBlock* sb = string_block_.load(std::memory_order_relaxed);
  284|     18|  if (sb) {
  ------------------
  |  Branch (284:7): [True: 14, False: 4]
  ------------------
  285|     14|    AddSpaceUsed(sb->effective_size());
  286|     14|  }
  287|       |
  288|     18|  void* ptr;
  289|     18|  StringBlock* new_sb;
  290|     18|  size_t size = StringBlock::NextSize(sb);
  291|     18|  if (MaybeAllocateAligned(size, &ptr)) {
  ------------------
  |  Branch (291:7): [True: 13, False: 5]
  ------------------
  292|       |    // Correct space_used_ to avoid double counting
  293|     13|    AddSpaceUsed(-size);
  294|     13|    new_sb = StringBlock::Emplace(ptr, size, sb);
  295|     13|  } else {
  296|      5|    new_sb = StringBlock::New(sb);
  297|      5|    AddSpaceAllocated(new_sb->allocated_size());
  298|      5|  }
  299|     18|  string_block_.store(new_sb, std::memory_order_release);
  300|     18|  size_t unused = new_sb->effective_size() - sizeof(std::string);
  301|     18|  string_block_unused_.store(unused, std::memory_order_relaxed);
  302|     18|  return new_sb->AtOffset(unused);
  303|     18|}
_ZN6google8protobuf8internal11SerialArena16FreeStringBlocksEPNS1_11StringBlockEm:
  369|      4|                                     size_t unused_bytes) {
  370|      4|  ABSL_DCHECK(string_block != nullptr);
  ------------------
  |  |   47|      4|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      4|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  371|      4|  StringBlock* next = string_block->next();
  372|      4|  absl::PrefetchToLocalCacheNta(next);
  373|      4|  std::string* end = string_block->end();
  374|    138|  for (std::string* s = string_block->AtOffset(unused_bytes); s != end; ++s) {
  ------------------
  |  Branch (374:63): [True: 134, False: 4]
  ------------------
  375|    134|    s->~basic_string();
  376|    134|  }
  377|      4|  size_t deallocated = StringBlock::Delete(string_block);
  378|       |
  379|     18|  while ((string_block = next) != nullptr) {
  ------------------
  |  Branch (379:10): [True: 14, False: 4]
  ------------------
  380|     14|    next = string_block->next();
  381|     14|    absl::PrefetchToLocalCacheNta(next);
  382|    532|    for (std::string& s : *string_block) {
  ------------------
  |  Branch (382:25): [True: 532, False: 14]
  ------------------
  383|    532|      s.~basic_string();
  384|    532|    }
  385|     14|    deallocated += StringBlock::Delete(string_block);
  386|     14|  }
  387|      4|  return deallocated;
  388|      4|}
_ZN6google8protobuf8internal15ThreadSafeArena22SentrySerialArenaChunkEv:
  539|      4|ThreadSafeArena::SerialArenaChunk* ThreadSafeArena::SentrySerialArenaChunk() {
  540|       |  // const_cast is okay because the sentry chunk is never mutated. Also,
  541|       |  // reinterpret_cast is acceptable here as it should be identical to
  542|       |  // SerialArenaChunk with zero payload. This is a necessary trick to
  543|       |  // constexpr initialize kSentryArenaChunk.
  544|      4|  return reinterpret_cast<SerialArenaChunk*>(
  545|      4|      const_cast<SerialArenaChunkHeader*>(&kSentryArenaChunk));
  546|      4|}
_ZN6google8protobuf8internal15ThreadSafeArenaC2Ev:
  567|      4|ThreadSafeArena::ThreadSafeArena() : first_arena_(*this) { Init(); }
_ZN6google8protobuf8internal15ThreadSafeArena18GetNextLifeCycleIdEv:
  638|      4|uint64_t ThreadSafeArena::GetNextLifeCycleId() {
  639|      4|  ThreadCache& tc = thread_cache();
  640|      4|  uint64_t id = tc.next_lifecycle_id;
  641|      4|  constexpr uint64_t kInc = ThreadCache::kPerThreadIds;
  642|      4|  if (PROTOBUF_PREDICT_FALSE((id & (kInc - 1)) == 0)) {
  ------------------
  |  |  365|      4|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 1, False: 3]
  |  |  |  Branch (365:54): [Folded, False: 4]
  |  |  |  Branch (365:63): [True: 1, False: 3]
  |  |  ------------------
  ------------------
  643|       |    // On platforms that don't support uint64_t atomics we can certainly not
  644|       |    // afford to increment by large intervals and expect uniqueness due to
  645|       |    // wrapping, hence we only add by 1.
  646|      1|    id = lifecycle_id_.fetch_add(1, std::memory_order_relaxed) * kInc;
  647|      1|  }
  648|      4|  tc.next_lifecycle_id = id + 1;
  649|      4|  return id;
  650|      4|}
_ZN6google8protobuf8internal15ThreadSafeArena4InitEv:
  719|      4|void ThreadSafeArena::Init() {
  720|      4|  tag_and_id_ = GetNextLifeCycleId();
  721|      4|  arena_stats_ = Sample();
  722|      4|  head_.store(SentrySerialArenaChunk(), std::memory_order_relaxed);
  723|      4|  first_owner_ = &thread_cache();
  724|       |
  725|       |  // Record allocation for the first block that was either user-provided or
  726|       |  // newly allocated.
  727|      4|  ThreadSafeArenaStats::RecordAllocateStats(
  728|      4|      arena_stats_.MutableStats(),
  729|      4|      /*used=*/0,
  730|      4|      /*allocated=*/first_arena_.SpaceAllocated(),
  731|      4|      /*wasted=*/0);
  732|       |
  733|      4|  CacheSerialArena(&first_arena_);
  734|      4|}
_ZN6google8protobuf8internal15ThreadSafeArenaD2Ev:
  736|      4|ThreadSafeArena::~ThreadSafeArena() {
  737|       |  // Have to do this in a first pass, because some of the destructors might
  738|       |  // refer to memory in other blocks.
  739|      4|  CleanupList();
  740|       |
  741|      4|  auto mem = Free();
  742|      4|  if (alloc_policy_.is_user_owned_initial_block()) {
  ------------------
  |  Branch (742:7): [True: 0, False: 4]
  ------------------
  743|       |    // Unpoison the initial block, now that it's going back to the user.
  744|      0|    PROTOBUF_UNPOISON_MEMORY_REGION(mem.p, mem.n);
  745|      4|  } else if (mem.n > 0) {
  ------------------
  |  Branch (745:14): [True: 0, False: 4]
  ------------------
  746|      0|    GetDeallocator(alloc_policy_.get())(mem);
  747|      0|  }
  748|      4|}
_ZN6google8protobuf8internal15ThreadSafeArena4FreeEv:
  750|      4|SizedPtr ThreadSafeArena::Free() {
  751|      4|  auto deallocator = GetDeallocator(alloc_policy_.get());
  752|       |
  753|      4|  WalkSerialArenaChunk([&](SerialArenaChunk* chunk) {
  754|      4|    absl::Span<std::atomic<SerialArena*>> span = chunk->arenas();
  755|       |    // Walks arenas backward to handle the first serial arena the last. Freeing
  756|       |    // in reverse-order to the order in which objects were created may not be
  757|       |    // necessary to Free and we should revisit this. (b/247560530)
  758|      4|    for (auto it = span.rbegin(); it != span.rend(); ++it) {
  759|      4|      SerialArena* serial = it->load(std::memory_order_relaxed);
  760|      4|      ABSL_DCHECK_NE(serial, nullptr);
  761|       |      // Always frees the first block of "serial" as it cannot be user-provided.
  762|      4|      SizedPtr mem = serial->Free(deallocator);
  763|      4|      ABSL_DCHECK_NE(mem.p, nullptr);
  764|      4|      deallocator(mem);
  765|      4|    }
  766|       |
  767|       |    // Delete the chunk as we're done with it.
  768|      4|    internal::SizedDelete(chunk,
  769|      4|                          SerialArenaChunk::AllocSize(chunk->capacity()));
  770|      4|  });
  771|       |
  772|       |  // The first block of the first arena is special and let the caller handle it.
  773|      4|  return first_arena_.Free(deallocator);
  774|      4|}
_ZN6google8protobuf8internal15ThreadSafeArena14GetSerialArenaEv:
  823|    663|SerialArena* ThreadSafeArena::GetSerialArena() {
  824|    663|  SerialArena* arena;
  825|    663|  if (PROTOBUF_PREDICT_FALSE(!GetSerialArenaFast(&arena))) {
  ------------------
  |  |  365|    663|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 663]
  |  |  |  Branch (365:54): [Folded, False: 663]
  |  |  |  Branch (365:63): [True: 0, False: 663]
  |  |  ------------------
  ------------------
  826|      0|    arena = GetSerialArenaFallback(kMaxCleanupNodeSize);
  827|      0|  }
  828|    663|  return arena;
  829|    663|}
_ZN6google8protobuf8internal15ThreadSafeArena23AllocateFromStringBlockEv:
  839|    663|void* ThreadSafeArena::AllocateFromStringBlock() {
  840|    663|  return GetSerialArena()->AllocateFromStringBlock();
  841|    663|}
_ZN6google8protobuf8internal15ThreadSafeArena11CleanupListEv:
  917|      4|void ThreadSafeArena::CleanupList() {
  918|       |#ifdef PROTOBUF_ASAN
  919|       |  UnpoisonAllArenaBlocks();
  920|       |#endif
  921|       |
  922|      4|  WalkSerialArenaChunk([](SerialArenaChunk* chunk) {
  923|      4|    absl::Span<std::atomic<SerialArena*>> span = chunk->arenas();
  924|       |    // Walks arenas backward to handle the first serial arena the last.
  925|       |    // Destroying in reverse-order to the construction is often assumed by users
  926|       |    // and required not to break inter-object dependencies. (b/247560530)
  927|      4|    for (auto it = span.rbegin(); it != span.rend(); ++it) {
  928|      4|      SerialArena* serial = it->load(std::memory_order_relaxed);
  929|      4|      ABSL_DCHECK_NE(serial, nullptr);
  930|      4|      serial->CleanupList();
  931|      4|    }
  932|      4|  });
  933|       |  // First arena must be cleaned up last. (b/247560530)
  934|      4|  first_arena_.CleanupList();
  935|      4|}
_ZN6google8protobuf5Arena8AllocateEm:
  974|    577|void* Arena::Allocate(size_t n) { return impl_.AllocateAligned(n); }
_ZN6google8protobuf5Arena16AllocateForArrayEm:
  976|    148|void* Arena::AllocateForArray(size_t n) {
  977|    148|  return impl_.AllocateAligned<internal::AllocationClient::kArray>(n);
  978|    148|}
arena.cc:_ZN6google8protobuf8internal12_GLOBAL__N_114AllocationSizeEmmm:
   64|     22|                             size_t max_size) {
   65|     22|  if (last_size == 0) return start_size;
  ------------------
  |  Branch (65:7): [True: 4, False: 18]
  ------------------
   66|       |  // Double the current block size, up to a limit.
   67|     18|  return std::min(2 * last_size, max_size);
   68|     22|}
arena.cc:_ZN6google8protobuf8internal12_GLOBAL__N_114AllocateMemoryERKNS1_16AllocationPolicyEm:
   70|     22|SizedPtr AllocateMemory(const AllocationPolicy& policy, size_t size) {
   71|     22|  if (policy.block_alloc == nullptr) {
  ------------------
  |  Branch (71:7): [True: 22, False: 0]
  ------------------
   72|     22|    return AllocateAtLeast(size);
   73|     22|  }
   74|      0|  return {policy.block_alloc(size), size};
   75|     22|}
arena.cc:_ZN6google8protobuf8internal12_GLOBAL__N_114GetDeallocatorC2EPKNS1_16AllocationPolicyE:
  105|      4|      : dealloc_(policy ? policy->block_dealloc : nullptr) {}
  ------------------
  |  Branch (105:18): [True: 0, False: 4]
  ------------------
arena.cc:_ZNK6google8protobuf8internal12_GLOBAL__N_114GetDeallocatorclENS1_8SizedPtrE:
  107|     22|  void operator()(SizedPtr mem) const {
  108|     22|    if (dealloc_) {
  ------------------
  |  Branch (108:9): [True: 0, False: 22]
  ------------------
  109|      0|      dealloc_(mem.p, mem.n);
  110|     22|    } else {
  111|     22|      internal::SizedDelete(mem.p, mem.n);
  112|     22|    }
  113|     22|  }
_ZN6google8protobuf8internal11SerialArena16AllocateNewBlockEm:
  313|     22|void SerialArena::AllocateNewBlock(size_t n) {
  314|     22|  size_t used = 0;
  315|     22|  size_t wasted = 0;
  316|     22|  ArenaBlock* old_head = head();
  317|     22|  if (!old_head->IsSentry()) {
  ------------------
  |  Branch (317:7): [True: 18, False: 4]
  ------------------
  318|       |    // Record how much used in this block.
  319|     18|    used = static_cast<size_t>(ptr() - old_head->Pointer(kBlockHeaderSize));
  320|     18|    wasted = old_head->size - used - kBlockHeaderSize;
  321|     18|    AddSpaceUsed(used);
  322|     18|  }
  323|       |
  324|       |  // TODO: Evaluate if pushing unused space into the cached blocks is a
  325|       |  // win. In preliminary testing showed increased memory savings as expected,
  326|       |  // but with a CPU regression. The regression might have been an artifact of
  327|       |  // the microbenchmark.
  328|       |
  329|     22|  auto mem = AllocateBlock(parent_.AllocPolicy(), old_head->size, n);
  330|     22|  AddSpaceAllocated(mem.n);
  331|     22|  ThreadSafeArenaStats::RecordAllocateStats(parent_.arena_stats_.MutableStats(),
  332|     22|                                            /*used=*/used,
  333|     22|                                            /*allocated=*/mem.n, wasted);
  334|     22|  auto* new_head = new (mem.p) ArenaBlock{old_head, mem.n};
  335|     22|  set_range(new_head->Pointer(kBlockHeaderSize), new_head->Limit());
  336|       |  // Previous writes must take effect before writing new head.
  337|     22|  head_.store(new_head, std::memory_order_release);
  338|       |
  339|     22|  PROTOBUF_POISON_MEMORY_REGION(ptr(), limit_ - ptr());
  340|     22|}
_ZN6google8protobuf8internal11SerialArenaC2ERNS1_15ThreadSafeArenaE:
  218|      4|    : head_{SentryArenaBlock()}, parent_{parent} {}
arena.cc:_ZN6google8protobuf8internal12_GLOBAL__N_116SentryArenaBlockEv:
   56|      4|ArenaBlock* SentryArenaBlock() {
   57|      4|  static const ArenaBlock kSentryArenaBlock;
   58|       |  // const_cast<> is okay as kSentryArenaBlock will never be mutated.
   59|      4|  return const_cast<ArenaBlock*>(&kSentryArenaBlock);
   60|      4|}
arena.cc:_ZN6google8protobuf8internal12_GLOBAL__N_113AllocateBlockEPKNS1_16AllocationPolicyEmm:
   78|     22|                       size_t min_bytes) {
   79|     22|  AllocationPolicy policy;  // default policy
   80|     22|  if (policy_ptr) policy = *policy_ptr;
  ------------------
  |  Branch (80:7): [True: 0, False: 22]
  ------------------
   81|     22|  size_t size =
   82|     22|      AllocationSize(last_size, policy.start_block_size, policy.max_block_size);
   83|       |  // Verify that min_bytes + kBlockHeaderSize won't overflow.
   84|     22|  ABSL_CHECK_LE(min_bytes, std::numeric_limits<size_t>::max() -
  ------------------
  |  |   54|     22|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|     22|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|     22|  while (                                                                      \
  |  |  |  |  |  |   62|     22|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 22]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|     22|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|     22|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|     22|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|     22|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|     22|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|     22|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   85|     22|                               SerialArena::kBlockHeaderSize);
   86|     22|  size = std::max(size, SerialArena::kBlockHeaderSize + min_bytes);
   87|       |
   88|     22|  return AllocateMemory(policy, size);
   89|     22|}
_ZNK6google8protobuf8internal15ThreadSafeArena16SerialArenaChunk8IsSentryEv:
  439|      8|  bool IsSentry() const { return capacity() == 0; }
_ZNK6google8protobuf8internal15ThreadSafeArena16SerialArenaChunk8capacityEv:
  449|      8|  uint32_t capacity() const { return header().capacity; }
_ZNK6google8protobuf8internal15ThreadSafeArena16SerialArenaChunk6headerEv:
  518|      8|  const SerialArenaChunkHeader& header() const {
  519|      8|    return *layout_type::Partial().Pointer<kHeader>(ptr());
  520|      8|  }
_ZNK6google8protobuf8internal15ThreadSafeArena16SerialArenaChunk3ptrEv:
  512|      8|  const char* ptr() const { return reinterpret_cast<const char*>(this); }
arena.cc:_ZN6google8protobuf8internal11SerialArena4FreeINS1_12_GLOBAL__N_114GetDeallocatorEEENS1_8SizedPtrET_:
  258|      4|SizedPtr SerialArena::Free(Deallocator deallocator) {
  259|      4|  FreeStringBlocks();
  260|       |
  261|      4|  ArenaBlock* b = head();
  262|      4|  SizedPtr mem = {b, b->size};
  263|     26|  while (b->next) {
  ------------------
  |  Branch (263:10): [True: 22, False: 4]
  ------------------
  264|     22|    b = b->next;  // We must first advance before deleting this block
  265|     22|    deallocator(mem);
  266|     22|    mem = {b, b->size};
  267|     22|  }
  268|      4|  return mem;
  269|      4|}
arena.cc:_ZN6google8protobuf8internal15ThreadSafeArena20WalkSerialArenaChunkIZNS2_4FreeEvE3$_0EEvT_:
  855|      4|void ThreadSafeArena::WalkSerialArenaChunk(Callback fn) {
  856|       |  // By omitting an Acquire barrier we help the sanitizer that any user code
  857|       |  // that doesn't properly synchronize Reset() or the destructor will throw a
  858|       |  // TSAN warning.
  859|      4|  SerialArenaChunk* chunk = head_.load(std::memory_order_relaxed);
  860|       |
  861|      4|  while (!chunk->IsSentry()) {
  ------------------
  |  Branch (861:10): [True: 0, False: 4]
  ------------------
  862|       |    // Cache next chunk in case this chunk is destroyed.
  863|      0|    SerialArenaChunk* next_chunk = chunk->next_chunk();
  864|       |    // Prefetch the next chunk.
  865|      0|    absl::PrefetchToLocalCache(next_chunk);
  866|      0|    fn(chunk);
  867|      0|    chunk = next_chunk;
  868|      0|  }
  869|      4|}
arena.cc:_ZN6google8protobuf8internal15ThreadSafeArena20WalkSerialArenaChunkIZNS2_11CleanupListEvE3$_0EEvT_:
  855|      4|void ThreadSafeArena::WalkSerialArenaChunk(Callback fn) {
  856|       |  // By omitting an Acquire barrier we help the sanitizer that any user code
  857|       |  // that doesn't properly synchronize Reset() or the destructor will throw a
  858|       |  // TSAN warning.
  859|      4|  SerialArenaChunk* chunk = head_.load(std::memory_order_relaxed);
  860|       |
  861|      4|  while (!chunk->IsSentry()) {
  ------------------
  |  Branch (861:10): [True: 0, False: 4]
  ------------------
  862|       |    // Cache next chunk in case this chunk is destroyed.
  863|      0|    SerialArenaChunk* next_chunk = chunk->next_chunk();
  864|       |    // Prefetch the next chunk.
  865|      0|    absl::PrefetchToLocalCache(next_chunk);
  866|      0|    fn(chunk);
  867|      0|    chunk = next_chunk;
  868|      0|  }
  869|      4|}

_ZN6google8protobuf5ArenaC2Ev:
  173|      4|  inline Arena() : impl_() {}
_ZN6google8protobuf8internal23CanMoveWithInternalSwapEPNS0_5ArenaES3_:
  101|    259|inline bool CanMoveWithInternalSwap(Arena* lhs, Arena* rhs) {
  102|    259|  if (DebugHardenForceCopyInMove()) {
  ------------------
  |  Branch (102:7): [Folded, False: 259]
  ------------------
  103|       |    // We force copy in move when we are not using an arena.
  104|       |    // If we did with an arena we would grow arena usage too much.
  105|      0|    return lhs != nullptr && lhs == rhs;
  ------------------
  |  Branch (105:12): [True: 0, False: 0]
  |  Branch (105:30): [True: 0, False: 0]
  ------------------
  106|    259|  } else {
  107|    259|    return lhs == rhs;
  108|    259|  }
  109|    259|}
_ZN6google8protobuf5Arena16AllocateInternalINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEELb0EEEPvv:
  706|    663|inline void* Arena::AllocateInternal<std::string, false>() {
  707|    663|  return impl_.AllocateFromStringBlock();
  708|    663|}
_ZZN6google8protobuf5Arena6CreateINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJEEEPT_PS1_DpOT0_ENKUlDpOT_E0_clIJEEEDaSI_:
  244|  4.46k|        [arena](auto&&... args) {
  245|  4.46k|          if (PROTOBUF_PREDICT_FALSE(arena == nullptr)) {
  ------------------
  |  |  365|  4.46k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 3.80k, False: 663]
  |  |  |  Branch (365:54): [Folded, False: 4.46k]
  |  |  |  Branch (365:63): [True: 3.80k, False: 663]
  |  |  ------------------
  ------------------
  246|  3.80k|            return new T(std::forward<Args>(args)...);
  247|  3.80k|          }
  248|    663|          return new (arena->AllocateInternal<T>())
  249|    663|              T(std::forward<Args>(args)...);
  250|  4.46k|        },
_ZN6google8protobuf5Arena6CreateINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJEEEPT_PS1_DpOT0_:
  216|  4.46k|  PROTOBUF_NDEBUG_INLINE static T* Create(Arena* arena, Args&&... args) {
  217|  4.46k|    return absl::utility_internal::IfConstexprElse<
  218|  4.46k|        is_arena_constructable<T>::value>(
  219|       |        // Arena-constructable
  220|  4.46k|        [arena](auto&&... args) {
  221|  4.46k|          using Type = std::remove_const_t<T>;
  222|       |#ifdef __cpp_if_constexpr
  223|       |          // DefaultConstruct/CopyConstruct are optimized for messages, which
  224|       |          // are both arena constructible and destructor skippable and they
  225|       |          // assume much. Don't use these functions unless the invariants
  226|       |          // hold.
  227|       |          if constexpr (is_destructor_skippable<T>::value) {
  228|       |            constexpr auto construct_type = GetConstructType<T, Args&&...>();
  229|       |            // We delegate to DefaultConstruct/CopyConstruct where appropriate
  230|       |            // because protobuf generated classes have external templates for
  231|       |            // these functions for code size reasons. When `if constexpr` is not
  232|       |            // available always use the fallback.
  233|       |            if constexpr (construct_type == ConstructType::kDefault) {
  234|       |              return static_cast<Type*>(DefaultConstruct<Type>(arena));
  235|       |            } else if constexpr (construct_type == ConstructType::kCopy) {
  236|       |              return static_cast<Type*>(CopyConstruct<Type>(arena, &args...));
  237|       |            }
  238|       |          }
  239|       |#endif
  240|  4.46k|          return CreateArenaCompatible<Type>(arena,
  241|  4.46k|                                             std::forward<Args>(args)...);
  242|  4.46k|        },
  243|       |        // Non arena-constructable
  244|  4.46k|        [arena](auto&&... args) {
  245|  4.46k|          if (PROTOBUF_PREDICT_FALSE(arena == nullptr)) {
  246|  4.46k|            return new T(std::forward<Args>(args)...);
  247|  4.46k|          }
  248|  4.46k|          return new (arena->AllocateInternal<T>())
  249|  4.46k|              T(std::forward<Args>(args)...);
  250|  4.46k|        },
  251|  4.46k|        std::forward<Args>(args)...);
  252|  4.46k|  }
_ZN6google8protobuf5Arena11CreateArrayINS0_8internal12ExtensionSet8KeyValueEEEPT_PS1_m:
  286|    502|                                               size_t num_elements) {
  287|    502|    static_assert(std::is_trivial<T>::value,
  288|    502|                  "CreateArray requires a trivially constructible type");
  289|    502|    static_assert(std::is_trivially_destructible<T>::value,
  290|    502|                  "CreateArray requires a trivially destructible type");
  291|    502|    ABSL_CHECK_LE(num_elements, std::numeric_limits<size_t>::max() / sizeof(T))
  ------------------
  |  |   54|      0|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|    502|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|    502|  while (                                                                      \
  |  |  |  |  |  |   62|    502|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 502]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|    502|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|    502|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|    502|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|    502|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|    502|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|    502|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|    502|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|    502|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  292|      0|        << "Requested size is too large to fit into size_t.";
  293|    502|    if (PROTOBUF_PREDICT_FALSE(arena == nullptr)) {
  ------------------
  |  |  365|    502|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 502, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 502]
  |  |  |  Branch (365:63): [True: 502, False: 0]
  |  |  ------------------
  ------------------
  294|    502|      return new T[num_elements];
  295|    502|    } else {
  296|       |      // We count on compiler to realize that if sizeof(T) is a multiple of
  297|       |      // 8 AlignUpTo can be elided.
  298|      0|      return static_cast<T*>(
  299|      0|          arena->AllocateAlignedForArray(sizeof(T) * num_elements, alignof(T)));
  300|      0|    }
  301|    502|  }
_ZN6google8protobuf5ArenaD2Ev:
  198|      4|  inline ~Arena() = default;
_ZN6google8protobuf5Arena6CreateINS0_19FileDescriptorProtoEJEEEPT_PS1_DpOT0_:
  216|      4|  PROTOBUF_NDEBUG_INLINE static T* Create(Arena* arena, Args&&... args) {
  217|      4|    return absl::utility_internal::IfConstexprElse<
  218|      4|        is_arena_constructable<T>::value>(
  219|       |        // Arena-constructable
  220|      4|        [arena](auto&&... args) {
  221|      4|          using Type = std::remove_const_t<T>;
  222|       |#ifdef __cpp_if_constexpr
  223|       |          // DefaultConstruct/CopyConstruct are optimized for messages, which
  224|       |          // are both arena constructible and destructor skippable and they
  225|       |          // assume much. Don't use these functions unless the invariants
  226|       |          // hold.
  227|       |          if constexpr (is_destructor_skippable<T>::value) {
  228|       |            constexpr auto construct_type = GetConstructType<T, Args&&...>();
  229|       |            // We delegate to DefaultConstruct/CopyConstruct where appropriate
  230|       |            // because protobuf generated classes have external templates for
  231|       |            // these functions for code size reasons. When `if constexpr` is not
  232|       |            // available always use the fallback.
  233|       |            if constexpr (construct_type == ConstructType::kDefault) {
  234|       |              return static_cast<Type*>(DefaultConstruct<Type>(arena));
  235|       |            } else if constexpr (construct_type == ConstructType::kCopy) {
  236|       |              return static_cast<Type*>(CopyConstruct<Type>(arena, &args...));
  237|       |            }
  238|       |          }
  239|       |#endif
  240|      4|          return CreateArenaCompatible<Type>(arena,
  241|      4|                                             std::forward<Args>(args)...);
  242|      4|        },
  243|       |        // Non arena-constructable
  244|      4|        [arena](auto&&... args) {
  245|      4|          if (PROTOBUF_PREDICT_FALSE(arena == nullptr)) {
  246|      4|            return new T(std::forward<Args>(args)...);
  247|      4|          }
  248|      4|          return new (arena->AllocateInternal<T>())
  249|      4|              T(std::forward<Args>(args)...);
  250|      4|        },
  251|      4|        std::forward<Args>(args)...);
  252|      4|  }
_ZZN6google8protobuf5Arena6CreateINS0_19FileDescriptorProtoEJEEEPT_PS1_DpOT0_ENKUlDpOT_E_clIJEEEDaSC_:
  220|      4|        [arena](auto&&... args) {
  221|      4|          using Type = std::remove_const_t<T>;
  222|       |#ifdef __cpp_if_constexpr
  223|       |          // DefaultConstruct/CopyConstruct are optimized for messages, which
  224|       |          // are both arena constructible and destructor skippable and they
  225|       |          // assume much. Don't use these functions unless the invariants
  226|       |          // hold.
  227|       |          if constexpr (is_destructor_skippable<T>::value) {
  228|       |            constexpr auto construct_type = GetConstructType<T, Args&&...>();
  229|       |            // We delegate to DefaultConstruct/CopyConstruct where appropriate
  230|       |            // because protobuf generated classes have external templates for
  231|       |            // these functions for code size reasons. When `if constexpr` is not
  232|       |            // available always use the fallback.
  233|       |            if constexpr (construct_type == ConstructType::kDefault) {
  234|       |              return static_cast<Type*>(DefaultConstruct<Type>(arena));
  235|       |            } else if constexpr (construct_type == ConstructType::kCopy) {
  236|       |              return static_cast<Type*>(CopyConstruct<Type>(arena, &args...));
  237|       |            }
  238|       |          }
  239|       |#endif
  240|      4|          return CreateArenaCompatible<Type>(arena,
  241|      4|                                             std::forward<Args>(args)...);
  242|      4|        },
_ZN6google8protobuf5Arena21CreateArenaCompatibleINS0_19FileDescriptorProtoEEEPT_PS1_:
  547|      4|  PROTOBUF_NDEBUG_INLINE static T* CreateArenaCompatible(Arena* arena) {
  548|      4|    static_assert(is_arena_constructable<T>::value,
  549|      4|                  "Can only construct types that are ArenaConstructable");
  550|      4|    if (PROTOBUF_PREDICT_FALSE(arena == nullptr)) {
  ------------------
  |  |  365|      4|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 4]
  |  |  |  Branch (365:54): [Folded, False: 4]
  |  |  |  Branch (365:63): [True: 0, False: 4]
  |  |  ------------------
  ------------------
  551|       |      // Generated arena constructor T(Arena*) is protected. Call via
  552|       |      // InternalHelper.
  553|      0|      return InternalHelper<T>::New();
  554|      4|    } else {
  555|      4|      return arena->DoCreateMessage<T>();
  556|      4|    }
  557|      4|  }
_ZN6google8protobuf5Arena15DoCreateMessageINS0_19FileDescriptorProtoEJEEEPT_DpOT0_:
  588|      4|  PROTOBUF_NDEBUG_INLINE T* DoCreateMessage(Args&&... args) {
  589|      4|    return InternalHelper<T>::Construct(
  590|      4|        AllocateInternal<T, is_destructor_skippable<T>::value>(), this,
  591|      4|        std::forward<Args>(args)...);
  592|      4|  }
_ZN6google8protobuf5Arena14InternalHelperINS0_19FileDescriptorProtoEE9ConstructIJPS1_EEEPS3_PvDpOT_:
  457|      4|    static T* Construct(void* ptr, Args&&... args) {
  458|      4|      return new (ptr) T(static_cast<Args&&>(args)...);
  459|      4|    }
_ZN6google8protobuf5Arena16AllocateInternalINS0_19FileDescriptorProtoELb1EEEPvv:
  560|      4|  PROTOBUF_NDEBUG_INLINE void* AllocateInternal() {
  561|      4|    if (trivial) {
  ------------------
  |  Branch (561:9): [True: 4, Folded]
  ------------------
  562|      4|      return AllocateAligned(sizeof(T), alignof(T));
  563|      4|    } else {
  564|       |      // We avoid instantiating arena_destruct_object<T> in the trivial case.
  565|      0|      constexpr auto dtor = &internal::cleanup::arena_destruct_object<
  566|      0|          std::conditional_t<trivial, std::string, T>>;
  567|      0|      return AllocateAlignedWithCleanup(sizeof(T), alignof(T), dtor);
  568|      0|    }
  569|      4|  }

_ZN6google8protobuf8internal25TaggedAllocationPolicyPtrC2Ev:
   43|      4|  constexpr TaggedAllocationPolicyPtr() : policy_(0) {}
_ZN6google8protobuf8internal25TaggedAllocationPolicyPtr3getEv:
   53|      4|  AllocationPolicy* get() {
   54|      4|    return reinterpret_cast<AllocationPolicy*>(policy_ & kPtrMask);
   55|      4|  }
_ZNK6google8protobuf8internal25TaggedAllocationPolicyPtr3getEv:
   56|     22|  const AllocationPolicy* get() const {
   57|     22|    return reinterpret_cast<const AllocationPolicy*>(policy_ & kPtrMask);
   58|     22|  }
_ZNK6google8protobuf8internal25TaggedAllocationPolicyPtr27is_user_owned_initial_blockEv:
   66|      4|  bool is_user_owned_initial_block() const {
   67|      4|    return static_cast<bool>(get_mask<kUserOwnedInitialBlock>());
   68|      4|  }
_ZNK6google8protobuf8internal25TaggedAllocationPolicyPtr8get_maskILm1EEEmv:
   84|      4|  uintptr_t get_mask() const {
   85|      4|    return policy_ & kMask;
   86|      4|  }

_ZN6google8protobuf8internal14ArenaStringPtr7MutableEPNS0_5ArenaE:
  163|  7.35k|std::string* ArenaStringPtr::Mutable(Arena* arena) {
  164|  7.35k|  ScopedCheckPtrInvariants check(&tagged_ptr_);
  165|  7.35k|  if (tagged_ptr_.IsMutable()) {
  ------------------
  |  Branch (165:7): [True: 3.54k, False: 3.81k]
  ------------------
  166|  3.54k|    return tagged_ptr_.Get();
  167|  3.81k|  } else {
  168|  3.81k|    return MutableSlow(arena);
  169|  3.81k|  }
  170|  7.35k|}
_ZN6google8protobuf8internal14ArenaStringPtr13MutableNoCopyEPNS0_5ArenaE:
  182|  5.13k|std::string* ArenaStringPtr::MutableNoCopy(Arena* arena) {
  183|  5.13k|  ScopedCheckPtrInvariants check(&tagged_ptr_);
  184|  5.13k|  if (tagged_ptr_.IsMutable()) {
  ------------------
  |  Branch (184:7): [True: 0, False: 5.13k]
  ------------------
  185|      0|    return tagged_ptr_.Get();
  186|  5.13k|  } else {
  187|  5.13k|    ABSL_DCHECK(IsDefault());
  ------------------
  |  |   47|  5.13k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  5.13k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  10.2k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  5.13k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  10.2k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  10.2k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 5.13k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  5.13k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 5.13k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  5.13k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 5.13k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  10.2k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  10.2k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|       |    // Allocate empty. The contents are not relevant.
  189|  5.13k|    return NewString(arena);
  190|  5.13k|  }
  191|  5.13k|}
_ZN6google8protobuf8internal14ArenaStringPtr7DestroyEv:
  237|  10.0k|void ArenaStringPtr::Destroy() {
  238|  10.0k|  delete tagged_ptr_.GetIfAllocated();
  239|  10.0k|}
_ZN6google8protobuf8internal14ArenaStringPtr12ClearToEmptyEv:
  241|  5.14k|void ArenaStringPtr::ClearToEmpty() {
  242|  5.14k|  ScopedCheckPtrInvariants check(&tagged_ptr_);
  243|  5.14k|  if (IsDefault()) {
  ------------------
  |  Branch (243:7): [True: 5.14k, False: 0]
  ------------------
  244|       |    // Already set to default -- do nothing.
  245|  5.14k|  } else {
  246|       |    // Unconditionally mask away the tag.
  247|       |    //
  248|       |    // UpdateArenaString uses assign when capacity is larger than the new
  249|       |    // value, which is trivially true in the donated string case.
  250|       |    // const_cast<std::string*>(PtrValue<std::string>())->clear();
  251|      0|    tagged_ptr_.Get()->clear();
  252|      0|  }
  253|  5.14k|}
_ZN6google8protobuf8internal18EpsCopyInputStream15ReadArenaStringEPKcPNS1_14ArenaStringPtrEPNS0_5ArenaE:
  268|    663|                                                Arena* arena) {
  269|    663|  ScopedCheckPtrInvariants check(&s->tagged_ptr_);
  270|    663|  ABSL_DCHECK(arena != nullptr);
  ------------------
  |  |   47|    663|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    663|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  1.32k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    663|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  1.32k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  1.32k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 663, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    663|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 663]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    663|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 663, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  1.32k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  1.32k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  271|       |
  272|    663|  int size = ReadSize(&ptr);
  273|    663|  if (!ptr) return nullptr;
  ------------------
  |  Branch (273:7): [True: 0, False: 663]
  ------------------
  274|       |
  275|    663|  auto* str = s->NewString(arena);
  276|    663|  ptr = ReadString(ptr, size, str);
  277|    663|  GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
  ------------------
  |  | 1157|    663|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  ------------------
  |  |  |  | 1150|    663|  if (!(predicate)) {                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1150:7): [True: 0, False: 663]
  |  |  |  |  ------------------
  |  |  |  | 1151|      0|    /*  ::raise(SIGINT);  */                           \
  |  |  |  | 1152|      0|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  | 1153|      0|    return ret;                                        \
  |  |  |  | 1154|      0|  }
  |  |  ------------------
  ------------------
  278|    663|  return ptr;
  279|    663|}
arenastring.cc:_ZN6google8protobuf8internal12_GLOBAL__N_124ScopedCheckPtrInvariantsC2EPKNS1_15TaggedStringPtrE:
   70|  18.2k|  explicit ScopedCheckPtrInvariants(const TaggedStringPtr*) {}
_ZN6google8protobuf8internal14ArenaStringPtr11MutableSlowIJEEEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEPNS0_5ArenaEDpRKT_:
  195|  3.81k|                                         const Lazy&... lazy_default) {
  196|  3.81k|  ABSL_DCHECK(IsDefault());
  ------------------
  |  |   47|  3.81k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  3.81k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  7.62k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  3.81k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  7.62k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  7.62k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 3.81k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  3.81k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 3.81k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  3.81k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 3.81k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  7.62k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  7.62k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|       |
  198|       |  // For empty defaults, this ends up calling the default constructor which is
  199|       |  // more efficient than a copy construction from
  200|       |  // GetEmptyStringAlreadyInited().
  201|  3.81k|  return NewString(arena, lazy_default.get()...);
  202|  3.81k|}

_ZN6google8protobuf8internal15TaggedStringPtr12SetAllocatedEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
  122|  8.94k|  inline std::string* SetAllocated(std::string* p) {
  123|  8.94k|    return TagAs(kAllocated, p);
  124|  8.94k|  }
_ZN6google8protobuf8internal15TaggedStringPtr15SetMutableArenaEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
  136|    663|  inline std::string* SetMutableArena(std::string* p) {
  137|    663|    return TagAs(kMutableArena, p);
  138|    663|  }
_ZNK6google8protobuf8internal15TaggedStringPtr9IsMutableEv:
  141|  12.4k|  inline bool IsMutable() const { return as_int() & kMutableBit; }
_ZNK6google8protobuf8internal15TaggedStringPtr14GetIfAllocatedEv:
  148|  10.0k|  inline std::string* GetIfAllocated() const {
  149|  10.0k|    auto allocated = as_int() ^ kAllocated;
  150|  10.0k|    if (allocated & kMask) return nullptr;
  ------------------
  |  Branch (150:9): [True: 1.17k, False: 8.91k]
  ------------------
  151|       |
  152|  8.91k|    auto ptr = reinterpret_cast<std::string*>(allocated);
  153|  8.91k|    PROTOBUF_ASSUME(ptr != nullptr);
  ------------------
  |  |  941|  8.91k|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  154|  8.91k|    return ptr;
  155|  10.0k|  }
_ZN6google8protobuf8internal15TaggedStringPtr14assert_alignedEPKv:
  186|  9.60k|  static inline void assert_aligned(const void* p) {
  187|  9.60k|    static_assert(kMask <= alignof(void*), "Pointer underaligned for bit mask");
  188|  9.60k|    static_assert(kMask <= alignof(std::string),
  189|  9.60k|                  "std::string underaligned for bit mask");
  190|  9.60k|    ABSL_DCHECK_EQ(reinterpret_cast<uintptr_t>(p) & kMask, 0UL);
  ------------------
  |  |   74|  9.60k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|  9.60k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  9.60k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 9.60k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  9.60k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|  9.60k|  }
_ZN6google8protobuf8internal15TaggedStringPtr5TagAsENS2_4TypeEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE:
  196|  9.60k|  inline std::string* TagAs(Type type, std::string* p) {
  197|  9.60k|    ABSL_DCHECK(p != nullptr);
  ------------------
  |  |   47|  9.60k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  9.60k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  19.2k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  9.60k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  19.2k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  19.2k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 9.60k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  9.60k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 9.60k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  9.60k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 9.60k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  19.2k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  19.2k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  198|  9.60k|    assert_aligned(p);
  199|  9.60k|    ptr_ = reinterpret_cast<void*>(reinterpret_cast<uintptr_t>(p) | type);
  200|  9.60k|    return p;
  201|  9.60k|  }
_ZNK6google8protobuf8internal14ArenaStringPtr9IsDefaultEv:
  392|  5.14k|  inline bool IsDefault() const { return tagged_ptr_.IsDefault(); }
_ZN6google8protobuf8internal14ArenaStringPtr9NewStringIJEEEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEPNS0_5ArenaEDpOT_:
  396|  9.60k|  inline std::string* NewString(Arena* arena, Args&&... args) {
  397|  9.60k|    if (arena == nullptr) {
  ------------------
  |  Branch (397:9): [True: 8.94k, False: 663]
  ------------------
  398|  8.94k|      auto* s = new std::string(std::forward<Args>(args)...);
  399|  8.94k|      return tagged_ptr_.SetAllocated(s);
  400|  8.94k|    } else {
  401|    663|      auto* s = Arena::Create<std::string>(arena, std::forward<Args>(args)...);
  402|    663|      return tagged_ptr_.SetMutableArena(s);
  403|    663|    }
  404|  9.60k|  }

_ZN6google8protobuf8internal20ThreadSafeArenaStats19RecordAllocateStatsEPS2_mmm:
  169|     26|                                  size_t /*allocated*/, size_t /*wasted*/) {}
_ZN6google8protobuf8internal26ThreadSafeArenaStatsHandleC2EPNS1_20ThreadSafeArenaStatsE:
  178|      4|  explicit ThreadSafeArenaStatsHandle(ThreadSafeArenaStats*) {}
_ZN6google8protobuf8internal26ThreadSafeArenaStatsHandle12MutableStatsEv:
  182|     26|  ThreadSafeArenaStats* MutableStats() { return nullptr; }
_ZN6google8protobuf8internal6SampleEv:
  198|      4|inline ThreadSafeArenaStatsHandle Sample() {
  199|      4|  return ThreadSafeArenaStatsHandle(nullptr);
  200|      4|}

_ZN2pb11CppFeaturesD2Ev:
  187|    490|CppFeatures::~CppFeatures() {
  188|       |  // @@protoc_insertion_point(destructor:pb.CppFeatures)
  189|    490|  SharedDtor(*this);
  190|    490|}
_ZNK2pb11CppFeatures12GetClassDataEv:
  228|  2.25k|const ::google::protobuf::internal::ClassData* CppFeatures::GetClassData() const {
  229|  2.25k|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
  230|  2.25k|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
  231|  2.25k|  return _class_data_.base();
  232|  2.25k|}
_ZNK2pb11CppFeatures18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE:
  305|    239|            ::google::protobuf::io::EpsCopyOutputStream* stream) const {
  306|    239|          const CppFeatures& this_ = *this;
  307|    239|#endif  // PROTOBUF_CUSTOM_VTABLE
  308|       |          // @@protoc_insertion_point(serialize_to_array_start:pb.CppFeatures)
  309|    239|          ::uint32_t cached_has_bits = 0;
  310|    239|          (void)cached_has_bits;
  311|       |
  312|    239|          cached_has_bits = this_._impl_._has_bits_[0];
  313|       |          // optional bool legacy_closed_enum = 1 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
  314|    239|          if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (314:15): [True: 239, False: 0]
  ------------------
  315|    239|            target = stream->EnsureSpace(target);
  316|    239|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
  317|    239|                1, this_._internal_legacy_closed_enum(), target);
  318|    239|          }
  319|       |
  320|       |          // optional .pb.CppFeatures.StringType string_type = 2 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
  321|    239|          if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (321:15): [True: 239, False: 0]
  ------------------
  322|    239|            target = stream->EnsureSpace(target);
  323|    239|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
  324|    239|                2, this_._internal_string_type(), target);
  325|    239|          }
  326|       |
  327|       |          // optional bool enum_name_uses_string_view = 3 [retention = RETENTION_SOURCE, targets = TARGET_TYPE_ENUM, targets = TARGET_TYPE_FILE, edition_defaults = {
  328|    239|          if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (328:15): [True: 239, False: 0]
  ------------------
  329|    239|            target = stream->EnsureSpace(target);
  330|    239|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
  331|    239|                3, this_._internal_enum_name_uses_string_view(), target);
  332|    239|          }
  333|       |
  334|    239|          if (PROTOBUF_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
  ------------------
  |  |  365|    239|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 239]
  |  |  |  Branch (365:54): [Folded, False: 239]
  |  |  |  Branch (365:63): [True: 0, False: 239]
  |  |  ------------------
  ------------------
  335|      0|            target =
  336|      0|                ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
  337|      0|                    this_._internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance), target, stream);
  338|      0|          }
  339|       |          // @@protoc_insertion_point(serialize_to_array_end:pb.CppFeatures)
  340|    239|          return target;
  341|    239|        }
_ZNK2pb11CppFeatures12ByteSizeLongEv:
  347|    474|        ::size_t CppFeatures::ByteSizeLong() const {
  348|    474|          const CppFeatures& this_ = *this;
  349|    474|#endif  // PROTOBUF_CUSTOM_VTABLE
  350|       |          // @@protoc_insertion_point(message_byte_size_start:pb.CppFeatures)
  351|    474|          ::size_t total_size = 0;
  352|       |
  353|    474|          ::uint32_t cached_has_bits = 0;
  354|       |          // Prevent compiler warnings about cached_has_bits being unused
  355|    474|          (void)cached_has_bits;
  356|       |
  357|    474|          ::_pbi::Prefetch5LinesFrom7Lines(&this_);
  358|    474|          cached_has_bits = this_._impl_._has_bits_[0];
  359|    474|          if (cached_has_bits & 0x00000007u) {
  ------------------
  |  Branch (359:15): [True: 239, False: 235]
  ------------------
  360|       |            // optional .pb.CppFeatures.StringType string_type = 2 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
  361|    239|            if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (361:17): [True: 239, False: 0]
  ------------------
  362|    239|              total_size += 1 +
  363|    239|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_string_type());
  364|    239|            }
  365|       |            // optional bool legacy_closed_enum = 1 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
  366|    239|            if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (366:17): [True: 239, False: 0]
  ------------------
  367|    239|              total_size += 2;
  368|    239|            }
  369|       |            // optional bool enum_name_uses_string_view = 3 [retention = RETENTION_SOURCE, targets = TARGET_TYPE_ENUM, targets = TARGET_TYPE_FILE, edition_defaults = {
  370|    239|            if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (370:17): [True: 239, False: 0]
  ------------------
  371|    239|              total_size += 2;
  372|    239|            }
  373|    239|          }
  374|    474|          return this_.MaybeComputeUnknownFieldsSize(total_size,
  375|    474|                                                     &this_._impl_._cached_size_);
  376|    474|        }
_ZN2pb11CppFeatures9MergeImplERN6google8protobuf11MessageLiteERKS3_:
  378|    749|void CppFeatures::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
  379|    749|  auto* const _this = static_cast<CppFeatures*>(&to_msg);
  380|    749|  auto& from = static_cast<const CppFeatures&>(from_msg);
  381|       |  // @@protoc_insertion_point(class_specific_merge_from_start:pb.CppFeatures)
  382|    749|  ABSL_DCHECK_NE(&from, _this);
  ------------------
  |  |   76|    749|  ABSL_LOG_INTERNAL_DCHECK_NE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   88|    749|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    749|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 749]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    749|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  383|    749|  ::uint32_t cached_has_bits = 0;
  384|    749|  (void) cached_has_bits;
  385|       |
  386|    749|  cached_has_bits = from._impl_._has_bits_[0];
  387|    749|  if (cached_has_bits & 0x00000007u) {
  ------------------
  |  Branch (387:7): [True: 498, False: 251]
  ------------------
  388|    498|    if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (388:9): [True: 494, False: 4]
  ------------------
  389|    494|      _this->_impl_.string_type_ = from._impl_.string_type_;
  390|    494|    }
  391|    498|    if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (391:9): [True: 494, False: 4]
  ------------------
  392|    494|      _this->_impl_.legacy_closed_enum_ = from._impl_.legacy_closed_enum_;
  393|    494|    }
  394|    498|    if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (394:9): [True: 494, False: 4]
  ------------------
  395|    494|      _this->_impl_.enum_name_uses_string_view_ = from._impl_.enum_name_uses_string_view_;
  396|    494|    }
  397|    498|  }
  398|    749|  _this->_impl_._has_bits_[0] |= cached_has_bits;
  399|    749|  _this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
  400|    749|}
_ZNK2pb11CppFeatures11GetMetadataEv:
  422|      2|::google::protobuf::Metadata CppFeatures::GetMetadata() const {
  423|      2|  return ::google::protobuf::Message::GetMetadataImpl(GetClassData()->full());
  424|      2|}
_ZN2pb11CppFeatures10SharedDtorERN6google8protobuf11MessageLiteE:
  191|    490|inline void CppFeatures::SharedDtor(MessageLite& self) {
  192|    490|  CppFeatures& this_ = static_cast<CppFeatures&>(self);
  193|    490|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
  194|    490|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|    490|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    490|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    980|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    490|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    980|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    980|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 490, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    490|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 490]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    490|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 490, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|    980|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    980|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  195|    490|  this_._impl_.~Impl_();
  196|    490|}

_ZN2pb11CppFeatures10descriptorEv:
  147|      2|  static const ::google::protobuf::Descriptor* descriptor() {
  148|      2|    return GetDescriptor();
  149|      2|  }
_ZN2pb11CppFeatures13GetDescriptorEv:
  150|      2|  static const ::google::protobuf::Descriptor* GetDescriptor() {
  151|      2|    return default_instance().GetMetadata().descriptor;
  152|      2|  }
_ZNK2pb11CppFeatures15has_string_typeEv:
  392|    235|inline bool CppFeatures::has_string_type() const {
  393|    235|  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
  394|    235|  return value;
  395|    235|}
_ZNK2pb11CppFeatures28_internal_legacy_closed_enumEv:
  382|    239|inline bool CppFeatures::_internal_legacy_closed_enum() const {
  383|    239|  ::google::protobuf::internal::TSanRead(&_impl_);
  384|    239|  return _impl_.legacy_closed_enum_;
  385|    239|}
_ZNK2pb11CppFeatures21_internal_string_typeEv:
  410|    478|inline ::pb::CppFeatures_StringType CppFeatures::_internal_string_type() const {
  411|    478|  ::google::protobuf::internal::TSanRead(&_impl_);
  412|    478|  return static_cast<::pb::CppFeatures_StringType>(_impl_.string_type_);
  413|    478|}
_ZN2pb11CppFeatures16default_instanceEv:
  156|    238|  static const CppFeatures& default_instance() {
  157|    238|    return *internal_default_instance();
  158|    238|  }
_ZN2pb11CppFeatures25internal_default_instanceEv:
  159|    238|  static inline const CppFeatures* internal_default_instance() {
  160|    238|    return reinterpret_cast<const CppFeatures*>(
  161|    238|        &_CppFeatures_default_instance_);
  162|    238|  }
_ZNK2pb11CppFeatures36_internal_enum_name_uses_string_viewEv:
  439|    239|inline bool CppFeatures::_internal_enum_name_uses_string_view() const {
  440|    239|  ::google::protobuf::internal::TSanRead(&_impl_);
  441|    239|  return _impl_.enum_name_uses_string_view_;
  442|    239|}

_ZN6google8protobuf14DescriptorPool6TablesC2Ev:
 1609|      2|DescriptorPool::Tables::Tables() {
 1610|      2|  well_known_types_.insert({
 1611|      2|      {"google.protobuf.DoubleValue", Descriptor::WELLKNOWNTYPE_DOUBLEVALUE},
 1612|      2|      {"google.protobuf.FloatValue", Descriptor::WELLKNOWNTYPE_FLOATVALUE},
 1613|      2|      {"google.protobuf.Int64Value", Descriptor::WELLKNOWNTYPE_INT64VALUE},
 1614|      2|      {"google.protobuf.UInt64Value", Descriptor::WELLKNOWNTYPE_UINT64VALUE},
 1615|      2|      {"google.protobuf.Int32Value", Descriptor::WELLKNOWNTYPE_INT32VALUE},
 1616|      2|      {"google.protobuf.UInt32Value", Descriptor::WELLKNOWNTYPE_UINT32VALUE},
 1617|      2|      {"google.protobuf.StringValue", Descriptor::WELLKNOWNTYPE_STRINGVALUE},
 1618|      2|      {"google.protobuf.BytesValue", Descriptor::WELLKNOWNTYPE_BYTESVALUE},
 1619|      2|      {"google.protobuf.BoolValue", Descriptor::WELLKNOWNTYPE_BOOLVALUE},
 1620|      2|      {"google.protobuf.Any", Descriptor::WELLKNOWNTYPE_ANY},
 1621|      2|      {"google.protobuf.FieldMask", Descriptor::WELLKNOWNTYPE_FIELDMASK},
 1622|      2|      {"google.protobuf.Duration", Descriptor::WELLKNOWNTYPE_DURATION},
 1623|      2|      {"google.protobuf.Timestamp", Descriptor::WELLKNOWNTYPE_TIMESTAMP},
 1624|      2|      {"google.protobuf.Value", Descriptor::WELLKNOWNTYPE_VALUE},
 1625|      2|      {"google.protobuf.ListValue", Descriptor::WELLKNOWNTYPE_LISTVALUE},
 1626|      2|      {"google.protobuf.Struct", Descriptor::WELLKNOWNTYPE_STRUCT},
 1627|      2|  });
 1628|      2|}
_ZN6google8protobuf20FileDescriptorTablesC2Ev:
 1632|      4|FileDescriptorTables::FileDescriptorTables() = default;
_ZN6google8protobuf14DescriptorPool6Tables13AddCheckpointEv:
 1645|      4|void DescriptorPool::Tables::AddCheckpoint() {
 1646|      4|  checkpoints_.emplace_back(this);
 1647|      4|}
_ZN6google8protobuf14DescriptorPool6Tables19ClearLastCheckpointEv:
 1649|      4|void DescriptorPool::Tables::ClearLastCheckpoint() {
 1650|      4|  ABSL_DCHECK(!checkpoints_.empty());
  ------------------
  |  |   47|      4|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      4|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1651|      4|  checkpoints_.pop_back();
 1652|      4|  if (checkpoints_.empty()) {
  ------------------
  |  Branch (1652:7): [True: 4, False: 0]
  ------------------
 1653|       |    // All checkpoints have been cleared: we can now commit all of the pending
 1654|       |    // data.
 1655|      4|    symbols_after_checkpoint_.clear();
 1656|      4|    files_after_checkpoint_.clear();
 1657|      4|    extensions_after_checkpoint_.clear();
 1658|      4|  }
 1659|      4|}
_ZN6google8protobuf14DescriptorPool6Tables9AddSymbolEN4absl12lts_2024011611string_viewENS0_6SymbolE:
 1929|    504|                                       Symbol symbol) {
 1930|    504|  ABSL_DCHECK_EQ(full_name, symbol.full_name());
  ------------------
  |  |   74|    504|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|    504|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    504|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 504]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    504|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1931|    504|  if (symbols_by_name_.insert(symbol).second) {
  ------------------
  |  Branch (1931:7): [True: 504, False: 0]
  ------------------
 1932|    504|    symbols_after_checkpoint_.push_back(symbol);
 1933|    504|    return true;
 1934|    504|  } else {
 1935|      0|    return false;
 1936|      0|  }
 1937|    504|}
_ZN6google8protobuf20FileDescriptorTables19AddAliasUnderParentEPKvN4absl12lts_2024011611string_viewENS0_6SymbolE:
 1941|    688|                                               Symbol symbol) {
 1942|    688|  ABSL_DCHECK_EQ(name, symbol.parent_name_key().second);
  ------------------
  |  |   74|    688|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|    688|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    688|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 688]
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 688]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    688|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1943|    688|  ABSL_DCHECK_EQ(parent, symbol.parent_name_key().first);
  ------------------
  |  |   74|    688|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|    688|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    688|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 688]
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 688]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    688|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1944|    688|  return symbols_by_parent_.insert(symbol).second;
 1945|    688|}
_ZN6google8protobuf14DescriptorPool6Tables7AddFileEPKNS0_14FileDescriptorE:
 1947|      4|bool DescriptorPool::Tables::AddFile(const FileDescriptor* file) {
 1948|      4|  if (files_by_name_.insert(file).second) {
  ------------------
  |  Branch (1948:7): [True: 4, False: 0]
  ------------------
 1949|      4|    files_after_checkpoint_.push_back(file);
 1950|      4|    return true;
 1951|      4|  } else {
 1952|      0|    return false;
 1953|      0|  }
 1954|      4|}
_ZN6google8protobuf20FileDescriptorTables14FinalizeTablesEv:
 1956|      4|void FileDescriptorTables::FinalizeTables() {}
_ZN6google8protobuf20FileDescriptorTables16AddFieldByNumberEPNS0_15FieldDescriptorE:
 1958|    235|bool FileDescriptorTables::AddFieldByNumber(FieldDescriptor* field) {
 1959|       |  // Skip fields that are at the start of the sequence.
 1960|    235|  if (field->containing_type() != nullptr && field->number() >= 1 &&
  ------------------
  |  Branch (1960:7): [True: 235, False: 0]
  |  Branch (1960:46): [True: 235, False: 0]
  ------------------
 1961|    235|      field->number() <= field->containing_type()->sequential_field_limit_) {
  ------------------
  |  Branch (1961:7): [True: 127, False: 108]
  ------------------
 1962|    127|    if (field->is_extension()) {
  ------------------
  |  Branch (1962:9): [True: 0, False: 127]
  ------------------
 1963|       |      // Conflicts with the field that already exists in the sequential range.
 1964|      0|      return false;
 1965|      0|    }
 1966|       |    // Only return true if the field at that index matches. Otherwise it
 1967|       |    // conflicts with the existing field in the sequential range.
 1968|    127|    return field->containing_type()->field(field->number() - 1) == field;
 1969|    127|  }
 1970|       |
 1971|    108|  return fields_by_number_.insert(field).second;
 1972|    235|}
_ZN6google8protobuf20FileDescriptorTables20AddEnumValueByNumberEPNS0_19EnumValueDescriptorE:
 1974|    190|bool FileDescriptorTables::AddEnumValueByNumber(EnumValueDescriptor* value) {
 1975|       |  // Skip values that are at the start of the sequence.
 1976|    190|  const int base = value->type()->value(0)->number();
 1977|    190|  if (base <= value->number() &&
  ------------------
  |  Branch (1977:7): [True: 190, False: 0]
  ------------------
 1978|    190|      value->number() <=
  ------------------
  |  Branch (1978:7): [True: 95, False: 95]
  ------------------
 1979|    190|          static_cast<int64_t>(base) + value->type()->sequential_value_limit_)
 1980|     95|    return true;
 1981|     95|  return enum_values_by_number_.insert(value).second;
 1982|    190|}
_ZN6google8protobuf14DescriptorPool6Tables12AddExtensionEPKNS0_15FieldDescriptorE:
 1984|      1|bool DescriptorPool::Tables::AddExtension(const FieldDescriptor* field) {
 1985|      1|  auto it_inserted =
 1986|      1|      extensions_.insert({{field->containing_type(), field->number()}, field});
 1987|      1|  if (it_inserted.second) {
  ------------------
  |  Branch (1987:7): [True: 1, False: 0]
  ------------------
 1988|      1|    extensions_after_checkpoint_.push_back(it_inserted.first->first);
 1989|      1|    return true;
 1990|      1|  } else {
 1991|      0|    return false;
 1992|      0|  }
 1993|      1|}
_ZN6google8protobuf14DescriptorPool6Tables16InternFeatureSetEONS0_10FeatureSetE:
 1996|    239|    FeatureSet&& features) {
 1997|       |  // Use the serialized feature set as the cache key.  If multiple equivalent
 1998|       |  // feature sets serialize to different strings, that just bloats the cache a
 1999|       |  // little.
 2000|    239|  auto& result = feature_set_cache_[features.SerializeAsString()];
 2001|    239|  if (result == nullptr) {
  ------------------
  |  Branch (2001:7): [True: 4, False: 235]
  ------------------
 2002|      4|    result = absl::make_unique<FeatureSet>(std::move(features));
 2003|      4|  }
 2004|    239|  return result.get();
 2005|    239|}
_ZN6google8protobuf14DescriptorPool6Tables13AllocateBytesEi:
 2016|      3|void* DescriptorPool::Tables::AllocateBytes(int size) {
 2017|      3|  if (size == 0) return nullptr;
  ------------------
  |  Branch (2017:7): [True: 0, False: 3]
  ------------------
 2018|      3|  void* p = ::operator new(size + RoundUpTo<8>(sizeof(int)));
 2019|      3|  int* sizep = static_cast<int*>(p);
 2020|      3|  misc_allocs_.emplace_back(sizep);
 2021|      3|  *sizep = size;
 2022|      3|  return static_cast<char*>(p) + RoundUpTo<8>(sizeof(int));
 2023|      3|}
_ZN6google8protobuf14DescriptorPoolC2EPNS0_18DescriptorDatabaseEPNS1_14ErrorCollectorE:
 2113|      2|    : mutex_(new absl::Mutex),
 2114|      2|      fallback_database_(fallback_database),
 2115|      2|      default_error_collector_(error_collector),
 2116|      2|      underlay_(nullptr),
 2117|      2|      tables_(new Tables),
 2118|      2|      enforce_dependencies_(true),
 2119|      2|      lazily_build_dependencies_(false),
 2120|      2|      allow_unknown_(false),
 2121|      2|      enforce_weak_(false),
 2122|      2|      enforce_extension_declarations_(false),
 2123|      2|      disallow_enforce_utf8_(false),
 2124|      2|      deprecated_legacy_json_field_conflicts_(false) {}
_ZN6google8protobuf14DescriptorPool31InternalDontEnforceDependenciesEv:
 2147|      2|void DescriptorPool::InternalDontEnforceDependencies() {
 2148|      2|  enforce_dependencies_ = false;
 2149|      2|}
_ZN6google8protobuf14DescriptorPool23internal_generated_poolEv:
 2204|     63|DescriptorPool* DescriptorPool::internal_generated_pool() {
 2205|     63|  static DescriptorPool* generated_pool =
 2206|     63|      internal::OnShutdownDelete(NewGeneratedPool());
 2207|     63|  return generated_pool;
 2208|     63|}
_ZN6google8protobuf14DescriptorPool14generated_poolEv:
 2210|      2|const DescriptorPool* DescriptorPool::generated_pool() {
 2211|      2|  const DescriptorPool* pool = internal_generated_pool();
 2212|       |  // Ensure that descriptor.proto and cpp_features.proto get registered in the
 2213|       |  // generated pool. They're special cases because they're included in the full
 2214|       |  // runtime. We have to avoid registering it pre-main, because we need to
 2215|       |  // ensure that the linker --gc-sections step can strip out the full runtime if
 2216|       |  // it is unused.
 2217|      2|  DescriptorProto::descriptor();
 2218|      2|  pb::CppFeatures::descriptor();
 2219|      2|  return pool;
 2220|      2|}
_ZN6google8protobuf14DescriptorPool24InternalAddGeneratedFileEPKvi:
 2224|      6|    const void* encoded_file_descriptor, int size) {
 2225|       |  // So, this function is called in the process of initializing the
 2226|       |  // descriptors for generated proto classes.  Each generated .pb.cc file
 2227|       |  // has an internal procedure called AddDescriptors() which is called at
 2228|       |  // process startup, and that function calls this one in order to register
 2229|       |  // the raw bytes of the FileDescriptorProto representing the file.
 2230|       |  //
 2231|       |  // We do not actually construct the descriptor objects right away.  We just
 2232|       |  // hang on to the bytes until they are actually needed.  We actually construct
 2233|       |  // the descriptor the first time one of the following things happens:
 2234|       |  // * Someone calls a method like descriptor(), GetDescriptor(), or
 2235|       |  //   GetReflection() on the generated types, which requires returning the
 2236|       |  //   descriptor or an object based on it.
 2237|       |  // * Someone looks up the descriptor in DescriptorPool::generated_pool().
 2238|       |  //
 2239|       |  // Once one of these happens, the DescriptorPool actually parses the
 2240|       |  // FileDescriptorProto and generates a FileDescriptor (and all its children)
 2241|       |  // based on it.
 2242|       |  //
 2243|       |  // Note that FileDescriptorProto is itself a generated protocol message.
 2244|       |  // Therefore, when we parse one, we have to be very careful to avoid using
 2245|       |  // any descriptor-based operations, since this might cause infinite recursion
 2246|       |  // or deadlock.
 2247|      6|  absl::MutexLockMaybe lock(internal_generated_pool()->mutex_);
 2248|      6|  ABSL_CHECK(GeneratedDatabase()->Add(encoded_file_descriptor, size));
  ------------------
  |  |   41|      6|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     12|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      6|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     12|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     12|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 6, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      6|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 6]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     12|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 6, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 6]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 6]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     12|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     12|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2249|      6|}
_ZNK6google8protobuf14DescriptorPool14FindFileByNameEN4absl12lts_2024011611string_viewE:
 2259|      4|    absl::string_view name) const {
 2260|      4|  DeferredValidation deferred_validation(this);
 2261|      4|  const FileDescriptor* result = nullptr;
 2262|      4|  {
 2263|      4|    absl::MutexLockMaybe lock(mutex_);
 2264|      4|    if (fallback_database_ != nullptr) {
  ------------------
  |  Branch (2264:9): [True: 4, False: 0]
  ------------------
 2265|      4|      tables_->known_bad_symbols_.clear();
 2266|      4|      tables_->known_bad_files_.clear();
 2267|      4|    }
 2268|      4|    result = tables_->FindFile(name);
 2269|      4|    if (result != nullptr) return result;
  ------------------
  |  Branch (2269:9): [True: 0, False: 4]
  ------------------
 2270|      4|    if (underlay_ != nullptr) {
  ------------------
  |  Branch (2270:9): [True: 0, False: 4]
  ------------------
 2271|      0|      result = underlay_->FindFileByName(name);
 2272|      0|      if (result != nullptr) return result;
  ------------------
  |  Branch (2272:11): [True: 0, False: 0]
  ------------------
 2273|      0|    }
 2274|      4|    if (TryFindFileInFallbackDatabase(name, deferred_validation)) {
  ------------------
  |  Branch (2274:9): [True: 4, False: 0]
  ------------------
 2275|      4|      result = tables_->FindFile(name);
 2276|      4|    }
 2277|      4|  }
 2278|      4|  if (!deferred_validation.Validate()) {
  ------------------
  |  Branch (2278:7): [True: 0, False: 4]
  ------------------
 2279|      0|    return nullptr;
 2280|      0|  }
 2281|      4|  return result;
 2282|      4|}
_ZNK6google8protobuf10Descriptor34FindExtensionRangeContainingNumberEi:
 2665|      1|Descriptor::FindExtensionRangeContainingNumber(int number) const {
 2666|       |  // Linear search should be fine because we don't expect a message to have
 2667|       |  // more than a couple extension ranges.
 2668|      1|  for (int i = 0; i < extension_range_count(); i++) {
  ------------------
  |  Branch (2668:19): [True: 1, False: 0]
  ------------------
 2669|      1|    if (number >= extension_range(i)->start_number() &&
  ------------------
  |  Branch (2669:9): [True: 1, False: 0]
  ------------------
 2670|      1|        number < extension_range(i)->end_number()) {
  ------------------
  |  Branch (2670:9): [True: 1, False: 0]
  ------------------
 2671|      1|      return extension_range(i);
 2672|      1|    }
 2673|      1|  }
 2674|      0|  return nullptr;
 2675|      1|}
_ZNK6google8protobuf14DescriptorPool29TryFindFileInFallbackDatabaseEN4absl12lts_2024011611string_viewERNS1_18DeferredValidationE:
 2703|      4|    absl::string_view name, DeferredValidation& deferred_validation) const {
 2704|      4|  if (fallback_database_ == nullptr) return false;
  ------------------
  |  Branch (2704:7): [True: 0, False: 4]
  ------------------
 2705|       |
 2706|      4|  if (tables_->known_bad_files_.contains(name)) return false;
  ------------------
  |  Branch (2706:7): [True: 0, False: 4]
  ------------------
 2707|       |
 2708|       |  // NOINLINE to reduce the stack cost of the operation in the caller.
 2709|      4|  const auto find_file = [](DescriptorDatabase& database,
 2710|      4|                            absl::string_view filename,
 2711|      4|                            FileDescriptorProto& output) PROTOBUF_NOINLINE {
 2712|      4|    return database.FindFileByName(std::string(filename), &output);
 2713|      4|  };
 2714|       |
 2715|      4|  auto& file_proto = deferred_validation.CreateProto();
 2716|      4|  if (!find_file(*fallback_database_, name, file_proto) ||
  ------------------
  |  Branch (2716:7): [True: 0, False: 4]
  ------------------
 2717|      4|      BuildFileFromDatabase(file_proto, deferred_validation) == nullptr) {
  ------------------
  |  Branch (2717:7): [True: 0, False: 4]
  ------------------
 2718|      0|    tables_->known_bad_files_.emplace(name);
 2719|      0|    return false;
 2720|      0|  }
 2721|      4|  return true;
 2722|      4|}
_ZNK6google8protobuf15FieldDescriptor19is_map_message_typeEv:
 2816|  17.6k|bool FieldDescriptor::is_map_message_type() const {
 2817|  17.6k|  return message_type()->options().map_entry();
 2818|  17.6k|}
_ZNK6google8protobuf15FieldDescriptor11is_requiredEv:
 3945|  44.0k|bool FieldDescriptor::is_required() const {
 3946|  44.0k|  return features().field_presence() == FeatureSet::LEGACY_REQUIRED;
 3947|  44.0k|}
_ZNK6google8protobuf10Descriptor15GetLocationPathEPNSt3__16vectorIiNS2_9allocatorIiEEEE:
 4058|    435|void Descriptor::GetLocationPath(std::vector<int>* output) const {
 4059|    435|  if (containing_type()) {
  ------------------
  |  Branch (4059:7): [True: 47, False: 388]
  ------------------
 4060|     47|    containing_type()->GetLocationPath(output);
 4061|     47|    output->push_back(DescriptorProto::kNestedTypeFieldNumber);
 4062|     47|    output->push_back(index());
 4063|    388|  } else {
 4064|    388|    output->push_back(FileDescriptorProto::kMessageTypeFieldNumber);
 4065|    388|    output->push_back(index());
 4066|    388|  }
 4067|    435|}
_ZNK6google8protobuf15FieldDescriptor15GetLocationPathEPNSt3__16vectorIiNS2_9allocatorIiEEEE:
 4069|    235|void FieldDescriptor::GetLocationPath(std::vector<int>* output) const {
 4070|    235|  if (is_extension()) {
  ------------------
  |  Branch (4070:7): [True: 1, False: 234]
  ------------------
 4071|      1|    if (extension_scope() == nullptr) {
  ------------------
  |  Branch (4071:9): [True: 1, False: 0]
  ------------------
 4072|      1|      output->push_back(FileDescriptorProto::kExtensionFieldNumber);
 4073|      1|      output->push_back(index());
 4074|      1|    } else {
 4075|      0|      extension_scope()->GetLocationPath(output);
 4076|      0|      output->push_back(DescriptorProto::kExtensionFieldNumber);
 4077|      0|      output->push_back(index());
 4078|      0|    }
 4079|    234|  } else {
 4080|    234|    containing_type()->GetLocationPath(output);
 4081|    234|    output->push_back(DescriptorProto::kFieldFieldNumber);
 4082|    234|    output->push_back(index());
 4083|    234|  }
 4084|    235|}
_ZNK6google8protobuf15OneofDescriptor15GetLocationPathEPNSt3__16vectorIiNS2_9allocatorIiEEEE:
 4086|      2|void OneofDescriptor::GetLocationPath(std::vector<int>* output) const {
 4087|      2|  containing_type()->GetLocationPath(output);
 4088|      2|  output->push_back(DescriptorProto::kOneofDeclFieldNumber);
 4089|      2|  output->push_back(index());
 4090|      2|}
_ZNK6google8protobuf10Descriptor14ExtensionRange15GetLocationPathEPNSt3__16vectorIiNS3_9allocatorIiEEEE:
 4093|     14|    std::vector<int>* output) const {
 4094|     14|  containing_type()->GetLocationPath(output);
 4095|     14|  output->push_back(DescriptorProto::kExtensionRangeFieldNumber);
 4096|     14|  output->push_back(index());
 4097|     14|}
_ZNK6google8protobuf14EnumDescriptor15GetLocationPathEPNSt3__16vectorIiNS2_9allocatorIiEEEE:
 4099|    214|void EnumDescriptor::GetLocationPath(std::vector<int>* output) const {
 4100|    214|  if (containing_type()) {
  ------------------
  |  Branch (4100:7): [True: 91, False: 123]
  ------------------
 4101|     91|    containing_type()->GetLocationPath(output);
 4102|     91|    output->push_back(DescriptorProto::kEnumTypeFieldNumber);
 4103|     91|    output->push_back(index());
 4104|    123|  } else {
 4105|    123|    output->push_back(FileDescriptorProto::kEnumTypeFieldNumber);
 4106|    123|    output->push_back(index());
 4107|    123|  }
 4108|    214|}
_ZNK6google8protobuf19EnumValueDescriptor15GetLocationPathEPNSt3__16vectorIiNS2_9allocatorIiEEEE:
 4110|    190|void EnumValueDescriptor::GetLocationPath(std::vector<int>* output) const {
 4111|    190|  type()->GetLocationPath(output);
 4112|    190|  output->push_back(EnumDescriptorProto::kValueFieldNumber);
 4113|    190|  output->push_back(index());
 4114|    190|}
_ZNK6google8protobuf14DescriptorPool21BuildFileFromDatabaseERKNS0_19FileDescriptorProtoERNS1_18DeferredValidationE:
 4740|      4|    DeferredValidation& deferred_validation) const {
 4741|      4|  mutex_->AssertHeld();
 4742|      4|  build_started_ = true;
 4743|      4|  if (tables_->known_bad_files_.contains(proto.name())) {
  ------------------
  |  Branch (4743:7): [True: 0, False: 4]
  ------------------
 4744|      0|    return nullptr;
 4745|      0|  }
 4746|      4|  const FileDescriptor* result;
 4747|      4|  const auto build_file = [&] {
 4748|      4|    result = DescriptorBuilder::New(this, tables_.get(), deferred_validation,
 4749|      4|                                    default_error_collector_)
 4750|      4|                 ->BuildFile(proto);
 4751|      4|  };
 4752|      4|  if (dispatcher_ != nullptr) {
  ------------------
  |  Branch (4752:7): [True: 0, False: 4]
  ------------------
 4753|      0|    (*dispatcher_)(build_file);
 4754|      4|  } else {
 4755|      4|    build_file();
 4756|      4|  }
 4757|      4|  if (result == nullptr) {
  ------------------
  |  Branch (4757:7): [True: 0, False: 4]
  ------------------
 4758|      0|    tables_->known_bad_files_.insert(proto.name());
 4759|      0|  }
 4760|      4|  return result;
 4761|      4|}
_ZN6google8protobuf17DescriptorBuilderC2EPKNS0_14DescriptorPoolEPNS2_6TablesERNS2_18DeferredValidationEPNS2_14ErrorCollectorE:
 4797|      4|    : pool_(pool),
 4798|      4|      tables_(tables),
 4799|      4|      deferred_validation_(deferred_validation),
 4800|      4|      error_collector_(error_collector),
 4801|      4|      had_errors_(false),
 4802|      4|      possible_undeclared_dependency_(nullptr),
 4803|      4|      undefine_resolved_name_("") {
 4804|       |  // Ensure that any lazily loaded static initializers from the generated pool
 4805|       |  // (e.g. from bootstrapped protos) are run before building any descriptors. We
 4806|       |  // have to avoid registering these pre-main, because we need to ensure that
 4807|       |  // the linker --gc-sections step can strip out the full runtime if it is
 4808|       |  // unused.
 4809|      4|  PROTOBUF_UNUSED static std::true_type lazy_register =
  ------------------
  |  |  620|      4|#define PROTOBUF_UNUSED [[maybe_unused]]
  ------------------
 4810|      4|      (internal::ExtensionSet::RegisterMessageExtension(
 4811|      4|           &FeatureSet::default_instance(), pb::cpp.number(),
 4812|      4|           FieldDescriptor::TYPE_MESSAGE, false, false,
 4813|      4|           &pb::CppFeatures::default_instance(),
 4814|      4|           nullptr,
 4815|      4|           internal::LazyAnnotation::kUndefined),
 4816|      4|       std::true_type{});
 4817|      4|}
_ZN6google8protobuf17DescriptorBuilderD2Ev:
 4819|      4|DescriptorBuilder::~DescriptorBuilder() = default;
_ZN6google8protobuf17DescriptorBuilder32FindSymbolNotEnforcingDepsHelperEPKNS0_14DescriptorPoolEN4absl12lts_2024011611string_viewEb:
 4916|    104|    const DescriptorPool* pool, const absl::string_view name, bool build_it) {
 4917|       |  // If we are looking at an underlay, we must lock its mutex_, since we are
 4918|       |  // accessing the underlay's tables_ directly.
 4919|    104|  absl::MutexLockMaybe lock((pool == pool_) ? nullptr : pool->mutex_);
  ------------------
  |  Branch (4919:29): [True: 104, False: 0]
  ------------------
 4920|       |
 4921|    104|  Symbol result = pool->tables_->FindSymbol(name);
 4922|    104|  if (result.IsNull() && pool->underlay_ != nullptr) {
  ------------------
  |  Branch (4922:7): [True: 0, False: 104]
  |  Branch (4922:26): [True: 0, False: 0]
  ------------------
 4923|       |    // Symbol not found; check the underlay.
 4924|      0|    result = FindSymbolNotEnforcingDepsHelper(pool->underlay_, name);
 4925|      0|  }
 4926|       |
 4927|    104|  if (result.IsNull()) {
  ------------------
  |  Branch (4927:7): [True: 0, False: 104]
  ------------------
 4928|       |    // With lazily_build_dependencies_, a symbol lookup at cross link time is
 4929|       |    // not guaranteed to be successful. In most cases, build_it will be false,
 4930|       |    // which intentionally prevents us from building an import until it's
 4931|       |    // actually needed. In some cases, like registering an extension, we want
 4932|       |    // to build the file containing the symbol, and build_it will be set.
 4933|       |    // Also, build_it will be true when !lazily_build_dependencies_, to provide
 4934|       |    // better error reporting of missing dependencies.
 4935|      0|    if (build_it &&
  ------------------
  |  Branch (4935:9): [True: 0, False: 0]
  ------------------
 4936|      0|        pool->TryFindSymbolInFallbackDatabase(name, deferred_validation_)) {
  ------------------
  |  Branch (4936:9): [True: 0, False: 0]
  ------------------
 4937|      0|      result = pool->tables_->FindSymbol(name);
 4938|      0|    }
 4939|      0|  }
 4940|       |
 4941|    104|  return result;
 4942|    104|}
_ZN6google8protobuf17DescriptorBuilder26FindSymbolNotEnforcingDepsEN4absl12lts_2024011611string_viewEb:
 4945|    104|    const absl::string_view name, bool build_it) {
 4946|    104|  Symbol result = FindSymbolNotEnforcingDepsHelper(pool_, name, build_it);
 4947|       |  // Only find symbols which were defined in this file or one of its
 4948|       |  // dependencies.
 4949|    104|  const FileDescriptor* file = result.GetFile();
 4950|    104|  if ((file == file_ || dependencies_.contains(file)) && !result.IsPackage()) {
  ------------------
  |  Branch (4950:8): [True: 103, False: 1]
  |  Branch (4950:25): [True: 0, False: 1]
  |  Branch (4950:58): [True: 103, False: 0]
  ------------------
 4951|    103|    unused_dependency_.erase(file);
 4952|    103|  }
 4953|    104|  return result;
 4954|    104|}
_ZN6google8protobuf17DescriptorBuilder10FindSymbolEN4absl12lts_2024011611string_viewEb:
 4957|    104|                                     bool build_it) {
 4958|    104|  Symbol result = FindSymbolNotEnforcingDeps(name, build_it);
 4959|       |
 4960|    104|  if (result.IsNull()) return result;
  ------------------
  |  Branch (4960:7): [True: 0, False: 104]
  ------------------
 4961|       |
 4962|    104|  if (!pool_->enforce_dependencies_) {
  ------------------
  |  Branch (4962:7): [True: 104, False: 0]
  ------------------
 4963|       |    // Hack for CompilerUpgrader, and also used for lazily_build_dependencies_
 4964|    104|    return result;
 4965|    104|  }
 4966|       |
 4967|       |  // Only find symbols which were defined in this file or one of its
 4968|       |  // dependencies.
 4969|      0|  const FileDescriptor* file = result.GetFile();
 4970|      0|  if (file == file_ || dependencies_.contains(file)) {
  ------------------
  |  Branch (4970:7): [True: 0, False: 0]
  |  Branch (4970:24): [True: 0, False: 0]
  ------------------
 4971|      0|    return result;
 4972|      0|  }
 4973|       |
 4974|      0|  if (result.IsPackage()) {
  ------------------
  |  Branch (4974:7): [True: 0, False: 0]
  ------------------
 4975|       |    // Arg, this is overcomplicated.  The symbol is a package name.  It could
 4976|       |    // be that the package was defined in multiple files.  result.GetFile()
 4977|       |    // returns the first file we saw that used this package.  We've determined
 4978|       |    // that that file is not a direct dependency of the file we are currently
 4979|       |    // building, but it could be that some other file which *is* a direct
 4980|       |    // dependency also defines the same package.  We can't really rule out this
 4981|       |    // symbol unless none of the dependencies define it.
 4982|      0|    if (IsInPackage(file_, name)) return result;
  ------------------
  |  Branch (4982:9): [True: 0, False: 0]
  ------------------
 4983|      0|    for (const auto* dep : dependencies_) {
  ------------------
  |  Branch (4983:26): [True: 0, False: 0]
  ------------------
 4984|       |      // Note:  A dependency may be nullptr if it was not found or had errors.
 4985|      0|      if (dep != nullptr && IsInPackage(dep, name)) return result;
  ------------------
  |  Branch (4985:11): [True: 0, False: 0]
  |  Branch (4985:29): [True: 0, False: 0]
  ------------------
 4986|      0|    }
 4987|      0|  }
 4988|       |
 4989|      0|  possible_undeclared_dependency_ = file;
 4990|      0|  possible_undeclared_dependency_name_ = std::string(name);
 4991|      0|  return Symbol();
 4992|      0|}
_ZN6google8protobuf17DescriptorBuilder25LookupSymbolNoPlaceholderEN4absl12lts_2024011611string_viewES4_NS1_11ResolveModeEb:
 4996|    104|    ResolveMode resolve_mode, bool build_it) {
 4997|    104|  possible_undeclared_dependency_ = nullptr;
 4998|    104|  undefine_resolved_name_.clear();
 4999|       |
 5000|    104|  if (!name.empty() && name[0] == '.') {
  ------------------
  |  Branch (5000:7): [True: 104, False: 0]
  |  Branch (5000:24): [True: 99, False: 5]
  ------------------
 5001|       |    // Fully-qualified name.
 5002|     99|    return FindSymbol(name.substr(1), build_it);
 5003|     99|  }
 5004|       |
 5005|       |  // If name is something like "Foo.Bar.baz", and symbols named "Foo" are
 5006|       |  // defined in multiple parent scopes, we only want to find "Bar.baz" in the
 5007|       |  // innermost one.  E.g., the following should produce an error:
 5008|       |  //   message Bar { message Baz {} }
 5009|       |  //   message Foo {
 5010|       |  //     message Bar {
 5011|       |  //     }
 5012|       |  //     optional Bar.Baz baz = 1;
 5013|       |  //   }
 5014|       |  // So, we look for just "Foo" first, then look for "Bar.baz" within it if
 5015|       |  // found.
 5016|      5|  std::string::size_type name_dot_pos = name.find_first_of('.');
 5017|      5|  absl::string_view first_part_of_name;
 5018|      5|  if (name_dot_pos == std::string::npos) {
  ------------------
  |  Branch (5018:7): [True: 5, False: 0]
  ------------------
 5019|      5|    first_part_of_name = name;
 5020|      5|  } else {
 5021|      0|    first_part_of_name = name.substr(0, name_dot_pos);
 5022|      0|  }
 5023|       |
 5024|      5|  std::string scope_to_try(relative_to);
 5025|       |
 5026|      5|  while (true) {
  ------------------
  |  Branch (5026:10): [True: 5, Folded]
  ------------------
 5027|       |    // Chop off the last component of the scope.
 5028|      5|    std::string::size_type dot_pos = scope_to_try.find_last_of('.');
 5029|      5|    if (dot_pos == std::string::npos) {
  ------------------
  |  Branch (5029:9): [True: 0, False: 5]
  ------------------
 5030|      0|      return FindSymbol(name, build_it);
 5031|      5|    } else {
 5032|      5|      scope_to_try.erase(dot_pos);
 5033|      5|    }
 5034|       |
 5035|       |    // Append ".first_part_of_name" and try to find.
 5036|      5|    std::string::size_type old_size = scope_to_try.size();
 5037|      5|    absl::StrAppend(&scope_to_try, ".", first_part_of_name);
 5038|      5|    Symbol result = FindSymbol(scope_to_try, build_it);
 5039|      5|    if (!result.IsNull()) {
  ------------------
  |  Branch (5039:9): [True: 5, False: 0]
  ------------------
 5040|      5|      if (first_part_of_name.size() < name.size()) {
  ------------------
  |  Branch (5040:11): [True: 0, False: 5]
  ------------------
 5041|       |        // name is a compound symbol, of which we only found the first part.
 5042|       |        // Now try to look up the rest of it.
 5043|      0|        if (result.IsAggregate()) {
  ------------------
  |  Branch (5043:13): [True: 0, False: 0]
  ------------------
 5044|      0|          absl::StrAppend(&scope_to_try,
 5045|      0|                          name.substr(first_part_of_name.size()));
 5046|      0|          result = FindSymbol(scope_to_try, build_it);
 5047|      0|          if (result.IsNull()) {
  ------------------
  |  Branch (5047:15): [True: 0, False: 0]
  ------------------
 5048|      0|            undefine_resolved_name_ = scope_to_try;
 5049|      0|          }
 5050|      0|          return result;
 5051|      0|        } else {
 5052|       |          // We found a symbol but it's not an aggregate.  Continue the loop.
 5053|      0|        }
 5054|      5|      } else {
 5055|      5|        if (resolve_mode == LOOKUP_TYPES && !result.IsType()) {
  ------------------
  |  Branch (5055:13): [True: 0, False: 5]
  |  Branch (5055:45): [True: 0, False: 0]
  ------------------
 5056|       |          // We found a symbol but it's not a type.  Continue the loop.
 5057|      5|        } else {
 5058|      5|          return result;
 5059|      5|        }
 5060|      5|      }
 5061|      5|    }
 5062|       |
 5063|       |    // Not found.  Remove the name so we can try again.
 5064|      0|    scope_to_try.erase(old_size);
 5065|      0|  }
 5066|      5|}
_ZN6google8protobuf17DescriptorBuilder12LookupSymbolEN4absl12lts_2024011611string_viewES4_NS0_14DescriptorPool15PlaceholderTypeENS1_11ResolveModeEb:
 5071|     99|    bool build_it) {
 5072|     99|  Symbol result =
 5073|     99|      LookupSymbolNoPlaceholder(name, relative_to, resolve_mode, build_it);
 5074|     99|  if (result.IsNull() && pool_->allow_unknown_) {
  ------------------
  |  Branch (5074:7): [True: 0, False: 99]
  |  Branch (5074:26): [True: 0, False: 0]
  ------------------
 5075|       |    // Not found, but AllowUnknownDependencies() is enabled.  Return a
 5076|       |    // placeholder instead.
 5077|      0|    result = pool_->NewPlaceholderWithMutexHeld(name, placeholder_type);
 5078|      0|  }
 5079|     99|  return result;
 5080|     99|}
_ZN6google8protobuf17DescriptorBuilder9AddSymbolEN4absl12lts_2024011611string_viewEPKvS4_RKNS0_7MessageENS0_6SymbolE:
 5269|    498|                                  const Message& proto, Symbol symbol) {
 5270|       |  // If the caller passed nullptr for the parent, the symbol is at file scope.
 5271|       |  // Use its file as the parent instead.
 5272|    498|  if (parent == nullptr) parent = file_;
  ------------------
  |  Branch (5272:7): [True: 161, False: 337]
  ------------------
 5273|       |
 5274|    498|  if (absl::StrContains(full_name, '\0')) {
  ------------------
  |  Branch (5274:7): [True: 0, False: 498]
  ------------------
 5275|      0|    AddError(full_name, proto, DescriptorPool::ErrorCollector::NAME, [&] {
 5276|      0|      return absl::StrCat("\"", full_name, "\" contains null character.");
 5277|      0|    });
 5278|      0|    return false;
 5279|      0|  }
 5280|    498|  if (tables_->AddSymbol(full_name, symbol)) {
  ------------------
  |  Branch (5280:7): [True: 498, False: 0]
  ------------------
 5281|    498|    if (!file_tables_->AddAliasUnderParent(parent, name, symbol)) {
  ------------------
  |  Branch (5281:9): [True: 0, False: 498]
  ------------------
 5282|       |      // This is only possible if there was already an error adding something of
 5283|       |      // the same name.
 5284|      0|      if (!had_errors_) {
  ------------------
  |  Branch (5284:11): [True: 0, False: 0]
  ------------------
 5285|      0|        ABSL_DLOG(FATAL) << "\"" << full_name
  ------------------
  |  |   40|      0|#define ABSL_DLOG(severity) ABSL_LOG_INTERNAL_DLOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   41|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, false) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   42|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5286|      0|                         << "\" not previously defined in "
 5287|      0|                            "symbols_by_name_, but was defined in "
 5288|      0|                            "symbols_by_parent_; this shouldn't be possible.";
 5289|      0|      }
 5290|      0|      return false;
 5291|      0|    }
 5292|    498|    return true;
 5293|    498|  } else {
 5294|      0|    const FileDescriptor* other_file = tables_->FindSymbol(full_name).GetFile();
 5295|      0|    if (other_file == file_) {
  ------------------
  |  Branch (5295:9): [True: 0, False: 0]
  ------------------
 5296|      0|      std::string::size_type dot_pos = full_name.find_last_of('.');
 5297|      0|      if (dot_pos == std::string::npos) {
  ------------------
  |  Branch (5297:11): [True: 0, False: 0]
  ------------------
 5298|      0|        AddError(full_name, proto, DescriptorPool::ErrorCollector::NAME, [&] {
 5299|      0|          return absl::StrCat("\"", full_name, "\" is already defined.");
 5300|      0|        });
 5301|      0|      } else {
 5302|      0|        AddError(full_name, proto, DescriptorPool::ErrorCollector::NAME, [&] {
 5303|      0|          return absl::StrCat("\"", full_name.substr(dot_pos + 1),
 5304|      0|                              "\" is already defined in \"",
 5305|      0|                              full_name.substr(0, dot_pos), "\".");
 5306|      0|        });
 5307|      0|      }
 5308|      0|    } else {
 5309|       |      // Symbol seems to have been defined in a different file.
 5310|      0|      AddError(full_name, proto, DescriptorPool::ErrorCollector::NAME, [&] {
 5311|      0|        return absl::StrCat(
 5312|      0|            "\"", full_name, "\" is already defined in file \"",
 5313|      0|            (other_file == nullptr ? "null" : other_file->name()), "\".");
 5314|      0|      });
 5315|      0|    }
 5316|      0|    return false;
 5317|      0|  }
 5318|    498|}
_ZN6google8protobuf17DescriptorBuilder10AddPackageEN4absl12lts_2024011611string_viewERKNS0_7MessageEPNS0_14FileDescriptorEb:
 5322|      7|                                   bool toplevel) {
 5323|      7|  if (absl::StrContains(name, '\0')) {
  ------------------
  |  Branch (5323:7): [True: 0, False: 7]
  ------------------
 5324|      0|    AddError(name, proto, DescriptorPool::ErrorCollector::NAME, [&] {
 5325|      0|      return absl::StrCat("\"", name, "\" contains null character.");
 5326|      0|    });
 5327|      0|    return;
 5328|      0|  }
 5329|       |
 5330|      7|  Symbol existing_symbol = tables_->FindSymbol(name);
 5331|       |  // It's OK to redefine a package.
 5332|      7|  if (existing_symbol.IsNull()) {
  ------------------
  |  Branch (5332:7): [True: 6, False: 1]
  ------------------
 5333|      6|    if (toplevel) {
  ------------------
  |  Branch (5333:9): [True: 3, False: 3]
  ------------------
 5334|       |      // It is the toplevel package name, so insert the descriptor directly.
 5335|      3|      tables_->AddSymbol(file->package(), Symbol(file));
 5336|      3|    } else {
 5337|      3|      auto* package = tables_->Allocate<Symbol::Subpackage>();
 5338|       |      // If the name is the package name, then it is already in the arena.
 5339|       |      // If not, copy it there. It came from the call to AddPackage below.
 5340|      3|      package->name_size = static_cast<int>(name.size());
 5341|      3|      package->file = file;
 5342|      3|      tables_->AddSymbol(name, Symbol(package));
 5343|      3|    }
 5344|       |    // Also add parent package, if any.
 5345|      6|    std::string::size_type dot_pos = name.find_last_of('.');
 5346|      6|    if (dot_pos == std::string::npos) {
  ------------------
  |  Branch (5346:9): [True: 3, False: 3]
  ------------------
 5347|       |      // No parents.
 5348|      3|      ValidateSymbolName(name, name, proto);
 5349|      3|    } else {
 5350|       |      // Has parent.
 5351|      3|      AddPackage(name.substr(0, dot_pos), proto, file, false);
 5352|      3|      ValidateSymbolName(name.substr(dot_pos + 1), name, proto);
 5353|      3|    }
 5354|      6|  } else if (!existing_symbol.IsPackage()) {
  ------------------
  |  Branch (5354:14): [True: 0, False: 1]
  ------------------
 5355|       |    // Symbol seems to have been defined in a different file.
 5356|      0|    const FileDescriptor* other_file = existing_symbol.GetFile();
 5357|      0|    AddError(name, proto, DescriptorPool::ErrorCollector::NAME, [&] {
 5358|      0|      return absl::StrCat("\"", name,
 5359|      0|                          "\" is already defined (as something other than "
 5360|      0|                          "a package) in file \"",
 5361|      0|                          (other_file == nullptr ? "null" : other_file->name()),
 5362|      0|                          "\".");
 5363|      0|    });
 5364|      0|  }
 5365|      7|}
_ZN6google8protobuf17DescriptorBuilder18ValidateSymbolNameEN4absl12lts_2024011611string_viewES4_RKNS0_7MessageE:
 5369|    504|                                           const Message& proto) {
 5370|    504|  if (name.empty()) {
  ------------------
  |  Branch (5370:7): [True: 0, False: 504]
  ------------------
 5371|      0|    AddError(full_name, proto, DescriptorPool::ErrorCollector::NAME,
 5372|      0|             "Missing name.");
 5373|    504|  } else {
 5374|  6.74k|    for (char character : name) {
  ------------------
  |  Branch (5374:25): [True: 6.74k, False: 504]
  ------------------
 5375|       |      // I don't trust isalnum() due to locales.  :(
 5376|  6.74k|      if ((character < 'a' || 'z' < character) &&
  ------------------
  |  Branch (5376:12): [True: 3.50k, False: 3.23k]
  |  Branch (5376:31): [True: 0, False: 3.23k]
  ------------------
 5377|  3.50k|          (character < 'A' || 'Z' < character) &&
  ------------------
  |  Branch (5377:12): [True: 68, False: 3.44k]
  |  Branch (5377:31): [True: 453, False: 2.98k]
  ------------------
 5378|    521|          (character < '0' || '9' < character) && (character != '_')) {
  ------------------
  |  Branch (5378:12): [True: 0, False: 521]
  |  Branch (5378:31): [True: 453, False: 68]
  |  Branch (5378:51): [True: 0, False: 453]
  ------------------
 5379|      0|        AddError(full_name, proto, DescriptorPool::ErrorCollector::NAME, [&] {
 5380|      0|          return absl::StrCat("\"", name, "\" is not a valid identifier.");
 5381|      0|        });
 5382|      0|        return;
 5383|      0|      }
 5384|  6.74k|    }
 5385|    504|  }
 5386|    504|}
_ZN6google8protobuf17DescriptorBuilder15AllocateOptionsERKNS0_19FileDescriptorProtoEPNS0_14FileDescriptorERNS0_8internal13FlatAllocatorE:
 5411|      4|                                        internal::FlatAllocator& alloc) {
 5412|      4|  std::vector<int> options_path;
 5413|      4|  options_path.push_back(FileDescriptorProto::kOptionsFieldNumber);
 5414|       |  // We add the dummy token so that LookupSymbol does the right thing.
 5415|      4|  auto options = AllocateOptionsImpl<FileDescriptor>(
 5416|      4|      absl::StrCat(descriptor->package(), ".dummy"), descriptor->name(), proto,
 5417|      4|      options_path, "google.protobuf.FileOptions", alloc);
 5418|      4|  descriptor->options_ = options;
 5419|      4|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5420|      4|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5421|      4|}
_ZN6google8protobuf17DescriptorBuilder15ResolveFeaturesERKNS0_19FileDescriptorProtoEPNS0_14FileDescriptorEPNS0_11FileOptionsERNS0_8internal13FlatAllocatorE:
 5593|      4|                                        internal::FlatAllocator& alloc) {
 5594|       |  // File descriptors always need their own merged feature set, even without
 5595|       |  // any explicit features.
 5596|      4|  ResolveFeaturesImpl(descriptor->edition(), proto, descriptor, options, alloc,
 5597|      4|                      DescriptorPool::ErrorCollector::EDITIONS,
 5598|      4|                      /*force_merge=*/true);
 5599|      4|}
_ZN6google8protobuf17DescriptorBuilder24PostProcessFieldFeaturesERNS0_15FieldDescriptorERKNS0_20FieldDescriptorProtoE:
 5602|    235|    FieldDescriptor& field, const FieldDescriptorProto& proto) {
 5603|       |  // TODO This can be replace by a runtime check in `is_required`
 5604|       |  // once the `label` getter is hidden.
 5605|    235|  if (field.features().field_presence() == FeatureSet::LEGACY_REQUIRED &&
  ------------------
  |  Branch (5605:7): [True: 2, False: 233]
  ------------------
 5606|      2|      field.label_ == FieldDescriptor::LABEL_OPTIONAL) {
  ------------------
  |  Branch (5606:7): [True: 0, False: 2]
  ------------------
 5607|      0|    field.label_ = FieldDescriptor::LABEL_REQUIRED;
 5608|      0|  }
 5609|       |  // TODO This can be replace by a runtime check of `is_delimited`
 5610|       |  // once the `TYPE_GROUP` value is removed.
 5611|    235|  if (field.type_ == FieldDescriptor::TYPE_MESSAGE &&
  ------------------
  |  Branch (5611:7): [True: 66, False: 169]
  ------------------
 5612|     66|      !field.containing_type()->options().map_entry() &&
  ------------------
  |  Branch (5612:7): [True: 66, False: 0]
  ------------------
 5613|     66|      field.features().message_encoding() == FeatureSet::DELIMITED) {
  ------------------
  |  Branch (5613:7): [True: 0, False: 66]
  ------------------
 5614|      0|    Symbol type =
 5615|      0|        LookupSymbol(proto.type_name(), field.full_name(),
 5616|      0|                     DescriptorPool::PLACEHOLDER_MESSAGE, LOOKUP_TYPES, false);
 5617|      0|    if (type.descriptor() == nullptr ||
  ------------------
  |  Branch (5617:9): [True: 0, False: 0]
  ------------------
 5618|      0|        !type.descriptor()->options().map_entry()) {
  ------------------
  |  Branch (5618:9): [True: 0, False: 0]
  ------------------
 5619|      0|      field.type_ = FieldDescriptor::TYPE_GROUP;
 5620|      0|    }
 5621|      0|  }
 5622|    235|}
_ZN6google8protobuf17DescriptorBuilder9BuildFileERKNS0_19FileDescriptorProtoE:
 5816|      4|    const FileDescriptorProto& proto) {
 5817|       |  // Ensure the generated pool has been lazily initialized.  This is most
 5818|       |  // important for protos that use C++-specific features, since that extension
 5819|       |  // is only registered lazily and we always parse options into the generated
 5820|       |  // pool.
 5821|      4|  if (pool_ != DescriptorPool::internal_generated_pool()) {
  ------------------
  |  Branch (5821:7): [True: 0, False: 4]
  ------------------
 5822|      0|    DescriptorPool::generated_pool();
 5823|      0|  }
 5824|       |
 5825|      4|  filename_ = proto.name();
 5826|       |
 5827|       |  // Check if the file already exists and is identical to the one being built.
 5828|       |  // Note:  This only works if the input is canonical -- that is, it
 5829|       |  //   fully-qualifies all type names, has no UninterpretedOptions, etc.
 5830|       |  //   This is fine, because this idempotency "feature" really only exists to
 5831|       |  //   accommodate one hack in the proto1->proto2 migration layer.
 5832|      4|  const FileDescriptor* existing_file = tables_->FindFile(filename_);
 5833|      4|  if (existing_file != nullptr) {
  ------------------
  |  Branch (5833:7): [True: 0, False: 4]
  ------------------
 5834|       |    // File already in pool.  Compare the existing one to the input.
 5835|      0|    if (ExistingFileMatchesProto(existing_file->edition(), existing_file,
  ------------------
  |  Branch (5835:9): [True: 0, False: 0]
  ------------------
 5836|      0|                                 proto)) {
 5837|       |      // They're identical.  Return the existing descriptor.
 5838|      0|      return existing_file;
 5839|      0|    }
 5840|       |
 5841|       |    // Not a match.  The error will be detected and handled later.
 5842|      0|  }
 5843|       |
 5844|       |  // Check to see if this file is already on the pending files list.
 5845|       |  // TODO:  Allow recursive imports?  It may not work with some
 5846|       |  //   (most?) programming languages.  E.g., in C++, a forward declaration
 5847|       |  //   of a type is not sufficient to allow it to be used even in a
 5848|       |  //   generated header file due to inlining.  This could perhaps be
 5849|       |  //   worked around using tricks involving inserting #include statements
 5850|       |  //   mid-file, but that's pretty ugly, and I'm pretty sure there are
 5851|       |  //   some languages out there that do not allow recursive dependencies
 5852|       |  //   at all.
 5853|      4|  for (size_t i = 0; i < tables_->pending_files_.size(); i++) {
  ------------------
  |  Branch (5853:22): [True: 0, False: 4]
  ------------------
 5854|      0|    if (tables_->pending_files_[i] == proto.name()) {
  ------------------
  |  Branch (5854:9): [True: 0, False: 0]
  ------------------
 5855|      0|      AddRecursiveImportError(proto, i);
 5856|      0|      return nullptr;
 5857|      0|    }
 5858|      0|  }
 5859|       |
 5860|      4|  static const int kMaximumPackageLength = 511;
 5861|      4|  if (proto.package().size() > kMaximumPackageLength) {
  ------------------
  |  Branch (5861:7): [True: 0, False: 4]
  ------------------
 5862|      0|    AddError(proto.package(), proto, DescriptorPool::ErrorCollector::NAME,
 5863|      0|             "Package name is too long");
 5864|      0|    return nullptr;
 5865|      0|  }
 5866|       |
 5867|       |  // If we have a fallback_database_, and we aren't doing lazy import building,
 5868|       |  // attempt to load all dependencies now, before checkpointing tables_.  This
 5869|       |  // avoids confusion with recursive checkpoints.
 5870|      4|  if (!pool_->lazily_build_dependencies_) {
  ------------------
  |  Branch (5870:7): [True: 0, False: 4]
  ------------------
 5871|      0|    if (pool_->fallback_database_ != nullptr) {
  ------------------
  |  Branch (5871:9): [True: 0, False: 0]
  ------------------
 5872|      0|      tables_->pending_files_.push_back(proto.name());
 5873|      0|      for (int i = 0; i < proto.dependency_size(); i++) {
  ------------------
  |  Branch (5873:23): [True: 0, False: 0]
  ------------------
 5874|      0|        if (tables_->FindFile(proto.dependency(i)) == nullptr &&
  ------------------
  |  Branch (5874:13): [True: 0, False: 0]
  |  Branch (5874:13): [True: 0, False: 0]
  ------------------
 5875|      0|            (pool_->underlay_ == nullptr ||
  ------------------
  |  Branch (5875:14): [True: 0, False: 0]
  ------------------
 5876|      0|             pool_->underlay_->FindFileByName(proto.dependency(i)) ==
  ------------------
  |  Branch (5876:14): [True: 0, False: 0]
  ------------------
 5877|      0|                 nullptr)) {
 5878|       |          // We don't care what this returns since we'll find out below anyway.
 5879|      0|          pool_->TryFindFileInFallbackDatabase(proto.dependency(i),
 5880|      0|                                               deferred_validation_);
 5881|      0|        }
 5882|      0|      }
 5883|      0|      tables_->pending_files_.pop_back();
 5884|      0|    }
 5885|      0|  }
 5886|       |
 5887|       |  // Checkpoint the tables so that we can roll back if something goes wrong.
 5888|      4|  tables_->AddCheckpoint();
 5889|       |
 5890|      4|  auto alloc = absl::make_unique<internal::FlatAllocator>();
 5891|      4|  PlanAllocationSize(proto, *alloc);
 5892|      4|  alloc->FinalizePlanning(tables_);
 5893|      4|  FileDescriptor* result = BuildFileImpl(proto, *alloc);
 5894|       |
 5895|      4|  file_tables_->FinalizeTables();
 5896|      4|  if (result) {
  ------------------
  |  Branch (5896:7): [True: 4, False: 0]
  ------------------
 5897|      4|    tables_->ClearLastCheckpoint();
 5898|      4|    result->finished_building_ = true;
 5899|      4|    alloc->ExpectConsumed();
 5900|      4|  } else {
 5901|      0|    tables_->RollbackToLastCheckpoint(deferred_validation_);
 5902|      0|  }
 5903|       |
 5904|      4|  return result;
 5905|      4|}
_ZN6google8protobuf17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorE:
 5908|      4|    const FileDescriptorProto& proto, internal::FlatAllocator& alloc) {
 5909|      4|  FileDescriptor* result = alloc.AllocateArray<FileDescriptor>(1);
 5910|      4|  file_ = result;
 5911|       |
 5912|      4|  if (proto.has_edition()) {
  ------------------
  |  Branch (5912:7): [True: 0, False: 4]
  ------------------
 5913|      0|    file_->edition_ = proto.edition();
 5914|      4|  } else if (proto.syntax().empty() || proto.syntax() == "proto2") {
  ------------------
  |  Branch (5914:14): [True: 2, False: 2]
  |  Branch (5914:40): [True: 0, False: 2]
  ------------------
 5915|      2|    file_->edition_ = Edition::EDITION_PROTO2;
 5916|      2|  } else if (proto.syntax() == "proto3") {
  ------------------
  |  Branch (5916:14): [True: 2, False: 0]
  ------------------
 5917|      2|    file_->edition_ = Edition::EDITION_PROTO3;
 5918|      2|  } else {
 5919|      0|    file_->edition_ = Edition::EDITION_UNKNOWN;
 5920|      0|    AddError(proto.name(), proto, DescriptorPool::ErrorCollector::OTHER, [&] {
 5921|      0|      return absl::StrCat("Unrecognized syntax: ", proto.syntax());
 5922|      0|    });
 5923|      0|  }
 5924|       |
 5925|      4|  const FeatureSetDefaults& defaults =
 5926|      4|      pool_->feature_set_defaults_spec_ == nullptr
  ------------------
  |  Branch (5926:7): [True: 4, False: 0]
  ------------------
 5927|      4|          ? GetCppFeatureSetDefaults()
 5928|      4|          : *pool_->feature_set_defaults_spec_;
 5929|       |
 5930|      4|  absl::StatusOr<FeatureResolver> feature_resolver =
 5931|      4|      FeatureResolver::Create(file_->edition_, defaults);
 5932|      4|  if (!feature_resolver.ok()) {
  ------------------
  |  Branch (5932:7): [True: 0, False: 4]
  ------------------
 5933|      0|    AddError(proto.name(), proto, DescriptorPool::ErrorCollector::EDITIONS,
 5934|      0|             [&] { return std::string(feature_resolver.status().message()); });
 5935|      4|  } else {
 5936|      4|    feature_resolver_.emplace(std::move(feature_resolver).value());
 5937|      4|  }
 5938|       |
 5939|      4|  result->is_placeholder_ = false;
 5940|      4|  result->finished_building_ = false;
 5941|      4|  SourceCodeInfo* info = nullptr;
 5942|      4|  if (proto.has_source_code_info()) {
  ------------------
  |  Branch (5942:7): [True: 0, False: 4]
  ------------------
 5943|      0|    info = alloc.AllocateArray<SourceCodeInfo>(1);
 5944|      0|    *info = proto.source_code_info();
 5945|      0|    result->source_code_info_ = info;
 5946|      4|  } else {
 5947|      4|    result->source_code_info_ = &SourceCodeInfo::default_instance();
 5948|      4|  }
 5949|       |
 5950|      4|  file_tables_ = alloc.AllocateArray<FileDescriptorTables>(1);
 5951|      4|  file_->tables_ = file_tables_;
 5952|       |
 5953|      4|  if (!proto.has_name()) {
  ------------------
  |  Branch (5953:7): [True: 0, False: 4]
  ------------------
 5954|      0|    AddError("", proto, DescriptorPool::ErrorCollector::OTHER,
 5955|      0|             "Missing field: FileDescriptorProto.name.");
 5956|      0|  }
 5957|       |
 5958|      4|  result->name_ = alloc.AllocateStrings(proto.name());
 5959|      4|  if (proto.has_package()) {
  ------------------
  |  Branch (5959:7): [True: 4, False: 0]
  ------------------
 5960|      4|    result->package_ = alloc.AllocateStrings(proto.package());
 5961|      4|  } else {
 5962|       |    // We cannot rely on proto.package() returning a valid string if
 5963|       |    // proto.has_package() is false, because we might be running at static
 5964|       |    // initialization time, in which case default values have not yet been
 5965|       |    // initialized.
 5966|      0|    result->package_ = alloc.AllocateStrings("");
 5967|      0|  }
 5968|      4|  result->pool_ = pool_;
 5969|       |
 5970|      4|  if (absl::StrContains(result->name(), '\0')) {
  ------------------
  |  Branch (5970:7): [True: 0, False: 4]
  ------------------
 5971|      0|    AddError(result->name(), proto, DescriptorPool::ErrorCollector::NAME, [&] {
 5972|      0|      return absl::StrCat("\"", result->name(), "\" contains null character.");
 5973|      0|    });
 5974|      0|    return nullptr;
 5975|      0|  }
 5976|       |
 5977|       |  // Add to tables.
 5978|      4|  if (!tables_->AddFile(result)) {
  ------------------
  |  Branch (5978:7): [True: 0, False: 4]
  ------------------
 5979|      0|    AddError(proto.name(), proto, DescriptorPool::ErrorCollector::OTHER,
 5980|      0|             "A file with this name is already in the pool.");
 5981|       |    // Bail out early so that if this is actually the exact same file, we
 5982|       |    // don't end up reporting that every single symbol is already defined.
 5983|      0|    return nullptr;
 5984|      0|  }
 5985|      4|  if (!result->package().empty()) {
  ------------------
  |  Branch (5985:7): [True: 4, False: 0]
  ------------------
 5986|      4|    if (std::count(result->package().begin(), result->package().end(), '.') >
  ------------------
  |  Branch (5986:9): [True: 0, False: 4]
  ------------------
 5987|      4|        kPackageLimit) {
 5988|      0|      AddError(result->package(), proto, DescriptorPool::ErrorCollector::NAME,
 5989|      0|               "Exceeds Maximum Package Depth");
 5990|      0|      return nullptr;
 5991|      0|    }
 5992|      4|    AddPackage(result->package(), proto, result, true);
 5993|      4|  }
 5994|       |
 5995|       |  // Make sure all dependencies are loaded.
 5996|      4|  absl::flat_hash_set<absl::string_view> seen_dependencies;
 5997|      4|  result->dependency_count_ = proto.dependency_size();
 5998|      4|  result->dependencies_ =
 5999|      4|      alloc.AllocateArray<const FileDescriptor*>(proto.dependency_size());
 6000|      4|  result->dependencies_once_ = nullptr;
 6001|      4|  unused_dependency_.clear();
 6002|      4|  absl::flat_hash_set<int> weak_deps;
 6003|      4|  for (int i = 0; i < proto.weak_dependency_size(); ++i) {
  ------------------
  |  Branch (6003:19): [True: 0, False: 4]
  ------------------
 6004|      0|    weak_deps.insert(proto.weak_dependency(i));
 6005|      0|  }
 6006|       |
 6007|      4|  bool need_lazy_deps = false;
 6008|      5|  for (int i = 0; i < proto.dependency_size(); i++) {
  ------------------
  |  Branch (6008:19): [True: 1, False: 4]
  ------------------
 6009|      1|    if (!seen_dependencies.insert(proto.dependency(i)).second) {
  ------------------
  |  Branch (6009:9): [True: 0, False: 1]
  ------------------
 6010|      0|      AddTwiceListedError(proto, i);
 6011|      0|    }
 6012|       |
 6013|      1|    const FileDescriptor* dependency = tables_->FindFile(proto.dependency(i));
 6014|      1|    if (dependency == nullptr && pool_->underlay_ != nullptr) {
  ------------------
  |  Branch (6014:9): [True: 0, False: 1]
  |  Branch (6014:34): [True: 0, False: 0]
  ------------------
 6015|      0|      dependency = pool_->underlay_->FindFileByName(proto.dependency(i));
 6016|      0|    }
 6017|       |
 6018|      1|    if (dependency == result) {
  ------------------
  |  Branch (6018:9): [True: 0, False: 1]
  ------------------
 6019|       |      // Recursive import.  dependency/result is not fully initialized, and it's
 6020|       |      // dangerous to try to do anything with it.  The recursive import error
 6021|       |      // will be detected and reported in DescriptorBuilder::BuildFile().
 6022|      0|      return nullptr;
 6023|      0|    }
 6024|       |
 6025|      1|    if (dependency == nullptr) {
  ------------------
  |  Branch (6025:9): [True: 0, False: 1]
  ------------------
 6026|      0|      if (!pool_->lazily_build_dependencies_) {
  ------------------
  |  Branch (6026:11): [True: 0, False: 0]
  ------------------
 6027|      0|        if (pool_->allow_unknown_ ||
  ------------------
  |  Branch (6027:13): [True: 0, False: 0]
  ------------------
 6028|      0|            (!pool_->enforce_weak_ && weak_deps.contains(i))) {
  ------------------
  |  Branch (6028:14): [True: 0, False: 0]
  |  Branch (6028:39): [True: 0, False: 0]
  ------------------
 6029|      0|          internal::FlatAllocator lazy_dep_alloc;
 6030|      0|          lazy_dep_alloc.PlanArray<FileDescriptor>(1);
 6031|      0|          lazy_dep_alloc.PlanArray<std::string>(1);
 6032|      0|          lazy_dep_alloc.FinalizePlanning(tables_);
 6033|      0|          dependency = pool_->NewPlaceholderFileWithMutexHeld(
 6034|      0|              proto.dependency(i), lazy_dep_alloc);
 6035|      0|        } else {
 6036|      0|          AddImportError(proto, i);
 6037|      0|        }
 6038|      0|      }
 6039|      1|    } else {
 6040|       |      // Add to unused_dependency_ to track unused imported files.
 6041|       |      // Note: do not track unused imported files for public import.
 6042|      1|      if (pool_->enforce_dependencies_ &&
  ------------------
  |  Branch (6042:11): [True: 0, False: 1]
  |  Branch (6042:11): [True: 0, False: 1]
  ------------------
 6043|      0|          (pool_->direct_input_files_.find(proto.name()) !=
  ------------------
  |  Branch (6043:11): [True: 0, False: 0]
  ------------------
 6044|      0|           pool_->direct_input_files_.end()) &&
 6045|      0|          (dependency->public_dependency_count() == 0)) {
  ------------------
  |  Branch (6045:11): [True: 0, False: 0]
  ------------------
 6046|      0|        unused_dependency_.insert(dependency);
 6047|      0|      }
 6048|      1|    }
 6049|       |
 6050|      1|    result->dependencies_[i] = dependency;
 6051|      1|    if (pool_->lazily_build_dependencies_ && !dependency) {
  ------------------
  |  Branch (6051:9): [True: 1, False: 0]
  |  Branch (6051:46): [True: 0, False: 1]
  ------------------
 6052|      0|      need_lazy_deps = true;
 6053|      0|    }
 6054|      1|  }
 6055|      4|  if (need_lazy_deps) {
  ------------------
  |  Branch (6055:7): [True: 0, False: 4]
  ------------------
 6056|      0|    int total_char_size = 0;
 6057|      0|    for (int i = 0; i < proto.dependency_size(); i++) {
  ------------------
  |  Branch (6057:21): [True: 0, False: 0]
  ------------------
 6058|      0|      if (result->dependencies_[i] == nullptr) {
  ------------------
  |  Branch (6058:11): [True: 0, False: 0]
  ------------------
 6059|      0|        total_char_size += static_cast<int>(proto.dependency(i).size());
 6060|      0|      }
 6061|      0|      ++total_char_size;  // For NUL char
 6062|      0|    }
 6063|       |
 6064|      0|    void* data = tables_->AllocateBytes(
 6065|      0|        static_cast<int>(sizeof(absl::once_flag)) + total_char_size);
 6066|      0|    result->dependencies_once_ = ::new (data) absl::once_flag{};
 6067|      0|    char* name_data = reinterpret_cast<char*>(result->dependencies_once_ + 1);
 6068|       |
 6069|      0|    for (int i = 0; i < proto.dependency_size(); i++) {
  ------------------
  |  Branch (6069:21): [True: 0, False: 0]
  ------------------
 6070|      0|      if (result->dependencies_[i] == nullptr) {
  ------------------
  |  Branch (6070:11): [True: 0, False: 0]
  ------------------
 6071|      0|        memcpy(name_data, proto.dependency(i).data(),
 6072|      0|               proto.dependency(i).size());
 6073|      0|        name_data += proto.dependency(i).size();
 6074|      0|      }
 6075|      0|      *name_data++ = '\0';
 6076|      0|    }
 6077|      0|  }
 6078|       |
 6079|       |  // Check public dependencies.
 6080|      4|  int public_dependency_count = 0;
 6081|      4|  result->public_dependencies_ =
 6082|      4|      alloc.AllocateArray<int>(proto.public_dependency_size());
 6083|      4|  for (int i = 0; i < proto.public_dependency_size(); i++) {
  ------------------
  |  Branch (6083:19): [True: 0, False: 4]
  ------------------
 6084|       |    // Only put valid public dependency indexes.
 6085|      0|    int index = proto.public_dependency(i);
 6086|      0|    if (index >= 0 && index < proto.dependency_size()) {
  ------------------
  |  Branch (6086:9): [True: 0, False: 0]
  |  Branch (6086:23): [True: 0, False: 0]
  ------------------
 6087|      0|      result->public_dependencies_[public_dependency_count++] = index;
 6088|       |      // Do not track unused imported files for public import.
 6089|       |      // Calling dependency(i) builds that file when doing lazy imports,
 6090|       |      // need to avoid doing this. Unused dependency detection isn't done
 6091|       |      // when building lazily, anyways.
 6092|      0|      if (!pool_->lazily_build_dependencies_) {
  ------------------
  |  Branch (6092:11): [True: 0, False: 0]
  ------------------
 6093|      0|        unused_dependency_.erase(result->dependency(index));
 6094|      0|      }
 6095|      0|    } else {
 6096|      0|      AddError(proto.name(), proto, DescriptorPool::ErrorCollector::OTHER,
 6097|      0|               "Invalid public dependency index.");
 6098|      0|    }
 6099|      0|  }
 6100|      4|  result->public_dependency_count_ = public_dependency_count;
 6101|       |
 6102|       |  // Build dependency set
 6103|      4|  dependencies_.clear();
 6104|       |  // We don't/can't do proper dependency error checking when
 6105|       |  // lazily_build_dependencies_, and calling dependency(i) will force
 6106|       |  // a dependency to be built, which we don't want.
 6107|      4|  if (!pool_->lazily_build_dependencies_) {
  ------------------
  |  Branch (6107:7): [True: 0, False: 4]
  ------------------
 6108|      0|    for (int i = 0; i < result->dependency_count(); i++) {
  ------------------
  |  Branch (6108:21): [True: 0, False: 0]
  ------------------
 6109|      0|      RecordPublicDependencies(result->dependency(i));
 6110|      0|    }
 6111|      0|  }
 6112|       |
 6113|       |  // Check weak dependencies.
 6114|      4|  int weak_dependency_count = 0;
 6115|      4|  result->weak_dependencies_ =
 6116|      4|      alloc.AllocateArray<int>(proto.weak_dependency_size());
 6117|      4|  for (int i = 0; i < proto.weak_dependency_size(); i++) {
  ------------------
  |  Branch (6117:19): [True: 0, False: 4]
  ------------------
 6118|      0|    int index = proto.weak_dependency(i);
 6119|      0|    if (index >= 0 && index < proto.dependency_size()) {
  ------------------
  |  Branch (6119:9): [True: 0, False: 0]
  |  Branch (6119:23): [True: 0, False: 0]
  ------------------
 6120|      0|      result->weak_dependencies_[weak_dependency_count++] = index;
 6121|      0|    } else {
 6122|      0|      AddError(proto.name(), proto, DescriptorPool::ErrorCollector::OTHER,
 6123|      0|               "Invalid weak dependency index.");
 6124|      0|    }
 6125|      0|  }
 6126|      4|  result->weak_dependency_count_ = weak_dependency_count;
 6127|       |
 6128|       |  // Convert children.
 6129|      4|  BUILD_ARRAY(proto, result, message_type, BuildMessage, nullptr);
  ------------------
  |  | 5627|      4|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|      4|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|      4|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|      4|      INPUT.NAME##_size());                                            \
  |  | 5631|     41|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 37, False: 4]
  |  |  ------------------
  |  | 5632|     37|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|     37|  }
  ------------------
 6130|      4|  BUILD_ARRAY(proto, result, enum_type, BuildEnum, nullptr);
  ------------------
  |  | 5627|      4|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|      4|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|      4|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|      4|      INPUT.NAME##_size());                                            \
  |  | 5631|     11|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 7, False: 4]
  |  |  ------------------
  |  | 5632|      7|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|      7|  }
  ------------------
 6131|      4|  BUILD_ARRAY(proto, result, service, BuildService, nullptr);
  ------------------
  |  | 5627|      4|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|      4|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|      4|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|      4|      INPUT.NAME##_size());                                            \
  |  | 5631|      4|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 0, False: 4]
  |  |  ------------------
  |  | 5632|      0|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|      0|  }
  ------------------
 6132|      4|  BUILD_ARRAY(proto, result, extension, BuildExtension, nullptr);
  ------------------
  |  | 5627|      4|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|      4|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|      4|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|      4|      INPUT.NAME##_size());                                            \
  |  | 5631|      5|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 1, False: 4]
  |  |  ------------------
  |  | 5632|      1|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|      1|  }
  ------------------
 6133|       |
 6134|       |  // Copy options.
 6135|      4|  AllocateOptions(proto, result, alloc);
 6136|       |
 6137|       |  // Note that the following steps must occur in exactly the specified order.
 6138|       |
 6139|       |  // Cross-link.
 6140|      4|  CrossLinkFile(result, proto);
 6141|       |
 6142|      4|  if (!message_hints_.empty()) {
  ------------------
  |  Branch (6142:7): [True: 0, False: 4]
  ------------------
 6143|      0|    SuggestFieldNumbers(result, proto);
 6144|      0|  }
 6145|       |
 6146|       |  // Interpret only the non-extension options first, including features and
 6147|       |  // their extensions.  This has to be done in two passes, since option
 6148|       |  // extensions defined in this file may have features attached to them.
 6149|      4|  if (!had_errors_) {
  ------------------
  |  Branch (6149:7): [True: 4, False: 0]
  ------------------
 6150|      4|    OptionInterpreter option_interpreter(this);
 6151|      4|    for (std::vector<OptionsToInterpret>::iterator iter =
 6152|      4|             options_to_interpret_.begin();
 6153|      4|         iter != options_to_interpret_.end(); ++iter) {
  ------------------
  |  Branch (6153:10): [True: 0, False: 4]
  ------------------
 6154|      0|      option_interpreter.InterpretNonExtensionOptions(&(*iter));
 6155|      0|    }
 6156|       |
 6157|       |    // TODO: move this check back to generator.cc once we no longer
 6158|       |    // need to set both ctype and string_type internally.
 6159|      4|    internal::VisitDescriptors(
 6160|      4|        *result, proto,
 6161|      4|        [&](const FieldDescriptor& field, const FieldDescriptorProto& proto) {
 6162|      4|          if (field.options_->has_ctype() && field.options_->features()
 6163|      4|                                                 .GetExtension(pb::cpp)
 6164|      4|                                                 .has_string_type()) {
 6165|      4|            AddError(field.full_name(), proto,
 6166|      4|                     DescriptorPool::ErrorCollector::TYPE, [&] {
 6167|      4|                       return absl::StrFormat(
 6168|      4|                           "Field %s specifies both string_type and ctype "
 6169|      4|                           "which is not supported.",
 6170|      4|                           field.full_name());
 6171|      4|                     });
 6172|      4|          }
 6173|      4|        });
 6174|       |
 6175|       |    // Handle feature resolution.  This must occur after option interpretation,
 6176|       |    // but before validation.
 6177|      4|    {
 6178|      4|      auto cleanup = DisableTracking();
 6179|      4|      internal::VisitDescriptors(
 6180|      4|          *result, proto, [&](const auto& descriptor, const auto& proto) {
 6181|      4|            using OptionsT =
 6182|      4|                typename std::remove_const<typename std::remove_pointer<
 6183|      4|                    decltype(descriptor.options_)>::type>::type;
 6184|      4|            using DescriptorT =
 6185|      4|                typename std::remove_const<typename std::remove_reference<
 6186|      4|                    decltype(descriptor)>::type>::type;
 6187|       |
 6188|      4|            ResolveFeatures(
 6189|      4|                proto, const_cast<DescriptorT*>(&descriptor),
 6190|      4|                const_cast<  // NOLINT(google3-runtime-proto-const-cast)
 6191|      4|                    OptionsT*>(descriptor.options_),
 6192|      4|                alloc);
 6193|      4|          });
 6194|      4|    }
 6195|       |
 6196|      4|    internal::VisitDescriptors(*result, [&](const FieldDescriptor& field) {
 6197|      4|      if (result->edition() >= Edition::EDITION_2024 &&
 6198|      4|          field.options().has_ctype()) {
 6199|       |        // "ctype" is no longer supported in edition 2024 and beyond.
 6200|      4|        AddError(
 6201|      4|            field.full_name(), proto, DescriptorPool::ErrorCollector::NAME,
 6202|      4|            "ctype option is not allowed under edition 2024 and beyond. Use "
 6203|      4|            "the feature string_type = VIEW|CORD|STRING|... instead.");
 6204|      4|      }
 6205|      4|      EnforceCTypeStringTypeConsistency(
 6206|      4|          field.file()->edition(), field.cpp_type(),
 6207|      4|          field.merged_features_->GetExtension(pb::cpp),
 6208|      4|          const_cast<  // NOLINT(google3-runtime-proto-const-cast)
 6209|      4|              FieldOptions&>(*field.options_));
 6210|      4|    });
 6211|       |
 6212|       |    // Post-process cleanup for field features.
 6213|      4|    internal::VisitDescriptors(
 6214|      4|        *result, proto,
 6215|      4|        [&](const FieldDescriptor& field, const FieldDescriptorProto& proto) {
 6216|      4|          PostProcessFieldFeatures(const_cast<FieldDescriptor&>(field), proto);
 6217|      4|        });
 6218|       |
 6219|       |    // Interpret any remaining uninterpreted options gathered into
 6220|       |    // options_to_interpret_ during descriptor building.  Cross-linking has made
 6221|       |    // extension options known, so all interpretations should now succeed.
 6222|      4|    for (std::vector<OptionsToInterpret>::iterator iter =
 6223|      4|             options_to_interpret_.begin();
 6224|      4|         iter != options_to_interpret_.end(); ++iter) {
  ------------------
  |  Branch (6224:10): [True: 0, False: 4]
  ------------------
 6225|      0|      option_interpreter.InterpretOptionExtensions(&(*iter));
 6226|      0|    }
 6227|      4|    options_to_interpret_.clear();
 6228|      4|    if (info != nullptr) {
  ------------------
  |  Branch (6228:9): [True: 0, False: 4]
  ------------------
 6229|      0|      option_interpreter.UpdateSourceCodeInfo(info);
 6230|      0|    }
 6231|      4|  }
 6232|       |
 6233|       |  // Validate options. See comments at InternalSetLazilyBuildDependencies about
 6234|       |  // error checking and lazy import building.
 6235|      4|  if (!had_errors_ && !pool_->lazily_build_dependencies_) {
  ------------------
  |  Branch (6235:7): [True: 4, False: 0]
  |  Branch (6235:23): [True: 0, False: 4]
  ------------------
 6236|      0|    internal::VisitDescriptors(
 6237|      0|        *result, proto, [&](const auto& descriptor, const auto& desc_proto) {
 6238|      0|          ValidateOptions(&descriptor, desc_proto);
 6239|      0|        });
 6240|      0|  }
 6241|       |
 6242|       |  // Additional naming conflict check for map entry types. Only need to check
 6243|       |  // this if there are already errors.
 6244|      4|  if (had_errors_) {
  ------------------
  |  Branch (6244:7): [True: 0, False: 4]
  ------------------
 6245|      0|    for (int i = 0; i < proto.message_type_size(); ++i) {
  ------------------
  |  Branch (6245:21): [True: 0, False: 0]
  ------------------
 6246|      0|      DetectMapConflicts(result->message_type(i), proto.message_type(i));
 6247|      0|    }
 6248|      0|  }
 6249|       |
 6250|       |
 6251|       |  // Again, see comments at InternalSetLazilyBuildDependencies about error
 6252|       |  // checking. Also, don't log unused dependencies if there were previous
 6253|       |  // errors, since the results might be inaccurate.
 6254|      4|  if (!had_errors_ && !unused_dependency_.empty() &&
  ------------------
  |  Branch (6254:7): [True: 4, False: 0]
  |  Branch (6254:23): [True: 0, False: 4]
  ------------------
 6255|      0|      !pool_->lazily_build_dependencies_) {
  ------------------
  |  Branch (6255:7): [True: 0, False: 0]
  ------------------
 6256|      0|    LogUnusedDependency(proto, result);
 6257|      0|  }
 6258|       |
 6259|       |  // Store feature information for deferred validation outside of the database
 6260|       |  // mutex.
 6261|      4|  if (!had_errors_ && !pool_->lazily_build_dependencies_) {
  ------------------
  |  Branch (6261:7): [True: 4, False: 0]
  |  Branch (6261:23): [True: 0, False: 4]
  ------------------
 6262|      0|    internal::VisitDescriptors(
 6263|      0|        *result, proto, [&](const auto& descriptor, const auto& desc_proto) {
 6264|      0|          if (descriptor.proto_features_ != &FeatureSet::default_instance()) {
 6265|      0|            deferred_validation_.ValidateFeatureLifetimes(
 6266|      0|                GetFile(descriptor), {descriptor.proto_features_, &desc_proto,
 6267|      0|                                      GetFullName(descriptor), proto.name()});
 6268|      0|          }
 6269|      0|        });
 6270|      0|  }
 6271|       |
 6272|      4|  if (had_errors_) {
  ------------------
  |  Branch (6272:7): [True: 0, False: 4]
  ------------------
 6273|      0|    return nullptr;
 6274|      4|  } else {
 6275|      4|    return result;
 6276|      4|  }
 6277|      4|}
_ZN6google8protobuf17DescriptorBuilder19AllocateNameStringsEN4absl12lts_2024011611string_viewES4_RNS0_8internal13FlatAllocatorE:
 6282|     73|    internal::FlatAllocator& alloc) {
 6283|     73|  if (scope.empty()) {
  ------------------
  |  Branch (6283:7): [True: 0, False: 73]
  ------------------
 6284|      0|    return alloc.AllocateStrings(proto_name, proto_name);
 6285|     73|  } else {
 6286|     73|    return alloc.AllocateStrings(proto_name,
 6287|     73|                                 absl::StrCat(scope, ".", proto_name));
 6288|     73|  }
 6289|     73|}
_ZN6google8protobuf17DescriptorBuilder12BuildMessageERKNS0_15DescriptorProtoEPKNS0_10DescriptorEPS5_RNS0_8internal13FlatAllocatorE:
 6316|     47|                                     internal::FlatAllocator& alloc) {
 6317|     47|  const absl::string_view scope =
 6318|     47|      (parent == nullptr) ? file_->package() : parent->full_name();
  ------------------
  |  Branch (6318:7): [True: 37, False: 10]
  ------------------
 6319|     47|  result->all_names_ = AllocateNameStrings(scope, proto.name(), alloc);
 6320|     47|  ValidateSymbolName(proto.name(), result->full_name(), proto);
 6321|       |
 6322|     47|  result->file_ = file_;
 6323|     47|  result->containing_type_ = parent;
 6324|     47|  result->is_placeholder_ = false;
 6325|     47|  result->is_unqualified_placeholder_ = false;
 6326|     47|  result->well_known_type_ = Descriptor::WELLKNOWNTYPE_UNSPECIFIED;
 6327|     47|  result->options_ = nullptr;  // Set to default_instance later if necessary.
 6328|       |
 6329|     47|  auto it = pool_->tables_->well_known_types_.find(result->full_name());
 6330|     47|  if (it != pool_->tables_->well_known_types_.end()) {
  ------------------
  |  Branch (6330:7): [True: 1, False: 46]
  ------------------
 6331|      1|    result->well_known_type_ = it->second;
 6332|      1|  }
 6333|       |
 6334|       |  // Calculate the continuous sequence of fields.
 6335|       |  // These can be fast-path'd during lookup and don't need to be added to the
 6336|       |  // tables.
 6337|       |  // We use uint16_t to save space for sequential_field_limit_, so stop before
 6338|       |  // overflowing it. Worst case, we are not taking full advantage on huge
 6339|       |  // messages, but it is unlikely.
 6340|     47|  result->sequential_field_limit_ = 0;
 6341|    174|  for (int i = 0; i < std::numeric_limits<uint16_t>::max() &&
  ------------------
  |  Branch (6341:19): [True: 174, False: 0]
  ------------------
 6342|    174|                  i < proto.field_size() && proto.field(i).number() == i + 1;
  ------------------
  |  Branch (6342:19): [True: 147, False: 27]
  |  Branch (6342:45): [True: 127, False: 20]
  ------------------
 6343|    127|       ++i) {
 6344|    127|    result->sequential_field_limit_ = i + 1;
 6345|    127|  }
 6346|       |
 6347|       |  // Build oneofs first so that fields and extension ranges can refer to them.
 6348|     47|  BUILD_ARRAY(proto, result, oneof_decl, BuildOneof, result);
  ------------------
  |  | 5627|     47|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|     47|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|     47|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|     47|      INPUT.NAME##_size());                                            \
  |  | 5631|     49|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 2, False: 47]
  |  |  ------------------
  |  | 5632|      2|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|      2|  }
  ------------------
 6349|     47|  BUILD_ARRAY(proto, result, field, BuildField, result);
  ------------------
  |  | 5627|     47|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|     47|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|     47|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|     47|      INPUT.NAME##_size());                                            \
  |  | 5631|    281|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 234, False: 47]
  |  |  ------------------
  |  | 5632|    234|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|    234|  }
  ------------------
 6350|     47|  BUILD_ARRAY(proto, result, enum_type, BuildEnum, result);
  ------------------
  |  | 5627|     47|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|     47|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|     47|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|     47|      INPUT.NAME##_size());                                            \
  |  | 5631|     64|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 17, False: 47]
  |  |  ------------------
  |  | 5632|     17|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|     17|  }
  ------------------
 6351|     47|  BUILD_ARRAY(proto, result, extension_range, BuildExtensionRange, result);
  ------------------
  |  | 5627|     47|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|     47|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|     47|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|     47|      INPUT.NAME##_size());                                            \
  |  | 5631|     61|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 14, False: 47]
  |  |  ------------------
  |  | 5632|     14|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|     14|  }
  ------------------
 6352|     47|  BUILD_ARRAY(proto, result, extension, BuildExtension, result);
  ------------------
  |  | 5627|     47|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|     47|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|     47|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|     47|      INPUT.NAME##_size());                                            \
  |  | 5631|     47|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 0, False: 47]
  |  |  ------------------
  |  | 5632|      0|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|      0|  }
  ------------------
 6353|     47|  BUILD_ARRAY(proto, result, reserved_range, BuildReservedRange, result);
  ------------------
  |  | 5627|     47|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|     47|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|     47|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|     47|      INPUT.NAME##_size());                                            \
  |  | 5631|     61|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 14, False: 47]
  |  |  ------------------
  |  | 5632|     14|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|     14|  }
  ------------------
 6354|       |
 6355|       |  // Copy options.
 6356|     47|  AllocateOptions(proto, result, DescriptorProto::kOptionsFieldNumber,
 6357|     47|                  "google.protobuf.MessageOptions", alloc);
 6358|       |
 6359|       |  // Before building submessages, check recursion limit.
 6360|     47|  --recursion_depth_;
 6361|     47|  IncrementWhenDestroyed revert{recursion_depth_};
 6362|     47|  if (recursion_depth_ <= 0) {
  ------------------
  |  Branch (6362:7): [True: 0, False: 47]
  ------------------
 6363|      0|    AddError(result->full_name(), proto, DescriptorPool::ErrorCollector::OTHER,
 6364|      0|             "Reached maximum recursion limit for nested messages.");
 6365|      0|    result->nested_types_ = nullptr;
 6366|      0|    result->nested_type_count_ = 0;
 6367|      0|    return;
 6368|      0|  }
 6369|     47|  BUILD_ARRAY(proto, result, nested_type, BuildMessage, result);
  ------------------
  |  | 5627|     47|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|     47|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|     47|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|     47|      INPUT.NAME##_size());                                            \
  |  | 5631|     57|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 10, False: 47]
  |  |  ------------------
  |  | 5632|     10|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|     10|  }
  ------------------
 6370|       |
 6371|       |  // Copy reserved names.
 6372|     47|  int reserved_name_count = proto.reserved_name_size();
 6373|     47|  result->reserved_name_count_ = reserved_name_count;
 6374|     47|  result->reserved_names_ =
 6375|     47|      alloc.AllocateArray<const std::string*>(reserved_name_count);
 6376|     49|  for (int i = 0; i < reserved_name_count; ++i) {
  ------------------
  |  Branch (6376:19): [True: 2, False: 47]
  ------------------
 6377|      2|    result->reserved_names_[i] = alloc.AllocateStrings(proto.reserved_name(i));
 6378|      2|  }
 6379|       |
 6380|     47|  AddSymbol(result->full_name(), parent, result->name(), proto, Symbol(result));
 6381|       |
 6382|     61|  for (int i = 0; i < proto.reserved_range_size(); i++) {
  ------------------
  |  Branch (6382:19): [True: 14, False: 47]
  ------------------
 6383|     14|    const DescriptorProto_ReservedRange& range1 = proto.reserved_range(i);
 6384|     27|    for (int j = i + 1; j < proto.reserved_range_size(); j++) {
  ------------------
  |  Branch (6384:25): [True: 13, False: 14]
  ------------------
 6385|     13|      const DescriptorProto_ReservedRange& range2 = proto.reserved_range(j);
 6386|     13|      if (range1.end() > range2.start() && range2.end() > range1.start()) {
  ------------------
  |  Branch (6386:11): [True: 1, False: 12]
  |  Branch (6386:44): [True: 0, False: 1]
  ------------------
 6387|      0|        AddError(result->full_name(), proto.reserved_range(i),
 6388|      0|                 DescriptorPool::ErrorCollector::NUMBER, [&] {
 6389|      0|                   return absl::Substitute(
 6390|      0|                       "Reserved range $0 to $1 overlaps with "
 6391|      0|                       "already-defined range $2 to $3.",
 6392|      0|                       range2.start(), range2.end() - 1, range1.start(),
 6393|      0|                       range1.end() - 1);
 6394|      0|                 });
 6395|      0|      }
 6396|     13|    }
 6397|     14|  }
 6398|       |
 6399|     47|  absl::flat_hash_set<absl::string_view> reserved_name_set;
 6400|     47|  for (const std::string& name : proto.reserved_name()) {
  ------------------
  |  Branch (6400:32): [True: 2, False: 47]
  ------------------
 6401|      2|    if (!reserved_name_set.insert(name).second) {
  ------------------
  |  Branch (6401:9): [True: 0, False: 2]
  ------------------
 6402|      0|      AddError(name, proto, DescriptorPool::ErrorCollector::NAME, [&] {
 6403|      0|        return absl::Substitute("Field name \"$0\" is reserved multiple times.",
 6404|      0|                                name);
 6405|      0|      });
 6406|      0|    }
 6407|      2|  }
 6408|       |  // Check that fields aren't using reserved names or numbers and that they
 6409|       |  // aren't using extension numbers.
 6410|    281|  for (int i = 0; i < result->field_count(); i++) {
  ------------------
  |  Branch (6410:19): [True: 234, False: 47]
  ------------------
 6411|    234|    const FieldDescriptor* field = result->field(i);
 6412|    319|    for (int j = 0; j < result->extension_range_count(); j++) {
  ------------------
  |  Branch (6412:21): [True: 85, False: 234]
  ------------------
 6413|     85|      const Descriptor::ExtensionRange* range = result->extension_range(j);
 6414|     85|      if (range->start_number() <= field->number() &&
  ------------------
  |  Branch (6414:11): [True: 0, False: 85]
  ------------------
 6415|      0|          field->number() < range->end_number()) {
  ------------------
  |  Branch (6415:11): [True: 0, False: 0]
  ------------------
 6416|      0|        message_hints_[result].RequestHintOnFieldNumbers(
 6417|      0|            proto.extension_range(j), DescriptorPool::ErrorCollector::NUMBER);
 6418|      0|        AddError(field->full_name(), proto.extension_range(j),
 6419|      0|                 DescriptorPool::ErrorCollector::NUMBER, [&] {
 6420|      0|                   return absl::Substitute(
 6421|      0|                       "Extension range $0 to $1 includes field \"$2\" ($3).",
 6422|      0|                       range->start_number(), range->end_number() - 1,
 6423|      0|                       field->name(), field->number());
 6424|      0|                 });
 6425|      0|      }
 6426|     85|    }
 6427|    361|    for (int j = 0; j < result->reserved_range_count(); j++) {
  ------------------
  |  Branch (6427:21): [True: 127, False: 234]
  ------------------
 6428|    127|      const Descriptor::ReservedRange* range = result->reserved_range(j);
 6429|    127|      if (range->start <= field->number() && field->number() < range->end) {
  ------------------
  |  Branch (6429:11): [True: 56, False: 71]
  |  Branch (6429:46): [True: 0, False: 56]
  ------------------
 6430|      0|        message_hints_[result].RequestHintOnFieldNumbers(
 6431|      0|            proto.reserved_range(j), DescriptorPool::ErrorCollector::NUMBER);
 6432|      0|        AddError(field->full_name(), proto.reserved_range(j),
 6433|      0|                 DescriptorPool::ErrorCollector::NUMBER, [&] {
 6434|      0|                   return absl::Substitute(
 6435|      0|                       "Field \"$0\" uses reserved number $1.", field->name(),
 6436|      0|                       field->number());
 6437|      0|                 });
 6438|      0|      }
 6439|    127|    }
 6440|    234|    if (reserved_name_set.contains(field->name())) {
  ------------------
  |  Branch (6440:9): [True: 0, False: 234]
  ------------------
 6441|      0|      AddError(field->full_name(), proto.field(i),
 6442|      0|               DescriptorPool::ErrorCollector::NAME, [&] {
 6443|      0|                 return absl::Substitute("Field name \"$0\" is reserved.",
 6444|      0|                                         field->name());
 6445|      0|               });
 6446|      0|    }
 6447|    234|  }
 6448|       |
 6449|       |  // Check that extension ranges don't overlap and don't include
 6450|       |  // reserved field numbers or names.
 6451|     61|  for (int i = 0; i < result->extension_range_count(); i++) {
  ------------------
  |  Branch (6451:19): [True: 14, False: 47]
  ------------------
 6452|     14|    const Descriptor::ExtensionRange* range1 = result->extension_range(i);
 6453|     27|    for (int j = 0; j < result->reserved_range_count(); j++) {
  ------------------
  |  Branch (6453:21): [True: 13, False: 14]
  ------------------
 6454|     13|      const Descriptor::ReservedRange* range2 = result->reserved_range(j);
 6455|     13|      if (range1->end_number() > range2->start &&
  ------------------
  |  Branch (6455:11): [True: 13, False: 0]
  ------------------
 6456|     13|          range2->end > range1->start_number()) {
  ------------------
  |  Branch (6456:11): [True: 0, False: 13]
  ------------------
 6457|      0|        AddError(result->full_name(), proto.extension_range(i),
 6458|      0|                 DescriptorPool::ErrorCollector::NUMBER, [&] {
 6459|      0|                   return absl::Substitute(
 6460|      0|                       "Extension range $0 to $1 overlaps with "
 6461|      0|                       "reserved range $2 to $3.",
 6462|      0|                       range1->start_number(), range1->end_number() - 1,
 6463|      0|                       range2->start, range2->end - 1);
 6464|      0|                 });
 6465|      0|      }
 6466|     13|    }
 6467|     17|    for (int j = i + 1; j < result->extension_range_count(); j++) {
  ------------------
  |  Branch (6467:25): [True: 3, False: 14]
  ------------------
 6468|      3|      const Descriptor::ExtensionRange* range2 = result->extension_range(j);
 6469|      3|      if (range1->end_number() > range2->start_number() &&
  ------------------
  |  Branch (6469:11): [True: 0, False: 3]
  ------------------
 6470|      0|          range2->end_number() > range1->start_number()) {
  ------------------
  |  Branch (6470:11): [True: 0, False: 0]
  ------------------
 6471|      0|        AddError(result->full_name(), proto.extension_range(i),
 6472|      0|                 DescriptorPool::ErrorCollector::NUMBER, [&] {
 6473|      0|                   return absl::Substitute(
 6474|      0|                       "Extension range $0 to $1 overlaps with "
 6475|      0|                       "already-defined range $2 to $3.",
 6476|      0|                       range2->start_number(), range2->end_number() - 1,
 6477|      0|                       range1->start_number(), range1->end_number() - 1);
 6478|      0|                 });
 6479|      0|      }
 6480|      3|    }
 6481|     14|  }
 6482|     47|}
_ZN6google8protobuf17DescriptorBuilder21BuildFieldOrExtensionERKNS0_20FieldDescriptorProtoEPNS0_10DescriptorEPNS0_15FieldDescriptorEbRNS0_8internal13FlatAllocatorE:
 6585|    235|                                              internal::FlatAllocator& alloc) {
 6586|    235|  const absl::string_view scope =
 6587|    235|      (parent == nullptr) ? file_->package() : parent->full_name();
  ------------------
  |  Branch (6587:7): [True: 1, False: 234]
  ------------------
 6588|       |
 6589|       |  // We allocate all names in a single array, and dedup them.
 6590|       |  // We remember the indices for the potentially deduped values.
 6591|    235|  auto all_names = alloc.AllocateFieldNames(
 6592|    235|      proto.name(), scope,
 6593|    235|      proto.has_json_name() ? &proto.json_name() : nullptr);
  ------------------
  |  Branch (6593:7): [True: 0, False: 235]
  ------------------
 6594|    235|  result->all_names_ = all_names.array;
 6595|    235|  result->lowercase_name_index_ = all_names.lowercase_index;
 6596|    235|  result->camelcase_name_index_ = all_names.camelcase_index;
 6597|    235|  result->json_name_index_ = all_names.json_index;
 6598|       |
 6599|    235|  ValidateSymbolName(proto.name(), result->full_name(), proto);
 6600|       |
 6601|    235|  result->file_ = file_;
 6602|    235|  result->number_ = proto.number();
 6603|    235|  result->is_extension_ = is_extension;
 6604|    235|  result->is_oneof_ = false;
 6605|    235|  result->in_real_oneof_ = false;
 6606|    235|  result->proto3_optional_ = proto.proto3_optional();
 6607|       |
 6608|    235|  if (proto.proto3_optional() && file_->edition() != Edition::EDITION_PROTO3) {
  ------------------
  |  Branch (6608:7): [True: 0, False: 235]
  |  Branch (6608:34): [True: 0, False: 0]
  ------------------
 6609|      0|    AddError(result->full_name(), proto, DescriptorPool::ErrorCollector::TYPE,
 6610|      0|             [&] {
 6611|      0|               return absl::StrCat(
 6612|      0|                   "The [proto3_optional=true] option may only be set on proto3"
 6613|      0|                   "fields, not ",
 6614|      0|                   result->full_name());
 6615|      0|             });
 6616|      0|  }
 6617|       |
 6618|    235|  result->has_json_name_ = proto.has_json_name();
 6619|       |
 6620|    235|  result->type_ = proto.type();
 6621|    235|  result->label_ = proto.label();
 6622|    235|  result->is_repeated_ = result->label_ == FieldDescriptor::LABEL_REPEATED;
 6623|       |
 6624|    235|  if (result->label() == FieldDescriptor::LABEL_REQUIRED) {
  ------------------
  |  Branch (6624:7): [True: 2, False: 233]
  ------------------
 6625|       |    // An extension cannot have a required field (b/13365836).
 6626|      2|    if (result->is_extension_) {
  ------------------
  |  Branch (6626:9): [True: 0, False: 2]
  ------------------
 6627|      0|      AddError(result->full_name(), proto,
 6628|       |               // Error location `TYPE`: we would really like to indicate
 6629|       |               // `LABEL`, but the `ErrorLocation` enum has no entry for this,
 6630|       |               // and we don't necessarily know about all implementations of the
 6631|       |               // `ErrorCollector` interface to extend them to handle the new
 6632|       |               // error location type properly.
 6633|      0|               DescriptorPool::ErrorCollector::TYPE, [&] {
 6634|      0|                 return absl::StrCat("The extension ", result->full_name(),
 6635|      0|                                     " cannot be required.");
 6636|      0|               });
 6637|      0|    }
 6638|      2|  }
 6639|       |
 6640|       |  // Some of these may be filled in when cross-linking.
 6641|    235|  result->containing_type_ = nullptr;
 6642|    235|  result->type_once_ = nullptr;
 6643|    235|  result->default_value_enum_ = nullptr;
 6644|       |
 6645|    235|  result->has_default_value_ = proto.has_default_value();
 6646|    235|  if (proto.has_default_value() && result->is_repeated()) {
  ------------------
  |  Branch (6646:7): [True: 27, False: 208]
  |  Branch (6646:36): [True: 0, False: 27]
  ------------------
 6647|      0|    AddError(result->full_name(), proto,
 6648|      0|             DescriptorPool::ErrorCollector::DEFAULT_VALUE,
 6649|      0|             "Repeated fields can't have default values.");
 6650|      0|  }
 6651|       |
 6652|    235|  if (proto.has_type()) {
  ------------------
  |  Branch (6652:7): [True: 235, False: 0]
  ------------------
 6653|    235|    if (proto.has_default_value()) {
  ------------------
  |  Branch (6653:9): [True: 27, False: 208]
  ------------------
 6654|     27|      char* end_pos = nullptr;
 6655|     27|      switch (result->cpp_type()) {
  ------------------
  |  Branch (6655:15): [True: 27, False: 0]
  ------------------
 6656|      0|        case FieldDescriptor::CPPTYPE_INT32:
  ------------------
  |  Branch (6656:9): [True: 0, False: 27]
  ------------------
 6657|      0|          result->default_value_int32_t_ =
 6658|      0|              std::strtol(proto.default_value().c_str(), &end_pos, 0);
 6659|      0|          break;
 6660|      0|        case FieldDescriptor::CPPTYPE_INT64:
  ------------------
  |  Branch (6660:9): [True: 0, False: 27]
  ------------------
 6661|      0|          static_assert(sizeof(int64_t) == sizeof(long long),  // NOLINT
 6662|      0|                        "sizeof int64_t is not sizeof long long");
 6663|      0|          result->default_value_int64_t_ =
 6664|      0|              std::strtoll(proto.default_value().c_str(), &end_pos, 0);
 6665|      0|          break;
 6666|      0|        case FieldDescriptor::CPPTYPE_UINT32:
  ------------------
  |  Branch (6666:9): [True: 0, False: 27]
  ------------------
 6667|      0|          result->default_value_uint32_t_ =
 6668|      0|              std::strtoul(proto.default_value().c_str(), &end_pos, 0);
 6669|      0|          break;
 6670|      0|        case FieldDescriptor::CPPTYPE_UINT64:
  ------------------
  |  Branch (6670:9): [True: 0, False: 27]
  ------------------
 6671|      0|          static_assert(
 6672|      0|              sizeof(uint64_t) == sizeof(unsigned long long),  // NOLINT
 6673|      0|              "sizeof uint64_t is not sizeof unsigned long long");
 6674|      0|          result->default_value_uint64_t_ =
 6675|      0|              std::strtoull(proto.default_value().c_str(), &end_pos, 0);
 6676|      0|          break;
 6677|      0|        case FieldDescriptor::CPPTYPE_FLOAT:
  ------------------
  |  Branch (6677:9): [True: 0, False: 27]
  ------------------
 6678|      0|          if (proto.default_value() == "inf") {
  ------------------
  |  Branch (6678:15): [True: 0, False: 0]
  ------------------
 6679|      0|            result->default_value_float_ =
 6680|      0|                std::numeric_limits<float>::infinity();
 6681|      0|          } else if (proto.default_value() == "-inf") {
  ------------------
  |  Branch (6681:22): [True: 0, False: 0]
  ------------------
 6682|      0|            result->default_value_float_ =
 6683|      0|                -std::numeric_limits<float>::infinity();
 6684|      0|          } else if (proto.default_value() == "nan") {
  ------------------
  |  Branch (6684:22): [True: 0, False: 0]
  ------------------
 6685|      0|            result->default_value_float_ =
 6686|      0|                std::numeric_limits<float>::quiet_NaN();
 6687|      0|          } else {
 6688|      0|            result->default_value_float_ = io::SafeDoubleToFloat(
 6689|      0|                io::NoLocaleStrtod(proto.default_value().c_str(), &end_pos));
 6690|      0|          }
 6691|      0|          break;
 6692|      0|        case FieldDescriptor::CPPTYPE_DOUBLE:
  ------------------
  |  Branch (6692:9): [True: 0, False: 27]
  ------------------
 6693|      0|          if (proto.default_value() == "inf") {
  ------------------
  |  Branch (6693:15): [True: 0, False: 0]
  ------------------
 6694|      0|            result->default_value_double_ =
 6695|      0|                std::numeric_limits<double>::infinity();
 6696|      0|          } else if (proto.default_value() == "-inf") {
  ------------------
  |  Branch (6696:22): [True: 0, False: 0]
  ------------------
 6697|      0|            result->default_value_double_ =
 6698|      0|                -std::numeric_limits<double>::infinity();
 6699|      0|          } else if (proto.default_value() == "nan") {
  ------------------
  |  Branch (6699:22): [True: 0, False: 0]
  ------------------
 6700|      0|            result->default_value_double_ =
 6701|      0|                std::numeric_limits<double>::quiet_NaN();
 6702|      0|          } else {
 6703|      0|            result->default_value_double_ =
 6704|      0|                io::NoLocaleStrtod(proto.default_value().c_str(), &end_pos);
 6705|      0|          }
 6706|      0|          break;
 6707|     22|        case FieldDescriptor::CPPTYPE_BOOL:
  ------------------
  |  Branch (6707:9): [True: 22, False: 5]
  ------------------
 6708|     22|          if (proto.default_value() == "true") {
  ------------------
  |  Branch (6708:15): [True: 1, False: 21]
  ------------------
 6709|      1|            result->default_value_bool_ = true;
 6710|     21|          } else if (proto.default_value() == "false") {
  ------------------
  |  Branch (6710:22): [True: 21, False: 0]
  ------------------
 6711|     21|            result->default_value_bool_ = false;
 6712|     21|          } else {
 6713|      0|            AddError(result->full_name(), proto,
 6714|      0|                     DescriptorPool::ErrorCollector::DEFAULT_VALUE,
 6715|      0|                     "Boolean default must be true or false.");
 6716|      0|          }
 6717|     22|          break;
 6718|      5|        case FieldDescriptor::CPPTYPE_ENUM:
  ------------------
  |  Branch (6718:9): [True: 5, False: 22]
  ------------------
 6719|       |          // This will be filled in when cross-linking.
 6720|      5|          result->default_value_enum_ = nullptr;
 6721|      5|          break;
 6722|      0|        case FieldDescriptor::CPPTYPE_STRING:
  ------------------
  |  Branch (6722:9): [True: 0, False: 27]
  ------------------
 6723|      0|          if (result->type() == FieldDescriptor::TYPE_BYTES) {
  ------------------
  |  Branch (6723:15): [True: 0, False: 0]
  ------------------
 6724|      0|            std::string value;
 6725|      0|            if (absl::CUnescape(proto.default_value(), &value)) {
  ------------------
  |  Branch (6725:17): [True: 0, False: 0]
  ------------------
 6726|      0|              result->default_value_string_ = alloc.AllocateStrings(value);
 6727|      0|            } else {
 6728|      0|              AddError(result->full_name(), proto,
 6729|      0|                       DescriptorPool::ErrorCollector::DEFAULT_VALUE,
 6730|      0|                       "Invalid escaping in default value.");
 6731|      0|            }
 6732|      0|          } else {
 6733|      0|            result->default_value_string_ =
 6734|      0|                alloc.AllocateStrings(proto.default_value());
 6735|      0|          }
 6736|      0|          break;
 6737|      0|        case FieldDescriptor::CPPTYPE_MESSAGE:
  ------------------
  |  Branch (6737:9): [True: 0, False: 27]
  ------------------
 6738|      0|          AddError(result->full_name(), proto,
 6739|      0|                   DescriptorPool::ErrorCollector::DEFAULT_VALUE,
 6740|      0|                   "Messages can't have default values.");
 6741|      0|          result->has_default_value_ = false;
 6742|      0|          result->default_generated_instance_ = nullptr;
 6743|      0|          break;
 6744|     27|      }
 6745|       |
 6746|     27|      if (end_pos != nullptr) {
  ------------------
  |  Branch (6746:11): [True: 0, False: 27]
  ------------------
 6747|       |        // end_pos is only set non-null by the parsers for numeric types,
 6748|       |        // above. This checks that the default was non-empty and had no extra
 6749|       |        // junk after the end of the number.
 6750|      0|        if (proto.default_value().empty() || *end_pos != '\0') {
  ------------------
  |  Branch (6750:13): [True: 0, False: 0]
  |  Branch (6750:46): [True: 0, False: 0]
  ------------------
 6751|      0|          AddError(result->full_name(), proto,
 6752|      0|                   DescriptorPool::ErrorCollector::DEFAULT_VALUE, [&] {
 6753|      0|                     return absl::StrCat("Couldn't parse default value \"",
 6754|      0|                                         proto.default_value(), "\".");
 6755|      0|                   });
 6756|      0|        }
 6757|      0|      }
 6758|    208|    } else {
 6759|       |      // No explicit default value
 6760|    208|      switch (result->cpp_type()) {
  ------------------
  |  Branch (6760:15): [True: 208, False: 0]
  ------------------
 6761|     17|        case FieldDescriptor::CPPTYPE_INT32:
  ------------------
  |  Branch (6761:9): [True: 17, False: 191]
  ------------------
 6762|     17|          result->default_value_int32_t_ = 0;
 6763|     17|          break;
 6764|      1|        case FieldDescriptor::CPPTYPE_INT64:
  ------------------
  |  Branch (6764:9): [True: 1, False: 207]
  ------------------
 6765|      1|          result->default_value_int64_t_ = 0;
 6766|      1|          break;
 6767|      8|        case FieldDescriptor::CPPTYPE_UINT32:
  ------------------
  |  Branch (6767:9): [True: 8, False: 200]
  ------------------
 6768|      8|          result->default_value_uint32_t_ = 0;
 6769|      8|          break;
 6770|      2|        case FieldDescriptor::CPPTYPE_UINT64:
  ------------------
  |  Branch (6770:9): [True: 2, False: 206]
  ------------------
 6771|      2|          result->default_value_uint64_t_ = 0;
 6772|      2|          break;
 6773|      0|        case FieldDescriptor::CPPTYPE_FLOAT:
  ------------------
  |  Branch (6773:9): [True: 0, False: 208]
  ------------------
 6774|      0|          result->default_value_float_ = 0.0f;
 6775|      0|          break;
 6776|      1|        case FieldDescriptor::CPPTYPE_DOUBLE:
  ------------------
  |  Branch (6776:9): [True: 1, False: 207]
  ------------------
 6777|      1|          result->default_value_double_ = 0.0;
 6778|      1|          break;
 6779|     25|        case FieldDescriptor::CPPTYPE_BOOL:
  ------------------
  |  Branch (6779:9): [True: 25, False: 183]
  ------------------
 6780|     25|          result->default_value_bool_ = false;
 6781|     25|          break;
 6782|     27|        case FieldDescriptor::CPPTYPE_ENUM:
  ------------------
  |  Branch (6782:9): [True: 27, False: 181]
  ------------------
 6783|       |          // This will be filled in when cross-linking.
 6784|     27|          result->default_value_enum_ = nullptr;
 6785|     27|          break;
 6786|     61|        case FieldDescriptor::CPPTYPE_STRING:
  ------------------
  |  Branch (6786:9): [True: 61, False: 147]
  ------------------
 6787|     61|          result->default_value_string_ = &internal::GetEmptyString();
 6788|     61|          break;
 6789|     66|        case FieldDescriptor::CPPTYPE_MESSAGE:
  ------------------
  |  Branch (6789:9): [True: 66, False: 142]
  ------------------
 6790|     66|          result->default_generated_instance_ = nullptr;
 6791|     66|          break;
 6792|    208|      }
 6793|    208|    }
 6794|    235|  }
 6795|       |
 6796|    235|  if (result->number() <= 0) {
  ------------------
  |  Branch (6796:7): [True: 0, False: 235]
  ------------------
 6797|      0|    message_hints_[parent].RequestHintOnFieldNumbers(
 6798|      0|        proto, DescriptorPool::ErrorCollector::NUMBER);
 6799|      0|    AddError(result->full_name(), proto, DescriptorPool::ErrorCollector::NUMBER,
 6800|      0|             "Field numbers must be positive integers.");
 6801|    235|  } else if (!is_extension && result->number() > FieldDescriptor::kMaxNumber) {
  ------------------
  |  Branch (6801:14): [True: 234, False: 1]
  |  Branch (6801:31): [True: 0, False: 234]
  ------------------
 6802|       |    // Only validate that the number is within the valid field range if it is
 6803|       |    // not an extension. Since extension numbers are validated with the
 6804|       |    // extendee's valid set of extension numbers, and those are in turn
 6805|       |    // validated against the max allowed number, the check is unnecessary for
 6806|       |    // extension fields.
 6807|       |    // This avoids cross-linking issues that arise when attempting to check if
 6808|       |    // the extendee is a message_set_wire_format message, which has a higher max
 6809|       |    // on extension numbers.
 6810|      0|    message_hints_[parent].RequestHintOnFieldNumbers(
 6811|      0|        proto, DescriptorPool::ErrorCollector::NUMBER);
 6812|      0|    AddError(result->full_name(), proto, DescriptorPool::ErrorCollector::NUMBER,
 6813|      0|             [&] {
 6814|      0|               return absl::Substitute(
 6815|      0|                   "Field numbers cannot be greater than $0.",
 6816|      0|                   FieldDescriptor::kMaxNumber);
 6817|      0|             });
 6818|      0|  }
 6819|       |
 6820|    235|  if (is_extension) {
  ------------------
  |  Branch (6820:7): [True: 1, False: 234]
  ------------------
 6821|      1|    if (!proto.has_extendee()) {
  ------------------
  |  Branch (6821:9): [True: 0, False: 1]
  ------------------
 6822|      0|      AddError(result->full_name(), proto,
 6823|      0|               DescriptorPool::ErrorCollector::EXTENDEE,
 6824|      0|               "FieldDescriptorProto.extendee not set for extension field.");
 6825|      0|    }
 6826|       |
 6827|      1|    result->scope_.extension_scope = parent;
 6828|       |
 6829|      1|    if (proto.has_oneof_index()) {
  ------------------
  |  Branch (6829:9): [True: 0, False: 1]
  ------------------
 6830|      0|      AddError(result->full_name(), proto, DescriptorPool::ErrorCollector::TYPE,
 6831|      0|               "FieldDescriptorProto.oneof_index should not be set for "
 6832|      0|               "extensions.");
 6833|      0|    }
 6834|    234|  } else {
 6835|    234|    if (proto.has_extendee()) {
  ------------------
  |  Branch (6835:9): [True: 0, False: 234]
  ------------------
 6836|      0|      AddError(result->full_name(), proto,
 6837|      0|               DescriptorPool::ErrorCollector::EXTENDEE,
 6838|      0|               "FieldDescriptorProto.extendee set for non-extension field.");
 6839|      0|    }
 6840|       |
 6841|    234|    result->containing_type_ = parent;
 6842|       |
 6843|    234|    if (proto.has_oneof_index()) {
  ------------------
  |  Branch (6843:9): [True: 5, False: 229]
  ------------------
 6844|      5|      if (proto.oneof_index() < 0 ||
  ------------------
  |  Branch (6844:11): [True: 0, False: 5]
  ------------------
 6845|      5|          proto.oneof_index() >= parent->oneof_decl_count()) {
  ------------------
  |  Branch (6845:11): [True: 0, False: 5]
  ------------------
 6846|      0|        AddError(result->full_name(), proto,
 6847|      0|                 DescriptorPool::ErrorCollector::TYPE, [&] {
 6848|      0|                   return absl::Substitute(
 6849|      0|                       "FieldDescriptorProto.oneof_index $0 is "
 6850|      0|                       "out of range for type \"$1\".",
 6851|      0|                       proto.oneof_index(), parent->name());
 6852|      0|                 });
 6853|      5|      } else {
 6854|      5|        result->is_oneof_ = true;
 6855|      5|        result->scope_.containing_oneof =
 6856|      5|            parent->oneof_decl(proto.oneof_index());
 6857|      5|        result->in_real_oneof_ = !result->proto3_optional_;
 6858|      5|      }
 6859|      5|    }
 6860|    234|  }
 6861|       |
 6862|       |  // Copy options.
 6863|    235|  AllocateOptions(proto, result, FieldDescriptorProto::kOptionsFieldNumber,
 6864|    235|                  "google.protobuf.FieldOptions", alloc);
 6865|       |
 6866|    235|  AddSymbol(result->full_name(), parent, result->name(), proto, Symbol(result));
 6867|    235|}
_ZN6google8protobuf17DescriptorBuilder19BuildExtensionRangeERKNS0_30DescriptorProto_ExtensionRangeEPKNS0_10DescriptorEPNS5_14ExtensionRangeERNS0_8internal13FlatAllocatorE:
 6871|     14|    Descriptor::ExtensionRange* result, internal::FlatAllocator& alloc) {
 6872|     14|  result->start_ = proto.start();
 6873|     14|  result->end_ = proto.end();
 6874|     14|  result->containing_type_ = parent;
 6875|       |
 6876|     14|  if (result->start_number() <= 0) {
  ------------------
  |  Branch (6876:7): [True: 0, False: 14]
  ------------------
 6877|      0|    message_hints_[parent].RequestHintOnFieldNumbers(
 6878|      0|        proto, DescriptorPool::ErrorCollector::NUMBER, result->start_number(),
 6879|      0|        result->end_number());
 6880|      0|    AddError(parent->full_name(), proto, DescriptorPool::ErrorCollector::NUMBER,
 6881|      0|             "Extension numbers must be positive integers.");
 6882|      0|  }
 6883|       |
 6884|       |  // Checking of the upper bound of the extension range is deferred until after
 6885|       |  // options interpreting. This allows messages with message_set_wire_format to
 6886|       |  // have extensions beyond FieldDescriptor::kMaxNumber, since the extension
 6887|       |  // numbers are actually used as int32s in the message_set_wire_format.
 6888|       |
 6889|     14|  if (result->start_number() >= result->end_number()) {
  ------------------
  |  Branch (6889:7): [True: 0, False: 14]
  ------------------
 6890|      0|    AddError(parent->full_name(), proto, DescriptorPool::ErrorCollector::NUMBER,
 6891|      0|             "Extension range end number must be greater than start number.");
 6892|      0|  }
 6893|       |
 6894|       |  // Copy options
 6895|     14|  AllocateOptions(proto, result,
 6896|     14|                  DescriptorProto_ExtensionRange::kOptionsFieldNumber,
 6897|     14|                  "google.protobuf.ExtensionRangeOptions", alloc);
 6898|     14|}
_ZN6google8protobuf17DescriptorBuilder18BuildReservedRangeERKNS0_29DescriptorProto_ReservedRangeEPKNS0_10DescriptorEPNS5_13ReservedRangeERNS0_8internal13FlatAllocatorE:
 6902|     14|    Descriptor::ReservedRange* result, internal::FlatAllocator&) {
 6903|     14|  result->start = proto.start();
 6904|     14|  result->end = proto.end();
 6905|     14|  if (result->start <= 0) {
  ------------------
  |  Branch (6905:7): [True: 0, False: 14]
  ------------------
 6906|      0|    message_hints_[parent].RequestHintOnFieldNumbers(
 6907|      0|        proto, DescriptorPool::ErrorCollector::NUMBER, result->start,
 6908|      0|        result->end);
 6909|      0|    AddError(parent->full_name(), proto, DescriptorPool::ErrorCollector::NUMBER,
 6910|      0|             "Reserved numbers must be positive integers.");
 6911|      0|  }
 6912|     14|  if (result->start >= result->end) {
  ------------------
  |  Branch (6912:7): [True: 0, False: 14]
  ------------------
 6913|      0|    AddError(parent->full_name(), proto, DescriptorPool::ErrorCollector::NUMBER,
 6914|      0|             "Reserved range end number must be greater than start number.");
 6915|      0|  }
 6916|     14|}
_ZN6google8protobuf17DescriptorBuilder18BuildReservedRangeERKNS0_37EnumDescriptorProto_EnumReservedRangeEPKNS0_14EnumDescriptorEPNS5_13ReservedRangeERNS0_8internal13FlatAllocatorE:
 6921|      1|    internal::FlatAllocator&) {
 6922|      1|  result->start = proto.start();
 6923|      1|  result->end = proto.end();
 6924|       |
 6925|      1|  if (result->start > result->end) {
  ------------------
  |  Branch (6925:7): [True: 0, False: 1]
  ------------------
 6926|      0|    AddError(parent->full_name(), proto, DescriptorPool::ErrorCollector::NUMBER,
 6927|      0|             "Reserved range end number must be greater than start number.");
 6928|      0|  }
 6929|      1|}
_ZN6google8protobuf17DescriptorBuilder10BuildOneofERKNS0_20OneofDescriptorProtoEPNS0_10DescriptorEPNS0_15OneofDescriptorERNS0_8internal13FlatAllocatorE:
 6933|      2|                                   internal::FlatAllocator& alloc) {
 6934|      2|  result->all_names_ =
 6935|      2|      AllocateNameStrings(parent->full_name(), proto.name(), alloc);
 6936|      2|  ValidateSymbolName(proto.name(), result->full_name(), proto);
 6937|       |
 6938|      2|  result->containing_type_ = parent;
 6939|       |
 6940|       |  // We need to fill these in later.
 6941|      2|  result->field_count_ = 0;
 6942|      2|  result->fields_ = nullptr;
 6943|       |
 6944|       |  // Copy options.
 6945|      2|  AllocateOptions(proto, result, OneofDescriptorProto::kOptionsFieldNumber,
 6946|      2|                  "google.protobuf.OneofOptions", alloc);
 6947|       |
 6948|      2|  AddSymbol(result->full_name(), parent, result->name(), proto, Symbol(result));
 6949|      2|}
_ZN6google8protobuf17DescriptorBuilder9BuildEnumERKNS0_19EnumDescriptorProtoEPKNS0_10DescriptorEPNS0_14EnumDescriptorERNS0_8internal13FlatAllocatorE:
 7021|     24|                                  internal::FlatAllocator& alloc) {
 7022|     24|  const absl::string_view scope =
 7023|     24|      (parent == nullptr) ? file_->package() : parent->full_name();
  ------------------
  |  Branch (7023:7): [True: 7, False: 17]
  ------------------
 7024|       |
 7025|     24|  result->all_names_ = AllocateNameStrings(scope, proto.name(), alloc);
 7026|     24|  ValidateSymbolName(proto.name(), result->full_name(), proto);
 7027|     24|  result->file_ = file_;
 7028|     24|  result->containing_type_ = parent;
 7029|     24|  result->is_placeholder_ = false;
 7030|     24|  result->is_unqualified_placeholder_ = false;
 7031|       |
 7032|     24|  if (proto.value_size() == 0) {
  ------------------
  |  Branch (7032:7): [True: 0, False: 24]
  ------------------
 7033|       |    // We cannot allow enums with no values because this would mean there
 7034|       |    // would be no valid default value for fields of this type.
 7035|      0|    AddError(result->full_name(), proto, DescriptorPool::ErrorCollector::NAME,
 7036|      0|             "Enums must contain at least one value.");
 7037|      0|  }
 7038|       |
 7039|       |  // Calculate the continuous sequence of the labels.
 7040|       |  // These can be fast-path'd during lookup and don't need to be added to the
 7041|       |  // tables.
 7042|       |  // We use uint16_t to save space for sequential_value_limit_, so stop before
 7043|       |  // overflowing it. Worst case, we are not taking full advantage on huge
 7044|       |  // enums, but it is unlikely.
 7045|     24|  for (int i = 0;
 7046|    119|       i < std::numeric_limits<uint16_t>::max() && i < proto.value_size() &&
  ------------------
  |  Branch (7046:8): [True: 119, False: 0]
  |  Branch (7046:52): [True: 99, False: 20]
  ------------------
 7047|       |       // We do the math in int64_t to avoid overflows.
 7048|     99|       proto.value(i).number() ==
  ------------------
  |  Branch (7048:8): [True: 95, False: 4]
  ------------------
 7049|     99|           static_cast<int64_t>(i) + proto.value(0).number();
 7050|     95|       ++i) {
 7051|     95|    result->sequential_value_limit_ = i;
 7052|     95|  }
 7053|       |
 7054|     24|  BUILD_ARRAY(proto, result, value, BuildEnumValue, result);
  ------------------
  |  | 5627|     24|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|     24|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|     24|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|     24|      INPUT.NAME##_size());                                            \
  |  | 5631|    214|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 190, False: 24]
  |  |  ------------------
  |  | 5632|    190|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|    190|  }
  ------------------
 7055|     24|  BUILD_ARRAY(proto, result, reserved_range, BuildReservedRange, result);
  ------------------
  |  | 5627|     24|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|     24|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|     24|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|     24|      INPUT.NAME##_size());                                            \
  |  | 5631|     25|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 1, False: 24]
  |  |  ------------------
  |  | 5632|      1|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|      1|  }
  ------------------
 7056|       |
 7057|       |  // Copy reserved names.
 7058|     24|  int reserved_name_count = proto.reserved_name_size();
 7059|     24|  result->reserved_name_count_ = reserved_name_count;
 7060|     24|  result->reserved_names_ =
 7061|     24|      alloc.AllocateArray<const std::string*>(reserved_name_count);
 7062|     24|  for (int i = 0; i < reserved_name_count; ++i) {
  ------------------
  |  Branch (7062:19): [True: 0, False: 24]
  ------------------
 7063|      0|    result->reserved_names_[i] = alloc.AllocateStrings(proto.reserved_name(i));
 7064|      0|  }
 7065|       |
 7066|       |  // Copy options.
 7067|     24|  AllocateOptions(proto, result, EnumDescriptorProto::kOptionsFieldNumber,
 7068|     24|                  "google.protobuf.EnumOptions", alloc);
 7069|       |
 7070|     24|  AddSymbol(result->full_name(), parent, result->name(), proto, Symbol(result));
 7071|       |
 7072|     25|  for (int i = 0; i < proto.reserved_range_size(); i++) {
  ------------------
  |  Branch (7072:19): [True: 1, False: 24]
  ------------------
 7073|      1|    const EnumDescriptorProto_EnumReservedRange& range1 =
 7074|      1|        proto.reserved_range(i);
 7075|      1|    for (int j = i + 1; j < proto.reserved_range_size(); j++) {
  ------------------
  |  Branch (7075:25): [True: 0, False: 1]
  ------------------
 7076|      0|      const EnumDescriptorProto_EnumReservedRange& range2 =
 7077|      0|          proto.reserved_range(j);
 7078|      0|      if (range1.end() >= range2.start() && range2.end() >= range1.start()) {
  ------------------
  |  Branch (7078:11): [True: 0, False: 0]
  |  Branch (7078:45): [True: 0, False: 0]
  ------------------
 7079|      0|        AddError(result->full_name(), proto.reserved_range(i),
 7080|      0|                 DescriptorPool::ErrorCollector::NUMBER, [&] {
 7081|      0|                   return absl::Substitute(
 7082|      0|                       "Reserved range $0 to $1 overlaps with "
 7083|      0|                       "already-defined range $2 to $3.",
 7084|      0|                       range2.start(), range2.end(), range1.start(),
 7085|      0|                       range1.end());
 7086|      0|                 });
 7087|      0|      }
 7088|      0|    }
 7089|      1|  }
 7090|       |
 7091|     24|  absl::flat_hash_set<absl::string_view> reserved_name_set;
 7092|     24|  for (const std::string& name : proto.reserved_name()) {
  ------------------
  |  Branch (7092:32): [True: 0, False: 24]
  ------------------
 7093|      0|    if (!reserved_name_set.insert(name).second) {
  ------------------
  |  Branch (7093:9): [True: 0, False: 0]
  ------------------
 7094|      0|      AddError(name, proto, DescriptorPool::ErrorCollector::NAME, [&] {
 7095|      0|        return absl::Substitute("Enum value \"$0\" is reserved multiple times.",
 7096|      0|                                name);
 7097|      0|      });
 7098|      0|    }
 7099|      0|  }
 7100|       |
 7101|    214|  for (int i = 0; i < result->value_count(); i++) {
  ------------------
  |  Branch (7101:19): [True: 190, False: 24]
  ------------------
 7102|    190|    const EnumValueDescriptor* value = result->value(i);
 7103|    193|    for (int j = 0; j < result->reserved_range_count(); j++) {
  ------------------
  |  Branch (7103:21): [True: 3, False: 190]
  ------------------
 7104|      3|      const EnumDescriptor::ReservedRange* range = result->reserved_range(j);
 7105|      3|      if (range->start <= value->number() && value->number() <= range->end) {
  ------------------
  |  Branch (7105:11): [True: 2, False: 1]
  |  Branch (7105:46): [True: 0, False: 2]
  ------------------
 7106|      0|        AddError(value->full_name(), proto.reserved_range(j),
 7107|      0|                 DescriptorPool::ErrorCollector::NUMBER, [&] {
 7108|      0|                   return absl::Substitute(
 7109|      0|                       "Enum value \"$0\" uses reserved number $1.",
 7110|      0|                       value->name(), value->number());
 7111|      0|                 });
 7112|      0|      }
 7113|      3|    }
 7114|    190|    if (reserved_name_set.contains(value->name())) {
  ------------------
  |  Branch (7114:9): [True: 0, False: 190]
  ------------------
 7115|      0|      AddError(value->full_name(), proto.value(i),
 7116|      0|               DescriptorPool::ErrorCollector::NAME, [&] {
 7117|      0|                 return absl::Substitute("Enum value \"$0\" is reserved.",
 7118|      0|                                         value->name());
 7119|      0|               });
 7120|      0|    }
 7121|    190|  }
 7122|     24|}
_ZN6google8protobuf17DescriptorBuilder14BuildEnumValueERKNS0_24EnumValueDescriptorProtoEPKNS0_14EnumDescriptorEPNS0_19EnumValueDescriptorERNS0_8internal13FlatAllocatorE:
 7127|    190|                                       internal::FlatAllocator& alloc) {
 7128|       |  // Note:  full_name for enum values is a sibling to the parent's name, not a
 7129|       |  //   child of it.
 7130|    190|  std::string full_name;
 7131|    190|  size_t scope_len = parent->full_name().size() - parent->name().size();
 7132|    190|  full_name.reserve(scope_len + proto.name().size());
 7133|    190|  full_name.append(parent->full_name().data(), scope_len);
 7134|    190|  full_name.append(proto.name());
 7135|       |
 7136|    190|  result->all_names_ =
 7137|    190|      alloc.AllocateStrings(proto.name(), std::move(full_name));
 7138|    190|  result->number_ = proto.number();
 7139|    190|  result->type_ = parent;
 7140|       |
 7141|    190|  ValidateSymbolName(proto.name(), result->full_name(), proto);
 7142|       |
 7143|       |  // Copy options.
 7144|    190|  AllocateOptions(proto, result, EnumValueDescriptorProto::kOptionsFieldNumber,
 7145|    190|                  "google.protobuf.EnumValueOptions", alloc);
 7146|       |
 7147|       |  // Again, enum values are weird because we makes them appear as siblings
 7148|       |  // of the enum type instead of children of it.  So, we use
 7149|       |  // parent->containing_type() as the value's parent.
 7150|    190|  bool added_to_outer_scope =
 7151|    190|      AddSymbol(result->full_name(), parent->containing_type(), result->name(),
 7152|    190|                proto, Symbol::EnumValue(result, 0));
 7153|       |
 7154|       |  // However, we also want to be able to search for values within a single
 7155|       |  // enum type, so we add it as a child of the enum type itself, too.
 7156|       |  // Note:  This could fail, but if it does, the error has already been
 7157|       |  //   reported by the above AddSymbol() call, so we ignore the return code.
 7158|    190|  bool added_to_inner_scope = file_tables_->AddAliasUnderParent(
 7159|    190|      parent, result->name(), Symbol::EnumValue(result, 1));
 7160|       |
 7161|    190|  if (added_to_inner_scope && !added_to_outer_scope) {
  ------------------
  |  Branch (7161:7): [True: 190, False: 0]
  |  Branch (7161:31): [True: 0, False: 190]
  ------------------
 7162|       |    // This value did not conflict with any values defined in the same enum,
 7163|       |    // but it did conflict with some other symbol defined in the enum type's
 7164|       |    // scope.  Let's print an additional error to explain this.
 7165|      0|    std::string outer_scope;
 7166|      0|    if (parent->containing_type() == nullptr) {
  ------------------
  |  Branch (7166:9): [True: 0, False: 0]
  ------------------
 7167|      0|      outer_scope = file_->package();
 7168|      0|    } else {
 7169|      0|      outer_scope = parent->containing_type()->full_name();
 7170|      0|    }
 7171|       |
 7172|      0|    if (outer_scope.empty()) {
  ------------------
  |  Branch (7172:9): [True: 0, False: 0]
  ------------------
 7173|      0|      outer_scope = "the global scope";
 7174|      0|    } else {
 7175|      0|      outer_scope = absl::StrCat("\"", outer_scope, "\"");
 7176|      0|    }
 7177|       |
 7178|      0|    AddError(
 7179|      0|        result->full_name(), proto, DescriptorPool::ErrorCollector::NAME, [&] {
 7180|      0|          return absl::StrCat(
 7181|      0|              "Note that enum values use C++ scoping rules, meaning that "
 7182|      0|              "enum values are siblings of their type, not children of it.  "
 7183|      0|              "Therefore, \"",
 7184|      0|              result->name(), "\" must be unique within ", outer_scope,
 7185|      0|              ", not just within \"", parent->name(), "\".");
 7186|      0|        });
 7187|      0|  }
 7188|       |
 7189|       |  // An enum is allowed to define two numbers that refer to the same value.
 7190|       |  // FindValueByNumber() should return the first such value, so we simply
 7191|       |  // ignore AddEnumValueByNumber()'s return code.
 7192|    190|  file_tables_->AddEnumValueByNumber(result);
 7193|    190|}
_ZN6google8protobuf17DescriptorBuilder13CrossLinkFileEPNS0_14FileDescriptorERKNS0_19FileDescriptorProtoE:
 7243|      4|                                      const FileDescriptorProto& proto) {
 7244|     41|  for (int i = 0; i < file->message_type_count(); i++) {
  ------------------
  |  Branch (7244:19): [True: 37, False: 4]
  ------------------
 7245|     37|    CrossLinkMessage(&file->message_types_[i], proto.message_type(i));
 7246|     37|  }
 7247|       |
 7248|      5|  for (int i = 0; i < file->extension_count(); i++) {
  ------------------
  |  Branch (7248:19): [True: 1, False: 4]
  ------------------
 7249|      1|    CrossLinkField(&file->extensions_[i], proto.extension(i));
 7250|      1|  }
 7251|       |
 7252|      4|  for (int i = 0; i < file->service_count(); i++) {
  ------------------
  |  Branch (7252:19): [True: 0, False: 4]
  ------------------
 7253|      0|    CrossLinkService(&file->services_[i], proto.service(i));
 7254|      0|  }
 7255|      4|}
_ZN6google8protobuf17DescriptorBuilder16CrossLinkMessageEPNS0_10DescriptorERKNS0_15DescriptorProtoE:
 7258|     47|                                         const DescriptorProto& proto) {
 7259|     57|  for (int i = 0; i < message->nested_type_count(); i++) {
  ------------------
  |  Branch (7259:19): [True: 10, False: 47]
  ------------------
 7260|     10|    CrossLinkMessage(&message->nested_types_[i], proto.nested_type(i));
 7261|     10|  }
 7262|       |
 7263|    281|  for (int i = 0; i < message->field_count(); i++) {
  ------------------
  |  Branch (7263:19): [True: 234, False: 47]
  ------------------
 7264|    234|    CrossLinkField(&message->fields_[i], proto.field(i));
 7265|    234|  }
 7266|       |
 7267|     47|  for (int i = 0; i < message->extension_count(); i++) {
  ------------------
  |  Branch (7267:19): [True: 0, False: 47]
  ------------------
 7268|      0|    CrossLinkField(&message->extensions_[i], proto.extension(i));
 7269|      0|  }
 7270|       |
 7271|       |  // Set up field array for each oneof.
 7272|       |
 7273|       |  // First count the number of fields per oneof.
 7274|    281|  for (int i = 0; i < message->field_count(); i++) {
  ------------------
  |  Branch (7274:19): [True: 234, False: 47]
  ------------------
 7275|    234|    const OneofDescriptor* oneof_decl = message->field(i)->containing_oneof();
 7276|    234|    if (oneof_decl != nullptr) {
  ------------------
  |  Branch (7276:9): [True: 5, False: 229]
  ------------------
 7277|       |      // Make sure fields belonging to the same oneof are defined consecutively.
 7278|       |      // This enables optimizations in codegens and reflection libraries to
 7279|       |      // skip fields in the oneof group, as only one of the field can be set.
 7280|       |      // Note that field_count() returns how many fields in this oneof we have
 7281|       |      // seen so far. field_count() > 0 guarantees that i > 0, so field(i-1) is
 7282|       |      // safe.
 7283|      5|      if (oneof_decl->field_count() > 0 &&
  ------------------
  |  Branch (7283:11): [True: 3, False: 2]
  ------------------
 7284|      3|          message->field(i - 1)->containing_oneof() != oneof_decl) {
  ------------------
  |  Branch (7284:11): [True: 0, False: 3]
  ------------------
 7285|      0|        AddError(
 7286|      0|            absl::StrCat(message->full_name(), ".",
 7287|      0|                         message->field(i - 1)->name()),
 7288|      0|            proto.field(i - 1), DescriptorPool::ErrorCollector::TYPE, [&] {
 7289|      0|              return absl::Substitute(
 7290|      0|                  "Fields in the same oneof must be defined consecutively. "
 7291|      0|                  "\"$0\" cannot be defined before the completion of the "
 7292|      0|                  "\"$1\" oneof definition.",
 7293|      0|                  message->field(i - 1)->name(), oneof_decl->name());
 7294|      0|            });
 7295|      0|      }
 7296|       |      // Must go through oneof_decls_ array to get a non-const version of the
 7297|       |      // OneofDescriptor.
 7298|      5|      auto& out_oneof_decl = message->oneof_decls_[oneof_decl->index()];
 7299|      5|      if (out_oneof_decl.field_count_ == 0) {
  ------------------
  |  Branch (7299:11): [True: 2, False: 3]
  ------------------
 7300|      2|        out_oneof_decl.fields_ = message->field(i);
 7301|      2|      }
 7302|       |
 7303|      5|      if (!had_errors_) {
  ------------------
  |  Branch (7303:11): [True: 5, False: 0]
  ------------------
 7304|       |        // Verify that they are contiguous.
 7305|       |        // This is assumed by OneofDescriptor::field(i).
 7306|       |        // But only if there are no errors.
 7307|      5|        ABSL_CHECK_EQ(out_oneof_decl.fields_ + out_oneof_decl.field_count_,
  ------------------
  |  |   50|      5|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      5|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      5|  while (                                                                      \
  |  |  |  |  |  |   62|      5|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 5]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      5|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      5|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      5|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      5|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      5|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      5|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7308|      5|                      message->field(i));
 7309|      5|      }
 7310|      5|      ++out_oneof_decl.field_count_;
 7311|      5|    }
 7312|    234|  }
 7313|       |
 7314|       |  // Then verify the sizes.
 7315|     49|  for (int i = 0; i < message->oneof_decl_count(); i++) {
  ------------------
  |  Branch (7315:19): [True: 2, False: 47]
  ------------------
 7316|      2|    OneofDescriptor* oneof_decl = &message->oneof_decls_[i];
 7317|       |
 7318|      2|    if (oneof_decl->field_count() == 0) {
  ------------------
  |  Branch (7318:9): [True: 0, False: 2]
  ------------------
 7319|      0|      AddError(absl::StrCat(message->full_name(), ".", oneof_decl->name()),
 7320|      0|               proto.oneof_decl(i), DescriptorPool::ErrorCollector::NAME,
 7321|      0|               "Oneof must have at least one field.");
 7322|      0|    }
 7323|      2|  }
 7324|       |
 7325|    281|  for (int i = 0; i < message->field_count(); i++) {
  ------------------
  |  Branch (7325:19): [True: 234, False: 47]
  ------------------
 7326|    234|    const FieldDescriptor* field = message->field(i);
 7327|    234|    if (field->proto3_optional_) {
  ------------------
  |  Branch (7327:9): [True: 0, False: 234]
  ------------------
 7328|      0|      if (!field->containing_oneof() ||
  ------------------
  |  Branch (7328:11): [True: 0, False: 0]
  ------------------
 7329|      0|          !field->containing_oneof()->is_synthetic()) {
  ------------------
  |  Branch (7329:11): [True: 0, False: 0]
  ------------------
 7330|      0|        AddError(message->full_name(), proto.field(i),
 7331|      0|                 DescriptorPool::ErrorCollector::OTHER,
 7332|      0|                 "Fields with proto3_optional set must be "
 7333|      0|                 "a member of a one-field oneof");
 7334|      0|      }
 7335|      0|    }
 7336|    234|  }
 7337|       |
 7338|       |  // Synthetic oneofs must be last.
 7339|     47|  int first_synthetic = -1;
 7340|     49|  for (int i = 0; i < message->oneof_decl_count(); i++) {
  ------------------
  |  Branch (7340:19): [True: 2, False: 47]
  ------------------
 7341|      2|    if (message->oneof_decl(i)->is_synthetic()) {
  ------------------
  |  Branch (7341:9): [True: 0, False: 2]
  ------------------
 7342|      0|      if (first_synthetic == -1) {
  ------------------
  |  Branch (7342:11): [True: 0, False: 0]
  ------------------
 7343|      0|        first_synthetic = i;
 7344|      0|      }
 7345|      2|    } else {
 7346|      2|      if (first_synthetic != -1) {
  ------------------
  |  Branch (7346:11): [True: 0, False: 2]
  ------------------
 7347|      0|        AddError(message->full_name(), proto.oneof_decl(i),
 7348|      0|                 DescriptorPool::ErrorCollector::OTHER,
 7349|      0|                 "Synthetic oneofs must be after all other oneofs");
 7350|      0|      }
 7351|      2|    }
 7352|      2|  }
 7353|       |
 7354|     47|  if (first_synthetic == -1) {
  ------------------
  |  Branch (7354:7): [True: 47, False: 0]
  ------------------
 7355|     47|    message->real_oneof_decl_count_ = message->oneof_decl_count_;
 7356|     47|  } else {
 7357|      0|    message->real_oneof_decl_count_ = first_synthetic;
 7358|      0|  }
 7359|     47|}
_ZN6google8protobuf17DescriptorBuilder14CrossLinkFieldEPNS0_15FieldDescriptorERKNS0_20FieldDescriptorProtoE:
 7425|    235|                                       const FieldDescriptorProto& proto) {
 7426|    235|  if (proto.has_extendee()) {
  ------------------
  |  Branch (7426:7): [True: 1, False: 234]
  ------------------
 7427|      1|    Symbol extendee =
 7428|      1|        LookupSymbol(proto.extendee(), field->full_name(),
 7429|      1|                     DescriptorPool::PLACEHOLDER_EXTENDABLE_MESSAGE);
 7430|      1|    if (extendee.IsNull()) {
  ------------------
  |  Branch (7430:9): [True: 0, False: 1]
  ------------------
 7431|      0|      AddNotDefinedError(field->full_name(), proto,
 7432|      0|                         DescriptorPool::ErrorCollector::EXTENDEE,
 7433|      0|                         proto.extendee());
 7434|      0|      return;
 7435|      1|    } else if (extendee.type() != Symbol::MESSAGE) {
  ------------------
  |  Branch (7435:16): [True: 0, False: 1]
  ------------------
 7436|      0|      AddError(field->full_name(), proto,
 7437|      0|               DescriptorPool::ErrorCollector::EXTENDEE, [&] {
 7438|      0|                 return absl::StrCat("\"", proto.extendee(),
 7439|      0|                                     "\" is not a message type.");
 7440|      0|               });
 7441|      0|      return;
 7442|      0|    }
 7443|      1|    field->containing_type_ = extendee.descriptor();
 7444|       |
 7445|      1|    const Descriptor::ExtensionRange* extension_range =
 7446|      1|        field->containing_type()->FindExtensionRangeContainingNumber(
 7447|      1|            field->number());
 7448|       |
 7449|      1|    if (extension_range == nullptr) {
  ------------------
  |  Branch (7449:9): [True: 0, False: 1]
  ------------------
 7450|      0|      AddError(field->full_name(), proto,
 7451|      0|               DescriptorPool::ErrorCollector::NUMBER, [&] {
 7452|      0|                 return absl::Substitute(
 7453|      0|                     "\"$0\" does not declare $1 as an "
 7454|      0|                     "extension number.",
 7455|      0|                     field->containing_type()->full_name(), field->number());
 7456|      0|               });
 7457|      0|    }
 7458|      1|  }
 7459|       |
 7460|    235|  if (field->containing_oneof() != nullptr) {
  ------------------
  |  Branch (7460:7): [True: 5, False: 230]
  ------------------
 7461|      5|    if (field->label() != FieldDescriptor::LABEL_OPTIONAL) {
  ------------------
  |  Branch (7461:9): [True: 0, False: 5]
  ------------------
 7462|       |      // Note that this error will never happen when parsing .proto files.
 7463|       |      // It can only happen if you manually construct a FileDescriptorProto
 7464|       |      // that is incorrect.
 7465|      0|      AddError(field->full_name(), proto, DescriptorPool::ErrorCollector::NAME,
 7466|      0|               "Fields of oneofs must themselves have label LABEL_OPTIONAL.");
 7467|      0|    }
 7468|      5|  }
 7469|       |
 7470|    235|  if (proto.has_type_name()) {
  ------------------
  |  Branch (7470:7): [True: 98, False: 137]
  ------------------
 7471|       |    // Assume we are expecting a message type unless the proto contains some
 7472|       |    // evidence that it expects an enum type.  This only makes a difference if
 7473|       |    // we end up creating a placeholder.
 7474|     98|    bool expecting_enum = (proto.type() == FieldDescriptorProto::TYPE_ENUM) ||
  ------------------
  |  Branch (7474:27): [True: 32, False: 66]
  ------------------
 7475|     66|                          proto.has_default_value();
  ------------------
  |  Branch (7475:27): [True: 0, False: 66]
  ------------------
 7476|       |
 7477|       |    // In case of weak fields we force building the dependency. We need to know
 7478|       |    // if the type exist or not. If it doesn't exist we substitute Empty which
 7479|       |    // should only be done if the type can't be found in the generated pool.
 7480|       |    // TODO Ideally we should query the database directly to check
 7481|       |    // if weak fields exist or not so that we don't need to force building
 7482|       |    // weak dependencies. However the name lookup rules for symbols are
 7483|       |    // somewhat complicated, so I defer it too another CL.
 7484|     98|    bool is_weak = !pool_->enforce_weak_ && proto.options().weak();
  ------------------
  |  Branch (7484:20): [True: 98, False: 0]
  |  Branch (7484:45): [True: 0, False: 98]
  ------------------
 7485|     98|    bool is_lazy = pool_->lazily_build_dependencies_ && !is_weak;
  ------------------
  |  Branch (7485:20): [True: 98, False: 0]
  |  Branch (7485:57): [True: 98, False: 0]
  ------------------
 7486|       |
 7487|     98|    Symbol type =
 7488|     98|        LookupSymbol(proto.type_name(), field->full_name(),
 7489|     98|                     expecting_enum ? DescriptorPool::PLACEHOLDER_ENUM
  ------------------
  |  Branch (7489:22): [True: 32, False: 66]
  ------------------
 7490|     98|                                    : DescriptorPool::PLACEHOLDER_MESSAGE,
 7491|     98|                     LOOKUP_TYPES, !is_lazy);
 7492|       |
 7493|     98|    if (type.IsNull()) {
  ------------------
  |  Branch (7493:9): [True: 0, False: 98]
  ------------------
 7494|      0|      if (is_lazy) {
  ------------------
  |  Branch (7494:11): [True: 0, False: 0]
  ------------------
 7495|      0|        ABSL_CHECK(field->type_ == FieldDescriptor::TYPE_MESSAGE ||
  ------------------
  |  |   41|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7496|      0|                   field->type_ == FieldDescriptor::TYPE_GROUP ||
 7497|      0|                   field->type_ == FieldDescriptor::TYPE_ENUM)
 7498|      0|            << proto;
 7499|       |        // Save the symbol names for later for lookup, and allocate the once
 7500|       |        // object needed for the accessors.
 7501|      0|        const std::string& name = proto.type_name();
 7502|       |
 7503|      0|        int name_sizes = static_cast<int>(name.size() + 1 +
 7504|      0|                                          proto.default_value().size() + 1);
 7505|       |
 7506|      0|        field->type_once_ = ::new (tables_->AllocateBytes(
 7507|      0|            static_cast<int>(sizeof(absl::once_flag)) + name_sizes))
 7508|      0|            absl::once_flag{};
 7509|      0|        char* names = reinterpret_cast<char*>(field->type_once_ + 1);
 7510|       |
 7511|      0|        memcpy(names, name.c_str(), name.size() + 1);
 7512|      0|        memcpy(names + name.size() + 1, proto.default_value().c_str(),
 7513|      0|               proto.default_value().size() + 1);
 7514|       |
 7515|       |        // AddFieldByNumber and AddExtension are done later in this function,
 7516|       |        // and can/must be done if the field type was not found. The related
 7517|       |        // error checking is not necessary when in lazily_build_dependencies_
 7518|       |        // mode, and can't be done without building the type's descriptor,
 7519|       |        // which we don't want to do.
 7520|      0|        file_tables_->AddFieldByNumber(field);
 7521|      0|        if (field->is_extension()) {
  ------------------
  |  Branch (7521:13): [True: 0, False: 0]
  ------------------
 7522|      0|          tables_->AddExtension(field);
 7523|      0|        }
 7524|      0|        return;
 7525|      0|      } else {
 7526|       |        // If the type is a weak type, we change the type to a google.protobuf.Empty
 7527|       |        // field.
 7528|      0|        if (is_weak) {
  ------------------
  |  Branch (7528:13): [True: 0, False: 0]
  ------------------
 7529|      0|          type = FindSymbol(kNonLinkedWeakMessageReplacementName);
 7530|      0|        }
 7531|      0|        if (type.IsNull()) {
  ------------------
  |  Branch (7531:13): [True: 0, False: 0]
  ------------------
 7532|      0|          AddNotDefinedError(field->full_name(), proto,
 7533|      0|                             DescriptorPool::ErrorCollector::TYPE,
 7534|      0|                             proto.type_name());
 7535|      0|          return;
 7536|      0|        }
 7537|      0|      }
 7538|      0|    }
 7539|       |
 7540|     98|    if (!proto.has_type()) {
  ------------------
  |  Branch (7540:9): [True: 0, False: 98]
  ------------------
 7541|       |      // Choose field type based on symbol.
 7542|      0|      if (type.type() == Symbol::MESSAGE) {
  ------------------
  |  Branch (7542:11): [True: 0, False: 0]
  ------------------
 7543|      0|        field->type_ = FieldDescriptor::TYPE_MESSAGE;
 7544|      0|      } else if (type.type() == Symbol::ENUM) {
  ------------------
  |  Branch (7544:18): [True: 0, False: 0]
  ------------------
 7545|      0|        field->type_ = FieldDescriptor::TYPE_ENUM;
 7546|      0|      } else {
 7547|      0|        AddError(field->full_name(), proto,
 7548|      0|                 DescriptorPool::ErrorCollector::TYPE, [&] {
 7549|      0|                   return absl::StrCat("\"", proto.type_name(),
 7550|      0|                                       "\" is not a type.");
 7551|      0|                 });
 7552|      0|        return;
 7553|      0|      }
 7554|      0|    }
 7555|       |
 7556|     98|    if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) {
  ------------------
  |  Branch (7556:9): [True: 66, False: 32]
  ------------------
 7557|     66|      field->type_descriptor_.message_type = type.descriptor();
 7558|     66|      if (field->type_descriptor_.message_type == nullptr) {
  ------------------
  |  Branch (7558:11): [True: 0, False: 66]
  ------------------
 7559|      0|        AddError(field->full_name(), proto,
 7560|      0|                 DescriptorPool::ErrorCollector::TYPE, [&] {
 7561|      0|                   return absl::StrCat("\"", proto.type_name(),
 7562|      0|                                       "\" is not a message type.");
 7563|      0|                 });
 7564|      0|        return;
 7565|      0|      }
 7566|       |
 7567|     66|      if (field->has_default_value()) {
  ------------------
  |  Branch (7567:11): [True: 0, False: 66]
  ------------------
 7568|      0|        AddError(field->full_name(), proto,
 7569|      0|                 DescriptorPool::ErrorCollector::DEFAULT_VALUE,
 7570|      0|                 "Messages can't have default values.");
 7571|      0|      }
 7572|     66|    } else if (field->cpp_type() == FieldDescriptor::CPPTYPE_ENUM) {
  ------------------
  |  Branch (7572:16): [True: 32, False: 0]
  ------------------
 7573|     32|      field->type_descriptor_.enum_type = type.enum_descriptor();
 7574|     32|      if (field->type_descriptor_.enum_type == nullptr) {
  ------------------
  |  Branch (7574:11): [True: 0, False: 32]
  ------------------
 7575|      0|        AddError(field->full_name(), proto,
 7576|      0|                 DescriptorPool::ErrorCollector::TYPE, [&] {
 7577|      0|                   return absl::StrCat("\"", proto.type_name(),
 7578|      0|                                       "\" is not an enum type.");
 7579|      0|                 });
 7580|      0|        return;
 7581|      0|      }
 7582|       |
 7583|     32|      if (field->enum_type()->is_placeholder_) {
  ------------------
  |  Branch (7583:11): [True: 0, False: 32]
  ------------------
 7584|       |        // We can't look up default values for placeholder types.  We'll have
 7585|       |        // to just drop them.
 7586|      0|        field->has_default_value_ = false;
 7587|      0|      }
 7588|       |
 7589|     32|      if (field->has_default_value()) {
  ------------------
  |  Branch (7589:11): [True: 5, False: 27]
  ------------------
 7590|       |        // Ensure that the default value is an identifier. Parser cannot always
 7591|       |        // verify this because it does not have complete type information.
 7592|       |        // N.B. that this check yields better error messages but is not
 7593|       |        // necessary for correctness (an enum symbol must be a valid identifier
 7594|       |        // anyway), only for better errors.
 7595|      5|        if (!io::Tokenizer::IsIdentifier(proto.default_value())) {
  ------------------
  |  Branch (7595:13): [True: 0, False: 5]
  ------------------
 7596|      0|          AddError(field->full_name(), proto,
 7597|      0|                   DescriptorPool::ErrorCollector::DEFAULT_VALUE,
 7598|      0|                   "Default value for an enum field must be an identifier.");
 7599|      5|        } else {
 7600|       |          // We can't just use field->enum_type()->FindValueByName() here
 7601|       |          // because that locks the pool's mutex, which we have already locked
 7602|       |          // at this point.
 7603|      5|          const EnumValueDescriptor* default_value =
 7604|      5|              LookupSymbolNoPlaceholder(proto.default_value(),
 7605|      5|                                        field->enum_type()->full_name())
 7606|      5|                  .enum_value_descriptor();
 7607|       |
 7608|      5|          if (default_value != nullptr &&
  ------------------
  |  Branch (7608:15): [True: 5, False: 0]
  ------------------
 7609|      5|              default_value->type() == field->enum_type()) {
  ------------------
  |  Branch (7609:15): [True: 5, False: 0]
  ------------------
 7610|      5|            field->default_value_enum_ = default_value;
 7611|      5|          } else {
 7612|      0|            AddError(field->full_name(), proto,
 7613|      0|                     DescriptorPool::ErrorCollector::DEFAULT_VALUE, [&] {
 7614|      0|                       return absl::StrCat("Enum type \"",
 7615|      0|                                           field->enum_type()->full_name(),
 7616|      0|                                           "\" has no value named \"",
 7617|      0|                                           proto.default_value(), "\".");
 7618|      0|                     });
 7619|      0|          }
 7620|      5|        }
 7621|     27|      } else if (field->enum_type()->value_count() > 0) {
  ------------------
  |  Branch (7621:18): [True: 27, False: 0]
  ------------------
 7622|       |        // All enums must have at least one value, or we would have reported
 7623|       |        // an error elsewhere.  We use the first defined value as the default
 7624|       |        // if a default is not explicitly defined.
 7625|     27|        field->default_value_enum_ = field->enum_type()->value(0);
 7626|     27|      }
 7627|     32|    } else {
 7628|      0|      AddError(field->full_name(), proto, DescriptorPool::ErrorCollector::TYPE,
 7629|      0|               "Field with primitive type has type_name.");
 7630|      0|    }
 7631|    137|  } else {
 7632|    137|    if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE ||
  ------------------
  |  Branch (7632:9): [True: 0, False: 137]
  ------------------
 7633|    137|        field->cpp_type() == FieldDescriptor::CPPTYPE_ENUM) {
  ------------------
  |  Branch (7633:9): [True: 0, False: 137]
  ------------------
 7634|      0|      AddError(field->full_name(), proto, DescriptorPool::ErrorCollector::TYPE,
 7635|      0|               "Field with message or enum type missing type_name.");
 7636|      0|    }
 7637|    137|  }
 7638|       |
 7639|       |  // Add the field to the fields-by-number table.
 7640|       |  // Note:  We have to do this *after* cross-linking because extensions do not
 7641|       |  // know their containing type until now. If we're in
 7642|       |  // lazily_build_dependencies_ mode, we're guaranteed there's no errors, so no
 7643|       |  // risk to calling containing_type() or other accessors that will build
 7644|       |  // dependencies.
 7645|    235|  if (!file_tables_->AddFieldByNumber(field)) {
  ------------------
  |  Branch (7645:7): [True: 0, False: 235]
  ------------------
 7646|      0|    const FieldDescriptor* conflicting_field = file_tables_->FindFieldByNumber(
 7647|      0|        field->containing_type(), field->number());
 7648|      0|    const absl::string_view containing_type_name =
 7649|      0|        field->containing_type() == nullptr
  ------------------
  |  Branch (7649:9): [True: 0, False: 0]
  ------------------
 7650|      0|            ? absl::string_view("unknown")
 7651|      0|            : field->containing_type()->full_name();
 7652|      0|    if (field->is_extension()) {
  ------------------
  |  Branch (7652:9): [True: 0, False: 0]
  ------------------
 7653|      0|      AddError(field->full_name(), proto,
 7654|      0|               DescriptorPool::ErrorCollector::NUMBER, [&] {
 7655|      0|                 return absl::Substitute(
 7656|      0|                     "Extension number $0 has already been used "
 7657|      0|                     "in \"$1\" by extension \"$2\".",
 7658|      0|                     field->number(), containing_type_name,
 7659|      0|                     conflicting_field->full_name());
 7660|      0|               });
 7661|      0|    } else {
 7662|      0|      AddError(field->full_name(), proto,
 7663|      0|               DescriptorPool::ErrorCollector::NUMBER, [&] {
 7664|      0|                 return absl::Substitute(
 7665|      0|                     "Field number $0 has already been used in "
 7666|      0|                     "\"$1\" by field \"$2\".",
 7667|      0|                     field->number(), containing_type_name,
 7668|      0|                     conflicting_field->name());
 7669|      0|               });
 7670|      0|    }
 7671|    235|  } else {
 7672|    235|    if (field->is_extension()) {
  ------------------
  |  Branch (7672:9): [True: 1, False: 234]
  ------------------
 7673|      1|      if (!tables_->AddExtension(field)) {
  ------------------
  |  Branch (7673:11): [True: 0, False: 1]
  ------------------
 7674|      0|        auto make_error = [&] {
 7675|      0|          const FieldDescriptor* conflicting_field =
 7676|      0|              tables_->FindExtension(field->containing_type(), field->number());
 7677|      0|          const absl::string_view containing_type_name =
 7678|      0|              field->containing_type() == nullptr
 7679|      0|                  ? absl::string_view("unknown")
 7680|      0|                  : field->containing_type()->full_name();
 7681|      0|          return absl::Substitute(
 7682|      0|              "Extension number $0 has already been used in \"$1\" by "
 7683|      0|              "extension "
 7684|      0|              "\"$2\" defined in $3.",
 7685|      0|              field->number(), containing_type_name,
 7686|      0|              conflicting_field->full_name(),
 7687|      0|              conflicting_field->file()->name());
 7688|      0|        };
 7689|       |        // Conflicting extension numbers should be an error. However, before
 7690|       |        // turning this into an error we need to fix all existing broken
 7691|       |        // protos first.
 7692|       |        // TODO: Change this to an error.
 7693|      0|        AddWarning(field->full_name(), proto,
 7694|      0|                   DescriptorPool::ErrorCollector::NUMBER, make_error);
 7695|      0|      }
 7696|      1|    }
 7697|    235|  }
 7698|    235|}
_ZN6google8protobuf17DescriptorBuilder17OptionInterpreterC2EPS1_:
 8612|      4|    : builder_(builder) {
 8613|      4|  ABSL_CHECK(builder_);
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8614|      4|}
_ZN6google8protobuf17DescriptorBuilder17OptionInterpreterD2Ev:
 8616|      4|DescriptorBuilder::OptionInterpreter::~OptionInterpreter() = default;
_ZNK6google8protobuf15FieldDescriptor12message_typeEv:
 9676|  17.6k|const Descriptor* FieldDescriptor::message_type() const {
 9677|  17.6k|  if (type_ == TYPE_MESSAGE || type_ == TYPE_GROUP) {
  ------------------
  |  Branch (9677:7): [True: 17.6k, False: 0]
  |  Branch (9677:32): [True: 0, False: 0]
  ------------------
 9678|  17.6k|    if (type_once_) {
  ------------------
  |  Branch (9678:9): [True: 0, False: 17.6k]
  ------------------
 9679|      0|      absl::call_once(*type_once_, FieldDescriptor::TypeOnceInit, this);
 9680|      0|    }
 9681|  17.6k|    return type_descriptor_.message_type;
 9682|  17.6k|  }
 9683|      0|  return nullptr;
 9684|  17.6k|}
_ZNK6google8protobuf15FieldDescriptor9enum_typeEv:
 9686|     96|const EnumDescriptor* FieldDescriptor::enum_type() const {
 9687|     96|  if (type_ == TYPE_ENUM) {
  ------------------
  |  Branch (9687:7): [True: 96, False: 0]
  ------------------
 9688|     96|    if (type_once_) {
  ------------------
  |  Branch (9688:9): [True: 0, False: 96]
  ------------------
 9689|      0|      absl::call_once(*type_once_, FieldDescriptor::TypeOnceInit, this);
 9690|      0|    }
 9691|     96|    return type_descriptor_.enum_type;
 9692|     96|  }
 9693|      0|  return nullptr;
 9694|     96|}
_ZN6google8protobuf8internal17ParseNoReflectionEN4absl12lts_2024011611string_viewERNS0_11MessageLiteE:
 9780|     24|bool ParseNoReflection(absl::string_view from, google::protobuf::MessageLite& to) {
 9781|     24|  auto cleanup = DisableTracking();
 9782|       |
 9783|     24|  to.Clear();
 9784|     24|  const char* ptr;
 9785|     24|  internal::ParseContext ctx(io::CodedInputStream::GetDefaultRecursionLimit(),
 9786|     24|                             false, &ptr, from);
 9787|     24|  ptr = to._InternalParse(ptr, &ctx);
 9788|     24|  if (ptr == nullptr || !ctx.EndedAtLimit()) return false;
  ------------------
  |  Branch (9788:7): [True: 0, False: 24]
  |  Branch (9788:25): [True: 0, False: 24]
  ------------------
 9789|     24|  return to.IsInitializedWithErrors();
 9790|     24|}
_ZN6google8protobuf8internal3cpp23IsLazilyInitializedFileEN4absl12lts_2024011611string_viewE:
 9846|      4|bool IsLazilyInitializedFile(absl::string_view filename) {
 9847|      4|  if (filename == "third_party/protobuf/cpp_features.proto" ||
  ------------------
  |  Branch (9847:7): [True: 0, False: 4]
  |  Branch (9847:7): [True: 1, False: 3]
  ------------------
 9848|      4|      filename == "google/protobuf/cpp_features.proto") {
  ------------------
  |  Branch (9848:7): [True: 1, False: 3]
  ------------------
 9849|      1|    return true;
 9850|      1|  }
 9851|      3|  return filename == "net/proto2/proto/descriptor.proto" ||
  ------------------
  |  Branch (9851:10): [True: 0, False: 3]
  ------------------
 9852|      3|         filename == "google/protobuf/descriptor.proto";
  ------------------
  |  Branch (9852:10): [True: 1, False: 2]
  ------------------
 9853|      4|}
_ZNK6google8protobuf14FileDescriptor7editionEv:
 9860|    986|Edition FileDescriptor::edition() const { return edition_; }
_ZNK6google8protobuf14DescriptorPool6Tables10FindSymbolEN4absl12lts_2024011611string_viewE:
 1693|    111|inline Symbol DescriptorPool::Tables::FindSymbol(absl::string_view key) const {
 1694|    111|  auto it = symbols_by_name_.find(FullNameQuery{key});
 1695|    111|  return it == symbols_by_name_.end() ? Symbol() : *it;
  ------------------
  |  Branch (1695:10): [True: 6, False: 105]
  ------------------
 1696|    111|}
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_118SymbolByFullNameEqclINS0_6SymbolENS1_13FullNameQueryEEEbRKT_RKT0_:
  958|    106|  bool operator()(const T& a, const U& b) const {
  959|    106|    return a.full_name() == b.full_name();
  960|    106|  }
_ZNK6google8protobuf6Symbol9full_nameEv:
  707|  1.59k|  absl::string_view full_name() const {
  708|  1.59k|    switch (type()) {
  709|    221|      case MESSAGE:
  ------------------
  |  Branch (709:7): [True: 221, False: 1.37k]
  ------------------
  710|    221|        return descriptor()->full_name();
  711|    820|      case FIELD:
  ------------------
  |  Branch (711:7): [True: 820, False: 774]
  ------------------
  712|    820|        return field_descriptor()->full_name();
  713|      4|      case ONEOF:
  ------------------
  |  Branch (713:7): [True: 4, False: 1.59k]
  ------------------
  714|      4|        return oneof_descriptor()->full_name();
  715|     93|      case ENUM:
  ------------------
  |  Branch (715:7): [True: 93, False: 1.50k]
  ------------------
  716|     93|        return enum_descriptor()->full_name();
  717|    432|      case ENUM_VALUE:
  ------------------
  |  Branch (717:7): [True: 432, False: 1.16k]
  ------------------
  718|    432|        return enum_value_descriptor()->full_name();
  719|      0|      case SERVICE:
  ------------------
  |  Branch (719:7): [True: 0, False: 1.59k]
  ------------------
  720|      0|        return service_descriptor()->full_name();
  721|      0|      case METHOD:
  ------------------
  |  Branch (721:7): [True: 0, False: 1.59k]
  ------------------
  722|      0|        return method_descriptor()->full_name();
  723|     13|      case FULL_PACKAGE:
  ------------------
  |  Branch (723:7): [True: 13, False: 1.58k]
  ------------------
  724|     13|        return file_descriptor()->package();
  725|     11|      case SUB_PACKAGE:
  ------------------
  |  Branch (725:7): [True: 11, False: 1.58k]
  ------------------
  726|     11|        return absl::string_view(sub_package_file_descriptor()->file->package())
  727|     11|            .substr(0, sub_package_file_descriptor()->name_size);
  728|      0|      default:
  ------------------
  |  Branch (728:7): [True: 0, False: 1.59k]
  ------------------
  729|      0|        ABSL_CHECK(false);
  ------------------
  |  |   41|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  730|  1.59k|    }
  731|      0|    return "";
  732|  1.59k|  }
_ZNK6google8protobuf6Symbol15file_descriptorEv:
  622|     13|  const TYPE* FIELD() const {                                                  \
  623|     13|    return type() == TYPE_CONSTANT ? static_cast<const TYPE*>(ptr_) : nullptr; \
  ------------------
  |  Branch (623:12): [True: 13, False: 0]
  ------------------
  624|     13|  }
_ZNK6google8protobuf6Symbol27sub_package_file_descriptorEv:
  622|     22|  const TYPE* FIELD() const {                                                  \
  623|     22|    return type() == TYPE_CONSTANT ? static_cast<const TYPE*>(ptr_) : nullptr; \
  ------------------
  |  Branch (623:12): [True: 22, False: 0]
  ------------------
  624|     22|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_113FullNameQuery9full_nameEv:
  944|    217|  absl::string_view full_name() const { return query; }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashclINS1_13FullNameQueryEEEmRKT_:
  950|    111|  size_t operator()(const T& s) const {
  951|    111|    return absl::HashOf(s.full_name());
  952|    111|  }
_ZNK6google8protobuf6Symbol6IsNullEv:
  673|    522|  bool IsNull() const { return type() == NULL_SYMBOL; }
_ZN6google8protobuf14DescriptorPool18DeferredValidationC2EPKS1_:
 1337|      4|      : pool_(pool), error_collector_(pool->default_error_collector_) {}
_ZN6google8protobuf6SymbolC2Ev:
  607|    386|  Symbol() {
  608|    386|    static constexpr internal::SymbolBase null_symbol{};
  609|    386|    static_assert(null_symbol.symbol_type_ == NULL_SYMBOL, "");
  610|       |    // Initialize with a sentinel to make sure `ptr_` is never null.
  611|    386|    ptr_ = &null_symbol;
  612|    386|  }
_ZN6google8protobuf14DescriptorPool18DeferredValidation8ValidateEv:
 1373|      4|  bool Validate() {
 1374|      4|    if (lifetimes_info_map_.empty()) return true;
  ------------------
  |  Branch (1374:9): [True: 4, False: 0]
  ------------------
 1375|       |
 1376|      0|    static absl::string_view feature_set_name = "google.protobuf.FeatureSet";
 1377|      0|    const Descriptor* feature_set =
 1378|      0|        pool_->FindMessageTypeByName(feature_set_name);
 1379|       |
 1380|      0|    bool has_errors = false;
 1381|      0|    for (const auto& it : lifetimes_info_map_) {
  ------------------
  |  Branch (1381:25): [True: 0, False: 0]
  ------------------
 1382|      0|      const FileDescriptor* file = it.first;
 1383|       |
 1384|      0|      for (const auto& info : it.second) {
  ------------------
  |  Branch (1384:29): [True: 0, False: 0]
  ------------------
 1385|      0|        auto results = FeatureResolver::ValidateFeatureLifetimes(
 1386|      0|            file->edition(), *info.proto_features, feature_set);
 1387|      0|        for (const auto& error : results.errors) {
  ------------------
  |  Branch (1387:32): [True: 0, False: 0]
  ------------------
 1388|      0|          has_errors = true;
 1389|      0|          if (error_collector_ == nullptr) {
  ------------------
  |  Branch (1389:15): [True: 0, False: 0]
  ------------------
 1390|      0|            ABSL_LOG(ERROR)
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1391|      0|                << info.filename << " " << info.full_name << ": " << error;
 1392|      0|          } else {
 1393|      0|            error_collector_->RecordError(
 1394|      0|                info.filename, info.full_name, info.proto,
 1395|      0|                DescriptorPool::ErrorCollector::NAME, error);
 1396|      0|          }
 1397|      0|        }
 1398|      0|        if (pool_->direct_input_files_.find(file->name()) !=
  ------------------
  |  Branch (1398:13): [True: 0, False: 0]
  ------------------
 1399|      0|            pool_->direct_input_files_.end()) {
 1400|      0|          for (const auto& warning : results.warnings) {
  ------------------
  |  Branch (1400:36): [True: 0, False: 0]
  ------------------
 1401|      0|            if (error_collector_ == nullptr) {
  ------------------
  |  Branch (1401:17): [True: 0, False: 0]
  ------------------
 1402|      0|              ABSL_LOG(WARNING)
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  168|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|      0|  ::absl::log_internal::LogMessage(       \
  |  |  |  |  |  |   50|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::WarningTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1403|      0|                  << info.filename << " " << info.full_name << ": " << warning;
 1404|      0|            } else {
 1405|      0|              error_collector_->RecordWarning(
 1406|      0|                  info.filename, info.full_name, info.proto,
 1407|      0|                  DescriptorPool::ErrorCollector::NAME, warning);
 1408|      0|            }
 1409|      0|          }
 1410|      0|        }
 1411|      0|      }
 1412|      0|    }
 1413|      0|    lifetimes_info_map_.clear();
 1414|      0|    return !has_errors;
 1415|      0|  }
_ZN6google8protobuf14DescriptorPool18DeferredValidationD2Ev:
 1344|      4|  ~DeferredValidation() {
 1345|      8|    ABSL_CHECK(lifetimes_info_map_.empty())
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      4|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      4|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1346|      8|        << "DeferredValidation destroyed with unvalidated features";
 1347|      4|  }
_ZNK6google8protobuf6Symbol16field_descriptorEv:
  622|  1.54k|  const TYPE* FIELD() const {                                                  \
  623|  1.54k|    return type() == TYPE_CONSTANT ? static_cast<const TYPE*>(ptr_) : nullptr; \
  ------------------
  |  Branch (623:12): [True: 1.54k, False: 0]
  ------------------
  624|  1.54k|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_19RoundUpToILi8EEEmm:
  162|  1.03k|constexpr size_t RoundUpTo(size_t n) {
  163|  1.03k|  static_assert((R & (R - 1)) == 0, "Must be power of two");
  164|  1.03k|  return (n + (R - 1)) & ~(R - 1);
  165|  1.03k|}
_ZNK6google8protobuf14DescriptorPool6Tables8FindFileEN4absl12lts_2024011611string_viewE:
 1745|     13|    absl::string_view key) const {
 1746|     13|  auto it = files_by_name_.find(key);
 1747|     13|  if (it == files_by_name_.end()) return nullptr;
  ------------------
  |  Branch (1747:7): [True: 8, False: 5]
  ------------------
 1748|      5|  return *it;
 1749|     13|}
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_119DescriptorsByNameEqINS0_14FileDescriptorEEclEPKS3_N4absl12lts_2024011611string_viewE:
 1011|      5|  bool operator()(const DescriptorT* lhs, absl::string_view rhs) const {
 1012|      5|    return lhs->name() == rhs;
 1013|      5|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS0_14FileDescriptorEEclEN4absl12lts_2024011611string_viewE:
  994|     13|  size_t operator()(absl::string_view name) const { return absl::HashOf(name); }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117GeneratedDatabaseEv:
 2186|      8|EncodedDescriptorDatabase* GeneratedDatabase() {
 2187|      8|  static auto generated_database =
 2188|      8|      internal::OnShutdownDelete(new EncodedDescriptorDatabase());
 2189|      8|  return generated_database;
 2190|      8|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_116NewGeneratedPoolEv:
 2192|      2|DescriptorPool* NewGeneratedPool() {
 2193|      2|  auto generated_pool = new DescriptorPool(GeneratedDatabase());
 2194|      2|  generated_pool->InternalSetLazilyBuildDependencies();
 2195|      2|  return generated_pool;
 2196|      2|}
_ZNK6google8protobuf6Symbol7GetFileEv:
  682|    454|  const FileDescriptor* GetFile() const {
  683|    454|    switch (type()) {
  684|    173|      case MESSAGE:
  ------------------
  |  Branch (684:7): [True: 173, False: 281]
  ------------------
  685|    173|        return descriptor()->file();
  686|      1|      case FIELD:
  ------------------
  |  Branch (686:7): [True: 1, False: 453]
  ------------------
  687|      1|        return field_descriptor()->file();
  688|      0|      case ONEOF:
  ------------------
  |  Branch (688:7): [True: 0, False: 454]
  ------------------
  689|      0|        return oneof_descriptor()->containing_type()->file();
  690|     50|      case ENUM:
  ------------------
  |  Branch (690:7): [True: 50, False: 404]
  ------------------
  691|     50|        return enum_descriptor()->file();
  692|    230|      case ENUM_VALUE:
  ------------------
  |  Branch (692:7): [True: 230, False: 224]
  ------------------
  693|    230|        return enum_value_descriptor()->type()->file();
  694|      0|      case SERVICE:
  ------------------
  |  Branch (694:7): [True: 0, False: 454]
  ------------------
  695|      0|        return service_descriptor()->file();
  696|      0|      case METHOD:
  ------------------
  |  Branch (696:7): [True: 0, False: 454]
  ------------------
  697|      0|        return method_descriptor()->service()->file();
  698|      0|      case FULL_PACKAGE:
  ------------------
  |  Branch (698:7): [True: 0, False: 454]
  ------------------
  699|      0|        return file_descriptor();
  700|      0|      case SUB_PACKAGE:
  ------------------
  |  Branch (700:7): [True: 0, False: 454]
  ------------------
  701|      0|        return sub_package_file_descriptor()->file;
  702|      0|      default:
  ------------------
  |  Branch (702:7): [True: 0, False: 454]
  ------------------
  703|      0|        return nullptr;
  704|    454|    }
  705|    454|  }
_ZNK6google8protobuf6Symbol10descriptorEv:
  622|    713|  const TYPE* FIELD() const {                                                  \
  623|    713|    return type() == TYPE_CONSTANT ? static_cast<const TYPE*>(ptr_) : nullptr; \
  ------------------
  |  Branch (623:12): [True: 713, False: 0]
  ------------------
  624|    713|  }
_ZNK6google8protobuf6Symbol16oneof_descriptorEv:
  622|     22|  const TYPE* FIELD() const {                                                  \
  623|     22|    return type() == TYPE_CONSTANT ? static_cast<const TYPE*>(ptr_) : nullptr; \
  ------------------
  |  Branch (623:12): [True: 22, False: 0]
  ------------------
  624|     22|  }
_ZNK6google8protobuf6Symbol15enum_descriptorEv:
  622|    269|  const TYPE* FIELD() const {                                                  \
  623|    269|    return type() == TYPE_CONSTANT ? static_cast<const TYPE*>(ptr_) : nullptr; \
  ------------------
  |  Branch (623:12): [True: 269, False: 0]
  ------------------
  624|    269|  }
_ZNK6google8protobuf6Symbol21enum_value_descriptorEv:
  660|  2.18k|  const EnumValueDescriptor* enum_value_descriptor() const {
  661|  2.18k|    return type() == ENUM_VALUE
  ------------------
  |  Branch (661:12): [True: 1.43k, False: 748]
  ------------------
  662|  2.18k|               ? static_cast<const EnumValueDescriptor*>(
  663|  1.43k|                     static_cast<const internal::SymbolBaseN<0>*>(ptr_))
  664|  2.18k|           : type() == ENUM_VALUE_OTHER_PARENT
  ------------------
  |  Branch (664:14): [True: 748, False: 0]
  ------------------
  665|    748|               ? static_cast<const EnumValueDescriptor*>(
  666|    748|                     static_cast<const internal::SymbolBaseN<1>*>(ptr_))
  667|    748|               : nullptr;
  668|  2.18k|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_120ObjectToParentNumberEPKNS0_15FieldDescriptorE:
 1031|    218|std::pair<const void*, int> ObjectToParentNumber(const FieldDescriptor* field) {
 1032|    218|  return {field->containing_type(), field->number()};
 1033|    218|}
_ZNK6google8protobuf6Symbol15parent_name_keyEv:
  734|  1.66k|  std::pair<const void*, absl::string_view> parent_name_key() const {
  735|  1.66k|    const auto or_file = [&](const void* p) { return p ? p : GetFile(); };
  736|  1.66k|    switch (type()) {
  737|    126|      case MESSAGE:
  ------------------
  |  Branch (737:7): [True: 126, False: 1.54k]
  ------------------
  738|    126|        return {or_file(descriptor()->containing_type()), descriptor()->name()};
  739|    727|      case FIELD: {
  ------------------
  |  Branch (739:7): [True: 727, False: 941]
  ------------------
  740|    727|        auto* field = field_descriptor();
  741|    727|        return {or_file(field->is_extension() ? field->extension_scope()
  ------------------
  |  Branch (741:25): [True: 1, False: 726]
  ------------------
  742|    727|                                              : field->containing_type()),
  743|    727|                field->name()};
  744|      0|      }
  745|      9|      case ONEOF:
  ------------------
  |  Branch (745:7): [True: 9, False: 1.65k]
  ------------------
  746|      9|        return {oneof_descriptor()->containing_type(),
  747|      9|                oneof_descriptor()->name()};
  748|     47|      case ENUM:
  ------------------
  |  Branch (748:7): [True: 47, False: 1.62k]
  ------------------
  749|     47|        return {or_file(enum_descriptor()->containing_type()),
  750|     47|                enum_descriptor()->name()};
  751|    385|      case ENUM_VALUE:
  ------------------
  |  Branch (751:7): [True: 385, False: 1.28k]
  ------------------
  752|    385|        return {or_file(enum_value_descriptor()->type()->containing_type()),
  753|    385|                enum_value_descriptor()->name()};
  754|    374|      case ENUM_VALUE_OTHER_PARENT:
  ------------------
  |  Branch (754:7): [True: 374, False: 1.29k]
  ------------------
  755|    374|        return {enum_value_descriptor()->type(),
  756|    374|                enum_value_descriptor()->name()};
  757|      0|      case SERVICE:
  ------------------
  |  Branch (757:7): [True: 0, False: 1.66k]
  ------------------
  758|      0|        return {GetFile(), service_descriptor()->name()};
  759|      0|      case METHOD:
  ------------------
  |  Branch (759:7): [True: 0, False: 1.66k]
  ------------------
  760|      0|        return {method_descriptor()->service(), method_descriptor()->name()};
  761|      0|      default:
  ------------------
  |  Branch (761:7): [True: 0, False: 1.66k]
  ------------------
  762|      0|        ABSL_CHECK(false);
  ------------------
  |  |   41|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  763|  1.66k|    }
  764|      0|    return {};
  765|  1.66k|  }
_ZZNK6google8protobuf6Symbol15parent_name_keyEvENKUlPKvE_clES3_:
  735|  1.28k|    const auto or_file = [&](const void* p) { return p ? p : GetFile(); };
  ------------------
  |  Branch (735:54): [True: 935, False: 350]
  ------------------
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_120ObjectToParentNumberEPKNS0_19EnumValueDescriptorE:
 1035|    221|    const EnumValueDescriptor* enum_value) {
 1036|    221|  return {enum_value->type(), enum_value->number()};
 1037|    221|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayIS9_EEPT_i:
  400|    508|  U* AllocateArray(int array_size) {
  401|    508|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|    508|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|    508|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|    508|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|  1.01k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    508|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|  1.01k|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|  1.01k|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 508, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|    508|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 508]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|  1.01k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 508, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 508]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 508]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|  1.01k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|  1.01k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|    508|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|    508|    int& used = used_.template Get<TypeToUse>();
  409|    508|    U* res = reinterpret_cast<U*>(data + used);
  410|    508|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [Folded, False: 508]
  ------------------
  411|    508|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|    508|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|    508|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|    508|  while (                                                                      \
  |  |  |  |  |  |   62|    508|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 508]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|    508|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|    508|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|    508|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|    508|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|    508|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|    508|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|    508|    return res;
  413|    508|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13has_allocatedEv:
  541|  2.47k|  bool has_allocated() const {
  542|  2.47k|    return pointers_.template Get<char>() != nullptr;
  543|  2.47k|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetIcEERKPT_v:
  243|  2.47k|  const ValueT<K>& Get() const {
  244|  2.47k|    return static_cast<const Base<K>&>(payload_).value;
  245|  2.47k|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISA_EERPT_v:
  238|    512|  ValueT<K>& Get() {
  239|    512|    return static_cast<Base<K>&>(payload_).value;
  240|    512|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISA_EERiv:
  238|  1.51k|  ValueT<K>& Get() {
  239|  1.51k|    return static_cast<Base<K>&>(payload_).value;
  240|  1.51k|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_14FoldESt16initializer_listINS1_15ExpressionEaterEE:
  159|    528|void Fold(std::initializer_list<ExpressionEater>) {}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEOT_:
  157|  1.13k|  ExpressionEater(T&&) {}  // NOLINT
_ZN6google8protobuf14DescriptorPool18DeferredValidation11CreateProtoEv:
 1368|      4|  FileDescriptorProto& CreateProto() {
 1369|      4|    owned_protos_.push_back(Arena::Create<FileDescriptorProto>(&arena_));
 1370|      4|    return *owned_protos_.back();
 1371|      4|  }
descriptor.cc:_ZZNK6google8protobuf14DescriptorPool29TryFindFileInFallbackDatabaseEN4absl12lts_2024011611string_viewERNS1_18DeferredValidationEENK3$_0clERNS0_18DescriptorDatabaseES4_RNS0_19FileDescriptorProtoE:
 2711|      4|                            FileDescriptorProto& output) PROTOBUF_NOINLINE {
 2712|      4|    return database.FindFileByName(std::string(filename), &output);
 2713|      4|  };
_ZNK6google8protobuf6Symbol9IsPackageEv:
  678|    104|  bool IsPackage() const {
  679|    104|    return type() == FULL_PACKAGE || type() == SUB_PACKAGE;
  ------------------
  |  Branch (679:12): [True: 1, False: 103]
  |  Branch (679:38): [True: 0, False: 103]
  ------------------
  680|    104|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115IsLegacyEditionENS0_7EditionE:
 1198|    751|bool IsLegacyEdition(Edition edition) {
 1199|    751|  return edition < Edition::EDITION_2023;
 1200|    751|}
_ZN6google8protobuf17DescriptorBuilder3NewEPKNS0_14DescriptorPoolEPNS2_6TablesERNS2_18DeferredValidationEPNS2_14ErrorCollectorE:
 4159|      4|      DescriptorPool::ErrorCollector* error_collector) {
 4160|      4|    return std::unique_ptr<DescriptorBuilder>(new DescriptorBuilder(
 4161|      4|        pool, tables, deferred_validation, error_collector));
 4162|      4|  }
descriptor.cc:_ZZNK6google8protobuf14DescriptorPool21BuildFileFromDatabaseERKNS0_19FileDescriptorProtoERNS1_18DeferredValidationEENK3$_0clEv:
 4747|      4|  const auto build_file = [&] {
 4748|      4|    result = DescriptorBuilder::New(this, tables_.get(), deferred_validation,
 4749|      4|                                    default_error_collector_)
 4750|      4|                 ->BuildFile(proto);
 4751|      4|  };
_ZN6google8protobuf6SymbolC2EPNS0_14EnumDescriptorE:
  619|     24|  explicit Symbol(TYPE* value) : ptr_(value) {                                 \
  620|     24|    value->symbol_type_ = TYPE_CONSTANT;                                       \
  621|     24|  }                                                                            \
_ZN6google8protobuf6SymbolC2EPNS0_10DescriptorE:
  619|     47|  explicit Symbol(TYPE* value) : ptr_(value) {                                 \
  620|     47|    value->symbol_type_ = TYPE_CONSTANT;                                       \
  621|     47|  }                                                                            \
_ZN6google8protobuf6SymbolC2EPNS0_14FileDescriptorE:
  619|      3|  explicit Symbol(TYPE* value) : ptr_(value) {                                 \
  620|      3|    value->symbol_type_ = TYPE_CONSTANT;                                       \
  621|      3|  }                                                                            \
_ZN6google8protobuf6SymbolC2EPNS1_10SubpackageE:
  619|      3|  explicit Symbol(TYPE* value) : ptr_(value) {                                 \
  620|      3|    value->symbol_type_ = TYPE_CONSTANT;                                       \
  621|      3|  }                                                                            \
descriptor.cc:_ZN6google8protobufL18PlanAllocationSizeERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorE:
 5798|      4|                               internal::FlatAllocator& alloc) {
 5799|      4|  alloc.PlanArray<FileDescriptor>(1);
 5800|      4|  alloc.PlanArray<FileDescriptorTables>(1);
 5801|      4|  alloc.PlanArray<std::string>(2);  // name + package
 5802|      4|  if (proto.has_options()) alloc.PlanArray<FileOptions>(1);
  ------------------
  |  Branch (5802:7): [True: 2, False: 2]
  ------------------
 5803|      4|  if (proto.has_source_code_info()) alloc.PlanArray<SourceCodeInfo>(1);
  ------------------
  |  Branch (5803:7): [True: 0, False: 4]
  ------------------
 5804|       |
 5805|      4|  PlanAllocationSize(proto.service(), alloc);
 5806|      4|  PlanAllocationSize(proto.message_type(), alloc);
 5807|      4|  PlanAllocationSize(proto.enum_type(), alloc);
 5808|      4|  PlanAllocationSize(proto.extension(), alloc);
 5809|       |
 5810|      4|  alloc.PlanArray<int>(proto.weak_dependency_size());
 5811|      4|  alloc.PlanArray<int>(proto.public_dependency_size());
 5812|      4|  alloc.PlanArray<const FileDescriptor*>(proto.dependency_size());
 5813|      4|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayISB_EEvi:
  382|      4|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|      4|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|      4|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [Folded, False: 4]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|      0|      static_assert(alignof(U) <= 8, "");
  388|      0|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|      4|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      4|      using TypeToUse =
  393|      4|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      4|                                    char, U>::type;
  395|      4|      total_.template Get<TypeToUse>() += array_size;
  396|      4|    }
  397|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISC_EERiv:
  238|     20|  ValueT<K>& Get() {
  239|     20|    return static_cast<Base<K>&>(payload_).value;
  240|     20|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayISL_EEvi:
  382|      2|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|      2|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|      2|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      4|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      2|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      4|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      4|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      2|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      4|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 2]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      4|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      4|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|      2|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [Folded, False: 2]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|      0|      static_assert(alignof(U) <= 8, "");
  388|      0|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|      2|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      2|      using TypeToUse =
  393|      2|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      2|                                    char, U>::type;
  395|      2|      total_.template Get<TypeToUse>() += array_size;
  396|      2|    }
  397|      2|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISM_EERiv:
  238|     18|  ValueT<K>& Get() {
  239|     18|    return static_cast<Base<K>&>(payload_).value;
  240|     18|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISB_EERiv:
  238|      8|  ValueT<K>& Get() {
  239|      8|    return static_cast<Base<K>&>(payload_).value;
  240|      8|  }
descriptor.cc:_ZN6google8protobufL18PlanAllocationSizeERKNS0_16RepeatedPtrFieldINS0_22ServiceDescriptorProtoEEERNS0_8internal13FlatAllocatorE:
 5788|      4|    internal::FlatAllocator& alloc) {
 5789|      4|  alloc.PlanArray<ServiceDescriptor>(services.size());
 5790|      4|  alloc.PlanArray<std::string>(2 * services.size());  // name + full_name
 5791|      4|  for (const auto& service : services) {
  ------------------
  |  Branch (5791:28): [True: 0, False: 4]
  ------------------
 5792|      0|    if (service.has_options()) alloc.PlanArray<ServiceOptions>(1);
  ------------------
  |  Branch (5792:9): [True: 0, False: 0]
  ------------------
 5793|      0|    PlanAllocationSize(service.method(), alloc);
 5794|      0|  }
 5795|      4|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayINS0_17ServiceDescriptorEEEvi:
  382|      4|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|      4|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|      4|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 4, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|      4|      static_assert(alignof(U) <= 8, "");
  388|      4|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|      4|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetIcEERiv:
  238|  1.44k|  ValueT<K>& Get() {
  239|  1.44k|    return static_cast<Base<K>&>(payload_).value;
  240|  1.44k|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISK_EERiv:
  238|      8|  ValueT<K>& Get() {
  239|      8|    return static_cast<Base<K>&>(payload_).value;
  240|      8|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISL_EERiv:
  238|      8|  ValueT<K>& Get() {
  239|      8|    return static_cast<Base<K>&>(payload_).value;
  240|      8|  }
descriptor.cc:_ZN6google8protobufL18PlanAllocationSizeERKNS0_16RepeatedPtrFieldINS0_15DescriptorProtoEEERNS0_8internal13FlatAllocatorE:
 5758|     51|    internal::FlatAllocator& alloc) {
 5759|     51|  alloc.PlanArray<Descriptor>(messages.size());
 5760|     51|  alloc.PlanArray<std::string>(2 * messages.size());  // name + full_name
 5761|       |
 5762|     51|  for (const auto& message : messages) {
  ------------------
  |  Branch (5762:28): [True: 47, False: 51]
  ------------------
 5763|     47|    if (message.has_options()) alloc.PlanArray<MessageOptions>(1);
  ------------------
  |  Branch (5763:9): [True: 0, False: 47]
  ------------------
 5764|     47|    PlanAllocationSize(message.nested_type(), alloc);
 5765|     47|    PlanAllocationSize(message.field(), alloc);
 5766|     47|    PlanAllocationSize(message.extension(), alloc);
 5767|     47|    PlanAllocationSize(message.extension_range(), alloc);
 5768|     47|    alloc.PlanArray<Descriptor::ReservedRange>(message.reserved_range_size());
 5769|     47|    alloc.PlanArray<const std::string*>(message.reserved_name_size());
 5770|     47|    alloc.PlanArray<std::string>(message.reserved_name_size());
 5771|     47|    PlanAllocationSize(message.enum_type(), alloc);
 5772|     47|    PlanAllocationSize(message.oneof_decl(), alloc);
 5773|     47|  }
 5774|     51|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISE_EERiv:
  238|      8|  ValueT<K>& Get() {
  239|      8|    return static_cast<Base<K>&>(payload_).value;
  240|      8|  }
descriptor.cc:_ZN6google8protobufL18PlanAllocationSizeERKNS0_16RepeatedPtrFieldINS0_30DescriptorProto_ExtensionRangeEEERNS0_8internal13FlatAllocatorE:
 5749|     47|    internal::FlatAllocator& alloc) {
 5750|     47|  alloc.PlanArray<Descriptor::ExtensionRange>(ranges.size());
 5751|     47|  for (const auto& r : ranges) {
  ------------------
  |  Branch (5751:22): [True: 14, False: 47]
  ------------------
 5752|     14|    if (r.has_options()) alloc.PlanArray<ExtensionRangeOptions>(1);
  ------------------
  |  Branch (5752:9): [True: 0, False: 14]
  ------------------
 5753|     14|  }
 5754|     47|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISI_EERiv:
  238|      8|  ValueT<K>& Get() {
  239|      8|    return static_cast<Base<K>&>(payload_).value;
  240|      8|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayINS0_10Descriptor13ReservedRangeEEEvi:
  382|     47|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|     47|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|     47|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     94|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     47|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     94|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     94|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 47, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     47|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 47]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     94|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 47, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 47]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 47]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     94|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     94|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|     47|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 47, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|     47|      static_assert(alignof(U) <= 8, "");
  388|     47|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|     47|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|     47|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayIPKS9_EEvi:
  382|     71|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|     71|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|     71|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|    142|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     71|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    142|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    142|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 71, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     71|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 71]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    142|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 71, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 71]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 71]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|    142|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|    142|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|     71|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 71, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|     71|      static_assert(alignof(U) <= 8, "");
  388|     71|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|     71|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|     71|  }
descriptor.cc:_ZN6google8protobufL18PlanAllocationSizeERKNS0_16RepeatedPtrFieldINS0_20OneofDescriptorProtoEEERNS0_8internal13FlatAllocatorE:
 5722|     47|    internal::FlatAllocator& alloc) {
 5723|     47|  alloc.PlanArray<OneofDescriptor>(oneofs.size());
 5724|     47|  alloc.PlanArray<std::string>(2 * oneofs.size());  // name + full_name
 5725|     47|  for (const auto& oneof : oneofs) {
  ------------------
  |  Branch (5725:26): [True: 2, False: 47]
  ------------------
 5726|      2|    if (oneof.has_options()) alloc.PlanArray<OneofOptions>(1);
  ------------------
  |  Branch (5726:9): [True: 0, False: 2]
  ------------------
 5727|      2|  }
 5728|     47|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayINS0_15OneofDescriptorEEEvi:
  382|     47|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|     47|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|     47|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     94|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     47|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     94|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     94|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 47, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     47|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 47]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     94|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 47, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 47]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 47]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     94|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     94|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|     47|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 47, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|     47|      static_assert(alignof(U) <= 8, "");
  388|     47|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|     47|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|     47|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISJ_EERiv:
  238|      8|  ValueT<K>& Get() {
  239|      8|    return static_cast<Base<K>&>(payload_).value;
  240|      8|  }
descriptor.cc:_ZN6google8protobufL18PlanAllocationSizeERKNS0_16RepeatedPtrFieldINS0_19EnumDescriptorProtoEEERNS0_8internal13FlatAllocatorE:
 5708|     51|    internal::FlatAllocator& alloc) {
 5709|     51|  alloc.PlanArray<EnumDescriptor>(enums.size());
 5710|     51|  alloc.PlanArray<std::string>(2 * enums.size());  // name + full_name
 5711|     51|  for (const auto& e : enums) {
  ------------------
  |  Branch (5711:22): [True: 24, False: 51]
  ------------------
 5712|     24|    if (e.has_options()) alloc.PlanArray<EnumOptions>(1);
  ------------------
  |  Branch (5712:9): [True: 0, False: 24]
  ------------------
 5713|     24|    PlanAllocationSize(e.value(), alloc);
 5714|     24|    alloc.PlanArray<EnumDescriptor::ReservedRange>(e.reserved_range_size());
 5715|     24|    alloc.PlanArray<const std::string*>(e.reserved_name_size());
 5716|     24|    alloc.PlanArray<std::string>(e.reserved_name_size());
 5717|     24|  }
 5718|     51|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISG_EERiv:
  238|      8|  ValueT<K>& Get() {
  239|      8|    return static_cast<Base<K>&>(payload_).value;
  240|      8|  }
descriptor.cc:_ZN6google8protobufL18PlanAllocationSizeERKNS0_16RepeatedPtrFieldINS0_24EnumValueDescriptorProtoEEERNS0_8internal13FlatAllocatorE:
 5698|     24|    internal::FlatAllocator& alloc) {
 5699|     24|  alloc.PlanArray<EnumValueDescriptor>(values.size());
 5700|     24|  alloc.PlanArray<std::string>(2 * values.size());  // name + full_name
 5701|    190|  for (const auto& v : values) {
  ------------------
  |  Branch (5701:22): [True: 190, False: 24]
  ------------------
 5702|    190|    if (v.has_options()) alloc.PlanArray<EnumValueOptions>(1);
  ------------------
  |  Branch (5702:9): [True: 0, False: 190]
  ------------------
 5703|    190|  }
 5704|     24|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISH_EERiv:
  238|      8|  ValueT<K>& Get() {
  239|      8|    return static_cast<Base<K>&>(payload_).value;
  240|      8|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayINS0_14EnumDescriptor13ReservedRangeEEEvi:
  382|     24|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|     24|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|     24|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     48|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     24|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     48|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     48|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 24, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     24|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 24]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     48|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 24, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 24]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 24]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     48|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     48|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|     24|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 24, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|     24|      static_assert(alignof(U) <= 8, "");
  388|     24|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|     24|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|     24|  }
descriptor.cc:_ZN6google8protobufL18PlanAllocationSizeERKNS0_16RepeatedPtrFieldINS0_20FieldDescriptorProtoEEERNS0_8internal13FlatAllocatorE:
 5732|     98|    internal::FlatAllocator& alloc) {
 5733|     98|  alloc.PlanArray<FieldDescriptor>(fields.size());
 5734|    235|  for (const auto& field : fields) {
  ------------------
  |  Branch (5734:26): [True: 235, False: 98]
  ------------------
 5735|    235|    if (field.has_options()) alloc.PlanArray<FieldOptions>(1);
  ------------------
  |  Branch (5735:9): [True: 17, False: 218]
  ------------------
 5736|    235|    alloc.PlanFieldNames(field.name(),
 5737|    235|                         field.has_json_name() ? &field.json_name() : nullptr);
  ------------------
  |  Branch (5737:26): [True: 0, False: 235]
  ------------------
 5738|    235|    if (field.has_default_value() && field.has_type() &&
  ------------------
  |  Branch (5738:9): [True: 27, False: 208]
  |  Branch (5738:38): [True: 27, False: 0]
  ------------------
 5739|     27|        (field.type() == FieldDescriptorProto::TYPE_STRING ||
  ------------------
  |  Branch (5739:10): [True: 0, False: 27]
  ------------------
 5740|     27|         field.type() == FieldDescriptorProto::TYPE_BYTES)) {
  ------------------
  |  Branch (5740:10): [True: 0, False: 27]
  ------------------
 5741|       |      // For the default string value.
 5742|      0|      alloc.PlanArray<std::string>(1);
 5743|      0|    }
 5744|    235|  }
 5745|     98|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayINS0_15FieldDescriptorEEEvi:
  382|     98|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|     98|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|     98|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|    196|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     98|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    196|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    196|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 98, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     98|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 98]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    196|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 98, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 98]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 98]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|    196|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|    196|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|     98|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 98, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|     98|      static_assert(alignof(U) <= 8, "");
  388|     98|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|     98|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|     98|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayISE_EEvi:
  382|     17|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|     17|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|     17|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     34|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     17|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     34|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     34|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 17, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     17|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 17]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     34|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 17, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 17]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 17]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     34|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     34|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|     17|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [Folded, False: 17]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|      0|      static_assert(alignof(U) <= 8, "");
  388|      0|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|     17|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|     17|      using TypeToUse =
  393|     17|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|     17|                                    char, U>::type;
  395|     17|      total_.template Get<TypeToUse>() += array_size;
  396|     17|    }
  397|     17|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISF_EERiv:
  238|     59|  ValueT<K>& Get() {
  239|     59|    return static_cast<Base<K>&>(payload_).value;
  240|     59|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14PlanFieldNamesERKS9_PSN_:
  429|    235|                      const std::string* opt_json_name) {
  430|    235|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|    235|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|    470|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    235|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    470|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    470|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 235, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|    235|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 235]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    470|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 235, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 235]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 235]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|    470|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|    470|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  431|       |
  432|       |    // Fast path for snake_case names, which follow the style guide.
  433|    235|    if (opt_json_name == nullptr) {
  ------------------
  |  Branch (433:9): [True: 235, False: 0]
  ------------------
  434|    235|      switch (GetFieldNameCase(name)) {
  435|    110|        case FieldNameCase::kAllLower:
  ------------------
  |  Branch (435:9): [True: 110, False: 125]
  ------------------
  436|       |          // Case 1: they are all the same.
  437|    110|          return PlanArray<std::string>(2);
  438|    125|        case FieldNameCase::kSnakeCase:
  ------------------
  |  Branch (438:9): [True: 125, False: 110]
  ------------------
  439|       |          // Case 2: name==lower, camel==json
  440|    125|          return PlanArray<std::string>(3);
  441|      0|        default:
  ------------------
  |  Branch (441:9): [True: 0, False: 235]
  ------------------
  442|      0|          break;
  443|    235|      }
  444|    235|    }
  445|       |
  446|      0|    std::string lowercase_name = name;
  447|      0|    absl::AsciiStrToLower(&lowercase_name);
  448|       |
  449|      0|    std::string camelcase_name = ToCamelCase(name, /* lower_first = */ true);
  450|      0|    std::string json_name =
  451|      0|        opt_json_name != nullptr ? *opt_json_name : ToJsonName(name);
  ------------------
  |  Branch (451:9): [True: 0, False: 0]
  ------------------
  452|       |
  453|      0|    absl::string_view all_names[] = {name, lowercase_name, camelcase_name,
  454|      0|                                     json_name};
  455|      0|    std::sort(all_names, all_names + 4);
  456|      0|    int unique =
  457|      0|        static_cast<int>(std::unique(all_names, all_names + 4) - all_names);
  458|       |
  459|      0|    PlanArray<std::string>(unique + 1);
  460|      0|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE16GetFieldNameCaseEN4absl12lts_2024011611string_viewE:
  550|    470|  FieldNameCase GetFieldNameCase(const absl::string_view name) {
  551|    470|    if (!name.empty() && !IsLower(name[0])) return FieldNameCase::kOther;
  ------------------
  |  Branch (551:9): [True: 470, False: 0]
  |  Branch (551:26): [True: 0, False: 470]
  ------------------
  552|    470|    FieldNameCase best = FieldNameCase::kAllLower;
  553|  5.17k|    for (char c : name) {
  ------------------
  |  Branch (553:17): [True: 5.17k, False: 470]
  ------------------
  554|  5.17k|      if (IsLowerOrDigit(c)) {
  ------------------
  |  Branch (554:11): [True: 4.84k, False: 322]
  ------------------
  555|       |        // nothing to do
  556|  4.84k|      } else if (c == '_') {
  ------------------
  |  Branch (556:18): [True: 322, False: 0]
  ------------------
  557|    322|        best = FieldNameCase::kSnakeCase;
  558|    322|      } else {
  559|      0|        return FieldNameCase::kOther;
  560|      0|      }
  561|  5.17k|    }
  562|    470|    return best;
  563|    470|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE7IsLowerEc:
  545|  5.64k|  static bool IsLower(char c) { return 'a' <= c && c <= 'z'; }
  ------------------
  |  Branch (545:40): [True: 5.30k, False: 334]
  |  Branch (545:52): [True: 5.30k, False: 0]
  ------------------
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14IsLowerOrDigitEc:
  547|  5.17k|  static bool IsLowerOrDigit(char c) { return IsLower(c) || IsDigit(c); }
  ------------------
  |  Branch (547:47): [True: 4.83k, False: 334]
  |  Branch (547:61): [True: 12, False: 322]
  ------------------
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE7IsDigitEc:
  546|    334|  static bool IsDigit(char c) { return '0' <= c && c <= '9'; }
  ------------------
  |  Branch (546:40): [True: 334, False: 0]
  |  Branch (546:52): [True: 12, False: 322]
  ------------------
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayIiEEvi:
  382|      8|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|      8|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|      8|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     16|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      8|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     16|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     16|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 8, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      8|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 8]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     16|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 8, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 8]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 8]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     16|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     16|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|      8|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 8, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|      8|      static_assert(alignof(U) <= 8, "");
  388|      8|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|      8|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|      8|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayIPKNS0_14FileDescriptorEEEvi:
  382|      4|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|      4|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|      4|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 4, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|      4|      static_assert(alignof(U) <= 8, "");
  388|      4|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|      4|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_124GetCppFeatureSetDefaultsEv:
 1105|      4|const FeatureSetDefaults& GetCppFeatureSetDefaults() {
 1106|      4|  static const FeatureSetDefaults* default_spec =
 1107|      4|      internal::OnShutdownDelete([] {
 1108|      4|        auto* defaults = new FeatureSetDefaults();
 1109|      4|        internal::ParseNoReflection(
 1110|      4|            absl::string_view{
 1111|      4|                PROTOBUF_INTERNAL_CPP_EDITION_DEFAULTS,
 1112|      4|                sizeof(PROTOBUF_INTERNAL_CPP_EDITION_DEFAULTS) - 1},
 1113|      4|            *defaults);
 1114|      4|        return defaults;
 1115|      4|      }());
 1116|      4|  return *default_spec;
 1117|      4|}
descriptor.cc:_ZZN6google8protobuf12_GLOBAL__N_124GetCppFeatureSetDefaultsEvENK3$_0clEv:
 1107|      1|      internal::OnShutdownDelete([] {
 1108|      1|        auto* defaults = new FeatureSetDefaults();
 1109|      1|        internal::ParseNoReflection(
 1110|      1|            absl::string_view{
 1111|      1|                PROTOBUF_INTERNAL_CPP_EDITION_DEFAULTS,
  ------------------
  |  |    8|      1|#define PROTOBUF_INTERNAL_CPP_EDITION_DEFAULTS "\n\037\030\204\007\"\003\302>\000*\025\010\001\020\002\030\002 \003(\0010\002\302>\006\010\001\020\003\030\000\n\037\030\347\007\"\003\302>\000*\025\010\002\020\001\030\001 \002(\0010\001\302>\006\010\000\020\003\030\000\n\037\030\350\007\"\023\010\001\020\001\030\001 \002(\0010\001\302>\004\010\000\020\003*\005\302>\002\030\000\n\037\030\351\007\"\025\010\001\020\001\030\001 \002(\0010\001\302>\006\010\000\020\001\030\001*\003\302>\000 \346\007(\351\007"
  ------------------
 1112|      1|                sizeof(PROTOBUF_INTERNAL_CPP_EDITION_DEFAULTS) - 1},
  ------------------
  |  |    8|      1|#define PROTOBUF_INTERNAL_CPP_EDITION_DEFAULTS "\n\037\030\204\007\"\003\302>\000*\025\010\001\020\002\030\002 \003(\0010\002\302>\006\010\001\020\003\030\000\n\037\030\347\007\"\003\302>\000*\025\010\002\020\001\030\001 \002(\0010\001\302>\006\010\000\020\003\030\000\n\037\030\350\007\"\023\010\001\020\001\030\001 \002(\0010\001\302>\004\010\000\020\003*\005\302>\002\030\000\n\037\030\351\007\"\025\010\001\020\001\030\001 \002(\0010\001\302>\006\010\000\020\001\030\001*\003\302>\000 \346\007(\351\007"
  ------------------
 1113|      1|            *defaults);
 1114|      1|        return defaults;
 1115|      1|      }());
_ZN6google8protobuf17DescriptorBuilder14BuildExtensionERKNS0_20FieldDescriptorProtoEPNS0_10DescriptorEPNS0_15FieldDescriptorERNS0_8internal13FlatAllocatorE:
 4423|      1|                      FieldDescriptor* result, internal::FlatAllocator& alloc) {
 4424|      1|    BuildFieldOrExtension(proto, parent, result, true, alloc);
 4425|      1|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115DisableTrackingEv:
  583|     28|auto DisableTracking() {
  584|     28|  bool old_value = is_tracking_enabled();
  585|     28|  is_tracking_enabled() = false;
  586|     28|  return absl::MakeCleanup([=] { is_tracking_enabled() = old_value; });
  587|     28|}
_ZN6google8protobuf17DescriptorBuilder10BuildFieldERKNS0_20FieldDescriptorProtoEPNS0_10DescriptorEPNS0_15FieldDescriptorERNS0_8internal13FlatAllocatorE:
 4419|    234|                  FieldDescriptor* result, internal::FlatAllocator& alloc) {
 4420|    234|    BuildFieldOrExtension(proto, parent, result, false, alloc);
 4421|    234|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_122IncrementWhenDestroyedD2Ev:
 6295|     47|  ~IncrementWhenDestroyed() { ++to_increment; }
_ZN6google8protobuf6SymbolC2EPNS0_15FieldDescriptorE:
  619|    235|  explicit Symbol(TYPE* value) : ptr_(value) {                                 \
  620|    235|    value->symbol_type_ = TYPE_CONSTANT;                                       \
  621|    235|  }                                                                            \
_ZN6google8protobuf6SymbolC2EPNS0_15OneofDescriptorE:
  619|      2|  explicit Symbol(TYPE* value) : ptr_(value) {                                 \
  620|      2|    value->symbol_type_ = TYPE_CONSTANT;                                       \
  621|      2|  }                                                                            \
_ZN6google8protobuf6Symbol9EnumValueEPNS0_19EnumValueDescriptorEi:
  646|    380|  static Symbol EnumValue(EnumValueDescriptor* value, int n) {
  647|    380|    Symbol s;
  648|    380|    internal::SymbolBase* ptr;
  649|    380|    if (n == 0) {
  ------------------
  |  Branch (649:9): [True: 190, False: 190]
  ------------------
  650|    190|      ptr = static_cast<internal::SymbolBaseN<0>*>(value);
  651|    190|      ptr->symbol_type_ = ENUM_VALUE;
  652|    190|    } else {
  653|    190|      ptr = static_cast<internal::SymbolBaseN<1>*>(value);
  654|    190|      ptr->symbol_type_ = ENUM_VALUE_OTHER_PARENT;
  655|    190|    }
  656|    380|    s.ptr_ = ptr;
  657|    380|    return s;
  658|    380|  }
_ZNK6google8protobuf6Symbol4typeEv:
  672|  9.96k|  Type type() const { return static_cast<Type>(ptr_->symbol_type_); }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_111ToCamelCaseEN4absl12lts_2024011611string_viewEb:
   97|    125|std::string ToCamelCase(const absl::string_view input, bool lower_first) {
   98|    125|  bool capitalize_next = !lower_first;
   99|    125|  std::string result;
  100|    125|  result.reserve(input.size());
  101|       |
  102|  1.88k|  for (char character : input) {
  ------------------
  |  Branch (102:23): [True: 1.88k, False: 125]
  ------------------
  103|  1.88k|    if (character == '_') {
  ------------------
  |  Branch (103:9): [True: 161, False: 1.71k]
  ------------------
  104|    161|      capitalize_next = true;
  105|  1.71k|    } else if (capitalize_next) {
  ------------------
  |  Branch (105:16): [True: 161, False: 1.55k]
  ------------------
  106|    161|      result.push_back(absl::ascii_toupper(character));
  107|    161|      capitalize_next = false;
  108|  1.55k|    } else {
  109|  1.55k|      result.push_back(character);
  110|  1.55k|    }
  111|  1.88k|  }
  112|       |
  113|       |  // Lower-case the first letter.
  114|    125|  if (lower_first && !result.empty()) {
  ------------------
  |  Branch (114:7): [True: 125, False: 0]
  |  Branch (114:22): [True: 125, False: 0]
  ------------------
  115|    125|    result[0] = absl::ascii_tolower(result[0]);
  116|    125|  }
  117|       |
  118|    125|  return result;
  119|    125|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_119is_tracking_enabledEv:
  578|     84|bool& is_tracking_enabled() {
  579|     84|  static PROTOBUF_THREAD_LOCAL bool value = true;
  580|     84|  return value;
  581|     84|}
descriptor.cc:_ZZN6google8protobuf12_GLOBAL__N_115DisableTrackingEvENK3$_0clEv:
  586|     28|  return absl::MakeCleanup([=] { is_tracking_enabled() = old_value; });
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IbEEOT_:
  157|    112|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginIS9_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 0, False: 4]
  ------------------
  327|      4|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetIS9_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetIcEERKiv:
  243|     24|  const ValueT<K>& Get() const {
  244|     24|    return static_cast<const Base<K>&>(payload_).value;
  245|     24|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetIS9_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISA_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4dataEv:
  357|    120|  char* data() const {
  358|    120|    return const_cast<char*>(reinterpret_cast<const char*>(this));
  359|    120|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISA_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 4, False: 0]
  ------------------
  327|      0|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISA_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISA_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISB_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISB_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 0, False: 4]
  ------------------
  327|      4|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISB_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISB_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISC_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISC_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 4, False: 0]
  ------------------
  327|      0|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISC_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISC_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISD_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISD_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 4, False: 0]
  ------------------
  327|      0|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISD_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISD_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISE_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISE_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 2, False: 2]
  ------------------
  327|      2|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISE_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISE_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISF_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISF_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 4, False: 0]
  ------------------
  327|      0|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISF_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISF_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISG_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISG_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 4, False: 0]
  ------------------
  327|      0|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISG_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISG_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISH_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISH_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 4, False: 0]
  ------------------
  327|      0|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISH_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISH_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISI_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISI_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 4, False: 0]
  ------------------
  327|      0|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISI_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISI_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISJ_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISJ_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 4, False: 0]
  ------------------
  327|      0|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISJ_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISJ_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISK_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISK_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 4, False: 0]
  ------------------
  327|      0|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISK_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISK_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISL_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISL_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 2, False: 2]
  ------------------
  327|      2|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISL_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISL_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISM_EERKiv:
  243|     20|  const ValueT<K>& Get() const {
  244|     20|    return static_cast<const Base<K>&>(payload_).value;
  245|     20|  }
_ZN6google8protobuf14DescriptorPool6Tables10CheckPointC2EPKS2_:
 1588|      4|              static_cast<int>(tables->flat_allocs_.size())),
 1589|       |          misc_allocations_before_checkpoint(
 1590|      4|              static_cast<int>(tables->misc_allocs_.size())),
 1591|       |          pending_symbols_before_checkpoint(
 1592|      4|              tables->symbols_after_checkpoint_.size()),
 1593|       |          pending_files_before_checkpoint(
 1594|      4|              tables->files_after_checkpoint_.size()),
 1595|       |          pending_extensions_before_checkpoint(
 1596|      4|              tables->extensions_after_checkpoint_.size()) {}
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_118SymbolByFullNameEqclINS0_6SymbolES4_EEbRKT_RKT0_:
  958|     51|  bool operator()(const T& a, const U& b) const {
  959|     51|    return a.full_name() == b.full_name();
  960|     51|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashclINS0_6SymbolEEEmRKT_:
  950|  1.38k|  size_t operator()(const T& s) const {
  951|  1.38k|    return absl::HashOf(s.full_name());
  952|  1.38k|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS0_14FileDescriptorEEclEPKS3_:
  996|      4|  size_t operator()(const DescriptorT* file) const {
  997|      4|    return absl::HashOf(file->name());
  998|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayINS0_19EnumValueDescriptorEEEvi:
  382|     24|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|     24|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|     24|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     48|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     24|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     48|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     48|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 24, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     24|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 24]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     48|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 24, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 24]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 24]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     48|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     48|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|     24|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 24, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|     24|      static_assert(alignof(U) <= 8, "");
  388|     24|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|     24|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|     24|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayIS9_EEvi:
  382|    487|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|    487|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|    487|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|    974|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    487|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    974|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    974|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 487, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|    487|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 487]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    974|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 487, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 487]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 487]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|    974|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|    974|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|    487|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [Folded, False: 487]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|      0|      static_assert(alignof(U) <= 8, "");
  388|      0|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|    487|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|    487|      using TypeToUse =
  393|    487|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|    487|                                    char, U>::type;
  395|    487|      total_.template Get<TypeToUse>() += array_size;
  396|    487|    }
  397|    487|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE16FinalizePlanningIPNS0_14DescriptorPool6TablesEEEvRT_:
  526|      4|  void FinalizePlanning(Alloc& alloc) {
  527|      4|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  528|       |
  529|      4|    pointers_ = alloc->CreateFlatAlloc(total_)->Pointers();
  530|       |
  531|      4|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  532|      4|  }
descriptor.cc:_ZN6google8protobuf14DescriptorPool6Tables15CreateFlatAllocIJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEEEPNS0_12_GLOBAL__N_114FlatAllocationIJcSA_SB_SC_SD_SE_SF_SG_SH_SI_SJ_SK_SL_SM_EEERKNSN_7TypeMapINSN_4IntTEJDpT_EEE:
 2027|      4|    const TypeMap<IntT, T...>& sizes) {
 2028|      4|  auto ends = CalculateEnds(sizes);
 2029|      4|  using FlatAlloc = internal::FlatAllocator::Allocation;
 2030|       |
 2031|      4|  int last_end = ends.template Get<
 2032|      4|      typename std::tuple_element<sizeof...(T) - 1, std::tuple<T...>>::type>();
 2033|      4|  size_t total_size =
 2034|      4|      last_end + RoundUpTo<FlatAlloc::kMaxAlign>(sizeof(FlatAlloc));
 2035|      4|  char* data = static_cast<char*>(::operator new(total_size));
 2036|      4|  auto* res = ::new (data) FlatAlloc(ends);
 2037|      4|  flat_allocs_.emplace_back(res);
 2038|       |
 2039|      4|  return res;
 2040|      4|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_113CalculateEndsIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEEENS1_7TypeMapINS1_4IntTEJDpT_EEERKSQ_:
  365|      4|TypeMap<IntT, T...> CalculateEnds(const TypeMap<IntT, T...>& sizes) {
  366|      4|  int total = 0;
  367|      4|  TypeMap<IntT, T...> out;
  368|      4|  Fold({(out.template Get<T>() = total +=
  369|      4|         sizeof(T) * sizes.template Get<T>())...});
  370|      4|  return out;
  371|      4|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRiEEOT_:
  157|    112|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISD_EERiv:
  238|      8|  ValueT<K>& Get() {
  239|      8|    return static_cast<Base<K>&>(payload_).value;
  240|      8|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEEC2ERKNS1_7TypeMapINS1_4IntTEJcS9_SA_SB_SC_SD_SE_SF_SG_SH_SI_SJ_SK_SL_EEE:
  269|      4|  explicit FlatAllocation(const TypeMap<IntT, T...>& ends) : ends_(ends) {
  270|       |    // The arrays start just after FlatAllocation, so adjust the ends.
  271|      4|    Fold({(ends_.template Get<T>() +=
  272|      4|           RoundUpTo<kMaxAlign>(sizeof(FlatAllocation)))...});
  273|      4|    Fold({Init<T>()...});
  274|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitIcEEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [True: 4, Folded]
  ------------------
  341|      0|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      0|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 0, False: 0]
  ------------------
  343|      0|      ::new (p) U{};
  344|      0|    }
  345|      0|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitIS9_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|  1.13k|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 1.13k, False: 4]
  ------------------
  343|  1.13k|      ::new (p) U{};
  344|  1.13k|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISA_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      4|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 0, False: 4]
  ------------------
  343|      0|      ::new (p) U{};
  344|      0|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISB_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      8|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 4, False: 4]
  ------------------
  343|      4|      ::new (p) U{};
  344|      4|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISC_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      4|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 0, False: 4]
  ------------------
  343|      0|      ::new (p) U{};
  344|      0|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISD_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      4|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 0, False: 4]
  ------------------
  343|      0|      ::new (p) U{};
  344|      0|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISE_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|     21|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 17, False: 4]
  ------------------
  343|     17|      ::new (p) U{};
  344|     17|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISF_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      4|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 0, False: 4]
  ------------------
  343|      0|      ::new (p) U{};
  344|      0|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISG_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      4|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 0, False: 4]
  ------------------
  343|      0|      ::new (p) U{};
  344|      0|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISH_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      4|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 0, False: 4]
  ------------------
  343|      0|      ::new (p) U{};
  344|      0|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISI_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      4|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 0, False: 4]
  ------------------
  343|      0|      ::new (p) U{};
  344|      0|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISJ_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      4|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 0, False: 4]
  ------------------
  343|      0|      ::new (p) U{};
  344|      0|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISK_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      4|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 0, False: 4]
  ------------------
  343|      0|      ::new (p) U{};
  344|      0|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISL_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      6|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 2, False: 4]
  ------------------
  343|      2|      ::new (p) U{};
  344|      2|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE8PointersEv:
  285|      4|  TypeMap<PointerT, T...> Pointers() const {
  286|      4|    TypeMap<PointerT, T...> out;
  287|      4|    Fold({(out.template Get<T>() = Begin<T>())...});
  288|      4|    return out;
  289|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginIcEEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 0, False: 4]
  ------------------
  327|      4|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetIcEEiv:
  302|      4|  int BeginOffset() const {
  303|      4|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      4|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [True: 0, Folded]
  ------------------
  306|      4|    using PrevType =
  307|      4|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      4|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      4|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [True: 4, Folded]
  ------------------
  311|      4|                           : ends_.template Get<PrevType>();
  312|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetIcEEiv:
  315|      4|  int EndOffset() const {
  316|      4|    return ends_.template Get<U>();
  317|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetIcEERPT_v:
  238|    484|  ValueT<K>& Get() {
  239|    484|    return static_cast<Base<K>&>(payload_).value;
  240|    484|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPcEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISB_EERPT_v:
  238|      4|  ValueT<K>& Get() {
  239|      4|    return static_cast<Base<K>&>(payload_).value;
  240|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_14SourceCodeInfoEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISC_EERPT_v:
  238|      8|  ValueT<K>& Get() {
  239|      8|    return static_cast<Base<K>&>(payload_).value;
  240|      8|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_20FileDescriptorTablesEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISD_EERPT_v:
  238|      4|  ValueT<K>& Get() {
  239|      4|    return static_cast<Base<K>&>(payload_).value;
  240|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_10FeatureSetEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISE_EERPT_v:
  238|      4|  ValueT<K>& Get() {
  239|      4|    return static_cast<Base<K>&>(payload_).value;
  240|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_14MessageOptionsEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISF_EERPT_v:
  238|     21|  ValueT<K>& Get() {
  239|     21|    return static_cast<Base<K>&>(payload_).value;
  240|     21|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_12FieldOptionsEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISG_EERPT_v:
  238|      4|  ValueT<K>& Get() {
  239|      4|    return static_cast<Base<K>&>(payload_).value;
  240|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_11EnumOptionsEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISH_EERPT_v:
  238|      4|  ValueT<K>& Get() {
  239|      4|    return static_cast<Base<K>&>(payload_).value;
  240|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_16EnumValueOptionsEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISI_EERPT_v:
  238|      4|  ValueT<K>& Get() {
  239|      4|    return static_cast<Base<K>&>(payload_).value;
  240|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_21ExtensionRangeOptionsEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISJ_EERPT_v:
  238|      4|  ValueT<K>& Get() {
  239|      4|    return static_cast<Base<K>&>(payload_).value;
  240|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_12OneofOptionsEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISK_EERPT_v:
  238|      4|  ValueT<K>& Get() {
  239|      4|    return static_cast<Base<K>&>(payload_).value;
  240|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_14ServiceOptionsEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISL_EERPT_v:
  238|      4|  ValueT<K>& Get() {
  239|      4|    return static_cast<Base<K>&>(payload_).value;
  240|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_13MethodOptionsEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISM_EERPT_v:
  238|      6|  ValueT<K>& Get() {
  239|      6|    return static_cast<Base<K>&>(payload_).value;
  240|      6|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_11FileOptionsEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayINS0_19EnumValueDescriptorEEEPT_i:
  400|     24|  U* AllocateArray(int array_size) {
  401|     24|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|     24|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|     24|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|     24|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     48|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     24|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     48|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     48|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 24, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     24|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 24]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     48|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 24, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 24]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 24]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     48|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     48|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|     24|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|     24|    int& used = used_.template Get<TypeToUse>();
  409|     24|    U* res = reinterpret_cast<U*>(data + used);
  410|     24|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 24, Folded]
  ------------------
  411|     24|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|     24|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|     24|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|     24|  while (                                                                      \
  |  |  |  |  |  |   62|     24|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 24]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|     24|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|     24|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|     24|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|     24|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|     24|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|     24|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|     24|    return res;
  413|     24|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_116ParentNumberHashclIPNS0_19EnumValueDescriptorEEEmRKT_:
 1045|     95|  size_t operator()(const T& t) const {
 1046|     95|    return absl::HashOf(ObjectToParentNumber(t));
 1047|     95|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114ParentNumberEqclIPKNS0_19EnumValueDescriptorEPS4_EEbRKT_RKT0_:
 1053|      7|  bool operator()(const T& a, const U& b) const {
 1054|      7|    return ObjectToParentNumber(a) == ObjectToParentNumber(b);
 1055|      7|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_116ParentNumberHashclIPKNS0_19EnumValueDescriptorEEEmRKT_:
 1045|    112|  size_t operator()(const T& t) const {
 1046|    112|    return absl::HashOf(ObjectToParentNumber(t));
 1047|    112|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_118SymbolByParentHashclINS0_6SymbolEEEmRKT_:
  975|  1.55k|  size_t operator()(const T& s) const {
  976|  1.55k|    return absl::HashOf(s.parent_name_key());
  977|  1.55k|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_116SymbolByParentEqclINS0_6SymbolES4_EEbRKT_RKT0_:
  983|     56|  bool operator()(const T& a, const U& b) const {
  984|     56|    return a.parent_name_key() == b.parent_name_key();
  985|     56|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_116ParentNumberHashclIPNS0_15FieldDescriptorEEEmRKT_:
 1045|    108|  size_t operator()(const T& t) const {
 1046|    108|    return absl::HashOf(ObjectToParentNumber(t));
 1047|    108|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114ParentNumberEqclIPKNS0_15FieldDescriptorEPS4_EEbRKT_RKT0_:
 1053|      6|  bool operator()(const T& a, const U& b) const {
 1054|      6|    return ObjectToParentNumber(a) == ObjectToParentNumber(b);
 1055|      6|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_116ParentNumberHashclIPKNS0_15FieldDescriptorEEEmRKT_:
 1045|     98|  size_t operator()(const T& t) const {
 1046|     98|    return absl::HashOf(ObjectToParentNumber(t));
 1047|     98|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayINS0_14FileDescriptorEEEvi:
  382|      4|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|      4|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|      4|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 4, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|      4|      static_assert(alignof(U) <= 8, "");
  388|      4|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|      4|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayINS0_14EnumDescriptorEEEvi:
  382|     51|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|     51|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|     51|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|    102|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     51|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    102|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    102|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 51, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     51|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 51]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    102|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 51, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 51]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 51]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|    102|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|    102|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|     51|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 51, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|     51|      static_assert(alignof(U) <= 8, "");
  388|     51|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|     51|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|     51|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayINS0_10DescriptorEEEvi:
  382|     51|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|     51|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|     51|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|    102|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     51|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    102|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    102|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 51, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     51|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 51]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    102|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 51, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 51]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 51]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|    102|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|    102|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|     51|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 51, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|     51|      static_assert(alignof(U) <= 8, "");
  388|     51|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|     51|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|     51|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayINS0_10Descriptor14ExtensionRangeEEEvi:
  382|     47|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|     47|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|     47|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     94|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     47|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     94|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     94|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 47, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     47|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 47]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     94|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 47, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 47]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 47]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     94|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     94|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|     47|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 47, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|     47|      static_assert(alignof(U) <= 8, "");
  388|     47|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|     47|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|     47|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayINS0_14EnumDescriptorEEEPT_i:
  400|     51|  U* AllocateArray(int array_size) {
  401|     51|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|     51|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|     51|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|     51|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|    102|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     51|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    102|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    102|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 51, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     51|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 51]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    102|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 51, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 51]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 51]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|    102|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|    102|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|     51|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|     51|    int& used = used_.template Get<TypeToUse>();
  409|     51|    U* res = reinterpret_cast<U*>(data + used);
  410|     51|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 51, Folded]
  ------------------
  411|     51|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|     51|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|     51|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|     51|  while (                                                                      \
  |  |  |  |  |  |   62|     51|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 51]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|     51|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|     51|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|     51|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|     51|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|     51|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|     51|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|     51|    return res;
  413|     51|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayINS0_10DescriptorEEEPT_i:
  400|     51|  U* AllocateArray(int array_size) {
  401|     51|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|     51|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|     51|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|     51|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|    102|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     51|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    102|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    102|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 51, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     51|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 51]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    102|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 51, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 51]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 51]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|    102|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|    102|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|     51|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|     51|    int& used = used_.template Get<TypeToUse>();
  409|     51|    U* res = reinterpret_cast<U*>(data + used);
  410|     51|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 51, Folded]
  ------------------
  411|     51|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|     51|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|     51|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|     51|  while (                                                                      \
  |  |  |  |  |  |   62|     51|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 51]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|     51|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|     51|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|     51|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|     51|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|     51|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|     51|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|     51|    return res;
  413|     51|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayINS0_10Descriptor14ExtensionRangeEEEPT_i:
  400|     47|  U* AllocateArray(int array_size) {
  401|     47|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|     47|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|     47|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|     47|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     94|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     47|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     94|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     94|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 47, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     47|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 47]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     94|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 47, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 47]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 47]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     94|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     94|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|     47|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|     47|    int& used = used_.template Get<TypeToUse>();
  409|     47|    U* res = reinterpret_cast<U*>(data + used);
  410|     47|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 47, Folded]
  ------------------
  411|     47|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|     47|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|     47|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|     47|  while (                                                                      \
  |  |  |  |  |  |   62|     47|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 47]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|     47|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|     47|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|     47|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|     47|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|     47|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|     47|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|     47|    return res;
  413|     47|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayINS0_14FileDescriptorEEEPT_i:
  400|      4|  U* AllocateArray(int array_size) {
  401|      4|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|      4|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|      4|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|      4|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|      4|    int& used = used_.template Get<TypeToUse>();
  409|      4|    U* res = reinterpret_cast<U*>(data + used);
  410|      4|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 4, Folded]
  ------------------
  411|      4|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|      4|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|      4|    return res;
  413|      4|  }
_ZN6google8protobuf14DescriptorPool6Tables8AllocateINS0_6Symbol10SubpackageEEEPT_v:
 2010|      3|Type* DescriptorPool::Tables::Allocate() {
 2011|      3|  static_assert(std::is_trivially_destructible<Type>::value, "");
 2012|      3|  static_assert(alignof(Type) <= 8, "");
 2013|      3|  return ::new (AllocateBytes(sizeof(Type))) Type{};
 2014|      3|}
_ZN6google8protobuf17DescriptorBuilder19AllocateOptionsImplINS0_14FileDescriptorEEEPKNT_11OptionsTypeEN4absl12lts_2024011611string_viewESA_RKNS4_5ProtoENS9_4SpanIKiEESA_RNS0_8internal13FlatAllocatorE:
 5428|      4|    internal::FlatAllocator& alloc) {
 5429|      4|  if (!proto.has_options()) {
  ------------------
  |  Branch (5429:7): [True: 2, False: 2]
  ------------------
 5430|      2|    return &DescriptorT::OptionsType::default_instance();
 5431|      2|  }
 5432|      2|  const typename DescriptorT::OptionsType& orig_options = proto.options();
 5433|       |
 5434|      2|  auto* options = alloc.AllocateArray<typename DescriptorT::OptionsType>(1);
 5435|       |
 5436|      2|  if (!orig_options.IsInitialized()) {
  ------------------
  |  Branch (5436:7): [True: 0, False: 2]
  ------------------
 5437|      0|    AddError(absl::StrCat(name_scope, ".", element_name), orig_options,
 5438|      0|             DescriptorPool::ErrorCollector::OPTION_NAME,
 5439|      0|             "Uninterpreted option is missing name or value.");
 5440|      0|    return &DescriptorT::OptionsType::default_instance();
 5441|      0|  }
 5442|       |
 5443|      2|  const bool parse_success =
 5444|      2|      internal::ParseNoReflection(orig_options.SerializeAsString(), *options);
 5445|      2|  ABSL_DCHECK(parse_success);
  ------------------
  |  |   47|      2|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      2|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      4|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      2|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      4|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      4|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      2|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      2|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      4|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      4|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5446|       |
 5447|       |  // Don't add to options_to_interpret_ unless there were uninterpreted
 5448|       |  // options.  This not only avoids unnecessary work, but prevents a
 5449|       |  // bootstrapping problem when building descriptors for descriptor.proto.
 5450|       |  // descriptor.proto does not contain any uninterpreted options, but
 5451|       |  // attempting to interpret options anyway will cause
 5452|       |  // OptionsType::GetDescriptor() to be called which may then deadlock since
 5453|       |  // we're still trying to build it.
 5454|      2|  if (options->uninterpreted_option_size() > 0) {
  ------------------
  |  Branch (5454:7): [True: 0, False: 2]
  ------------------
 5455|      0|    options_to_interpret_.push_back(OptionsToInterpret(
 5456|      0|        name_scope, element_name, options_path, &orig_options, options));
 5457|      0|  }
 5458|       |
 5459|       |  // If the custom option is in unknown fields, no need to interpret it.
 5460|       |  // Remove the dependency file from unused_dependency.
 5461|      2|  const UnknownFieldSet& unknown_fields = orig_options.unknown_fields();
 5462|      2|  if (!unknown_fields.empty()) {
  ------------------
  |  Branch (5462:7): [True: 0, False: 2]
  ------------------
 5463|       |    // Can not use options->GetDescriptor() which may case deadlock.
 5464|      0|    Symbol msg_symbol = tables_->FindSymbol(option_name);
 5465|      0|    if (msg_symbol.type() == Symbol::MESSAGE) {
  ------------------
  |  Branch (5465:9): [True: 0, False: 0]
  ------------------
 5466|      0|      for (int i = 0; i < unknown_fields.field_count(); ++i) {
  ------------------
  |  Branch (5466:23): [True: 0, False: 0]
  ------------------
 5467|      0|        assert_mutex_held(pool_);
 5468|      0|        const FieldDescriptor* field =
 5469|      0|            pool_->InternalFindExtensionByNumberNoLock(
 5470|      0|                msg_symbol.descriptor(), unknown_fields.field(i).number());
 5471|      0|        if (field) {
  ------------------
  |  Branch (5471:13): [True: 0, False: 0]
  ------------------
 5472|      0|          unused_dependency_.erase(field->file());
 5473|      0|        }
 5474|      0|      }
 5475|      0|    }
 5476|      0|  }
 5477|      2|  return options;
 5478|      2|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayISL_EEPT_i:
  400|      2|  U* AllocateArray(int array_size) {
  401|      2|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|      2|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|      2|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|      2|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      4|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      2|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      4|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      4|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      2|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      4|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 2]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      4|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      4|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|      2|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|      2|    int& used = used_.template Get<TypeToUse>();
  409|      2|    U* res = reinterpret_cast<U*>(data + used);
  410|      2|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [Folded, False: 2]
  ------------------
  411|      2|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|      2|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|      2|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      2|  while (                                                                      \
  |  |  |  |  |  |   62|      2|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      2|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      2|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      2|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      2|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      2|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      2|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|      2|    return res;
  413|      2|  }
_ZN6google8protobuf17DescriptorBuilder19ResolveFeaturesImplINS0_14FileDescriptorEEEvNS0_7EditionERKNT_5ProtoEPS5_PNS5_11OptionsTypeERNS0_8internal13FlatAllocatorENS0_14DescriptorPool14ErrorCollector13ErrorLocationEb:
 5537|      4|    bool force_merge) {
 5538|      4|  const FeatureSet& parent_features = GetParentFeatures(descriptor);
 5539|      4|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5540|      4|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5541|       |
 5542|      4|  ABSL_CHECK(feature_resolver_.has_value());
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5543|       |
 5544|      4|  if (options->has_features()) {
  ------------------
  |  Branch (5544:7): [True: 0, False: 4]
  ------------------
 5545|       |    // Remove the features from the child's options proto to avoid leaking
 5546|       |    // internal details.
 5547|      0|    descriptor->proto_features_ =
 5548|      0|        tables_->InternFeatureSet(std::move(*options->mutable_features()));
 5549|      0|    options->clear_features();
 5550|      0|  }
 5551|       |
 5552|      4|  FeatureSet base_features = *descriptor->proto_features_;
 5553|       |
 5554|       |  // Handle feature inference from proto2/proto3.
 5555|      4|  if (IsLegacyEdition(edition)) {
  ------------------
  |  Branch (5555:7): [True: 4, False: 0]
  ------------------
 5556|      4|    if (descriptor->proto_features_ != &FeatureSet::default_instance()) {
  ------------------
  |  Branch (5556:9): [True: 0, False: 4]
  ------------------
 5557|      0|      AddError(descriptor->name(), proto, error_location,
 5558|      0|               "Features are only valid under editions.");
 5559|      0|    }
 5560|      4|  }
 5561|      4|  InferLegacyProtoFeatures(proto, *options, edition, base_features);
 5562|       |
 5563|      4|  if (base_features.ByteSizeLong() == 0 && !force_merge) {
  ------------------
  |  Branch (5563:7): [True: 4, False: 0]
  |  Branch (5563:44): [True: 0, False: 4]
  ------------------
 5564|       |    // Nothing to merge, and we aren't forcing it.
 5565|      0|    descriptor->merged_features_ = &parent_features;
 5566|      0|    return;
 5567|      0|  }
 5568|       |
 5569|       |  // Calculate the merged features for this target.
 5570|      4|  absl::StatusOr<FeatureSet> merged =
 5571|      4|      feature_resolver_->MergeFeatures(parent_features, base_features);
 5572|      4|  if (!merged.ok()) {
  ------------------
  |  Branch (5572:7): [True: 0, False: 4]
  ------------------
 5573|      0|    AddError(descriptor->name(), proto, error_location,
 5574|      0|             [&] { return std::string(merged.status().message()); });
 5575|      0|    return;
 5576|      0|  }
 5577|       |
 5578|      4|  descriptor->merged_features_ = tables_->InternFeatureSet(*std::move(merged));
 5579|      4|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117GetParentFeaturesEPKNS0_14FileDescriptorE:
 1142|      4|const FeatureSet& GetParentFeatures(const FileDescriptor* file) {
 1143|      4|  return FeatureSet::default_instance();
 1144|      4|}
descriptor.cc:_ZN6google8protobufL24InferLegacyProtoFeaturesINS0_19FileDescriptorProtoENS0_11FileOptionsEEEvRKT_RKT0_NS0_7EditionERNS0_10FeatureSetE:
 5483|      4|                                     FeatureSet& features) {}
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedEv:
  534|      4|  void ExpectConsumed() const {
  535|       |    // We verify that we consumed all the memory requested if there was no
  536|       |    // error in processing.
  537|      4|    Fold({ExpectConsumed<T>()...});
  538|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedIcEEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedIS9_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISA_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISB_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISC_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISD_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISE_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISF_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISG_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISH_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISI_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISJ_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISK_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISL_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayISB_EEPT_i:
  400|      4|  U* AllocateArray(int array_size) {
  401|      4|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|      4|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|      4|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|      4|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|      4|    int& used = used_.template Get<TypeToUse>();
  409|      4|    U* res = reinterpret_cast<U*>(data + used);
  410|      4|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [Folded, False: 4]
  ------------------
  411|      4|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|      4|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|      4|    return res;
  413|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE15AllocateStringsIJRKS9_EEEPSO_DpOT_:
  416|     10|  const std::string* AllocateStrings(In&&... in) {
  417|     10|    std::string* strings = AllocateArray<std::string>(sizeof...(in));
  418|     10|    std::string* res = strings;
  419|     10|    Fold({(*strings++ = std::string(std::forward<In>(in)))...});
  420|     10|    return res;
  421|     10|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayIPKNS0_14FileDescriptorEEEPT_i:
  400|      4|  U* AllocateArray(int array_size) {
  401|      4|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|      4|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|      4|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|      4|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|      4|    int& used = used_.template Get<TypeToUse>();
  409|      4|    U* res = reinterpret_cast<U*>(data + used);
  410|      4|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 4, Folded]
  ------------------
  411|      4|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|      4|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|      4|    return res;
  413|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayIiEEPT_i:
  400|      8|  U* AllocateArray(int array_size) {
  401|      8|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|      8|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|      8|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|      8|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     16|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      8|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     16|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     16|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 8, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      8|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 8]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     16|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 8, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 8]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 8]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     16|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     16|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|      8|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|      8|    int& used = used_.template Get<TypeToUse>();
  409|      8|    U* res = reinterpret_cast<U*>(data + used);
  410|      8|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 8, Folded]
  ------------------
  411|      8|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|      8|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|      8|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      8|  while (                                                                      \
  |  |  |  |  |  |   62|      8|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 8]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      8|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      8|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      8|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      8|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      8|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      8|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|      8|    return res;
  413|      8|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayINS0_17ServiceDescriptorEEEPT_i:
  400|      4|  U* AllocateArray(int array_size) {
  401|      4|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|      4|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|      4|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|      4|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|      4|    int& used = used_.template Get<TypeToUse>();
  409|      4|    U* res = reinterpret_cast<U*>(data + used);
  410|      4|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 4, Folded]
  ------------------
  411|      4|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|      4|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|      4|    return res;
  413|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayINS0_15FieldDescriptorEEEPT_i:
  400|     98|  U* AllocateArray(int array_size) {
  401|     98|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|     98|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|     98|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|     98|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|    196|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     98|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    196|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    196|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 98, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     98|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 98]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    196|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 98, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 98]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 98]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|    196|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|    196|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|     98|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|     98|    int& used = used_.template Get<TypeToUse>();
  409|     98|    U* res = reinterpret_cast<U*>(data + used);
  410|     98|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 98, Folded]
  ------------------
  411|     98|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|     98|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|     98|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|     98|  while (                                                                      \
  |  |  |  |  |  |   62|     98|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 98]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|     98|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|     98|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|     98|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|     98|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|     98|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|     98|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|     98|    return res;
  413|     98|  }
descriptor.cc:_ZZN6google8protobuf17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorEENK3$_3clERKNS0_15FieldDescriptorERKNS0_20FieldDescriptorProtoE:
 6161|    235|        [&](const FieldDescriptor& field, const FieldDescriptorProto& proto) {
 6162|    235|          if (field.options_->has_ctype() && field.options_->features()
  ------------------
  |  Branch (6162:15): [True: 0, False: 235]
  |  Branch (6162:46): [True: 0, False: 0]
  ------------------
 6163|      0|                                                 .GetExtension(pb::cpp)
 6164|      0|                                                 .has_string_type()) {
 6165|      0|            AddError(field.full_name(), proto,
 6166|      0|                     DescriptorPool::ErrorCollector::TYPE, [&] {
 6167|      0|                       return absl::StrFormat(
 6168|      0|                           "Field %s specifies both string_type and ctype "
 6169|      0|                           "which is not supported.",
 6170|      0|                           field.full_name());
 6171|      0|                     });
 6172|      0|          }
 6173|    235|        });
descriptor.cc:_ZZN6google8protobuf17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorEENK3$_4clINS0_14FileDescriptorES2_EEDaRKT_RKT0_:
 6180|      4|          *result, proto, [&](const auto& descriptor, const auto& proto) {
 6181|      4|            using OptionsT =
 6182|      4|                typename std::remove_const<typename std::remove_pointer<
 6183|      4|                    decltype(descriptor.options_)>::type>::type;
 6184|      4|            using DescriptorT =
 6185|      4|                typename std::remove_const<typename std::remove_reference<
 6186|      4|                    decltype(descriptor)>::type>::type;
 6187|       |
 6188|      4|            ResolveFeatures(
 6189|      4|                proto, const_cast<DescriptorT*>(&descriptor),
 6190|      4|                const_cast<  // NOLINT(google3-runtime-proto-const-cast)
 6191|      4|                    OptionsT*>(descriptor.options_),
 6192|      4|                alloc);
 6193|      4|          });
descriptor.cc:_ZZN6google8protobuf17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorEENK3$_4clINS0_10DescriptorENS0_15DescriptorProtoEEEDaRKT_RKT0_:
 6180|     47|          *result, proto, [&](const auto& descriptor, const auto& proto) {
 6181|     47|            using OptionsT =
 6182|     47|                typename std::remove_const<typename std::remove_pointer<
 6183|     47|                    decltype(descriptor.options_)>::type>::type;
 6184|     47|            using DescriptorT =
 6185|     47|                typename std::remove_const<typename std::remove_reference<
 6186|     47|                    decltype(descriptor)>::type>::type;
 6187|       |
 6188|     47|            ResolveFeatures(
 6189|     47|                proto, const_cast<DescriptorT*>(&descriptor),
 6190|     47|                const_cast<  // NOLINT(google3-runtime-proto-const-cast)
 6191|     47|                    OptionsT*>(descriptor.options_),
 6192|     47|                alloc);
 6193|     47|          });
_ZN6google8protobuf17DescriptorBuilder15ResolveFeaturesINS0_10DescriptorEEEvRKNT_5ProtoEPS4_PNS4_11OptionsTypeERNS0_8internal13FlatAllocatorE:
 5585|     47|    internal::FlatAllocator& alloc) {
 5586|     47|  ResolveFeaturesImpl(descriptor->file()->edition(), proto, descriptor, options,
 5587|     47|                      alloc, DescriptorPool::ErrorCollector::NAME);
 5588|     47|}
_ZN6google8protobuf17DescriptorBuilder19ResolveFeaturesImplINS0_10DescriptorEEEvNS0_7EditionERKNT_5ProtoEPS5_PNS5_11OptionsTypeERNS0_8internal13FlatAllocatorENS0_14DescriptorPool14ErrorCollector13ErrorLocationEb:
 5537|     47|    bool force_merge) {
 5538|     47|  const FeatureSet& parent_features = GetParentFeatures(descriptor);
 5539|     47|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5540|     47|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5541|       |
 5542|     47|  ABSL_CHECK(feature_resolver_.has_value());
  ------------------
  |  |   41|     47|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     94|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     47|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     94|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     94|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 47, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     47|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 47]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     94|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 47, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 47]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 47]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     94|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     94|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5543|       |
 5544|     47|  if (options->has_features()) {
  ------------------
  |  Branch (5544:7): [True: 0, False: 47]
  ------------------
 5545|       |    // Remove the features from the child's options proto to avoid leaking
 5546|       |    // internal details.
 5547|      0|    descriptor->proto_features_ =
 5548|      0|        tables_->InternFeatureSet(std::move(*options->mutable_features()));
 5549|      0|    options->clear_features();
 5550|      0|  }
 5551|       |
 5552|     47|  FeatureSet base_features = *descriptor->proto_features_;
 5553|       |
 5554|       |  // Handle feature inference from proto2/proto3.
 5555|     47|  if (IsLegacyEdition(edition)) {
  ------------------
  |  Branch (5555:7): [True: 47, False: 0]
  ------------------
 5556|     47|    if (descriptor->proto_features_ != &FeatureSet::default_instance()) {
  ------------------
  |  Branch (5556:9): [True: 0, False: 47]
  ------------------
 5557|      0|      AddError(descriptor->name(), proto, error_location,
 5558|      0|               "Features are only valid under editions.");
 5559|      0|    }
 5560|     47|  }
 5561|     47|  InferLegacyProtoFeatures(proto, *options, edition, base_features);
 5562|       |
 5563|     47|  if (base_features.ByteSizeLong() == 0 && !force_merge) {
  ------------------
  |  Branch (5563:7): [True: 47, False: 0]
  |  Branch (5563:44): [True: 47, False: 0]
  ------------------
 5564|       |    // Nothing to merge, and we aren't forcing it.
 5565|     47|    descriptor->merged_features_ = &parent_features;
 5566|     47|    return;
 5567|     47|  }
 5568|       |
 5569|       |  // Calculate the merged features for this target.
 5570|      0|  absl::StatusOr<FeatureSet> merged =
 5571|      0|      feature_resolver_->MergeFeatures(parent_features, base_features);
 5572|      0|  if (!merged.ok()) {
  ------------------
  |  Branch (5572:7): [True: 0, False: 0]
  ------------------
 5573|      0|    AddError(descriptor->name(), proto, error_location,
 5574|      0|             [&] { return std::string(merged.status().message()); });
 5575|      0|    return;
 5576|      0|  }
 5577|       |
 5578|      0|  descriptor->merged_features_ = tables_->InternFeatureSet(*std::move(merged));
 5579|      0|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117GetParentFeaturesEPKNS0_10DescriptorE:
 1146|     47|const FeatureSet& GetParentFeatures(const Descriptor* message) {
 1147|     47|  if (message->containing_type() == nullptr) {
  ------------------
  |  Branch (1147:7): [True: 37, False: 10]
  ------------------
 1148|     37|    return internal::InternalFeatureHelper::GetFeatures(*message->file());
 1149|     37|  }
 1150|     10|  return internal::InternalFeatureHelper::GetFeatures(
 1151|     10|      *message->containing_type());
 1152|     47|}
descriptor.cc:_ZN6google8protobufL24InferLegacyProtoFeaturesINS0_15DescriptorProtoENS0_14MessageOptionsEEEvRKT_RKT0_NS0_7EditionERNS0_10FeatureSetE:
 5483|     47|                                     FeatureSet& features) {}
descriptor.cc:_ZZN6google8protobuf17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorEENK3$_4clINS0_15OneofDescriptorENS0_20OneofDescriptorProtoEEEDaRKT_RKT0_:
 6180|      2|          *result, proto, [&](const auto& descriptor, const auto& proto) {
 6181|      2|            using OptionsT =
 6182|      2|                typename std::remove_const<typename std::remove_pointer<
 6183|      2|                    decltype(descriptor.options_)>::type>::type;
 6184|      2|            using DescriptorT =
 6185|      2|                typename std::remove_const<typename std::remove_reference<
 6186|      2|                    decltype(descriptor)>::type>::type;
 6187|       |
 6188|      2|            ResolveFeatures(
 6189|      2|                proto, const_cast<DescriptorT*>(&descriptor),
 6190|      2|                const_cast<  // NOLINT(google3-runtime-proto-const-cast)
 6191|      2|                    OptionsT*>(descriptor.options_),
 6192|      2|                alloc);
 6193|      2|          });
_ZN6google8protobuf17DescriptorBuilder15ResolveFeaturesINS0_15OneofDescriptorEEEvRKNT_5ProtoEPS4_PNS4_11OptionsTypeERNS0_8internal13FlatAllocatorE:
 5585|      2|    internal::FlatAllocator& alloc) {
 5586|      2|  ResolveFeaturesImpl(descriptor->file()->edition(), proto, descriptor, options,
 5587|      2|                      alloc, DescriptorPool::ErrorCollector::NAME);
 5588|      2|}
_ZN6google8protobuf17DescriptorBuilder19ResolveFeaturesImplINS0_15OneofDescriptorEEEvNS0_7EditionERKNT_5ProtoEPS5_PNS5_11OptionsTypeERNS0_8internal13FlatAllocatorENS0_14DescriptorPool14ErrorCollector13ErrorLocationEb:
 5537|      2|    bool force_merge) {
 5538|      2|  const FeatureSet& parent_features = GetParentFeatures(descriptor);
 5539|      2|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5540|      2|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5541|       |
 5542|      2|  ABSL_CHECK(feature_resolver_.has_value());
  ------------------
  |  |   41|      2|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      4|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      2|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      4|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      4|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      2|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      4|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 2]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      4|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      4|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5543|       |
 5544|      2|  if (options->has_features()) {
  ------------------
  |  Branch (5544:7): [True: 0, False: 2]
  ------------------
 5545|       |    // Remove the features from the child's options proto to avoid leaking
 5546|       |    // internal details.
 5547|      0|    descriptor->proto_features_ =
 5548|      0|        tables_->InternFeatureSet(std::move(*options->mutable_features()));
 5549|      0|    options->clear_features();
 5550|      0|  }
 5551|       |
 5552|      2|  FeatureSet base_features = *descriptor->proto_features_;
 5553|       |
 5554|       |  // Handle feature inference from proto2/proto3.
 5555|      2|  if (IsLegacyEdition(edition)) {
  ------------------
  |  Branch (5555:7): [True: 2, False: 0]
  ------------------
 5556|      2|    if (descriptor->proto_features_ != &FeatureSet::default_instance()) {
  ------------------
  |  Branch (5556:9): [True: 0, False: 2]
  ------------------
 5557|      0|      AddError(descriptor->name(), proto, error_location,
 5558|      0|               "Features are only valid under editions.");
 5559|      0|    }
 5560|      2|  }
 5561|      2|  InferLegacyProtoFeatures(proto, *options, edition, base_features);
 5562|       |
 5563|      2|  if (base_features.ByteSizeLong() == 0 && !force_merge) {
  ------------------
  |  Branch (5563:7): [True: 2, False: 0]
  |  Branch (5563:44): [True: 2, False: 0]
  ------------------
 5564|       |    // Nothing to merge, and we aren't forcing it.
 5565|      2|    descriptor->merged_features_ = &parent_features;
 5566|      2|    return;
 5567|      2|  }
 5568|       |
 5569|       |  // Calculate the merged features for this target.
 5570|      0|  absl::StatusOr<FeatureSet> merged =
 5571|      0|      feature_resolver_->MergeFeatures(parent_features, base_features);
 5572|      0|  if (!merged.ok()) {
  ------------------
  |  Branch (5572:7): [True: 0, False: 0]
  ------------------
 5573|      0|    AddError(descriptor->name(), proto, error_location,
 5574|      0|             [&] { return std::string(merged.status().message()); });
 5575|      0|    return;
 5576|      0|  }
 5577|       |
 5578|      0|  descriptor->merged_features_ = tables_->InternFeatureSet(*std::move(merged));
 5579|      0|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117GetParentFeaturesEPKNS0_15OneofDescriptorE:
 1154|      2|const FeatureSet& GetParentFeatures(const OneofDescriptor* oneof) {
 1155|      2|  return internal::InternalFeatureHelper::GetFeatures(
 1156|      2|      *oneof->containing_type());
 1157|      2|}
descriptor.cc:_ZN6google8protobufL24InferLegacyProtoFeaturesINS0_20OneofDescriptorProtoENS0_12OneofOptionsEEEvRKT_RKT0_NS0_7EditionERNS0_10FeatureSetE:
 5483|      2|                                     FeatureSet& features) {}
descriptor.cc:_ZZN6google8protobuf17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorEENK3$_4clINS0_10Descriptor14ExtensionRangeENS0_30DescriptorProto_ExtensionRangeEEEDaRKT_RKT0_:
 6180|     14|          *result, proto, [&](const auto& descriptor, const auto& proto) {
 6181|     14|            using OptionsT =
 6182|     14|                typename std::remove_const<typename std::remove_pointer<
 6183|     14|                    decltype(descriptor.options_)>::type>::type;
 6184|     14|            using DescriptorT =
 6185|     14|                typename std::remove_const<typename std::remove_reference<
 6186|     14|                    decltype(descriptor)>::type>::type;
 6187|       |
 6188|     14|            ResolveFeatures(
 6189|     14|                proto, const_cast<DescriptorT*>(&descriptor),
 6190|     14|                const_cast<  // NOLINT(google3-runtime-proto-const-cast)
 6191|     14|                    OptionsT*>(descriptor.options_),
 6192|     14|                alloc);
 6193|     14|          });
_ZN6google8protobuf17DescriptorBuilder15ResolveFeaturesINS0_10Descriptor14ExtensionRangeEEEvRKNT_5ProtoEPS5_PNS5_11OptionsTypeERNS0_8internal13FlatAllocatorE:
 5585|     14|    internal::FlatAllocator& alloc) {
 5586|     14|  ResolveFeaturesImpl(descriptor->file()->edition(), proto, descriptor, options,
 5587|     14|                      alloc, DescriptorPool::ErrorCollector::NAME);
 5588|     14|}
_ZN6google8protobuf17DescriptorBuilder19ResolveFeaturesImplINS0_10Descriptor14ExtensionRangeEEEvNS0_7EditionERKNT_5ProtoEPS6_PNS6_11OptionsTypeERNS0_8internal13FlatAllocatorENS0_14DescriptorPool14ErrorCollector13ErrorLocationEb:
 5537|     14|    bool force_merge) {
 5538|     14|  const FeatureSet& parent_features = GetParentFeatures(descriptor);
 5539|     14|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5540|     14|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5541|       |
 5542|     14|  ABSL_CHECK(feature_resolver_.has_value());
  ------------------
  |  |   41|     14|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     28|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     14|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     28|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     28|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 14, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     14|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 14]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     28|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 14, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 14]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 14]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     28|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     28|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5543|       |
 5544|     14|  if (options->has_features()) {
  ------------------
  |  Branch (5544:7): [True: 0, False: 14]
  ------------------
 5545|       |    // Remove the features from the child's options proto to avoid leaking
 5546|       |    // internal details.
 5547|      0|    descriptor->proto_features_ =
 5548|      0|        tables_->InternFeatureSet(std::move(*options->mutable_features()));
 5549|      0|    options->clear_features();
 5550|      0|  }
 5551|       |
 5552|     14|  FeatureSet base_features = *descriptor->proto_features_;
 5553|       |
 5554|       |  // Handle feature inference from proto2/proto3.
 5555|     14|  if (IsLegacyEdition(edition)) {
  ------------------
  |  Branch (5555:7): [True: 14, False: 0]
  ------------------
 5556|     14|    if (descriptor->proto_features_ != &FeatureSet::default_instance()) {
  ------------------
  |  Branch (5556:9): [True: 0, False: 14]
  ------------------
 5557|      0|      AddError(descriptor->name(), proto, error_location,
 5558|      0|               "Features are only valid under editions.");
 5559|      0|    }
 5560|     14|  }
 5561|     14|  InferLegacyProtoFeatures(proto, *options, edition, base_features);
 5562|       |
 5563|     14|  if (base_features.ByteSizeLong() == 0 && !force_merge) {
  ------------------
  |  Branch (5563:7): [True: 14, False: 0]
  |  Branch (5563:44): [True: 14, False: 0]
  ------------------
 5564|       |    // Nothing to merge, and we aren't forcing it.
 5565|     14|    descriptor->merged_features_ = &parent_features;
 5566|     14|    return;
 5567|     14|  }
 5568|       |
 5569|       |  // Calculate the merged features for this target.
 5570|      0|  absl::StatusOr<FeatureSet> merged =
 5571|      0|      feature_resolver_->MergeFeatures(parent_features, base_features);
 5572|      0|  if (!merged.ok()) {
  ------------------
  |  Branch (5572:7): [True: 0, False: 0]
  ------------------
 5573|      0|    AddError(descriptor->name(), proto, error_location,
 5574|      0|             [&] { return std::string(merged.status().message()); });
 5575|      0|    return;
 5576|      0|  }
 5577|       |
 5578|      0|  descriptor->merged_features_ = tables_->InternFeatureSet(*std::move(merged));
 5579|      0|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117GetParentFeaturesEPKNS0_10Descriptor14ExtensionRangeE:
 1159|     14|const FeatureSet& GetParentFeatures(const Descriptor::ExtensionRange* range) {
 1160|     14|  return internal::InternalFeatureHelper::GetFeatures(
 1161|     14|      *range->containing_type());
 1162|     14|}
descriptor.cc:_ZN6google8protobufL24InferLegacyProtoFeaturesINS0_30DescriptorProto_ExtensionRangeENS0_21ExtensionRangeOptionsEEEvRKT_RKT0_NS0_7EditionERNS0_10FeatureSetE:
 5483|     14|                                     FeatureSet& features) {}
descriptor.cc:_ZZN6google8protobuf17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorEENK3$_4clINS0_14EnumDescriptorENS0_19EnumDescriptorProtoEEEDaRKT_RKT0_:
 6180|     24|          *result, proto, [&](const auto& descriptor, const auto& proto) {
 6181|     24|            using OptionsT =
 6182|     24|                typename std::remove_const<typename std::remove_pointer<
 6183|     24|                    decltype(descriptor.options_)>::type>::type;
 6184|     24|            using DescriptorT =
 6185|     24|                typename std::remove_const<typename std::remove_reference<
 6186|     24|                    decltype(descriptor)>::type>::type;
 6187|       |
 6188|     24|            ResolveFeatures(
 6189|     24|                proto, const_cast<DescriptorT*>(&descriptor),
 6190|     24|                const_cast<  // NOLINT(google3-runtime-proto-const-cast)
 6191|     24|                    OptionsT*>(descriptor.options_),
 6192|     24|                alloc);
 6193|     24|          });
_ZN6google8protobuf17DescriptorBuilder15ResolveFeaturesINS0_14EnumDescriptorEEEvRKNT_5ProtoEPS4_PNS4_11OptionsTypeERNS0_8internal13FlatAllocatorE:
 5585|     24|    internal::FlatAllocator& alloc) {
 5586|     24|  ResolveFeaturesImpl(descriptor->file()->edition(), proto, descriptor, options,
 5587|     24|                      alloc, DescriptorPool::ErrorCollector::NAME);
 5588|     24|}
_ZN6google8protobuf17DescriptorBuilder19ResolveFeaturesImplINS0_14EnumDescriptorEEEvNS0_7EditionERKNT_5ProtoEPS5_PNS5_11OptionsTypeERNS0_8internal13FlatAllocatorENS0_14DescriptorPool14ErrorCollector13ErrorLocationEb:
 5537|     24|    bool force_merge) {
 5538|     24|  const FeatureSet& parent_features = GetParentFeatures(descriptor);
 5539|     24|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5540|     24|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5541|       |
 5542|     24|  ABSL_CHECK(feature_resolver_.has_value());
  ------------------
  |  |   41|     24|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     48|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     24|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     48|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     48|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 24, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     24|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 24]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     48|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 24, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 24]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 24]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     48|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     48|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5543|       |
 5544|     24|  if (options->has_features()) {
  ------------------
  |  Branch (5544:7): [True: 0, False: 24]
  ------------------
 5545|       |    // Remove the features from the child's options proto to avoid leaking
 5546|       |    // internal details.
 5547|      0|    descriptor->proto_features_ =
 5548|      0|        tables_->InternFeatureSet(std::move(*options->mutable_features()));
 5549|      0|    options->clear_features();
 5550|      0|  }
 5551|       |
 5552|     24|  FeatureSet base_features = *descriptor->proto_features_;
 5553|       |
 5554|       |  // Handle feature inference from proto2/proto3.
 5555|     24|  if (IsLegacyEdition(edition)) {
  ------------------
  |  Branch (5555:7): [True: 24, False: 0]
  ------------------
 5556|     24|    if (descriptor->proto_features_ != &FeatureSet::default_instance()) {
  ------------------
  |  Branch (5556:9): [True: 0, False: 24]
  ------------------
 5557|      0|      AddError(descriptor->name(), proto, error_location,
 5558|      0|               "Features are only valid under editions.");
 5559|      0|    }
 5560|     24|  }
 5561|     24|  InferLegacyProtoFeatures(proto, *options, edition, base_features);
 5562|       |
 5563|     24|  if (base_features.ByteSizeLong() == 0 && !force_merge) {
  ------------------
  |  Branch (5563:7): [True: 24, False: 0]
  |  Branch (5563:44): [True: 24, False: 0]
  ------------------
 5564|       |    // Nothing to merge, and we aren't forcing it.
 5565|     24|    descriptor->merged_features_ = &parent_features;
 5566|     24|    return;
 5567|     24|  }
 5568|       |
 5569|       |  // Calculate the merged features for this target.
 5570|      0|  absl::StatusOr<FeatureSet> merged =
 5571|      0|      feature_resolver_->MergeFeatures(parent_features, base_features);
 5572|      0|  if (!merged.ok()) {
  ------------------
  |  Branch (5572:7): [True: 0, False: 0]
  ------------------
 5573|      0|    AddError(descriptor->name(), proto, error_location,
 5574|      0|             [&] { return std::string(merged.status().message()); });
 5575|      0|    return;
 5576|      0|  }
 5577|       |
 5578|      0|  descriptor->merged_features_ = tables_->InternFeatureSet(*std::move(merged));
 5579|      0|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117GetParentFeaturesEPKNS0_14EnumDescriptorE:
 1179|     24|const FeatureSet& GetParentFeatures(const EnumDescriptor* enm) {
 1180|     24|  if (enm->containing_type() == nullptr) {
  ------------------
  |  Branch (1180:7): [True: 7, False: 17]
  ------------------
 1181|      7|    return internal::InternalFeatureHelper::GetFeatures(*enm->file());
 1182|      7|  }
 1183|     17|  return internal::InternalFeatureHelper::GetFeatures(*enm->containing_type());
 1184|     24|}
descriptor.cc:_ZN6google8protobufL24InferLegacyProtoFeaturesINS0_19EnumDescriptorProtoENS0_11EnumOptionsEEEvRKT_RKT0_NS0_7EditionERNS0_10FeatureSetE:
 5483|     24|                                     FeatureSet& features) {}
descriptor.cc:_ZZN6google8protobuf17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorEENK3$_4clINS0_19EnumValueDescriptorENS0_24EnumValueDescriptorProtoEEEDaRKT_RKT0_:
 6180|    190|          *result, proto, [&](const auto& descriptor, const auto& proto) {
 6181|    190|            using OptionsT =
 6182|    190|                typename std::remove_const<typename std::remove_pointer<
 6183|    190|                    decltype(descriptor.options_)>::type>::type;
 6184|    190|            using DescriptorT =
 6185|    190|                typename std::remove_const<typename std::remove_reference<
 6186|    190|                    decltype(descriptor)>::type>::type;
 6187|       |
 6188|    190|            ResolveFeatures(
 6189|    190|                proto, const_cast<DescriptorT*>(&descriptor),
 6190|    190|                const_cast<  // NOLINT(google3-runtime-proto-const-cast)
 6191|    190|                    OptionsT*>(descriptor.options_),
 6192|    190|                alloc);
 6193|    190|          });
_ZN6google8protobuf17DescriptorBuilder15ResolveFeaturesINS0_19EnumValueDescriptorEEEvRKNT_5ProtoEPS4_PNS4_11OptionsTypeERNS0_8internal13FlatAllocatorE:
 5585|    190|    internal::FlatAllocator& alloc) {
 5586|    190|  ResolveFeaturesImpl(descriptor->file()->edition(), proto, descriptor, options,
 5587|    190|                      alloc, DescriptorPool::ErrorCollector::NAME);
 5588|    190|}
_ZN6google8protobuf17DescriptorBuilder19ResolveFeaturesImplINS0_19EnumValueDescriptorEEEvNS0_7EditionERKNT_5ProtoEPS5_PNS5_11OptionsTypeERNS0_8internal13FlatAllocatorENS0_14DescriptorPool14ErrorCollector13ErrorLocationEb:
 5537|    190|    bool force_merge) {
 5538|    190|  const FeatureSet& parent_features = GetParentFeatures(descriptor);
 5539|    190|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5540|    190|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5541|       |
 5542|    190|  ABSL_CHECK(feature_resolver_.has_value());
  ------------------
  |  |   41|    190|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|    380|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    190|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    380|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    380|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 190, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|    190|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 190]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    380|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 190, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 190]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 190]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|    380|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|    380|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5543|       |
 5544|    190|  if (options->has_features()) {
  ------------------
  |  Branch (5544:7): [True: 0, False: 190]
  ------------------
 5545|       |    // Remove the features from the child's options proto to avoid leaking
 5546|       |    // internal details.
 5547|      0|    descriptor->proto_features_ =
 5548|      0|        tables_->InternFeatureSet(std::move(*options->mutable_features()));
 5549|      0|    options->clear_features();
 5550|      0|  }
 5551|       |
 5552|    190|  FeatureSet base_features = *descriptor->proto_features_;
 5553|       |
 5554|       |  // Handle feature inference from proto2/proto3.
 5555|    190|  if (IsLegacyEdition(edition)) {
  ------------------
  |  Branch (5555:7): [True: 190, False: 0]
  ------------------
 5556|    190|    if (descriptor->proto_features_ != &FeatureSet::default_instance()) {
  ------------------
  |  Branch (5556:9): [True: 0, False: 190]
  ------------------
 5557|      0|      AddError(descriptor->name(), proto, error_location,
 5558|      0|               "Features are only valid under editions.");
 5559|      0|    }
 5560|    190|  }
 5561|    190|  InferLegacyProtoFeatures(proto, *options, edition, base_features);
 5562|       |
 5563|    190|  if (base_features.ByteSizeLong() == 0 && !force_merge) {
  ------------------
  |  Branch (5563:7): [True: 190, False: 0]
  |  Branch (5563:44): [True: 190, False: 0]
  ------------------
 5564|       |    // Nothing to merge, and we aren't forcing it.
 5565|    190|    descriptor->merged_features_ = &parent_features;
 5566|    190|    return;
 5567|    190|  }
 5568|       |
 5569|       |  // Calculate the merged features for this target.
 5570|      0|  absl::StatusOr<FeatureSet> merged =
 5571|      0|      feature_resolver_->MergeFeatures(parent_features, base_features);
 5572|      0|  if (!merged.ok()) {
  ------------------
  |  Branch (5572:7): [True: 0, False: 0]
  ------------------
 5573|      0|    AddError(descriptor->name(), proto, error_location,
 5574|      0|             [&] { return std::string(merged.status().message()); });
 5575|      0|    return;
 5576|      0|  }
 5577|       |
 5578|      0|  descriptor->merged_features_ = tables_->InternFeatureSet(*std::move(merged));
 5579|      0|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117GetParentFeaturesEPKNS0_19EnumValueDescriptorE:
 1186|    190|const FeatureSet& GetParentFeatures(const EnumValueDescriptor* value) {
 1187|    190|  return internal::InternalFeatureHelper::GetFeatures(*value->type());
 1188|    190|}
descriptor.cc:_ZN6google8protobufL24InferLegacyProtoFeaturesINS0_24EnumValueDescriptorProtoENS0_16EnumValueOptionsEEEvRKT_RKT0_NS0_7EditionERNS0_10FeatureSetE:
 5483|    190|                                     FeatureSet& features) {}
descriptor.cc:_ZZN6google8protobuf17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorEENK3$_4clINS0_15FieldDescriptorENS0_20FieldDescriptorProtoEEEDaRKT_RKT0_:
 6180|    235|          *result, proto, [&](const auto& descriptor, const auto& proto) {
 6181|    235|            using OptionsT =
 6182|    235|                typename std::remove_const<typename std::remove_pointer<
 6183|    235|                    decltype(descriptor.options_)>::type>::type;
 6184|    235|            using DescriptorT =
 6185|    235|                typename std::remove_const<typename std::remove_reference<
 6186|    235|                    decltype(descriptor)>::type>::type;
 6187|       |
 6188|    235|            ResolveFeatures(
 6189|    235|                proto, const_cast<DescriptorT*>(&descriptor),
 6190|    235|                const_cast<  // NOLINT(google3-runtime-proto-const-cast)
 6191|    235|                    OptionsT*>(descriptor.options_),
 6192|    235|                alloc);
 6193|    235|          });
_ZN6google8protobuf17DescriptorBuilder15ResolveFeaturesINS0_15FieldDescriptorEEEvRKNT_5ProtoEPS4_PNS4_11OptionsTypeERNS0_8internal13FlatAllocatorE:
 5585|    235|    internal::FlatAllocator& alloc) {
 5586|    235|  ResolveFeaturesImpl(descriptor->file()->edition(), proto, descriptor, options,
 5587|    235|                      alloc, DescriptorPool::ErrorCollector::NAME);
 5588|    235|}
_ZN6google8protobuf17DescriptorBuilder19ResolveFeaturesImplINS0_15FieldDescriptorEEEvNS0_7EditionERKNT_5ProtoEPS5_PNS5_11OptionsTypeERNS0_8internal13FlatAllocatorENS0_14DescriptorPool14ErrorCollector13ErrorLocationEb:
 5537|    235|    bool force_merge) {
 5538|    235|  const FeatureSet& parent_features = GetParentFeatures(descriptor);
 5539|    235|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5540|    235|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5541|       |
 5542|    235|  ABSL_CHECK(feature_resolver_.has_value());
  ------------------
  |  |   41|    235|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|    470|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    235|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    470|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    470|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 235, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|    235|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 235]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    470|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 235, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 235]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 235]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|    470|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|    470|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5543|       |
 5544|    235|  if (options->has_features()) {
  ------------------
  |  Branch (5544:7): [True: 0, False: 235]
  ------------------
 5545|       |    // Remove the features from the child's options proto to avoid leaking
 5546|       |    // internal details.
 5547|      0|    descriptor->proto_features_ =
 5548|      0|        tables_->InternFeatureSet(std::move(*options->mutable_features()));
 5549|      0|    options->clear_features();
 5550|      0|  }
 5551|       |
 5552|    235|  FeatureSet base_features = *descriptor->proto_features_;
 5553|       |
 5554|       |  // Handle feature inference from proto2/proto3.
 5555|    235|  if (IsLegacyEdition(edition)) {
  ------------------
  |  Branch (5555:7): [True: 235, False: 0]
  ------------------
 5556|    235|    if (descriptor->proto_features_ != &FeatureSet::default_instance()) {
  ------------------
  |  Branch (5556:9): [True: 0, False: 235]
  ------------------
 5557|      0|      AddError(descriptor->name(), proto, error_location,
 5558|      0|               "Features are only valid under editions.");
 5559|      0|    }
 5560|    235|  }
 5561|    235|  InferLegacyProtoFeatures(proto, *options, edition, base_features);
 5562|       |
 5563|    235|  if (base_features.ByteSizeLong() == 0 && !force_merge) {
  ------------------
  |  Branch (5563:7): [True: 0, False: 235]
  |  Branch (5563:44): [True: 0, False: 0]
  ------------------
 5564|       |    // Nothing to merge, and we aren't forcing it.
 5565|      0|    descriptor->merged_features_ = &parent_features;
 5566|      0|    return;
 5567|      0|  }
 5568|       |
 5569|       |  // Calculate the merged features for this target.
 5570|    235|  absl::StatusOr<FeatureSet> merged =
 5571|    235|      feature_resolver_->MergeFeatures(parent_features, base_features);
 5572|    235|  if (!merged.ok()) {
  ------------------
  |  Branch (5572:7): [True: 0, False: 235]
  ------------------
 5573|      0|    AddError(descriptor->name(), proto, error_location,
 5574|      0|             [&] { return std::string(merged.status().message()); });
 5575|      0|    return;
 5576|      0|  }
 5577|       |
 5578|    235|  descriptor->merged_features_ = tables_->InternFeatureSet(*std::move(merged));
 5579|    235|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117GetParentFeaturesEPKNS0_15FieldDescriptorE:
 1164|    235|const FeatureSet& GetParentFeatures(const FieldDescriptor* field) {
 1165|    235|  if (field->containing_oneof() != nullptr) {
  ------------------
  |  Branch (1165:7): [True: 5, False: 230]
  ------------------
 1166|      5|    return internal::InternalFeatureHelper::GetFeatures(
 1167|      5|        *field->containing_oneof());
 1168|    230|  } else if (field->is_extension()) {
  ------------------
  |  Branch (1168:14): [True: 1, False: 229]
  ------------------
 1169|      1|    if (field->extension_scope() == nullptr) {
  ------------------
  |  Branch (1169:9): [True: 1, False: 0]
  ------------------
 1170|      1|      return internal::InternalFeatureHelper::GetFeatures(*field->file());
 1171|      1|    }
 1172|      0|    return internal::InternalFeatureHelper::GetFeatures(
 1173|      0|        *field->extension_scope());
 1174|      1|  }
 1175|    229|  return internal::InternalFeatureHelper::GetFeatures(
 1176|    229|      *field->containing_type());
 1177|    235|}
descriptor.cc:_ZN6google8protobufL24InferLegacyProtoFeaturesERKNS0_20FieldDescriptorProtoERKNS0_12FieldOptionsENS0_7EditionERNS0_10FeatureSetE:
 5487|    235|                                     Edition edition, FeatureSet& features) {
 5488|    235|  if (!features.MutableExtension(pb::cpp)->has_string_type()) {
  ------------------
  |  Branch (5488:7): [True: 235, False: 0]
  ------------------
 5489|    235|    if (options.ctype() == FieldOptions::CORD) {
  ------------------
  |  Branch (5489:9): [True: 0, False: 235]
  ------------------
 5490|      0|      features.MutableExtension(pb::cpp)->set_string_type(
 5491|      0|          pb::CppFeatures::CORD);
 5492|      0|    }
 5493|    235|  }
 5494|       |
 5495|       |  // Everything below is specifically for proto2/proto.
 5496|    235|  if (!IsLegacyEdition(edition)) return;
  ------------------
  |  Branch (5496:7): [True: 0, False: 235]
  ------------------
 5497|       |
 5498|    235|  if (proto.label() == FieldDescriptorProto::LABEL_REQUIRED) {
  ------------------
  |  Branch (5498:7): [True: 2, False: 233]
  ------------------
 5499|      2|    features.set_field_presence(FeatureSet::LEGACY_REQUIRED);
 5500|      2|  }
 5501|    235|  if (proto.type() == FieldDescriptorProto::TYPE_GROUP) {
  ------------------
  |  Branch (5501:7): [True: 0, False: 235]
  ------------------
 5502|      0|    features.set_message_encoding(FeatureSet::DELIMITED);
 5503|      0|  }
 5504|    235|  if (options.packed()) {
  ------------------
  |  Branch (5504:7): [True: 3, False: 232]
  ------------------
 5505|      3|    features.set_repeated_field_encoding(FeatureSet::PACKED);
 5506|      3|  }
 5507|    235|  if (edition == Edition::EDITION_PROTO3) {
  ------------------
  |  Branch (5507:7): [True: 61, False: 174]
  ------------------
 5508|     61|    if (options.has_packed() && !options.packed()) {
  ------------------
  |  Branch (5508:9): [True: 0, False: 61]
  |  Branch (5508:33): [True: 0, False: 0]
  ------------------
 5509|      0|      features.set_repeated_field_encoding(FeatureSet::EXPANDED);
 5510|      0|    }
 5511|     61|  }
 5512|    235|}
descriptor.cc:_ZZN6google8protobuf17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorEENK3$_5clERKNS0_15FieldDescriptorE:
 6196|    235|    internal::VisitDescriptors(*result, [&](const FieldDescriptor& field) {
 6197|    235|      if (result->edition() >= Edition::EDITION_2024 &&
  ------------------
  |  Branch (6197:11): [True: 0, False: 235]
  ------------------
 6198|      0|          field.options().has_ctype()) {
  ------------------
  |  Branch (6198:11): [True: 0, False: 0]
  ------------------
 6199|       |        // "ctype" is no longer supported in edition 2024 and beyond.
 6200|      0|        AddError(
 6201|      0|            field.full_name(), proto, DescriptorPool::ErrorCollector::NAME,
 6202|      0|            "ctype option is not allowed under edition 2024 and beyond. Use "
 6203|      0|            "the feature string_type = VIEW|CORD|STRING|... instead.");
 6204|      0|      }
 6205|    235|      EnforceCTypeStringTypeConsistency(
 6206|    235|          field.file()->edition(), field.cpp_type(),
 6207|    235|          field.merged_features_->GetExtension(pb::cpp),
 6208|    235|          const_cast<  // NOLINT(google3-runtime-proto-const-cast)
 6209|    235|              FieldOptions&>(*field.options_));
 6210|    235|    });
descriptor.cc:_ZN6google8protobufL33EnforceCTypeStringTypeConsistencyENS0_7EditionENS0_8internal19FieldDescriptorLite7CppTypeERKN2pb11CppFeaturesERNS0_12FieldOptionsE:
 5518|    235|    const pb::CppFeatures& cpp_features, FieldOptions& options) {
 5519|    235|  if (&options == &FieldOptions::default_instance()) return;
  ------------------
  |  Branch (5519:7): [True: 218, False: 17]
  ------------------
 5520|     17|  if (type == FieldDescriptor::CPPTYPE_STRING) {
  ------------------
  |  Branch (5520:7): [True: 0, False: 17]
  ------------------
 5521|      0|    switch (cpp_features.string_type()) {
 5522|      0|      case pb::CppFeatures::CORD:
  ------------------
  |  Branch (5522:7): [True: 0, False: 0]
  ------------------
 5523|      0|        options.set_ctype(FieldOptions::CORD);
 5524|      0|        break;
 5525|      0|      default:
  ------------------
  |  Branch (5525:7): [True: 0, False: 0]
  ------------------
 5526|      0|        break;
 5527|      0|    }
 5528|      0|  }
 5529|     17|}
descriptor.cc:_ZZN6google8protobuf17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorEENK3$_6clERKNS0_15FieldDescriptorERKNS0_20FieldDescriptorProtoE:
 6215|    235|        [&](const FieldDescriptor& field, const FieldDescriptorProto& proto) {
 6216|    235|          PostProcessFieldFeatures(const_cast<FieldDescriptor&>(field), proto);
 6217|    235|        });
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE15AllocateStringsIJRKN4absl12lts_2024011611string_viewES9_EEEPKS9_DpOT_:
  416|    183|  const std::string* AllocateStrings(In&&... in) {
  417|    183|    std::string* strings = AllocateArray<std::string>(sizeof...(in));
  418|    183|    std::string* res = strings;
  419|    183|    Fold({(*strings++ = std::string(std::forward<In>(in)))...});
  420|    183|    return res;
  421|    183|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayINS0_15OneofDescriptorEEEPT_i:
  400|     47|  U* AllocateArray(int array_size) {
  401|     47|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|     47|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|     47|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|     47|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     94|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     47|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     94|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     94|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 47, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     47|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 47]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     94|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 47, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 47]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 47]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     94|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     94|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|     47|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|     47|    int& used = used_.template Get<TypeToUse>();
  409|     47|    U* res = reinterpret_cast<U*>(data + used);
  410|     47|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 47, Folded]
  ------------------
  411|     47|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|     47|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|     47|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|     47|  while (                                                                      \
  |  |  |  |  |  |   62|     47|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 47]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|     47|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|     47|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|     47|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|     47|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|     47|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|     47|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|     47|    return res;
  413|     47|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayINS0_10Descriptor13ReservedRangeEEEPT_i:
  400|     47|  U* AllocateArray(int array_size) {
  401|     47|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|     47|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|     47|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|     47|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     94|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     47|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     94|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     94|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 47, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     47|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 47]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     94|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 47, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 47]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 47]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     94|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     94|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|     47|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|     47|    int& used = used_.template Get<TypeToUse>();
  409|     47|    U* res = reinterpret_cast<U*>(data + used);
  410|     47|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 47, Folded]
  ------------------
  411|     47|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|     47|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|     47|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|     47|  while (                                                                      \
  |  |  |  |  |  |   62|     47|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 47]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|     47|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|     47|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|     47|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|     47|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|     47|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|     47|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|     47|    return res;
  413|     47|  }
_ZN6google8protobuf17DescriptorBuilder15AllocateOptionsINS0_10DescriptorEEEvRKNT_5ProtoEPS4_iN4absl12lts_2024011611string_viewERNS0_8internal13FlatAllocatorE:
 5396|     47|    internal::FlatAllocator& alloc) {
 5397|     47|  std::vector<int> options_path;
 5398|     47|  descriptor->GetLocationPath(&options_path);
 5399|     47|  options_path.push_back(options_field_tag);
 5400|     47|  auto options = AllocateOptionsImpl<DescriptorT>(
 5401|     47|      descriptor->full_name(), descriptor->full_name(), proto, options_path,
 5402|     47|      option_name, alloc);
 5403|     47|  descriptor->options_ = options;
 5404|     47|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5405|     47|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5406|     47|}
_ZN6google8protobuf17DescriptorBuilder19AllocateOptionsImplINS0_10DescriptorEEEPKNT_11OptionsTypeEN4absl12lts_2024011611string_viewESA_RKNS4_5ProtoENS9_4SpanIKiEESA_RNS0_8internal13FlatAllocatorE:
 5428|     47|    internal::FlatAllocator& alloc) {
 5429|     47|  if (!proto.has_options()) {
  ------------------
  |  Branch (5429:7): [True: 47, False: 0]
  ------------------
 5430|     47|    return &DescriptorT::OptionsType::default_instance();
 5431|     47|  }
 5432|      0|  const typename DescriptorT::OptionsType& orig_options = proto.options();
 5433|       |
 5434|      0|  auto* options = alloc.AllocateArray<typename DescriptorT::OptionsType>(1);
 5435|       |
 5436|      0|  if (!orig_options.IsInitialized()) {
  ------------------
  |  Branch (5436:7): [True: 0, False: 0]
  ------------------
 5437|      0|    AddError(absl::StrCat(name_scope, ".", element_name), orig_options,
 5438|      0|             DescriptorPool::ErrorCollector::OPTION_NAME,
 5439|      0|             "Uninterpreted option is missing name or value.");
 5440|      0|    return &DescriptorT::OptionsType::default_instance();
 5441|      0|  }
 5442|       |
 5443|      0|  const bool parse_success =
 5444|      0|      internal::ParseNoReflection(orig_options.SerializeAsString(), *options);
 5445|      0|  ABSL_DCHECK(parse_success);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5446|       |
 5447|       |  // Don't add to options_to_interpret_ unless there were uninterpreted
 5448|       |  // options.  This not only avoids unnecessary work, but prevents a
 5449|       |  // bootstrapping problem when building descriptors for descriptor.proto.
 5450|       |  // descriptor.proto does not contain any uninterpreted options, but
 5451|       |  // attempting to interpret options anyway will cause
 5452|       |  // OptionsType::GetDescriptor() to be called which may then deadlock since
 5453|       |  // we're still trying to build it.
 5454|      0|  if (options->uninterpreted_option_size() > 0) {
  ------------------
  |  Branch (5454:7): [True: 0, False: 0]
  ------------------
 5455|      0|    options_to_interpret_.push_back(OptionsToInterpret(
 5456|      0|        name_scope, element_name, options_path, &orig_options, options));
 5457|      0|  }
 5458|       |
 5459|       |  // If the custom option is in unknown fields, no need to interpret it.
 5460|       |  // Remove the dependency file from unused_dependency.
 5461|      0|  const UnknownFieldSet& unknown_fields = orig_options.unknown_fields();
 5462|      0|  if (!unknown_fields.empty()) {
  ------------------
  |  Branch (5462:7): [True: 0, False: 0]
  ------------------
 5463|       |    // Can not use options->GetDescriptor() which may case deadlock.
 5464|      0|    Symbol msg_symbol = tables_->FindSymbol(option_name);
 5465|      0|    if (msg_symbol.type() == Symbol::MESSAGE) {
  ------------------
  |  Branch (5465:9): [True: 0, False: 0]
  ------------------
 5466|      0|      for (int i = 0; i < unknown_fields.field_count(); ++i) {
  ------------------
  |  Branch (5466:23): [True: 0, False: 0]
  ------------------
 5467|      0|        assert_mutex_held(pool_);
 5468|      0|        const FieldDescriptor* field =
 5469|      0|            pool_->InternalFindExtensionByNumberNoLock(
 5470|      0|                msg_symbol.descriptor(), unknown_fields.field(i).number());
 5471|      0|        if (field) {
  ------------------
  |  Branch (5471:13): [True: 0, False: 0]
  ------------------
 5472|      0|          unused_dependency_.erase(field->file());
 5473|      0|        }
 5474|      0|      }
 5475|      0|    }
 5476|      0|  }
 5477|      0|  return options;
 5478|      0|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayIPKS9_EEPT_i:
  400|     71|  U* AllocateArray(int array_size) {
  401|     71|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|     71|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|     71|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|     71|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|    142|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     71|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    142|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    142|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 71, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     71|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 71]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    142|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 71, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 71]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 71]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|    142|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|    142|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|     71|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|     71|    int& used = used_.template Get<TypeToUse>();
  409|     71|    U* res = reinterpret_cast<U*>(data + used);
  410|     71|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 71, Folded]
  ------------------
  411|     71|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|     71|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|     71|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|     71|  while (                                                                      \
  |  |  |  |  |  |   62|     71|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 71]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|     71|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|     71|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|     71|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|     71|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|     71|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|     71|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|     71|    return res;
  413|     71|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE18AllocateFieldNamesEN4absl12lts_2024011611string_viewESP_PKS9_:
  470|    235|                                      const std::string* opt_json_name) {
  471|    235|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|    235|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|    470|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    235|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    470|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    470|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 235, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|    235|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 235]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    470|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 235, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 235]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 235]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|    470|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|    470|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  472|       |
  473|    235|    std::string full_name =
  474|    235|        scope.empty() ? std::string(name) : absl::StrCat(scope, ".", name);
  ------------------
  |  Branch (474:9): [True: 0, False: 235]
  ------------------
  475|       |
  476|       |    // Fast path for snake_case names, which follow the style guide.
  477|    235|    if (opt_json_name == nullptr) {
  ------------------
  |  Branch (477:9): [True: 235, False: 0]
  ------------------
  478|    235|      switch (GetFieldNameCase(name)) {
  479|    110|        case FieldNameCase::kAllLower:
  ------------------
  |  Branch (479:9): [True: 110, False: 125]
  ------------------
  480|       |          // Case 1: they are all the same.
  481|    110|          return {AllocateStrings(name, std::move(full_name)), 0, 0, 0};
  482|    125|        case FieldNameCase::kSnakeCase:
  ------------------
  |  Branch (482:9): [True: 125, False: 110]
  ------------------
  483|       |          // Case 2: name==lower, camel==json
  484|    125|          return {AllocateStrings(name, std::move(full_name),
  485|    125|                                  ToCamelCase(name, /* lower_first = */ true)),
  486|    125|                  0, 2, 2};
  487|      0|        default:
  ------------------
  |  Branch (487:9): [True: 0, False: 235]
  ------------------
  488|      0|          break;
  489|    235|      }
  490|    235|    }
  491|       |
  492|      0|    std::vector<std::string> names;
  493|      0|    names.emplace_back(name);
  494|      0|    names.push_back(std::move(full_name));
  495|       |
  496|      0|    const auto push_name = [&](std::string new_name) {
  497|      0|      for (size_t i = 0; i < names.size(); ++i) {
  498|       |        // Do not compare the full_name. It is unlikely to match, except in
  499|       |        // custom json_name. We are not taking this into account in
  500|       |        // PlanFieldNames so better to not try it.
  501|      0|        if (i == 1) continue;
  502|      0|        if (names[i] == new_name) return i;
  503|      0|      }
  504|      0|      names.push_back(std::move(new_name));
  505|      0|      return names.size() - 1;
  506|      0|    };
  507|       |
  508|      0|    FieldNamesResult result{nullptr, 0, 0, 0};
  509|       |
  510|      0|    std::string lowercase_name = std::string(name);
  511|      0|    absl::AsciiStrToLower(&lowercase_name);
  512|      0|    result.lowercase_index = push_name(std::move(lowercase_name));
  513|      0|    result.camelcase_index =
  514|      0|        push_name(ToCamelCase(name, /* lower_first = */ true));
  515|      0|    result.json_index =
  516|      0|        push_name(opt_json_name != nullptr ? *opt_json_name : ToJsonName(name));
  ------------------
  |  Branch (516:19): [True: 0, False: 0]
  ------------------
  517|       |
  518|      0|    std::string* all_names = AllocateArray<std::string>(names.size());
  519|      0|    result.array = all_names;
  520|      0|    std::move(names.begin(), names.end(), all_names);
  521|       |
  522|      0|    return result;
  523|    235|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE15AllocateStringsIJRKN4absl12lts_2024011611string_viewES9_S9_EEEPKS9_DpOT_:
  416|    125|  const std::string* AllocateStrings(In&&... in) {
  417|    125|    std::string* strings = AllocateArray<std::string>(sizeof...(in));
  418|    125|    std::string* res = strings;
  419|    125|    Fold({(*strings++ = std::string(std::forward<In>(in)))...});
  420|    125|    return res;
  421|    125|  }
_ZN6google8protobuf17DescriptorBuilder15AllocateOptionsINS0_15FieldDescriptorEEEvRKNT_5ProtoEPS4_iN4absl12lts_2024011611string_viewERNS0_8internal13FlatAllocatorE:
 5396|    235|    internal::FlatAllocator& alloc) {
 5397|    235|  std::vector<int> options_path;
 5398|    235|  descriptor->GetLocationPath(&options_path);
 5399|    235|  options_path.push_back(options_field_tag);
 5400|    235|  auto options = AllocateOptionsImpl<DescriptorT>(
 5401|    235|      descriptor->full_name(), descriptor->full_name(), proto, options_path,
 5402|    235|      option_name, alloc);
 5403|    235|  descriptor->options_ = options;
 5404|    235|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5405|    235|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5406|    235|}
_ZN6google8protobuf17DescriptorBuilder19AllocateOptionsImplINS0_15FieldDescriptorEEEPKNT_11OptionsTypeEN4absl12lts_2024011611string_viewESA_RKNS4_5ProtoENS9_4SpanIKiEESA_RNS0_8internal13FlatAllocatorE:
 5428|    235|    internal::FlatAllocator& alloc) {
 5429|    235|  if (!proto.has_options()) {
  ------------------
  |  Branch (5429:7): [True: 218, False: 17]
  ------------------
 5430|    218|    return &DescriptorT::OptionsType::default_instance();
 5431|    218|  }
 5432|     17|  const typename DescriptorT::OptionsType& orig_options = proto.options();
 5433|       |
 5434|     17|  auto* options = alloc.AllocateArray<typename DescriptorT::OptionsType>(1);
 5435|       |
 5436|     17|  if (!orig_options.IsInitialized()) {
  ------------------
  |  Branch (5436:7): [True: 0, False: 17]
  ------------------
 5437|      0|    AddError(absl::StrCat(name_scope, ".", element_name), orig_options,
 5438|      0|             DescriptorPool::ErrorCollector::OPTION_NAME,
 5439|      0|             "Uninterpreted option is missing name or value.");
 5440|      0|    return &DescriptorT::OptionsType::default_instance();
 5441|      0|  }
 5442|       |
 5443|     17|  const bool parse_success =
 5444|     17|      internal::ParseNoReflection(orig_options.SerializeAsString(), *options);
 5445|     17|  ABSL_DCHECK(parse_success);
  ------------------
  |  |   47|     17|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     17|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     34|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     17|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     34|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     34|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 17, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     17|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 17]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     17|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 17, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     34|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     34|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5446|       |
 5447|       |  // Don't add to options_to_interpret_ unless there were uninterpreted
 5448|       |  // options.  This not only avoids unnecessary work, but prevents a
 5449|       |  // bootstrapping problem when building descriptors for descriptor.proto.
 5450|       |  // descriptor.proto does not contain any uninterpreted options, but
 5451|       |  // attempting to interpret options anyway will cause
 5452|       |  // OptionsType::GetDescriptor() to be called which may then deadlock since
 5453|       |  // we're still trying to build it.
 5454|     17|  if (options->uninterpreted_option_size() > 0) {
  ------------------
  |  Branch (5454:7): [True: 0, False: 17]
  ------------------
 5455|      0|    options_to_interpret_.push_back(OptionsToInterpret(
 5456|      0|        name_scope, element_name, options_path, &orig_options, options));
 5457|      0|  }
 5458|       |
 5459|       |  // If the custom option is in unknown fields, no need to interpret it.
 5460|       |  // Remove the dependency file from unused_dependency.
 5461|     17|  const UnknownFieldSet& unknown_fields = orig_options.unknown_fields();
 5462|     17|  if (!unknown_fields.empty()) {
  ------------------
  |  Branch (5462:7): [True: 0, False: 17]
  ------------------
 5463|       |    // Can not use options->GetDescriptor() which may case deadlock.
 5464|      0|    Symbol msg_symbol = tables_->FindSymbol(option_name);
 5465|      0|    if (msg_symbol.type() == Symbol::MESSAGE) {
  ------------------
  |  Branch (5465:9): [True: 0, False: 0]
  ------------------
 5466|      0|      for (int i = 0; i < unknown_fields.field_count(); ++i) {
  ------------------
  |  Branch (5466:23): [True: 0, False: 0]
  ------------------
 5467|      0|        assert_mutex_held(pool_);
 5468|      0|        const FieldDescriptor* field =
 5469|      0|            pool_->InternalFindExtensionByNumberNoLock(
 5470|      0|                msg_symbol.descriptor(), unknown_fields.field(i).number());
 5471|      0|        if (field) {
  ------------------
  |  Branch (5471:13): [True: 0, False: 0]
  ------------------
 5472|      0|          unused_dependency_.erase(field->file());
 5473|      0|        }
 5474|      0|      }
 5475|      0|    }
 5476|      0|  }
 5477|     17|  return options;
 5478|     17|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayISE_EEPT_i:
  400|     17|  U* AllocateArray(int array_size) {
  401|     17|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|     17|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|     17|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|     17|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     34|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     17|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     34|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     34|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 17, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     17|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 17]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     34|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 17, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 17]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 17]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     34|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     34|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|     17|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|     17|    int& used = used_.template Get<TypeToUse>();
  409|     17|    U* res = reinterpret_cast<U*>(data + used);
  410|     17|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [Folded, False: 17]
  ------------------
  411|     17|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|     17|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|     17|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|     17|  while (                                                                      \
  |  |  |  |  |  |   62|     17|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 17]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|     17|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|     17|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|     17|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|     17|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|     17|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|     17|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|     17|    return res;
  413|     17|  }
_ZN6google8protobuf17DescriptorBuilder15AllocateOptionsINS0_10Descriptor14ExtensionRangeEEEvRKNT_5ProtoEPS5_iN4absl12lts_2024011611string_viewERNS0_8internal13FlatAllocatorE:
 5396|     14|    internal::FlatAllocator& alloc) {
 5397|     14|  std::vector<int> options_path;
 5398|     14|  descriptor->GetLocationPath(&options_path);
 5399|     14|  options_path.push_back(options_field_tag);
 5400|     14|  auto options = AllocateOptionsImpl<DescriptorT>(
 5401|     14|      descriptor->full_name(), descriptor->full_name(), proto, options_path,
 5402|     14|      option_name, alloc);
 5403|     14|  descriptor->options_ = options;
 5404|     14|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5405|     14|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5406|     14|}
_ZN6google8protobuf17DescriptorBuilder19AllocateOptionsImplINS0_10Descriptor14ExtensionRangeEEEPKNT_11OptionsTypeEN4absl12lts_2024011611string_viewESB_RKNS5_5ProtoENSA_4SpanIKiEESB_RNS0_8internal13FlatAllocatorE:
 5428|     14|    internal::FlatAllocator& alloc) {
 5429|     14|  if (!proto.has_options()) {
  ------------------
  |  Branch (5429:7): [True: 14, False: 0]
  ------------------
 5430|     14|    return &DescriptorT::OptionsType::default_instance();
 5431|     14|  }
 5432|      0|  const typename DescriptorT::OptionsType& orig_options = proto.options();
 5433|       |
 5434|      0|  auto* options = alloc.AllocateArray<typename DescriptorT::OptionsType>(1);
 5435|       |
 5436|      0|  if (!orig_options.IsInitialized()) {
  ------------------
  |  Branch (5436:7): [True: 0, False: 0]
  ------------------
 5437|      0|    AddError(absl::StrCat(name_scope, ".", element_name), orig_options,
 5438|      0|             DescriptorPool::ErrorCollector::OPTION_NAME,
 5439|      0|             "Uninterpreted option is missing name or value.");
 5440|      0|    return &DescriptorT::OptionsType::default_instance();
 5441|      0|  }
 5442|       |
 5443|      0|  const bool parse_success =
 5444|      0|      internal::ParseNoReflection(orig_options.SerializeAsString(), *options);
 5445|      0|  ABSL_DCHECK(parse_success);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5446|       |
 5447|       |  // Don't add to options_to_interpret_ unless there were uninterpreted
 5448|       |  // options.  This not only avoids unnecessary work, but prevents a
 5449|       |  // bootstrapping problem when building descriptors for descriptor.proto.
 5450|       |  // descriptor.proto does not contain any uninterpreted options, but
 5451|       |  // attempting to interpret options anyway will cause
 5452|       |  // OptionsType::GetDescriptor() to be called which may then deadlock since
 5453|       |  // we're still trying to build it.
 5454|      0|  if (options->uninterpreted_option_size() > 0) {
  ------------------
  |  Branch (5454:7): [True: 0, False: 0]
  ------------------
 5455|      0|    options_to_interpret_.push_back(OptionsToInterpret(
 5456|      0|        name_scope, element_name, options_path, &orig_options, options));
 5457|      0|  }
 5458|       |
 5459|       |  // If the custom option is in unknown fields, no need to interpret it.
 5460|       |  // Remove the dependency file from unused_dependency.
 5461|      0|  const UnknownFieldSet& unknown_fields = orig_options.unknown_fields();
 5462|      0|  if (!unknown_fields.empty()) {
  ------------------
  |  Branch (5462:7): [True: 0, False: 0]
  ------------------
 5463|       |    // Can not use options->GetDescriptor() which may case deadlock.
 5464|      0|    Symbol msg_symbol = tables_->FindSymbol(option_name);
 5465|      0|    if (msg_symbol.type() == Symbol::MESSAGE) {
  ------------------
  |  Branch (5465:9): [True: 0, False: 0]
  ------------------
 5466|      0|      for (int i = 0; i < unknown_fields.field_count(); ++i) {
  ------------------
  |  Branch (5466:23): [True: 0, False: 0]
  ------------------
 5467|      0|        assert_mutex_held(pool_);
 5468|      0|        const FieldDescriptor* field =
 5469|      0|            pool_->InternalFindExtensionByNumberNoLock(
 5470|      0|                msg_symbol.descriptor(), unknown_fields.field(i).number());
 5471|      0|        if (field) {
  ------------------
  |  Branch (5471:13): [True: 0, False: 0]
  ------------------
 5472|      0|          unused_dependency_.erase(field->file());
 5473|      0|        }
 5474|      0|      }
 5475|      0|    }
 5476|      0|  }
 5477|      0|  return options;
 5478|      0|}
_ZN6google8protobuf17DescriptorBuilder15AllocateOptionsINS0_15OneofDescriptorEEEvRKNT_5ProtoEPS4_iN4absl12lts_2024011611string_viewERNS0_8internal13FlatAllocatorE:
 5396|      2|    internal::FlatAllocator& alloc) {
 5397|      2|  std::vector<int> options_path;
 5398|      2|  descriptor->GetLocationPath(&options_path);
 5399|      2|  options_path.push_back(options_field_tag);
 5400|      2|  auto options = AllocateOptionsImpl<DescriptorT>(
 5401|      2|      descriptor->full_name(), descriptor->full_name(), proto, options_path,
 5402|      2|      option_name, alloc);
 5403|      2|  descriptor->options_ = options;
 5404|      2|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5405|      2|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5406|      2|}
_ZN6google8protobuf17DescriptorBuilder19AllocateOptionsImplINS0_15OneofDescriptorEEEPKNT_11OptionsTypeEN4absl12lts_2024011611string_viewESA_RKNS4_5ProtoENS9_4SpanIKiEESA_RNS0_8internal13FlatAllocatorE:
 5428|      2|    internal::FlatAllocator& alloc) {
 5429|      2|  if (!proto.has_options()) {
  ------------------
  |  Branch (5429:7): [True: 2, False: 0]
  ------------------
 5430|      2|    return &DescriptorT::OptionsType::default_instance();
 5431|      2|  }
 5432|      0|  const typename DescriptorT::OptionsType& orig_options = proto.options();
 5433|       |
 5434|      0|  auto* options = alloc.AllocateArray<typename DescriptorT::OptionsType>(1);
 5435|       |
 5436|      0|  if (!orig_options.IsInitialized()) {
  ------------------
  |  Branch (5436:7): [True: 0, False: 0]
  ------------------
 5437|      0|    AddError(absl::StrCat(name_scope, ".", element_name), orig_options,
 5438|      0|             DescriptorPool::ErrorCollector::OPTION_NAME,
 5439|      0|             "Uninterpreted option is missing name or value.");
 5440|      0|    return &DescriptorT::OptionsType::default_instance();
 5441|      0|  }
 5442|       |
 5443|      0|  const bool parse_success =
 5444|      0|      internal::ParseNoReflection(orig_options.SerializeAsString(), *options);
 5445|      0|  ABSL_DCHECK(parse_success);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5446|       |
 5447|       |  // Don't add to options_to_interpret_ unless there were uninterpreted
 5448|       |  // options.  This not only avoids unnecessary work, but prevents a
 5449|       |  // bootstrapping problem when building descriptors for descriptor.proto.
 5450|       |  // descriptor.proto does not contain any uninterpreted options, but
 5451|       |  // attempting to interpret options anyway will cause
 5452|       |  // OptionsType::GetDescriptor() to be called which may then deadlock since
 5453|       |  // we're still trying to build it.
 5454|      0|  if (options->uninterpreted_option_size() > 0) {
  ------------------
  |  Branch (5454:7): [True: 0, False: 0]
  ------------------
 5455|      0|    options_to_interpret_.push_back(OptionsToInterpret(
 5456|      0|        name_scope, element_name, options_path, &orig_options, options));
 5457|      0|  }
 5458|       |
 5459|       |  // If the custom option is in unknown fields, no need to interpret it.
 5460|       |  // Remove the dependency file from unused_dependency.
 5461|      0|  const UnknownFieldSet& unknown_fields = orig_options.unknown_fields();
 5462|      0|  if (!unknown_fields.empty()) {
  ------------------
  |  Branch (5462:7): [True: 0, False: 0]
  ------------------
 5463|       |    // Can not use options->GetDescriptor() which may case deadlock.
 5464|      0|    Symbol msg_symbol = tables_->FindSymbol(option_name);
 5465|      0|    if (msg_symbol.type() == Symbol::MESSAGE) {
  ------------------
  |  Branch (5465:9): [True: 0, False: 0]
  ------------------
 5466|      0|      for (int i = 0; i < unknown_fields.field_count(); ++i) {
  ------------------
  |  Branch (5466:23): [True: 0, False: 0]
  ------------------
 5467|      0|        assert_mutex_held(pool_);
 5468|      0|        const FieldDescriptor* field =
 5469|      0|            pool_->InternalFindExtensionByNumberNoLock(
 5470|      0|                msg_symbol.descriptor(), unknown_fields.field(i).number());
 5471|      0|        if (field) {
  ------------------
  |  Branch (5471:13): [True: 0, False: 0]
  ------------------
 5472|      0|          unused_dependency_.erase(field->file());
 5473|      0|        }
 5474|      0|      }
 5475|      0|    }
 5476|      0|  }
 5477|      0|  return options;
 5478|      0|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayINS0_14EnumDescriptor13ReservedRangeEEEPT_i:
  400|     24|  U* AllocateArray(int array_size) {
  401|     24|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|     24|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|     24|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|     24|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     48|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     24|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     48|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     48|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 24, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     24|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 24]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     48|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 24, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 24]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 24]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     48|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     48|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|     24|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|     24|    int& used = used_.template Get<TypeToUse>();
  409|     24|    U* res = reinterpret_cast<U*>(data + used);
  410|     24|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 24, Folded]
  ------------------
  411|     24|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|     24|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|     24|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|     24|  while (                                                                      \
  |  |  |  |  |  |   62|     24|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 24]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|     24|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|     24|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|     24|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|     24|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|     24|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|     24|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|     24|    return res;
  413|     24|  }
_ZN6google8protobuf17DescriptorBuilder15AllocateOptionsINS0_14EnumDescriptorEEEvRKNT_5ProtoEPS4_iN4absl12lts_2024011611string_viewERNS0_8internal13FlatAllocatorE:
 5396|     24|    internal::FlatAllocator& alloc) {
 5397|     24|  std::vector<int> options_path;
 5398|     24|  descriptor->GetLocationPath(&options_path);
 5399|     24|  options_path.push_back(options_field_tag);
 5400|     24|  auto options = AllocateOptionsImpl<DescriptorT>(
 5401|     24|      descriptor->full_name(), descriptor->full_name(), proto, options_path,
 5402|     24|      option_name, alloc);
 5403|     24|  descriptor->options_ = options;
 5404|     24|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5405|     24|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5406|     24|}
_ZN6google8protobuf17DescriptorBuilder19AllocateOptionsImplINS0_14EnumDescriptorEEEPKNT_11OptionsTypeEN4absl12lts_2024011611string_viewESA_RKNS4_5ProtoENS9_4SpanIKiEESA_RNS0_8internal13FlatAllocatorE:
 5428|     24|    internal::FlatAllocator& alloc) {
 5429|     24|  if (!proto.has_options()) {
  ------------------
  |  Branch (5429:7): [True: 24, False: 0]
  ------------------
 5430|     24|    return &DescriptorT::OptionsType::default_instance();
 5431|     24|  }
 5432|      0|  const typename DescriptorT::OptionsType& orig_options = proto.options();
 5433|       |
 5434|      0|  auto* options = alloc.AllocateArray<typename DescriptorT::OptionsType>(1);
 5435|       |
 5436|      0|  if (!orig_options.IsInitialized()) {
  ------------------
  |  Branch (5436:7): [True: 0, False: 0]
  ------------------
 5437|      0|    AddError(absl::StrCat(name_scope, ".", element_name), orig_options,
 5438|      0|             DescriptorPool::ErrorCollector::OPTION_NAME,
 5439|      0|             "Uninterpreted option is missing name or value.");
 5440|      0|    return &DescriptorT::OptionsType::default_instance();
 5441|      0|  }
 5442|       |
 5443|      0|  const bool parse_success =
 5444|      0|      internal::ParseNoReflection(orig_options.SerializeAsString(), *options);
 5445|      0|  ABSL_DCHECK(parse_success);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5446|       |
 5447|       |  // Don't add to options_to_interpret_ unless there were uninterpreted
 5448|       |  // options.  This not only avoids unnecessary work, but prevents a
 5449|       |  // bootstrapping problem when building descriptors for descriptor.proto.
 5450|       |  // descriptor.proto does not contain any uninterpreted options, but
 5451|       |  // attempting to interpret options anyway will cause
 5452|       |  // OptionsType::GetDescriptor() to be called which may then deadlock since
 5453|       |  // we're still trying to build it.
 5454|      0|  if (options->uninterpreted_option_size() > 0) {
  ------------------
  |  Branch (5454:7): [True: 0, False: 0]
  ------------------
 5455|      0|    options_to_interpret_.push_back(OptionsToInterpret(
 5456|      0|        name_scope, element_name, options_path, &orig_options, options));
 5457|      0|  }
 5458|       |
 5459|       |  // If the custom option is in unknown fields, no need to interpret it.
 5460|       |  // Remove the dependency file from unused_dependency.
 5461|      0|  const UnknownFieldSet& unknown_fields = orig_options.unknown_fields();
 5462|      0|  if (!unknown_fields.empty()) {
  ------------------
  |  Branch (5462:7): [True: 0, False: 0]
  ------------------
 5463|       |    // Can not use options->GetDescriptor() which may case deadlock.
 5464|      0|    Symbol msg_symbol = tables_->FindSymbol(option_name);
 5465|      0|    if (msg_symbol.type() == Symbol::MESSAGE) {
  ------------------
  |  Branch (5465:9): [True: 0, False: 0]
  ------------------
 5466|      0|      for (int i = 0; i < unknown_fields.field_count(); ++i) {
  ------------------
  |  Branch (5466:23): [True: 0, False: 0]
  ------------------
 5467|      0|        assert_mutex_held(pool_);
 5468|      0|        const FieldDescriptor* field =
 5469|      0|            pool_->InternalFindExtensionByNumberNoLock(
 5470|      0|                msg_symbol.descriptor(), unknown_fields.field(i).number());
 5471|      0|        if (field) {
  ------------------
  |  Branch (5471:13): [True: 0, False: 0]
  ------------------
 5472|      0|          unused_dependency_.erase(field->file());
 5473|      0|        }
 5474|      0|      }
 5475|      0|    }
 5476|      0|  }
 5477|      0|  return options;
 5478|      0|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE15AllocateStringsIJRKS9_S9_EEEPSO_DpOT_:
  416|    190|  const std::string* AllocateStrings(In&&... in) {
  417|    190|    std::string* strings = AllocateArray<std::string>(sizeof...(in));
  418|    190|    std::string* res = strings;
  419|    190|    Fold({(*strings++ = std::string(std::forward<In>(in)))...});
  420|    190|    return res;
  421|    190|  }
_ZN6google8protobuf17DescriptorBuilder15AllocateOptionsINS0_19EnumValueDescriptorEEEvRKNT_5ProtoEPS4_iN4absl12lts_2024011611string_viewERNS0_8internal13FlatAllocatorE:
 5396|    190|    internal::FlatAllocator& alloc) {
 5397|    190|  std::vector<int> options_path;
 5398|    190|  descriptor->GetLocationPath(&options_path);
 5399|    190|  options_path.push_back(options_field_tag);
 5400|    190|  auto options = AllocateOptionsImpl<DescriptorT>(
 5401|    190|      descriptor->full_name(), descriptor->full_name(), proto, options_path,
 5402|    190|      option_name, alloc);
 5403|    190|  descriptor->options_ = options;
 5404|    190|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5405|    190|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5406|    190|}
_ZN6google8protobuf17DescriptorBuilder19AllocateOptionsImplINS0_19EnumValueDescriptorEEEPKNT_11OptionsTypeEN4absl12lts_2024011611string_viewESA_RKNS4_5ProtoENS9_4SpanIKiEESA_RNS0_8internal13FlatAllocatorE:
 5428|    190|    internal::FlatAllocator& alloc) {
 5429|    190|  if (!proto.has_options()) {
  ------------------
  |  Branch (5429:7): [True: 190, False: 0]
  ------------------
 5430|    190|    return &DescriptorT::OptionsType::default_instance();
 5431|    190|  }
 5432|      0|  const typename DescriptorT::OptionsType& orig_options = proto.options();
 5433|       |
 5434|      0|  auto* options = alloc.AllocateArray<typename DescriptorT::OptionsType>(1);
 5435|       |
 5436|      0|  if (!orig_options.IsInitialized()) {
  ------------------
  |  Branch (5436:7): [True: 0, False: 0]
  ------------------
 5437|      0|    AddError(absl::StrCat(name_scope, ".", element_name), orig_options,
 5438|      0|             DescriptorPool::ErrorCollector::OPTION_NAME,
 5439|      0|             "Uninterpreted option is missing name or value.");
 5440|      0|    return &DescriptorT::OptionsType::default_instance();
 5441|      0|  }
 5442|       |
 5443|      0|  const bool parse_success =
 5444|      0|      internal::ParseNoReflection(orig_options.SerializeAsString(), *options);
 5445|      0|  ABSL_DCHECK(parse_success);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5446|       |
 5447|       |  // Don't add to options_to_interpret_ unless there were uninterpreted
 5448|       |  // options.  This not only avoids unnecessary work, but prevents a
 5449|       |  // bootstrapping problem when building descriptors for descriptor.proto.
 5450|       |  // descriptor.proto does not contain any uninterpreted options, but
 5451|       |  // attempting to interpret options anyway will cause
 5452|       |  // OptionsType::GetDescriptor() to be called which may then deadlock since
 5453|       |  // we're still trying to build it.
 5454|      0|  if (options->uninterpreted_option_size() > 0) {
  ------------------
  |  Branch (5454:7): [True: 0, False: 0]
  ------------------
 5455|      0|    options_to_interpret_.push_back(OptionsToInterpret(
 5456|      0|        name_scope, element_name, options_path, &orig_options, options));
 5457|      0|  }
 5458|       |
 5459|       |  // If the custom option is in unknown fields, no need to interpret it.
 5460|       |  // Remove the dependency file from unused_dependency.
 5461|      0|  const UnknownFieldSet& unknown_fields = orig_options.unknown_fields();
 5462|      0|  if (!unknown_fields.empty()) {
  ------------------
  |  Branch (5462:7): [True: 0, False: 0]
  ------------------
 5463|       |    // Can not use options->GetDescriptor() which may case deadlock.
 5464|      0|    Symbol msg_symbol = tables_->FindSymbol(option_name);
 5465|      0|    if (msg_symbol.type() == Symbol::MESSAGE) {
  ------------------
  |  Branch (5465:9): [True: 0, False: 0]
  ------------------
 5466|      0|      for (int i = 0; i < unknown_fields.field_count(); ++i) {
  ------------------
  |  Branch (5466:23): [True: 0, False: 0]
  ------------------
 5467|      0|        assert_mutex_held(pool_);
 5468|      0|        const FieldDescriptor* field =
 5469|      0|            pool_->InternalFindExtensionByNumberNoLock(
 5470|      0|                msg_symbol.descriptor(), unknown_fields.field(i).number());
 5471|      0|        if (field) {
  ------------------
  |  Branch (5471:13): [True: 0, False: 0]
  ------------------
 5472|      0|          unused_dependency_.erase(field->file());
 5473|      0|        }
 5474|      0|      }
 5475|      0|    }
 5476|      0|  }
 5477|      0|  return options;
 5478|      0|}

_ZNK6google8protobuf10Descriptor14ExtensionRange12start_numberEv:
  493|    130|    int start_number() const { return start_; }
_ZNK6google8protobuf10Descriptor14ExtensionRange10end_numberEv:
  496|     31|    int end_number() const { return end_; }
_ZNK6google8protobuf10Descriptor14ExtensionRange9full_nameEv:
  511|     28|    internal::DescriptorStringView full_name() const {
  512|     28|      return containing_type_->full_name();
  513|     28|    }
_ZNK6google8protobuf10Descriptor14ExtensionRange4fileEv:
  517|     14|    const FileDescriptor* file() const { return containing_type_->file(); }
_ZNK6google8protobuf10Descriptor14ExtensionRange15containing_typeEv:
  521|     28|    const Descriptor* containing_type() const { return containing_type_; }
_ZNK6google8protobuf10Descriptor8featuresEv:
  667|    272|  const FeatureSet& features() const { return *merged_features_; }
_ZNK6google8protobuf15FieldDescriptor8featuresEv:
 1077|  44.3k|  const FeatureSet& features() const { return *merged_features_; }
_ZNK6google8protobuf15OneofDescriptor8featuresEv:
 1261|      5|  const FeatureSet& features() const { return *merged_features_; }
_ZNK6google8protobuf14EnumDescriptor8featuresEv:
 1436|    190|  const FeatureSet& features() const { return *merged_features_; }
_ZNK6google8protobuf14FileDescriptor8featuresEv:
 1992|     45|  const FeatureSet& features() const { return *merged_features_; }
_ZN6google8protobuf14DescriptorPool34InternalSetLazilyBuildDependenciesEv:
 2356|      2|  void InternalSetLazilyBuildDependencies() {
 2357|      2|    lazily_build_dependencies_ = true;
 2358|       |    // This needs to be set when lazily building dependencies, as it breaks
 2359|       |    // dependency checking.
 2360|      2|    InternalDontEnforceDependencies();
 2361|      2|  }
_ZNK6google8protobuf10Descriptor4nameEv:
 2520|    173|  inline internal::DescriptorStringView CLASS::name() const {      \
 2521|    173|    return all_names_[0];                                          \
 2522|    173|  }                                                                \
_ZNK6google8protobuf10Descriptor9full_nameEv:
 2523|    747|  inline internal::DescriptorStringView CLASS::full_name() const { \
 2524|    747|    return all_names_[1];                                          \
 2525|    747|  }
_ZNK6google8protobuf10Descriptor15containing_typeEv:
 2510|    665|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf10Descriptor16oneof_decl_countEv:
 2510|    299|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf10Descriptor17nested_type_countEv:
 2510|    342|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf10Descriptor15enum_type_countEv:
 2510|    320|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf10Descriptor10oneof_declEi:
 2529|     15|  inline TYPE CLASS::FIELD(int index) const {              \
 2530|     15|    ABSL_DCHECK_LE(0, index);                              \
  ------------------
  |  |   78|     15|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|     15|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     15|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 15]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     15|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|     15|    ABSL_DCHECK_LT(index, FIELD##_count());                \
  ------------------
  |  |   80|     15|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|     15|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     15|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 15]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     15|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2532|     15|    return FIELD##s_ + index;                              \
 2533|     15|  }
_ZNK6google8protobuf10Descriptor11nested_typeEi:
 2529|     50|  inline TYPE CLASS::FIELD(int index) const {              \
 2530|     50|    ABSL_DCHECK_LE(0, index);                              \
  ------------------
  |  |   78|     50|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|     50|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     50|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 50]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     50|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|     50|    ABSL_DCHECK_LT(index, FIELD##_count());                \
  ------------------
  |  |   80|     50|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|     50|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     50|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 50]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     50|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2532|     50|    return FIELD##s_ + index;                              \
 2533|     50|  }
_ZNK6google8protobuf10Descriptor9enum_typeEi:
 2529|     85|  inline TYPE CLASS::FIELD(int index) const {              \
 2530|     85|    ABSL_DCHECK_LE(0, index);                              \
  ------------------
  |  |   78|     85|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|     85|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     85|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 85]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     85|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|     85|    ABSL_DCHECK_LT(index, FIELD##_count());                \
  ------------------
  |  |   80|     85|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|     85|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     85|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 85]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     85|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2532|     85|    return FIELD##s_ + index;                              \
 2533|     85|  }
_ZNK6google8protobuf10Descriptor21extension_range_countEv:
 2510|    642|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf10Descriptor15extension_countEv:
 2510|    235|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf10Descriptor15extension_rangeEi:
 2529|    161|  inline TYPE CLASS::FIELD(int index) const {              \
 2530|    161|    ABSL_DCHECK_LE(0, index);                              \
  ------------------
  |  |   78|    161|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|    161|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    161|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 161]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    161|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|    161|    ABSL_DCHECK_LT(index, FIELD##_count());                \
  ------------------
  |  |   80|    161|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|    161|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    161|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 161]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    161|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2532|    161|    return FIELD##s_ + index;                              \
 2533|    161|  }
_ZNK6google8protobuf10Descriptor20reserved_range_countEv:
 2510|    388|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf10Descriptor14reserved_rangeEi:
 2529|    140|  inline TYPE CLASS::FIELD(int index) const {              \
 2530|    140|    ABSL_DCHECK_LE(0, index);                              \
  ------------------
  |  |   78|    140|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|    140|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    140|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 140]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    140|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|    140|    ABSL_DCHECK_LT(index, FIELD##_count());                \
  ------------------
  |  |   80|    140|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|    140|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    140|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 140]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    140|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2532|    140|    return FIELD##s_ + index;                              \
 2533|    140|  }
_ZNK6google8protobuf15FieldDescriptor4nameEv:
 2520|  1.19k|  inline internal::DescriptorStringView CLASS::name() const {      \
 2521|  1.19k|    return all_names_[0];                                          \
 2522|  1.19k|  }                                                                \
_ZNK6google8protobuf15FieldDescriptor9full_nameEv:
 2523|  1.85k|  inline internal::DescriptorStringView CLASS::full_name() const { \
 2524|  1.85k|    return all_names_[1];                                          \
 2525|  1.85k|  }
_ZNK6google8protobuf15FieldDescriptor4fileEv:
 2510|    472|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf15FieldDescriptor6numberEv:
 2510|  1.55k|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf15FieldDescriptor12is_extensionEv:
 2510|  55.7k|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf15FieldDescriptor15containing_typeEv:
 2510|   144k|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf15FieldDescriptor17has_default_valueEv:
 2510|     98|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf15OneofDescriptor4nameEv:
 2520|     11|  inline internal::DescriptorStringView CLASS::name() const {      \
 2521|     11|    return all_names_[0];                                          \
 2522|     11|  }                                                                \
_ZNK6google8protobuf15OneofDescriptor9full_nameEv:
 2523|     12|  inline internal::DescriptorStringView CLASS::full_name() const { \
 2524|     12|    return all_names_[1];                                          \
 2525|     12|  }
_ZNK6google8protobuf15OneofDescriptor15containing_typeEv:
 2510|     15|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf14EnumDescriptor4nameEv:
 2520|    261|  inline internal::DescriptorStringView CLASS::name() const {      \
 2521|    261|    return all_names_[0];                                          \
 2522|    261|  }                                                                \
_ZNK6google8protobuf14EnumDescriptor9full_nameEv:
 2523|    574|  inline internal::DescriptorStringView CLASS::full_name() const { \
 2524|    574|    return all_names_[1];                                          \
 2525|    574|  }
_ZNK6google8protobuf14EnumDescriptor4fileEv:
 2510|    501|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf14EnumDescriptor15containing_typeEv:
 2510|    968|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf14EnumDescriptor20reserved_range_countEv:
 2510|    193|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf14EnumDescriptor14reserved_rangeEi:
 2529|      3|  inline TYPE CLASS::FIELD(int index) const {              \
 2530|      3|    ABSL_DCHECK_LE(0, index);                              \
  ------------------
  |  |   78|      3|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|      3|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      3|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 3]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      3|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|      3|    ABSL_DCHECK_LT(index, FIELD##_count());                \
  ------------------
  |  |   80|      3|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|      3|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      3|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 3]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      3|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2532|      3|    return FIELD##s_ + index;                              \
 2533|      3|  }
_ZNK6google8protobuf19EnumValueDescriptor4nameEv:
 2520|  1.32k|  inline internal::DescriptorStringView CLASS::name() const {      \
 2521|  1.32k|    return all_names_[0];                                          \
 2522|  1.32k|  }                                                                \
_ZNK6google8protobuf19EnumValueDescriptor9full_nameEv:
 2523|  1.19k|  inline internal::DescriptorStringView CLASS::full_name() const { \
 2524|  1.19k|    return all_names_[1];                                          \
 2525|  1.19k|  }
_ZNK6google8protobuf19EnumValueDescriptor6numberEv:
 2510|    796|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf14FileDescriptor4nameEv:
 2514|     17|  inline internal::DescriptorStringView CLASS::FIELD() const { \
 2515|     17|    return *FIELD##_;                                          \
 2516|     17|  }
_ZNK6google8protobuf14FileDescriptor7packageEv:
 2514|     92|  inline internal::DescriptorStringView CLASS::FIELD() const { \
 2515|     92|    return *FIELD##_;                                          \
 2516|     92|  }
_ZNK6google8protobuf14FileDescriptor18message_type_countEv:
 2510|    246|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf14FileDescriptor15enum_type_countEv:
 2510|     55|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf14FileDescriptor13service_countEv:
 2510|     20|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf14FileDescriptor15extension_countEv:
 2510|     25|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf14FileDescriptor7optionsEv:
 2536|      4|  inline const TYPE& CLASS::options() const { return *options_; }
_ZNK6google8protobuf14FileDescriptor12message_typeEi:
 2529|    185|  inline TYPE CLASS::FIELD(int index) const {              \
 2530|    185|    ABSL_DCHECK_LE(0, index);                              \
  ------------------
  |  |   78|    185|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|    185|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    185|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 185]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    185|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|    185|    ABSL_DCHECK_LT(index, FIELD##_count());                \
  ------------------
  |  |   80|    185|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|    185|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    185|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 185]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    185|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2532|    185|    return FIELD##s_ + index;                              \
 2533|    185|  }
_ZNK6google8protobuf14FileDescriptor9enum_typeEi:
 2529|     35|  inline TYPE CLASS::FIELD(int index) const {              \
 2530|     35|    ABSL_DCHECK_LE(0, index);                              \
  ------------------
  |  |   78|     35|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|     35|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     35|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 35]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     35|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|     35|    ABSL_DCHECK_LT(index, FIELD##_count());                \
  ------------------
  |  |   80|     35|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|     35|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     35|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 35]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     35|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2532|     35|    return FIELD##s_ + index;                              \
 2533|     35|  }
_ZNK6google8protobuf14FileDescriptor9extensionEi:
 2529|      4|  inline TYPE CLASS::FIELD(int index) const {              \
 2530|      4|    ABSL_DCHECK_LE(0, index);                              \
  ------------------
  |  |   78|      4|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|      4|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      4|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 4]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      4|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|      4|    ABSL_DCHECK_LT(index, FIELD##_count());                \
  ------------------
  |  |   80|      4|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|      4|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      4|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 4]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      4|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2532|      4|    return FIELD##s_ + index;                              \
 2533|      4|  }
_ZNK6google8protobuf15FieldDescriptor15extension_scopeEv:
 2725|      4|inline const Descriptor* FieldDescriptor::extension_scope() const {
 2726|      4|  ABSL_CHECK(is_extension_);
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2727|      4|  return scope_.extension_scope;
 2728|      4|}
_ZNK6google8protobuf15FieldDescriptor5labelEv:
 2730|  54.4k|inline FieldDescriptor::Label FieldDescriptor::label() const {
 2731|  54.4k|  return static_cast<Label>(label_);
 2732|  54.4k|}
_ZNK6google8protobuf15FieldDescriptor6is_mapEv:
 2751|  17.6k|inline bool FieldDescriptor::is_map() const {
 2752|  17.6k|  return type() == TYPE_MESSAGE && is_map_message_type();
  ------------------
  |  Branch (2752:10): [True: 17.6k, False: 0]
  |  Branch (2752:36): [True: 0, False: 17.6k]
  ------------------
 2753|  17.6k|}
_ZNK6google8protobuf15FieldDescriptor21real_containing_oneofEv:
 2755|  59.8k|inline const OneofDescriptor* FieldDescriptor::real_containing_oneof() const {
 2756|  59.8k|  if (in_real_oneof_) {
  ------------------
  |  Branch (2756:7): [True: 0, False: 59.8k]
  ------------------
 2757|      0|    auto* res = containing_oneof();
 2758|      0|    PROTOBUF_ASSUME(res != nullptr);
  ------------------
  |  |  941|      0|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
 2759|      0|    ABSL_DCHECK(!res->is_synthetic());
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2760|      0|    return res;
 2761|      0|  }
 2762|  59.8k|  return nullptr;
 2763|  59.8k|}
_ZNK6google8protobuf15FieldDescriptor5indexEv:
 2767|  88.0k|inline int FieldDescriptor::index() const {
 2768|  88.0k|  if (!is_extension_) {
  ------------------
  |  Branch (2768:7): [True: 88.0k, False: 1]
  ------------------
 2769|  88.0k|    return static_cast<int>(this - containing_type()->fields_);
 2770|  88.0k|  } else if (extension_scope() != nullptr) {
  ------------------
  |  Branch (2770:14): [True: 0, False: 1]
  ------------------
 2771|      0|    return static_cast<int>(this - extension_scope()->extensions_);
 2772|      1|  } else {
 2773|      1|    return static_cast<int>(this - file_->extensions_);
 2774|      1|  }
 2775|  88.0k|}
_ZNK6google8protobuf10Descriptor5indexEv:
 2777|    435|inline int Descriptor::index() const {
 2778|    435|  if (containing_type_ == nullptr) {
  ------------------
  |  Branch (2778:7): [True: 388, False: 47]
  ------------------
 2779|    388|    return static_cast<int>(this - file_->message_types_);
 2780|    388|  } else {
 2781|     47|    return static_cast<int>(this - containing_type_->nested_types_);
 2782|     47|  }
 2783|    435|}
_ZNK6google8protobuf10Descriptor14ExtensionRange5indexEv:
 2785|     14|inline int Descriptor::ExtensionRange::index() const {
 2786|     14|  return static_cast<int>(this - containing_type_->extension_ranges_);
 2787|     14|}
_ZNK6google8protobuf15OneofDescriptor4fileEv:
 2789|      2|inline const FileDescriptor* OneofDescriptor::file() const {
 2790|      2|  return containing_type()->file();
 2791|      2|}
_ZNK6google8protobuf15OneofDescriptor5indexEv:
 2793|      7|inline int OneofDescriptor::index() const {
 2794|      7|  return static_cast<int>(this - containing_type_->oneof_decls_);
 2795|      7|}
_ZNK6google8protobuf15OneofDescriptor12is_syntheticEv:
 2797|      2|inline bool OneofDescriptor::is_synthetic() const {
 2798|      2|  return field_count() == 1 && field(0)->proto3_optional_;
  ------------------
  |  Branch (2798:10): [True: 0, False: 2]
  |  Branch (2798:32): [True: 0, False: 0]
  ------------------
 2799|      2|}
_ZNK6google8protobuf14EnumDescriptor5indexEv:
 2801|    214|inline int EnumDescriptor::index() const {
 2802|    214|  if (containing_type_ == nullptr) {
  ------------------
  |  Branch (2802:7): [True: 123, False: 91]
  ------------------
 2803|    123|    return static_cast<int>(this - file_->enum_types_);
 2804|    123|  } else {
 2805|     91|    return static_cast<int>(this - containing_type_->enum_types_);
 2806|     91|  }
 2807|    214|}
_ZNK6google8protobuf19EnumValueDescriptor4fileEv:
 2809|    190|inline const FileDescriptor* EnumValueDescriptor::file() const {
 2810|    190|  return type()->file();
 2811|    190|}
_ZN6google8protobuf8internal3cpp33MaxMessageDeclarationNestingDepthEv:
 2942|      4|constexpr int MaxMessageDeclarationNestingDepth() { return 32; }
_ZN6google8protobuf8internal21InternalFeatureHelper11GetFeaturesINS0_14FileDescriptorEEERKNS0_10FeatureSetERKT_:
  264|     45|  static const FeatureSet& GetFeatures(const DescriptorT& desc) {
  265|     45|    return desc.features();
  266|     45|  }
_ZN6google8protobuf8internal21InternalFeatureHelper11GetFeaturesINS0_10DescriptorEEERKNS0_10FeatureSetERKT_:
  264|    272|  static const FeatureSet& GetFeatures(const DescriptorT& desc) {
  265|    272|    return desc.features();
  266|    272|  }
_ZN6google8protobuf8internal21InternalFeatureHelper11GetFeaturesINS0_14EnumDescriptorEEERKNS0_10FeatureSetERKT_:
  264|    190|  static const FeatureSet& GetFeatures(const DescriptorT& desc) {
  265|    190|    return desc.features();
  266|    190|  }
_ZN6google8protobuf8internal21InternalFeatureHelper11GetFeaturesINS0_15OneofDescriptorEEERKNS0_10FeatureSetERKT_:
  264|      5|  static const FeatureSet& GetFeatures(const DescriptorT& desc) {
  265|      5|    return desc.features();
  266|      5|  }

_ZN6google8protobuf32FeatureSet_FieldPresence_IsValidEi:
 2452|    255|bool FeatureSet_FieldPresence_IsValid(int value) {
 2453|    255|  return 0 <= value && value <= 3;
  ------------------
  |  Branch (2453:10): [True: 255, False: 0]
  |  Branch (2453:24): [True: 255, False: 0]
  ------------------
 2454|    255|}
_ZN6google8protobuf27FeatureSet_EnumType_IsValidEi:
 2474|    255|bool FeatureSet_EnumType_IsValid(int value) {
 2475|    255|  return 0 <= value && value <= 2;
  ------------------
  |  Branch (2475:10): [True: 255, False: 0]
  |  Branch (2475:24): [True: 255, False: 0]
  ------------------
 2476|    255|}
_ZN6google8protobuf40FeatureSet_RepeatedFieldEncoding_IsValidEi:
 2495|    255|bool FeatureSet_RepeatedFieldEncoding_IsValid(int value) {
 2496|    255|  return 0 <= value && value <= 2;
  ------------------
  |  Branch (2496:10): [True: 255, False: 0]
  |  Branch (2496:24): [True: 255, False: 0]
  ------------------
 2497|    255|}
_ZN6google8protobuf33FeatureSet_Utf8Validation_IsValidEi:
 2516|    255|bool FeatureSet_Utf8Validation_IsValid(int value) {
 2517|    255|  return 0 <= value && value <= 3 && ((13u >> value) & 1) != 0;
  ------------------
  |  Branch (2517:10): [True: 255, False: 0]
  |  Branch (2517:24): [True: 255, False: 0]
  |  Branch (2517:38): [True: 255, False: 0]
  ------------------
 2518|    255|}
_ZN6google8protobuf34FeatureSet_MessageEncoding_IsValidEi:
 2537|    255|bool FeatureSet_MessageEncoding_IsValid(int value) {
 2538|    255|  return 0 <= value && value <= 2;
  ------------------
  |  Branch (2538:10): [True: 255, False: 0]
  |  Branch (2538:24): [True: 255, False: 0]
  ------------------
 2539|    255|}
_ZN6google8protobuf29FeatureSet_JsonFormat_IsValidEi:
 2558|    255|bool FeatureSet_JsonFormat_IsValid(int value) {
 2559|    255|  return 0 <= value && value <= 2;
  ------------------
  |  Branch (2559:10): [True: 255, False: 0]
  |  Branch (2559:24): [True: 255, False: 0]
  ------------------
 2560|    255|}
_ZNK6google8protobuf17FileDescriptorSet12GetClassDataEv:
 2708|      1|const ::google::protobuf::internal::ClassData* FileDescriptorSet::GetClassData() const {
 2709|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 2710|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 2711|      1|  return _class_data_.base();
 2712|      1|}
_ZN6google8protobuf19FileDescriptorProtoC2EPNS0_5ArenaE:
 2882|     10|    : ::google::protobuf::Message(arena) {
 2883|     10|#endif  // PROTOBUF_CUSTOM_VTABLE
 2884|     10|  SharedCtor(arena);
 2885|       |  // @@protoc_insertion_point(arena_constructor:google.protobuf.FileDescriptorProto)
 2886|     10|}
_ZN6google8protobuf19FileDescriptorProtoD2Ev:
 2951|      6|FileDescriptorProto::~FileDescriptorProto() {
 2952|       |  // @@protoc_insertion_point(destructor:google.protobuf.FileDescriptorProto)
 2953|      6|  SharedDtor(*this);
 2954|      6|}
_ZNK6google8protobuf19FileDescriptorProto12GetClassDataEv:
 3033|     21|const ::google::protobuf::internal::ClassData* FileDescriptorProto::GetClassData() const {
 3034|     21|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 3035|     21|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 3036|     21|  return _class_data_.base();
 3037|     21|}
_ZN6google8protobuf19FileDescriptorProto5ClearEv:
 3158|     10|PROTOBUF_NOINLINE void FileDescriptorProto::Clear() {
 3159|       |// @@protoc_insertion_point(message_clear_start:google.protobuf.FileDescriptorProto)
 3160|     10|  ::google::protobuf::internal::TSanWrite(&_impl_);
 3161|     10|  ::uint32_t cached_has_bits = 0;
 3162|       |  // Prevent compiler warnings about cached_has_bits being unused
 3163|     10|  (void) cached_has_bits;
 3164|       |
 3165|     10|  _impl_.dependency_.Clear();
 3166|     10|  _impl_.message_type_.Clear();
 3167|     10|  _impl_.enum_type_.Clear();
 3168|     10|  _impl_.service_.Clear();
 3169|     10|  _impl_.extension_.Clear();
 3170|     10|  _impl_.public_dependency_.Clear();
 3171|     10|  _impl_.weak_dependency_.Clear();
 3172|     10|  cached_has_bits = _impl_._has_bits_[0];
 3173|     10|  if (cached_has_bits & 0x0000001fu) {
  ------------------
  |  Branch (3173:7): [True: 0, False: 10]
  ------------------
 3174|      0|    if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (3174:9): [True: 0, False: 0]
  ------------------
 3175|      0|      _impl_.name_.ClearNonDefaultToEmpty();
 3176|      0|    }
 3177|      0|    if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (3177:9): [True: 0, False: 0]
  ------------------
 3178|      0|      _impl_.package_.ClearNonDefaultToEmpty();
 3179|      0|    }
 3180|      0|    if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (3180:9): [True: 0, False: 0]
  ------------------
 3181|      0|      _impl_.syntax_.ClearNonDefaultToEmpty();
 3182|      0|    }
 3183|      0|    if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (3183:9): [True: 0, False: 0]
  ------------------
 3184|      0|      ABSL_DCHECK(_impl_.options_ != nullptr);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3185|      0|      _impl_.options_->Clear();
 3186|      0|    }
 3187|      0|    if (cached_has_bits & 0x00000010u) {
  ------------------
  |  Branch (3187:9): [True: 0, False: 0]
  ------------------
 3188|      0|      ABSL_DCHECK(_impl_.source_code_info_ != nullptr);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3189|      0|      _impl_.source_code_info_->Clear();
 3190|      0|    }
 3191|      0|  }
 3192|     10|  _impl_.edition_ = 0;
 3193|     10|  _impl_._has_bits_.Clear();
 3194|     10|  _internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>();
 3195|     10|}
_ZN6google8protobuf19FileDescriptorProto17IsInitializedImplERKNS0_11MessageLiteE:
 3505|     10|    const MessageLite& msg) {
 3506|     10|  auto& this_ = static_cast<const FileDescriptorProto&>(msg);
 3507|     10|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_message_type()))
  ------------------
  |  Branch (3507:7): [True: 0, False: 10]
  ------------------
 3508|      0|    return false;
 3509|     10|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_enum_type()))
  ------------------
  |  Branch (3509:7): [True: 0, False: 10]
  ------------------
 3510|      0|    return false;
 3511|     10|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_service()))
  ------------------
  |  Branch (3511:7): [True: 0, False: 10]
  ------------------
 3512|      0|    return false;
 3513|     10|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_extension()))
  ------------------
  |  Branch (3513:7): [True: 0, False: 10]
  ------------------
 3514|      0|    return false;
 3515|     10|  if ((this_._impl_._has_bits_[0] & 0x00000008u) != 0) {
  ------------------
  |  Branch (3515:7): [True: 5, False: 5]
  ------------------
 3516|      5|    if (!this_._impl_.options_->IsInitialized()) return false;
  ------------------
  |  Branch (3516:9): [True: 0, False: 5]
  ------------------
 3517|      5|  }
 3518|     10|  if ((this_._impl_._has_bits_[0] & 0x00000010u) != 0) {
  ------------------
  |  Branch (3518:7): [True: 0, False: 10]
  ------------------
 3519|      0|    if (!this_._impl_.source_code_info_->IsInitialized()) return false;
  ------------------
  |  Branch (3519:9): [True: 0, False: 0]
  ------------------
 3520|      0|  }
 3521|     10|  return true;
 3522|     10|}
_ZN6google8protobuf30DescriptorProto_ExtensionRangeD2Ev:
 3617|     14|DescriptorProto_ExtensionRange::~DescriptorProto_ExtensionRange() {
 3618|       |  // @@protoc_insertion_point(destructor:google.protobuf.DescriptorProto.ExtensionRange)
 3619|     14|  SharedDtor(*this);
 3620|     14|}
_ZNK6google8protobuf30DescriptorProto_ExtensionRange12GetClassDataEv:
 3659|      1|const ::google::protobuf::internal::ClassData* DescriptorProto_ExtensionRange::GetClassData() const {
 3660|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 3661|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 3662|      1|  return _class_data_.base();
 3663|      1|}
_ZN6google8protobuf30DescriptorProto_ExtensionRange17IsInitializedImplERKNS0_11MessageLiteE:
 3853|     28|    const MessageLite& msg) {
 3854|     28|  auto& this_ = static_cast<const DescriptorProto_ExtensionRange&>(msg);
 3855|     28|  if ((this_._impl_._has_bits_[0] & 0x00000001u) != 0) {
  ------------------
  |  Branch (3855:7): [True: 0, False: 28]
  ------------------
 3856|      0|    if (!this_._impl_.options_->IsInitialized()) return false;
  ------------------
  |  Branch (3856:9): [True: 0, False: 0]
  ------------------
 3857|      0|  }
 3858|     28|  return true;
 3859|     28|}
_ZN6google8protobuf29DescriptorProto_ReservedRangeD2Ev:
 3914|     14|DescriptorProto_ReservedRange::~DescriptorProto_ReservedRange() {
 3915|       |  // @@protoc_insertion_point(destructor:google.protobuf.DescriptorProto.ReservedRange)
 3916|     14|  SharedDtor(*this);
 3917|     14|}
_ZNK6google8protobuf29DescriptorProto_ReservedRange12GetClassDataEv:
 3955|      1|const ::google::protobuf::internal::ClassData* DescriptorProto_ReservedRange::GetClassData() const {
 3956|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 3957|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 3958|      1|  return _class_data_.base();
 3959|      1|}
_ZN6google8protobuf15DescriptorProtoD2Ev:
 4203|     60|DescriptorProto::~DescriptorProto() {
 4204|       |  // @@protoc_insertion_point(destructor:google.protobuf.DescriptorProto)
 4205|     60|  SharedDtor(*this);
 4206|     60|}
_ZNK6google8protobuf15DescriptorProto12GetClassDataEv:
 4286|      3|const ::google::protobuf::internal::ClassData* DescriptorProto::GetClassData() const {
 4287|      3|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 4288|      3|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 4289|      3|  return _class_data_.base();
 4290|      3|}
_ZN6google8protobuf15DescriptorProto17IsInitializedImplERKNS0_11MessageLiteE:
 4692|    107|    const MessageLite& msg) {
 4693|    107|  auto& this_ = static_cast<const DescriptorProto&>(msg);
 4694|    107|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_field()))
  ------------------
  |  Branch (4694:7): [True: 0, False: 107]
  ------------------
 4695|      0|    return false;
 4696|    107|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_nested_type()))
  ------------------
  |  Branch (4696:7): [True: 0, False: 107]
  ------------------
 4697|      0|    return false;
 4698|    107|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_enum_type()))
  ------------------
  |  Branch (4698:7): [True: 0, False: 107]
  ------------------
 4699|      0|    return false;
 4700|    107|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_extension_range()))
  ------------------
  |  Branch (4700:7): [True: 0, False: 107]
  ------------------
 4701|      0|    return false;
 4702|    107|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_extension()))
  ------------------
  |  Branch (4702:7): [True: 0, False: 107]
  ------------------
 4703|      0|    return false;
 4704|    107|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_oneof_decl()))
  ------------------
  |  Branch (4704:7): [True: 0, False: 107]
  ------------------
 4705|      0|    return false;
 4706|    107|  if ((this_._impl_._has_bits_[0] & 0x00000002u) != 0) {
  ------------------
  |  Branch (4706:7): [True: 0, False: 107]
  ------------------
 4707|      0|    if (!this_._impl_.options_->IsInitialized()) return false;
  ------------------
  |  Branch (4707:9): [True: 0, False: 0]
  ------------------
 4708|      0|  }
 4709|    107|  return true;
 4710|    107|}
_ZNK6google8protobuf15DescriptorProto11GetMetadataEv:
 4730|      2|::google::protobuf::Metadata DescriptorProto::GetMetadata() const {
 4731|      2|  return ::google::protobuf::Message::GetMetadataImpl(GetClassData()->full());
 4732|      2|}
_ZNK6google8protobuf33ExtensionRangeOptions_Declaration12GetClassDataEv:
 4842|      1|const ::google::protobuf::internal::ClassData* ExtensionRangeOptions_Declaration::GetClassData() const {
 4843|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 4844|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 4845|      1|  return _class_data_.base();
 4846|      1|}
_ZNK6google8protobuf21ExtensionRangeOptions12GetClassDataEv:
 5224|      1|const ::google::protobuf::internal::ClassData* ExtensionRangeOptions::GetClassData() const {
 5225|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 5226|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 5227|      1|  return _class_data_.base();
 5228|      1|}
_ZN6google8protobuf20FieldDescriptorProtoD2Ev:
 5574|    296|FieldDescriptorProto::~FieldDescriptorProto() {
 5575|       |  // @@protoc_insertion_point(destructor:google.protobuf.FieldDescriptorProto)
 5576|    296|  SharedDtor(*this);
 5577|    296|}
_ZNK6google8protobuf20FieldDescriptorProto12GetClassDataEv:
 5621|      1|const ::google::protobuf::internal::ClassData* FieldDescriptorProto::GetClassData() const {
 5622|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 5623|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 5624|      1|  return _class_data_.base();
 5625|      1|}
_ZN6google8protobuf20FieldDescriptorProto17IsInitializedImplERKNS0_11MessageLiteE:
 6024|    531|    const MessageLite& msg) {
 6025|    531|  auto& this_ = static_cast<const FieldDescriptorProto&>(msg);
 6026|    531|  if ((this_._impl_._has_bits_[0] & 0x00000020u) != 0) {
  ------------------
  |  Branch (6026:7): [True: 34, False: 497]
  ------------------
 6027|     34|    if (!this_._impl_.options_->IsInitialized()) return false;
  ------------------
  |  Branch (6027:9): [True: 0, False: 34]
  ------------------
 6028|     34|  }
 6029|    531|  return true;
 6030|    531|}
_ZN6google8protobuf20OneofDescriptorProtoD2Ev:
 6110|      4|OneofDescriptorProto::~OneofDescriptorProto() {
 6111|       |  // @@protoc_insertion_point(destructor:google.protobuf.OneofDescriptorProto)
 6112|      4|  SharedDtor(*this);
 6113|      4|}
_ZNK6google8protobuf20OneofDescriptorProto12GetClassDataEv:
 6153|      1|const ::google::protobuf::internal::ClassData* OneofDescriptorProto::GetClassData() const {
 6154|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 6155|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 6156|      1|  return _class_data_.base();
 6157|      1|}
_ZN6google8protobuf20OneofDescriptorProto17IsInitializedImplERKNS0_11MessageLiteE:
 6329|      6|    const MessageLite& msg) {
 6330|      6|  auto& this_ = static_cast<const OneofDescriptorProto&>(msg);
 6331|      6|  if ((this_._impl_._has_bits_[0] & 0x00000002u) != 0) {
  ------------------
  |  Branch (6331:7): [True: 0, False: 6]
  ------------------
 6332|      0|    if (!this_._impl_.options_->IsInitialized()) return false;
  ------------------
  |  Branch (6332:9): [True: 0, False: 0]
  ------------------
 6333|      0|  }
 6334|      6|  return true;
 6335|      6|}
_ZN6google8protobuf37EnumDescriptorProto_EnumReservedRangeD2Ev:
 6388|      1|EnumDescriptorProto_EnumReservedRange::~EnumDescriptorProto_EnumReservedRange() {
 6389|       |  // @@protoc_insertion_point(destructor:google.protobuf.EnumDescriptorProto.EnumReservedRange)
 6390|      1|  SharedDtor(*this);
 6391|      1|}
_ZNK6google8protobuf37EnumDescriptorProto_EnumReservedRange12GetClassDataEv:
 6429|      1|const ::google::protobuf::internal::ClassData* EnumDescriptorProto_EnumReservedRange::GetClassData() const {
 6430|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 6431|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 6432|      1|  return _class_data_.base();
 6433|      1|}
_ZN6google8protobuf19EnumDescriptorProtoD2Ev:
 6667|     30|EnumDescriptorProto::~EnumDescriptorProto() {
 6668|       |  // @@protoc_insertion_point(destructor:google.protobuf.EnumDescriptorProto)
 6669|     30|  SharedDtor(*this);
 6670|     30|}
_ZNK6google8protobuf19EnumDescriptorProto12GetClassDataEv:
 6730|      1|const ::google::protobuf::internal::ClassData* EnumDescriptorProto::GetClassData() const {
 6731|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 6732|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 6733|      1|  return _class_data_.base();
 6734|      1|}
_ZN6google8protobuf19EnumDescriptorProto17IsInitializedImplERKNS0_11MessageLiteE:
 6993|     54|    const MessageLite& msg) {
 6994|     54|  auto& this_ = static_cast<const EnumDescriptorProto&>(msg);
 6995|     54|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_value()))
  ------------------
  |  Branch (6995:7): [True: 0, False: 54]
  ------------------
 6996|      0|    return false;
 6997|     54|  if ((this_._impl_._has_bits_[0] & 0x00000002u) != 0) {
  ------------------
  |  Branch (6997:7): [True: 0, False: 54]
  ------------------
 6998|      0|    if (!this_._impl_.options_->IsInitialized()) return false;
  ------------------
  |  Branch (6998:9): [True: 0, False: 0]
  ------------------
 6999|      0|  }
 7000|     54|  return true;
 7001|     54|}
_ZN6google8protobuf24EnumValueDescriptorProtoD2Ev:
 7081|    294|EnumValueDescriptorProto::~EnumValueDescriptorProto() {
 7082|       |  // @@protoc_insertion_point(destructor:google.protobuf.EnumValueDescriptorProto)
 7083|    294|  SharedDtor(*this);
 7084|    294|}
_ZNK6google8protobuf24EnumValueDescriptorProto12GetClassDataEv:
 7124|      1|const ::google::protobuf::internal::ClassData* EnumValueDescriptorProto::GetClassData() const {
 7125|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 7126|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 7127|      1|  return _class_data_.base();
 7128|      1|}
_ZN6google8protobuf24EnumValueDescriptorProto17IsInitializedImplERKNS0_11MessageLiteE:
 7323|    484|    const MessageLite& msg) {
 7324|    484|  auto& this_ = static_cast<const EnumValueDescriptorProto&>(msg);
 7325|    484|  if ((this_._impl_._has_bits_[0] & 0x00000002u) != 0) {
  ------------------
  |  Branch (7325:7): [True: 0, False: 484]
  ------------------
 7326|      0|    if (!this_._impl_.options_->IsInitialized()) return false;
  ------------------
  |  Branch (7326:9): [True: 0, False: 0]
  ------------------
 7327|      0|  }
 7328|    484|  return true;
 7329|    484|}
_ZNK6google8protobuf22ServiceDescriptorProto12GetClassDataEv:
 7462|      1|const ::google::protobuf::internal::ClassData* ServiceDescriptorProto::GetClassData() const {
 7463|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 7464|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 7465|      1|  return _class_data_.base();
 7466|      1|}
_ZNK6google8protobuf21MethodDescriptorProto12GetClassDataEv:
 7810|      1|const ::google::protobuf::internal::ClassData* MethodDescriptorProto::GetClassData() const {
 7811|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 7812|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 7813|      1|  return _class_data_.base();
 7814|      1|}
_ZN6google8protobuf11FileOptionsC2EPNS0_5ArenaE:
 8125|      2|    : ::google::protobuf::Message(arena) {
 8126|      2|#endif  // PROTOBUF_CUSTOM_VTABLE
 8127|      2|  SharedCtor(arena);
 8128|       |  // @@protoc_insertion_point(arena_constructor:google.protobuf.FileOptions)
 8129|      2|}
_ZN6google8protobuf11FileOptionsD2Ev:
 8204|      3|FileOptions::~FileOptions() {
 8205|       |  // @@protoc_insertion_point(destructor:google.protobuf.FileOptions)
 8206|      3|  SharedDtor(*this);
 8207|      3|}
_ZNK6google8protobuf11FileOptions12GetClassDataEv:
 8271|      5|const ::google::protobuf::internal::ClassData* FileOptions::GetClassData() const {
 8272|      5|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 8273|      5|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 8274|      5|  return _class_data_.base();
 8275|      5|}
_ZN6google8protobuf11FileOptions5ClearEv:
 8449|      2|PROTOBUF_NOINLINE void FileOptions::Clear() {
 8450|       |// @@protoc_insertion_point(message_clear_start:google.protobuf.FileOptions)
 8451|      2|  ::google::protobuf::internal::TSanWrite(&_impl_);
 8452|      2|  ::uint32_t cached_has_bits = 0;
 8453|       |  // Prevent compiler warnings about cached_has_bits being unused
 8454|      2|  (void) cached_has_bits;
 8455|       |
 8456|      2|  _impl_._extensions_.Clear();
 8457|      2|  _impl_.uninterpreted_option_.Clear();
 8458|      2|  cached_has_bits = _impl_._has_bits_[0];
 8459|      2|  if (cached_has_bits & 0x000000ffu) {
  ------------------
  |  Branch (8459:7): [True: 0, False: 2]
  ------------------
 8460|      0|    if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (8460:9): [True: 0, False: 0]
  ------------------
 8461|      0|      _impl_.java_package_.ClearNonDefaultToEmpty();
 8462|      0|    }
 8463|      0|    if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (8463:9): [True: 0, False: 0]
  ------------------
 8464|      0|      _impl_.java_outer_classname_.ClearNonDefaultToEmpty();
 8465|      0|    }
 8466|      0|    if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (8466:9): [True: 0, False: 0]
  ------------------
 8467|      0|      _impl_.go_package_.ClearNonDefaultToEmpty();
 8468|      0|    }
 8469|      0|    if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (8469:9): [True: 0, False: 0]
  ------------------
 8470|      0|      _impl_.objc_class_prefix_.ClearNonDefaultToEmpty();
 8471|      0|    }
 8472|      0|    if (cached_has_bits & 0x00000010u) {
  ------------------
  |  Branch (8472:9): [True: 0, False: 0]
  ------------------
 8473|      0|      _impl_.csharp_namespace_.ClearNonDefaultToEmpty();
 8474|      0|    }
 8475|      0|    if (cached_has_bits & 0x00000020u) {
  ------------------
  |  Branch (8475:9): [True: 0, False: 0]
  ------------------
 8476|      0|      _impl_.swift_prefix_.ClearNonDefaultToEmpty();
 8477|      0|    }
 8478|      0|    if (cached_has_bits & 0x00000040u) {
  ------------------
  |  Branch (8478:9): [True: 0, False: 0]
  ------------------
 8479|      0|      _impl_.php_class_prefix_.ClearNonDefaultToEmpty();
 8480|      0|    }
 8481|      0|    if (cached_has_bits & 0x00000080u) {
  ------------------
  |  Branch (8481:9): [True: 0, False: 0]
  ------------------
 8482|      0|      _impl_.php_namespace_.ClearNonDefaultToEmpty();
 8483|      0|    }
 8484|      0|  }
 8485|      2|  if (cached_has_bits & 0x00000700u) {
  ------------------
  |  Branch (8485:7): [True: 0, False: 2]
  ------------------
 8486|      0|    if (cached_has_bits & 0x00000100u) {
  ------------------
  |  Branch (8486:9): [True: 0, False: 0]
  ------------------
 8487|      0|      _impl_.php_metadata_namespace_.ClearNonDefaultToEmpty();
 8488|      0|    }
 8489|      0|    if (cached_has_bits & 0x00000200u) {
  ------------------
  |  Branch (8489:9): [True: 0, False: 0]
  ------------------
 8490|      0|      _impl_.ruby_package_.ClearNonDefaultToEmpty();
 8491|      0|    }
 8492|      0|    if (cached_has_bits & 0x00000400u) {
  ------------------
  |  Branch (8492:9): [True: 0, False: 0]
  ------------------
 8493|      0|      ABSL_DCHECK(_impl_.features_ != nullptr);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8494|      0|      _impl_.features_->Clear();
 8495|      0|    }
 8496|      0|  }
 8497|      2|  if (cached_has_bits & 0x0000f800u) {
  ------------------
  |  Branch (8497:7): [True: 0, False: 2]
  ------------------
 8498|      0|    ::memset(&_impl_.java_multiple_files_, 0, static_cast<::size_t>(
 8499|      0|        reinterpret_cast<char*>(&_impl_.java_generic_services_) -
 8500|      0|        reinterpret_cast<char*>(&_impl_.java_multiple_files_)) + sizeof(_impl_.java_generic_services_));
 8501|      0|  }
 8502|      2|  if (cached_has_bits & 0x000f0000u) {
  ------------------
  |  Branch (8502:7): [True: 0, False: 2]
  ------------------
 8503|      0|    ::memset(&_impl_.py_generic_services_, 0, static_cast<::size_t>(
 8504|      0|        reinterpret_cast<char*>(&_impl_.deprecated_) -
 8505|      0|        reinterpret_cast<char*>(&_impl_.py_generic_services_)) + sizeof(_impl_.deprecated_));
 8506|      0|    _impl_.optimize_for_ = 1;
 8507|      0|    _impl_.cc_enable_arenas_ = true;
 8508|      0|  }
 8509|      2|  _impl_._has_bits_.Clear();
 8510|      2|  _internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>();
 8511|      2|}
_ZNK6google8protobuf11FileOptions18_InternalSerializeEPhPNS0_2io19EpsCopyOutputStreamE:
 8521|      2|            ::google::protobuf::io::EpsCopyOutputStream* stream) const {
 8522|      2|          const FileOptions& this_ = *this;
 8523|      2|#endif  // PROTOBUF_CUSTOM_VTABLE
 8524|       |          // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.FileOptions)
 8525|      2|          ::uint32_t cached_has_bits = 0;
 8526|      2|          (void)cached_has_bits;
 8527|       |
 8528|      2|          cached_has_bits = this_._impl_._has_bits_[0];
 8529|       |          // optional string java_package = 1;
 8530|      2|          if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (8530:15): [True: 2, False: 0]
  ------------------
 8531|      2|            const std::string& _s = this_._internal_java_package();
 8532|      2|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 8533|      2|                                        "google.protobuf.FileOptions.java_package");
 8534|      2|            target = stream->WriteStringMaybeAliased(1, _s, target);
 8535|      2|          }
 8536|       |
 8537|       |          // optional string java_outer_classname = 8;
 8538|      2|          if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (8538:15): [True: 2, False: 0]
  ------------------
 8539|      2|            const std::string& _s = this_._internal_java_outer_classname();
 8540|      2|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 8541|      2|                                        "google.protobuf.FileOptions.java_outer_classname");
 8542|      2|            target = stream->WriteStringMaybeAliased(8, _s, target);
 8543|      2|          }
 8544|       |
 8545|       |          // optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];
 8546|      2|          if (cached_has_bits & 0x00040000u) {
  ------------------
  |  Branch (8546:15): [True: 1, False: 1]
  ------------------
 8547|      1|            target = stream->EnsureSpace(target);
 8548|      1|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
 8549|      1|                9, this_._internal_optimize_for(), target);
 8550|      1|          }
 8551|       |
 8552|       |          // optional bool java_multiple_files = 10 [default = false];
 8553|      2|          if (cached_has_bits & 0x00000800u) {
  ------------------
  |  Branch (8553:15): [True: 1, False: 1]
  ------------------
 8554|      1|            target = stream->EnsureSpace(target);
 8555|      1|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
 8556|      1|                10, this_._internal_java_multiple_files(), target);
 8557|      1|          }
 8558|       |
 8559|       |          // optional string go_package = 11;
 8560|      2|          if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (8560:15): [True: 2, False: 0]
  ------------------
 8561|      2|            const std::string& _s = this_._internal_go_package();
 8562|      2|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 8563|      2|                                        "google.protobuf.FileOptions.go_package");
 8564|      2|            target = stream->WriteStringMaybeAliased(11, _s, target);
 8565|      2|          }
 8566|       |
 8567|       |          // optional bool cc_generic_services = 16 [default = false];
 8568|      2|          if (cached_has_bits & 0x00004000u) {
  ------------------
  |  Branch (8568:15): [True: 0, False: 2]
  ------------------
 8569|      0|            target = stream->EnsureSpace(target);
 8570|      0|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
 8571|      0|                16, this_._internal_cc_generic_services(), target);
 8572|      0|          }
 8573|       |
 8574|       |          // optional bool java_generic_services = 17 [default = false];
 8575|      2|          if (cached_has_bits & 0x00008000u) {
  ------------------
  |  Branch (8575:15): [True: 0, False: 2]
  ------------------
 8576|      0|            target = stream->EnsureSpace(target);
 8577|      0|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
 8578|      0|                17, this_._internal_java_generic_services(), target);
 8579|      0|          }
 8580|       |
 8581|       |          // optional bool py_generic_services = 18 [default = false];
 8582|      2|          if (cached_has_bits & 0x00010000u) {
  ------------------
  |  Branch (8582:15): [True: 0, False: 2]
  ------------------
 8583|      0|            target = stream->EnsureSpace(target);
 8584|      0|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
 8585|      0|                18, this_._internal_py_generic_services(), target);
 8586|      0|          }
 8587|       |
 8588|       |          // optional bool java_generate_equals_and_hash = 20 [deprecated = true];
 8589|      2|          if (cached_has_bits & 0x00001000u) {
  ------------------
  |  Branch (8589:15): [True: 0, False: 2]
  ------------------
 8590|      0|            target = stream->EnsureSpace(target);
 8591|      0|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
 8592|      0|                20, this_._internal_java_generate_equals_and_hash(), target);
 8593|      0|          }
 8594|       |
 8595|       |          // optional bool deprecated = 23 [default = false];
 8596|      2|          if (cached_has_bits & 0x00020000u) {
  ------------------
  |  Branch (8596:15): [True: 0, False: 2]
  ------------------
 8597|      0|            target = stream->EnsureSpace(target);
 8598|      0|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
 8599|      0|                23, this_._internal_deprecated(), target);
 8600|      0|          }
 8601|       |
 8602|       |          // optional bool java_string_check_utf8 = 27 [default = false];
 8603|      2|          if (cached_has_bits & 0x00002000u) {
  ------------------
  |  Branch (8603:15): [True: 0, False: 2]
  ------------------
 8604|      0|            target = stream->EnsureSpace(target);
 8605|      0|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
 8606|      0|                27, this_._internal_java_string_check_utf8(), target);
 8607|      0|          }
 8608|       |
 8609|       |          // optional bool cc_enable_arenas = 31 [default = true];
 8610|      2|          if (cached_has_bits & 0x00080000u) {
  ------------------
  |  Branch (8610:15): [True: 1, False: 1]
  ------------------
 8611|      1|            target = stream->EnsureSpace(target);
 8612|      1|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
 8613|      1|                31, this_._internal_cc_enable_arenas(), target);
 8614|      1|          }
 8615|       |
 8616|       |          // optional string objc_class_prefix = 36;
 8617|      2|          if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (8617:15): [True: 2, False: 0]
  ------------------
 8618|      2|            const std::string& _s = this_._internal_objc_class_prefix();
 8619|      2|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 8620|      2|                                        "google.protobuf.FileOptions.objc_class_prefix");
 8621|      2|            target = stream->WriteStringMaybeAliased(36, _s, target);
 8622|      2|          }
 8623|       |
 8624|       |          // optional string csharp_namespace = 37;
 8625|      2|          if (cached_has_bits & 0x00000010u) {
  ------------------
  |  Branch (8625:15): [True: 2, False: 0]
  ------------------
 8626|      2|            const std::string& _s = this_._internal_csharp_namespace();
 8627|      2|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 8628|      2|                                        "google.protobuf.FileOptions.csharp_namespace");
 8629|      2|            target = stream->WriteStringMaybeAliased(37, _s, target);
 8630|      2|          }
 8631|       |
 8632|       |          // optional string swift_prefix = 39;
 8633|      2|          if (cached_has_bits & 0x00000020u) {
  ------------------
  |  Branch (8633:15): [True: 0, False: 2]
  ------------------
 8634|      0|            const std::string& _s = this_._internal_swift_prefix();
 8635|      0|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 8636|      0|                                        "google.protobuf.FileOptions.swift_prefix");
 8637|      0|            target = stream->WriteStringMaybeAliased(39, _s, target);
 8638|      0|          }
 8639|       |
 8640|       |          // optional string php_class_prefix = 40;
 8641|      2|          if (cached_has_bits & 0x00000040u) {
  ------------------
  |  Branch (8641:15): [True: 0, False: 2]
  ------------------
 8642|      0|            const std::string& _s = this_._internal_php_class_prefix();
 8643|      0|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 8644|      0|                                        "google.protobuf.FileOptions.php_class_prefix");
 8645|      0|            target = stream->WriteStringMaybeAliased(40, _s, target);
 8646|      0|          }
 8647|       |
 8648|       |          // optional string php_namespace = 41;
 8649|      2|          if (cached_has_bits & 0x00000080u) {
  ------------------
  |  Branch (8649:15): [True: 0, False: 2]
  ------------------
 8650|      0|            const std::string& _s = this_._internal_php_namespace();
 8651|      0|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 8652|      0|                                        "google.protobuf.FileOptions.php_namespace");
 8653|      0|            target = stream->WriteStringMaybeAliased(41, _s, target);
 8654|      0|          }
 8655|       |
 8656|       |          // optional string php_metadata_namespace = 44;
 8657|      2|          if (cached_has_bits & 0x00000100u) {
  ------------------
  |  Branch (8657:15): [True: 0, False: 2]
  ------------------
 8658|      0|            const std::string& _s = this_._internal_php_metadata_namespace();
 8659|      0|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 8660|      0|                                        "google.protobuf.FileOptions.php_metadata_namespace");
 8661|      0|            target = stream->WriteStringMaybeAliased(44, _s, target);
 8662|      0|          }
 8663|       |
 8664|       |          // optional string ruby_package = 45;
 8665|      2|          if (cached_has_bits & 0x00000200u) {
  ------------------
  |  Branch (8665:15): [True: 0, False: 2]
  ------------------
 8666|      0|            const std::string& _s = this_._internal_ruby_package();
 8667|      0|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 8668|      0|                                        "google.protobuf.FileOptions.ruby_package");
 8669|      0|            target = stream->WriteStringMaybeAliased(45, _s, target);
 8670|      0|          }
 8671|       |
 8672|       |          // optional .google.protobuf.FeatureSet features = 50;
 8673|      2|          if (cached_has_bits & 0x00000400u) {
  ------------------
  |  Branch (8673:15): [True: 0, False: 2]
  ------------------
 8674|      0|            target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
 8675|      0|                50, *this_._impl_.features_, this_._impl_.features_->GetCachedSize(), target,
 8676|      0|                stream);
 8677|      0|          }
 8678|       |
 8679|       |          // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
 8680|      2|          for (unsigned i = 0, n = static_cast<unsigned>(
 8681|      2|                                   this_._internal_uninterpreted_option_size());
 8682|      2|               i < n; i++) {
  ------------------
  |  Branch (8682:16): [True: 0, False: 2]
  ------------------
 8683|      0|            const auto& repfield = this_._internal_uninterpreted_option().Get(i);
 8684|      0|            target =
 8685|      0|                ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
 8686|      0|                    999, repfield, repfield.GetCachedSize(),
 8687|      0|                    target, stream);
 8688|      0|          }
 8689|       |
 8690|       |          // Extension range [1000, 536870912)
 8691|      2|          target = this_._impl_._extensions_._InternalSerialize(
 8692|      2|              internal_default_instance(), 1000, 536870912, target, stream);
 8693|      2|          if (PROTOBUF_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
  ------------------
  |  |  365|      2|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 2]
  |  |  |  Branch (365:54): [Folded, False: 2]
  |  |  |  Branch (365:63): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 8694|      0|            target =
 8695|      0|                ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
 8696|      0|                    this_._internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance), target, stream);
 8697|      0|          }
 8698|       |          // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.FileOptions)
 8699|      2|          return target;
 8700|      2|        }
_ZNK6google8protobuf11FileOptions12ByteSizeLongEv:
 8706|      2|        ::size_t FileOptions::ByteSizeLong() const {
 8707|      2|          const FileOptions& this_ = *this;
 8708|      2|#endif  // PROTOBUF_CUSTOM_VTABLE
 8709|       |          // @@protoc_insertion_point(message_byte_size_start:google.protobuf.FileOptions)
 8710|      2|          ::size_t total_size = 0;
 8711|      2|          total_size += this_._impl_._extensions_.ByteSize();
 8712|       |
 8713|      2|          ::uint32_t cached_has_bits = 0;
 8714|       |          // Prevent compiler warnings about cached_has_bits being unused
 8715|      2|          (void)cached_has_bits;
 8716|       |
 8717|      2|          ::_pbi::Prefetch5LinesFrom7Lines(&this_);
 8718|      2|           {
 8719|       |            // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
 8720|      2|            {
 8721|      2|              total_size += 2UL * this_._internal_uninterpreted_option_size();
 8722|      2|              for (const auto& msg : this_._internal_uninterpreted_option()) {
  ------------------
  |  Branch (8722:36): [True: 0, False: 2]
  ------------------
 8723|      0|                total_size += ::google::protobuf::internal::WireFormatLite::MessageSize(msg);
 8724|      0|              }
 8725|      2|            }
 8726|      2|          }
 8727|      2|          cached_has_bits = this_._impl_._has_bits_[0];
 8728|      2|          if (cached_has_bits & 0x000000ffu) {
  ------------------
  |  Branch (8728:15): [True: 2, False: 0]
  ------------------
 8729|       |            // optional string java_package = 1;
 8730|      2|            if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (8730:17): [True: 2, False: 0]
  ------------------
 8731|      2|              total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
 8732|      2|                                              this_._internal_java_package());
 8733|      2|            }
 8734|       |            // optional string java_outer_classname = 8;
 8735|      2|            if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (8735:17): [True: 2, False: 0]
  ------------------
 8736|      2|              total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
 8737|      2|                                              this_._internal_java_outer_classname());
 8738|      2|            }
 8739|       |            // optional string go_package = 11;
 8740|      2|            if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (8740:17): [True: 2, False: 0]
  ------------------
 8741|      2|              total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
 8742|      2|                                              this_._internal_go_package());
 8743|      2|            }
 8744|       |            // optional string objc_class_prefix = 36;
 8745|      2|            if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (8745:17): [True: 2, False: 0]
  ------------------
 8746|      2|              total_size += 2 + ::google::protobuf::internal::WireFormatLite::StringSize(
 8747|      2|                                              this_._internal_objc_class_prefix());
 8748|      2|            }
 8749|       |            // optional string csharp_namespace = 37;
 8750|      2|            if (cached_has_bits & 0x00000010u) {
  ------------------
  |  Branch (8750:17): [True: 2, False: 0]
  ------------------
 8751|      2|              total_size += 2 + ::google::protobuf::internal::WireFormatLite::StringSize(
 8752|      2|                                              this_._internal_csharp_namespace());
 8753|      2|            }
 8754|       |            // optional string swift_prefix = 39;
 8755|      2|            if (cached_has_bits & 0x00000020u) {
  ------------------
  |  Branch (8755:17): [True: 0, False: 2]
  ------------------
 8756|      0|              total_size += 2 + ::google::protobuf::internal::WireFormatLite::StringSize(
 8757|      0|                                              this_._internal_swift_prefix());
 8758|      0|            }
 8759|       |            // optional string php_class_prefix = 40;
 8760|      2|            if (cached_has_bits & 0x00000040u) {
  ------------------
  |  Branch (8760:17): [True: 0, False: 2]
  ------------------
 8761|      0|              total_size += 2 + ::google::protobuf::internal::WireFormatLite::StringSize(
 8762|      0|                                              this_._internal_php_class_prefix());
 8763|      0|            }
 8764|       |            // optional string php_namespace = 41;
 8765|      2|            if (cached_has_bits & 0x00000080u) {
  ------------------
  |  Branch (8765:17): [True: 0, False: 2]
  ------------------
 8766|      0|              total_size += 2 + ::google::protobuf::internal::WireFormatLite::StringSize(
 8767|      0|                                              this_._internal_php_namespace());
 8768|      0|            }
 8769|      2|          }
 8770|      2|          if (cached_has_bits & 0x0000ff00u) {
  ------------------
  |  Branch (8770:15): [True: 1, False: 1]
  ------------------
 8771|       |            // optional string php_metadata_namespace = 44;
 8772|      1|            if (cached_has_bits & 0x00000100u) {
  ------------------
  |  Branch (8772:17): [True: 0, False: 1]
  ------------------
 8773|      0|              total_size += 2 + ::google::protobuf::internal::WireFormatLite::StringSize(
 8774|      0|                                              this_._internal_php_metadata_namespace());
 8775|      0|            }
 8776|       |            // optional string ruby_package = 45;
 8777|      1|            if (cached_has_bits & 0x00000200u) {
  ------------------
  |  Branch (8777:17): [True: 0, False: 1]
  ------------------
 8778|      0|              total_size += 2 + ::google::protobuf::internal::WireFormatLite::StringSize(
 8779|      0|                                              this_._internal_ruby_package());
 8780|      0|            }
 8781|       |            // optional .google.protobuf.FeatureSet features = 50;
 8782|      1|            if (cached_has_bits & 0x00000400u) {
  ------------------
  |  Branch (8782:17): [True: 0, False: 1]
  ------------------
 8783|      0|              total_size += 2 +
 8784|      0|                            ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.features_);
 8785|      0|            }
 8786|       |            // optional bool java_multiple_files = 10 [default = false];
 8787|      1|            if (cached_has_bits & 0x00000800u) {
  ------------------
  |  Branch (8787:17): [True: 1, False: 0]
  ------------------
 8788|      1|              total_size += 2;
 8789|      1|            }
 8790|       |            // optional bool java_generate_equals_and_hash = 20 [deprecated = true];
 8791|      1|            if (cached_has_bits & 0x00001000u) {
  ------------------
  |  Branch (8791:17): [True: 0, False: 1]
  ------------------
 8792|      0|              total_size += 3;
 8793|      0|            }
 8794|       |            // optional bool java_string_check_utf8 = 27 [default = false];
 8795|      1|            if (cached_has_bits & 0x00002000u) {
  ------------------
  |  Branch (8795:17): [True: 0, False: 1]
  ------------------
 8796|      0|              total_size += 3;
 8797|      0|            }
 8798|       |            // optional bool cc_generic_services = 16 [default = false];
 8799|      1|            if (cached_has_bits & 0x00004000u) {
  ------------------
  |  Branch (8799:17): [True: 0, False: 1]
  ------------------
 8800|      0|              total_size += 3;
 8801|      0|            }
 8802|       |            // optional bool java_generic_services = 17 [default = false];
 8803|      1|            if (cached_has_bits & 0x00008000u) {
  ------------------
  |  Branch (8803:17): [True: 0, False: 1]
  ------------------
 8804|      0|              total_size += 3;
 8805|      0|            }
 8806|      1|          }
 8807|      2|          if (cached_has_bits & 0x000f0000u) {
  ------------------
  |  Branch (8807:15): [True: 1, False: 1]
  ------------------
 8808|       |            // optional bool py_generic_services = 18 [default = false];
 8809|      1|            if (cached_has_bits & 0x00010000u) {
  ------------------
  |  Branch (8809:17): [True: 0, False: 1]
  ------------------
 8810|      0|              total_size += 3;
 8811|      0|            }
 8812|       |            // optional bool deprecated = 23 [default = false];
 8813|      1|            if (cached_has_bits & 0x00020000u) {
  ------------------
  |  Branch (8813:17): [True: 0, False: 1]
  ------------------
 8814|      0|              total_size += 3;
 8815|      0|            }
 8816|       |            // optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];
 8817|      1|            if (cached_has_bits & 0x00040000u) {
  ------------------
  |  Branch (8817:17): [True: 1, False: 0]
  ------------------
 8818|      1|              total_size += 1 +
 8819|      1|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_optimize_for());
 8820|      1|            }
 8821|       |            // optional bool cc_enable_arenas = 31 [default = true];
 8822|      1|            if (cached_has_bits & 0x00080000u) {
  ------------------
  |  Branch (8822:17): [True: 1, False: 0]
  ------------------
 8823|      1|              total_size += 3;
 8824|      1|            }
 8825|      1|          }
 8826|      2|          return this_.MaybeComputeUnknownFieldsSize(total_size,
 8827|      2|                                                     &this_._impl_._cached_size_);
 8828|      2|        }
_ZN6google8protobuf11FileOptions17IsInitializedImplERKNS0_11MessageLiteE:
 8927|      9|    const MessageLite& msg) {
 8928|      9|  auto& this_ = static_cast<const FileOptions&>(msg);
 8929|      9|  if (!this_._impl_._extensions_.IsInitialized(
  ------------------
  |  Branch (8929:7): [True: 0, False: 9]
  ------------------
 8930|      9|          internal_default_instance())) {
 8931|      0|    return false;
 8932|      0|  }
 8933|      9|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_uninterpreted_option()))
  ------------------
  |  Branch (8933:7): [True: 0, False: 9]
  ------------------
 8934|      0|    return false;
 8935|      9|  if ((this_._impl_._has_bits_[0] & 0x00000400u) != 0) {
  ------------------
  |  Branch (8935:7): [True: 0, False: 9]
  ------------------
 8936|      0|    if (!this_._impl_.features_->IsInitialized()) return false;
  ------------------
  |  Branch (8936:9): [True: 0, False: 0]
  ------------------
 8937|      0|  }
 8938|      9|  return true;
 8939|      9|}
_ZNK6google8protobuf14MessageOptions12GetClassDataEv:
 9098|      1|const ::google::protobuf::internal::ClassData* MessageOptions::GetClassData() const {
 9099|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 9100|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 9101|      1|  return _class_data_.base();
 9102|      1|}
_ZN6google8protobuf27FieldOptions_EditionDefaultD2Ev:
 9468|     18|FieldOptions_EditionDefault::~FieldOptions_EditionDefault() {
 9469|       |  // @@protoc_insertion_point(destructor:google.protobuf.FieldOptions.EditionDefault)
 9470|     18|  SharedDtor(*this);
 9471|     18|}
_ZNK6google8protobuf27FieldOptions_EditionDefault12GetClassDataEv:
 9510|      1|const ::google::protobuf::internal::ClassData* FieldOptions_EditionDefault::GetClassData() const {
 9511|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 9512|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 9513|      1|  return _class_data_.base();
 9514|      1|}
_ZNK6google8protobuf27FieldOptions_EditionDefault18_InternalSerializeEPhPNS0_2io19EpsCopyOutputStreamE:
 9581|     18|            ::google::protobuf::io::EpsCopyOutputStream* stream) const {
 9582|     18|          const FieldOptions_EditionDefault& this_ = *this;
 9583|     18|#endif  // PROTOBUF_CUSTOM_VTABLE
 9584|       |          // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.FieldOptions.EditionDefault)
 9585|     18|          ::uint32_t cached_has_bits = 0;
 9586|     18|          (void)cached_has_bits;
 9587|       |
 9588|     18|          cached_has_bits = this_._impl_._has_bits_[0];
 9589|       |          // optional string value = 2;
 9590|     18|          if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (9590:15): [True: 18, False: 0]
  ------------------
 9591|     18|            const std::string& _s = this_._internal_value();
 9592|     18|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 9593|     18|                                        "google.protobuf.FieldOptions.EditionDefault.value");
 9594|     18|            target = stream->WriteStringMaybeAliased(2, _s, target);
 9595|     18|          }
 9596|       |
 9597|       |          // optional .google.protobuf.Edition edition = 3;
 9598|     18|          if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (9598:15): [True: 18, False: 0]
  ------------------
 9599|     18|            target = stream->EnsureSpace(target);
 9600|     18|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
 9601|     18|                3, this_._internal_edition(), target);
 9602|     18|          }
 9603|       |
 9604|     18|          if (PROTOBUF_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
  ------------------
  |  |  365|     18|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 18]
  |  |  |  Branch (365:54): [Folded, False: 18]
  |  |  |  Branch (365:63): [True: 0, False: 18]
  |  |  ------------------
  ------------------
 9605|      0|            target =
 9606|      0|                ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
 9607|      0|                    this_._internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance), target, stream);
 9608|      0|          }
 9609|       |          // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.FieldOptions.EditionDefault)
 9610|     18|          return target;
 9611|     18|        }
_ZNK6google8protobuf27FieldOptions_EditionDefault12ByteSizeLongEv:
 9617|     18|        ::size_t FieldOptions_EditionDefault::ByteSizeLong() const {
 9618|     18|          const FieldOptions_EditionDefault& this_ = *this;
 9619|     18|#endif  // PROTOBUF_CUSTOM_VTABLE
 9620|       |          // @@protoc_insertion_point(message_byte_size_start:google.protobuf.FieldOptions.EditionDefault)
 9621|     18|          ::size_t total_size = 0;
 9622|       |
 9623|     18|          ::uint32_t cached_has_bits = 0;
 9624|       |          // Prevent compiler warnings about cached_has_bits being unused
 9625|     18|          (void)cached_has_bits;
 9626|       |
 9627|     18|          ::_pbi::Prefetch5LinesFrom7Lines(&this_);
 9628|     18|          cached_has_bits = this_._impl_._has_bits_[0];
 9629|     18|          if (cached_has_bits & 0x00000003u) {
  ------------------
  |  Branch (9629:15): [True: 18, False: 0]
  ------------------
 9630|       |            // optional string value = 2;
 9631|     18|            if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (9631:17): [True: 18, False: 0]
  ------------------
 9632|     18|              total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
 9633|     18|                                              this_._internal_value());
 9634|     18|            }
 9635|       |            // optional .google.protobuf.Edition edition = 3;
 9636|     18|            if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (9636:17): [True: 18, False: 0]
  ------------------
 9637|     18|              total_size += 1 +
 9638|     18|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_edition());
 9639|     18|            }
 9640|     18|          }
 9641|     18|          return this_.MaybeComputeUnknownFieldsSize(total_size,
 9642|     18|                                                     &this_._impl_._cached_size_);
 9643|     18|        }
_ZN6google8protobuf27FieldOptions_FeatureSupportD2Ev:
 9751|      9|FieldOptions_FeatureSupport::~FieldOptions_FeatureSupport() {
 9752|       |  // @@protoc_insertion_point(destructor:google.protobuf.FieldOptions.FeatureSupport)
 9753|      9|  SharedDtor(*this);
 9754|      9|}
_ZNK6google8protobuf27FieldOptions_FeatureSupport12GetClassDataEv:
 9793|      1|const ::google::protobuf::internal::ClassData* FieldOptions_FeatureSupport::GetClassData() const {
 9794|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 9795|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 9796|      1|  return _class_data_.base();
 9797|      1|}
_ZNK6google8protobuf27FieldOptions_FeatureSupport18_InternalSerializeEPhPNS0_2io19EpsCopyOutputStreamE:
 9882|      9|            ::google::protobuf::io::EpsCopyOutputStream* stream) const {
 9883|      9|          const FieldOptions_FeatureSupport& this_ = *this;
 9884|      9|#endif  // PROTOBUF_CUSTOM_VTABLE
 9885|       |          // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.FieldOptions.FeatureSupport)
 9886|      9|          ::uint32_t cached_has_bits = 0;
 9887|      9|          (void)cached_has_bits;
 9888|       |
 9889|      9|          cached_has_bits = this_._impl_._has_bits_[0];
 9890|       |          // optional .google.protobuf.Edition edition_introduced = 1;
 9891|      9|          if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (9891:15): [True: 9, False: 0]
  ------------------
 9892|      9|            target = stream->EnsureSpace(target);
 9893|      9|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
 9894|      9|                1, this_._internal_edition_introduced(), target);
 9895|      9|          }
 9896|       |
 9897|       |          // optional .google.protobuf.Edition edition_deprecated = 2;
 9898|      9|          if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (9898:15): [True: 1, False: 8]
  ------------------
 9899|      1|            target = stream->EnsureSpace(target);
 9900|      1|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
 9901|      1|                2, this_._internal_edition_deprecated(), target);
 9902|      1|          }
 9903|       |
 9904|       |          // optional string deprecation_warning = 3;
 9905|      9|          if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (9905:15): [True: 1, False: 8]
  ------------------
 9906|      1|            const std::string& _s = this_._internal_deprecation_warning();
 9907|      1|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 9908|      1|                                        "google.protobuf.FieldOptions.FeatureSupport.deprecation_warning");
 9909|      1|            target = stream->WriteStringMaybeAliased(3, _s, target);
 9910|      1|          }
 9911|       |
 9912|       |          // optional .google.protobuf.Edition edition_removed = 4;
 9913|      9|          if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (9913:15): [True: 0, False: 9]
  ------------------
 9914|      0|            target = stream->EnsureSpace(target);
 9915|      0|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
 9916|      0|                4, this_._internal_edition_removed(), target);
 9917|      0|          }
 9918|       |
 9919|      9|          if (PROTOBUF_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
  ------------------
  |  |  365|      9|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 9]
  |  |  |  Branch (365:54): [Folded, False: 9]
  |  |  |  Branch (365:63): [True: 0, False: 9]
  |  |  ------------------
  ------------------
 9920|      0|            target =
 9921|      0|                ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
 9922|      0|                    this_._internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance), target, stream);
 9923|      0|          }
 9924|       |          // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.FieldOptions.FeatureSupport)
 9925|      9|          return target;
 9926|      9|        }
_ZNK6google8protobuf27FieldOptions_FeatureSupport12ByteSizeLongEv:
 9932|      9|        ::size_t FieldOptions_FeatureSupport::ByteSizeLong() const {
 9933|      9|          const FieldOptions_FeatureSupport& this_ = *this;
 9934|      9|#endif  // PROTOBUF_CUSTOM_VTABLE
 9935|       |          // @@protoc_insertion_point(message_byte_size_start:google.protobuf.FieldOptions.FeatureSupport)
 9936|      9|          ::size_t total_size = 0;
 9937|       |
 9938|      9|          ::uint32_t cached_has_bits = 0;
 9939|       |          // Prevent compiler warnings about cached_has_bits being unused
 9940|      9|          (void)cached_has_bits;
 9941|       |
 9942|      9|          ::_pbi::Prefetch5LinesFrom7Lines(&this_);
 9943|      9|          cached_has_bits = this_._impl_._has_bits_[0];
 9944|      9|          if (cached_has_bits & 0x0000000fu) {
  ------------------
  |  Branch (9944:15): [True: 9, False: 0]
  ------------------
 9945|       |            // optional string deprecation_warning = 3;
 9946|      9|            if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (9946:17): [True: 1, False: 8]
  ------------------
 9947|      1|              total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
 9948|      1|                                              this_._internal_deprecation_warning());
 9949|      1|            }
 9950|       |            // optional .google.protobuf.Edition edition_introduced = 1;
 9951|      9|            if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (9951:17): [True: 9, False: 0]
  ------------------
 9952|      9|              total_size += 1 +
 9953|      9|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_edition_introduced());
 9954|      9|            }
 9955|       |            // optional .google.protobuf.Edition edition_deprecated = 2;
 9956|      9|            if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (9956:17): [True: 1, False: 8]
  ------------------
 9957|      1|              total_size += 1 +
 9958|      1|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_edition_deprecated());
 9959|      1|            }
 9960|       |            // optional .google.protobuf.Edition edition_removed = 4;
 9961|      9|            if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (9961:17): [True: 0, False: 9]
  ------------------
 9962|      0|              total_size += 1 +
 9963|      0|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_edition_removed());
 9964|      0|            }
 9965|      9|          }
 9966|      9|          return this_.MaybeComputeUnknownFieldsSize(total_size,
 9967|      9|                                                     &this_._impl_._cached_size_);
 9968|      9|        }
_ZN6google8protobuf12FieldOptionsC2EPNS0_5ArenaE:
10037|     17|    : ::google::protobuf::Message(arena) {
10038|     17|#endif  // PROTOBUF_CUSTOM_VTABLE
10039|     17|  SharedCtor(arena);
10040|       |  // @@protoc_insertion_point(arena_constructor:google.protobuf.FieldOptions)
10041|     17|}
_ZN6google8protobuf12FieldOptionsD2Ev:
10101|     17|FieldOptions::~FieldOptions() {
10102|       |  // @@protoc_insertion_point(destructor:google.protobuf.FieldOptions)
10103|     17|  SharedDtor(*this);
10104|     17|}
_ZNK6google8protobuf12FieldOptions12GetClassDataEv:
10167|     35|const ::google::protobuf::internal::ClassData* FieldOptions::GetClassData() const {
10168|     35|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
10169|     35|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
10170|     35|  return _class_data_.base();
10171|     35|}
_ZN6google8protobuf12FieldOptions5ClearEv:
10286|     17|PROTOBUF_NOINLINE void FieldOptions::Clear() {
10287|       |// @@protoc_insertion_point(message_clear_start:google.protobuf.FieldOptions)
10288|     17|  ::google::protobuf::internal::TSanWrite(&_impl_);
10289|     17|  ::uint32_t cached_has_bits = 0;
10290|       |  // Prevent compiler warnings about cached_has_bits being unused
10291|     17|  (void) cached_has_bits;
10292|       |
10293|     17|  _impl_._extensions_.Clear();
10294|     17|  _impl_.targets_.Clear();
10295|     17|  _impl_.edition_defaults_.Clear();
10296|     17|  _impl_.uninterpreted_option_.Clear();
10297|     17|  cached_has_bits = _impl_._has_bits_[0];
10298|     17|  if (cached_has_bits & 0x00000003u) {
  ------------------
  |  Branch (10298:7): [True: 0, False: 17]
  ------------------
10299|      0|    if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (10299:9): [True: 0, False: 0]
  ------------------
10300|      0|      ABSL_DCHECK(_impl_.features_ != nullptr);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10301|      0|      _impl_.features_->Clear();
10302|      0|    }
10303|      0|    if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (10303:9): [True: 0, False: 0]
  ------------------
10304|      0|      ABSL_DCHECK(_impl_.feature_support_ != nullptr);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10305|      0|      _impl_.feature_support_->Clear();
10306|      0|    }
10307|      0|  }
10308|     17|  if (cached_has_bits & 0x000000fcu) {
  ------------------
  |  Branch (10308:7): [True: 0, False: 17]
  ------------------
10309|      0|    ::memset(&_impl_.ctype_, 0, static_cast<::size_t>(
10310|      0|        reinterpret_cast<char*>(&_impl_.deprecated_) -
10311|      0|        reinterpret_cast<char*>(&_impl_.ctype_)) + sizeof(_impl_.deprecated_));
10312|      0|  }
10313|     17|  if (cached_has_bits & 0x00000700u) {
  ------------------
  |  Branch (10313:7): [True: 0, False: 17]
  ------------------
10314|      0|    ::memset(&_impl_.weak_, 0, static_cast<::size_t>(
10315|      0|        reinterpret_cast<char*>(&_impl_.retention_) -
10316|      0|        reinterpret_cast<char*>(&_impl_.weak_)) + sizeof(_impl_.retention_));
10317|      0|  }
10318|     17|  _impl_._has_bits_.Clear();
10319|     17|  _internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>();
10320|     17|}
_ZNK6google8protobuf12FieldOptions18_InternalSerializeEPhPNS0_2io19EpsCopyOutputStreamE:
10330|     17|            ::google::protobuf::io::EpsCopyOutputStream* stream) const {
10331|     17|          const FieldOptions& this_ = *this;
10332|     17|#endif  // PROTOBUF_CUSTOM_VTABLE
10333|       |          // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.FieldOptions)
10334|     17|          ::uint32_t cached_has_bits = 0;
10335|     17|          (void)cached_has_bits;
10336|       |
10337|     17|          cached_has_bits = this_._impl_._has_bits_[0];
10338|       |          // optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];
10339|     17|          if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (10339:15): [True: 0, False: 17]
  ------------------
10340|      0|            target = stream->EnsureSpace(target);
10341|      0|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
10342|      0|                1, this_._internal_ctype(), target);
10343|      0|          }
10344|       |
10345|       |          // optional bool packed = 2;
10346|     17|          if (cached_has_bits & 0x00000010u) {
  ------------------
  |  Branch (10346:15): [True: 3, False: 14]
  ------------------
10347|      3|            target = stream->EnsureSpace(target);
10348|      3|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
10349|      3|                2, this_._internal_packed(), target);
10350|      3|          }
10351|       |
10352|       |          // optional bool deprecated = 3 [default = false];
10353|     17|          if (cached_has_bits & 0x00000080u) {
  ------------------
  |  Branch (10353:15): [True: 3, False: 14]
  ------------------
10354|      3|            target = stream->EnsureSpace(target);
10355|      3|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
10356|      3|                3, this_._internal_deprecated(), target);
10357|      3|          }
10358|       |
10359|       |          // optional bool lazy = 5 [default = false];
10360|     17|          if (cached_has_bits & 0x00000020u) {
  ------------------
  |  Branch (10360:15): [True: 0, False: 17]
  ------------------
10361|      0|            target = stream->EnsureSpace(target);
10362|      0|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
10363|      0|                5, this_._internal_lazy(), target);
10364|      0|          }
10365|       |
10366|       |          // optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL];
10367|     17|          if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (10367:15): [True: 0, False: 17]
  ------------------
10368|      0|            target = stream->EnsureSpace(target);
10369|      0|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
10370|      0|                6, this_._internal_jstype(), target);
10371|      0|          }
10372|       |
10373|       |          // optional bool weak = 10 [default = false];
10374|     17|          if (cached_has_bits & 0x00000100u) {
  ------------------
  |  Branch (10374:15): [True: 0, False: 17]
  ------------------
10375|      0|            target = stream->EnsureSpace(target);
10376|      0|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
10377|      0|                10, this_._internal_weak(), target);
10378|      0|          }
10379|       |
10380|       |          // optional bool unverified_lazy = 15 [default = false];
10381|     17|          if (cached_has_bits & 0x00000040u) {
  ------------------
  |  Branch (10381:15): [True: 0, False: 17]
  ------------------
10382|      0|            target = stream->EnsureSpace(target);
10383|      0|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
10384|      0|                15, this_._internal_unverified_lazy(), target);
10385|      0|          }
10386|       |
10387|       |          // optional bool debug_redact = 16 [default = false];
10388|     17|          if (cached_has_bits & 0x00000200u) {
  ------------------
  |  Branch (10388:15): [True: 0, False: 17]
  ------------------
10389|      0|            target = stream->EnsureSpace(target);
10390|      0|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
10391|      0|                16, this_._internal_debug_redact(), target);
10392|      0|          }
10393|       |
10394|       |          // optional .google.protobuf.FieldOptions.OptionRetention retention = 17;
10395|     17|          if (cached_has_bits & 0x00000400u) {
  ------------------
  |  Branch (10395:15): [True: 11, False: 6]
  ------------------
10396|     11|            target = stream->EnsureSpace(target);
10397|     11|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
10398|     11|                17, this_._internal_retention(), target);
10399|     11|          }
10400|       |
10401|       |          // repeated .google.protobuf.FieldOptions.OptionTargetType targets = 19;
10402|     36|          for (int i = 0, n = this_._internal_targets_size(); i < n; ++i) {
  ------------------
  |  Branch (10402:63): [True: 19, False: 17]
  ------------------
10403|     19|            target = stream->EnsureSpace(target);
10404|     19|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
10405|     19|                19, static_cast<::google::protobuf::FieldOptions_OptionTargetType>(this_._internal_targets().Get(i)),
10406|     19|                target);
10407|     19|          }
10408|       |
10409|       |          // repeated .google.protobuf.FieldOptions.EditionDefault edition_defaults = 20;
10410|     17|          for (unsigned i = 0, n = static_cast<unsigned>(
10411|     17|                                   this_._internal_edition_defaults_size());
10412|     35|               i < n; i++) {
  ------------------
  |  Branch (10412:16): [True: 18, False: 17]
  ------------------
10413|     18|            const auto& repfield = this_._internal_edition_defaults().Get(i);
10414|     18|            target =
10415|     18|                ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
10416|     18|                    20, repfield, repfield.GetCachedSize(),
10417|     18|                    target, stream);
10418|     18|          }
10419|       |
10420|       |          // optional .google.protobuf.FeatureSet features = 21;
10421|     17|          if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (10421:15): [True: 0, False: 17]
  ------------------
10422|      0|            target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
10423|      0|                21, *this_._impl_.features_, this_._impl_.features_->GetCachedSize(), target,
10424|      0|                stream);
10425|      0|          }
10426|       |
10427|       |          // optional .google.protobuf.FieldOptions.FeatureSupport feature_support = 22;
10428|     17|          if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (10428:15): [True: 9, False: 8]
  ------------------
10429|      9|            target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
10430|      9|                22, *this_._impl_.feature_support_, this_._impl_.feature_support_->GetCachedSize(), target,
10431|      9|                stream);
10432|      9|          }
10433|       |
10434|       |          // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
10435|     17|          for (unsigned i = 0, n = static_cast<unsigned>(
10436|     17|                                   this_._internal_uninterpreted_option_size());
10437|     17|               i < n; i++) {
  ------------------
  |  Branch (10437:16): [True: 0, False: 17]
  ------------------
10438|      0|            const auto& repfield = this_._internal_uninterpreted_option().Get(i);
10439|      0|            target =
10440|      0|                ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
10441|      0|                    999, repfield, repfield.GetCachedSize(),
10442|      0|                    target, stream);
10443|      0|          }
10444|       |
10445|       |          // Extension range [1000, 536870912)
10446|     17|          target = this_._impl_._extensions_._InternalSerialize(
10447|     17|              internal_default_instance(), 1000, 536870912, target, stream);
10448|     17|          if (PROTOBUF_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
  ------------------
  |  |  365|     17|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 17]
  |  |  |  Branch (365:54): [Folded, False: 17]
  |  |  |  Branch (365:63): [True: 0, False: 17]
  |  |  ------------------
  ------------------
10449|      0|            target =
10450|      0|                ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
10451|      0|                    this_._internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance), target, stream);
10452|      0|          }
10453|       |          // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.FieldOptions)
10454|     17|          return target;
10455|     17|        }
_ZNK6google8protobuf12FieldOptions12ByteSizeLongEv:
10461|     17|        ::size_t FieldOptions::ByteSizeLong() const {
10462|     17|          const FieldOptions& this_ = *this;
10463|     17|#endif  // PROTOBUF_CUSTOM_VTABLE
10464|       |          // @@protoc_insertion_point(message_byte_size_start:google.protobuf.FieldOptions)
10465|     17|          ::size_t total_size = 0;
10466|     17|          total_size += this_._impl_._extensions_.ByteSize();
10467|       |
10468|     17|          ::uint32_t cached_has_bits = 0;
10469|       |          // Prevent compiler warnings about cached_has_bits being unused
10470|     17|          (void)cached_has_bits;
10471|       |
10472|     17|          ::_pbi::Prefetch5LinesFrom7Lines(&this_);
10473|     17|           {
10474|       |            // repeated .google.protobuf.FieldOptions.OptionTargetType targets = 19;
10475|     17|            {
10476|     17|              std::size_t data_size =
10477|     17|                  ::_pbi::WireFormatLite::EnumSize(this_._internal_targets());
10478|     17|              std::size_t tag_size = std::size_t{2} *
10479|     17|                  ::_pbi::FromIntSize(this_._internal_targets_size());
10480|     17|              total_size += data_size + tag_size;
10481|     17|            }
10482|       |            // repeated .google.protobuf.FieldOptions.EditionDefault edition_defaults = 20;
10483|     17|            {
10484|     17|              total_size += 2UL * this_._internal_edition_defaults_size();
10485|     18|              for (const auto& msg : this_._internal_edition_defaults()) {
  ------------------
  |  Branch (10485:36): [True: 18, False: 17]
  ------------------
10486|     18|                total_size += ::google::protobuf::internal::WireFormatLite::MessageSize(msg);
10487|     18|              }
10488|     17|            }
10489|       |            // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
10490|     17|            {
10491|     17|              total_size += 2UL * this_._internal_uninterpreted_option_size();
10492|     17|              for (const auto& msg : this_._internal_uninterpreted_option()) {
  ------------------
  |  Branch (10492:36): [True: 0, False: 17]
  ------------------
10493|      0|                total_size += ::google::protobuf::internal::WireFormatLite::MessageSize(msg);
10494|      0|              }
10495|     17|            }
10496|     17|          }
10497|     17|          cached_has_bits = this_._impl_._has_bits_[0];
10498|     17|          if (cached_has_bits & 0x000000ffu) {
  ------------------
  |  Branch (10498:15): [True: 15, False: 2]
  ------------------
10499|       |            // optional .google.protobuf.FeatureSet features = 21;
10500|     15|            if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (10500:17): [True: 0, False: 15]
  ------------------
10501|      0|              total_size += 2 +
10502|      0|                            ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.features_);
10503|      0|            }
10504|       |            // optional .google.protobuf.FieldOptions.FeatureSupport feature_support = 22;
10505|     15|            if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (10505:17): [True: 9, False: 6]
  ------------------
10506|      9|              total_size += 2 +
10507|      9|                            ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.feature_support_);
10508|      9|            }
10509|       |            // optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];
10510|     15|            if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (10510:17): [True: 0, False: 15]
  ------------------
10511|      0|              total_size += 1 +
10512|      0|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_ctype());
10513|      0|            }
10514|       |            // optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL];
10515|     15|            if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (10515:17): [True: 0, False: 15]
  ------------------
10516|      0|              total_size += 1 +
10517|      0|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_jstype());
10518|      0|            }
10519|       |            // optional bool packed = 2;
10520|     15|            if (cached_has_bits & 0x00000010u) {
  ------------------
  |  Branch (10520:17): [True: 3, False: 12]
  ------------------
10521|      3|              total_size += 2;
10522|      3|            }
10523|       |            // optional bool lazy = 5 [default = false];
10524|     15|            if (cached_has_bits & 0x00000020u) {
  ------------------
  |  Branch (10524:17): [True: 0, False: 15]
  ------------------
10525|      0|              total_size += 2;
10526|      0|            }
10527|       |            // optional bool unverified_lazy = 15 [default = false];
10528|     15|            if (cached_has_bits & 0x00000040u) {
  ------------------
  |  Branch (10528:17): [True: 0, False: 15]
  ------------------
10529|      0|              total_size += 2;
10530|      0|            }
10531|       |            // optional bool deprecated = 3 [default = false];
10532|     15|            if (cached_has_bits & 0x00000080u) {
  ------------------
  |  Branch (10532:17): [True: 3, False: 12]
  ------------------
10533|      3|              total_size += 2;
10534|      3|            }
10535|     15|          }
10536|     17|          if (cached_has_bits & 0x00000700u) {
  ------------------
  |  Branch (10536:15): [True: 11, False: 6]
  ------------------
10537|       |            // optional bool weak = 10 [default = false];
10538|     11|            if (cached_has_bits & 0x00000100u) {
  ------------------
  |  Branch (10538:17): [True: 0, False: 11]
  ------------------
10539|      0|              total_size += 2;
10540|      0|            }
10541|       |            // optional bool debug_redact = 16 [default = false];
10542|     11|            if (cached_has_bits & 0x00000200u) {
  ------------------
  |  Branch (10542:17): [True: 0, False: 11]
  ------------------
10543|      0|              total_size += 3;
10544|      0|            }
10545|       |            // optional .google.protobuf.FieldOptions.OptionRetention retention = 17;
10546|     11|            if (cached_has_bits & 0x00000400u) {
  ------------------
  |  Branch (10546:17): [True: 11, False: 0]
  ------------------
10547|     11|              total_size += 2 +
10548|     11|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_retention());
10549|     11|            }
10550|     11|          }
10551|     17|          return this_.MaybeComputeUnknownFieldsSize(total_size,
10552|     17|                                                     &this_._impl_._cached_size_);
10553|     17|        }
_ZN6google8protobuf12FieldOptions17IsInitializedImplERKNS0_11MessageLiteE:
10632|     68|    const MessageLite& msg) {
10633|     68|  auto& this_ = static_cast<const FieldOptions&>(msg);
10634|     68|  if (!this_._impl_._extensions_.IsInitialized(
  ------------------
  |  Branch (10634:7): [True: 0, False: 68]
  ------------------
10635|     68|          internal_default_instance())) {
10636|      0|    return false;
10637|      0|  }
10638|     68|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_uninterpreted_option()))
  ------------------
  |  Branch (10638:7): [True: 0, False: 68]
  ------------------
10639|      0|    return false;
10640|     68|  if ((this_._impl_._has_bits_[0] & 0x00000001u) != 0) {
  ------------------
  |  Branch (10640:7): [True: 0, False: 68]
  ------------------
10641|      0|    if (!this_._impl_.features_->IsInitialized()) return false;
  ------------------
  |  Branch (10641:9): [True: 0, False: 0]
  ------------------
10642|      0|  }
10643|     68|  return true;
10644|     68|}
_ZNK6google8protobuf12OneofOptions12GetClassDataEv:
10781|      1|const ::google::protobuf::internal::ClassData* OneofOptions::GetClassData() const {
10782|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
10783|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
10784|      1|  return _class_data_.base();
10785|      1|}
_ZNK6google8protobuf11EnumOptions12GetClassDataEv:
11119|      1|const ::google::protobuf::internal::ClassData* EnumOptions::GetClassData() const {
11120|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
11121|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
11122|      1|  return _class_data_.base();
11123|      1|}
_ZNK6google8protobuf16EnumValueOptions12GetClassDataEv:
11530|      1|const ::google::protobuf::internal::ClassData* EnumValueOptions::GetClassData() const {
11531|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
11532|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
11533|      1|  return _class_data_.base();
11534|      1|}
_ZNK6google8protobuf14ServiceOptions12GetClassDataEv:
11947|      1|const ::google::protobuf::internal::ClassData* ServiceOptions::GetClassData() const {
11948|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
11949|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
11950|      1|  return _class_data_.base();
11951|      1|}
_ZNK6google8protobuf13MethodOptions12GetClassDataEv:
12313|      1|const ::google::protobuf::internal::ClassData* MethodOptions::GetClassData() const {
12314|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
12315|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
12316|      1|  return _class_data_.base();
12317|      1|}
_ZNK6google8protobuf28UninterpretedOption_NamePart12GetClassDataEv:
12678|      1|const ::google::protobuf::internal::ClassData* UninterpretedOption_NamePart::GetClassData() const {
12679|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
12680|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
12681|      1|  return _class_data_.base();
12682|      1|}
_ZNK6google8protobuf19UninterpretedOption12GetClassDataEv:
12988|      1|const ::google::protobuf::internal::ClassData* UninterpretedOption::GetClassData() const {
12989|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
12990|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
12991|      1|  return _class_data_.base();
12992|      1|}
_ZN6google8protobuf10FeatureSetC2EPNS0_5ArenaE:
13320|    259|    : ::google::protobuf::Message(arena) {
13321|    259|#endif  // PROTOBUF_CUSTOM_VTABLE
13322|    259|  SharedCtor(arena);
13323|       |  // @@protoc_insertion_point(arena_constructor:google.protobuf.FeatureSet)
13324|    259|}
_ZN6google8protobuf10FeatureSetC2EPNS0_5ArenaERKS1_:
13338|    775|    : ::google::protobuf::Message(arena) {
13339|    775|#endif  // PROTOBUF_CUSTOM_VTABLE
13340|    775|  FeatureSet* const _this = this;
13341|    775|  (void)_this;
13342|    775|  _internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(
13343|    775|      from._internal_metadata_);
13344|    775|  new (&_impl_) Impl_(internal_visibility(), arena, from._impl_, from);
13345|    775|  _impl_._extensions_.MergeFrom(this, from._impl_._extensions_);
13346|    775|  ::memcpy(reinterpret_cast<char *>(&_impl_) +
13347|    775|               offsetof(Impl_, field_presence_),
13348|    775|           reinterpret_cast<const char *>(&from._impl_) +
13349|    775|               offsetof(Impl_, field_presence_),
13350|    775|           offsetof(Impl_, json_format_) -
13351|    775|               offsetof(Impl_, field_presence_) +
13352|    775|               sizeof(Impl_::json_format_));
13353|       |
13354|       |  // @@protoc_insertion_point(copy_constructor:google.protobuf.FeatureSet)
13355|    775|}
_ZN6google8protobuf10FeatureSetD2Ev:
13371|  1.03k|FeatureSet::~FeatureSet() {
13372|       |  // @@protoc_insertion_point(destructor:google.protobuf.FeatureSet)
13373|  1.03k|  SharedDtor(*this);
13374|  1.03k|}
_ZNK6google8protobuf10FeatureSet12GetClassDataEv:
13423|      1|const ::google::protobuf::internal::ClassData* FeatureSet::GetClassData() const {
13424|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
13425|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
13426|      1|  return _class_data_.base();
13427|      1|}
_ZNK6google8protobuf10FeatureSet18_InternalSerializeEPhPNS0_2io19EpsCopyOutputStreamE:
13524|    239|            ::google::protobuf::io::EpsCopyOutputStream* stream) const {
13525|    239|          const FeatureSet& this_ = *this;
13526|    239|#endif  // PROTOBUF_CUSTOM_VTABLE
13527|       |          // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.FeatureSet)
13528|    239|          ::uint32_t cached_has_bits = 0;
13529|    239|          (void)cached_has_bits;
13530|       |
13531|    239|          cached_has_bits = this_._impl_._has_bits_[0];
13532|       |          // optional .google.protobuf.FeatureSet.FieldPresence field_presence = 1 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
13533|    239|          if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (13533:15): [True: 239, False: 0]
  ------------------
13534|    239|            target = stream->EnsureSpace(target);
13535|    239|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
13536|    239|                1, this_._internal_field_presence(), target);
13537|    239|          }
13538|       |
13539|       |          // optional .google.protobuf.FeatureSet.EnumType enum_type = 2 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_ENUM, targets = TARGET_TYPE_FILE, edition_defaults = {
13540|    239|          if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (13540:15): [True: 239, False: 0]
  ------------------
13541|    239|            target = stream->EnsureSpace(target);
13542|    239|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
13543|    239|                2, this_._internal_enum_type(), target);
13544|    239|          }
13545|       |
13546|       |          // optional .google.protobuf.FeatureSet.RepeatedFieldEncoding repeated_field_encoding = 3 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
13547|    239|          if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (13547:15): [True: 239, False: 0]
  ------------------
13548|    239|            target = stream->EnsureSpace(target);
13549|    239|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
13550|    239|                3, this_._internal_repeated_field_encoding(), target);
13551|    239|          }
13552|       |
13553|       |          // optional .google.protobuf.FeatureSet.Utf8Validation utf8_validation = 4 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
13554|    239|          if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (13554:15): [True: 239, False: 0]
  ------------------
13555|    239|            target = stream->EnsureSpace(target);
13556|    239|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
13557|    239|                4, this_._internal_utf8_validation(), target);
13558|    239|          }
13559|       |
13560|       |          // optional .google.protobuf.FeatureSet.MessageEncoding message_encoding = 5 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
13561|    239|          if (cached_has_bits & 0x00000010u) {
  ------------------
  |  Branch (13561:15): [True: 239, False: 0]
  ------------------
13562|    239|            target = stream->EnsureSpace(target);
13563|    239|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
13564|    239|                5, this_._internal_message_encoding(), target);
13565|    239|          }
13566|       |
13567|       |          // optional .google.protobuf.FeatureSet.JsonFormat json_format = 6 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_MESSAGE, targets = TARGET_TYPE_ENUM, targets = TARGET_TYPE_FILE, edition_defaults = {
13568|    239|          if (cached_has_bits & 0x00000020u) {
  ------------------
  |  Branch (13568:15): [True: 239, False: 0]
  ------------------
13569|    239|            target = stream->EnsureSpace(target);
13570|    239|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
13571|    239|                6, this_._internal_json_format(), target);
13572|    239|          }
13573|       |
13574|       |          // Extension range [1000, 10001)
13575|    239|          target = this_._impl_._extensions_._InternalSerialize(
13576|    239|              internal_default_instance(), 1000, 10001, target, stream);
13577|    239|          if (PROTOBUF_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
  ------------------
  |  |  365|    239|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 239]
  |  |  |  Branch (365:54): [Folded, False: 239]
  |  |  |  Branch (365:63): [True: 0, False: 239]
  |  |  ------------------
  ------------------
13578|      0|            target =
13579|      0|                ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
13580|      0|                    this_._internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance), target, stream);
13581|      0|          }
13582|       |          // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.FeatureSet)
13583|    239|          return target;
13584|    239|        }
_ZNK6google8protobuf10FeatureSet12ByteSizeLongEv:
13590|    755|        ::size_t FeatureSet::ByteSizeLong() const {
13591|    755|          const FeatureSet& this_ = *this;
13592|    755|#endif  // PROTOBUF_CUSTOM_VTABLE
13593|       |          // @@protoc_insertion_point(message_byte_size_start:google.protobuf.FeatureSet)
13594|    755|          ::size_t total_size = 0;
13595|    755|          total_size += this_._impl_._extensions_.ByteSize();
13596|       |
13597|    755|          ::uint32_t cached_has_bits = 0;
13598|       |          // Prevent compiler warnings about cached_has_bits being unused
13599|    755|          (void)cached_has_bits;
13600|       |
13601|    755|          ::_pbi::Prefetch5LinesFrom7Lines(&this_);
13602|    755|          cached_has_bits = this_._impl_._has_bits_[0];
13603|    755|          if (cached_has_bits & 0x0000003fu) {
  ------------------
  |  Branch (13603:15): [True: 244, False: 511]
  ------------------
13604|       |            // optional .google.protobuf.FeatureSet.FieldPresence field_presence = 1 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
13605|    244|            if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (13605:17): [True: 241, False: 3]
  ------------------
13606|    241|              total_size += 1 +
13607|    241|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_field_presence());
13608|    241|            }
13609|       |            // optional .google.protobuf.FeatureSet.EnumType enum_type = 2 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_ENUM, targets = TARGET_TYPE_FILE, edition_defaults = {
13610|    244|            if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (13610:17): [True: 239, False: 5]
  ------------------
13611|    239|              total_size += 1 +
13612|    239|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_enum_type());
13613|    239|            }
13614|       |            // optional .google.protobuf.FeatureSet.RepeatedFieldEncoding repeated_field_encoding = 3 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
13615|    244|            if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (13615:17): [True: 242, False: 2]
  ------------------
13616|    242|              total_size += 1 +
13617|    242|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_repeated_field_encoding());
13618|    242|            }
13619|       |            // optional .google.protobuf.FeatureSet.Utf8Validation utf8_validation = 4 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
13620|    244|            if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (13620:17): [True: 239, False: 5]
  ------------------
13621|    239|              total_size += 1 +
13622|    239|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_utf8_validation());
13623|    239|            }
13624|       |            // optional .google.protobuf.FeatureSet.MessageEncoding message_encoding = 5 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
13625|    244|            if (cached_has_bits & 0x00000010u) {
  ------------------
  |  Branch (13625:17): [True: 239, False: 5]
  ------------------
13626|    239|              total_size += 1 +
13627|    239|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_message_encoding());
13628|    239|            }
13629|       |            // optional .google.protobuf.FeatureSet.JsonFormat json_format = 6 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_MESSAGE, targets = TARGET_TYPE_ENUM, targets = TARGET_TYPE_FILE, edition_defaults = {
13630|    244|            if (cached_has_bits & 0x00000020u) {
  ------------------
  |  Branch (13630:17): [True: 239, False: 5]
  ------------------
13631|    239|              total_size += 1 +
13632|    239|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_json_format());
13633|    239|            }
13634|    244|          }
13635|    755|          return this_.MaybeComputeUnknownFieldsSize(total_size,
13636|    755|                                                     &this_._impl_._cached_size_);
13637|    755|        }
_ZN6google8protobuf10FeatureSet9MergeImplERNS0_11MessageLiteERKS2_:
13639|    498|void FeatureSet::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
13640|    498|  auto* const _this = static_cast<FeatureSet*>(&to_msg);
13641|    498|  auto& from = static_cast<const FeatureSet&>(from_msg);
13642|       |  // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.FeatureSet)
13643|    498|  ABSL_DCHECK_NE(&from, _this);
  ------------------
  |  |   76|    498|  ABSL_LOG_INTERNAL_DCHECK_NE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   88|    498|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    498|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 498]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    498|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13644|    498|  ::uint32_t cached_has_bits = 0;
13645|    498|  (void) cached_has_bits;
13646|       |
13647|    498|  cached_has_bits = from._impl_._has_bits_[0];
13648|    498|  if (cached_has_bits & 0x0000003fu) {
  ------------------
  |  Branch (13648:7): [True: 248, False: 250]
  ------------------
13649|    248|    if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (13649:9): [True: 245, False: 3]
  ------------------
13650|    245|      _this->_impl_.field_presence_ = from._impl_.field_presence_;
13651|    245|    }
13652|    248|    if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (13652:9): [True: 243, False: 5]
  ------------------
13653|    243|      _this->_impl_.enum_type_ = from._impl_.enum_type_;
13654|    243|    }
13655|    248|    if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (13655:9): [True: 246, False: 2]
  ------------------
13656|    246|      _this->_impl_.repeated_field_encoding_ = from._impl_.repeated_field_encoding_;
13657|    246|    }
13658|    248|    if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (13658:9): [True: 243, False: 5]
  ------------------
13659|    243|      _this->_impl_.utf8_validation_ = from._impl_.utf8_validation_;
13660|    243|    }
13661|    248|    if (cached_has_bits & 0x00000010u) {
  ------------------
  |  Branch (13661:9): [True: 243, False: 5]
  ------------------
13662|    243|      _this->_impl_.message_encoding_ = from._impl_.message_encoding_;
13663|    243|    }
13664|    248|    if (cached_has_bits & 0x00000020u) {
  ------------------
  |  Branch (13664:9): [True: 243, False: 5]
  ------------------
13665|    243|      _this->_impl_.json_format_ = from._impl_.json_format_;
13666|    243|    }
13667|    248|  }
13668|    498|  _this->_impl_._has_bits_[0] |= cached_has_bits;
13669|    498|  _this->_impl_._extensions_.MergeFrom(internal_default_instance(), from._impl_._extensions_);
13670|    498|  _this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
13671|    498|}
_ZN6google8protobuf10FeatureSet17IsInitializedImplERKNS0_11MessageLiteE:
13681|      8|    const MessageLite& msg) {
13682|      8|  auto& this_ = static_cast<const FeatureSet&>(msg);
13683|      8|  if (!this_._impl_._extensions_.IsInitialized(
  ------------------
  |  Branch (13683:7): [True: 0, False: 8]
  ------------------
13684|      8|          internal_default_instance())) {
13685|      0|    return false;
13686|      0|  }
13687|      8|  return true;
13688|      8|}
_ZN6google8protobuf10FeatureSet12InternalSwapEPS1_:
13690|    259|void FeatureSet::InternalSwap(FeatureSet* PROTOBUF_RESTRICT other) {
13691|    259|  using std::swap;
13692|    259|  _impl_._extensions_.InternalSwap(&other->_impl_._extensions_);
13693|    259|  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
13694|    259|  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
13695|    259|  ::google::protobuf::internal::memswap<
13696|    259|      PROTOBUF_FIELD_OFFSET(FeatureSet, _impl_.json_format_)
13697|    259|      + sizeof(FeatureSet::_impl_.json_format_)
13698|    259|      - PROTOBUF_FIELD_OFFSET(FeatureSet, _impl_.field_presence_)>(
13699|    259|          reinterpret_cast<char*>(&_impl_.field_presence_),
13700|    259|          reinterpret_cast<char*>(&other->_impl_.field_presence_));
13701|    259|}
_ZN6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefaultC2EPNS0_5ArenaE:
13720|      4|    : ::google::protobuf::Message(arena) {
13721|      4|#endif  // PROTOBUF_CUSTOM_VTABLE
13722|      4|  SharedCtor(arena);
13723|       |  // @@protoc_insertion_point(arena_constructor:google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault)
13724|      4|}
_ZN6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefaultD2Ev:
13769|      4|FeatureSetDefaults_FeatureSetEditionDefault::~FeatureSetDefaults_FeatureSetEditionDefault() {
13770|       |  // @@protoc_insertion_point(destructor:google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault)
13771|      4|  SharedDtor(*this);
13772|      4|}
_ZNK6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault12GetClassDataEv:
13812|      1|const ::google::protobuf::internal::ClassData* FeatureSetDefaults_FeatureSetEditionDefault::GetClassData() const {
13813|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
13814|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
13815|      1|  return _class_data_.base();
13816|      1|}
_ZN6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault17IsInitializedImplERKNS0_11MessageLiteE:
14016|      4|    const MessageLite& msg) {
14017|      4|  auto& this_ = static_cast<const FeatureSetDefaults_FeatureSetEditionDefault&>(msg);
14018|      4|  if ((this_._impl_._has_bits_[0] & 0x00000001u) != 0) {
  ------------------
  |  Branch (14018:7): [True: 4, False: 0]
  ------------------
14019|      4|    if (!this_._impl_.overridable_features_->IsInitialized()) return false;
  ------------------
  |  Branch (14019:9): [True: 0, False: 4]
  ------------------
14020|      4|  }
14021|      4|  if ((this_._impl_._has_bits_[0] & 0x00000002u) != 0) {
  ------------------
  |  Branch (14021:7): [True: 4, False: 0]
  ------------------
14022|      4|    if (!this_._impl_.fixed_features_->IsInitialized()) return false;
  ------------------
  |  Branch (14022:9): [True: 0, False: 4]
  ------------------
14023|      4|  }
14024|      4|  return true;
14025|      4|}
_ZN6google8protobuf18FeatureSetDefaultsC2EPNS0_5ArenaE:
14056|      1|    : ::google::protobuf::Message(arena) {
14057|      1|#endif  // PROTOBUF_CUSTOM_VTABLE
14058|      1|  SharedCtor(arena);
14059|       |  // @@protoc_insertion_point(arena_constructor:google.protobuf.FeatureSetDefaults)
14060|      1|}
_ZNK6google8protobuf18FeatureSetDefaults12GetClassDataEv:
14159|      3|const ::google::protobuf::internal::ClassData* FeatureSetDefaults::GetClassData() const {
14160|      3|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
14161|      3|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
14162|      3|  return _class_data_.base();
14163|      3|}
_ZN6google8protobuf18FeatureSetDefaults5ClearEv:
14208|      1|PROTOBUF_NOINLINE void FeatureSetDefaults::Clear() {
14209|       |// @@protoc_insertion_point(message_clear_start:google.protobuf.FeatureSetDefaults)
14210|      1|  ::google::protobuf::internal::TSanWrite(&_impl_);
14211|      1|  ::uint32_t cached_has_bits = 0;
14212|       |  // Prevent compiler warnings about cached_has_bits being unused
14213|      1|  (void) cached_has_bits;
14214|       |
14215|      1|  _impl_.defaults_.Clear();
14216|      1|  cached_has_bits = _impl_._has_bits_[0];
14217|      1|  if (cached_has_bits & 0x00000003u) {
  ------------------
  |  Branch (14217:7): [True: 0, False: 1]
  ------------------
14218|      0|    ::memset(&_impl_.minimum_edition_, 0, static_cast<::size_t>(
14219|      0|        reinterpret_cast<char*>(&_impl_.maximum_edition_) -
14220|      0|        reinterpret_cast<char*>(&_impl_.minimum_edition_)) + sizeof(_impl_.maximum_edition_));
14221|      0|  }
14222|      1|  _impl_._has_bits_.Clear();
14223|      1|  _internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>();
14224|      1|}
_ZN6google8protobuf18FeatureSetDefaults17IsInitializedImplERKNS0_11MessageLiteE:
14348|      1|    const MessageLite& msg) {
14349|      1|  auto& this_ = static_cast<const FeatureSetDefaults&>(msg);
14350|      1|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_defaults()))
  ------------------
  |  Branch (14350:7): [True: 0, False: 1]
  ------------------
14351|      0|    return false;
14352|      1|  return true;
14353|      1|}
_ZNK6google8protobuf23SourceCodeInfo_Location12GetClassDataEv:
14497|      1|const ::google::protobuf::internal::ClassData* SourceCodeInfo_Location::GetClassData() const {
14498|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
14499|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
14500|      1|  return _class_data_.base();
14501|      1|}
_ZNK6google8protobuf14SourceCodeInfo12GetClassDataEv:
14867|      1|const ::google::protobuf::internal::ClassData* SourceCodeInfo::GetClassData() const {
14868|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
14869|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
14870|      1|  return _class_data_.base();
14871|      1|}
_ZNK6google8protobuf28GeneratedCodeInfo_Annotation12GetClassDataEv:
15147|      1|const ::google::protobuf::internal::ClassData* GeneratedCodeInfo_Annotation::GetClassData() const {
15148|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
15149|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
15150|      1|  return _class_data_.base();
15151|      1|}
_ZNK6google8protobuf17GeneratedCodeInfo12GetClassDataEv:
15504|      1|const ::google::protobuf::internal::ClassData* GeneratedCodeInfo::GetClassData() const {
15505|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
15506|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
15507|      1|  return _class_data_.base();
15508|      1|}
_ZN6google8protobuf19FileDescriptorProto10SharedCtorEPNS0_5ArenaE:
 2942|     10|inline void FileDescriptorProto::SharedCtor(::_pb::Arena* arena) {
 2943|     10|  new (&_impl_) Impl_(internal_visibility(), arena);
 2944|     10|  ::memset(reinterpret_cast<char *>(&_impl_) +
 2945|     10|               offsetof(Impl_, options_),
 2946|     10|           0,
 2947|     10|           offsetof(Impl_, edition_) -
 2948|       |               offsetof(Impl_, options_) +
 2949|     10|               sizeof(Impl_::edition_));
 2950|     10|}
_ZN6google8protobuf19FileDescriptorProto5Impl_C2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
 2930|     10|      : _cached_size_{0},
 2931|     10|        dependency_{visibility, arena},
 2932|     10|        message_type_{visibility, arena},
 2933|     10|        enum_type_{visibility, arena},
 2934|     10|        service_{visibility, arena},
 2935|     10|        extension_{visibility, arena},
 2936|     10|        public_dependency_{visibility, arena},
 2937|     10|        weak_dependency_{visibility, arena},
 2938|     10|        name_(arena),
 2939|     10|        package_(arena),
 2940|     10|        syntax_(arena) {}
_ZN6google8protobuf19FileDescriptorProto10SharedDtorERNS0_11MessageLiteE:
 2955|      6|inline void FileDescriptorProto::SharedDtor(MessageLite& self) {
 2956|      6|  FileDescriptorProto& this_ = static_cast<FileDescriptorProto&>(self);
 2957|      6|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 2958|      6|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|      6|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      6|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     12|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      6|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     12|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     12|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 6, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      6|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 6]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      6|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 6, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     12|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     12|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2959|      6|  this_._impl_.name_.Destroy();
 2960|      6|  this_._impl_.package_.Destroy();
 2961|      6|  this_._impl_.syntax_.Destroy();
 2962|      6|  delete this_._impl_.options_;
 2963|      6|  delete this_._impl_.source_code_info_;
 2964|      6|  this_._impl_.~Impl_();
 2965|      6|}
_ZN6google8protobuf30DescriptorProto_ExtensionRange10SharedDtorERNS0_11MessageLiteE:
 3621|     14|inline void DescriptorProto_ExtensionRange::SharedDtor(MessageLite& self) {
 3622|     14|  DescriptorProto_ExtensionRange& this_ = static_cast<DescriptorProto_ExtensionRange&>(self);
 3623|     14|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 3624|     14|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|     14|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     14|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     28|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     14|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     28|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     28|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 14, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     14|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 14]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     14|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 14, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     28|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     28|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3625|     14|  delete this_._impl_.options_;
 3626|     14|  this_._impl_.~Impl_();
 3627|     14|}
_ZN6google8protobuf29DescriptorProto_ReservedRange10SharedDtorERNS0_11MessageLiteE:
 3918|     14|inline void DescriptorProto_ReservedRange::SharedDtor(MessageLite& self) {
 3919|     14|  DescriptorProto_ReservedRange& this_ = static_cast<DescriptorProto_ReservedRange&>(self);
 3920|     14|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 3921|     14|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|     14|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     14|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     28|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     14|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     28|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     28|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 14, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     14|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 14]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     14|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 14, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     28|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     28|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3922|     14|  this_._impl_.~Impl_();
 3923|     14|}
_ZN6google8protobuf15DescriptorProto10SharedDtorERNS0_11MessageLiteE:
 4207|     60|inline void DescriptorProto::SharedDtor(MessageLite& self) {
 4208|     60|  DescriptorProto& this_ = static_cast<DescriptorProto&>(self);
 4209|     60|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 4210|     60|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|     60|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     60|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    120|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     60|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    120|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    120|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 60, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     60|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 60]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     60|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 60, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|    120|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    120|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4211|     60|  this_._impl_.name_.Destroy();
 4212|     60|  delete this_._impl_.options_;
 4213|     60|  this_._impl_.~Impl_();
 4214|     60|}
_ZN6google8protobuf20FieldDescriptorProto10SharedDtorERNS0_11MessageLiteE:
 5578|    296|inline void FieldDescriptorProto::SharedDtor(MessageLite& self) {
 5579|    296|  FieldDescriptorProto& this_ = static_cast<FieldDescriptorProto&>(self);
 5580|    296|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 5581|    296|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|    296|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    296|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    592|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    296|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    592|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    592|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 296, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    296|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 296]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    296|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 296, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|    592|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    592|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5582|    296|  this_._impl_.name_.Destroy();
 5583|    296|  this_._impl_.extendee_.Destroy();
 5584|    296|  this_._impl_.type_name_.Destroy();
 5585|    296|  this_._impl_.default_value_.Destroy();
 5586|    296|  this_._impl_.json_name_.Destroy();
 5587|    296|  delete this_._impl_.options_;
 5588|    296|  this_._impl_.~Impl_();
 5589|    296|}
_ZN6google8protobuf20OneofDescriptorProto10SharedDtorERNS0_11MessageLiteE:
 6114|      4|inline void OneofDescriptorProto::SharedDtor(MessageLite& self) {
 6115|      4|  OneofDescriptorProto& this_ = static_cast<OneofDescriptorProto&>(self);
 6116|      4|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 6117|      4|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|      4|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      4|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6118|      4|  this_._impl_.name_.Destroy();
 6119|      4|  delete this_._impl_.options_;
 6120|      4|  this_._impl_.~Impl_();
 6121|      4|}
_ZN6google8protobuf37EnumDescriptorProto_EnumReservedRange10SharedDtorERNS0_11MessageLiteE:
 6392|      1|inline void EnumDescriptorProto_EnumReservedRange::SharedDtor(MessageLite& self) {
 6393|      1|  EnumDescriptorProto_EnumReservedRange& this_ = static_cast<EnumDescriptorProto_EnumReservedRange&>(self);
 6394|      1|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 6395|      1|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|      1|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      1|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      2|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      1|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      2|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      2|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      1|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      1|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      2|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      2|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6396|      1|  this_._impl_.~Impl_();
 6397|      1|}
_ZN6google8protobuf19EnumDescriptorProto10SharedDtorERNS0_11MessageLiteE:
 6671|     30|inline void EnumDescriptorProto::SharedDtor(MessageLite& self) {
 6672|     30|  EnumDescriptorProto& this_ = static_cast<EnumDescriptorProto&>(self);
 6673|     30|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 6674|     30|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|     30|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     30|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     60|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     30|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     60|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     60|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 30, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     30|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 30]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     30|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 30, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     60|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     60|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6675|     30|  this_._impl_.name_.Destroy();
 6676|     30|  delete this_._impl_.options_;
 6677|     30|  this_._impl_.~Impl_();
 6678|     30|}
_ZN6google8protobuf24EnumValueDescriptorProto10SharedDtorERNS0_11MessageLiteE:
 7085|    294|inline void EnumValueDescriptorProto::SharedDtor(MessageLite& self) {
 7086|    294|  EnumValueDescriptorProto& this_ = static_cast<EnumValueDescriptorProto&>(self);
 7087|    294|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 7088|    294|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|    294|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    294|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    588|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    294|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    588|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    588|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 294, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    294|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 294]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    294|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 294, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|    588|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    588|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7089|    294|  this_._impl_.name_.Destroy();
 7090|    294|  delete this_._impl_.options_;
 7091|    294|  this_._impl_.~Impl_();
 7092|    294|}
_ZN6google8protobuf11FileOptions10SharedCtorEPNS0_5ArenaE:
 8195|      2|inline void FileOptions::SharedCtor(::_pb::Arena* arena) {
 8196|      2|  new (&_impl_) Impl_(internal_visibility(), arena);
 8197|      2|  ::memset(reinterpret_cast<char *>(&_impl_) +
 8198|      2|               offsetof(Impl_, features_),
 8199|      2|           0,
 8200|      2|           offsetof(Impl_, deprecated_) -
 8201|       |               offsetof(Impl_, features_) +
 8202|      2|               sizeof(Impl_::deprecated_));
 8203|      2|}
_ZN6google8protobuf11FileOptions5Impl_C2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
 8179|      2|      : _extensions_{visibility, arena},
 8180|      2|        _cached_size_{0},
 8181|      2|        uninterpreted_option_{visibility, arena},
 8182|      2|        java_package_(arena),
 8183|      2|        java_outer_classname_(arena),
 8184|      2|        go_package_(arena),
 8185|      2|        objc_class_prefix_(arena),
 8186|      2|        csharp_namespace_(arena),
 8187|      2|        swift_prefix_(arena),
 8188|      2|        php_class_prefix_(arena),
 8189|      2|        php_namespace_(arena),
 8190|      2|        php_metadata_namespace_(arena),
 8191|      2|        ruby_package_(arena),
 8192|      2|        optimize_for_{static_cast< ::google::protobuf::FileOptions_OptimizeMode >(1)},
 8193|      2|        cc_enable_arenas_{true} {}
_ZN6google8protobuf11FileOptions10SharedDtorERNS0_11MessageLiteE:
 8208|      3|inline void FileOptions::SharedDtor(MessageLite& self) {
 8209|      3|  FileOptions& this_ = static_cast<FileOptions&>(self);
 8210|      3|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 8211|      3|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|      3|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      3|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      6|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      3|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      6|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      6|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 3, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      3|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 3]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      3|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 3, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      6|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      6|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8212|      3|  this_._impl_.java_package_.Destroy();
 8213|      3|  this_._impl_.java_outer_classname_.Destroy();
 8214|      3|  this_._impl_.go_package_.Destroy();
 8215|      3|  this_._impl_.objc_class_prefix_.Destroy();
 8216|      3|  this_._impl_.csharp_namespace_.Destroy();
 8217|      3|  this_._impl_.swift_prefix_.Destroy();
 8218|      3|  this_._impl_.php_class_prefix_.Destroy();
 8219|      3|  this_._impl_.php_namespace_.Destroy();
 8220|      3|  this_._impl_.php_metadata_namespace_.Destroy();
 8221|      3|  this_._impl_.ruby_package_.Destroy();
 8222|      3|  delete this_._impl_.features_;
 8223|      3|  this_._impl_.~Impl_();
 8224|      3|}
_ZN6google8protobuf27FieldOptions_EditionDefault10SharedDtorERNS0_11MessageLiteE:
 9472|     18|inline void FieldOptions_EditionDefault::SharedDtor(MessageLite& self) {
 9473|     18|  FieldOptions_EditionDefault& this_ = static_cast<FieldOptions_EditionDefault&>(self);
 9474|     18|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 9475|     18|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|     18|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     18|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     36|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     18|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     36|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     36|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 18, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     18|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 18]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     18|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 18, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     36|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     36|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9476|     18|  this_._impl_.value_.Destroy();
 9477|     18|  this_._impl_.~Impl_();
 9478|     18|}
_ZN6google8protobuf27FieldOptions_FeatureSupport10SharedDtorERNS0_11MessageLiteE:
 9755|      9|inline void FieldOptions_FeatureSupport::SharedDtor(MessageLite& self) {
 9756|      9|  FieldOptions_FeatureSupport& this_ = static_cast<FieldOptions_FeatureSupport&>(self);
 9757|      9|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 9758|      9|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|      9|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      9|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     18|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      9|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     18|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     18|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 9, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      9|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 9]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      9|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 9, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     18|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     18|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9759|      9|  this_._impl_.deprecation_warning_.Destroy();
 9760|      9|  this_._impl_.~Impl_();
 9761|      9|}
_ZN6google8protobuf12FieldOptions10SharedCtorEPNS0_5ArenaE:
10092|     17|inline void FieldOptions::SharedCtor(::_pb::Arena* arena) {
10093|     17|  new (&_impl_) Impl_(internal_visibility(), arena);
10094|     17|  ::memset(reinterpret_cast<char *>(&_impl_) +
10095|     17|               offsetof(Impl_, features_),
10096|     17|           0,
10097|     17|           offsetof(Impl_, retention_) -
10098|       |               offsetof(Impl_, features_) +
10099|     17|               sizeof(Impl_::retention_));
10100|     17|}
_ZN6google8protobuf12FieldOptions5Impl_C2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
10086|     17|      : _extensions_{visibility, arena},
10087|     17|        _cached_size_{0},
10088|     17|        targets_{visibility, arena},
10089|     17|        edition_defaults_{visibility, arena},
10090|     17|        uninterpreted_option_{visibility, arena} {}
_ZN6google8protobuf12FieldOptions10SharedDtorERNS0_11MessageLiteE:
10105|     17|inline void FieldOptions::SharedDtor(MessageLite& self) {
10106|     17|  FieldOptions& this_ = static_cast<FieldOptions&>(self);
10107|     17|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
10108|     17|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|     17|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     17|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     34|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     17|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     34|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     34|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 17, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     17|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 17]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     17|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 17, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     34|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     34|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10109|     17|  delete this_._impl_.features_;
10110|     17|  delete this_._impl_.feature_support_;
10111|     17|  this_._impl_.~Impl_();
10112|     17|}
_ZN6google8protobuf10FeatureSet5Impl_C2ENS0_8internal18InternalVisibilityEPNS0_5ArenaERKS2_RKS1_:
13328|    775|      : _extensions_{visibility, arena},
13329|    775|        _has_bits_{from._has_bits_},
13330|    775|        _cached_size_{0} {}
_ZN6google8protobuf10FeatureSet10SharedCtorEPNS0_5ArenaE:
13362|    259|inline void FeatureSet::SharedCtor(::_pb::Arena* arena) {
13363|    259|  new (&_impl_) Impl_(internal_visibility(), arena);
13364|    259|  ::memset(reinterpret_cast<char *>(&_impl_) +
13365|    259|               offsetof(Impl_, field_presence_),
13366|    259|           0,
13367|    259|           offsetof(Impl_, json_format_) -
13368|       |               offsetof(Impl_, field_presence_) +
13369|    259|               sizeof(Impl_::json_format_));
13370|    259|}
_ZN6google8protobuf10FeatureSet5Impl_C2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
13359|    259|      : _extensions_{visibility, arena},
13360|    259|        _cached_size_{0} {}
_ZN6google8protobuf10FeatureSet10SharedDtorERNS0_11MessageLiteE:
13375|  1.03k|inline void FeatureSet::SharedDtor(MessageLite& self) {
13376|  1.03k|  FeatureSet& this_ = static_cast<FeatureSet&>(self);
13377|  1.03k|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
13378|  1.03k|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|  1.03k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  1.03k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  2.06k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  1.03k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  2.06k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  2.06k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1.03k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  1.03k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1.03k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  1.03k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1.03k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  2.06k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  2.06k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13379|  1.03k|  this_._impl_.~Impl_();
13380|  1.03k|}
_ZN6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault10SharedCtorEPNS0_5ArenaE:
13760|      4|inline void FeatureSetDefaults_FeatureSetEditionDefault::SharedCtor(::_pb::Arena* arena) {
13761|      4|  new (&_impl_) Impl_(internal_visibility(), arena);
13762|      4|  ::memset(reinterpret_cast<char *>(&_impl_) +
13763|      4|               offsetof(Impl_, overridable_features_),
13764|      4|           0,
13765|      4|           offsetof(Impl_, edition_) -
13766|       |               offsetof(Impl_, overridable_features_) +
13767|      4|               sizeof(Impl_::edition_));
13768|      4|}
_ZN6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault5Impl_C2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
13758|      4|      : _cached_size_{0} {}
_ZN6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault10SharedDtorERNS0_11MessageLiteE:
13773|      4|inline void FeatureSetDefaults_FeatureSetEditionDefault::SharedDtor(MessageLite& self) {
13774|      4|  FeatureSetDefaults_FeatureSetEditionDefault& this_ = static_cast<FeatureSetDefaults_FeatureSetEditionDefault&>(self);
13775|      4|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
13776|      4|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|      4|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      4|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13777|      4|  delete this_._impl_.overridable_features_;
13778|      4|  delete this_._impl_.fixed_features_;
13779|      4|  this_._impl_.~Impl_();
13780|      4|}
_ZN6google8protobuf18FeatureSetDefaults10SharedCtorEPNS0_5ArenaE:
14097|      1|inline void FeatureSetDefaults::SharedCtor(::_pb::Arena* arena) {
14098|      1|  new (&_impl_) Impl_(internal_visibility(), arena);
14099|      1|  ::memset(reinterpret_cast<char *>(&_impl_) +
14100|      1|               offsetof(Impl_, minimum_edition_),
14101|      1|           0,
14102|      1|           offsetof(Impl_, maximum_edition_) -
14103|       |               offsetof(Impl_, minimum_edition_) +
14104|      1|               sizeof(Impl_::maximum_edition_));
14105|      1|}
_ZN6google8protobuf18FeatureSetDefaults5Impl_C2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
14094|      1|      : _cached_size_{0},
14095|      1|        defaults_{visibility, arena} {}

_ZNK6google8protobuf27FieldOptions_FeatureSupport13GetCachedSizeEv:
 1598|      9|  int GetCachedSize() const { return _impl_._cached_size_.Get(); }
_ZNK6google8protobuf27FieldOptions_EditionDefault13GetCachedSizeEv:
 1835|     18|  int GetCachedSize() const { return _impl_._cached_size_.Get(); }
_ZN6google8protobuf10FeatureSetC2ERKS1_:
 1948|    775|  inline FeatureSet(const FeatureSet& from) : FeatureSet(nullptr, from) {}
_ZN6google8protobuf10FeatureSetC2EOS1_:
 1950|    259|      : FeatureSet(nullptr, std::move(from)) {}
_ZN6google8protobuf10FeatureSetaSEOS1_:
 1955|    259|  inline FeatureSet& operator=(FeatureSet&& from) noexcept {
 1956|    259|    if (this == &from) return *this;
  ------------------
  |  Branch (1956:9): [True: 0, False: 259]
  ------------------
 1957|    259|    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
  ------------------
  |  Branch (1957:9): [True: 259, False: 0]
  ------------------
 1958|    259|      InternalSwap(&from);
 1959|    259|    } else {
 1960|      0|      CopyFrom(from);
 1961|      0|    }
 1962|    259|    return *this;
 1963|    259|  }
_ZN6google8protobuf10FeatureSet16default_instanceEv:
 1983|  2.58k|  static const FeatureSet& default_instance() {
 1984|  2.58k|    return *internal_default_instance();
 1985|  2.58k|  }
_ZN6google8protobuf10FeatureSet25internal_default_instanceEv:
 1986|  3.33k|  static inline const FeatureSet* internal_default_instance() {
 1987|  3.33k|    return reinterpret_cast<const FeatureSet*>(
 1988|  3.33k|        &_FeatureSet_default_instance_);
 1989|  3.33k|  }
_ZN6google8protobuf10FeatureSet9MergeFromERKS1_:
 2014|    498|  void MergeFrom(const FeatureSet& from) { FeatureSet::MergeImpl(*this, from); }
_ZNK6google8protobuf10FeatureSet13IsInitializedEv:
 2022|      8|  bool IsInitialized() const {
 2023|      8|    return IsInitializedImpl(*this);
 2024|      8|  }
_ZN6google8protobuf10FeatureSetC2EPNS0_5ArenaEOS1_:
 2067|    259|      : FeatureSet(arena) {
 2068|    259|    *this = ::std::move(from);
 2069|    259|  }
_ZN6google8protobuf10FeatureSet21FieldPresence_IsValidEi:
 2084|    255|  static inline bool FieldPresence_IsValid(int value) {
 2085|    255|    return FeatureSet_FieldPresence_IsValid(value);
 2086|    255|  }
_ZN6google8protobuf10FeatureSet16EnumType_IsValidEi:
 2104|    255|  static inline bool EnumType_IsValid(int value) {
 2105|    255|    return FeatureSet_EnumType_IsValid(value);
 2106|    255|  }
_ZN6google8protobuf10FeatureSet29RepeatedFieldEncoding_IsValidEi:
 2124|    255|  static inline bool RepeatedFieldEncoding_IsValid(int value) {
 2125|    255|    return FeatureSet_RepeatedFieldEncoding_IsValid(value);
 2126|    255|  }
_ZN6google8protobuf10FeatureSet22Utf8Validation_IsValidEi:
 2144|    255|  static inline bool Utf8Validation_IsValid(int value) {
 2145|    255|    return FeatureSet_Utf8Validation_IsValid(value);
 2146|    255|  }
_ZN6google8protobuf10FeatureSet23MessageEncoding_IsValidEi:
 2164|    255|  static inline bool MessageEncoding_IsValid(int value) {
 2165|    255|    return FeatureSet_MessageEncoding_IsValid(value);
 2166|    255|  }
_ZN6google8protobuf10FeatureSet18JsonFormat_IsValidEi:
 2184|    255|  static inline bool JsonFormat_IsValid(int value) {
 2185|    255|    return FeatureSet_JsonFormat_IsValid(value);
 2186|    255|  }
_ZN6google8protobuf14SourceCodeInfo16default_instanceEv:
 3512|      4|  static const SourceCodeInfo& default_instance() {
 3513|      4|    return *internal_default_instance();
 3514|      4|  }
_ZN6google8protobuf14SourceCodeInfo25internal_default_instanceEv:
 3515|      4|  static inline const SourceCodeInfo* internal_default_instance() {
 3516|      4|    return reinterpret_cast<const SourceCodeInfo*>(
 3517|      4|        &_SourceCodeInfo_default_instance_);
 3518|      4|  }
_ZN6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefaultC2Ev:
 4044|      4|  inline FeatureSetDefaults_FeatureSetEditionDefault() : FeatureSetDefaults_FeatureSetEditionDefault(nullptr) {}
_ZNK6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault13IsInitializedEv:
 4132|      4|  bool IsInitialized() const {
 4133|      4|    return IsInitializedImpl(*this);
 4134|      4|  }
_ZN6google8protobuf12OneofOptions16default_instanceEv:
 4737|      2|  static const OneofOptions& default_instance() {
 4738|      2|    return *internal_default_instance();
 4739|      2|  }
_ZN6google8protobuf12OneofOptions25internal_default_instanceEv:
 4740|      2|  static inline const OneofOptions* internal_default_instance() {
 4741|      2|    return reinterpret_cast<const OneofOptions*>(
 4742|      2|        &_OneofOptions_default_instance_);
 4743|      2|  }
_ZN6google8protobuf14MessageOptions16default_instanceEv:
 5583|     47|  static const MessageOptions& default_instance() {
 5584|     47|    return *internal_default_instance();
 5585|     47|  }
_ZN6google8protobuf14MessageOptions25internal_default_instanceEv:
 5586|     47|  static inline const MessageOptions* internal_default_instance() {
 5587|     47|    return reinterpret_cast<const MessageOptions*>(
 5588|     47|        &_MessageOptions_default_instance_);
 5589|     47|  }
_ZN6google8protobuf11FileOptionsC2Ev:
 5999|      2|  inline FileOptions() : FileOptions(nullptr) {}
_ZNK6google8protobuf11FileOptions14unknown_fieldsEv:
 6031|      2|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 6032|      2|    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
 6033|      2|  }
_ZN6google8protobuf11FileOptions16default_instanceEv:
 6048|      2|  static const FileOptions& default_instance() {
 6049|      2|    return *internal_default_instance();
 6050|      2|  }
_ZN6google8protobuf11FileOptions25internal_default_instanceEv:
 6051|     13|  static inline const FileOptions* internal_default_instance() {
 6052|     13|    return reinterpret_cast<const FileOptions*>(
 6053|     13|        &_FileOptions_default_instance_);
 6054|     13|  }
_ZNK6google8protobuf11FileOptions13IsInitializedEv:
 6087|      7|  bool IsInitialized() const {
 6088|      7|    return IsInitializedImpl(*this);
 6089|      7|  }
_ZN6google8protobuf12FieldOptionsC2Ev:
 6726|     17|  inline FieldOptions() : FieldOptions(nullptr) {}
_ZNK6google8protobuf12FieldOptions14unknown_fieldsEv:
 6758|     17|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 6759|     17|    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
 6760|     17|  }
_ZN6google8protobuf12FieldOptions16default_instanceEv:
 6775|    453|  static const FieldOptions& default_instance() {
 6776|    453|    return *internal_default_instance();
 6777|    453|  }
_ZN6google8protobuf12FieldOptions25internal_default_instanceEv:
 6778|    538|  static inline const FieldOptions* internal_default_instance() {
 6779|    538|    return reinterpret_cast<const FieldOptions*>(
 6780|    538|        &_FieldOptions_default_instance_);
 6781|    538|  }
_ZNK6google8protobuf12FieldOptions13IsInitializedEv:
 6814|     51|  bool IsInitialized() const {
 6815|     51|    return IsInitializedImpl(*this);
 6816|     51|  }
_ZN6google8protobuf18FeatureSetDefaultsC2Ev:
 7389|      1|  inline FeatureSetDefaults() : FeatureSetDefaults(nullptr) {}
_ZN6google8protobuf21ExtensionRangeOptions16default_instanceEv:
 7668|     14|  static const ExtensionRangeOptions& default_instance() {
 7669|     14|    return *internal_default_instance();
 7670|     14|  }
_ZN6google8protobuf21ExtensionRangeOptions25internal_default_instanceEv:
 7671|     14|  static inline const ExtensionRangeOptions* internal_default_instance() {
 7672|     14|    return reinterpret_cast<const ExtensionRangeOptions*>(
 7673|     14|        &_ExtensionRangeOptions_default_instance_);
 7674|     14|  }
_ZN6google8protobuf16EnumValueOptions16default_instanceEv:
 8120|    190|  static const EnumValueOptions& default_instance() {
 8121|    190|    return *internal_default_instance();
 8122|    190|  }
_ZN6google8protobuf16EnumValueOptions25internal_default_instanceEv:
 8123|    190|  static inline const EnumValueOptions* internal_default_instance() {
 8124|    190|    return reinterpret_cast<const EnumValueOptions*>(
 8125|    190|        &_EnumValueOptions_default_instance_);
 8126|    190|  }
_ZN6google8protobuf11EnumOptions16default_instanceEv:
 8563|     24|  static const EnumOptions& default_instance() {
 8564|     24|    return *internal_default_instance();
 8565|     24|  }
_ZN6google8protobuf11EnumOptions25internal_default_instanceEv:
 8566|     24|  static inline const EnumOptions* internal_default_instance() {
 8567|     24|    return reinterpret_cast<const EnumOptions*>(
 8568|     24|        &_EnumOptions_default_instance_);
 8569|     24|  }
_ZNK6google8protobuf20OneofDescriptorProto13IsInitializedEv:
 9041|      6|  bool IsInitialized() const {
 9042|      6|    return IsInitializedImpl(*this);
 9043|      6|  }
_ZNK6google8protobuf20FieldDescriptorProto13IsInitializedEv:
 9545|    531|  bool IsInitialized() const {
 9546|    531|    return IsInitializedImpl(*this);
 9547|    531|  }
_ZNK6google8protobuf24EnumValueDescriptorProto13IsInitializedEv:
 9961|    484|  bool IsInitialized() const {
 9962|    484|    return IsInitializedImpl(*this);
 9963|    484|  }
_ZNK6google8protobuf30DescriptorProto_ExtensionRange13IsInitializedEv:
10194|     28|  bool IsInitialized() const {
10195|     28|    return IsInitializedImpl(*this);
10196|     28|  }
_ZNK6google8protobuf19EnumDescriptorProto13IsInitializedEv:
10660|     54|  bool IsInitialized() const {
10661|     54|    return IsInitializedImpl(*this);
10662|     54|  }
_ZN6google8protobuf15DescriptorProto10descriptorEv:
10895|      2|  static const ::google::protobuf::Descriptor* descriptor() {
10896|      2|    return GetDescriptor();
10897|      2|  }
_ZN6google8protobuf15DescriptorProto13GetDescriptorEv:
10898|      2|  static const ::google::protobuf::Descriptor* GetDescriptor() {
10899|      2|    return default_instance().GetMetadata().descriptor;
10900|      2|  }
_ZN6google8protobuf15DescriptorProto16default_instanceEv:
10904|      2|  static const DescriptorProto& default_instance() {
10905|      2|    return *internal_default_instance();
10906|      2|  }
_ZN6google8protobuf15DescriptorProto25internal_default_instanceEv:
10907|      2|  static inline const DescriptorProto* internal_default_instance() {
10908|      2|    return reinterpret_cast<const DescriptorProto*>(
10909|      2|        &_DescriptorProto_default_instance_);
10910|      2|  }
_ZNK6google8protobuf15DescriptorProto13IsInitializedEv:
10943|    107|  bool IsInitialized() const {
10944|    107|    return IsInitializedImpl(*this);
10945|    107|  }
_ZN6google8protobuf19FileDescriptorProtoC2Ev:
11234|      6|  inline FileDescriptorProto() : FileDescriptorProto(nullptr) {}
_ZNK6google8protobuf19FileDescriptorProto8has_nameEv:
12110|      4|inline bool FileDescriptorProto::has_name() const {
12111|      4|  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
12112|      4|  return value;
12113|      4|}
_ZNK6google8protobuf19FileDescriptorProto4nameEv:
12120|     75|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
12121|       |  // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.name)
12122|     75|  return _internal_name();
12123|     75|}
_ZNK6google8protobuf19FileDescriptorProto14_internal_nameEv:
12137|     75|inline const std::string& FileDescriptorProto::_internal_name() const {
12138|     75|  ::google::protobuf::internal::TSanRead(&_impl_);
12139|     75|  return _impl_.name_.Get();
12140|     75|}
_ZNK6google8protobuf19FileDescriptorProto11has_packageEv:
12179|      4|inline bool FileDescriptorProto::has_package() const {
12180|      4|  bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0;
12181|      4|  return value;
12182|      4|}
_ZNK6google8protobuf19FileDescriptorProto7packageEv:
12189|     20|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
12190|       |  // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.package)
12191|     20|  return _internal_package();
12192|     20|}
_ZNK6google8protobuf19FileDescriptorProto17_internal_packageEv:
12206|     20|inline const std::string& FileDescriptorProto::_internal_package() const {
12207|     20|  ::google::protobuf::internal::TSanRead(&_impl_);
12208|     20|  return _impl_.package_.Get();
12209|     20|}
_ZNK6google8protobuf19FileDescriptorProto25_internal_dependency_sizeEv:
12248|     17|inline int FileDescriptorProto::_internal_dependency_size() const {
12249|     17|  return _internal_dependency().size();
12250|     17|}
_ZNK6google8protobuf19FileDescriptorProto15dependency_sizeEv:
12251|     17|inline int FileDescriptorProto::dependency_size() const {
12252|     17|  return _internal_dependency_size();
12253|     17|}
_ZNK6google8protobuf19FileDescriptorProto10dependencyEi:
12265|      2|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
12266|       |  // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.dependency)
12267|      2|  return _internal_dependency().Get(index);
12268|      2|}
_ZNK6google8protobuf19FileDescriptorProto20_internal_dependencyEv:
12301|     19|FileDescriptorProto::_internal_dependency() const {
12302|     19|  ::google::protobuf::internal::TSanRead(&_impl_);
12303|     19|  return _impl_.dependency_;
12304|     19|}
_ZNK6google8protobuf19FileDescriptorProto32_internal_public_dependency_sizeEv:
12312|     12|inline int FileDescriptorProto::_internal_public_dependency_size() const {
12313|     12|  return _internal_public_dependency().size();
12314|     12|}
_ZNK6google8protobuf19FileDescriptorProto22public_dependency_sizeEv:
12315|     12|inline int FileDescriptorProto::public_dependency_size() const {
12316|     12|  return _internal_public_dependency_size();
12317|     12|}
_ZNK6google8protobuf19FileDescriptorProto27_internal_public_dependencyEv:
12347|     12|FileDescriptorProto::_internal_public_dependency() const {
12348|     12|  ::google::protobuf::internal::TSanRead(&_impl_);
12349|     12|  return _impl_.public_dependency_;
12350|     12|}
_ZNK6google8protobuf19FileDescriptorProto30_internal_weak_dependency_sizeEv:
12357|     16|inline int FileDescriptorProto::_internal_weak_dependency_size() const {
12358|     16|  return _internal_weak_dependency().size();
12359|     16|}
_ZNK6google8protobuf19FileDescriptorProto20weak_dependency_sizeEv:
12360|     16|inline int FileDescriptorProto::weak_dependency_size() const {
12361|     16|  return _internal_weak_dependency_size();
12362|     16|}
_ZNK6google8protobuf19FileDescriptorProto25_internal_weak_dependencyEv:
12392|     16|FileDescriptorProto::_internal_weak_dependency() const {
12393|     16|  ::google::protobuf::internal::TSanRead(&_impl_);
12394|     16|  return _impl_.weak_dependency_;
12395|     16|}
_ZNK6google8protobuf19FileDescriptorProto27_internal_message_type_sizeEv:
12402|     49|inline int FileDescriptorProto::_internal_message_type_size() const {
12403|     49|  return _internal_message_type().size();
12404|     49|}
_ZNK6google8protobuf19FileDescriptorProto17message_type_sizeEv:
12405|     49|inline int FileDescriptorProto::message_type_size() const {
12406|     49|  return _internal_message_type_size();
12407|     49|}
_ZNK6google8protobuf19FileDescriptorProto12message_typeEi:
12424|    185|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
12425|       |  // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.message_type)
12426|    185|  return _internal_message_type().Get(index);
12427|    185|}
_ZNK6google8protobuf19FileDescriptorProto12message_typeEv:
12435|     10|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
12436|       |  // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorProto.message_type)
12437|     10|  return _internal_message_type();
12438|     10|}
_ZNK6google8protobuf19FileDescriptorProto22_internal_message_typeEv:
12440|    254|FileDescriptorProto::_internal_message_type() const {
12441|    254|  ::google::protobuf::internal::TSanRead(&_impl_);
12442|    254|  return _impl_.message_type_;
12443|    254|}
_ZNK6google8protobuf19FileDescriptorProto24_internal_enum_type_sizeEv:
12451|     19|inline int FileDescriptorProto::_internal_enum_type_size() const {
12452|     19|  return _internal_enum_type().size();
12453|     19|}
_ZNK6google8protobuf19FileDescriptorProto14enum_type_sizeEv:
12454|     19|inline int FileDescriptorProto::enum_type_size() const {
12455|     19|  return _internal_enum_type_size();
12456|     19|}
_ZNK6google8protobuf19FileDescriptorProto9enum_typeEi:
12473|     28|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
12474|       |  // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.enum_type)
12475|     28|  return _internal_enum_type().Get(index);
12476|     28|}
_ZNK6google8protobuf19FileDescriptorProto9enum_typeEv:
12484|     10|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
12485|       |  // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorProto.enum_type)
12486|     10|  return _internal_enum_type();
12487|     10|}
_ZNK6google8protobuf19FileDescriptorProto19_internal_enum_typeEv:
12489|     67|FileDescriptorProto::_internal_enum_type() const {
12490|     67|  ::google::protobuf::internal::TSanRead(&_impl_);
12491|     67|  return _impl_.enum_type_;
12492|     67|}
_ZNK6google8protobuf19FileDescriptorProto22_internal_service_sizeEv:
12500|     12|inline int FileDescriptorProto::_internal_service_size() const {
12501|     12|  return _internal_service().size();
12502|     12|}
_ZNK6google8protobuf19FileDescriptorProto12service_sizeEv:
12503|     12|inline int FileDescriptorProto::service_size() const {
12504|     12|  return _internal_service_size();
12505|     12|}
_ZNK6google8protobuf19FileDescriptorProto7serviceEv:
12533|     10|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
12534|       |  // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorProto.service)
12535|     10|  return _internal_service();
12536|     10|}
_ZNK6google8protobuf19FileDescriptorProto17_internal_serviceEv:
12538|     32|FileDescriptorProto::_internal_service() const {
12539|     32|  ::google::protobuf::internal::TSanRead(&_impl_);
12540|     32|  return _impl_.service_;
12541|     32|}
_ZNK6google8protobuf19FileDescriptorProto24_internal_extension_sizeEv:
12549|     13|inline int FileDescriptorProto::_internal_extension_size() const {
12550|     13|  return _internal_extension().size();
12551|     13|}
_ZNK6google8protobuf19FileDescriptorProto14extension_sizeEv:
12552|     13|inline int FileDescriptorProto::extension_size() const {
12553|     13|  return _internal_extension_size();
12554|     13|}
_ZNK6google8protobuf19FileDescriptorProto9extensionEi:
12571|      5|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
12572|       |  // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.extension)
12573|      5|  return _internal_extension().Get(index);
12574|      5|}
_ZNK6google8protobuf19FileDescriptorProto9extensionEv:
12582|     10|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
12583|       |  // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorProto.extension)
12584|     10|  return _internal_extension();
12585|     10|}
_ZNK6google8protobuf19FileDescriptorProto19_internal_extensionEv:
12587|     38|FileDescriptorProto::_internal_extension() const {
12588|     38|  ::google::protobuf::internal::TSanRead(&_impl_);
12589|     38|  return _impl_.extension_;
12590|     38|}
_ZNK6google8protobuf19FileDescriptorProto11has_optionsEv:
12598|      8|inline bool FileDescriptorProto::has_options() const {
12599|      8|  bool value = (_impl_._has_bits_[0] & 0x00000008u) != 0;
12600|      8|  PROTOBUF_ASSUME(!value || _impl_.options_ != nullptr);
  ------------------
  |  |  941|     12|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 4, False: 4]
  |  |  |  Branch (941:48): [True: 4, False: 0]
  |  |  ------------------
  ------------------
12601|      8|  return value;
12602|      8|}
_ZNK6google8protobuf19FileDescriptorProto17_internal_optionsEv:
12608|      2|inline const ::google::protobuf::FileOptions& FileDescriptorProto::_internal_options() const {
12609|      2|  ::google::protobuf::internal::TSanRead(&_impl_);
12610|      2|  const ::google::protobuf::FileOptions* p = _impl_.options_;
12611|      2|  return p != nullptr ? *p : reinterpret_cast<const ::google::protobuf::FileOptions&>(::google::protobuf::_FileOptions_default_instance_);
  ------------------
  |  Branch (12611:10): [True: 2, False: 0]
  ------------------
12612|      2|}
_ZNK6google8protobuf19FileDescriptorProto7optionsEv:
12613|      2|inline const ::google::protobuf::FileOptions& FileDescriptorProto::options() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
12614|       |  // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.options)
12615|      2|  return _internal_options();
12616|      2|}
_ZNK6google8protobuf19FileDescriptorProto20has_source_code_infoEv:
12694|      8|inline bool FileDescriptorProto::has_source_code_info() const {
12695|      8|  bool value = (_impl_._has_bits_[0] & 0x00000010u) != 0;
12696|      8|  PROTOBUF_ASSUME(!value || _impl_.source_code_info_ != nullptr);
  ------------------
  |  |  941|      8|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 8, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
12697|      8|  return value;
12698|      8|}
_ZNK6google8protobuf19FileDescriptorProto6syntaxEv:
12800|      8|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
12801|       |  // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.syntax)
12802|      8|  return _internal_syntax();
12803|      8|}
_ZNK6google8protobuf19FileDescriptorProto16_internal_syntaxEv:
12817|      8|inline const std::string& FileDescriptorProto::_internal_syntax() const {
12818|      8|  ::google::protobuf::internal::TSanRead(&_impl_);
12819|      8|  return _impl_.syntax_.Get();
12820|      8|}
_ZNK6google8protobuf19FileDescriptorProto11has_editionEv:
12859|      4|inline bool FileDescriptorProto::has_edition() const {
12860|      4|  bool value = (_impl_._has_bits_[0] & 0x00000020u) != 0;
12861|      4|  return value;
12862|      4|}
_ZNK6google8protobuf30DescriptorProto_ExtensionRange5startEv:
12901|     14|inline ::int32_t DescriptorProto_ExtensionRange::start() const {
12902|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.ExtensionRange.start)
12903|     14|  return _internal_start();
12904|     14|}
_ZNK6google8protobuf30DescriptorProto_ExtensionRange15_internal_startEv:
12910|     14|inline ::int32_t DescriptorProto_ExtensionRange::_internal_start() const {
12911|     14|  ::google::protobuf::internal::TSanRead(&_impl_);
12912|     14|  return _impl_.start_;
12913|     14|}
_ZNK6google8protobuf30DescriptorProto_ExtensionRange3endEv:
12929|     14|inline ::int32_t DescriptorProto_ExtensionRange::end() const {
12930|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.ExtensionRange.end)
12931|     14|  return _internal_end();
12932|     14|}
_ZNK6google8protobuf30DescriptorProto_ExtensionRange13_internal_endEv:
12938|     14|inline ::int32_t DescriptorProto_ExtensionRange::_internal_end() const {
12939|     14|  ::google::protobuf::internal::TSanRead(&_impl_);
12940|     14|  return _impl_.end_;
12941|     14|}
_ZNK6google8protobuf30DescriptorProto_ExtensionRange11has_optionsEv:
12948|     28|inline bool DescriptorProto_ExtensionRange::has_options() const {
12949|     28|  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
12950|     28|  PROTOBUF_ASSUME(!value || _impl_.options_ != nullptr);
  ------------------
  |  |  941|     28|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 28, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
12951|     28|  return value;
12952|     28|}
_ZNK6google8protobuf29DescriptorProto_ReservedRange5startEv:
13057|     28|inline ::int32_t DescriptorProto_ReservedRange::start() const {
13058|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.ReservedRange.start)
13059|     28|  return _internal_start();
13060|     28|}
_ZNK6google8protobuf29DescriptorProto_ReservedRange15_internal_startEv:
13066|     28|inline ::int32_t DescriptorProto_ReservedRange::_internal_start() const {
13067|     28|  ::google::protobuf::internal::TSanRead(&_impl_);
13068|     28|  return _impl_.start_;
13069|     28|}
_ZNK6google8protobuf29DescriptorProto_ReservedRange3endEv:
13085|     28|inline ::int32_t DescriptorProto_ReservedRange::end() const {
13086|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.ReservedRange.end)
13087|     28|  return _internal_end();
13088|     28|}
_ZNK6google8protobuf29DescriptorProto_ReservedRange13_internal_endEv:
13094|     28|inline ::int32_t DescriptorProto_ReservedRange::_internal_end() const {
13095|     28|  ::google::protobuf::internal::TSanRead(&_impl_);
13096|     28|  return _impl_.end_;
13097|     28|}
_ZNK6google8protobuf15DescriptorProto4nameEv:
13118|    144|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13119|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.name)
13120|    144|  return _internal_name();
13121|    144|}
_ZNK6google8protobuf15DescriptorProto14_internal_nameEv:
13135|    144|inline const std::string& DescriptorProto::_internal_name() const {
13136|    144|  ::google::protobuf::internal::TSanRead(&_impl_);
13137|    144|  return _impl_.name_.Get();
13138|    144|}
_ZNK6google8protobuf15DescriptorProto20_internal_field_sizeEv:
13177|    549|inline int DescriptorProto::_internal_field_size() const {
13178|    549|  return _internal_field().size();
13179|    549|}
_ZNK6google8protobuf15DescriptorProto10field_sizeEv:
13180|    549|inline int DescriptorProto::field_size() const {
13181|    549|  return _internal_field_size();
13182|    549|}
_ZNK6google8protobuf15DescriptorProto5fieldEi:
13199|  1.31k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13200|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.field)
13201|  1.31k|  return _internal_field().Get(index);
13202|  1.31k|}
_ZNK6google8protobuf15DescriptorProto5fieldEv:
13210|     47|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13211|       |  // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.field)
13212|     47|  return _internal_field();
13213|     47|}
_ZNK6google8protobuf15DescriptorProto15_internal_fieldEv:
13215|  2.02k|DescriptorProto::_internal_field() const {
13216|  2.02k|  ::google::protobuf::internal::TSanRead(&_impl_);
13217|  2.02k|  return _impl_.field_;
13218|  2.02k|}
_ZNK6google8protobuf15DescriptorProto24_internal_extension_sizeEv:
13226|    141|inline int DescriptorProto::_internal_extension_size() const {
13227|    141|  return _internal_extension().size();
13228|    141|}
_ZNK6google8protobuf15DescriptorProto14extension_sizeEv:
13229|    141|inline int DescriptorProto::extension_size() const {
13230|    141|  return _internal_extension_size();
13231|    141|}
_ZNK6google8protobuf15DescriptorProto9extensionEv:
13259|    107|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13260|       |  // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.extension)
13261|    107|  return _internal_extension();
13262|    107|}
_ZNK6google8protobuf15DescriptorProto19_internal_extensionEv:
13264|    355|DescriptorProto::_internal_extension() const {
13265|    355|  ::google::protobuf::internal::TSanRead(&_impl_);
13266|    355|  return _impl_.extension_;
13267|    355|}
_ZNK6google8protobuf15DescriptorProto26_internal_nested_type_sizeEv:
13275|    151|inline int DescriptorProto::_internal_nested_type_size() const {
13276|    151|  return _internal_nested_type().size();
13277|    151|}
_ZNK6google8protobuf15DescriptorProto16nested_type_sizeEv:
13278|    151|inline int DescriptorProto::nested_type_size() const {
13279|    151|  return _internal_nested_type_size();
13280|    151|}
_ZNK6google8protobuf15DescriptorProto11nested_typeEi:
13297|     50|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13298|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.nested_type)
13299|     50|  return _internal_nested_type().Get(index);
13300|     50|}
_ZNK6google8protobuf15DescriptorProto11nested_typeEv:
13308|    107|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13309|       |  // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.nested_type)
13310|    107|  return _internal_nested_type();
13311|    107|}
_ZNK6google8protobuf15DescriptorProto21_internal_nested_typeEv:
13313|    415|DescriptorProto::_internal_nested_type() const {
13314|    415|  ::google::protobuf::internal::TSanRead(&_impl_);
13315|    415|  return _impl_.nested_type_;
13316|    415|}
_ZNK6google8protobuf15DescriptorProto24_internal_enum_type_sizeEv:
13324|    158|inline int DescriptorProto::_internal_enum_type_size() const {
13325|    158|  return _internal_enum_type().size();
13326|    158|}
_ZNK6google8protobuf15DescriptorProto14enum_type_sizeEv:
13327|    158|inline int DescriptorProto::enum_type_size() const {
13328|    158|  return _internal_enum_type_size();
13329|    158|}
_ZNK6google8protobuf15DescriptorProto9enum_typeEi:
13346|     68|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13347|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.enum_type)
13348|     68|  return _internal_enum_type().Get(index);
13349|     68|}
_ZNK6google8protobuf15DescriptorProto9enum_typeEv:
13357|     47|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13358|       |  // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.enum_type)
13359|     47|  return _internal_enum_type();
13360|     47|}
_ZNK6google8protobuf15DescriptorProto19_internal_enum_typeEv:
13362|    380|DescriptorProto::_internal_enum_type() const {
13363|    380|  ::google::protobuf::internal::TSanRead(&_impl_);
13364|    380|  return _impl_.enum_type_;
13365|    380|}
_ZNK6google8protobuf15DescriptorProto30_internal_extension_range_sizeEv:
13373|    155|inline int DescriptorProto::_internal_extension_range_size() const {
13374|    155|  return _internal_extension_range().size();
13375|    155|}
_ZNK6google8protobuf15DescriptorProto20extension_range_sizeEv:
13376|    155|inline int DescriptorProto::extension_range_size() const {
13377|    155|  return _internal_extension_range_size();
13378|    155|}
_ZNK6google8protobuf15DescriptorProto15extension_rangeEi:
13395|     56|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13396|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.extension_range)
13397|     56|  return _internal_extension_range().Get(index);
13398|     56|}
_ZNK6google8protobuf15DescriptorProto15extension_rangeEv:
13406|     47|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13407|       |  // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.extension_range)
13408|     47|  return _internal_extension_range();
13409|     47|}
_ZNK6google8protobuf15DescriptorProto25_internal_extension_rangeEv:
13411|    365|DescriptorProto::_internal_extension_range() const {
13412|    365|  ::google::protobuf::internal::TSanRead(&_impl_);
13413|    365|  return _impl_.extension_range_;
13414|    365|}
_ZNK6google8protobuf15DescriptorProto25_internal_oneof_decl_sizeEv:
13422|    143|inline int DescriptorProto::_internal_oneof_decl_size() const {
13423|    143|  return _internal_oneof_decl().size();
13424|    143|}
_ZNK6google8protobuf15DescriptorProto15oneof_decl_sizeEv:
13425|    143|inline int DescriptorProto::oneof_decl_size() const {
13426|    143|  return _internal_oneof_decl_size();
13427|    143|}
_ZNK6google8protobuf15DescriptorProto10oneof_declEi:
13444|      8|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13445|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.oneof_decl)
13446|      8|  return _internal_oneof_decl().Get(index);
13447|      8|}
_ZNK6google8protobuf15DescriptorProto10oneof_declEv:
13455|     47|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13456|       |  // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.oneof_decl)
13457|     47|  return _internal_oneof_decl();
13458|     47|}
_ZNK6google8protobuf15DescriptorProto20_internal_oneof_declEv:
13460|    305|DescriptorProto::_internal_oneof_decl() const {
13461|    305|  ::google::protobuf::internal::TSanRead(&_impl_);
13462|    305|  return _impl_.oneof_decl_;
13463|    305|}
_ZNK6google8protobuf15DescriptorProto11has_optionsEv:
13471|     94|inline bool DescriptorProto::has_options() const {
13472|     94|  bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0;
13473|     94|  PROTOBUF_ASSUME(!value || _impl_.options_ != nullptr);
  ------------------
  |  |  941|     94|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 94, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
13474|     94|  return value;
13475|     94|}
_ZNK6google8protobuf15DescriptorProto29_internal_reserved_range_sizeEv:
13567|    290|inline int DescriptorProto::_internal_reserved_range_size() const {
13568|    290|  return _internal_reserved_range().size();
13569|    290|}
_ZNK6google8protobuf15DescriptorProto19reserved_range_sizeEv:
13570|    290|inline int DescriptorProto::reserved_range_size() const {
13571|    290|  return _internal_reserved_range_size();
13572|    290|}
_ZNK6google8protobuf15DescriptorProto14reserved_rangeEi:
13589|     41|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13590|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.reserved_range)
13591|     41|  return _internal_reserved_range().Get(index);
13592|     41|}
_ZNK6google8protobuf15DescriptorProto24_internal_reserved_rangeEv:
13605|    331|DescriptorProto::_internal_reserved_range() const {
13606|    331|  ::google::protobuf::internal::TSanRead(&_impl_);
13607|    331|  return _impl_.reserved_range_;
13608|    331|}
_ZNK6google8protobuf15DescriptorProto28_internal_reserved_name_sizeEv:
13616|    141|inline int DescriptorProto::_internal_reserved_name_size() const {
13617|    141|  return _internal_reserved_name().size();
13618|    141|}
_ZNK6google8protobuf15DescriptorProto18reserved_name_sizeEv:
13619|    141|inline int DescriptorProto::reserved_name_size() const {
13620|    141|  return _internal_reserved_name_size();
13621|    141|}
_ZNK6google8protobuf15DescriptorProto13reserved_nameEi:
13633|      2|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13634|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.reserved_name)
13635|      2|  return _internal_reserved_name().Get(index);
13636|      2|}
_ZNK6google8protobuf15DescriptorProto13reserved_nameEv:
13658|     47|DescriptorProto::reserved_name() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
13659|       |  // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.reserved_name)
13660|     47|  return _internal_reserved_name();
13661|     47|}
_ZNK6google8protobuf15DescriptorProto23_internal_reserved_nameEv:
13669|    190|DescriptorProto::_internal_reserved_name() const {
13670|    190|  ::google::protobuf::internal::TSanRead(&_impl_);
13671|    190|  return _impl_.reserved_name_;
13672|    190|}
_ZNK6google8protobuf21ExtensionRangeOptions12has_featuresEv:
14008|     14|inline bool ExtensionRangeOptions::has_features() const {
14009|     14|  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
14010|     14|  PROTOBUF_ASSUME(!value || _impl_.features_ != nullptr);
  ------------------
  |  |  941|     14|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 14, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
14011|     14|  return value;
14012|     14|}
_ZNK6google8protobuf20FieldDescriptorProto4nameEv:
14147|    706|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
14148|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.name)
14149|    706|  return _internal_name();
14150|    706|}
_ZNK6google8protobuf20FieldDescriptorProto14_internal_nameEv:
14164|    706|inline const std::string& FieldDescriptorProto::_internal_name() const {
14165|    706|  ::google::protobuf::internal::TSanRead(&_impl_);
14166|    706|  return _impl_.name_.Get();
14167|    706|}
_ZNK6google8protobuf20FieldDescriptorProto6numberEv:
14215|    384|inline ::int32_t FieldDescriptorProto::number() const {
14216|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.number)
14217|    384|  return _internal_number();
14218|    384|}
_ZNK6google8protobuf20FieldDescriptorProto16_internal_numberEv:
14224|    384|inline ::int32_t FieldDescriptorProto::_internal_number() const {
14225|    384|  ::google::protobuf::internal::TSanRead(&_impl_);
14226|    384|  return _impl_.number_;
14227|    384|}
_ZNK6google8protobuf20FieldDescriptorProto5labelEv:
14243|    470|inline ::google::protobuf::FieldDescriptorProto_Label FieldDescriptorProto::label() const {
14244|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.label)
14245|    470|  return _internal_label();
14246|    470|}
_ZNK6google8protobuf20FieldDescriptorProto15_internal_labelEv:
14252|    470|inline ::google::protobuf::FieldDescriptorProto_Label FieldDescriptorProto::_internal_label() const {
14253|    470|  ::google::protobuf::internal::TSanRead(&_impl_);
14254|    470|  return static_cast<::google::protobuf::FieldDescriptorProto_Label>(_impl_.label_);
14255|    470|}
_ZNK6google8protobuf20FieldDescriptorProto8has_typeEv:
14263|    360|inline bool FieldDescriptorProto::has_type() const {
14264|    360|  bool value = (_impl_._has_bits_[0] & 0x00000400u) != 0;
14265|    360|  return value;
14266|    360|}
_ZNK6google8protobuf20FieldDescriptorProto4typeEv:
14272|    622|inline ::google::protobuf::FieldDescriptorProto_Type FieldDescriptorProto::type() const {
14273|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.type)
14274|    622|  return _internal_type();
14275|    622|}
_ZNK6google8protobuf20FieldDescriptorProto14_internal_typeEv:
14281|    622|inline ::google::protobuf::FieldDescriptorProto_Type FieldDescriptorProto::_internal_type() const {
14282|    622|  ::google::protobuf::internal::TSanRead(&_impl_);
14283|    622|  return static_cast<::google::protobuf::FieldDescriptorProto_Type>(_impl_.type_);
14284|    622|}
_ZNK6google8protobuf20FieldDescriptorProto13has_type_nameEv:
14292|    235|inline bool FieldDescriptorProto::has_type_name() const {
14293|    235|  bool value = (_impl_._has_bits_[0] & 0x00000004u) != 0;
14294|    235|  return value;
14295|    235|}
_ZNK6google8protobuf20FieldDescriptorProto9type_nameEv:
14302|     98|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
14303|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.type_name)
14304|     98|  return _internal_type_name();
14305|     98|}
_ZNK6google8protobuf20FieldDescriptorProto19_internal_type_nameEv:
14319|     98|inline const std::string& FieldDescriptorProto::_internal_type_name() const {
14320|     98|  ::google::protobuf::internal::TSanRead(&_impl_);
14321|     98|  return _impl_.type_name_.Get();
14322|     98|}
_ZNK6google8protobuf20FieldDescriptorProto12has_extendeeEv:
14361|    470|inline bool FieldDescriptorProto::has_extendee() const {
14362|    470|  bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0;
14363|    470|  return value;
14364|    470|}
_ZNK6google8protobuf20FieldDescriptorProto8extendeeEv:
14371|      5|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
14372|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.extendee)
14373|      5|  return _internal_extendee();
14374|      5|}
_ZNK6google8protobuf20FieldDescriptorProto18_internal_extendeeEv:
14388|      5|inline const std::string& FieldDescriptorProto::_internal_extendee() const {
14389|      5|  ::google::protobuf::internal::TSanRead(&_impl_);
14390|      5|  return _impl_.extendee_.Get();
14391|      5|}
_ZNK6google8protobuf20FieldDescriptorProto17has_default_valueEv:
14430|  1.00k|inline bool FieldDescriptorProto::has_default_value() const {
14431|  1.00k|  bool value = (_impl_._has_bits_[0] & 0x00000008u) != 0;
14432|  1.00k|  return value;
14433|  1.00k|}
_ZNK6google8protobuf20FieldDescriptorProto13default_valueEv:
14440|     53|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
14441|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.default_value)
14442|     53|  return _internal_default_value();
14443|     53|}
_ZNK6google8protobuf20FieldDescriptorProto23_internal_default_valueEv:
14457|     53|inline const std::string& FieldDescriptorProto::_internal_default_value() const {
14458|     53|  ::google::protobuf::internal::TSanRead(&_impl_);
14459|     53|  return _impl_.default_value_.Get();
14460|     53|}
_ZNK6google8protobuf20FieldDescriptorProto15has_oneof_indexEv:
14499|    235|inline bool FieldDescriptorProto::has_oneof_index() const {
14500|    235|  bool value = (_impl_._has_bits_[0] & 0x00000080u) != 0;
14501|    235|  return value;
14502|    235|}
_ZNK6google8protobuf20FieldDescriptorProto11oneof_indexEv:
14508|     15|inline ::int32_t FieldDescriptorProto::oneof_index() const {
14509|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.oneof_index)
14510|     15|  return _internal_oneof_index();
14511|     15|}
_ZNK6google8protobuf20FieldDescriptorProto21_internal_oneof_indexEv:
14517|     15|inline ::int32_t FieldDescriptorProto::_internal_oneof_index() const {
14518|     15|  ::google::protobuf::internal::TSanRead(&_impl_);
14519|     15|  return _impl_.oneof_index_;
14520|     15|}
_ZNK6google8protobuf20FieldDescriptorProto13has_json_nameEv:
14527|    705|inline bool FieldDescriptorProto::has_json_name() const {
14528|    705|  bool value = (_impl_._has_bits_[0] & 0x00000010u) != 0;
14529|    705|  return value;
14530|    705|}
_ZNK6google8protobuf20FieldDescriptorProto11has_optionsEv:
14596|    470|inline bool FieldDescriptorProto::has_options() const {
14597|    470|  bool value = (_impl_._has_bits_[0] & 0x00000020u) != 0;
14598|    470|  PROTOBUF_ASSUME(!value || _impl_.options_ != nullptr);
  ------------------
  |  |  941|    504|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 436, False: 34]
  |  |  |  Branch (941:48): [True: 34, False: 0]
  |  |  ------------------
  ------------------
14599|    470|  return value;
14600|    470|}
_ZNK6google8protobuf20FieldDescriptorProto17_internal_optionsEv:
14606|    115|inline const ::google::protobuf::FieldOptions& FieldDescriptorProto::_internal_options() const {
14607|    115|  ::google::protobuf::internal::TSanRead(&_impl_);
14608|    115|  const ::google::protobuf::FieldOptions* p = _impl_.options_;
14609|    115|  return p != nullptr ? *p : reinterpret_cast<const ::google::protobuf::FieldOptions&>(::google::protobuf::_FieldOptions_default_instance_);
  ------------------
  |  Branch (14609:10): [True: 26, False: 89]
  ------------------
14610|    115|}
_ZNK6google8protobuf20FieldDescriptorProto7optionsEv:
14611|    115|inline const ::google::protobuf::FieldOptions& FieldDescriptorProto::options() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
14612|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.options)
14613|    115|  return _internal_options();
14614|    115|}
_ZNK6google8protobuf20FieldDescriptorProto15proto3_optionalEv:
14701|    470|inline bool FieldDescriptorProto::proto3_optional() const {
14702|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.proto3_optional)
14703|    470|  return _internal_proto3_optional();
14704|    470|}
_ZNK6google8protobuf20FieldDescriptorProto25_internal_proto3_optionalEv:
14710|    470|inline bool FieldDescriptorProto::_internal_proto3_optional() const {
14711|    470|  ::google::protobuf::internal::TSanRead(&_impl_);
14712|    470|  return _impl_.proto3_optional_;
14713|    470|}
_ZNK6google8protobuf20OneofDescriptorProto4nameEv:
14734|      4|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
14735|       |  // @@protoc_insertion_point(field_get:google.protobuf.OneofDescriptorProto.name)
14736|      4|  return _internal_name();
14737|      4|}
_ZNK6google8protobuf20OneofDescriptorProto14_internal_nameEv:
14751|      4|inline const std::string& OneofDescriptorProto::_internal_name() const {
14752|      4|  ::google::protobuf::internal::TSanRead(&_impl_);
14753|      4|  return _impl_.name_.Get();
14754|      4|}
_ZNK6google8protobuf20OneofDescriptorProto11has_optionsEv:
14793|      4|inline bool OneofDescriptorProto::has_options() const {
14794|      4|  bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0;
14795|      4|  PROTOBUF_ASSUME(!value || _impl_.options_ != nullptr);
  ------------------
  |  |  941|      4|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 4, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
14796|      4|  return value;
14797|      4|}
_ZNK6google8protobuf37EnumDescriptorProto_EnumReservedRange5startEv:
14902|      1|inline ::int32_t EnumDescriptorProto_EnumReservedRange::start() const {
14903|       |  // @@protoc_insertion_point(field_get:google.protobuf.EnumDescriptorProto.EnumReservedRange.start)
14904|      1|  return _internal_start();
14905|      1|}
_ZNK6google8protobuf37EnumDescriptorProto_EnumReservedRange15_internal_startEv:
14911|      1|inline ::int32_t EnumDescriptorProto_EnumReservedRange::_internal_start() const {
14912|      1|  ::google::protobuf::internal::TSanRead(&_impl_);
14913|      1|  return _impl_.start_;
14914|      1|}
_ZNK6google8protobuf37EnumDescriptorProto_EnumReservedRange3endEv:
14930|      1|inline ::int32_t EnumDescriptorProto_EnumReservedRange::end() const {
14931|       |  // @@protoc_insertion_point(field_get:google.protobuf.EnumDescriptorProto.EnumReservedRange.end)
14932|      1|  return _internal_end();
14933|      1|}
_ZNK6google8protobuf37EnumDescriptorProto_EnumReservedRange13_internal_endEv:
14939|      1|inline ::int32_t EnumDescriptorProto_EnumReservedRange::_internal_end() const {
14940|      1|  ::google::protobuf::internal::TSanRead(&_impl_);
14941|      1|  return _impl_.end_;
14942|      1|}
_ZNK6google8protobuf19EnumDescriptorProto4nameEv:
14963|     61|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
14964|       |  // @@protoc_insertion_point(field_get:google.protobuf.EnumDescriptorProto.name)
14965|     61|  return _internal_name();
14966|     61|}
_ZNK6google8protobuf19EnumDescriptorProto14_internal_nameEv:
14980|     61|inline const std::string& EnumDescriptorProto::_internal_name() const {
14981|     61|  ::google::protobuf::internal::TSanRead(&_impl_);
14982|     61|  return _impl_.name_.Get();
14983|     61|}
_ZNK6google8protobuf19EnumDescriptorProto20_internal_value_sizeEv:
15022|    405|inline int EnumDescriptorProto::_internal_value_size() const {
15023|    405|  return _internal_value().size();
15024|    405|}
_ZNK6google8protobuf19EnumDescriptorProto10value_sizeEv:
15025|    405|inline int EnumDescriptorProto::value_size() const {
15026|    405|  return _internal_value_size();
15027|    405|}
_ZNK6google8protobuf19EnumDescriptorProto5valueEi:
15044|    958|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
15045|       |  // @@protoc_insertion_point(field_get:google.protobuf.EnumDescriptorProto.value)
15046|    958|  return _internal_value().Get(index);
15047|    958|}
_ZNK6google8protobuf19EnumDescriptorProto5valueEv:
15055|     24|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
15056|       |  // @@protoc_insertion_point(field_list:google.protobuf.EnumDescriptorProto.value)
15057|     24|  return _internal_value();
15058|     24|}
_ZNK6google8protobuf19EnumDescriptorProto15_internal_valueEv:
15060|  1.44k|EnumDescriptorProto::_internal_value() const {
15061|  1.44k|  ::google::protobuf::internal::TSanRead(&_impl_);
15062|  1.44k|  return _impl_.value_;
15063|  1.44k|}
_ZNK6google8protobuf19EnumDescriptorProto11has_optionsEv:
15071|     48|inline bool EnumDescriptorProto::has_options() const {
15072|     48|  bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0;
15073|     48|  PROTOBUF_ASSUME(!value || _impl_.options_ != nullptr);
  ------------------
  |  |  941|     48|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 48, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
15074|     48|  return value;
15075|     48|}
_ZNK6google8protobuf19EnumDescriptorProto29_internal_reserved_range_sizeEv:
15167|    123|inline int EnumDescriptorProto::_internal_reserved_range_size() const {
15168|    123|  return _internal_reserved_range().size();
15169|    123|}
_ZNK6google8protobuf19EnumDescriptorProto19reserved_range_sizeEv:
15170|    123|inline int EnumDescriptorProto::reserved_range_size() const {
15171|    123|  return _internal_reserved_range_size();
15172|    123|}
_ZNK6google8protobuf19EnumDescriptorProto14reserved_rangeEi:
15189|      2|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
15190|       |  // @@protoc_insertion_point(field_get:google.protobuf.EnumDescriptorProto.reserved_range)
15191|      2|  return _internal_reserved_range().Get(index);
15192|      2|}
_ZNK6google8protobuf19EnumDescriptorProto24_internal_reserved_rangeEv:
15205|    125|EnumDescriptorProto::_internal_reserved_range() const {
15206|    125|  ::google::protobuf::internal::TSanRead(&_impl_);
15207|    125|  return _impl_.reserved_range_;
15208|    125|}
_ZNK6google8protobuf19EnumDescriptorProto28_internal_reserved_name_sizeEv:
15216|     72|inline int EnumDescriptorProto::_internal_reserved_name_size() const {
15217|     72|  return _internal_reserved_name().size();
15218|     72|}
_ZNK6google8protobuf19EnumDescriptorProto18reserved_name_sizeEv:
15219|     72|inline int EnumDescriptorProto::reserved_name_size() const {
15220|     72|  return _internal_reserved_name_size();
15221|     72|}
_ZNK6google8protobuf19EnumDescriptorProto13reserved_nameEv:
15258|     24|EnumDescriptorProto::reserved_name() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
15259|       |  // @@protoc_insertion_point(field_list:google.protobuf.EnumDescriptorProto.reserved_name)
15260|     24|  return _internal_reserved_name();
15261|     24|}
_ZNK6google8protobuf19EnumDescriptorProto23_internal_reserved_nameEv:
15269|     96|EnumDescriptorProto::_internal_reserved_name() const {
15270|     96|  ::google::protobuf::internal::TSanRead(&_impl_);
15271|     96|  return _impl_.reserved_name_;
15272|     96|}
_ZNK6google8protobuf24EnumValueDescriptorProto4nameEv:
15294|    760|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
15295|       |  // @@protoc_insertion_point(field_get:google.protobuf.EnumValueDescriptorProto.name)
15296|    760|  return _internal_name();
15297|    760|}
_ZNK6google8protobuf24EnumValueDescriptorProto14_internal_nameEv:
15311|    760|inline const std::string& EnumValueDescriptorProto::_internal_name() const {
15312|    760|  ::google::protobuf::internal::TSanRead(&_impl_);
15313|    760|  return _impl_.name_.Get();
15314|    760|}
_ZNK6google8protobuf24EnumValueDescriptorProto6numberEv:
15362|    388|inline ::int32_t EnumValueDescriptorProto::number() const {
15363|       |  // @@protoc_insertion_point(field_get:google.protobuf.EnumValueDescriptorProto.number)
15364|    388|  return _internal_number();
15365|    388|}
_ZNK6google8protobuf24EnumValueDescriptorProto16_internal_numberEv:
15371|    388|inline ::int32_t EnumValueDescriptorProto::_internal_number() const {
15372|    388|  ::google::protobuf::internal::TSanRead(&_impl_);
15373|    388|  return _impl_.number_;
15374|    388|}
_ZNK6google8protobuf24EnumValueDescriptorProto11has_optionsEv:
15381|    380|inline bool EnumValueDescriptorProto::has_options() const {
15382|    380|  bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0;
15383|    380|  PROTOBUF_ASSUME(!value || _impl_.options_ != nullptr);
  ------------------
  |  |  941|    380|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 380, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
15384|    380|  return value;
15385|    380|}
_ZNK6google8protobuf11FileOptions22_internal_java_packageEv:
16089|      4|inline const std::string& FileOptions::_internal_java_package() const {
16090|      4|  ::google::protobuf::internal::TSanRead(&_impl_);
16091|      4|  return _impl_.java_package_.Get();
16092|      4|}
_ZNK6google8protobuf11FileOptions30_internal_java_outer_classnameEv:
16158|      4|inline const std::string& FileOptions::_internal_java_outer_classname() const {
16159|      4|  ::google::protobuf::internal::TSanRead(&_impl_);
16160|      4|  return _impl_.java_outer_classname_.Get();
16161|      4|}
_ZNK6google8protobuf11FileOptions29_internal_java_multiple_filesEv:
16218|      1|inline bool FileOptions::_internal_java_multiple_files() const {
16219|      1|  ::google::protobuf::internal::TSanRead(&_impl_);
16220|      1|  return _impl_.java_multiple_files_;
16221|      1|}
_ZNK6google8protobuf11FileOptions22_internal_optimize_forEv:
16302|      2|inline ::google::protobuf::FileOptions_OptimizeMode FileOptions::_internal_optimize_for() const {
16303|      2|  ::google::protobuf::internal::TSanRead(&_impl_);
16304|      2|  return static_cast<::google::protobuf::FileOptions_OptimizeMode>(_impl_.optimize_for_);
16305|      2|}
_ZNK6google8protobuf11FileOptions20_internal_go_packageEv:
16340|      4|inline const std::string& FileOptions::_internal_go_package() const {
16341|      4|  ::google::protobuf::internal::TSanRead(&_impl_);
16342|      4|  return _impl_.go_package_.Get();
16343|      4|}
_ZNK6google8protobuf11FileOptions19cc_generic_servicesEv:
16391|      4|inline bool FileOptions::cc_generic_services() const {
16392|       |  // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.cc_generic_services)
16393|      4|  return _internal_cc_generic_services();
16394|      4|}
_ZNK6google8protobuf11FileOptions29_internal_cc_generic_servicesEv:
16400|      4|inline bool FileOptions::_internal_cc_generic_services() const {
16401|      4|  ::google::protobuf::internal::TSanRead(&_impl_);
16402|      4|  return _impl_.cc_generic_services_;
16403|      4|}
_ZNK6google8protobuf11FileOptions26_internal_cc_enable_arenasEv:
16512|      1|inline bool FileOptions::_internal_cc_enable_arenas() const {
16513|      1|  ::google::protobuf::internal::TSanRead(&_impl_);
16514|      1|  return _impl_.cc_enable_arenas_;
16515|      1|}
_ZNK6google8protobuf11FileOptions27_internal_objc_class_prefixEv:
16549|      4|inline const std::string& FileOptions::_internal_objc_class_prefix() const {
16550|      4|  ::google::protobuf::internal::TSanRead(&_impl_);
16551|      4|  return _impl_.objc_class_prefix_.Get();
16552|      4|}
_ZNK6google8protobuf11FileOptions26_internal_csharp_namespaceEv:
16618|      4|inline const std::string& FileOptions::_internal_csharp_namespace() const {
16619|      4|  ::google::protobuf::internal::TSanRead(&_impl_);
16620|      4|  return _impl_.csharp_namespace_.Get();
16621|      4|}
_ZNK6google8protobuf11FileOptions12has_featuresEv:
17005|      4|inline bool FileOptions::has_features() const {
17006|      4|  bool value = (_impl_._has_bits_[0] & 0x00000400u) != 0;
17007|      4|  PROTOBUF_ASSUME(!value || _impl_.features_ != nullptr);
  ------------------
  |  |  941|      4|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 4, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
17008|      4|  return value;
17009|      4|}
_ZNK6google8protobuf11FileOptions35_internal_uninterpreted_option_sizeEv:
17101|      6|inline int FileOptions::_internal_uninterpreted_option_size() const {
17102|      6|  return _internal_uninterpreted_option().size();
17103|      6|}
_ZNK6google8protobuf11FileOptions25uninterpreted_option_sizeEv:
17104|      2|inline int FileOptions::uninterpreted_option_size() const {
17105|      2|  return _internal_uninterpreted_option_size();
17106|      2|}
_ZNK6google8protobuf11FileOptions30_internal_uninterpreted_optionEv:
17139|     17|FileOptions::_internal_uninterpreted_option() const {
17140|     17|  ::google::protobuf::internal::TSanRead(&_impl_);
17141|     17|  return _impl_.uninterpreted_option_;
17142|     17|}
_ZNK6google8protobuf14MessageOptions12has_featuresEv:
17294|     47|inline bool MessageOptions::has_features() const {
17295|     47|  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
17296|     47|  PROTOBUF_ASSUME(!value || _impl_.features_ != nullptr);
  ------------------
  |  |  941|     47|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 47, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
17297|     47|  return value;
17298|     47|}
_ZNK6google8protobuf27FieldOptions_EditionDefault17_internal_editionEv:
17461|     36|inline ::google::protobuf::Edition FieldOptions_EditionDefault::_internal_edition() const {
17462|     36|  ::google::protobuf::internal::TSanRead(&_impl_);
17463|     36|  return static_cast<::google::protobuf::Edition>(_impl_.edition_);
17464|     36|}
_ZNK6google8protobuf27FieldOptions_EditionDefault15_internal_valueEv:
17499|     36|inline const std::string& FieldOptions_EditionDefault::_internal_value() const {
17500|     36|  ::google::protobuf::internal::TSanRead(&_impl_);
17501|     36|  return _impl_.value_.Get();
17502|     36|}
_ZNK6google8protobuf27FieldOptions_FeatureSupport28_internal_edition_introducedEv:
17563|     18|inline ::google::protobuf::Edition FieldOptions_FeatureSupport::_internal_edition_introduced() const {
17564|     18|  ::google::protobuf::internal::TSanRead(&_impl_);
17565|     18|  return static_cast<::google::protobuf::Edition>(_impl_.edition_introduced_);
17566|     18|}
_ZNK6google8protobuf27FieldOptions_FeatureSupport28_internal_edition_deprecatedEv:
17592|      2|inline ::google::protobuf::Edition FieldOptions_FeatureSupport::_internal_edition_deprecated() const {
17593|      2|  ::google::protobuf::internal::TSanRead(&_impl_);
17594|      2|  return static_cast<::google::protobuf::Edition>(_impl_.edition_deprecated_);
17595|      2|}
_ZNK6google8protobuf27FieldOptions_FeatureSupport29_internal_deprecation_warningEv:
17630|      2|inline const std::string& FieldOptions_FeatureSupport::_internal_deprecation_warning() const {
17631|      2|  ::google::protobuf::internal::TSanRead(&_impl_);
17632|      2|  return _impl_.deprecation_warning_.Get();
17633|      2|}
_ZNK6google8protobuf12FieldOptions9has_ctypeEv:
17705|    235|inline bool FieldOptions::has_ctype() const {
17706|    235|  bool value = (_impl_._has_bits_[0] & 0x00000004u) != 0;
17707|    235|  return value;
17708|    235|}
_ZNK6google8protobuf12FieldOptions5ctypeEv:
17714|    235|inline ::google::protobuf::FieldOptions_CType FieldOptions::ctype() const {
17715|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldOptions.ctype)
17716|    235|  return _internal_ctype();
17717|    235|}
_ZNK6google8protobuf12FieldOptions15_internal_ctypeEv:
17723|    235|inline ::google::protobuf::FieldOptions_CType FieldOptions::_internal_ctype() const {
17724|    235|  ::google::protobuf::internal::TSanRead(&_impl_);
17725|    235|  return static_cast<::google::protobuf::FieldOptions_CType>(_impl_.ctype_);
17726|    235|}
_ZNK6google8protobuf12FieldOptions10has_packedEv:
17734|     61|inline bool FieldOptions::has_packed() const {
17735|     61|  bool value = (_impl_._has_bits_[0] & 0x00000010u) != 0;
17736|     61|  return value;
17737|     61|}
_ZNK6google8protobuf12FieldOptions6packedEv:
17743|    235|inline bool FieldOptions::packed() const {
17744|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldOptions.packed)
17745|    235|  return _internal_packed();
17746|    235|}
_ZNK6google8protobuf12FieldOptions16_internal_packedEv:
17752|    238|inline bool FieldOptions::_internal_packed() const {
17753|    238|  ::google::protobuf::internal::TSanRead(&_impl_);
17754|    238|  return _impl_.packed_;
17755|    238|}
_ZNK6google8protobuf12FieldOptions20_internal_deprecatedEv:
17865|      3|inline bool FieldOptions::_internal_deprecated() const {
17866|      3|  ::google::protobuf::internal::TSanRead(&_impl_);
17867|      3|  return _impl_.deprecated_;
17868|      3|}
_ZNK6google8protobuf12FieldOptions4weakEv:
17884|     98|inline bool FieldOptions::weak() const {
17885|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldOptions.weak)
17886|     98|  return _internal_weak();
17887|     98|}
_ZNK6google8protobuf12FieldOptions14_internal_weakEv:
17893|     98|inline bool FieldOptions::_internal_weak() const {
17894|     98|  ::google::protobuf::internal::TSanRead(&_impl_);
17895|     98|  return _impl_.weak_;
17896|     98|}
_ZNK6google8protobuf12FieldOptions19_internal_retentionEv:
17949|     22|inline ::google::protobuf::FieldOptions_OptionRetention FieldOptions::_internal_retention() const {
17950|     22|  ::google::protobuf::internal::TSanRead(&_impl_);
17951|     22|  return static_cast<::google::protobuf::FieldOptions_OptionRetention>(_impl_.retention_);
17952|     22|}
_ZNK6google8protobuf12FieldOptions22_internal_targets_sizeEv:
17960|     34|inline int FieldOptions::_internal_targets_size() const {
17961|     34|  return _internal_targets().size();
17962|     34|}
_ZNK6google8protobuf12FieldOptions17_internal_targetsEv:
17997|     70|    const {
17998|     70|  ::google::protobuf::internal::TSanRead(&_impl_);
17999|     70|  return _impl_.targets_;
18000|     70|}
_ZNK6google8protobuf12FieldOptions31_internal_edition_defaults_sizeEv:
18007|     34|inline int FieldOptions::_internal_edition_defaults_size() const {
18008|     34|  return _internal_edition_defaults().size();
18009|     34|}
_ZNK6google8protobuf12FieldOptions26_internal_edition_defaultsEv:
18045|     69|FieldOptions::_internal_edition_defaults() const {
18046|     69|  ::google::protobuf::internal::TSanRead(&_impl_);
18047|     69|  return _impl_.edition_defaults_;
18048|     69|}
_ZNK6google8protobuf12FieldOptions12has_featuresEv:
18056|    235|inline bool FieldOptions::has_features() const {
18057|    235|  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
18058|    235|  PROTOBUF_ASSUME(!value || _impl_.features_ != nullptr);
  ------------------
  |  |  941|    235|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 235, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
18059|    235|  return value;
18060|    235|}
_ZNK6google8protobuf12FieldOptions35_internal_uninterpreted_option_sizeEv:
18248|     51|inline int FieldOptions::_internal_uninterpreted_option_size() const {
18249|     51|  return _internal_uninterpreted_option().size();
18250|     51|}
_ZNK6google8protobuf12FieldOptions25uninterpreted_option_sizeEv:
18251|     17|inline int FieldOptions::uninterpreted_option_size() const {
18252|     17|  return _internal_uninterpreted_option_size();
18253|     17|}
_ZNK6google8protobuf12FieldOptions30_internal_uninterpreted_optionEv:
18286|    136|FieldOptions::_internal_uninterpreted_option() const {
18287|    136|  ::google::protobuf::internal::TSanRead(&_impl_);
18288|    136|  return _impl_.uninterpreted_option_;
18289|    136|}
_ZNK6google8protobuf12OneofOptions12has_featuresEv:
18301|      2|inline bool OneofOptions::has_features() const {
18302|      2|  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
18303|      2|  PROTOBUF_ASSUME(!value || _impl_.features_ != nullptr);
  ------------------
  |  |  941|      2|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 2, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
18304|      2|  return value;
18305|      2|}
_ZNK6google8protobuf11EnumOptions12has_featuresEv:
18534|     24|inline bool EnumOptions::has_features() const {
18535|     24|  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
18536|     24|  PROTOBUF_ASSUME(!value || _impl_.features_ != nullptr);
  ------------------
  |  |  941|     24|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 24, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
18537|     24|  return value;
18538|     24|}
_ZNK6google8protobuf16EnumValueOptions12has_featuresEv:
18711|    190|inline bool EnumValueOptions::has_features() const {
18712|    190|  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
18713|    190|  PROTOBUF_ASSUME(!value || _impl_.features_ != nullptr);
  ------------------
  |  |  941|    190|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 190, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
18714|    190|  return value;
18715|    190|}
_ZNK6google8protobuf10FeatureSet14field_presenceEv:
19821|  44.8k|inline ::google::protobuf::FeatureSet_FieldPresence FeatureSet::field_presence() const {
19822|       |  // @@protoc_insertion_point(field_get:google.protobuf.FeatureSet.field_presence)
19823|  44.8k|  return _internal_field_presence();
19824|  44.8k|}
_ZN6google8protobuf10FeatureSet18set_field_presenceENS0_24FeatureSet_FieldPresenceE:
19825|      2|inline void FeatureSet::set_field_presence(::google::protobuf::FeatureSet_FieldPresence value) {
19826|      2|  _internal_set_field_presence(value);
19827|      2|  _impl_._has_bits_[0] |= 0x00000001u;
19828|       |  // @@protoc_insertion_point(field_set:google.protobuf.FeatureSet.field_presence)
19829|      2|}
_ZNK6google8protobuf10FeatureSet24_internal_field_presenceEv:
19830|  45.3k|inline ::google::protobuf::FeatureSet_FieldPresence FeatureSet::_internal_field_presence() const {
19831|  45.3k|  ::google::protobuf::internal::TSanRead(&_impl_);
19832|  45.3k|  return static_cast<::google::protobuf::FeatureSet_FieldPresence>(_impl_.field_presence_);
19833|  45.3k|}
_ZN6google8protobuf10FeatureSet28_internal_set_field_presenceENS0_24FeatureSet_FieldPresenceE:
19834|      2|inline void FeatureSet::_internal_set_field_presence(::google::protobuf::FeatureSet_FieldPresence value) {
19835|      2|  ::google::protobuf::internal::TSanWrite(&_impl_);
19836|       |  assert(::google::protobuf::FeatureSet_FieldPresence_IsValid(value));
19837|      2|  _impl_.field_presence_ = value;
19838|      2|}
_ZNK6google8protobuf10FeatureSet9enum_typeEv:
19850|    510|inline ::google::protobuf::FeatureSet_EnumType FeatureSet::enum_type() const {
19851|       |  // @@protoc_insertion_point(field_get:google.protobuf.FeatureSet.enum_type)
19852|    510|  return _internal_enum_type();
19853|    510|}
_ZNK6google8protobuf10FeatureSet19_internal_enum_typeEv:
19859|    988|inline ::google::protobuf::FeatureSet_EnumType FeatureSet::_internal_enum_type() const {
19860|    988|  ::google::protobuf::internal::TSanRead(&_impl_);
19861|    988|  return static_cast<::google::protobuf::FeatureSet_EnumType>(_impl_.enum_type_);
19862|    988|}
_ZNK6google8protobuf10FeatureSet23repeated_field_encodingEv:
19879|    510|inline ::google::protobuf::FeatureSet_RepeatedFieldEncoding FeatureSet::repeated_field_encoding() const {
19880|       |  // @@protoc_insertion_point(field_get:google.protobuf.FeatureSet.repeated_field_encoding)
19881|    510|  return _internal_repeated_field_encoding();
19882|    510|}
_ZN6google8protobuf10FeatureSet27set_repeated_field_encodingENS0_32FeatureSet_RepeatedFieldEncodingE:
19883|      3|inline void FeatureSet::set_repeated_field_encoding(::google::protobuf::FeatureSet_RepeatedFieldEncoding value) {
19884|      3|  _internal_set_repeated_field_encoding(value);
19885|      3|  _impl_._has_bits_[0] |= 0x00000004u;
19886|       |  // @@protoc_insertion_point(field_set:google.protobuf.FeatureSet.repeated_field_encoding)
19887|      3|}
_ZNK6google8protobuf10FeatureSet33_internal_repeated_field_encodingEv:
19888|    991|inline ::google::protobuf::FeatureSet_RepeatedFieldEncoding FeatureSet::_internal_repeated_field_encoding() const {
19889|    991|  ::google::protobuf::internal::TSanRead(&_impl_);
19890|    991|  return static_cast<::google::protobuf::FeatureSet_RepeatedFieldEncoding>(_impl_.repeated_field_encoding_);
19891|    991|}
_ZN6google8protobuf10FeatureSet37_internal_set_repeated_field_encodingENS0_32FeatureSet_RepeatedFieldEncodingE:
19892|      3|inline void FeatureSet::_internal_set_repeated_field_encoding(::google::protobuf::FeatureSet_RepeatedFieldEncoding value) {
19893|      3|  ::google::protobuf::internal::TSanWrite(&_impl_);
19894|       |  assert(::google::protobuf::FeatureSet_RepeatedFieldEncoding_IsValid(value));
19895|      3|  _impl_.repeated_field_encoding_ = value;
19896|      3|}
_ZNK6google8protobuf10FeatureSet15utf8_validationEv:
19908|    510|inline ::google::protobuf::FeatureSet_Utf8Validation FeatureSet::utf8_validation() const {
19909|       |  // @@protoc_insertion_point(field_get:google.protobuf.FeatureSet.utf8_validation)
19910|    510|  return _internal_utf8_validation();
19911|    510|}
_ZNK6google8protobuf10FeatureSet25_internal_utf8_validationEv:
19917|    988|inline ::google::protobuf::FeatureSet_Utf8Validation FeatureSet::_internal_utf8_validation() const {
19918|    988|  ::google::protobuf::internal::TSanRead(&_impl_);
19919|    988|  return static_cast<::google::protobuf::FeatureSet_Utf8Validation>(_impl_.utf8_validation_);
19920|    988|}
_ZNK6google8protobuf10FeatureSet16message_encodingEv:
19937|    576|inline ::google::protobuf::FeatureSet_MessageEncoding FeatureSet::message_encoding() const {
19938|       |  // @@protoc_insertion_point(field_get:google.protobuf.FeatureSet.message_encoding)
19939|    576|  return _internal_message_encoding();
19940|    576|}
_ZNK6google8protobuf10FeatureSet26_internal_message_encodingEv:
19946|  1.05k|inline ::google::protobuf::FeatureSet_MessageEncoding FeatureSet::_internal_message_encoding() const {
19947|  1.05k|  ::google::protobuf::internal::TSanRead(&_impl_);
19948|  1.05k|  return static_cast<::google::protobuf::FeatureSet_MessageEncoding>(_impl_.message_encoding_);
19949|  1.05k|}
_ZNK6google8protobuf10FeatureSet11json_formatEv:
19966|    510|inline ::google::protobuf::FeatureSet_JsonFormat FeatureSet::json_format() const {
19967|       |  // @@protoc_insertion_point(field_get:google.protobuf.FeatureSet.json_format)
19968|    510|  return _internal_json_format();
19969|    510|}
_ZNK6google8protobuf10FeatureSet21_internal_json_formatEv:
19975|    988|inline ::google::protobuf::FeatureSet_JsonFormat FeatureSet::_internal_json_format() const {
19976|    988|  ::google::protobuf::internal::TSanRead(&_impl_);
19977|    988|  return static_cast<::google::protobuf::FeatureSet_JsonFormat>(_impl_.json_format_);
19978|    988|}
_ZNK6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault7editionEv:
19999|     64|inline ::google::protobuf::Edition FeatureSetDefaults_FeatureSetEditionDefault::edition() const {
20000|       |  // @@protoc_insertion_point(field_get:google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.edition)
20001|     64|  return _internal_edition();
20002|     64|}
_ZN6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault11set_editionENS0_7EditionE:
20003|      4|inline void FeatureSetDefaults_FeatureSetEditionDefault::set_edition(::google::protobuf::Edition value) {
20004|      4|  _internal_set_edition(value);
20005|      4|  _impl_._has_bits_[0] |= 0x00000004u;
20006|       |  // @@protoc_insertion_point(field_set:google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.edition)
20007|      4|}
_ZNK6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault17_internal_editionEv:
20008|     64|inline ::google::protobuf::Edition FeatureSetDefaults_FeatureSetEditionDefault::_internal_edition() const {
20009|     64|  ::google::protobuf::internal::TSanRead(&_impl_);
20010|     64|  return static_cast<::google::protobuf::Edition>(_impl_.edition_);
20011|     64|}
_ZN6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault21_internal_set_editionENS0_7EditionE:
20012|      4|inline void FeatureSetDefaults_FeatureSetEditionDefault::_internal_set_edition(::google::protobuf::Edition value) {
20013|      4|  ::google::protobuf::internal::TSanWrite(&_impl_);
20014|       |  assert(::google::protobuf::Edition_IsValid(value));
20015|      4|  _impl_.edition_ = value;
20016|      4|}
_ZNK6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault30_internal_overridable_featuresEv:
20029|     20|inline const ::google::protobuf::FeatureSet& FeatureSetDefaults_FeatureSetEditionDefault::_internal_overridable_features() const {
20030|     20|  ::google::protobuf::internal::TSanRead(&_impl_);
20031|     20|  const ::google::protobuf::FeatureSet* p = _impl_.overridable_features_;
20032|     20|  return p != nullptr ? *p : reinterpret_cast<const ::google::protobuf::FeatureSet&>(::google::protobuf::_FeatureSet_default_instance_);
  ------------------
  |  Branch (20032:10): [True: 20, False: 0]
  ------------------
20033|     20|}
_ZNK6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault20overridable_featuresEv:
20034|     20|inline const ::google::protobuf::FeatureSet& FeatureSetDefaults_FeatureSetEditionDefault::overridable_features() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
20035|       |  // @@protoc_insertion_point(field_get:google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.overridable_features)
20036|     20|  return _internal_overridable_features();
20037|     20|}
_ZNK6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault24_internal_fixed_featuresEv:
20125|     20|inline const ::google::protobuf::FeatureSet& FeatureSetDefaults_FeatureSetEditionDefault::_internal_fixed_features() const {
20126|     20|  ::google::protobuf::internal::TSanRead(&_impl_);
20127|     20|  const ::google::protobuf::FeatureSet* p = _impl_.fixed_features_;
20128|     20|  return p != nullptr ? *p : reinterpret_cast<const ::google::protobuf::FeatureSet&>(::google::protobuf::_FeatureSet_default_instance_);
  ------------------
  |  Branch (20128:10): [True: 20, False: 0]
  ------------------
20129|     20|}
_ZNK6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault14fixed_featuresEv:
20130|     20|inline const ::google::protobuf::FeatureSet& FeatureSetDefaults_FeatureSetEditionDefault::fixed_features() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
20131|       |  // @@protoc_insertion_point(field_get:google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.fixed_features)
20132|     20|  return _internal_fixed_features();
20133|     20|}
_ZNK6google8protobuf18FeatureSetDefaults8defaultsEv:
20248|     12|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
20249|       |  // @@protoc_insertion_point(field_list:google.protobuf.FeatureSetDefaults.defaults)
20250|     12|  return _internal_defaults();
20251|     12|}
_ZNK6google8protobuf18FeatureSetDefaults18_internal_defaultsEv:
20253|     13|FeatureSetDefaults::_internal_defaults() const {
20254|     13|  ::google::protobuf::internal::TSanRead(&_impl_);
20255|     13|  return _impl_.defaults_;
20256|     13|}
_ZNK6google8protobuf18FeatureSetDefaults15minimum_editionEv:
20273|      4|inline ::google::protobuf::Edition FeatureSetDefaults::minimum_edition() const {
20274|       |  // @@protoc_insertion_point(field_get:google.protobuf.FeatureSetDefaults.minimum_edition)
20275|      4|  return _internal_minimum_edition();
20276|      4|}
_ZNK6google8protobuf18FeatureSetDefaults25_internal_minimum_editionEv:
20282|      4|inline ::google::protobuf::Edition FeatureSetDefaults::_internal_minimum_edition() const {
20283|      4|  ::google::protobuf::internal::TSanRead(&_impl_);
20284|      4|  return static_cast<::google::protobuf::Edition>(_impl_.minimum_edition_);
20285|      4|}
_ZNK6google8protobuf18FeatureSetDefaults15maximum_editionEv:
20302|      4|inline ::google::protobuf::Edition FeatureSetDefaults::maximum_edition() const {
20303|       |  // @@protoc_insertion_point(field_get:google.protobuf.FeatureSetDefaults.maximum_edition)
20304|      4|  return _internal_maximum_edition();
20305|      4|}
_ZNK6google8protobuf18FeatureSetDefaults25_internal_maximum_editionEv:
20311|      4|inline ::google::protobuf::Edition FeatureSetDefaults::_internal_maximum_edition() const {
20312|      4|  ::google::protobuf::internal::TSanRead(&_impl_);
20313|      4|  return static_cast<::google::protobuf::Edition>(_impl_.maximum_edition_);
20314|      4|}
_ZNK6google8protobuf10FeatureSet12GetExtensionINS0_8internal17MessageTypeTraitsIN2pb11CppFeaturesEEELh11ELb0ETnNSt3__19enable_ifIXsrT_14kLifetimeBoundEiE4typeELi0EEENSA_8Singular9ConstTypeERKNS3_19ExtensionIdentifierIS1_SA_XT0_EXT1_EEE:
 2317|    235|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2318|    235|    return _proto_TypeTraits::Get(id.number(), _impl_._extensions_, id.default_value());
 2319|    235|  }
_ZN6google8protobuf10FeatureSet16MutableExtensionINS0_8internal17MessageTypeTraitsIN2pb11CppFeaturesEEELh11ELb0EEENT_8Singular11MutableTypeERKNS3_19ExtensionIdentifierIS1_S8_XT0_EXT1_EEE:
 2326|    235|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2327|    235|    return _proto_TypeTraits::Mutable(id.number(), _field_type, &_impl_._extensions_);
 2328|    235|  }

_ZN6google8protobuf25EncodedDescriptorDatabase3AddEPKvi:
  545|      6|                                    int size) {
  546|      6|  FileDescriptorProto file;
  547|      6|  if (file.ParseFromArray(encoded_file_descriptor, size)) {
  ------------------
  |  Branch (547:7): [True: 6, False: 0]
  ------------------
  548|      6|    return index_->AddFile(file, std::make_pair(encoded_file_descriptor, size));
  549|      6|  } else {
  550|      0|    ABSL_LOG(ERROR) << "Invalid file descriptor data passed to "
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  551|      0|                       "EncodedDescriptorDatabase::Add().";
  552|      0|    return false;
  553|      0|  }
  554|      6|}
_ZN6google8protobuf25EncodedDescriptorDatabase14FindFileByNameERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPNS0_19FileDescriptorProtoE:
  565|      4|                                               FileDescriptorProto* output) {
  566|      4|  return MaybeParse(index_->FindFile(filename), output);
  567|      4|}
_ZN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9AddSymbolEN4absl12lts_2024011611string_viewE:
  684|     64|    absl::string_view symbol) {
  685|     64|  SymbolEntry entry = {static_cast<int>(all_values_.size() - 1),
  686|     64|                       EncodeString(symbol)};
  687|     64|  std::string entry_as_string = entry.AsString(*this);
  688|       |
  689|       |  // We need to make sure not to violate our map invariant.
  690|       |
  691|       |  // If the symbol name is invalid it could break our lookup algorithm (which
  692|       |  // relies on the fact that '.' sorts before all other characters that are
  693|       |  // valid in symbol names).
  694|     64|  if (!ValidateSymbolName(symbol)) {
  ------------------
  |  Branch (694:7): [True: 0, False: 64]
  ------------------
  695|      0|    ABSL_LOG(ERROR) << "Invalid symbol name: " << entry_as_string;
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  696|      0|    return false;
  697|      0|  }
  698|       |
  699|     64|  auto iter = FindLastLessOrEqual(&by_symbol_, entry);
  700|     64|  if (!CheckForMutualSubsymbols(entry_as_string, &iter, by_symbol_.end(),
  ------------------
  |  Branch (700:7): [True: 0, False: 64]
  ------------------
  701|     64|                                *this)) {
  702|      0|    return false;
  703|      0|  }
  704|       |
  705|       |  // Same, but on by_symbol_flat_
  706|     64|  auto flat_iter =
  707|     64|      FindLastLessOrEqual(&by_symbol_flat_, entry, by_symbol_.key_comp());
  708|     64|  if (!CheckForMutualSubsymbols(entry_as_string, &flat_iter,
  ------------------
  |  Branch (708:7): [True: 0, False: 64]
  ------------------
  709|     64|                                by_symbol_flat_.end(), *this)) {
  710|      0|    return false;
  711|      0|  }
  712|       |
  713|       |  // OK, no conflicts.
  714|       |
  715|       |  // Insert the new symbol using the iterator as a hint, the new entry will
  716|       |  // appear immediately before the one the iterator is pointing at.
  717|     64|  by_symbol_.insert(iter, entry);
  718|       |
  719|     64|  return true;
  720|     64|}
_ZN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex10EnsureFlatEv:
  806|      4|void EncodedDescriptorDatabase::DescriptorIndex::EnsureFlat() {
  807|      4|  all_values_.shrink_to_fit();
  808|       |  // Merge each of the sets into their flat counterpart.
  809|      4|  MergeIntoFlat(&by_name_, &by_name_flat_);
  810|      4|  MergeIntoFlat(&by_symbol_, &by_symbol_flat_);
  811|      4|  MergeIntoFlat(&by_extension_, &by_extension_flat_);
  812|      4|}
_ZN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex8FindFileEN4absl12lts_2024011611string_viewE:
  848|      4|    absl::string_view filename) {
  849|      4|  EnsureFlat();
  850|       |
  851|      4|  auto it = std::lower_bound(by_name_flat_.begin(), by_name_flat_.end(),
  852|      4|                             filename, by_name_.key_comp());
  853|      4|  return it == by_name_flat_.end() || it->name(*this) != filename
  ------------------
  |  Branch (853:10): [True: 0, False: 4]
  |  Branch (853:39): [True: 0, False: 4]
  ------------------
  854|      4|             ? std::make_pair(nullptr, 0)
  855|      4|             : all_values_[it->data_offset].value();
  856|      4|}
_ZN6google8protobuf25EncodedDescriptorDatabase10MaybeParseENSt3__14pairIPKviEEPNS0_19FileDescriptorProtoE:
  866|      4|    std::pair<const void*, int> encoded_file, FileDescriptorProto* output) {
  867|      4|  if (encoded_file.first == nullptr) return false;
  ------------------
  |  Branch (867:7): [True: 0, False: 4]
  ------------------
  868|      4|  absl::string_view source(static_cast<const char*>(encoded_file.first),
  869|      4|                           encoded_file.second);
  870|      4|  return internal::ParseNoReflection(source, *output);
  871|      4|}
_ZN6google8protobuf25EncodedDescriptorDatabaseC2Ev:
  874|      2|    : index_(new DescriptorIndex()) {}
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex12EncodeStringEN4absl12lts_2024011611string_viewE:
  420|     77|  String EncodeString(absl::string_view str) const { return String(str); }
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntry8AsStringERKS2_:
  470|    174|    std::string AsString(const DescriptorIndex& index) const {
  471|    174|      auto p = package(index);
  472|    174|      return absl::StrCat(p, p.empty() ? "" : ".", symbol(index));
  ------------------
  |  Branch (472:30): [True: 0, False: 174]
  ------------------
  473|    174|    }
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntry7packageERKS2_:
  462|    982|    absl::string_view package(const DescriptorIndex& index) const {
  463|    982|      return index.DecodeString(index.all_values_[data_offset].encoded_package,
  464|    982|                                data_offset);
  465|    982|    }
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex12DecodeStringERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEi:
  421|  1.99k|  absl::string_view DecodeString(const String& str, int) const { return str; }
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntry6symbolERKS2_:
  466|    982|    absl::string_view symbol(const DescriptorIndex& index) const {
  467|    982|      return index.DecodeString(encoded_symbol, data_offset);
  468|    982|    }
descriptor_database.cc:_ZN6google8protobuf12_GLOBAL__N_118ValidateSymbolNameEN4absl12lts_2024011611string_viewE:
  138|     70|bool ValidateSymbolName(absl::string_view name) {
  139|    893|  for (char c : name) {
  ------------------
  |  Branch (139:15): [True: 893, False: 70]
  ------------------
  140|       |    // I don't trust ctype.h due to locales.  :(
  141|    893|    if (c != '.' && c != '_' && (c < '0' || c > '9') && (c < 'A' || c > 'Z') &&
  ------------------
  |  Branch (141:9): [True: 886, False: 7]
  |  Branch (141:21): [True: 886, False: 0]
  |  Branch (141:34): [True: 0, False: 886]
  |  Branch (141:45): [True: 886, False: 0]
  |  Branch (141:58): [True: 0, False: 886]
  |  Branch (141:69): [True: 743, False: 143]
  ------------------
  142|    743|        (c < 'a' || c > 'z')) {
  ------------------
  |  Branch (142:10): [True: 0, False: 743]
  |  Branch (142:21): [True: 0, False: 743]
  ------------------
  143|      0|      return false;
  144|      0|    }
  145|    893|  }
  146|     70|  return true;
  147|     70|}
descriptor_database.cc:_ZN6google8protobuf12_GLOBAL__N_111IsSubSymbolEN4absl12lts_2024011611string_viewES4_:
  172|    110|bool IsSubSymbol(absl::string_view sub_symbol, absl::string_view super_symbol) {
  173|    110|  return sub_symbol == super_symbol ||
  ------------------
  |  Branch (173:10): [True: 0, False: 110]
  ------------------
  174|    110|         (absl::StartsWith(super_symbol, sub_symbol) &&
  ------------------
  |  Branch (174:11): [True: 1, False: 109]
  ------------------
  175|      1|          super_symbol[sub_symbol.size()] == '.');
  ------------------
  |  Branch (175:11): [True: 0, False: 1]
  ------------------
  176|    110|}
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex12EncodedEntry5valueEv:
  430|      4|    Value value() const { return {data, size}; }
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntry4nameERKS2_:
  438|     29|    absl::string_view name(const DescriptorIndex& index) const {
  439|     29|      return index.DecodeString(encoded_name, data_offset);
  440|     29|    }
_ZN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex7AddFileINS0_19FileDescriptorProtoEEEbRKT_NSt3__14pairIPKviEE:
  616|      6|                                                         Value value) {
  617|       |  // We push `value` into the array first. This is important because the AddXXX
  618|       |  // functions below will expect it to be there.
  619|      6|  all_values_.push_back({value.first, value.second, {}});
  620|       |
  621|      6|  if (!ValidateSymbolName(file.package())) {
  ------------------
  |  Branch (621:7): [True: 0, False: 6]
  ------------------
  622|      0|    ABSL_LOG(ERROR) << "Invalid package name: " << file.package();
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  623|      0|    return false;
  624|      0|  }
  625|      6|  all_values_.back().encoded_package = EncodeString(file.package());
  626|       |
  627|      6|  if (!by_name_
  ------------------
  |  Branch (627:7): [True: 0, False: 6]
  |  Branch (627:7): [True: 0, False: 6]
  ------------------
  628|      6|           .insert({static_cast<int>(all_values_.size() - 1),
  629|      6|                    EncodeString(file.name())})
  630|      6|           .second ||
  631|      6|      std::binary_search(by_name_flat_.begin(), by_name_flat_.end(),
  ------------------
  |  Branch (631:7): [True: 0, False: 6]
  ------------------
  632|      6|                         file.name(), by_name_.key_comp())) {
  633|      0|    ABSL_LOG(ERROR) << "File already exists in database: " << file.name();
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  634|      0|    return false;
  635|      0|  }
  636|       |
  637|     50|  for (const auto& message_type : file.message_type()) {
  ------------------
  |  Branch (637:33): [True: 50, False: 6]
  ------------------
  638|     50|    if (!AddSymbol(message_type.name())) return false;
  ------------------
  |  Branch (638:9): [True: 0, False: 50]
  ------------------
  639|     50|    if (!AddNestedExtensions(file.name(), message_type)) return false;
  ------------------
  |  Branch (639:9): [True: 0, False: 50]
  ------------------
  640|     50|  }
  641|     13|  for (const auto& enum_type : file.enum_type()) {
  ------------------
  |  Branch (641:30): [True: 13, False: 6]
  ------------------
  642|     13|    if (!AddSymbol(enum_type.name())) return false;
  ------------------
  |  Branch (642:9): [True: 0, False: 13]
  ------------------
  643|     13|  }
  644|      6|  for (const auto& extension : file.extension()) {
  ------------------
  |  Branch (644:30): [True: 1, False: 6]
  ------------------
  645|      1|    if (!AddSymbol(extension.name())) return false;
  ------------------
  |  Branch (645:9): [True: 0, False: 1]
  ------------------
  646|      1|    if (!AddExtension(file.name(), extension)) return false;
  ------------------
  |  Branch (646:9): [True: 0, False: 1]
  ------------------
  647|      1|  }
  648|      6|  for (const auto& service : file.service()) {
  ------------------
  |  Branch (648:28): [True: 0, False: 6]
  ------------------
  649|      0|    if (!AddSymbol(service.name())) return false;
  ------------------
  |  Branch (649:9): [True: 0, False: 0]
  ------------------
  650|      0|  }
  651|       |
  652|      6|  return true;
  653|      6|}
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareclERKNS2_9FileEntryES6_:
  445|      6|    bool operator()(const FileEntry& a, const FileEntry& b) const {
  446|      6|      return a.name(index) < b.name(index);
  447|      6|    }
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareclERKNS2_9FileEntryEN4absl12lts_2024011611string_viewE:
  448|     12|    bool operator()(const FileEntry& a, absl::string_view b) const {
  449|     12|      return a.name(index) < b;
  450|     12|    }
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareclEN4absl12lts_2024011611string_viewERKNS2_9FileEntryE:
  451|      1|    bool operator()(absl::string_view a, const FileEntry& b) const {
  452|      1|      return a < b.name(index);
  453|      1|    }
_ZN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex19AddNestedExtensionsINS0_15DescriptorProtoEEEbN4absl12lts_2024011611string_viewERKT_:
  724|     60|    absl::string_view filename, const DescProto& message_type) {
  725|     60|  for (const auto& nested_type : message_type.nested_type()) {
  ------------------
  |  Branch (725:32): [True: 10, False: 60]
  ------------------
  726|     10|    if (!AddNestedExtensions(filename, nested_type)) return false;
  ------------------
  |  Branch (726:9): [True: 0, False: 10]
  ------------------
  727|     10|  }
  728|     60|  for (const auto& extension : message_type.extension()) {
  ------------------
  |  Branch (728:30): [True: 0, False: 60]
  ------------------
  729|      0|    if (!AddExtension(filename, extension)) return false;
  ------------------
  |  Branch (729:9): [True: 0, False: 0]
  ------------------
  730|      0|  }
  731|     60|  return true;
  732|     60|}
_ZN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex12AddExtensionINS0_20FieldDescriptorProtoEEEbN4absl12lts_2024011611string_viewERKT_:
  736|      1|    absl::string_view filename, const FieldProto& field) {
  737|      1|  if (!field.extendee().empty() && field.extendee()[0] == '.') {
  ------------------
  |  Branch (737:7): [True: 1, False: 0]
  |  Branch (737:36): [True: 1, False: 0]
  ------------------
  738|       |    // The extension is fully-qualified.  We can use it as a lookup key in
  739|       |    // the by_symbol_ table.
  740|      1|    if (!by_extension_
  ------------------
  |  Branch (740:9): [True: 0, False: 1]
  |  Branch (740:9): [True: 0, False: 1]
  ------------------
  741|      1|             .insert({static_cast<int>(all_values_.size() - 1),
  742|      1|                      EncodeString(field.extendee()), field.number()})
  743|      1|             .second ||
  744|      1|        std::binary_search(
  ------------------
  |  Branch (744:9): [True: 0, False: 1]
  ------------------
  745|      1|            by_extension_flat_.begin(), by_extension_flat_.end(),
  746|      1|            std::make_pair(field.extendee().substr(1), field.number()),
  747|      1|            by_extension_.key_comp())) {
  748|      0|      ABSL_LOG(ERROR)
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  749|      0|          << "Extension conflicts with extension already in database: "
  750|      0|             "extend "
  751|      0|          << field.extendee() << " { " << field.name() << " = "
  752|      0|          << field.number() << " } from:" << filename;
  753|      0|      return false;
  754|      0|    }
  755|      1|  } else {
  756|       |    // Not fully-qualified.  We can't really do anything here, unfortunately.
  757|       |    // We don't consider this an error, though, because the descriptor is
  758|       |    // valid.
  759|      0|  }
  760|      1|  return true;
  761|      1|}
descriptor_database.cc:_ZN6google8protobuf12_GLOBAL__N_119FindLastLessOrEqualIN4absl12lts_202401169btree_setINS0_25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EEEES8_EENT_14const_iteratorEPKSE_RKT0_:
  154|     64|    const Container* container, const Key& key) {
  155|     64|  auto iter = container->upper_bound(key);
  156|     64|  if (iter != container->begin()) --iter;
  ------------------
  |  Branch (156:7): [True: 57, False: 7]
  ------------------
  157|     64|  return iter;
  158|     64|}
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareclINS2_11SymbolEntryES5_EEbRKT_RKT0_:
  496|    404|    bool operator()(const T& lhs, const U& rhs) const {
  497|    404|      auto lhs_parts = GetParts(lhs);
  498|    404|      auto rhs_parts = GetParts(rhs);
  499|       |
  500|       |      // Fast path to avoid making the whole string for common cases.
  501|    404|      if (int res =
  ------------------
  |  Branch (501:15): [True: 75, False: 329]
  ------------------
  502|    404|              lhs_parts.first.substr(0, rhs_parts.first.size())
  503|    404|                  .compare(rhs_parts.first.substr(0, lhs_parts.first.size()))) {
  504|       |        // If the packages already differ, exit early.
  505|     75|        return res < 0;
  506|    329|      } else if (lhs_parts.first.size() == rhs_parts.first.size()) {
  ------------------
  |  Branch (506:18): [True: 329, False: 0]
  ------------------
  507|    329|        return lhs_parts.second < rhs_parts.second;
  508|    329|      }
  509|      0|      return AsString(lhs) < AsString(rhs);
  510|    404|    }
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompare8GetPartsERKNS2_11SymbolEntryE:
  485|    808|        const SymbolEntry& entry) const {
  486|    808|      auto package = entry.package(index);
  487|    808|      if (package.empty()) return {entry.symbol(index), absl::string_view{}};
  ------------------
  |  Branch (487:11): [True: 0, False: 808]
  ------------------
  488|    808|      return {package, entry.symbol(index)};
  489|    808|    }
descriptor_database.cc:_ZN6google8protobufL24CheckForMutualSubsymbolsIN4absl12lts_2024011618container_internal14btree_iteratorIKNS4_10btree_nodeINS4_10set_paramsINS0_25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS9_13SymbolCompareENSt3__19allocatorISA_EELi256ELb0EEEEERKSA_PSI_EENS5_ISG_SJ_SK_EES9_EEbNS3_11string_viewEPT_T0_RKT1_:
  657|     64|                                     Iter2 end, const Index& index) {
  658|     64|  if (*iter != end) {
  ------------------
  |  Branch (658:7): [True: 61, False: 3]
  ------------------
  659|     61|    if (IsSubSymbol((*iter)->AsString(index), symbol_name)) {
  ------------------
  |  Branch (659:9): [True: 0, False: 61]
  ------------------
  660|      0|      ABSL_LOG(ERROR) << "Symbol name \"" << symbol_name
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  661|      0|                      << "\" conflicts with the existing symbol \""
  662|      0|                      << (*iter)->AsString(index) << "\".";
  663|      0|      return false;
  664|      0|    }
  665|       |
  666|       |    // OK, that worked.  Now we have to make sure that no symbol in the map is
  667|       |    // a sub-symbol of the one we are inserting.  The only symbol which could
  668|       |    // be so is the first symbol that is greater than the new symbol.  Since
  669|       |    // |iter| points at the last symbol that is less than or equal, we just have
  670|       |    // to increment it.
  671|     61|    ++*iter;
  672|       |
  673|     61|    if (*iter != end && IsSubSymbol(symbol_name, (*iter)->AsString(index))) {
  ------------------
  |  Branch (673:9): [True: 47, False: 14]
  |  Branch (673:9): [True: 0, False: 61]
  |  Branch (673:25): [True: 0, False: 47]
  ------------------
  674|      0|      ABSL_LOG(ERROR) << "Symbol name \"" << symbol_name
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  675|      0|                      << "\" conflicts with the existing symbol \""
  676|      0|                      << (*iter)->AsString(index) << "\".";
  677|      0|      return false;
  678|      0|    }
  679|     61|  }
  680|     64|  return true;
  681|     64|}
descriptor_database.cc:_ZN6google8protobuf12_GLOBAL__N_119FindLastLessOrEqualINSt3__16vectorINS0_25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS3_9allocatorIS7_EEEES7_NS6_13SymbolCompareEEENT_14const_iteratorEPKSC_RKT0_RKT1_:
  163|     64|    const Container* container, const Key& key, const Cmp& cmp) {
  164|     64|  auto iter = std::upper_bound(container->begin(), container->end(), key, cmp);
  165|     64|  if (iter != container->begin()) --iter;
  ------------------
  |  Branch (165:7): [True: 2, False: 62]
  ------------------
  166|     64|  return iter;
  167|     64|}
descriptor_database.cc:_ZN6google8protobufL24CheckForMutualSubsymbolsINSt3__111__wrap_iterIPKNS0_25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEENS3_IPS6_EES5_EEbN4absl12lts_2024011611string_viewEPT_T0_RKT1_:
  657|     64|                                     Iter2 end, const Index& index) {
  658|     64|  if (*iter != end) {
  ------------------
  |  Branch (658:7): [True: 2, False: 62]
  ------------------
  659|      2|    if (IsSubSymbol((*iter)->AsString(index), symbol_name)) {
  ------------------
  |  Branch (659:9): [True: 0, False: 2]
  ------------------
  660|      0|      ABSL_LOG(ERROR) << "Symbol name \"" << symbol_name
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  661|      0|                      << "\" conflicts with the existing symbol \""
  662|      0|                      << (*iter)->AsString(index) << "\".";
  663|      0|      return false;
  664|      0|    }
  665|       |
  666|       |    // OK, that worked.  Now we have to make sure that no symbol in the map is
  667|       |    // a sub-symbol of the one we are inserting.  The only symbol which could
  668|       |    // be so is the first symbol that is greater than the new symbol.  Since
  669|       |    // |iter| points at the last symbol that is less than or equal, we just have
  670|       |    // to increment it.
  671|      2|    ++*iter;
  672|       |
  673|      2|    if (*iter != end && IsSubSymbol(symbol_name, (*iter)->AsString(index))) {
  ------------------
  |  Branch (673:9): [True: 0, False: 2]
  |  Branch (673:9): [True: 0, False: 2]
  |  Branch (673:25): [True: 0, False: 0]
  ------------------
  674|      0|      ABSL_LOG(ERROR) << "Symbol name \"" << symbol_name
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  675|      0|                      << "\" conflicts with the existing symbol \""
  676|      0|                      << (*iter)->AsString(index) << "\".";
  677|      0|      return false;
  678|      0|    }
  679|      2|  }
  680|     64|  return true;
  681|     64|}
descriptor_database.cc:_ZN6google8protobufL13MergeIntoFlatINS0_25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS3_11FileCompareEEEvPN4absl12lts_202401169btree_setIT_T0_NSt3__19allocatorIS9_EEEEPNSB_6vectorIS9_SD_EE:
  797|      4|static void MergeIntoFlat(absl::btree_set<T, Less>* s, std::vector<T>* flat) {
  798|      4|  if (s->empty()) return;
  ------------------
  |  Branch (798:7): [True: 2, False: 2]
  ------------------
  799|      2|  std::vector<T> new_flat(s->size() + flat->size());
  800|      2|  std::merge(s->begin(), s->end(), flat->begin(), flat->end(), &new_flat[0],
  801|      2|             s->key_comp());
  802|      2|  *flat = std::move(new_flat);
  803|      2|  s->clear();
  804|      2|}
descriptor_database.cc:_ZN6google8protobufL13MergeIntoFlatINS0_25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS3_13SymbolCompareEEEvPN4absl12lts_202401169btree_setIT_T0_NSt3__19allocatorIS9_EEEEPNSB_6vectorIS9_SD_EE:
  797|      4|static void MergeIntoFlat(absl::btree_set<T, Less>* s, std::vector<T>* flat) {
  798|      4|  if (s->empty()) return;
  ------------------
  |  Branch (798:7): [True: 2, False: 2]
  ------------------
  799|      2|  std::vector<T> new_flat(s->size() + flat->size());
  800|      2|  std::merge(s->begin(), s->end(), flat->begin(), flat->end(), &new_flat[0],
  801|      2|             s->key_comp());
  802|      2|  *flat = std::move(new_flat);
  803|      2|  s->clear();
  804|      2|}
descriptor_database.cc:_ZN6google8protobufL13MergeIntoFlatINS0_25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS3_16ExtensionCompareEEEvPN4absl12lts_202401169btree_setIT_T0_NSt3__19allocatorIS9_EEEEPNSB_6vectorIS9_SD_EE:
  797|      4|static void MergeIntoFlat(absl::btree_set<T, Less>* s, std::vector<T>* flat) {
  798|      4|  if (s->empty()) return;
  ------------------
  |  Branch (798:7): [True: 3, False: 1]
  ------------------
  799|      1|  std::vector<T> new_flat(s->size() + flat->size());
  800|      1|  std::merge(s->begin(), s->end(), flat->begin(), flat->end(), &new_flat[0],
  801|      1|             s->key_comp());
  802|      1|  *flat = std::move(new_flat);
  803|      1|  s->clear();
  804|      1|}

_ZN6google8protobuf18DescriptorDatabaseC2Ev:
   52|      2|  inline DescriptorDatabase() {}

descriptor.cc:_ZN6google8protobuf8internal16VisitDescriptorsIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEvRKNS0_14FileDescriptorES6_T_:
  165|      4|                      const FileDescriptorProto& proto, Visitor visitor) {
  166|      4|  using VisitorImpl = internal::VisitorImpl<Visitor>;
  167|      4|  internal::VisitImpl<VisitorImpl>{VisitorImpl(visitor)}.Visit(file, proto);
  168|      4|}
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EC2ES9_:
  149|      4|  explicit VisitorImpl(Visitor visitor) : Visitor(visitor) {}
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE5VisitIJS6_EEEvRKNS0_14FileDescriptorEDpRT_:
  108|      4|  void Visit(const FileDescriptor& descriptor, Proto&... proto) {
  109|      4|    visitor(descriptor, proto...);
  110|     41|    for (int i = 0; i < descriptor.message_type_count(); i++) {
  ------------------
  |  Branch (110:21): [True: 37, False: 4]
  ------------------
  111|     37|      Visit(*descriptor.message_type(i), message_type(proto, i)...);
  112|     37|    }
  113|     11|    for (int i = 0; i < descriptor.enum_type_count(); i++) {
  ------------------
  |  Branch (113:21): [True: 7, False: 4]
  ------------------
  114|      7|      Visit(*descriptor.enum_type(i), enum_type(proto, i)...);
  115|      7|    }
  116|      5|    for (int i = 0; i < descriptor.extension_count(); i++) {
  ------------------
  |  Branch (116:21): [True: 1, False: 4]
  ------------------
  117|      1|      Visit(*descriptor.extension(i), extension(proto, i)...);
  118|      1|    }
  119|      4|    for (int i = 0; i < descriptor.service_count(); i++) {
  ------------------
  |  Branch (119:21): [True: 0, False: 4]
  ------------------
  120|      0|      Visit(*descriptor.service(i), service(proto, i)...);
  121|      0|    }
  122|      4|  }
descriptor.cc:_ZNK6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EclENSA_15DescriptorEaterESB_:
  159|    281|  void operator()(DescriptorEater, DescriptorEater) const {}
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IRKNS0_14FileDescriptorEEEOT_:
  157|      4|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IS6_EEOT_:
  157|      4|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE5VisitIJKNS0_15DescriptorProtoEEEEvRKNS0_10DescriptorEDpRT_:
   66|     47|  void Visit(const Descriptor& descriptor, Proto&... proto) {
   67|     47|    visitor(descriptor, proto...);
   68|       |
   69|     64|    for (int i = 0; i < descriptor.enum_type_count(); i++) {
  ------------------
  |  Branch (69:21): [True: 17, False: 47]
  ------------------
   70|     17|      Visit(*descriptor.enum_type(i), enum_type(proto, i)...);
   71|     17|    }
   72|       |
   73|     49|    for (int i = 0; i < descriptor.oneof_decl_count(); i++) {
  ------------------
  |  Branch (73:21): [True: 2, False: 47]
  ------------------
   74|      2|      Visit(*descriptor.oneof_decl(i), oneof_decl(proto, i)...);
   75|      2|    }
   76|       |
   77|    281|    for (int i = 0; i < descriptor.field_count(); i++) {
  ------------------
  |  Branch (77:21): [True: 234, False: 47]
  ------------------
   78|    234|      Visit(*descriptor.field(i), field(proto, i)...);
   79|    234|    }
   80|       |
   81|     57|    for (int i = 0; i < descriptor.nested_type_count(); i++) {
  ------------------
  |  Branch (81:21): [True: 10, False: 47]
  ------------------
   82|     10|      Visit(*descriptor.nested_type(i), nested_type(proto, i)...);
   83|     10|    }
   84|       |
   85|     47|    for (int i = 0; i < descriptor.extension_count(); i++) {
  ------------------
  |  Branch (85:21): [True: 0, False: 47]
  ------------------
   86|      0|      Visit(*descriptor.extension(i), extension(proto, i)...);
   87|      0|    }
   88|       |
   89|     61|    for (int i = 0; i < descriptor.extension_range_count(); i++) {
  ------------------
  |  Branch (89:21): [True: 14, False: 47]
  ------------------
   90|     14|      Visit(*descriptor.extension_range(i), extension_range(proto, i)...);
   91|     14|    }
   92|     47|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IRKNS0_10DescriptorEEEOT_:
  157|     47|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IRKNS0_15DescriptorProtoEEEOT_:
  157|     47|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE9enum_typeERKNS0_15DescriptorProtoEi:
  127|     17|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE5VisitIJKNS0_20OneofDescriptorProtoEEEEvRKNS0_15OneofDescriptorEDpRT_:
   61|      2|  void Visit(const OneofDescriptor& descriptor, Proto&... proto) {
   62|      2|    visitor(descriptor, proto...);
   63|      2|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IRKNS0_15OneofDescriptorEEEOT_:
  157|      2|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IRKNS0_20OneofDescriptorProtoEEEOT_:
  157|      2|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE10oneof_declERKNS0_15DescriptorProtoEi:
  127|      2|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE5fieldERKNS0_15DescriptorProtoEi:
  127|    234|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE11nested_typeERKNS0_15DescriptorProtoEi:
  127|     10|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE5VisitIJKNS0_30DescriptorProto_ExtensionRangeEEEEvRKNS0_10Descriptor14ExtensionRangeEDpRT_:
   56|     14|  void Visit(const Descriptor::ExtensionRange& descriptor, Proto&... proto) {
   57|     14|    visitor(descriptor, proto...);
   58|     14|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IRKNS0_10Descriptor14ExtensionRangeEEEOT_:
  157|     14|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IRKNS0_30DescriptorProto_ExtensionRangeEEEOT_:
  157|     14|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE15extension_rangeERKNS0_15DescriptorProtoEi:
  127|     14|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE12message_typeES7_i:
  127|     37|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE5VisitIJKNS0_19EnumDescriptorProtoEEEEvRKNS0_14EnumDescriptorEDpRT_:
   48|     24|  void Visit(const EnumDescriptor& descriptor, Proto&... proto) {
   49|     24|    visitor(descriptor, proto...);
   50|    214|    for (int i = 0; i < descriptor.value_count(); i++) {
  ------------------
  |  Branch (50:21): [True: 190, False: 24]
  ------------------
   51|    190|      Visit(*descriptor.value(i), value(proto, i)...);
   52|    190|    }
   53|     24|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IRKNS0_14EnumDescriptorEEEOT_:
  157|     24|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IRKNS0_19EnumDescriptorProtoEEEOT_:
  157|     24|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE5VisitIJKNS0_24EnumValueDescriptorProtoEEEEvRKNS0_19EnumValueDescriptorEDpRT_:
   43|    190|  void Visit(const EnumValueDescriptor& descriptor, Proto&... proto) {
   44|    190|    visitor(descriptor, proto...);
   45|    190|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IRKNS0_19EnumValueDescriptorEEEOT_:
  157|    190|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IRKNS0_24EnumValueDescriptorProtoEEEOT_:
  157|    190|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE5valueERKNS0_19EnumDescriptorProtoEi:
  127|    190|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE9enum_typeES7_i:
  127|      7|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE5VisitIJKNS0_20FieldDescriptorProtoEEEEvRKNS0_15FieldDescriptorEDpRT_:
   38|    235|  void Visit(const FieldDescriptor& descriptor, Proto&... proto) {
   39|    235|    visitor(descriptor, proto...);
   40|    235|  }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE9extensionES7_i:
  127|      1|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal16VisitDescriptorsIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEvRKNS0_14FileDescriptorES6_T_:
  165|      4|                      const FileDescriptorProto& proto, Visitor visitor) {
  166|      4|  using VisitorImpl = internal::VisitorImpl<Visitor>;
  167|      4|  internal::VisitImpl<VisitorImpl>{VisitorImpl(visitor)}.Visit(file, proto);
  168|      4|}
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EC2ES9_:
  149|      4|  explicit VisitorImpl(Visitor visitor) : Visitor(visitor) {}
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE5VisitIJS6_EEEvRKNS0_14FileDescriptorEDpRT_:
  108|      4|  void Visit(const FileDescriptor& descriptor, Proto&... proto) {
  109|      4|    visitor(descriptor, proto...);
  110|     41|    for (int i = 0; i < descriptor.message_type_count(); i++) {
  ------------------
  |  Branch (110:21): [True: 37, False: 4]
  ------------------
  111|     37|      Visit(*descriptor.message_type(i), message_type(proto, i)...);
  112|     37|    }
  113|     11|    for (int i = 0; i < descriptor.enum_type_count(); i++) {
  ------------------
  |  Branch (113:21): [True: 7, False: 4]
  ------------------
  114|      7|      Visit(*descriptor.enum_type(i), enum_type(proto, i)...);
  115|      7|    }
  116|      5|    for (int i = 0; i < descriptor.extension_count(); i++) {
  ------------------
  |  Branch (116:21): [True: 1, False: 4]
  ------------------
  117|      1|      Visit(*descriptor.extension(i), extension(proto, i)...);
  118|      1|    }
  119|      4|    for (int i = 0; i < descriptor.service_count(); i++) {
  ------------------
  |  Branch (119:21): [True: 0, False: 4]
  ------------------
  120|      0|      Visit(*descriptor.service(i), service(proto, i)...);
  121|      0|    }
  122|      4|  }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE5VisitIJKNS0_15DescriptorProtoEEEEvRKNS0_10DescriptorEDpRT_:
   66|     47|  void Visit(const Descriptor& descriptor, Proto&... proto) {
   67|     47|    visitor(descriptor, proto...);
   68|       |
   69|     64|    for (int i = 0; i < descriptor.enum_type_count(); i++) {
  ------------------
  |  Branch (69:21): [True: 17, False: 47]
  ------------------
   70|     17|      Visit(*descriptor.enum_type(i), enum_type(proto, i)...);
   71|     17|    }
   72|       |
   73|     49|    for (int i = 0; i < descriptor.oneof_decl_count(); i++) {
  ------------------
  |  Branch (73:21): [True: 2, False: 47]
  ------------------
   74|      2|      Visit(*descriptor.oneof_decl(i), oneof_decl(proto, i)...);
   75|      2|    }
   76|       |
   77|    281|    for (int i = 0; i < descriptor.field_count(); i++) {
  ------------------
  |  Branch (77:21): [True: 234, False: 47]
  ------------------
   78|    234|      Visit(*descriptor.field(i), field(proto, i)...);
   79|    234|    }
   80|       |
   81|     57|    for (int i = 0; i < descriptor.nested_type_count(); i++) {
  ------------------
  |  Branch (81:21): [True: 10, False: 47]
  ------------------
   82|     10|      Visit(*descriptor.nested_type(i), nested_type(proto, i)...);
   83|     10|    }
   84|       |
   85|     47|    for (int i = 0; i < descriptor.extension_count(); i++) {
  ------------------
  |  Branch (85:21): [True: 0, False: 47]
  ------------------
   86|      0|      Visit(*descriptor.extension(i), extension(proto, i)...);
   87|      0|    }
   88|       |
   89|     61|    for (int i = 0; i < descriptor.extension_range_count(); i++) {
  ------------------
  |  Branch (89:21): [True: 14, False: 47]
  ------------------
   90|     14|      Visit(*descriptor.extension_range(i), extension_range(proto, i)...);
   91|     14|    }
   92|     47|  }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE9enum_typeERKNS0_15DescriptorProtoEi:
  127|     17|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE5VisitIJKNS0_20OneofDescriptorProtoEEEEvRKNS0_15OneofDescriptorEDpRT_:
   61|      2|  void Visit(const OneofDescriptor& descriptor, Proto&... proto) {
   62|      2|    visitor(descriptor, proto...);
   63|      2|  }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE10oneof_declERKNS0_15DescriptorProtoEi:
  127|      2|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE5fieldERKNS0_15DescriptorProtoEi:
  127|    234|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE11nested_typeERKNS0_15DescriptorProtoEi:
  127|     10|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE5VisitIJKNS0_30DescriptorProto_ExtensionRangeEEEEvRKNS0_10Descriptor14ExtensionRangeEDpRT_:
   56|     14|  void Visit(const Descriptor::ExtensionRange& descriptor, Proto&... proto) {
   57|     14|    visitor(descriptor, proto...);
   58|     14|  }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE15extension_rangeERKNS0_15DescriptorProtoEi:
  127|     14|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE12message_typeES7_i:
  127|     37|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE5VisitIJKNS0_19EnumDescriptorProtoEEEEvRKNS0_14EnumDescriptorEDpRT_:
   48|     24|  void Visit(const EnumDescriptor& descriptor, Proto&... proto) {
   49|     24|    visitor(descriptor, proto...);
   50|    214|    for (int i = 0; i < descriptor.value_count(); i++) {
  ------------------
  |  Branch (50:21): [True: 190, False: 24]
  ------------------
   51|    190|      Visit(*descriptor.value(i), value(proto, i)...);
   52|    190|    }
   53|     24|  }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE5VisitIJKNS0_24EnumValueDescriptorProtoEEEEvRKNS0_19EnumValueDescriptorEDpRT_:
   43|    190|  void Visit(const EnumValueDescriptor& descriptor, Proto&... proto) {
   44|    190|    visitor(descriptor, proto...);
   45|    190|  }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE5valueERKNS0_19EnumDescriptorProtoEi:
  127|    190|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE9enum_typeES7_i:
  127|      7|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE5VisitIJKNS0_20FieldDescriptorProtoEEEEvRKNS0_15FieldDescriptorEDpRT_:
   38|    235|  void Visit(const FieldDescriptor& descriptor, Proto&... proto) {
   39|    235|    visitor(descriptor, proto...);
   40|    235|  }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE9extensionES7_i:
  127|      1|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal16VisitDescriptorsIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5EEvRKNS0_14FileDescriptorET_:
  178|      4|void VisitDescriptors(const FileDescriptor& file, Visitor visitor) {
  179|      4|  using VisitorImpl = internal::VisitorImpl<Visitor>;
  180|      4|  internal::VisitImpl<VisitorImpl>{VisitorImpl(visitor)}.Visit(file);
  181|      4|}
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5EC2ES9_:
  149|      4|  explicit VisitorImpl(Visitor visitor) : Visitor(visitor) {}
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5EEE5VisitIJEEEvRKNS0_14FileDescriptorEDpRT_:
  108|      4|  void Visit(const FileDescriptor& descriptor, Proto&... proto) {
  109|      4|    visitor(descriptor, proto...);
  110|     41|    for (int i = 0; i < descriptor.message_type_count(); i++) {
  ------------------
  |  Branch (110:21): [True: 37, False: 4]
  ------------------
  111|     37|      Visit(*descriptor.message_type(i), message_type(proto, i)...);
  112|     37|    }
  113|     11|    for (int i = 0; i < descriptor.enum_type_count(); i++) {
  ------------------
  |  Branch (113:21): [True: 7, False: 4]
  ------------------
  114|      7|      Visit(*descriptor.enum_type(i), enum_type(proto, i)...);
  115|      7|    }
  116|      5|    for (int i = 0; i < descriptor.extension_count(); i++) {
  ------------------
  |  Branch (116:21): [True: 1, False: 4]
  ------------------
  117|      1|      Visit(*descriptor.extension(i), extension(proto, i)...);
  118|      1|    }
  119|      4|    for (int i = 0; i < descriptor.service_count(); i++) {
  ------------------
  |  Branch (119:21): [True: 0, False: 4]
  ------------------
  120|      0|      Visit(*descriptor.service(i), service(proto, i)...);
  121|      0|    }
  122|      4|  }
descriptor.cc:_ZNK6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5EclENSA_15DescriptorEaterE:
  160|    281|  void operator()(DescriptorEater) const {}
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5E15DescriptorEaterC2IRKNS0_14FileDescriptorEEEOT_:
  157|      4|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5EEE5VisitIJEEEvRKNS0_10DescriptorEDpRT_:
   66|     47|  void Visit(const Descriptor& descriptor, Proto&... proto) {
   67|     47|    visitor(descriptor, proto...);
   68|       |
   69|     64|    for (int i = 0; i < descriptor.enum_type_count(); i++) {
  ------------------
  |  Branch (69:21): [True: 17, False: 47]
  ------------------
   70|     17|      Visit(*descriptor.enum_type(i), enum_type(proto, i)...);
   71|     17|    }
   72|       |
   73|     49|    for (int i = 0; i < descriptor.oneof_decl_count(); i++) {
  ------------------
  |  Branch (73:21): [True: 2, False: 47]
  ------------------
   74|      2|      Visit(*descriptor.oneof_decl(i), oneof_decl(proto, i)...);
   75|      2|    }
   76|       |
   77|    281|    for (int i = 0; i < descriptor.field_count(); i++) {
  ------------------
  |  Branch (77:21): [True: 234, False: 47]
  ------------------
   78|    234|      Visit(*descriptor.field(i), field(proto, i)...);
   79|    234|    }
   80|       |
   81|     57|    for (int i = 0; i < descriptor.nested_type_count(); i++) {
  ------------------
  |  Branch (81:21): [True: 10, False: 47]
  ------------------
   82|     10|      Visit(*descriptor.nested_type(i), nested_type(proto, i)...);
   83|     10|    }
   84|       |
   85|     47|    for (int i = 0; i < descriptor.extension_count(); i++) {
  ------------------
  |  Branch (85:21): [True: 0, False: 47]
  ------------------
   86|      0|      Visit(*descriptor.extension(i), extension(proto, i)...);
   87|      0|    }
   88|       |
   89|     61|    for (int i = 0; i < descriptor.extension_range_count(); i++) {
  ------------------
  |  Branch (89:21): [True: 14, False: 47]
  ------------------
   90|     14|      Visit(*descriptor.extension_range(i), extension_range(proto, i)...);
   91|     14|    }
   92|     47|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5E15DescriptorEaterC2IRKNS0_10DescriptorEEEOT_:
  157|     47|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5EEE5VisitIJEEEvRKNS0_15OneofDescriptorEDpRT_:
   61|      2|  void Visit(const OneofDescriptor& descriptor, Proto&... proto) {
   62|      2|    visitor(descriptor, proto...);
   63|      2|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5E15DescriptorEaterC2IRKNS0_15OneofDescriptorEEEOT_:
  157|      2|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5EEE5VisitIJEEEvRKNS0_10Descriptor14ExtensionRangeEDpRT_:
   56|     14|  void Visit(const Descriptor::ExtensionRange& descriptor, Proto&... proto) {
   57|     14|    visitor(descriptor, proto...);
   58|     14|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5E15DescriptorEaterC2IRKNS0_10Descriptor14ExtensionRangeEEEOT_:
  157|     14|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5EEE5VisitIJEEEvRKNS0_14EnumDescriptorEDpRT_:
   48|     24|  void Visit(const EnumDescriptor& descriptor, Proto&... proto) {
   49|     24|    visitor(descriptor, proto...);
   50|    214|    for (int i = 0; i < descriptor.value_count(); i++) {
  ------------------
  |  Branch (50:21): [True: 190, False: 24]
  ------------------
   51|    190|      Visit(*descriptor.value(i), value(proto, i)...);
   52|    190|    }
   53|     24|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5E15DescriptorEaterC2IRKNS0_14EnumDescriptorEEEOT_:
  157|     24|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5EEE5VisitIJEEEvRKNS0_19EnumValueDescriptorEDpRT_:
   43|    190|  void Visit(const EnumValueDescriptor& descriptor, Proto&... proto) {
   44|    190|    visitor(descriptor, proto...);
   45|    190|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5E15DescriptorEaterC2IRKNS0_19EnumValueDescriptorEEEOT_:
  157|    190|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5EEE5VisitIJEEEvRKNS0_15FieldDescriptorEDpRT_:
   38|    235|  void Visit(const FieldDescriptor& descriptor, Proto&... proto) {
   39|    235|    visitor(descriptor, proto...);
   40|    235|  }
descriptor.cc:_ZN6google8protobuf8internal16VisitDescriptorsIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEvRKNS0_14FileDescriptorES6_T_:
  165|      4|                      const FileDescriptorProto& proto, Visitor visitor) {
  166|      4|  using VisitorImpl = internal::VisitorImpl<Visitor>;
  167|      4|  internal::VisitImpl<VisitorImpl>{VisitorImpl(visitor)}.Visit(file, proto);
  168|      4|}
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EC2ES9_:
  149|      4|  explicit VisitorImpl(Visitor visitor) : Visitor(visitor) {}
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE5VisitIJS6_EEEvRKNS0_14FileDescriptorEDpRT_:
  108|      4|  void Visit(const FileDescriptor& descriptor, Proto&... proto) {
  109|      4|    visitor(descriptor, proto...);
  110|     41|    for (int i = 0; i < descriptor.message_type_count(); i++) {
  ------------------
  |  Branch (110:21): [True: 37, False: 4]
  ------------------
  111|     37|      Visit(*descriptor.message_type(i), message_type(proto, i)...);
  112|     37|    }
  113|     11|    for (int i = 0; i < descriptor.enum_type_count(); i++) {
  ------------------
  |  Branch (113:21): [True: 7, False: 4]
  ------------------
  114|      7|      Visit(*descriptor.enum_type(i), enum_type(proto, i)...);
  115|      7|    }
  116|      5|    for (int i = 0; i < descriptor.extension_count(); i++) {
  ------------------
  |  Branch (116:21): [True: 1, False: 4]
  ------------------
  117|      1|      Visit(*descriptor.extension(i), extension(proto, i)...);
  118|      1|    }
  119|      4|    for (int i = 0; i < descriptor.service_count(); i++) {
  ------------------
  |  Branch (119:21): [True: 0, False: 4]
  ------------------
  120|      0|      Visit(*descriptor.service(i), service(proto, i)...);
  121|      0|    }
  122|      4|  }
descriptor.cc:_ZNK6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EclENSA_15DescriptorEaterESB_:
  159|    281|  void operator()(DescriptorEater, DescriptorEater) const {}
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IRKNS0_14FileDescriptorEEEOT_:
  157|      4|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IS6_EEOT_:
  157|      4|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE5VisitIJKNS0_15DescriptorProtoEEEEvRKNS0_10DescriptorEDpRT_:
   66|     47|  void Visit(const Descriptor& descriptor, Proto&... proto) {
   67|     47|    visitor(descriptor, proto...);
   68|       |
   69|     64|    for (int i = 0; i < descriptor.enum_type_count(); i++) {
  ------------------
  |  Branch (69:21): [True: 17, False: 47]
  ------------------
   70|     17|      Visit(*descriptor.enum_type(i), enum_type(proto, i)...);
   71|     17|    }
   72|       |
   73|     49|    for (int i = 0; i < descriptor.oneof_decl_count(); i++) {
  ------------------
  |  Branch (73:21): [True: 2, False: 47]
  ------------------
   74|      2|      Visit(*descriptor.oneof_decl(i), oneof_decl(proto, i)...);
   75|      2|    }
   76|       |
   77|    281|    for (int i = 0; i < descriptor.field_count(); i++) {
  ------------------
  |  Branch (77:21): [True: 234, False: 47]
  ------------------
   78|    234|      Visit(*descriptor.field(i), field(proto, i)...);
   79|    234|    }
   80|       |
   81|     57|    for (int i = 0; i < descriptor.nested_type_count(); i++) {
  ------------------
  |  Branch (81:21): [True: 10, False: 47]
  ------------------
   82|     10|      Visit(*descriptor.nested_type(i), nested_type(proto, i)...);
   83|     10|    }
   84|       |
   85|     47|    for (int i = 0; i < descriptor.extension_count(); i++) {
  ------------------
  |  Branch (85:21): [True: 0, False: 47]
  ------------------
   86|      0|      Visit(*descriptor.extension(i), extension(proto, i)...);
   87|      0|    }
   88|       |
   89|     61|    for (int i = 0; i < descriptor.extension_range_count(); i++) {
  ------------------
  |  Branch (89:21): [True: 14, False: 47]
  ------------------
   90|     14|      Visit(*descriptor.extension_range(i), extension_range(proto, i)...);
   91|     14|    }
   92|     47|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IRKNS0_10DescriptorEEEOT_:
  157|     47|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IRKNS0_15DescriptorProtoEEEOT_:
  157|     47|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE9enum_typeERKNS0_15DescriptorProtoEi:
  127|     17|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE5VisitIJKNS0_20OneofDescriptorProtoEEEEvRKNS0_15OneofDescriptorEDpRT_:
   61|      2|  void Visit(const OneofDescriptor& descriptor, Proto&... proto) {
   62|      2|    visitor(descriptor, proto...);
   63|      2|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IRKNS0_15OneofDescriptorEEEOT_:
  157|      2|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IRKNS0_20OneofDescriptorProtoEEEOT_:
  157|      2|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE10oneof_declERKNS0_15DescriptorProtoEi:
  127|      2|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE5fieldERKNS0_15DescriptorProtoEi:
  127|    234|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE11nested_typeERKNS0_15DescriptorProtoEi:
  127|     10|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE5VisitIJKNS0_30DescriptorProto_ExtensionRangeEEEEvRKNS0_10Descriptor14ExtensionRangeEDpRT_:
   56|     14|  void Visit(const Descriptor::ExtensionRange& descriptor, Proto&... proto) {
   57|     14|    visitor(descriptor, proto...);
   58|     14|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IRKNS0_10Descriptor14ExtensionRangeEEEOT_:
  157|     14|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IRKNS0_30DescriptorProto_ExtensionRangeEEEOT_:
  157|     14|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE15extension_rangeERKNS0_15DescriptorProtoEi:
  127|     14|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE12message_typeES7_i:
  127|     37|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE5VisitIJKNS0_19EnumDescriptorProtoEEEEvRKNS0_14EnumDescriptorEDpRT_:
   48|     24|  void Visit(const EnumDescriptor& descriptor, Proto&... proto) {
   49|     24|    visitor(descriptor, proto...);
   50|    214|    for (int i = 0; i < descriptor.value_count(); i++) {
  ------------------
  |  Branch (50:21): [True: 190, False: 24]
  ------------------
   51|    190|      Visit(*descriptor.value(i), value(proto, i)...);
   52|    190|    }
   53|     24|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IRKNS0_14EnumDescriptorEEEOT_:
  157|     24|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IRKNS0_19EnumDescriptorProtoEEEOT_:
  157|     24|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE5VisitIJKNS0_24EnumValueDescriptorProtoEEEEvRKNS0_19EnumValueDescriptorEDpRT_:
   43|    190|  void Visit(const EnumValueDescriptor& descriptor, Proto&... proto) {
   44|    190|    visitor(descriptor, proto...);
   45|    190|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IRKNS0_19EnumValueDescriptorEEEOT_:
  157|    190|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IRKNS0_24EnumValueDescriptorProtoEEEOT_:
  157|    190|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE5valueERKNS0_19EnumDescriptorProtoEi:
  127|    190|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE9enum_typeES7_i:
  127|      7|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE5VisitIJKNS0_20FieldDescriptorProtoEEEEvRKNS0_15FieldDescriptorEDpRT_:
   38|    235|  void Visit(const FieldDescriptor& descriptor, Proto&... proto) {
   39|    235|    visitor(descriptor, proto...);
   40|    235|  }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE9extensionES7_i:
  127|      1|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }

_ZN6google8protobuf21DynamicMessageFactoryC2Ev:
  644|      6|    : pool_(nullptr), delegate_to_generated_factory_(false) {}
_ZN6google8protobuf21DynamicMessageFactoryD2Ev:
  649|      4|DynamicMessageFactory::~DynamicMessageFactory() {
  650|      4|  for (auto iter = prototypes_.begin(); iter != prototypes_.end(); ++iter) {
  ------------------
  |  Branch (650:41): [True: 0, False: 4]
  ------------------
  651|      0|    delete iter->second;
  652|      0|  }
  653|      4|}

_ZN6google8protobuf21DynamicMessageFactory29SetDelegateToGeneratedFactoryEb:
   94|      2|  void SetDelegateToGeneratedFactory(bool enable) {
   95|      2|    delegate_to_generated_factory_ = enable;
   96|      2|  }

_ZN6google8protobuf8internal13little_endian6ToHostEt:
   93|  17.6k|inline uint16_t ToHost(uint16_t value) {
   94|       |#if defined(ABSL_IS_BIG_ENDIAN)
   95|       |  return BSwap16(value);
   96|       |#else
   97|  17.6k|  return value;
   98|  17.6k|#endif
   99|  17.6k|}

_ZN6google8protobuf8internal21ExplicitlyConstructedINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEELm8EE16DefaultConstructEv:
   40|      2|  void DefaultConstruct() { new (&union_) T(); }
_ZN6google8protobuf8internal21ExplicitlyConstructedINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEELm8EE11get_mutableEv:
   50|      2|  T* get_mutable() { return reinterpret_cast<T*>(&union_); }

_ZN6google8protobuf8internal24GeneratedExtensionFinder4FindEiPNS1_13ExtensionInfoE:
  118|      8|bool GeneratedExtensionFinder::Find(int number, ExtensionInfo* output) {
  119|      8|  const ExtensionInfo* extension = FindRegisteredExtension(extendee_, number);
  120|      8|  if (extension == nullptr) {
  ------------------
  |  Branch (120:7): [True: 0, False: 8]
  ------------------
  121|      0|    return false;
  122|      8|  } else {
  123|      8|    *output = *extension;
  124|      8|    return true;
  125|      8|  }
  126|      8|}
_ZN6google8protobuf8internal12ExtensionSet24RegisterMessageExtensionEPKNS0_11MessageLiteEihbbS5_PFPKcS7_PNS1_12ParseContextEENS1_14LazyAnnotationE:
  168|      1|                                            LazyAnnotation is_lazy) {
  169|      1|  ABSL_CHECK(type == WireFormatLite::TYPE_MESSAGE ||
  ------------------
  |  |   41|      1|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      2|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      1|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      2|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      2|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      1|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      3|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      2|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      2|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  170|      1|             type == WireFormatLite::TYPE_GROUP);
  171|      1|  ExtensionInfo info(extendee, number, type, is_repeated, is_packed,
  172|      1|                     verify_func, is_lazy);
  173|      1|  info.message_info = {prototype,
  174|      1|#if defined(PROTOBUF_CONSTINIT_DEFAULT_INSTANCES)
  175|      1|                       prototype->GetTcParseTable()
  176|       |#else
  177|       |                       nullptr
  178|       |#endif
  179|      1|  };
  180|      1|  Register(info);
  181|      1|}
_ZN6google8protobuf8internal12ExtensionSetD2Ev:
  186|  1.05k|ExtensionSet::~ExtensionSet() {
  187|       |  // Deletes all allocated extensions.
  188|  1.05k|  if (arena_ == nullptr) {
  ------------------
  |  Branch (188:7): [True: 1.05k, False: 0]
  ------------------
  189|  1.05k|    ForEach([](int /* number */, Extension& ext) { ext.Free(); },
  190|  1.05k|            PrefetchNta{});
  191|  1.05k|    if (PROTOBUF_PREDICT_FALSE(is_large())) {
  ------------------
  |  |  365|  1.05k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1.05k]
  |  |  |  Branch (365:54): [Folded, False: 1.05k]
  |  |  |  Branch (365:63): [True: 0, False: 1.05k]
  |  |  ------------------
  ------------------
  192|      0|      delete map_.large;
  193|  1.05k|    } else {
  194|  1.05k|      DeleteFlatMap(map_.flat, flat_capacity_);
  195|  1.05k|    }
  196|  1.05k|  }
  197|  1.05k|}
_ZN6google8protobuf8internal12ExtensionSet13DeleteFlatMapEPKNS2_8KeyValueEt:
  200|  1.05k|                                 uint16_t flat_capacity) {
  201|       |  // Arena::CreateArray already requires a trivially destructible type, but
  202|       |  // ensure this constraint is not violated in the future.
  203|  1.05k|  static_assert(std::is_trivially_destructible<KeyValue>::value,
  204|  1.05k|                "CreateArray requires a trivially destructible type");
  205|       |  // A const-cast is needed, but this is safe as we are about to deallocate the
  206|       |  // array.
  207|  1.05k|  internal::SizedArrayDelete(const_cast<KeyValue*>(flat),
  208|  1.05k|                             sizeof(*flat) * flat_capacity);
  209|  1.05k|}
_ZNK6google8protobuf8internal12ExtensionSet10GetMessageEiRKNS0_11MessageLiteE:
  633|    235|    int number, const MessageLite& default_value) const {
  634|    235|  const Extension* extension = FindOrNull(number);
  635|    235|  if (extension == nullptr) {
  ------------------
  |  Branch (635:7): [True: 0, False: 235]
  ------------------
  636|       |    // Not present.  Return the default value.
  637|      0|    return default_value;
  638|    235|  } else {
  639|    235|    ABSL_DCHECK_TYPE(*extension, OPTIONAL_FIELD, MESSAGE);
  ------------------
  |  |  272|    235|  ABSL_DCHECK_EQ((EXTENSION).is_repeated ? REPEATED_FIELD : OPTIONAL_FIELD, \
  |  |  ------------------
  |  |  |  |   74|    235|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|    235|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    235|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 235]
  |  |  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (56:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|    235|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  273|    235|                 LABEL);                                                    \
  |  |  274|    235|  ABSL_DCHECK_EQ(cpp_type((EXTENSION).type), WireFormatLite::CPPTYPE_##CPPTYPE)
  |  |  ------------------
  |  |  |  |   74|    235|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|    235|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    235|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 235]
  |  |  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|    235|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  640|    235|    if (extension->is_lazy) {
  ------------------
  |  Branch (640:9): [True: 0, False: 235]
  ------------------
  641|      0|      return extension->ptr.lazymessage_value->GetMessage(default_value,
  642|      0|                                                          arena_);
  643|    235|    } else {
  644|    235|      return *extension->ptr.message_value;
  645|    235|    }
  646|    235|  }
  647|    235|}
_ZN6google8protobuf8internal12ExtensionSet14MutableMessageEihRKNS0_11MessageLiteEPKNS0_15FieldDescriptorE:
  656|    243|                                          const FieldDescriptor* descriptor) {
  657|    243|  Extension* extension;
  658|    243|  if (MaybeNewExtension(number, descriptor, &extension)) {
  ------------------
  |  Branch (658:7): [True: 243, False: 0]
  ------------------
  659|    243|    extension->type = type;
  660|    243|    ABSL_DCHECK_EQ(cpp_type(extension->type), WireFormatLite::CPPTYPE_MESSAGE);
  ------------------
  |  |   74|    243|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|    243|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    243|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 243]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    243|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  661|    243|    extension->is_repeated = false;
  662|    243|    extension->is_pointer = true;
  663|    243|    extension->is_lazy = false;
  664|    243|    extension->ptr.message_value = prototype.New(arena_);
  665|    243|    extension->is_cleared = false;
  666|    243|    return extension->ptr.message_value;
  667|    243|  } else {
  668|      0|    ABSL_DCHECK_TYPE(*extension, OPTIONAL_FIELD, MESSAGE);
  ------------------
  |  |  272|      0|  ABSL_DCHECK_EQ((EXTENSION).is_repeated ? REPEATED_FIELD : OPTIONAL_FIELD, \
  |  |  ------------------
  |  |  |  |   74|      0|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|      0|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (56:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  273|      0|                 LABEL);                                                    \
  |  |  274|      0|  ABSL_DCHECK_EQ(cpp_type((EXTENSION).type), WireFormatLite::CPPTYPE_##CPPTYPE)
  |  |  ------------------
  |  |  |  |   74|      0|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|      0|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  669|      0|    extension->is_cleared = false;
  670|      0|    if (extension->is_lazy) {
  ------------------
  |  Branch (670:9): [True: 0, False: 0]
  ------------------
  671|      0|      return extension->ptr.lazymessage_value->MutableMessage(prototype,
  672|      0|                                                              arena_);
  673|      0|    } else {
  674|      0|      return extension->ptr.message_value;
  675|      0|    }
  676|      0|  }
  677|    243|}
_ZN6google8protobuf8internal12ExtensionSet5ClearEv:
  959|     19|void ExtensionSet::Clear() {
  960|     19|  ForEach([](int /* number */, Extension& ext) { ext.Clear(); }, Prefetch{});
  961|     19|}
_ZN6google8protobuf8internal12ExtensionSet9MergeFromEPKNS0_11MessageLiteERKS2_:
  998|  1.27k|                             const ExtensionSet& other) {
  999|  1.27k|  Prefetch5LinesFrom1Line(&other);
 1000|  1.27k|  if (PROTOBUF_PREDICT_TRUE(!is_large())) {
  ------------------
  |  |  364|  1.27k|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 1.27k, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 1.27k]
  |  |  |  Branch (364:62): [True: 1.27k, False: 0]
  |  |  ------------------
  ------------------
 1001|  1.27k|    if (PROTOBUF_PREDICT_TRUE(!other.is_large())) {
  ------------------
  |  |  364|  1.27k|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 1.27k, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 1.27k]
  |  |  |  Branch (364:62): [True: 1.27k, False: 0]
  |  |  ------------------
  ------------------
 1002|  1.27k|      GrowCapacity(SizeOfUnion(flat_begin(), flat_end(), other.flat_begin(),
 1003|  1.27k|                               other.flat_end()));
 1004|  1.27k|    } else {
 1005|      0|      GrowCapacity(SizeOfUnion(flat_begin(), flat_end(),
 1006|      0|                               other.map_.large->begin(),
 1007|      0|                               other.map_.large->end()));
 1008|      0|    }
 1009|  1.27k|  }
 1010|  1.27k|  other.ForEach(
 1011|  1.27k|      [extendee, this, &other](int number, const Extension& ext) {
 1012|  1.27k|        this->InternalExtensionMergeFrom(extendee, number, ext, other.arena_);
 1013|  1.27k|      },
 1014|  1.27k|      Prefetch{});
 1015|  1.27k|}
_ZN6google8protobuf8internal12ExtensionSet26InternalExtensionMergeFromEPKNS0_11MessageLiteEiRKNS2_9ExtensionEPNS0_5ArenaE:
 1020|    749|                                              Arena* other_arena) {
 1021|    749|  if (other_extension.is_repeated) {
  ------------------
  |  Branch (1021:7): [True: 0, False: 749]
  ------------------
 1022|      0|    Extension* extension;
 1023|      0|    bool is_new =
 1024|      0|        MaybeNewExtension(number, other_extension.descriptor, &extension);
 1025|      0|    if (is_new) {
  ------------------
  |  Branch (1025:9): [True: 0, False: 0]
  ------------------
 1026|       |      // Extension did not already exist in set.
 1027|      0|      extension->type = other_extension.type;
 1028|      0|      extension->is_packed = other_extension.is_packed;
 1029|      0|      extension->is_repeated = true;
 1030|      0|      extension->is_pointer = true;
 1031|      0|    } else {
 1032|      0|      ABSL_DCHECK_EQ(extension->type, other_extension.type);
  ------------------
  |  |   74|      0|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|      0|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      0|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 0]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1033|      0|      ABSL_DCHECK_EQ(extension->is_packed, other_extension.is_packed);
  ------------------
  |  |   74|      0|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|      0|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      0|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 0]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1034|      0|      ABSL_DCHECK(extension->is_repeated);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1035|      0|    }
 1036|       |
 1037|      0|    switch (cpp_type(other_extension.type)) {
  ------------------
  |  Branch (1037:13): [True: 0, False: 0]
  ------------------
 1038|      0|#define HANDLE_TYPE(UPPERCASE, LOWERCASE, REPEATED_TYPE)    \
 1039|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:                 \
 1040|      0|    if (is_new) {                                           \
 1041|      0|      extension->ptr.repeated_##LOWERCASE##_value =         \
 1042|      0|          Arena::Create<REPEATED_TYPE>(arena_);             \
 1043|      0|    }                                                       \
 1044|      0|    extension->ptr.repeated_##LOWERCASE##_value->MergeFrom( \
 1045|      0|        *other_extension.ptr.repeated_##LOWERCASE##_value); \
 1046|      0|    break;
 1047|       |
 1048|      0|      HANDLE_TYPE(INT32, int32_t, RepeatedField<int32_t>);
  ------------------
  |  | 1039|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1039:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1040|      0|    if (is_new) {                                           \
  |  |  ------------------
  |  |  |  Branch (1040:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1041|      0|      extension->ptr.repeated_##LOWERCASE##_value =         \
  |  | 1042|      0|          Arena::Create<REPEATED_TYPE>(arena_);             \
  |  | 1043|      0|    }                                                       \
  |  | 1044|      0|    extension->ptr.repeated_##LOWERCASE##_value->MergeFrom( \
  |  | 1045|      0|        *other_extension.ptr.repeated_##LOWERCASE##_value); \
  |  | 1046|      0|    break;
  ------------------
 1049|      0|      HANDLE_TYPE(INT64, int64_t, RepeatedField<int64_t>);
  ------------------
  |  | 1039|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1039:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1040|      0|    if (is_new) {                                           \
  |  |  ------------------
  |  |  |  Branch (1040:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1041|      0|      extension->ptr.repeated_##LOWERCASE##_value =         \
  |  | 1042|      0|          Arena::Create<REPEATED_TYPE>(arena_);             \
  |  | 1043|      0|    }                                                       \
  |  | 1044|      0|    extension->ptr.repeated_##LOWERCASE##_value->MergeFrom( \
  |  | 1045|      0|        *other_extension.ptr.repeated_##LOWERCASE##_value); \
  |  | 1046|      0|    break;
  ------------------
 1050|      0|      HANDLE_TYPE(UINT32, uint32_t, RepeatedField<uint32_t>);
  ------------------
  |  | 1039|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1039:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1040|      0|    if (is_new) {                                           \
  |  |  ------------------
  |  |  |  Branch (1040:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1041|      0|      extension->ptr.repeated_##LOWERCASE##_value =         \
  |  | 1042|      0|          Arena::Create<REPEATED_TYPE>(arena_);             \
  |  | 1043|      0|    }                                                       \
  |  | 1044|      0|    extension->ptr.repeated_##LOWERCASE##_value->MergeFrom( \
  |  | 1045|      0|        *other_extension.ptr.repeated_##LOWERCASE##_value); \
  |  | 1046|      0|    break;
  ------------------
 1051|      0|      HANDLE_TYPE(UINT64, uint64_t, RepeatedField<uint64_t>);
  ------------------
  |  | 1039|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1039:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1040|      0|    if (is_new) {                                           \
  |  |  ------------------
  |  |  |  Branch (1040:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1041|      0|      extension->ptr.repeated_##LOWERCASE##_value =         \
  |  | 1042|      0|          Arena::Create<REPEATED_TYPE>(arena_);             \
  |  | 1043|      0|    }                                                       \
  |  | 1044|      0|    extension->ptr.repeated_##LOWERCASE##_value->MergeFrom( \
  |  | 1045|      0|        *other_extension.ptr.repeated_##LOWERCASE##_value); \
  |  | 1046|      0|    break;
  ------------------
 1052|      0|      HANDLE_TYPE(FLOAT, float, RepeatedField<float>);
  ------------------
  |  | 1039|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1039:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1040|      0|    if (is_new) {                                           \
  |  |  ------------------
  |  |  |  Branch (1040:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1041|      0|      extension->ptr.repeated_##LOWERCASE##_value =         \
  |  | 1042|      0|          Arena::Create<REPEATED_TYPE>(arena_);             \
  |  | 1043|      0|    }                                                       \
  |  | 1044|      0|    extension->ptr.repeated_##LOWERCASE##_value->MergeFrom( \
  |  | 1045|      0|        *other_extension.ptr.repeated_##LOWERCASE##_value); \
  |  | 1046|      0|    break;
  ------------------
 1053|      0|      HANDLE_TYPE(DOUBLE, double, RepeatedField<double>);
  ------------------
  |  | 1039|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1039:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1040|      0|    if (is_new) {                                           \
  |  |  ------------------
  |  |  |  Branch (1040:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1041|      0|      extension->ptr.repeated_##LOWERCASE##_value =         \
  |  | 1042|      0|          Arena::Create<REPEATED_TYPE>(arena_);             \
  |  | 1043|      0|    }                                                       \
  |  | 1044|      0|    extension->ptr.repeated_##LOWERCASE##_value->MergeFrom( \
  |  | 1045|      0|        *other_extension.ptr.repeated_##LOWERCASE##_value); \
  |  | 1046|      0|    break;
  ------------------
 1054|      0|      HANDLE_TYPE(BOOL, bool, RepeatedField<bool>);
  ------------------
  |  | 1039|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1039:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1040|      0|    if (is_new) {                                           \
  |  |  ------------------
  |  |  |  Branch (1040:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1041|      0|      extension->ptr.repeated_##LOWERCASE##_value =         \
  |  | 1042|      0|          Arena::Create<REPEATED_TYPE>(arena_);             \
  |  | 1043|      0|    }                                                       \
  |  | 1044|      0|    extension->ptr.repeated_##LOWERCASE##_value->MergeFrom( \
  |  | 1045|      0|        *other_extension.ptr.repeated_##LOWERCASE##_value); \
  |  | 1046|      0|    break;
  ------------------
 1055|      0|      HANDLE_TYPE(ENUM, enum, RepeatedField<int>);
  ------------------
  |  | 1039|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1039:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1040|      0|    if (is_new) {                                           \
  |  |  ------------------
  |  |  |  Branch (1040:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1041|      0|      extension->ptr.repeated_##LOWERCASE##_value =         \
  |  | 1042|      0|          Arena::Create<REPEATED_TYPE>(arena_);             \
  |  | 1043|      0|    }                                                       \
  |  | 1044|      0|    extension->ptr.repeated_##LOWERCASE##_value->MergeFrom( \
  |  | 1045|      0|        *other_extension.ptr.repeated_##LOWERCASE##_value); \
  |  | 1046|      0|    break;
  ------------------
 1056|      0|      HANDLE_TYPE(STRING, string, RepeatedPtrField<std::string>);
  ------------------
  |  | 1039|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1039:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1040|      0|    if (is_new) {                                           \
  |  |  ------------------
  |  |  |  Branch (1040:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1041|      0|      extension->ptr.repeated_##LOWERCASE##_value =         \
  |  | 1042|      0|          Arena::Create<REPEATED_TYPE>(arena_);             \
  |  | 1043|      0|    }                                                       \
  |  | 1044|      0|    extension->ptr.repeated_##LOWERCASE##_value->MergeFrom( \
  |  | 1045|      0|        *other_extension.ptr.repeated_##LOWERCASE##_value); \
  |  | 1046|      0|    break;
  ------------------
 1057|      0|      HANDLE_TYPE(MESSAGE, message, RepeatedPtrField<MessageLite>);
  ------------------
  |  | 1039|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1039:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1040|      0|    if (is_new) {                                           \
  |  |  ------------------
  |  |  |  Branch (1040:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1041|      0|      extension->ptr.repeated_##LOWERCASE##_value =         \
  |  | 1042|      0|          Arena::Create<REPEATED_TYPE>(arena_);             \
  |  | 1043|      0|    }                                                       \
  |  | 1044|      0|    extension->ptr.repeated_##LOWERCASE##_value->MergeFrom( \
  |  | 1045|      0|        *other_extension.ptr.repeated_##LOWERCASE##_value); \
  |  | 1046|      0|    break;
  ------------------
 1058|      0|#undef HANDLE_TYPE
 1059|      0|    }
 1060|    749|  } else {
 1061|    749|    if (!other_extension.is_cleared) {
  ------------------
  |  Branch (1061:9): [True: 749, False: 0]
  ------------------
 1062|    749|      switch (cpp_type(other_extension.type)) {
  ------------------
  |  Branch (1062:15): [True: 749, False: 0]
  ------------------
 1063|      0|#define HANDLE_TYPE(UPPERCASE, LOWERCASE, CAMELCASE)  \
 1064|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:           \
 1065|      0|    Set##CAMELCASE(number, other_extension.type,      \
 1066|      0|                   other_extension.LOWERCASE##_value, \
 1067|      0|                   other_extension.descriptor);       \
 1068|      0|    break;
 1069|       |
 1070|      0|        HANDLE_TYPE(INT32, int32_t, Int32);
  ------------------
  |  | 1064|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:           \
  |  |  ------------------
  |  |  |  Branch (1064:3): [True: 0, False: 749]
  |  |  ------------------
  |  | 1065|      0|    Set##CAMELCASE(number, other_extension.type,      \
  |  | 1066|      0|                   other_extension.LOWERCASE##_value, \
  |  | 1067|      0|                   other_extension.descriptor);       \
  |  | 1068|      0|    break;
  ------------------
 1071|      0|        HANDLE_TYPE(INT64, int64_t, Int64);
  ------------------
  |  | 1064|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:           \
  |  |  ------------------
  |  |  |  Branch (1064:3): [True: 0, False: 749]
  |  |  ------------------
  |  | 1065|      0|    Set##CAMELCASE(number, other_extension.type,      \
  |  | 1066|      0|                   other_extension.LOWERCASE##_value, \
  |  | 1067|      0|                   other_extension.descriptor);       \
  |  | 1068|      0|    break;
  ------------------
 1072|      0|        HANDLE_TYPE(UINT32, uint32_t, UInt32);
  ------------------
  |  | 1064|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:           \
  |  |  ------------------
  |  |  |  Branch (1064:3): [True: 0, False: 749]
  |  |  ------------------
  |  | 1065|      0|    Set##CAMELCASE(number, other_extension.type,      \
  |  | 1066|      0|                   other_extension.LOWERCASE##_value, \
  |  | 1067|      0|                   other_extension.descriptor);       \
  |  | 1068|      0|    break;
  ------------------
 1073|      0|        HANDLE_TYPE(UINT64, uint64_t, UInt64);
  ------------------
  |  | 1064|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:           \
  |  |  ------------------
  |  |  |  Branch (1064:3): [True: 0, False: 749]
  |  |  ------------------
  |  | 1065|      0|    Set##CAMELCASE(number, other_extension.type,      \
  |  | 1066|      0|                   other_extension.LOWERCASE##_value, \
  |  | 1067|      0|                   other_extension.descriptor);       \
  |  | 1068|      0|    break;
  ------------------
 1074|      0|        HANDLE_TYPE(FLOAT, float, Float);
  ------------------
  |  | 1064|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:           \
  |  |  ------------------
  |  |  |  Branch (1064:3): [True: 0, False: 749]
  |  |  ------------------
  |  | 1065|      0|    Set##CAMELCASE(number, other_extension.type,      \
  |  | 1066|      0|                   other_extension.LOWERCASE##_value, \
  |  | 1067|      0|                   other_extension.descriptor);       \
  |  | 1068|      0|    break;
  ------------------
 1075|      0|        HANDLE_TYPE(DOUBLE, double, Double);
  ------------------
  |  | 1064|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:           \
  |  |  ------------------
  |  |  |  Branch (1064:3): [True: 0, False: 749]
  |  |  ------------------
  |  | 1065|      0|    Set##CAMELCASE(number, other_extension.type,      \
  |  | 1066|      0|                   other_extension.LOWERCASE##_value, \
  |  | 1067|      0|                   other_extension.descriptor);       \
  |  | 1068|      0|    break;
  ------------------
 1076|      0|        HANDLE_TYPE(BOOL, bool, Bool);
  ------------------
  |  | 1064|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:           \
  |  |  ------------------
  |  |  |  Branch (1064:3): [True: 0, False: 749]
  |  |  ------------------
  |  | 1065|      0|    Set##CAMELCASE(number, other_extension.type,      \
  |  | 1066|      0|                   other_extension.LOWERCASE##_value, \
  |  | 1067|      0|                   other_extension.descriptor);       \
  |  | 1068|      0|    break;
  ------------------
 1077|      0|        HANDLE_TYPE(ENUM, enum, Enum);
  ------------------
  |  | 1064|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:           \
  |  |  ------------------
  |  |  |  Branch (1064:3): [True: 0, False: 749]
  |  |  ------------------
  |  | 1065|      0|    Set##CAMELCASE(number, other_extension.type,      \
  |  | 1066|      0|                   other_extension.LOWERCASE##_value, \
  |  | 1067|      0|                   other_extension.descriptor);       \
  |  | 1068|      0|    break;
  ------------------
 1078|      0|#undef HANDLE_TYPE
 1079|      0|        case WireFormatLite::CPPTYPE_STRING:
  ------------------
  |  Branch (1079:9): [True: 0, False: 749]
  ------------------
 1080|      0|          SetString(number, other_extension.type,
 1081|      0|                    *other_extension.ptr.string_value,
 1082|      0|                    other_extension.descriptor);
 1083|      0|          break;
 1084|    749|        case WireFormatLite::CPPTYPE_MESSAGE: {
  ------------------
  |  Branch (1084:9): [True: 749, False: 0]
  ------------------
 1085|    749|          Arena* const arena = arena_;
 1086|    749|          Extension* extension;
 1087|    749|          bool is_new =
 1088|    749|              MaybeNewExtension(number, other_extension.descriptor, &extension);
 1089|    749|          if (is_new) {
  ------------------
  |  Branch (1089:15): [True: 259, False: 490]
  ------------------
 1090|    259|            extension->type = other_extension.type;
 1091|    259|            extension->is_packed = other_extension.is_packed;
 1092|    259|            extension->is_repeated = false;
 1093|    259|            extension->is_pointer = true;
 1094|    259|            if (other_extension.is_lazy) {
  ------------------
  |  Branch (1094:17): [True: 0, False: 259]
  ------------------
 1095|      0|              extension->is_lazy = true;
 1096|      0|              extension->ptr.lazymessage_value =
 1097|      0|                  other_extension.ptr.lazymessage_value->New(arena);
 1098|      0|              extension->ptr.lazymessage_value->MergeFrom(
 1099|      0|                  GetPrototypeForLazyMessage(extendee, number),
 1100|      0|                  *other_extension.ptr.lazymessage_value, arena, other_arena);
 1101|    259|            } else {
 1102|    259|              extension->is_lazy = false;
 1103|    259|              extension->ptr.message_value =
 1104|    259|                  other_extension.ptr.message_value->New(arena);
 1105|    259|              extension->ptr.message_value->CheckTypeAndMergeFrom(
 1106|    259|                  *other_extension.ptr.message_value);
 1107|    259|            }
 1108|    490|          } else {
 1109|    490|            ABSL_DCHECK_EQ(extension->type, other_extension.type);
  ------------------
  |  |   74|    490|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|    490|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    490|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 490]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    490|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1110|    490|            ABSL_DCHECK_EQ(extension->is_packed, other_extension.is_packed);
  ------------------
  |  |   74|    490|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|    490|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    490|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 490]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    490|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1111|    490|            ABSL_DCHECK(!extension->is_repeated);
  ------------------
  |  |   47|    490|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    490|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    980|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    490|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    980|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    980|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 490, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    490|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 490]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    490|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 490, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|    980|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    980|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1112|    490|            if (other_extension.is_lazy) {
  ------------------
  |  Branch (1112:17): [True: 0, False: 490]
  ------------------
 1113|      0|              if (extension->is_lazy) {
  ------------------
  |  Branch (1113:19): [True: 0, False: 0]
  ------------------
 1114|      0|                extension->ptr.lazymessage_value->MergeFrom(
 1115|      0|                    GetPrototypeForLazyMessage(extendee, number),
 1116|      0|                    *other_extension.ptr.lazymessage_value, arena, other_arena);
 1117|      0|              } else {
 1118|      0|                extension->ptr.message_value->CheckTypeAndMergeFrom(
 1119|      0|                    other_extension.ptr.lazymessage_value->GetMessage(
 1120|      0|                        *extension->ptr.message_value, other_arena));
 1121|      0|              }
 1122|    490|            } else {
 1123|    490|              if (extension->is_lazy) {
  ------------------
  |  Branch (1123:19): [True: 0, False: 490]
  ------------------
 1124|      0|                extension->ptr.lazymessage_value
 1125|      0|                    ->MutableMessage(*other_extension.ptr.message_value, arena)
 1126|      0|                    ->CheckTypeAndMergeFrom(*other_extension.ptr.message_value);
 1127|    490|              } else {
 1128|    490|                extension->ptr.message_value->CheckTypeAndMergeFrom(
 1129|    490|                    *other_extension.ptr.message_value);
 1130|    490|              }
 1131|    490|            }
 1132|    490|          }
 1133|    749|          extension->is_cleared = false;
 1134|    749|          break;
 1135|    749|        }
 1136|    749|      }
 1137|    749|    }
 1138|    749|  }
 1139|    749|}
_ZN6google8protobuf8internal12ExtensionSet12InternalSwapEPS2_:
 1157|    259|void ExtensionSet::InternalSwap(ExtensionSet* other) {
 1158|    259|  using std::swap;
 1159|    259|  swap(arena_, other->arena_);
 1160|    259|  swap(flat_capacity_, other->flat_capacity_);
 1161|    259|  swap(flat_size_, other->flat_size_);
 1162|    259|  swap(map_, other->map_);
 1163|    259|}
_ZNK6google8protobuf8internal12ExtensionSet13IsInitializedEPKNS0_11MessageLiteE:
 1227|     85|bool ExtensionSet::IsInitialized(const MessageLite* extendee) const {
 1228|       |  // Extensions are never required.  However, we need to check that all
 1229|       |  // embedded messages are initialized.
 1230|     85|  Arena* const arena = arena_;
 1231|     85|  if (PROTOBUF_PREDICT_FALSE(is_large())) {
  ------------------
  |  |  365|     85|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 85]
  |  |  |  Branch (365:54): [Folded, False: 85]
  |  |  |  Branch (365:63): [True: 0, False: 85]
  |  |  ------------------
  ------------------
 1232|      0|    for (const auto& kv : *map_.large) {
  ------------------
  |  Branch (1232:25): [True: 0, False: 0]
  ------------------
 1233|      0|      if (!kv.second.IsInitialized(this, extendee, kv.first, arena)) {
  ------------------
  |  Branch (1233:11): [True: 0, False: 0]
  ------------------
 1234|      0|        return false;
 1235|      0|      }
 1236|      0|    }
 1237|      0|    return true;
 1238|      0|  }
 1239|     93|  for (const KeyValue* it = flat_begin(); it != flat_end(); ++it) {
  ------------------
  |  Branch (1239:43): [True: 8, False: 85]
  ------------------
 1240|      8|    if (!it->second.IsInitialized(this, extendee, it->first, arena)) {
  ------------------
  |  Branch (1240:9): [True: 0, False: 8]
  ------------------
 1241|      0|      return false;
 1242|      0|    }
 1243|      8|  }
 1244|     85|  return true;
 1245|     85|}
_ZNK6google8protobuf8internal12ExtensionSet22_InternalSerializeImplEPKNS0_11MessageLiteEiiPhPNS0_2io19EpsCopyOutputStreamE:
 1280|    239|    uint8_t* target, io::EpsCopyOutputStream* stream) const {
 1281|    239|  if (PROTOBUF_PREDICT_FALSE(is_large())) {
  ------------------
  |  |  365|    239|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 239]
  |  |  |  Branch (365:54): [Folded, False: 239]
  |  |  |  Branch (365:63): [True: 0, False: 239]
  |  |  ------------------
  ------------------
 1282|      0|    const auto& end = map_.large->end();
 1283|      0|    for (auto it = map_.large->lower_bound(start_field_number);
 1284|      0|         it != end && it->first < end_field_number; ++it) {
  ------------------
  |  Branch (1284:10): [True: 0, False: 0]
  |  Branch (1284:23): [True: 0, False: 0]
  ------------------
 1285|      0|      target = it->second.InternalSerializeFieldWithCachedSizesToArray(
 1286|      0|          extendee, this, it->first, target, stream);
 1287|      0|    }
 1288|      0|    return target;
 1289|      0|  }
 1290|    239|  const KeyValue* end = flat_end();
 1291|    239|  const KeyValue* it = flat_begin();
 1292|    239|  while (it != end && it->first < start_field_number) ++it;
  ------------------
  |  Branch (1292:10): [True: 239, False: 0]
  |  Branch (1292:23): [True: 0, False: 239]
  ------------------
 1293|    478|  for (; it != end && it->first < end_field_number; ++it) {
  ------------------
  |  Branch (1293:10): [True: 239, False: 239]
  |  Branch (1293:23): [True: 239, False: 0]
  ------------------
 1294|    239|    target = it->second.InternalSerializeFieldWithCachedSizesToArray(
 1295|    239|        extendee, this, it->first, target, stream);
 1296|    239|  }
 1297|    239|  return target;
 1298|    239|}
_ZNK6google8protobuf8internal12ExtensionSet8ByteSizeEv:
 1314|    774|size_t ExtensionSet::ByteSize() const {
 1315|    774|  size_t total_size = 0;
 1316|    774|  ForEach(
 1317|    774|      [&total_size](int number, const Extension& ext) {
 1318|    774|        total_size += ext.ByteSize(number);
 1319|    774|      },
 1320|    774|      Prefetch{});
 1321|    774|  return total_size;
 1322|    774|}
_ZN6google8protobuf8internal12ExtensionSet17MaybeNewExtensionEiPKNS0_15FieldDescriptorEPPNS2_9ExtensionE:
 1329|    992|                                     Extension** result) {
 1330|    992|  bool extension_is_new = false;
 1331|    992|  std::tie(*result, extension_is_new) = Insert(number);
 1332|    992|  (*result)->descriptor = descriptor;
 1333|    992|  return extension_is_new;
 1334|    992|}
_ZNK6google8protobuf8internal12ExtensionSet9Extension8ByteSizeEi:
 1384|    474|size_t ExtensionSet::Extension::ByteSize(int number) const {
 1385|    474|  size_t result = 0;
 1386|       |
 1387|    474|  if (is_repeated) {
  ------------------
  |  Branch (1387:7): [True: 0, False: 474]
  ------------------
 1388|      0|    if (is_packed) {
  ------------------
  |  Branch (1388:9): [True: 0, False: 0]
  ------------------
 1389|      0|      switch (real_type(type)) {
  ------------------
  |  Branch (1389:15): [True: 0, False: 0]
  ------------------
 1390|      0|#define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)                     \
 1391|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
 1392|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
 1393|      0|      result += WireFormatLite::CAMELCASE##Size(                         \
 1394|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                     \
 1395|      0|    }                                                                    \
 1396|      0|    break
 1397|       |
 1398|      0|        HANDLE_TYPE(INT32, Int32, int32_t);
  ------------------
  |  | 1391|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1391:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1392|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1392:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1393|      0|      result += WireFormatLite::CAMELCASE##Size(                         \
  |  | 1394|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                     \
  |  | 1395|      0|    }                                                                    \
  |  | 1396|      0|    break
  ------------------
 1399|      0|        HANDLE_TYPE(INT64, Int64, int64_t);
  ------------------
  |  | 1391|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1391:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1392|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1392:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1393|      0|      result += WireFormatLite::CAMELCASE##Size(                         \
  |  | 1394|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                     \
  |  | 1395|      0|    }                                                                    \
  |  | 1396|      0|    break
  ------------------
 1400|      0|        HANDLE_TYPE(UINT32, UInt32, uint32_t);
  ------------------
  |  | 1391|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1391:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1392|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1392:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1393|      0|      result += WireFormatLite::CAMELCASE##Size(                         \
  |  | 1394|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                     \
  |  | 1395|      0|    }                                                                    \
  |  | 1396|      0|    break
  ------------------
 1401|      0|        HANDLE_TYPE(UINT64, UInt64, uint64_t);
  ------------------
  |  | 1391|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1391:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1392|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1392:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1393|      0|      result += WireFormatLite::CAMELCASE##Size(                         \
  |  | 1394|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                     \
  |  | 1395|      0|    }                                                                    \
  |  | 1396|      0|    break
  ------------------
 1402|      0|        HANDLE_TYPE(SINT32, SInt32, int32_t);
  ------------------
  |  | 1391|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1391:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1392|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1392:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1393|      0|      result += WireFormatLite::CAMELCASE##Size(                         \
  |  | 1394|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                     \
  |  | 1395|      0|    }                                                                    \
  |  | 1396|      0|    break
  ------------------
 1403|      0|        HANDLE_TYPE(SINT64, SInt64, int64_t);
  ------------------
  |  | 1391|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1391:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1392|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1392:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1393|      0|      result += WireFormatLite::CAMELCASE##Size(                         \
  |  | 1394|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                     \
  |  | 1395|      0|    }                                                                    \
  |  | 1396|      0|    break
  ------------------
 1404|      0|        HANDLE_TYPE(ENUM, Enum, enum);
  ------------------
  |  | 1391|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1391:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1392|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1392:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1393|      0|      result += WireFormatLite::CAMELCASE##Size(                         \
  |  | 1394|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                     \
  |  | 1395|      0|    }                                                                    \
  |  | 1396|      0|    break
  ------------------
 1405|      0|#undef HANDLE_TYPE
 1406|       |
 1407|       |        // Stuff with fixed size.
 1408|      0|#define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)                 \
 1409|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
 1410|      0|    result += WireFormatLite::k##CAMELCASE##Size *                   \
 1411|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
 1412|      0|    break
 1413|      0|        HANDLE_TYPE(FIXED32, Fixed32, uint32_t);
  ------------------
  |  | 1409|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1409:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1410|      0|    result += WireFormatLite::k##CAMELCASE##Size *                   \
  |  | 1411|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1412|      0|    break
  ------------------
 1414|      0|        HANDLE_TYPE(FIXED64, Fixed64, uint64_t);
  ------------------
  |  | 1409|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1409:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1410|      0|    result += WireFormatLite::k##CAMELCASE##Size *                   \
  |  | 1411|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1412|      0|    break
  ------------------
 1415|      0|        HANDLE_TYPE(SFIXED32, SFixed32, int32_t);
  ------------------
  |  | 1409|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1409:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1410|      0|    result += WireFormatLite::k##CAMELCASE##Size *                   \
  |  | 1411|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1412|      0|    break
  ------------------
 1416|      0|        HANDLE_TYPE(SFIXED64, SFixed64, int64_t);
  ------------------
  |  | 1409|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1409:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1410|      0|    result += WireFormatLite::k##CAMELCASE##Size *                   \
  |  | 1411|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1412|      0|    break
  ------------------
 1417|      0|        HANDLE_TYPE(FLOAT, Float, float);
  ------------------
  |  | 1409|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1409:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1410|      0|    result += WireFormatLite::k##CAMELCASE##Size *                   \
  |  | 1411|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1412|      0|    break
  ------------------
 1418|      0|        HANDLE_TYPE(DOUBLE, Double, double);
  ------------------
  |  | 1409|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1409:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1410|      0|    result += WireFormatLite::k##CAMELCASE##Size *                   \
  |  | 1411|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1412|      0|    break
  ------------------
 1419|      0|        HANDLE_TYPE(BOOL, Bool, bool);
  ------------------
  |  | 1409|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1409:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1410|      0|    result += WireFormatLite::k##CAMELCASE##Size *                   \
  |  | 1411|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1412|      0|    break
  ------------------
 1420|      0|#undef HANDLE_TYPE
 1421|       |
 1422|      0|        case WireFormatLite::TYPE_STRING:
  ------------------
  |  Branch (1422:9): [True: 0, False: 0]
  ------------------
 1423|      0|        case WireFormatLite::TYPE_BYTES:
  ------------------
  |  Branch (1423:9): [True: 0, False: 0]
  ------------------
 1424|      0|        case WireFormatLite::TYPE_GROUP:
  ------------------
  |  Branch (1424:9): [True: 0, False: 0]
  ------------------
 1425|      0|        case WireFormatLite::TYPE_MESSAGE:
  ------------------
  |  Branch (1425:9): [True: 0, False: 0]
  ------------------
 1426|      0|          ABSL_LOG(FATAL) << "Non-primitive types can't be packed.";
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1427|      0|          break;
 1428|      0|      }
 1429|       |
 1430|      0|      cached_size.set(ToCachedSize(result));
 1431|      0|      if (result > 0) {
  ------------------
  |  Branch (1431:11): [True: 0, False: 0]
  ------------------
 1432|      0|        result += io::CodedOutputStream::VarintSize32(result);
 1433|      0|        result += io::CodedOutputStream::VarintSize32(WireFormatLite::MakeTag(
 1434|      0|            number, WireFormatLite::WIRETYPE_LENGTH_DELIMITED));
 1435|      0|      }
 1436|      0|    } else {
 1437|      0|      size_t tag_size = WireFormatLite::TagSize(number, real_type(type));
 1438|       |
 1439|      0|      switch (real_type(type)) {
  ------------------
  |  Branch (1439:15): [True: 0, False: 0]
  ------------------
 1440|      0|#define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)                      \
 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
 1442|      0|    result +=                                                             \
 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
 1447|      0|    }                                                                     \
 1448|      0|    break
 1449|       |
 1450|      0|        HANDLE_TYPE(INT32, Int32, int32_t);
  ------------------
  |  | 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
  |  |  ------------------
  |  |  |  Branch (1441:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1442|      0|    result +=                                                             \
  |  | 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
  |  |  ------------------
  |  |  |  Branch (1444:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
  |  | 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
  |  | 1447|      0|    }                                                                     \
  |  | 1448|      0|    break
  ------------------
 1451|      0|        HANDLE_TYPE(INT64, Int64, int64_t);
  ------------------
  |  | 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
  |  |  ------------------
  |  |  |  Branch (1441:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1442|      0|    result +=                                                             \
  |  | 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
  |  |  ------------------
  |  |  |  Branch (1444:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
  |  | 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
  |  | 1447|      0|    }                                                                     \
  |  | 1448|      0|    break
  ------------------
 1452|      0|        HANDLE_TYPE(UINT32, UInt32, uint32_t);
  ------------------
  |  | 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
  |  |  ------------------
  |  |  |  Branch (1441:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1442|      0|    result +=                                                             \
  |  | 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
  |  |  ------------------
  |  |  |  Branch (1444:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
  |  | 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
  |  | 1447|      0|    }                                                                     \
  |  | 1448|      0|    break
  ------------------
 1453|      0|        HANDLE_TYPE(UINT64, UInt64, uint64_t);
  ------------------
  |  | 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
  |  |  ------------------
  |  |  |  Branch (1441:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1442|      0|    result +=                                                             \
  |  | 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
  |  |  ------------------
  |  |  |  Branch (1444:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
  |  | 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
  |  | 1447|      0|    }                                                                     \
  |  | 1448|      0|    break
  ------------------
 1454|      0|        HANDLE_TYPE(SINT32, SInt32, int32_t);
  ------------------
  |  | 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
  |  |  ------------------
  |  |  |  Branch (1441:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1442|      0|    result +=                                                             \
  |  | 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
  |  |  ------------------
  |  |  |  Branch (1444:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
  |  | 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
  |  | 1447|      0|    }                                                                     \
  |  | 1448|      0|    break
  ------------------
 1455|      0|        HANDLE_TYPE(SINT64, SInt64, int64_t);
  ------------------
  |  | 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
  |  |  ------------------
  |  |  |  Branch (1441:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1442|      0|    result +=                                                             \
  |  | 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
  |  |  ------------------
  |  |  |  Branch (1444:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
  |  | 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
  |  | 1447|      0|    }                                                                     \
  |  | 1448|      0|    break
  ------------------
 1456|      0|        HANDLE_TYPE(STRING, String, string);
  ------------------
  |  | 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
  |  |  ------------------
  |  |  |  Branch (1441:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1442|      0|    result +=                                                             \
  |  | 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
  |  |  ------------------
  |  |  |  Branch (1444:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
  |  | 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
  |  | 1447|      0|    }                                                                     \
  |  | 1448|      0|    break
  ------------------
 1457|      0|        HANDLE_TYPE(BYTES, Bytes, string);
  ------------------
  |  | 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
  |  |  ------------------
  |  |  |  Branch (1441:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1442|      0|    result +=                                                             \
  |  | 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
  |  |  ------------------
  |  |  |  Branch (1444:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
  |  | 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
  |  | 1447|      0|    }                                                                     \
  |  | 1448|      0|    break
  ------------------
 1458|      0|        HANDLE_TYPE(ENUM, Enum, enum);
  ------------------
  |  | 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
  |  |  ------------------
  |  |  |  Branch (1441:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1442|      0|    result +=                                                             \
  |  | 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
  |  |  ------------------
  |  |  |  Branch (1444:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
  |  | 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
  |  | 1447|      0|    }                                                                     \
  |  | 1448|      0|    break
  ------------------
 1459|      0|        HANDLE_TYPE(GROUP, Group, message);
  ------------------
  |  | 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
  |  |  ------------------
  |  |  |  Branch (1441:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1442|      0|    result +=                                                             \
  |  | 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
  |  |  ------------------
  |  |  |  Branch (1444:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
  |  | 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
  |  | 1447|      0|    }                                                                     \
  |  | 1448|      0|    break
  ------------------
 1460|      0|        HANDLE_TYPE(MESSAGE, Message, message);
  ------------------
  |  | 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
  |  |  ------------------
  |  |  |  Branch (1441:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1442|      0|    result +=                                                             \
  |  | 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
  |  |  ------------------
  |  |  |  Branch (1444:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
  |  | 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
  |  | 1447|      0|    }                                                                     \
  |  | 1448|      0|    break
  ------------------
 1461|      0|#undef HANDLE_TYPE
 1462|       |
 1463|       |        // Stuff with fixed size.
 1464|      0|#define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)                 \
 1465|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
 1466|      0|    result += (tag_size + WireFormatLite::k##CAMELCASE##Size) *      \
 1467|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
 1468|      0|    break
 1469|      0|        HANDLE_TYPE(FIXED32, Fixed32, uint32_t);
  ------------------
  |  | 1465|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1465:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1466|      0|    result += (tag_size + WireFormatLite::k##CAMELCASE##Size) *      \
  |  | 1467|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1468|      0|    break
  ------------------
 1470|      0|        HANDLE_TYPE(FIXED64, Fixed64, uint64_t);
  ------------------
  |  | 1465|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1465:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1466|      0|    result += (tag_size + WireFormatLite::k##CAMELCASE##Size) *      \
  |  | 1467|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1468|      0|    break
  ------------------
 1471|      0|        HANDLE_TYPE(SFIXED32, SFixed32, int32_t);
  ------------------
  |  | 1465|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1465:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1466|      0|    result += (tag_size + WireFormatLite::k##CAMELCASE##Size) *      \
  |  | 1467|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1468|      0|    break
  ------------------
 1472|      0|        HANDLE_TYPE(SFIXED64, SFixed64, int64_t);
  ------------------
  |  | 1465|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1465:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1466|      0|    result += (tag_size + WireFormatLite::k##CAMELCASE##Size) *      \
  |  | 1467|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1468|      0|    break
  ------------------
 1473|      0|        HANDLE_TYPE(FLOAT, Float, float);
  ------------------
  |  | 1465|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1465:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1466|      0|    result += (tag_size + WireFormatLite::k##CAMELCASE##Size) *      \
  |  | 1467|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1468|      0|    break
  ------------------
 1474|      0|        HANDLE_TYPE(DOUBLE, Double, double);
  ------------------
  |  | 1465|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1465:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1466|      0|    result += (tag_size + WireFormatLite::k##CAMELCASE##Size) *      \
  |  | 1467|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1468|      0|    break
  ------------------
 1475|      0|        HANDLE_TYPE(BOOL, Bool, bool);
  ------------------
  |  | 1465|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1465:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1466|      0|    result += (tag_size + WireFormatLite::k##CAMELCASE##Size) *      \
  |  | 1467|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1468|      0|    break
  ------------------
 1476|      0|#undef HANDLE_TYPE
 1477|      0|      }
 1478|      0|    }
 1479|    474|  } else if (!is_cleared) {
  ------------------
  |  Branch (1479:14): [True: 474, False: 0]
  ------------------
 1480|    474|    result += WireFormatLite::TagSize(number, real_type(type));
 1481|    474|    switch (real_type(type)) {
  ------------------
  |  Branch (1481:13): [True: 474, False: 0]
  ------------------
 1482|      0|#define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)      \
 1483|      0|  case WireFormatLite::TYPE_##UPPERCASE:                  \
 1484|      0|    result += WireFormatLite::CAMELCASE##Size(LOWERCASE); \
 1485|      0|    break
 1486|       |
 1487|      0|      HANDLE_TYPE(INT32, Int32, int32_t_value);
  ------------------
  |  | 1483|      0|  case WireFormatLite::TYPE_##UPPERCASE:                  \
  |  |  ------------------
  |  |  |  Branch (1483:3): [True: 0, False: 474]
  |  |  ------------------
  |  | 1484|      0|    result += WireFormatLite::CAMELCASE##Size(LOWERCASE); \
  |  | 1485|      0|    break
  ------------------
 1488|      0|      HANDLE_TYPE(INT64, Int64, int64_t_value);
  ------------------
  |  | 1483|      0|  case WireFormatLite::TYPE_##UPPERCASE:                  \
  |  |  ------------------
  |  |  |  Branch (1483:3): [True: 0, False: 474]
  |  |  ------------------
  |  | 1484|      0|    result += WireFormatLite::CAMELCASE##Size(LOWERCASE); \
  |  | 1485|      0|    break
  ------------------
 1489|      0|      HANDLE_TYPE(UINT32, UInt32, uint32_t_value);
  ------------------
  |  | 1483|      0|  case WireFormatLite::TYPE_##UPPERCASE:                  \
  |  |  ------------------
  |  |  |  Branch (1483:3): [True: 0, False: 474]
  |  |  ------------------
  |  | 1484|      0|    result += WireFormatLite::CAMELCASE##Size(LOWERCASE); \
  |  | 1485|      0|    break
  ------------------
 1490|      0|      HANDLE_TYPE(UINT64, UInt64, uint64_t_value);
  ------------------
  |  | 1483|      0|  case WireFormatLite::TYPE_##UPPERCASE:                  \
  |  |  ------------------
  |  |  |  Branch (1483:3): [True: 0, False: 474]
  |  |  ------------------
  |  | 1484|      0|    result += WireFormatLite::CAMELCASE##Size(LOWERCASE); \
  |  | 1485|      0|    break
  ------------------
 1491|      0|      HANDLE_TYPE(SINT32, SInt32, int32_t_value);
  ------------------
  |  | 1483|      0|  case WireFormatLite::TYPE_##UPPERCASE:                  \
  |  |  ------------------
  |  |  |  Branch (1483:3): [True: 0, False: 474]
  |  |  ------------------
  |  | 1484|      0|    result += WireFormatLite::CAMELCASE##Size(LOWERCASE); \
  |  | 1485|      0|    break
  ------------------
 1492|      0|      HANDLE_TYPE(SINT64, SInt64, int64_t_value);
  ------------------
  |  | 1483|      0|  case WireFormatLite::TYPE_##UPPERCASE:                  \
  |  |  ------------------
  |  |  |  Branch (1483:3): [True: 0, False: 474]
  |  |  ------------------
  |  | 1484|      0|    result += WireFormatLite::CAMELCASE##Size(LOWERCASE); \
  |  | 1485|      0|    break
  ------------------
 1493|      0|      HANDLE_TYPE(STRING, String, *ptr.string_value);
  ------------------
  |  | 1483|      0|  case WireFormatLite::TYPE_##UPPERCASE:                  \
  |  |  ------------------
  |  |  |  Branch (1483:3): [True: 0, False: 474]
  |  |  ------------------
  |  | 1484|      0|    result += WireFormatLite::CAMELCASE##Size(LOWERCASE); \
  |  | 1485|      0|    break
  ------------------
 1494|      0|      HANDLE_TYPE(BYTES, Bytes, *ptr.string_value);
  ------------------
  |  | 1483|      0|  case WireFormatLite::TYPE_##UPPERCASE:                  \
  |  |  ------------------
  |  |  |  Branch (1483:3): [True: 0, False: 474]
  |  |  ------------------
  |  | 1484|      0|    result += WireFormatLite::CAMELCASE##Size(LOWERCASE); \
  |  | 1485|      0|    break
  ------------------
 1495|      0|      HANDLE_TYPE(ENUM, Enum, enum_value);
  ------------------
  |  | 1483|      0|  case WireFormatLite::TYPE_##UPPERCASE:                  \
  |  |  ------------------
  |  |  |  Branch (1483:3): [True: 0, False: 474]
  |  |  ------------------
  |  | 1484|      0|    result += WireFormatLite::CAMELCASE##Size(LOWERCASE); \
  |  | 1485|      0|    break
  ------------------
 1496|      0|      HANDLE_TYPE(GROUP, Group, *ptr.message_value);
  ------------------
  |  | 1483|      0|  case WireFormatLite::TYPE_##UPPERCASE:                  \
  |  |  ------------------
  |  |  |  Branch (1483:3): [True: 0, False: 474]
  |  |  ------------------
  |  | 1484|      0|    result += WireFormatLite::CAMELCASE##Size(LOWERCASE); \
  |  | 1485|      0|    break
  ------------------
 1497|      0|#undef HANDLE_TYPE
 1498|    474|      case WireFormatLite::TYPE_MESSAGE: {
  ------------------
  |  Branch (1498:7): [True: 474, False: 0]
  ------------------
 1499|    474|        result += WireFormatLite::LengthDelimitedSize(
 1500|    474|            is_lazy ? ptr.lazymessage_value->ByteSizeLong()
  ------------------
  |  Branch (1500:13): [True: 0, False: 474]
  ------------------
 1501|    474|                    : ptr.message_value->ByteSizeLong());
 1502|    474|        break;
 1503|      0|      }
 1504|       |
 1505|       |      // Stuff with fixed size.
 1506|      0|#define HANDLE_TYPE(UPPERCASE, CAMELCASE)         \
 1507|      0|  case WireFormatLite::TYPE_##UPPERCASE:          \
 1508|      0|    result += WireFormatLite::k##CAMELCASE##Size; \
 1509|      0|    break
 1510|      0|        HANDLE_TYPE(FIXED32, Fixed32);
  ------------------
  |  | 1507|      0|  case WireFormatLite::TYPE_##UPPERCASE:          \
  |  |  ------------------
  |  |  |  Branch (1507:3): [True: 0, False: 474]
  |  |  ------------------
  |  | 1508|      0|    result += WireFormatLite::k##CAMELCASE##Size; \
  |  | 1509|      0|    break
  ------------------
 1511|      0|        HANDLE_TYPE(FIXED64, Fixed64);
  ------------------
  |  | 1507|      0|  case WireFormatLite::TYPE_##UPPERCASE:          \
  |  |  ------------------
  |  |  |  Branch (1507:3): [True: 0, False: 474]
  |  |  ------------------
  |  | 1508|      0|    result += WireFormatLite::k##CAMELCASE##Size; \
  |  | 1509|      0|    break
  ------------------
 1512|      0|        HANDLE_TYPE(SFIXED32, SFixed32);
  ------------------
  |  | 1507|      0|  case WireFormatLite::TYPE_##UPPERCASE:          \
  |  |  ------------------
  |  |  |  Branch (1507:3): [True: 0, False: 474]
  |  |  ------------------
  |  | 1508|      0|    result += WireFormatLite::k##CAMELCASE##Size; \
  |  | 1509|      0|    break
  ------------------
 1513|      0|        HANDLE_TYPE(SFIXED64, SFixed64);
  ------------------
  |  | 1507|      0|  case WireFormatLite::TYPE_##UPPERCASE:          \
  |  |  ------------------
  |  |  |  Branch (1507:3): [True: 0, False: 474]
  |  |  ------------------
  |  | 1508|      0|    result += WireFormatLite::k##CAMELCASE##Size; \
  |  | 1509|      0|    break
  ------------------
 1514|      0|        HANDLE_TYPE(FLOAT, Float);
  ------------------
  |  | 1507|      0|  case WireFormatLite::TYPE_##UPPERCASE:          \
  |  |  ------------------
  |  |  |  Branch (1507:3): [True: 0, False: 474]
  |  |  ------------------
  |  | 1508|      0|    result += WireFormatLite::k##CAMELCASE##Size; \
  |  | 1509|      0|    break
  ------------------
 1515|      0|        HANDLE_TYPE(DOUBLE, Double);
  ------------------
  |  | 1507|      0|  case WireFormatLite::TYPE_##UPPERCASE:          \
  |  |  ------------------
  |  |  |  Branch (1507:3): [True: 0, False: 474]
  |  |  ------------------
  |  | 1508|      0|    result += WireFormatLite::k##CAMELCASE##Size; \
  |  | 1509|      0|    break
  ------------------
 1516|    474|        HANDLE_TYPE(BOOL, Bool);
  ------------------
  |  | 1507|      0|  case WireFormatLite::TYPE_##UPPERCASE:          \
  |  |  ------------------
  |  |  |  Branch (1507:3): [True: 0, False: 474]
  |  |  ------------------
  |  | 1508|      0|    result += WireFormatLite::k##CAMELCASE##Size; \
  |  | 1509|      0|    break
  ------------------
 1517|    474|#undef HANDLE_TYPE
 1518|    474|    }
 1519|    474|  }
 1520|       |
 1521|    474|  return result;
 1522|    474|}
_ZN6google8protobuf8internal12ExtensionSet9Extension4FreeEv:
 1550|    490|void ExtensionSet::Extension::Free() {
 1551|    490|  if (is_repeated) {
  ------------------
  |  Branch (1551:7): [True: 0, False: 490]
  ------------------
 1552|      0|    switch (cpp_type(type)) {
  ------------------
  |  Branch (1552:13): [True: 0, False: 0]
  ------------------
 1553|      0|#define HANDLE_TYPE(UPPERCASE, LOWERCASE)    \
 1554|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:  \
 1555|      0|    delete ptr.repeated_##LOWERCASE##_value; \
 1556|      0|    break
 1557|       |
 1558|      0|      HANDLE_TYPE(INT32, int32_t);
  ------------------
  |  | 1554|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:  \
  |  |  ------------------
  |  |  |  Branch (1554:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1555|      0|    delete ptr.repeated_##LOWERCASE##_value; \
  |  | 1556|      0|    break
  ------------------
 1559|      0|      HANDLE_TYPE(INT64, int64_t);
  ------------------
  |  | 1554|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:  \
  |  |  ------------------
  |  |  |  Branch (1554:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1555|      0|    delete ptr.repeated_##LOWERCASE##_value; \
  |  | 1556|      0|    break
  ------------------
 1560|      0|      HANDLE_TYPE(UINT32, uint32_t);
  ------------------
  |  | 1554|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:  \
  |  |  ------------------
  |  |  |  Branch (1554:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1555|      0|    delete ptr.repeated_##LOWERCASE##_value; \
  |  | 1556|      0|    break
  ------------------
 1561|      0|      HANDLE_TYPE(UINT64, uint64_t);
  ------------------
  |  | 1554|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:  \
  |  |  ------------------
  |  |  |  Branch (1554:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1555|      0|    delete ptr.repeated_##LOWERCASE##_value; \
  |  | 1556|      0|    break
  ------------------
 1562|      0|      HANDLE_TYPE(FLOAT, float);
  ------------------
  |  | 1554|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:  \
  |  |  ------------------
  |  |  |  Branch (1554:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1555|      0|    delete ptr.repeated_##LOWERCASE##_value; \
  |  | 1556|      0|    break
  ------------------
 1563|      0|      HANDLE_TYPE(DOUBLE, double);
  ------------------
  |  | 1554|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:  \
  |  |  ------------------
  |  |  |  Branch (1554:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1555|      0|    delete ptr.repeated_##LOWERCASE##_value; \
  |  | 1556|      0|    break
  ------------------
 1564|      0|      HANDLE_TYPE(BOOL, bool);
  ------------------
  |  | 1554|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:  \
  |  |  ------------------
  |  |  |  Branch (1554:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1555|      0|    delete ptr.repeated_##LOWERCASE##_value; \
  |  | 1556|      0|    break
  ------------------
 1565|      0|      HANDLE_TYPE(ENUM, enum);
  ------------------
  |  | 1554|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:  \
  |  |  ------------------
  |  |  |  Branch (1554:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1555|      0|    delete ptr.repeated_##LOWERCASE##_value; \
  |  | 1556|      0|    break
  ------------------
 1566|      0|      HANDLE_TYPE(STRING, string);
  ------------------
  |  | 1554|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:  \
  |  |  ------------------
  |  |  |  Branch (1554:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1555|      0|    delete ptr.repeated_##LOWERCASE##_value; \
  |  | 1556|      0|    break
  ------------------
 1567|      0|      HANDLE_TYPE(MESSAGE, message);
  ------------------
  |  | 1554|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:  \
  |  |  ------------------
  |  |  |  Branch (1554:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1555|      0|    delete ptr.repeated_##LOWERCASE##_value; \
  |  | 1556|      0|    break
  ------------------
 1568|      0|#undef HANDLE_TYPE
 1569|      0|    }
 1570|    490|  } else {
 1571|    490|    switch (cpp_type(type)) {
 1572|      0|      case WireFormatLite::CPPTYPE_STRING:
  ------------------
  |  Branch (1572:7): [True: 0, False: 490]
  ------------------
 1573|      0|        delete ptr.string_value;
 1574|      0|        break;
 1575|    490|      case WireFormatLite::CPPTYPE_MESSAGE:
  ------------------
  |  Branch (1575:7): [True: 490, False: 0]
  ------------------
 1576|    490|        if (is_lazy) {
  ------------------
  |  Branch (1576:13): [True: 0, False: 490]
  ------------------
 1577|      0|          delete ptr.lazymessage_value;
 1578|    490|        } else {
 1579|    490|          delete ptr.message_value;
 1580|    490|        }
 1581|    490|        break;
 1582|      0|      default:
  ------------------
  |  Branch (1582:7): [True: 0, False: 490]
  ------------------
 1583|      0|        break;
 1584|    490|    }
 1585|    490|  }
 1586|    490|}
_ZNK6google8protobuf8internal12ExtensionSet9Extension13IsInitializedEPKS2_PKNS0_11MessageLiteEiPNS0_5ArenaE:
 1593|      8|                                            int number, Arena* arena) const {
 1594|      8|  if (cpp_type(type) != WireFormatLite::CPPTYPE_MESSAGE) return true;
  ------------------
  |  Branch (1594:7): [True: 0, False: 8]
  ------------------
 1595|       |
 1596|      8|  if (is_repeated) {
  ------------------
  |  Branch (1596:7): [True: 0, False: 8]
  ------------------
 1597|      0|    for (int i = 0; i < ptr.repeated_message_value->size(); i++) {
  ------------------
  |  Branch (1597:21): [True: 0, False: 0]
  ------------------
 1598|      0|      if (!ptr.repeated_message_value->Get(i).IsInitialized()) {
  ------------------
  |  Branch (1598:11): [True: 0, False: 0]
  ------------------
 1599|      0|        return false;
 1600|      0|      }
 1601|      0|    }
 1602|      0|    return true;
 1603|      0|  }
 1604|       |
 1605|      8|  if (is_cleared) return true;
  ------------------
  |  Branch (1605:7): [True: 0, False: 8]
  ------------------
 1606|       |
 1607|      8|  if (!is_lazy) return ptr.message_value->IsInitialized();
  ------------------
  |  Branch (1607:7): [True: 8, False: 0]
  ------------------
 1608|       |
 1609|      0|  const MessageLite* prototype =
 1610|      0|      ext_set->GetPrototypeForLazyMessage(extendee, number);
 1611|      0|  ABSL_DCHECK_NE(prototype, nullptr)
  ------------------
  |  |   76|      0|  ABSL_LOG_INTERNAL_DCHECK_NE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   88|      0|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      0|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 0]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1612|      0|      << "extendee: " << extendee->GetTypeName() << "; number: " << number;
 1613|      0|  return ptr.lazymessage_value->IsInitialized(prototype, arena);
 1614|      8|}
_ZNK6google8protobuf8internal12ExtensionSet10FindOrNullEi:
 1619|    235|const ExtensionSet::Extension* ExtensionSet::FindOrNull(int key) const {
 1620|    235|  if (flat_size_ == 0) {
  ------------------
  |  Branch (1620:7): [True: 0, False: 235]
  ------------------
 1621|      0|    return nullptr;
 1622|    235|  } else if (PROTOBUF_PREDICT_TRUE(!is_large())) {
  ------------------
  |  |  364|    235|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 235, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 235]
  |  |  |  Branch (364:62): [True: 235, False: 0]
  |  |  ------------------
  ------------------
 1623|    235|    for (auto it = flat_begin(), end = flat_end();
 1624|    235|         it != end && it->first <= key; ++it) {
  ------------------
  |  Branch (1624:10): [True: 235, False: 0]
  |  Branch (1624:23): [True: 235, False: 0]
  ------------------
 1625|    235|      if (it->first == key) return &it->second;
  ------------------
  |  Branch (1625:11): [True: 235, False: 0]
  ------------------
 1626|    235|    }
 1627|      0|    return nullptr;
 1628|    235|  } else {
 1629|      0|    return FindOrNullInLargeMap(key);
 1630|      0|  }
 1631|    235|}
_ZN6google8protobuf8internal12ExtensionSet6InsertEi:
 1654|  1.23k|std::pair<ExtensionSet::Extension*, bool> ExtensionSet::Insert(int key) {
 1655|  1.23k|  if (PROTOBUF_PREDICT_FALSE(is_large())) {
  ------------------
  |  |  365|  1.23k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1.23k]
  |  |  |  Branch (365:54): [Folded, False: 1.23k]
  |  |  |  Branch (365:63): [True: 0, False: 1.23k]
  |  |  ------------------
  ------------------
 1656|      0|    auto maybe = map_.large->insert({key, Extension()});
 1657|      0|    return {&maybe.first->second, maybe.second};
 1658|      0|  }
 1659|  1.23k|  KeyValue* end = flat_end();
 1660|  1.23k|  KeyValue* it = flat_begin();
 1661|  1.23k|  for (; it != end && it->first <= key; ++it) {
  ------------------
  |  Branch (1661:10): [True: 490, False: 745]
  |  Branch (1661:23): [True: 490, False: 0]
  ------------------
 1662|    490|    if (it->first == key) return {&it->second, false};
  ------------------
  |  Branch (1662:9): [True: 490, False: 0]
  ------------------
 1663|    490|  }
 1664|    745|  if (flat_size_ < flat_capacity_) {
  ------------------
  |  Branch (1664:7): [True: 502, False: 243]
  ------------------
 1665|    502|    std::copy_backward(it, end, end + 1);
 1666|    502|    ++flat_size_;
 1667|    502|    it->first = key;
 1668|    502|    it->second = Extension();
 1669|    502|    return {&it->second, true};
 1670|    502|  }
 1671|    243|  GrowCapacity(flat_size_ + 1);
 1672|    243|  return Insert(key);
 1673|    745|}
_ZN6google8protobuf8internal12ExtensionSet12GrowCapacityEm:
 1679|  1.51k|void ExtensionSet::GrowCapacity(size_t minimum_new_capacity) {
 1680|  1.51k|  if (PROTOBUF_PREDICT_FALSE(is_large())) {
  ------------------
  |  |  365|  1.51k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1.51k]
  |  |  |  Branch (365:54): [Folded, False: 1.51k]
  |  |  |  Branch (365:63): [True: 0, False: 1.51k]
  |  |  ------------------
  ------------------
 1681|      0|    return;  // LargeMap does not have a "reserve" method.
 1682|      0|  }
 1683|  1.51k|  if (flat_capacity_ >= minimum_new_capacity) {
  ------------------
  |  Branch (1683:7): [True: 1.01k, False: 502]
  ------------------
 1684|  1.01k|    return;
 1685|  1.01k|  }
 1686|       |
 1687|    502|  auto new_flat_capacity = flat_capacity_;
 1688|    502|  do {
 1689|    502|    new_flat_capacity = new_flat_capacity == 0 ? 1 : new_flat_capacity * 4;
  ------------------
  |  Branch (1689:25): [True: 502, False: 0]
  ------------------
 1690|    502|  } while (new_flat_capacity < minimum_new_capacity);
  ------------------
  |  Branch (1690:12): [True: 0, False: 502]
  ------------------
 1691|       |
 1692|    502|  KeyValue* begin = flat_begin();
 1693|    502|  KeyValue* end = flat_end();
 1694|    502|  AllocatedData new_map;
 1695|    502|  Arena* const arena = arena_;
 1696|    502|  if (new_flat_capacity > kMaximumFlatCapacity) {
  ------------------
  |  Branch (1696:7): [True: 0, False: 502]
  ------------------
 1697|      0|    new_map.large = Arena::Create<LargeMap>(arena);
 1698|      0|    LargeMap::iterator hint = new_map.large->begin();
 1699|      0|    for (const KeyValue* it = begin; it != end; ++it) {
  ------------------
  |  Branch (1699:38): [True: 0, False: 0]
  ------------------
 1700|      0|      hint = new_map.large->insert(hint, {it->first, it->second});
 1701|      0|    }
 1702|      0|    flat_size_ = static_cast<uint16_t>(-1);
 1703|      0|    ABSL_DCHECK(is_large());
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1704|    502|  } else {
 1705|    502|    new_map.flat = Arena::CreateArray<KeyValue>(arena, new_flat_capacity);
 1706|    502|    std::copy(begin, end, new_map.flat);
 1707|    502|  }
 1708|       |
 1709|       |  // ReturnArrayMemory is more efficient with power-of-2 bytes, and
 1710|       |  // sizeof(KeyValue) is a power-of-2 on 64-bit platforms. flat_capacity_ is
 1711|       |  // always a power-of-2.
 1712|  1.00k|  ABSL_DCHECK(IsPowerOfTwo(sizeof(KeyValue)) || sizeof(void*) != 8)
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    502|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    502|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  1.00k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  1.00k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 502, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    502|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 502]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    502|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 502, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    502|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|    502|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1713|  1.00k|      << sizeof(KeyValue) << " " << sizeof(void*);
 1714|    502|  ABSL_DCHECK(IsPowerOfTwo(flat_capacity_));
  ------------------
  |  |   47|    502|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    502|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  1.50k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    502|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  1.00k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  1.00k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 502, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    502|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 502]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    502|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 502, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  1.50k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  1.50k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1715|    502|  if (flat_capacity_ > 0) {
  ------------------
  |  Branch (1715:7): [True: 0, False: 502]
  ------------------
 1716|      0|    if (arena == nullptr) {
  ------------------
  |  Branch (1716:9): [True: 0, False: 0]
  ------------------
 1717|      0|      DeleteFlatMap(begin, flat_capacity_);
 1718|      0|    } else {
 1719|      0|      arena->ReturnArrayMemory(begin, sizeof(KeyValue) * flat_capacity_);
 1720|      0|    }
 1721|      0|  }
 1722|    502|  flat_capacity_ = new_flat_capacity;
 1723|    502|  map_ = new_map;
 1724|    502|}
_ZNK6google8protobuf8internal12ExtensionSet9Extension44InternalSerializeFieldWithCachedSizesToArrayEPKNS0_11MessageLiteEPKS2_iPhPNS0_2io19EpsCopyOutputStreamE:
 1764|    239|    uint8_t* target, io::EpsCopyOutputStream* stream) const {
 1765|    239|  if (is_repeated) {
  ------------------
  |  Branch (1765:7): [True: 0, False: 239]
  ------------------
 1766|      0|    if (is_packed) {
  ------------------
  |  Branch (1766:9): [True: 0, False: 0]
  ------------------
 1767|      0|      if (cached_size() == 0) return target;
  ------------------
  |  Branch (1767:11): [True: 0, False: 0]
  ------------------
 1768|       |
 1769|      0|      target = stream->EnsureSpace(target);
 1770|      0|      target = WireFormatLite::WriteTagToArray(
 1771|      0|          number, WireFormatLite::WIRETYPE_LENGTH_DELIMITED, target);
 1772|      0|      target = WireFormatLite::WriteInt32NoTagToArray(cached_size(), target);
 1773|       |
 1774|      0|      switch (real_type(type)) {
  ------------------
  |  Branch (1774:15): [True: 0, False: 0]
  ------------------
 1775|      0|#define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)                     \
 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
 1778|      0|      target = stream->EnsureSpace(target);                              \
 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
 1781|      0|    }                                                                    \
 1782|      0|    break
 1783|       |
 1784|      0|        HANDLE_TYPE(INT32, Int32, int32_t);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1785|      0|        HANDLE_TYPE(INT64, Int64, int64_t);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1786|      0|        HANDLE_TYPE(UINT32, UInt32, uint32_t);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1787|      0|        HANDLE_TYPE(UINT64, UInt64, uint64_t);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1788|      0|        HANDLE_TYPE(SINT32, SInt32, int32_t);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1789|      0|        HANDLE_TYPE(SINT64, SInt64, int64_t);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1790|      0|        HANDLE_TYPE(FIXED32, Fixed32, uint32_t);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1791|      0|        HANDLE_TYPE(FIXED64, Fixed64, uint64_t);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1792|      0|        HANDLE_TYPE(SFIXED32, SFixed32, int32_t);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1793|      0|        HANDLE_TYPE(SFIXED64, SFixed64, int64_t);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1794|      0|        HANDLE_TYPE(FLOAT, Float, float);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1795|      0|        HANDLE_TYPE(DOUBLE, Double, double);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1796|      0|        HANDLE_TYPE(BOOL, Bool, bool);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1797|      0|        HANDLE_TYPE(ENUM, Enum, enum);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1798|      0|#undef HANDLE_TYPE
 1799|       |
 1800|      0|        case WireFormatLite::TYPE_STRING:
  ------------------
  |  Branch (1800:9): [True: 0, False: 0]
  ------------------
 1801|      0|        case WireFormatLite::TYPE_BYTES:
  ------------------
  |  Branch (1801:9): [True: 0, False: 0]
  ------------------
 1802|      0|        case WireFormatLite::TYPE_GROUP:
  ------------------
  |  Branch (1802:9): [True: 0, False: 0]
  ------------------
 1803|      0|        case WireFormatLite::TYPE_MESSAGE:
  ------------------
  |  Branch (1803:9): [True: 0, False: 0]
  ------------------
 1804|      0|          ABSL_LOG(FATAL) << "Non-primitive types can't be packed.";
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1805|      0|          break;
 1806|      0|      }
 1807|      0|    } else {
 1808|      0|      switch (real_type(type)) {
  ------------------
  |  Branch (1808:15): [True: 0, False: 0]
  ------------------
 1809|      0|#define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)                     \
 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
 1812|      0|      target = stream->EnsureSpace(target);                              \
 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
 1815|      0|    }                                                                    \
 1816|      0|    break
 1817|       |
 1818|      0|        HANDLE_TYPE(INT32, Int32, int32_t);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1819|      0|        HANDLE_TYPE(INT64, Int64, int64_t);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1820|      0|        HANDLE_TYPE(UINT32, UInt32, uint32_t);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1821|      0|        HANDLE_TYPE(UINT64, UInt64, uint64_t);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1822|      0|        HANDLE_TYPE(SINT32, SInt32, int32_t);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1823|      0|        HANDLE_TYPE(SINT64, SInt64, int64_t);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1824|      0|        HANDLE_TYPE(FIXED32, Fixed32, uint32_t);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1825|      0|        HANDLE_TYPE(FIXED64, Fixed64, uint64_t);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1826|      0|        HANDLE_TYPE(SFIXED32, SFixed32, int32_t);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1827|      0|        HANDLE_TYPE(SFIXED64, SFixed64, int64_t);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1828|      0|        HANDLE_TYPE(FLOAT, Float, float);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1829|      0|        HANDLE_TYPE(DOUBLE, Double, double);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1830|      0|        HANDLE_TYPE(BOOL, Bool, bool);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1831|      0|        HANDLE_TYPE(ENUM, Enum, enum);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1832|      0|#undef HANDLE_TYPE
 1833|      0|#define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)                     \
 1834|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
 1835|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
 1836|      0|      target = stream->EnsureSpace(target);                              \
 1837|      0|      target = stream->WriteString(                                      \
 1838|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
 1839|      0|    }                                                                    \
 1840|      0|    break
 1841|      0|        HANDLE_TYPE(STRING, String, string);
  ------------------
  |  | 1834|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1834:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1835|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1835:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1836|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1837|      0|      target = stream->WriteString(                                      \
  |  | 1838|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1839|      0|    }                                                                    \
  |  | 1840|      0|    break
  ------------------
 1842|      0|        HANDLE_TYPE(BYTES, Bytes, string);
  ------------------
  |  | 1834|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1834:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1835|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1835:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1836|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1837|      0|      target = stream->WriteString(                                      \
  |  | 1838|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1839|      0|    }                                                                    \
  |  | 1840|      0|    break
  ------------------
 1843|      0|#undef HANDLE_TYPE
 1844|      0|        case WireFormatLite::TYPE_GROUP:
  ------------------
  |  Branch (1844:9): [True: 0, False: 0]
  ------------------
 1845|      0|          for (int i = 0; i < ptr.repeated_message_value->size(); i++) {
  ------------------
  |  Branch (1845:27): [True: 0, False: 0]
  ------------------
 1846|      0|            target = stream->EnsureSpace(target);
 1847|      0|            target = WireFormatLite::InternalWriteGroup(
 1848|      0|                number, ptr.repeated_message_value->Get(i), target, stream);
 1849|      0|          }
 1850|      0|          break;
 1851|      0|        case WireFormatLite::TYPE_MESSAGE:
  ------------------
  |  Branch (1851:9): [True: 0, False: 0]
  ------------------
 1852|      0|          for (int i = 0; i < ptr.repeated_message_value->size(); i++) {
  ------------------
  |  Branch (1852:27): [True: 0, False: 0]
  ------------------
 1853|      0|            auto& msg = ptr.repeated_message_value->Get(i);
 1854|      0|            target = WireFormatLite::InternalWriteMessage(
 1855|      0|                number, msg, msg.GetCachedSize(), target, stream);
 1856|      0|          }
 1857|      0|          break;
 1858|      0|      }
 1859|      0|    }
 1860|    239|  } else if (!is_cleared) {
  ------------------
  |  Branch (1860:14): [True: 239, False: 0]
  ------------------
 1861|    239|    switch (real_type(type)) {
  ------------------
  |  Branch (1861:13): [True: 239, False: 0]
  ------------------
 1862|      0|#define HANDLE_TYPE(UPPERCASE, CAMELCASE, VALUE)                               \
 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
 1864|      0|    target = stream->EnsureSpace(target);                                      \
 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
 1866|      0|    break
 1867|       |
 1868|      0|      HANDLE_TYPE(INT32, Int32, int32_t_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 239]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1869|      0|      HANDLE_TYPE(INT64, Int64, int64_t_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 239]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1870|      0|      HANDLE_TYPE(UINT32, UInt32, uint32_t_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 239]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1871|      0|      HANDLE_TYPE(UINT64, UInt64, uint64_t_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 239]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1872|      0|      HANDLE_TYPE(SINT32, SInt32, int32_t_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 239]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1873|      0|      HANDLE_TYPE(SINT64, SInt64, int64_t_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 239]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1874|      0|      HANDLE_TYPE(FIXED32, Fixed32, uint32_t_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 239]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1875|      0|      HANDLE_TYPE(FIXED64, Fixed64, uint64_t_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 239]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1876|      0|      HANDLE_TYPE(SFIXED32, SFixed32, int32_t_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 239]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1877|      0|      HANDLE_TYPE(SFIXED64, SFixed64, int64_t_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 239]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1878|      0|      HANDLE_TYPE(FLOAT, Float, float_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 239]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1879|      0|      HANDLE_TYPE(DOUBLE, Double, double_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 239]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1880|      0|      HANDLE_TYPE(BOOL, Bool, bool_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 239]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1881|      0|      HANDLE_TYPE(ENUM, Enum, enum_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 239]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1882|      0|#undef HANDLE_TYPE
 1883|      0|#define HANDLE_TYPE(UPPERCASE, CAMELCASE, VALUE)         \
 1884|      0|  case WireFormatLite::TYPE_##UPPERCASE:                 \
 1885|      0|    target = stream->EnsureSpace(target);                \
 1886|      0|    target = stream->WriteString(number, VALUE, target); \
 1887|      0|    break
 1888|      0|      HANDLE_TYPE(STRING, String, *ptr.string_value);
  ------------------
  |  | 1884|      0|  case WireFormatLite::TYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1884:3): [True: 0, False: 239]
  |  |  ------------------
  |  | 1885|      0|    target = stream->EnsureSpace(target);                \
  |  | 1886|      0|    target = stream->WriteString(number, VALUE, target); \
  |  | 1887|      0|    break
  ------------------
 1889|      0|      HANDLE_TYPE(BYTES, Bytes, *ptr.string_value);
  ------------------
  |  | 1884|      0|  case WireFormatLite::TYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1884:3): [True: 0, False: 239]
  |  |  ------------------
  |  | 1885|      0|    target = stream->EnsureSpace(target);                \
  |  | 1886|      0|    target = stream->WriteString(number, VALUE, target); \
  |  | 1887|      0|    break
  ------------------
 1890|      0|#undef HANDLE_TYPE
 1891|      0|      case WireFormatLite::TYPE_GROUP:
  ------------------
  |  Branch (1891:7): [True: 0, False: 239]
  ------------------
 1892|      0|        target = stream->EnsureSpace(target);
 1893|      0|        target = WireFormatLite::InternalWriteGroup(number, *ptr.message_value,
 1894|      0|                                                    target, stream);
 1895|      0|        break;
 1896|    239|      case WireFormatLite::TYPE_MESSAGE:
  ------------------
  |  Branch (1896:7): [True: 239, False: 0]
  ------------------
 1897|    239|        if (is_lazy) {
  ------------------
  |  Branch (1897:13): [True: 0, False: 239]
  ------------------
 1898|      0|          const auto* prototype =
 1899|      0|              extension_set->GetPrototypeForLazyMessage(extendee, number);
 1900|      0|          target = ptr.lazymessage_value->WriteMessageToArray(prototype, number,
 1901|      0|                                                              target, stream);
 1902|    239|        } else {
 1903|    239|          target = WireFormatLite::InternalWriteMessage(
 1904|    239|              number, *ptr.message_value, ptr.message_value->GetCachedSize(),
 1905|    239|              target, stream);
 1906|    239|        }
 1907|    239|        break;
 1908|    239|    }
 1909|    239|  }
 1910|    239|  return target;
 1911|    239|}
extension_set.cc:_ZN6google8protobuf8internal12_GLOBAL__N_123FindRegisteredExtensionEPKNS0_11MessageLiteEi:
  101|      8|                                             int number) {
  102|      8|  if (!global_registry) return nullptr;
  ------------------
  |  Branch (102:7): [True: 0, False: 8]
  ------------------
  103|       |
  104|      8|  ExtensionInfoKey info;
  105|      8|  info.message = extendee;
  106|      8|  info.number = number;
  107|       |
  108|      8|  auto it = global_registry->find(info);
  109|      8|  if (it == global_registry->end()) {
  ------------------
  |  Branch (109:7): [True: 0, False: 8]
  ------------------
  110|      0|    return nullptr;
  111|      8|  } else {
  112|      8|    return &*it;
  113|      8|  }
  114|      8|}
extension_set.cc:_ZNK6google8protobuf8internal12_GLOBAL__N_111ExtensionEqclERKNS1_13ExtensionInfoERKNS2_16ExtensionInfoKeyE:
   65|      8|  bool operator()(const ExtensionInfo& lhs, const ExtensionInfoKey& rhs) const {
   66|      8|    return lhs.message == rhs.message && lhs.number == rhs.number;
  ------------------
  |  Branch (66:12): [True: 8, False: 0]
  |  Branch (66:42): [True: 8, False: 0]
  ------------------
   67|      8|  }
extension_set.cc:_ZNK6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherclERKNS2_16ExtensionInfoKeyE:
   78|      8|  std::size_t operator()(const ExtensionInfoKey& info) const {
   79|      8|    return absl::HashOf(info.message, info.number);
   80|      8|  }
extension_set.cc:_ZN6google8protobuf8internal12_GLOBAL__N_18RegisterERKNS1_13ExtensionInfoE:
   90|      1|void Register(const ExtensionInfo& info) {
   91|      1|  static auto local_static_registry = OnShutdownDelete(new ExtensionRegistry);
   92|      1|  global_registry = local_static_registry;
   93|      1|  if (!local_static_registry->insert(info).second) {
  ------------------
  |  Branch (93:7): [True: 0, False: 1]
  ------------------
   94|      0|    ABSL_LOG(FATAL) << "Multiple extension registrations for type \""
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   95|      0|                    << info.message->GetTypeName() << "\", field number "
   96|      0|                    << info.number << ".";
   97|      0|  }
   98|      1|}
extension_set.cc:_ZNK6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherclERKNS1_13ExtensionInfoE:
   75|      1|  std::size_t operator()(const ExtensionInfo& info) const {
   76|      1|    return absl::HashOf(info.message, info.number);
   77|      1|  }
extension_set.cc:_ZN6google8protobuf8internal12_GLOBAL__N_18cpp_typeEh:
   49|  1.24k|inline WireFormatLite::CppType cpp_type(FieldType type) {
   50|  1.24k|  return WireFormatLite::FieldTypeToCppType(real_type(type));
   51|  1.24k|}
extension_set.cc:_ZN6google8protobuf8internal12_GLOBAL__N_19real_typeEh:
   44|  2.43k|inline WireFormatLite::FieldType real_type(FieldType type) {
   45|  2.43k|  ABSL_DCHECK(type > 0 && type <= WireFormatLite::MAX_FIELD_TYPE);
  ------------------
  |  |   47|  2.43k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  2.43k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  4.86k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  2.43k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  4.86k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  4.86k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2.43k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  2.43k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2.43k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  2.43k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2.43k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  4.86k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  4.86k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   46|  2.43k|  return static_cast<WireFormatLite::FieldType>(type);
   47|  2.43k|}
extension_set.cc:_ZZN6google8protobuf8internal12ExtensionSetD1EvENK3$_0clEiRNS2_9ExtensionE:
  189|    490|    ForEach([](int /* number */, Extension& ext) { ext.Free(); },
extension_set.cc:_ZN6google8protobuf8internal12_GLOBAL__N_111SizeOfUnionIPNS1_12ExtensionSet8KeyValueEPKS5_EEmT_S9_T0_SA_:
  970|  1.27k|size_t SizeOfUnion(ItX it_dest, ItX end_dest, ItY it_source, ItY end_source) {
  971|  1.27k|  size_t result = 0;
  972|  1.76k|  while (it_dest != end_dest && it_source != end_source) {
  ------------------
  |  Branch (972:10): [True: 498, False: 1.26k]
  |  Branch (972:33): [True: 490, False: 8]
  ------------------
  973|    490|    if (it_dest->first < it_source->first) {
  ------------------
  |  Branch (973:9): [True: 0, False: 490]
  ------------------
  974|      0|      ++result;
  975|      0|      ++it_dest;
  976|    490|    } else if (it_dest->first == it_source->first) {
  ------------------
  |  Branch (976:16): [True: 490, False: 0]
  ------------------
  977|    490|      ++result;
  978|    490|      ++it_dest;
  979|    490|      ++it_source;
  980|    490|    } else {
  981|      0|      if (!it_source->second.is_cleared) {
  ------------------
  |  Branch (981:11): [True: 0, False: 0]
  ------------------
  982|      0|        ++result;
  983|      0|      }
  984|      0|      ++it_source;
  985|      0|    }
  986|    490|  }
  987|  1.27k|  result += std::distance(it_dest, end_dest);
  988|  1.53k|  for (; it_source != end_source; ++it_source) {
  ------------------
  |  Branch (988:10): [True: 259, False: 1.27k]
  ------------------
  989|    259|    if (!it_source->second.is_cleared) {
  ------------------
  |  Branch (989:9): [True: 259, False: 0]
  ------------------
  990|    259|      ++result;
  991|    259|    }
  992|    259|  }
  993|  1.27k|  return result;
  994|  1.27k|}
extension_set.cc:_ZZN6google8protobuf8internal12ExtensionSet9MergeFromEPKNS0_11MessageLiteERKS2_ENK3$_0clEiRKNS2_9ExtensionE:
 1011|    749|      [extendee, this, &other](int number, const Extension& ext) {
 1012|    749|        this->InternalExtensionMergeFrom(extendee, number, ext, other.arena_);
 1013|    749|      },
extension_set.cc:_ZZNK6google8protobuf8internal12ExtensionSet8ByteSizeEvENK3$_0clEiRKNS2_9ExtensionE:
 1317|    474|      [&total_size](int number, const Extension& ext) {
 1318|    474|        total_size += ext.ByteSize(number);
 1319|    474|      },

_ZN6google8protobuf8internal13ExtensionInfoC2Ev:
  108|      8|  constexpr ExtensionInfo() : enum_validity_check() {}
_ZN6google8protobuf8internal13ExtensionInfoC2EPKNS0_11MessageLiteEihbbPFPKcS7_PNS1_12ParseContextEENS1_14LazyAnnotationE:
  121|      1|      : message(extendee),
  122|      1|        number(param_number),
  123|      1|        type(type_param),
  124|      1|        is_repeated(isrepeated),
  125|      1|        is_packed(ispacked),
  126|      1|        is_lazy(islazy),
  127|      1|        enum_validity_check(),
  128|      1|        lazy_eager_verify_func(verify_func) {}
_ZN6google8protobuf8internal24GeneratedExtensionFinderC2EPKNS0_11MessageLiteE:
  178|      8|      : extendee_(extendee) {}
_ZN6google8protobuf8internal12ExtensionSetC2ENS1_18InternalVisibilityEPNS0_5ArenaE:
  208|  1.05k|      : ExtensionSet(arena) {}
_ZNK6google8protobuf8internal12ExtensionSet18_InternalSerializeEPKNS0_11MessageLiteEiiPhPNS0_2io19EpsCopyOutputStreamE:
  486|    258|                              io::EpsCopyOutputStream* stream) const {
  487|    258|    if (flat_size_ == 0) {
  ------------------
  |  Branch (487:9): [True: 19, False: 239]
  ------------------
  488|     19|      assert(!is_large());
  489|     19|      return target;
  490|     19|    }
  491|    239|    return _InternalSerializeImpl(extendee, start_field_number,
  492|    239|                                  end_field_number, target, stream);
  493|    258|  }
_ZNK6google8protobuf8internal12ExtensionSet9Extension11PrefetchPtrEv:
  682|  1.71k|    const void* PrefetchPtr() const {
  683|  1.71k|      ABSL_DCHECK_EQ(is_pointer, is_repeated || FieldTypeIsPointer(type));
  ------------------
  |  |   74|  1.71k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|  1.71k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  1.71k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 1.71k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (56:38): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (56:38): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  1.71k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  684|       |      // We don't want to prefetch invalid/null pointers so if there isn't a
  685|       |      // pointer to prefetch, then return `this`.
  686|  1.71k|      return is_pointer ? absl::bit_cast<const void*>(ptr) : this;
  ------------------
  |  Branch (686:14): [True: 1.71k, False: 0]
  ------------------
  687|  1.71k|    }
_ZNK6google8protobuf8internal12ExtensionSet8is_largeEv:
  791|  10.0k|  bool is_large() const { return static_cast<int16_t>(flat_size_) < 0; }
_ZNK6google8protobuf8internal12ExtensionSet8PrefetchclEPKv:
  802|  1.22k|    void operator()(const void* ptr) const { absl::PrefetchToLocalCache(ptr); }
_ZNK6google8protobuf8internal12ExtensionSet11PrefetchNtaclEPKv:
  805|    490|    void operator()(const void* ptr) const {
  806|    490|      absl::PrefetchToLocalCacheNta(ptr);
  807|    490|    }
_ZN6google8protobuf8internal12ExtensionSet10flat_beginEv:
 1030|  4.07k|  KeyValue* flat_begin() {
 1031|       |    assert(!is_large());
 1032|  4.07k|    return map_.flat;
 1033|  4.07k|  }
_ZNK6google8protobuf8internal12ExtensionSet10flat_beginEv:
 1034|  3.87k|  const KeyValue* flat_begin() const {
 1035|       |    assert(!is_large());
 1036|  3.87k|    return map_.flat;
 1037|  3.87k|  }
_ZN6google8protobuf8internal12ExtensionSet8flat_endEv:
 1038|  4.07k|  KeyValue* flat_end() {
 1039|       |    assert(!is_large());
 1040|  4.07k|    return map_.flat + flat_size_;
 1041|  4.07k|  }
_ZNK6google8protobuf8internal12ExtensionSet8flat_endEv:
 1042|  3.88k|  const KeyValue* flat_end() const {
 1043|       |    assert(!is_large());
 1044|  3.88k|    return map_.flat + flat_size_;
 1045|  3.88k|  }
_ZNK6google8protobuf8internal12ExtensionSet32FindExtensionInfoFromFieldNumberINS1_24GeneratedExtensionFinderEEEbiiPT_PNS1_13ExtensionInfoEPb:
  937|      8|                                        bool* was_packed_on_wire) const {
  938|      8|    if (!extension_finder->Find(field_number, extension)) {
  ------------------
  |  Branch (938:9): [True: 0, False: 8]
  ------------------
  939|      0|      return false;
  940|      0|    }
  941|       |
  942|      8|    ABSL_DCHECK(extension->type > 0 &&
  ------------------
  |  |   47|      8|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      8|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     24|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      8|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     16|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     16|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 8, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      8|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 8]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 8, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     24|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     24|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  943|      8|                extension->type <= WireFormatLite::MAX_FIELD_TYPE);
  944|      8|    auto real_type = static_cast<WireFormatLite::FieldType>(extension->type);
  945|       |
  946|      8|    WireFormatLite::WireType expected_wire_type =
  947|      8|        WireFormatLite::WireTypeForFieldType(real_type);
  948|       |
  949|       |    // Check if this is a packed field.
  950|      8|    *was_packed_on_wire = false;
  951|      8|    if (extension->is_repeated &&
  ------------------
  |  Branch (951:9): [True: 0, False: 8]
  ------------------
  952|      0|        wire_type == WireFormatLite::WIRETYPE_LENGTH_DELIMITED &&
  ------------------
  |  Branch (952:9): [True: 0, False: 0]
  ------------------
  953|      0|        is_packable(expected_wire_type)) {
  ------------------
  |  Branch (953:9): [True: 0, False: 0]
  ------------------
  954|      0|      *was_packed_on_wire = true;
  955|      0|      return true;
  956|      0|    }
  957|       |    // Otherwise the wire type must match.
  958|      8|    return expected_wire_type == wire_type;
  959|      8|  }
_ZN6google8protobuf8internal12ExtensionSetC2EPNS0_5ArenaE:
 1066|  1.05k|    : arena_(arena), flat_capacity_(0), flat_size_(0), map_{nullptr} {}
extension_set.cc:_ZN6google8protobuf8internal12ExtensionSet7ForEachIZNS2_D1EvE3$_0NS2_11PrefetchNtaEEEvT_T0_:
  839|  1.05k|  void ForEach(KeyValueFunctor func, PrefetchFunctor prefetch_func) {
  840|  1.05k|    if (PROTOBUF_PREDICT_FALSE(is_large())) {
  ------------------
  |  |  365|  1.05k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1.05k]
  |  |  |  Branch (365:54): [Folded, False: 1.05k]
  |  |  |  Branch (365:63): [True: 0, False: 1.05k]
  |  |  ------------------
  ------------------
  841|      0|      ForEachPrefetchImpl(map_.large->begin(), map_.large->end(),
  842|      0|                          std::move(func), std::move(prefetch_func));
  843|      0|      return;
  844|      0|    }
  845|  1.05k|    ForEachPrefetchImpl(flat_begin(), flat_end(), std::move(func),
  846|  1.05k|                        std::move(prefetch_func));
  847|  1.05k|  }
extension_set.cc:_ZN6google8protobuf8internal12ExtensionSet19ForEachPrefetchImplIPNS2_8KeyValueEZNS2_D1EvE3$_0NS2_11PrefetchNtaEEEvT_S8_T0_T1_:
  814|  1.05k|                                  PrefetchFunctor prefetch_func) {
  815|       |    // Note: based on arena's ChunkList::Cleanup().
  816|       |    // Prefetch distance 16 performs better than 8 in load tests.
  817|  1.05k|    constexpr int kPrefetchDistance = 16;
  818|  1.05k|    Iterator prefetch = it;
  819|       |    // Prefetch the first kPrefetchDistance extensions.
  820|  1.54k|    for (int i = 0; prefetch != end && i < kPrefetchDistance; ++prefetch, ++i) {
  ------------------
  |  Branch (820:21): [True: 490, False: 1.05k]
  |  Branch (820:40): [True: 490, False: 0]
  ------------------
  821|    490|      prefetch_func(prefetch->second.PrefetchPtr());
  822|    490|    }
  823|       |    // For the middle extensions, call func and then prefetch the extension
  824|       |    // kPrefetchDistance after the current one.
  825|  1.05k|    for (; prefetch != end; ++it, ++prefetch) {
  ------------------
  |  Branch (825:12): [True: 0, False: 1.05k]
  ------------------
  826|      0|      func(it->first, it->second);
  827|      0|      prefetch_func(prefetch->second.PrefetchPtr());
  828|      0|    }
  829|       |    // Call func on the rest without prefetching.
  830|  1.54k|    for (; it != end; ++it) func(it->first, it->second);
  ------------------
  |  Branch (830:12): [True: 490, False: 1.05k]
  ------------------
  831|  1.05k|  }
extension_set.cc:_ZN6google8protobuf8internal12ExtensionSet7ForEachIZNS2_5ClearEvE3$_0NS2_8PrefetchEEEvT_T0_:
  839|     19|  void ForEach(KeyValueFunctor func, PrefetchFunctor prefetch_func) {
  840|     19|    if (PROTOBUF_PREDICT_FALSE(is_large())) {
  ------------------
  |  |  365|     19|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 19]
  |  |  |  Branch (365:54): [Folded, False: 19]
  |  |  |  Branch (365:63): [True: 0, False: 19]
  |  |  ------------------
  ------------------
  841|      0|      ForEachPrefetchImpl(map_.large->begin(), map_.large->end(),
  842|      0|                          std::move(func), std::move(prefetch_func));
  843|      0|      return;
  844|      0|    }
  845|     19|    ForEachPrefetchImpl(flat_begin(), flat_end(), std::move(func),
  846|     19|                        std::move(prefetch_func));
  847|     19|  }
extension_set.cc:_ZN6google8protobuf8internal12ExtensionSet19ForEachPrefetchImplIPNS2_8KeyValueEZNS2_5ClearEvE3$_0NS2_8PrefetchEEEvT_S8_T0_T1_:
  814|     19|                                  PrefetchFunctor prefetch_func) {
  815|       |    // Note: based on arena's ChunkList::Cleanup().
  816|       |    // Prefetch distance 16 performs better than 8 in load tests.
  817|     19|    constexpr int kPrefetchDistance = 16;
  818|     19|    Iterator prefetch = it;
  819|       |    // Prefetch the first kPrefetchDistance extensions.
  820|     19|    for (int i = 0; prefetch != end && i < kPrefetchDistance; ++prefetch, ++i) {
  ------------------
  |  Branch (820:21): [True: 0, False: 19]
  |  Branch (820:40): [True: 0, False: 0]
  ------------------
  821|      0|      prefetch_func(prefetch->second.PrefetchPtr());
  822|      0|    }
  823|       |    // For the middle extensions, call func and then prefetch the extension
  824|       |    // kPrefetchDistance after the current one.
  825|     19|    for (; prefetch != end; ++it, ++prefetch) {
  ------------------
  |  Branch (825:12): [True: 0, False: 19]
  ------------------
  826|      0|      func(it->first, it->second);
  827|      0|      prefetch_func(prefetch->second.PrefetchPtr());
  828|      0|    }
  829|       |    // Call func on the rest without prefetching.
  830|     19|    for (; it != end; ++it) func(it->first, it->second);
  ------------------
  |  Branch (830:12): [True: 0, False: 19]
  ------------------
  831|     19|  }
extension_set.cc:_ZNK6google8protobuf8internal12ExtensionSet7ForEachIZNS2_9MergeFromEPKNS0_11MessageLiteERKS2_E3$_0NS2_8PrefetchEEEvT_T0_:
  850|  1.27k|  void ForEach(KeyValueFunctor func, PrefetchFunctor prefetch_func) const {
  851|  1.27k|    if (PROTOBUF_PREDICT_FALSE(is_large())) {
  ------------------
  |  |  365|  1.27k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1.27k]
  |  |  |  Branch (365:54): [Folded, False: 1.27k]
  |  |  |  Branch (365:63): [True: 0, False: 1.27k]
  |  |  ------------------
  ------------------
  852|      0|      ForEachPrefetchImpl(map_.large->begin(), map_.large->end(),
  853|      0|                          std::move(func), std::move(prefetch_func));
  854|      0|      return;
  855|      0|    }
  856|  1.27k|    ForEachPrefetchImpl(flat_begin(), flat_end(), std::move(func),
  857|  1.27k|                        std::move(prefetch_func));
  858|  1.27k|  }
extension_set.cc:_ZN6google8protobuf8internal12ExtensionSet19ForEachPrefetchImplIPKNS2_8KeyValueEZNS2_9MergeFromEPKNS0_11MessageLiteERKS2_E3$_0NS2_8PrefetchEEEvT_SE_T0_T1_:
  814|  1.27k|                                  PrefetchFunctor prefetch_func) {
  815|       |    // Note: based on arena's ChunkList::Cleanup().
  816|       |    // Prefetch distance 16 performs better than 8 in load tests.
  817|  1.27k|    constexpr int kPrefetchDistance = 16;
  818|  1.27k|    Iterator prefetch = it;
  819|       |    // Prefetch the first kPrefetchDistance extensions.
  820|  2.02k|    for (int i = 0; prefetch != end && i < kPrefetchDistance; ++prefetch, ++i) {
  ------------------
  |  Branch (820:21): [True: 749, False: 1.27k]
  |  Branch (820:40): [True: 749, False: 0]
  ------------------
  821|    749|      prefetch_func(prefetch->second.PrefetchPtr());
  822|    749|    }
  823|       |    // For the middle extensions, call func and then prefetch the extension
  824|       |    // kPrefetchDistance after the current one.
  825|  1.27k|    for (; prefetch != end; ++it, ++prefetch) {
  ------------------
  |  Branch (825:12): [True: 0, False: 1.27k]
  ------------------
  826|      0|      func(it->first, it->second);
  827|      0|      prefetch_func(prefetch->second.PrefetchPtr());
  828|      0|    }
  829|       |    // Call func on the rest without prefetching.
  830|  2.02k|    for (; it != end; ++it) func(it->first, it->second);
  ------------------
  |  Branch (830:12): [True: 749, False: 1.27k]
  ------------------
  831|  1.27k|  }
extension_set.cc:_ZNK6google8protobuf8internal12ExtensionSet7ForEachIZNKS2_8ByteSizeEvE3$_0NS2_8PrefetchEEEvT_T0_:
  850|    774|  void ForEach(KeyValueFunctor func, PrefetchFunctor prefetch_func) const {
  851|    774|    if (PROTOBUF_PREDICT_FALSE(is_large())) {
  ------------------
  |  |  365|    774|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 774]
  |  |  |  Branch (365:54): [Folded, False: 774]
  |  |  |  Branch (365:63): [True: 0, False: 774]
  |  |  ------------------
  ------------------
  852|      0|      ForEachPrefetchImpl(map_.large->begin(), map_.large->end(),
  853|      0|                          std::move(func), std::move(prefetch_func));
  854|      0|      return;
  855|      0|    }
  856|    774|    ForEachPrefetchImpl(flat_begin(), flat_end(), std::move(func),
  857|    774|                        std::move(prefetch_func));
  858|    774|  }
extension_set.cc:_ZN6google8protobuf8internal12ExtensionSet19ForEachPrefetchImplIPKNS2_8KeyValueEZNKS2_8ByteSizeEvE3$_0NS2_8PrefetchEEEvT_S9_T0_T1_:
  814|    774|                                  PrefetchFunctor prefetch_func) {
  815|       |    // Note: based on arena's ChunkList::Cleanup().
  816|       |    // Prefetch distance 16 performs better than 8 in load tests.
  817|    774|    constexpr int kPrefetchDistance = 16;
  818|    774|    Iterator prefetch = it;
  819|       |    // Prefetch the first kPrefetchDistance extensions.
  820|  1.24k|    for (int i = 0; prefetch != end && i < kPrefetchDistance; ++prefetch, ++i) {
  ------------------
  |  Branch (820:21): [True: 474, False: 774]
  |  Branch (820:40): [True: 474, False: 0]
  ------------------
  821|    474|      prefetch_func(prefetch->second.PrefetchPtr());
  822|    474|    }
  823|       |    // For the middle extensions, call func and then prefetch the extension
  824|       |    // kPrefetchDistance after the current one.
  825|    774|    for (; prefetch != end; ++it, ++prefetch) {
  ------------------
  |  Branch (825:12): [True: 0, False: 774]
  ------------------
  826|      0|      func(it->first, it->second);
  827|      0|      prefetch_func(prefetch->second.PrefetchPtr());
  828|      0|    }
  829|       |    // Call func on the rest without prefetching.
  830|  1.24k|    for (; it != end; ++it) func(it->first, it->second);
  ------------------
  |  Branch (830:12): [True: 474, False: 774]
  ------------------
  831|    774|  }
_ZN6google8protobuf8internal17MessageTypeTraitsIN2pb11CppFeaturesEE3GetEiRKNS1_12ExtensionSetERKS4_:
 1484|    235|                              ConstType default_value) {
 1485|    235|    return static_cast<const Type&>(set.GetMessage(number, default_value));
 1486|    235|  }
_ZNK6google8protobuf8internal19ExtensionIdentifierINS0_10FeatureSetENS1_17MessageTypeTraitsIN2pb11CppFeaturesEEELh11ELb0EE13default_valueEv:
 1622|    235|  typename TypeTraits::ConstType default_value() const {
 1623|    235|    return TypeTraits::FromInitType(default_value_);
 1624|    235|  }
_ZN6google8protobuf8internal17MessageTypeTraitsIN2pb11CppFeaturesEE12FromInitTypeEPKv:
 1477|    235|  static ConstType FromInitType(InitType v) {
 1478|    235|    return *static_cast<const Type*>(v);
 1479|    235|  }
_ZNK6google8protobuf8internal19ExtensionIdentifierINS0_10FeatureSetENS1_17MessageTypeTraitsIN2pb11CppFeaturesEEELh11ELb0EE6numberEv:
 1621|    471|  inline int number() const { return number_; }
_ZN6google8protobuf8internal17MessageTypeTraitsIN2pb11CppFeaturesEE7MutableEihPNS1_12ExtensionSetE:
 1494|    235|                                    ExtensionSet* set) {
 1495|    235|    return static_cast<Type*>(set->MutableMessage(
 1496|    235|        number, field_type, Type::default_instance(), nullptr));
 1497|    235|  }

_ZN6google8protobuf8internal12ExtensionSet10ParseFieldEmPKcPKNS0_7MessageEPNS1_16InternalMetadataEPNS1_12ParseContextE:
  328|      8|                                     internal::ParseContext* ctx) {
  329|      8|  int number = tag >> 3;
  330|      8|  bool was_packed_on_wire;
  331|      8|  ExtensionInfo extension;
  332|      8|  if (!FindExtension(tag & 7, number, extendee, ctx, &extension,
  ------------------
  |  Branch (332:7): [True: 0, False: 8]
  ------------------
  333|      8|                     &was_packed_on_wire)) {
  334|      0|    return UnknownFieldParse(
  335|      0|        tag, metadata->mutable_unknown_fields<UnknownFieldSet>(), ptr, ctx);
  336|      0|  }
  337|      8|  return ParseFieldWithExtensionInfo<UnknownFieldSet>(
  338|      8|      number, was_packed_on_wire, extension, metadata, ptr, ctx);
  339|      8|}
_ZN6google8protobuf8internal12ExtensionSet13FindExtensionEijPKNS0_7MessageEPKNS1_12ParseContextEPNS1_13ExtensionInfoEPb:
  306|      8|                                 bool* was_packed_on_wire) {
  307|      8|  if (ctx->data().pool == nullptr) {
  ------------------
  |  Branch (307:7): [True: 8, False: 0]
  ------------------
  308|      8|    GeneratedExtensionFinder finder(extendee);
  309|      8|    if (!FindExtensionInfoFromFieldNumber(wire_type, field, &finder, extension,
  ------------------
  |  Branch (309:9): [True: 0, False: 8]
  ------------------
  310|      8|                                          was_packed_on_wire)) {
  311|      0|      return false;
  312|      0|    }
  313|      8|  } else {
  314|      0|    DescriptorPoolExtensionFinder finder(ctx->data().pool, ctx->data().factory,
  315|      0|                                         extendee->GetDescriptor());
  316|      0|    if (!FindExtensionInfoFromFieldNumber(wire_type, field, &finder, extension,
  ------------------
  |  Branch (316:9): [True: 0, False: 0]
  ------------------
  317|      0|                                          was_packed_on_wire)) {
  318|      0|      return false;
  319|      0|    }
  320|      0|  }
  321|      8|  return true;
  322|      8|}

_ZN6google8protobuf8internal12ExtensionSet27ParseFieldWithExtensionInfoINS0_15UnknownFieldSetEEEPKcibRKNS1_13ExtensionInfoEPNS1_16InternalMetadataES6_PNS1_12ParseContextE:
   22|      8|    InternalMetadata* metadata, const char* ptr, internal::ParseContext* ctx) {
   23|      8|  if (was_packed_on_wire) {
  ------------------
  |  Branch (23:7): [True: 0, False: 8]
  ------------------
   24|      0|    switch (extension.type) {
  ------------------
  |  Branch (24:13): [True: 0, False: 0]
  ------------------
   25|      0|#define HANDLE_TYPE(UPPERCASE, CPP_CAMELCASE)                                \
   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
   29|      0|                                extension.descriptor),                       \
   30|      0|        ptr, ctx);
   31|      0|      HANDLE_TYPE(INT32, Int32);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   32|      0|      HANDLE_TYPE(INT64, Int64);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   33|      0|      HANDLE_TYPE(UINT32, UInt32);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   34|      0|      HANDLE_TYPE(UINT64, UInt64);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   35|      0|      HANDLE_TYPE(SINT32, SInt32);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   36|      0|      HANDLE_TYPE(SINT64, SInt64);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   37|      0|      HANDLE_TYPE(FIXED32, Fixed32);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   38|      0|      HANDLE_TYPE(FIXED64, Fixed64);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   39|      0|      HANDLE_TYPE(SFIXED32, SFixed32);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   40|      0|      HANDLE_TYPE(SFIXED64, SFixed64);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   41|      0|      HANDLE_TYPE(FLOAT, Float);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   42|      0|      HANDLE_TYPE(DOUBLE, Double);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   43|      0|      HANDLE_TYPE(BOOL, Bool);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   44|      0|#undef HANDLE_TYPE
   45|       |
   46|      0|      case WireFormatLite::TYPE_ENUM:
  ------------------
  |  Branch (46:7): [True: 0, False: 0]
  ------------------
   47|      0|        return internal::PackedEnumParserArg<T>(
   48|      0|            MutableRawRepeatedField(number, extension.type, extension.is_packed,
   49|      0|                                    extension.descriptor),
   50|      0|            ptr, ctx, extension.enum_validity_check.func,
   51|      0|            extension.enum_validity_check.arg, metadata, number);
   52|      0|      case WireFormatLite::TYPE_STRING:
  ------------------
  |  Branch (52:7): [True: 0, False: 0]
  ------------------
   53|      0|      case WireFormatLite::TYPE_BYTES:
  ------------------
  |  Branch (53:7): [True: 0, False: 0]
  ------------------
   54|      0|      case WireFormatLite::TYPE_GROUP:
  ------------------
  |  Branch (54:7): [True: 0, False: 0]
  ------------------
   55|      0|      case WireFormatLite::TYPE_MESSAGE:
  ------------------
  |  Branch (55:7): [True: 0, False: 0]
  ------------------
   56|      0|        ABSL_LOG(FATAL) << "Non-primitive types can't be packed.";
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   57|      0|        break;
   58|      0|    }
   59|      8|  } else {
   60|      8|    switch (extension.type) {
  ------------------
  |  Branch (60:13): [True: 8, False: 0]
  ------------------
   61|      0|#define HANDLE_VARINT_TYPE(UPPERCASE, CPP_CAMELCASE)                        \
   62|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
   63|      0|    uint64_t value;                                                         \
   64|      0|    ptr = VarintParse(ptr, &value);                                         \
   65|      0|    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);                                    \
   66|      0|    if (extension.is_repeated) {                                            \
   67|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
   68|      0|                         extension.is_packed, value, extension.descriptor); \
   69|      0|    } else {                                                                \
   70|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
   71|      0|                         extension.descriptor);                             \
   72|      0|    }                                                                       \
   73|      0|  } break
   74|       |
   75|      0|      HANDLE_VARINT_TYPE(INT32, Int32);
  ------------------
  |  |   62|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (62:3): [True: 0, False: 8]
  |  |  ------------------
  |  |   63|      0|    uint64_t value;                                                         \
  |  |   64|      0|    ptr = VarintParse(ptr, &value);                                         \
  |  |   65|      0|    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);                                    \
  |  |  ------------------
  |  |  |  | 1157|      0|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1150|      0|  if (!(predicate)) {                                  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1150:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1151|      0|    /*  ::raise(SIGINT);  */                           \
  |  |  |  |  |  | 1152|      0|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  |  |  | 1153|      0|    return ret;                                        \
  |  |  |  |  |  | 1154|      0|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   66|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (66:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   67|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |   68|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |   69|      0|    } else {                                                                \
  |  |   70|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |   71|      0|                         extension.descriptor);                             \
  |  |   72|      0|    }                                                                       \
  |  |   73|      0|  } break
  ------------------
   76|      0|      HANDLE_VARINT_TYPE(INT64, Int64);
  ------------------
  |  |   62|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (62:3): [True: 0, False: 8]
  |  |  ------------------
  |  |   63|      0|    uint64_t value;                                                         \
  |  |   64|      0|    ptr = VarintParse(ptr, &value);                                         \
  |  |   65|      0|    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);                                    \
  |  |  ------------------
  |  |  |  | 1157|      0|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1150|      0|  if (!(predicate)) {                                  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1150:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1151|      0|    /*  ::raise(SIGINT);  */                           \
  |  |  |  |  |  | 1152|      0|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  |  |  | 1153|      0|    return ret;                                        \
  |  |  |  |  |  | 1154|      0|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   66|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (66:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   67|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |   68|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |   69|      0|    } else {                                                                \
  |  |   70|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |   71|      0|                         extension.descriptor);                             \
  |  |   72|      0|    }                                                                       \
  |  |   73|      0|  } break
  ------------------
   77|      0|      HANDLE_VARINT_TYPE(UINT32, UInt32);
  ------------------
  |  |   62|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (62:3): [True: 0, False: 8]
  |  |  ------------------
  |  |   63|      0|    uint64_t value;                                                         \
  |  |   64|      0|    ptr = VarintParse(ptr, &value);                                         \
  |  |   65|      0|    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);                                    \
  |  |  ------------------
  |  |  |  | 1157|      0|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1150|      0|  if (!(predicate)) {                                  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1150:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1151|      0|    /*  ::raise(SIGINT);  */                           \
  |  |  |  |  |  | 1152|      0|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  |  |  | 1153|      0|    return ret;                                        \
  |  |  |  |  |  | 1154|      0|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   66|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (66:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   67|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |   68|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |   69|      0|    } else {                                                                \
  |  |   70|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |   71|      0|                         extension.descriptor);                             \
  |  |   72|      0|    }                                                                       \
  |  |   73|      0|  } break
  ------------------
   78|      0|      HANDLE_VARINT_TYPE(UINT64, UInt64);
  ------------------
  |  |   62|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (62:3): [True: 0, False: 8]
  |  |  ------------------
  |  |   63|      0|    uint64_t value;                                                         \
  |  |   64|      0|    ptr = VarintParse(ptr, &value);                                         \
  |  |   65|      0|    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);                                    \
  |  |  ------------------
  |  |  |  | 1157|      0|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1150|      0|  if (!(predicate)) {                                  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1150:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1151|      0|    /*  ::raise(SIGINT);  */                           \
  |  |  |  |  |  | 1152|      0|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  |  |  | 1153|      0|    return ret;                                        \
  |  |  |  |  |  | 1154|      0|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   66|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (66:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   67|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |   68|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |   69|      0|    } else {                                                                \
  |  |   70|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |   71|      0|                         extension.descriptor);                             \
  |  |   72|      0|    }                                                                       \
  |  |   73|      0|  } break
  ------------------
   79|      0|      HANDLE_VARINT_TYPE(BOOL, Bool);
  ------------------
  |  |   62|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (62:3): [True: 0, False: 8]
  |  |  ------------------
  |  |   63|      0|    uint64_t value;                                                         \
  |  |   64|      0|    ptr = VarintParse(ptr, &value);                                         \
  |  |   65|      0|    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);                                    \
  |  |  ------------------
  |  |  |  | 1157|      0|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1150|      0|  if (!(predicate)) {                                  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1150:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1151|      0|    /*  ::raise(SIGINT);  */                           \
  |  |  |  |  |  | 1152|      0|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  |  |  | 1153|      0|    return ret;                                        \
  |  |  |  |  |  | 1154|      0|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   66|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (66:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   67|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |   68|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |   69|      0|    } else {                                                                \
  |  |   70|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |   71|      0|                         extension.descriptor);                             \
  |  |   72|      0|    }                                                                       \
  |  |   73|      0|  } break
  ------------------
   80|      0|#undef HANDLE_VARINT_TYPE
   81|      0|#define HANDLE_SVARINT_TYPE(UPPERCASE, CPP_CAMELCASE, SIZE)                 \
   82|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
   83|      0|    uint64_t val;                                                           \
   84|      0|    ptr = VarintParse(ptr, &val);                                           \
   85|      0|    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);                                    \
   86|      0|    auto value = WireFormatLite::ZigZagDecode##SIZE(val);                   \
   87|      0|    if (extension.is_repeated) {                                            \
   88|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
   89|      0|                         extension.is_packed, value, extension.descriptor); \
   90|      0|    } else {                                                                \
   91|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
   92|      0|                         extension.descriptor);                             \
   93|      0|    }                                                                       \
   94|      0|  } break
   95|       |
   96|      0|      HANDLE_SVARINT_TYPE(SINT32, Int32, 32);
  ------------------
  |  |   82|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (82:3): [True: 0, False: 8]
  |  |  ------------------
  |  |   83|      0|    uint64_t val;                                                           \
  |  |   84|      0|    ptr = VarintParse(ptr, &val);                                           \
  |  |   85|      0|    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);                                    \
  |  |  ------------------
  |  |  |  | 1157|      0|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1150|      0|  if (!(predicate)) {                                  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1150:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1151|      0|    /*  ::raise(SIGINT);  */                           \
  |  |  |  |  |  | 1152|      0|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  |  |  | 1153|      0|    return ret;                                        \
  |  |  |  |  |  | 1154|      0|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   86|      0|    auto value = WireFormatLite::ZigZagDecode##SIZE(val);                   \
  |  |   87|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (87:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |   89|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |   90|      0|    } else {                                                                \
  |  |   91|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |   92|      0|                         extension.descriptor);                             \
  |  |   93|      0|    }                                                                       \
  |  |   94|      0|  } break
  ------------------
   97|      0|      HANDLE_SVARINT_TYPE(SINT64, Int64, 64);
  ------------------
  |  |   82|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (82:3): [True: 0, False: 8]
  |  |  ------------------
  |  |   83|      0|    uint64_t val;                                                           \
  |  |   84|      0|    ptr = VarintParse(ptr, &val);                                           \
  |  |   85|      0|    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);                                    \
  |  |  ------------------
  |  |  |  | 1157|      0|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1150|      0|  if (!(predicate)) {                                  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1150:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1151|      0|    /*  ::raise(SIGINT);  */                           \
  |  |  |  |  |  | 1152|      0|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  |  |  | 1153|      0|    return ret;                                        \
  |  |  |  |  |  | 1154|      0|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   86|      0|    auto value = WireFormatLite::ZigZagDecode##SIZE(val);                   \
  |  |   87|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (87:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |   89|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |   90|      0|    } else {                                                                \
  |  |   91|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |   92|      0|                         extension.descriptor);                             \
  |  |   93|      0|    }                                                                       \
  |  |   94|      0|  } break
  ------------------
   98|      0|#undef HANDLE_SVARINT_TYPE
   99|      0|#define HANDLE_FIXED_TYPE(UPPERCASE, CPP_CAMELCASE, CPPTYPE)                \
  100|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  101|      0|    auto value = UnalignedLoad<CPPTYPE>(ptr);                               \
  102|      0|    ptr += sizeof(CPPTYPE);                                                 \
  103|      0|    if (extension.is_repeated) {                                            \
  104|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  105|      0|                         extension.is_packed, value, extension.descriptor); \
  106|      0|    } else {                                                                \
  107|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  108|      0|                         extension.descriptor);                             \
  109|      0|    }                                                                       \
  110|      0|  } break
  111|       |
  112|      0|      HANDLE_FIXED_TYPE(FIXED32, UInt32, uint32_t);
  ------------------
  |  |  100|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (100:3): [True: 0, False: 8]
  |  |  ------------------
  |  |  101|      0|    auto value = UnalignedLoad<CPPTYPE>(ptr);                               \
  |  |  102|      0|    ptr += sizeof(CPPTYPE);                                                 \
  |  |  103|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |  105|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |  106|      0|    } else {                                                                \
  |  |  107|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |  108|      0|                         extension.descriptor);                             \
  |  |  109|      0|    }                                                                       \
  |  |  110|      0|  } break
  ------------------
  113|      0|      HANDLE_FIXED_TYPE(FIXED64, UInt64, uint64_t);
  ------------------
  |  |  100|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (100:3): [True: 0, False: 8]
  |  |  ------------------
  |  |  101|      0|    auto value = UnalignedLoad<CPPTYPE>(ptr);                               \
  |  |  102|      0|    ptr += sizeof(CPPTYPE);                                                 \
  |  |  103|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |  105|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |  106|      0|    } else {                                                                \
  |  |  107|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |  108|      0|                         extension.descriptor);                             \
  |  |  109|      0|    }                                                                       \
  |  |  110|      0|  } break
  ------------------
  114|      0|      HANDLE_FIXED_TYPE(SFIXED32, Int32, int32_t);
  ------------------
  |  |  100|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (100:3): [True: 0, False: 8]
  |  |  ------------------
  |  |  101|      0|    auto value = UnalignedLoad<CPPTYPE>(ptr);                               \
  |  |  102|      0|    ptr += sizeof(CPPTYPE);                                                 \
  |  |  103|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |  105|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |  106|      0|    } else {                                                                \
  |  |  107|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |  108|      0|                         extension.descriptor);                             \
  |  |  109|      0|    }                                                                       \
  |  |  110|      0|  } break
  ------------------
  115|      0|      HANDLE_FIXED_TYPE(SFIXED64, Int64, int64_t);
  ------------------
  |  |  100|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (100:3): [True: 0, False: 8]
  |  |  ------------------
  |  |  101|      0|    auto value = UnalignedLoad<CPPTYPE>(ptr);                               \
  |  |  102|      0|    ptr += sizeof(CPPTYPE);                                                 \
  |  |  103|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |  105|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |  106|      0|    } else {                                                                \
  |  |  107|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |  108|      0|                         extension.descriptor);                             \
  |  |  109|      0|    }                                                                       \
  |  |  110|      0|  } break
  ------------------
  116|      0|      HANDLE_FIXED_TYPE(FLOAT, Float, float);
  ------------------
  |  |  100|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (100:3): [True: 0, False: 8]
  |  |  ------------------
  |  |  101|      0|    auto value = UnalignedLoad<CPPTYPE>(ptr);                               \
  |  |  102|      0|    ptr += sizeof(CPPTYPE);                                                 \
  |  |  103|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |  105|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |  106|      0|    } else {                                                                \
  |  |  107|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |  108|      0|                         extension.descriptor);                             \
  |  |  109|      0|    }                                                                       \
  |  |  110|      0|  } break
  ------------------
  117|      0|      HANDLE_FIXED_TYPE(DOUBLE, Double, double);
  ------------------
  |  |  100|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (100:3): [True: 0, False: 8]
  |  |  ------------------
  |  |  101|      0|    auto value = UnalignedLoad<CPPTYPE>(ptr);                               \
  |  |  102|      0|    ptr += sizeof(CPPTYPE);                                                 \
  |  |  103|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |  105|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |  106|      0|    } else {                                                                \
  |  |  107|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |  108|      0|                         extension.descriptor);                             \
  |  |  109|      0|    }                                                                       \
  |  |  110|      0|  } break
  ------------------
  118|      0|#undef HANDLE_FIXED_TYPE
  119|       |
  120|      0|      case WireFormatLite::TYPE_ENUM: {
  ------------------
  |  Branch (120:7): [True: 0, False: 8]
  ------------------
  121|      0|        uint64_t tmp;
  122|      0|        ptr = VarintParse(ptr, &tmp);
  123|      0|        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
  ------------------
  |  | 1157|      0|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  ------------------
  |  |  |  | 1150|      0|  if (!(predicate)) {                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1150:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1151|      0|    /*  ::raise(SIGINT);  */                           \
  |  |  |  | 1152|      0|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  | 1153|      0|    return ret;                                        \
  |  |  |  | 1154|      0|  }
  |  |  ------------------
  ------------------
  124|      0|        int value = tmp;
  125|       |
  126|      0|        if (!extension.enum_validity_check.func(
  ------------------
  |  Branch (126:13): [True: 0, False: 0]
  ------------------
  127|      0|                extension.enum_validity_check.arg, value)) {
  128|      0|          WriteVarint(number, value, metadata->mutable_unknown_fields<T>());
  129|      0|        } else if (extension.is_repeated) {
  ------------------
  |  Branch (129:20): [True: 0, False: 0]
  ------------------
  130|      0|          AddEnum(number, WireFormatLite::TYPE_ENUM, extension.is_packed, value,
  131|      0|                  extension.descriptor);
  132|      0|        } else {
  133|      0|          SetEnum(number, WireFormatLite::TYPE_ENUM, value,
  134|      0|                  extension.descriptor);
  135|      0|        }
  136|      0|        break;
  137|      0|      }
  138|       |
  139|      0|      case WireFormatLite::TYPE_BYTES:
  ------------------
  |  Branch (139:7): [True: 0, False: 8]
  ------------------
  140|      0|      case WireFormatLite::TYPE_STRING: {
  ------------------
  |  Branch (140:7): [True: 0, False: 8]
  ------------------
  141|      0|        std::string* value =
  142|      0|            extension.is_repeated
  ------------------
  |  Branch (142:13): [True: 0, False: 0]
  ------------------
  143|      0|                ? AddString(number, WireFormatLite::TYPE_STRING,
  144|      0|                            extension.descriptor)
  145|      0|                : MutableString(number, WireFormatLite::TYPE_STRING,
  146|      0|                                extension.descriptor);
  147|      0|        int size = ReadSize(&ptr);
  148|      0|        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
  ------------------
  |  | 1157|      0|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  ------------------
  |  |  |  | 1150|      0|  if (!(predicate)) {                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1150:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1151|      0|    /*  ::raise(SIGINT);  */                           \
  |  |  |  | 1152|      0|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  | 1153|      0|    return ret;                                        \
  |  |  |  | 1154|      0|  }
  |  |  ------------------
  ------------------
  149|      0|        return ctx->ReadString(ptr, size, value);
  150|      0|      }
  151|       |
  152|      0|      case WireFormatLite::TYPE_GROUP: {
  ------------------
  |  Branch (152:7): [True: 0, False: 8]
  ------------------
  153|      0|        MessageLite* value =
  154|      0|            extension.is_repeated
  ------------------
  |  Branch (154:13): [True: 0, False: 0]
  ------------------
  155|      0|                ? AddMessage(number, WireFormatLite::TYPE_GROUP,
  156|      0|                             *extension.message_info.prototype,
  157|      0|                             extension.descriptor)
  158|      0|                : MutableMessage(number, WireFormatLite::TYPE_GROUP,
  159|      0|                                 *extension.message_info.prototype,
  160|      0|                                 extension.descriptor);
  161|      0|        uint32_t tag = (number << 3) + WireFormatLite::WIRETYPE_START_GROUP;
  162|      0|        return ctx->ParseGroup(value, ptr, tag);
  163|      0|      }
  164|       |
  165|      8|      case WireFormatLite::TYPE_MESSAGE: {
  ------------------
  |  Branch (165:7): [True: 8, False: 0]
  ------------------
  166|      8|        MessageLite* value =
  167|      8|            extension.is_repeated
  ------------------
  |  Branch (167:13): [True: 0, False: 8]
  ------------------
  168|      8|                ? AddMessage(number, WireFormatLite::TYPE_MESSAGE,
  169|      0|                             *extension.message_info.prototype,
  170|      0|                             extension.descriptor)
  171|      8|                : MutableMessage(number, WireFormatLite::TYPE_MESSAGE,
  172|      8|                                 *extension.message_info.prototype,
  173|      8|                                 extension.descriptor);
  174|      8|        return ctx->ParseMessage(value, ptr);
  175|      0|      }
  176|      8|    }
  177|      8|  }
  178|      0|  return ptr;
  179|      8|}

_ZN6google8protobuf15FeatureResolver6CreateENS0_7EditionERKNS0_18FeatureSetDefaultsE:
  490|      4|    Edition edition, const FeatureSetDefaults& compiled_defaults) {
  491|      4|  if (edition < compiled_defaults.minimum_edition()) {
  ------------------
  |  Branch (491:7): [True: 0, False: 4]
  ------------------
  492|      0|    return Error("Edition ", edition,
  493|      0|                 " is earlier than the minimum supported edition ",
  494|      0|                 compiled_defaults.minimum_edition());
  495|      0|  }
  496|      4|  if (compiled_defaults.maximum_edition() < edition) {
  ------------------
  |  Branch (496:7): [True: 0, False: 4]
  ------------------
  497|      0|    return Error("Edition ", edition,
  498|      0|                 " is later than the maximum supported edition ",
  499|      0|                 compiled_defaults.maximum_edition());
  500|      0|  }
  501|       |
  502|       |  // Validate compiled defaults.
  503|      4|  Edition prev_edition = EDITION_UNKNOWN;
  504|     16|  for (const auto& edition_default : compiled_defaults.defaults()) {
  ------------------
  |  Branch (504:36): [True: 16, False: 4]
  ------------------
  505|     16|    if (edition_default.edition() == EDITION_UNKNOWN) {
  ------------------
  |  Branch (505:9): [True: 0, False: 16]
  ------------------
  506|      0|      return Error("Invalid edition ", edition_default.edition(),
  507|      0|                   " specified.");
  508|      0|    }
  509|     16|    if (prev_edition != EDITION_UNKNOWN) {
  ------------------
  |  Branch (509:9): [True: 12, False: 4]
  ------------------
  510|     12|      if (edition_default.edition() <= prev_edition) {
  ------------------
  |  Branch (510:11): [True: 0, False: 12]
  ------------------
  511|      0|        return Error(
  512|      0|            "Feature set defaults are not strictly increasing.  Edition ",
  513|      0|            prev_edition, " is greater than or equal to edition ",
  514|      0|            edition_default.edition(), ".");
  515|      0|      }
  516|     12|    }
  517|     16|    FeatureSet features = edition_default.fixed_features();
  518|     16|    features.MergeFrom(edition_default.overridable_features());
  519|     16|    RETURN_IF_ERROR(ValidateMergedFeatures(features));
  ------------------
  |  |   42|     16|  do {                                                         \
  |  |   43|     16|    const absl::Status _status = (expr);                       \
  |  |   44|     16|    if (PROTOBUF_PREDICT_FALSE(!_status.ok())) return _status; \
  |  |  ------------------
  |  |  |  |  365|     16|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (365:36): [True: 0, False: 16]
  |  |  |  |  |  Branch (365:54): [Folded, False: 16]
  |  |  |  |  |  Branch (365:63): [True: 0, False: 16]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   45|     16|  } while (0)
  |  |  ------------------
  |  |  |  Branch (45:12): [Folded, False: 16]
  |  |  ------------------
  ------------------
  520|       |
  521|     16|    prev_edition = edition_default.edition();
  522|     16|  }
  523|       |
  524|       |  // Select the matching edition defaults.
  525|      4|  auto comparator = [](const auto& a, const auto& b) {
  526|      4|    return a.edition() < b.edition();
  527|      4|  };
  528|      4|  FeatureSetDefaults::FeatureSetEditionDefault search;
  529|      4|  search.set_edition(edition);
  530|      4|  auto first_nonmatch =
  531|      4|      absl::c_upper_bound(compiled_defaults.defaults(), search, comparator);
  532|      4|  if (first_nonmatch == compiled_defaults.defaults().begin()) {
  ------------------
  |  Branch (532:7): [True: 0, False: 4]
  ------------------
  533|      0|    return Error("No valid default found for edition ", edition);
  534|      0|  }
  535|       |
  536|      4|  FeatureSet features = std::prev(first_nonmatch)->fixed_features();
  537|      4|  features.MergeFrom(std::prev(first_nonmatch)->overridable_features());
  538|      4|  return FeatureResolver(std::move(features));
  539|      4|}
_ZNK6google8protobuf15FeatureResolver13MergeFeaturesERKNS0_10FeatureSetES4_:
  542|    239|    const FeatureSet& merged_parent, const FeatureSet& unmerged_child) const {
  543|    239|  FeatureSet merged = defaults_;
  544|    239|  merged.MergeFrom(merged_parent);
  545|    239|  merged.MergeFrom(unmerged_child);
  546|       |
  547|    239|  RETURN_IF_ERROR(ValidateMergedFeatures(merged));
  ------------------
  |  |   42|    239|  do {                                                         \
  |  |   43|    239|    const absl::Status _status = (expr);                       \
  |  |   44|    239|    if (PROTOBUF_PREDICT_FALSE(!_status.ok())) return _status; \
  |  |  ------------------
  |  |  |  |  365|    239|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (365:36): [True: 0, False: 239]
  |  |  |  |  |  Branch (365:54): [Folded, False: 239]
  |  |  |  |  |  Branch (365:63): [True: 0, False: 239]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   45|    239|  } while (0)
  |  |  ------------------
  |  |  |  Branch (45:12): [Folded, False: 239]
  |  |  ------------------
  ------------------
  548|       |
  549|    239|  return merged;
  550|    239|}
feature_resolver.cc:_ZN6google8protobuf12_GLOBAL__N_122ValidateMergedFeaturesERKNS0_10FeatureSetE:
  334|    255|absl::Status ValidateMergedFeatures(const FeatureSet& features) {
  335|       |// Avoid using reflection here because this is called early in the descriptor
  336|       |// builds.  Instead, a reflection-based test will be used to keep this in sync
  337|       |// with descriptor.proto.  These checks should be run on every global feature
  338|       |// in FeatureSet.
  339|    255|#define CHECK_ENUM_FEATURE(FIELD, CAMELCASE, UPPERCASE)               \
  340|    255|  if (!FeatureSet::CAMELCASE##_IsValid(features.FIELD()) ||           \
  341|    255|      features.FIELD() == FeatureSet::UPPERCASE##_UNKNOWN) {          \
  342|    255|    return Error("Feature field `" #FIELD                             \
  343|    255|                 "` must resolve to a known value, found " #UPPERCASE \
  344|    255|                 "_UNKNOWN");                                         \
  345|    255|  }
  346|       |
  347|    255|  CHECK_ENUM_FEATURE(field_presence, FieldPresence, FIELD_PRESENCE)
  ------------------
  |  |  340|    255|  if (!FeatureSet::CAMELCASE##_IsValid(features.FIELD()) ||           \
  |  |  ------------------
  |  |  |  Branch (340:7): [True: 0, False: 255]
  |  |  ------------------
  |  |  341|    255|      features.FIELD() == FeatureSet::UPPERCASE##_UNKNOWN) {          \
  |  |  ------------------
  |  |  |  Branch (341:7): [True: 0, False: 255]
  |  |  ------------------
  |  |  342|      0|    return Error("Feature field `" #FIELD                             \
  |  |  343|      0|                 "` must resolve to a known value, found " #UPPERCASE \
  |  |  344|      0|                 "_UNKNOWN");                                         \
  |  |  345|      0|  }
  ------------------
  348|    255|  CHECK_ENUM_FEATURE(enum_type, EnumType, ENUM_TYPE)
  ------------------
  |  |  340|    255|  if (!FeatureSet::CAMELCASE##_IsValid(features.FIELD()) ||           \
  |  |  ------------------
  |  |  |  Branch (340:7): [True: 0, False: 255]
  |  |  ------------------
  |  |  341|    255|      features.FIELD() == FeatureSet::UPPERCASE##_UNKNOWN) {          \
  |  |  ------------------
  |  |  |  Branch (341:7): [True: 0, False: 255]
  |  |  ------------------
  |  |  342|      0|    return Error("Feature field `" #FIELD                             \
  |  |  343|      0|                 "` must resolve to a known value, found " #UPPERCASE \
  |  |  344|      0|                 "_UNKNOWN");                                         \
  |  |  345|      0|  }
  ------------------
  349|    255|  CHECK_ENUM_FEATURE(repeated_field_encoding, RepeatedFieldEncoding,
  ------------------
  |  |  340|    255|  if (!FeatureSet::CAMELCASE##_IsValid(features.FIELD()) ||           \
  |  |  ------------------
  |  |  |  Branch (340:7): [True: 0, False: 255]
  |  |  ------------------
  |  |  341|    255|      features.FIELD() == FeatureSet::UPPERCASE##_UNKNOWN) {          \
  |  |  ------------------
  |  |  |  Branch (341:7): [True: 0, False: 255]
  |  |  ------------------
  |  |  342|      0|    return Error("Feature field `" #FIELD                             \
  |  |  343|      0|                 "` must resolve to a known value, found " #UPPERCASE \
  |  |  344|      0|                 "_UNKNOWN");                                         \
  |  |  345|      0|  }
  ------------------
  350|    255|                     REPEATED_FIELD_ENCODING)
  351|    255|  CHECK_ENUM_FEATURE(utf8_validation, Utf8Validation, UTF8_VALIDATION)
  ------------------
  |  |  340|    255|  if (!FeatureSet::CAMELCASE##_IsValid(features.FIELD()) ||           \
  |  |  ------------------
  |  |  |  Branch (340:7): [True: 0, False: 255]
  |  |  ------------------
  |  |  341|    255|      features.FIELD() == FeatureSet::UPPERCASE##_UNKNOWN) {          \
  |  |  ------------------
  |  |  |  Branch (341:7): [True: 0, False: 255]
  |  |  ------------------
  |  |  342|      0|    return Error("Feature field `" #FIELD                             \
  |  |  343|      0|                 "` must resolve to a known value, found " #UPPERCASE \
  |  |  344|      0|                 "_UNKNOWN");                                         \
  |  |  345|      0|  }
  ------------------
  352|    255|  CHECK_ENUM_FEATURE(message_encoding, MessageEncoding, MESSAGE_ENCODING)
  ------------------
  |  |  340|    255|  if (!FeatureSet::CAMELCASE##_IsValid(features.FIELD()) ||           \
  |  |  ------------------
  |  |  |  Branch (340:7): [True: 0, False: 255]
  |  |  ------------------
  |  |  341|    255|      features.FIELD() == FeatureSet::UPPERCASE##_UNKNOWN) {          \
  |  |  ------------------
  |  |  |  Branch (341:7): [True: 0, False: 255]
  |  |  ------------------
  |  |  342|      0|    return Error("Feature field `" #FIELD                             \
  |  |  343|      0|                 "` must resolve to a known value, found " #UPPERCASE \
  |  |  344|      0|                 "_UNKNOWN");                                         \
  |  |  345|      0|  }
  ------------------
  353|    255|  CHECK_ENUM_FEATURE(json_format, JsonFormat, JSON_FORMAT)
  ------------------
  |  |  340|    255|  if (!FeatureSet::CAMELCASE##_IsValid(features.FIELD()) ||           \
  |  |  ------------------
  |  |  |  Branch (340:7): [True: 0, False: 255]
  |  |  ------------------
  |  |  341|    255|      features.FIELD() == FeatureSet::UPPERCASE##_UNKNOWN) {          \
  |  |  ------------------
  |  |  |  Branch (341:7): [True: 0, False: 255]
  |  |  ------------------
  |  |  342|      0|    return Error("Feature field `" #FIELD                             \
  |  |  343|      0|                 "` must resolve to a known value, found " #UPPERCASE \
  |  |  344|      0|                 "_UNKNOWN");                                         \
  |  |  345|      0|  }
  ------------------
  354|       |
  355|    255|#undef CHECK_ENUM_FEATURE
  356|       |
  357|    255|  return absl::OkStatus();
  358|    255|}
feature_resolver.cc:_ZZN6google8protobuf15FeatureResolver6CreateENS0_7EditionERKNS0_18FeatureSetDefaultsEENK3$_0clINS0_43FeatureSetDefaults_FeatureSetEditionDefaultES8_EEDaRKT_RKT0_:
  525|     10|  auto comparator = [](const auto& a, const auto& b) {
  526|     10|    return a.edition() < b.edition();
  527|     10|  };

_ZN6google8protobuf15FeatureResolverC2EOS1_:
   35|      8|  FeatureResolver(FeatureResolver&&) = default;
_ZN6google8protobuf15FeatureResolverC2ENS0_10FeatureSetE:
   78|      4|      : defaults_(std::move(defaults)) {}

_ZN6google8protobuf8internal12ValidateEnumEiPKj:
   80|      1|bool ValidateEnum(int value, const uint32_t* data) {
   81|      1|  return ValidateEnumInlined(value, data);
   82|      1|}

_ZN6google8protobuf8internal19ValidateEnumInlinedEiPKj:
   79|     94|                                                       const uint32_t* data) {
   80|     94|  const int16_t min_seq = static_cast<int16_t>(data[0] & 0xFFFF);
   81|     94|  const uint16_t length_seq = static_cast<uint16_t>(data[0] >> 16);
   82|     94|  uint64_t adjusted =
   83|     94|      static_cast<uint64_t>(static_cast<int64_t>(value)) - min_seq;
   84|       |  // Check if the value is within the sequential part.
   85|     94|  if (PROTOBUF_PREDICT_TRUE(adjusted < length_seq)) {
  ------------------
  |  |  364|     94|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 0, False: 94]
  |  |  |  Branch (364:53): [Folded, False: 94]
  |  |  |  Branch (364:62): [True: 0, False: 94]
  |  |  ------------------
  ------------------
   86|      0|    return true;
   87|      0|  }
   88|       |
   89|     94|  const uint16_t length_bitmap = static_cast<uint16_t>(data[1] & 0xFFFF);
   90|     94|  adjusted -= length_seq;
   91|       |  // Check if the value is within the bitmap.
   92|     94|  if (PROTOBUF_PREDICT_TRUE(adjusted < length_bitmap)) {
  ------------------
  |  |  364|     94|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 4, False: 90]
  |  |  |  Branch (364:53): [Folded, False: 94]
  |  |  |  Branch (364:62): [True: 4, False: 90]
  |  |  ------------------
  ------------------
   93|      4|    return ((data[2 + (adjusted / 32)] >> (adjusted % 32)) & 1) == 1;
   94|      4|  }
   95|       |
   96|       |  // Check if the value is on the ordered part.
   97|     90|  const uint16_t num_ordered = static_cast<uint16_t>(data[1] >> 16);
   98|     90|  data += 2 + length_bitmap / 32;
   99|     90|  size_t pos = 0;
  100|    286|  while (pos < num_ordered) {
  ------------------
  |  Branch (100:10): [True: 286, False: 0]
  ------------------
  101|    286|    const int32_t sample = static_cast<int32_t>(data[pos]);
  102|    286|    if (sample == value) return true;
  ------------------
  |  Branch (102:9): [True: 90, False: 196]
  ------------------
  103|    196|    pos = 2 * pos + (sample > value ? 1 : 2);
  ------------------
  |  Branch (103:22): [True: 166, False: 30]
  ------------------
  104|    196|  }
  105|      0|  return false;
  106|     90|}

_ZN6google8protobuf8internal40InitializeFileDescriptorDefaultInstancesEv:
   93|      6|void InitializeFileDescriptorDefaultInstances() {
   94|       |#if !defined(PROTOBUF_CONSTINIT_DEFAULT_INSTANCES)
   95|       |  static std::true_type init =
   96|       |      (InitializeFileDescriptorDefaultInstancesSlow(), std::true_type{});
   97|       |  (void)init;
   98|       |#endif  // !defined(PROTOBUF_CONSTINIT_DEFAULT_INSTANCES)
   99|      6|}
_ZN6google8protobuf8internal26InitializeLazyExtensionSetEv:
  101|      6|void InitializeLazyExtensionSet() {
  102|      6|}
_ZN6google8protobuf10ReflectionC2EPKNS0_10DescriptorERKNS0_8internal16ReflectionSchemaEPKNS0_14DescriptorPoolEPNS0_14MessageFactoryE:
  314|     47|    : descriptor_(descriptor),
  315|     47|      schema_(schema),
  316|       |      descriptor_pool_(
  317|     47|          (pool == nullptr) ? DescriptorPool::internal_generated_pool() : pool),
  ------------------
  |  Branch (317:11): [True: 0, False: 47]
  ------------------
  318|     47|      message_factory_(factory),
  319|     47|      last_non_weak_field_index_(-1) {
  320|     47|  last_non_weak_field_index_ = descriptor_->field_count() - 1;
  321|     47|}
_ZNK6google8protobuf10Reflection8HasFieldERKNS0_7MessageEPKNS0_15FieldDescriptorE:
 1224|  30.8k|                          const FieldDescriptor* field) const {
 1225|  30.8k|  USAGE_CHECK_MESSAGE(HasField, &message);
 1226|  30.8k|  USAGE_CHECK_MESSAGE_TYPE(HasField);
  ------------------
  |  |  286|  30.8k|  USAGE_CHECK_EQ(field->containing_type(), descriptor_, METHOD, \
  |  |  ------------------
  |  |  |  |  262|  30.8k|  USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|  30.8k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 30.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  260|  30.8k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  287|  30.8k|                 "Field does not match message type.");
  ------------------
 1227|  30.8k|  USAGE_CHECK_SINGULAR(HasField);
  ------------------
  |  |  289|  30.8k|  USAGE_CHECK_NE(field->label(), FieldDescriptor::LABEL_REPEATED, METHOD, \
  |  |  ------------------
  |  |  |  |  264|  30.8k|  USAGE_CHECK((A) != (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|  30.8k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 30.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  260|  30.8k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  290|  30.8k|                 "Field is repeated; the method requires a singular field.")
  ------------------
 1228|       |
 1229|  30.8k|  if (field->is_extension()) {
  ------------------
  |  Branch (1229:7): [True: 0, False: 30.8k]
  ------------------
 1230|      0|    return GetExtensionSet(message).Has(field->number());
 1231|  30.8k|  } else {
 1232|  30.8k|    if (schema_.InRealOneof(field)) {
  ------------------
  |  Branch (1232:9): [True: 0, False: 30.8k]
  ------------------
 1233|      0|      return HasOneofField(message, field);
 1234|  30.8k|    } else {
 1235|  30.8k|      return HasFieldSingular(message, field);
 1236|  30.8k|    }
 1237|  30.8k|  }
 1238|  30.8k|}
_ZNK6google8protobuf10Reflection9FieldSizeERKNS0_7MessageEPKNS0_15FieldDescriptorE:
 1325|  15.4k|                          const FieldDescriptor* field) const {
 1326|  15.4k|  USAGE_CHECK_MESSAGE(FieldSize, &message);
 1327|  15.4k|  USAGE_CHECK_MESSAGE_TYPE(FieldSize);
  ------------------
  |  |  286|  15.4k|  USAGE_CHECK_EQ(field->containing_type(), descriptor_, METHOD, \
  |  |  ------------------
  |  |  |  |  262|  15.4k|  USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|  15.4k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 15.4k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  260|  15.4k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  287|  15.4k|                 "Field does not match message type.");
  ------------------
 1328|  15.4k|  USAGE_CHECK_REPEATED(FieldSize);
  ------------------
  |  |  292|  15.4k|  USAGE_CHECK_EQ(field->label(), FieldDescriptor::LABEL_REPEATED, METHOD, \
  |  |  ------------------
  |  |  |  |  262|  15.4k|  USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|  15.4k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 15.4k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  260|  15.4k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  293|  15.4k|                 "Field is singular; the method requires a repeated field.")
  ------------------
 1329|       |
 1330|  15.4k|  if (field->is_extension()) {
  ------------------
  |  Branch (1330:7): [True: 0, False: 15.4k]
  ------------------
 1331|      0|    return GetExtensionSet(message).ExtensionSize(field->number());
 1332|  15.4k|  } else {
 1333|  15.4k|    switch (field->cpp_type()) {
  ------------------
  |  Branch (1333:13): [True: 15.4k, False: 0]
  ------------------
 1334|      0|#define HANDLE_TYPE(UPPERCASE, LOWERCASE)    \
 1335|      0|  case FieldDescriptor::CPPTYPE_##UPPERCASE: \
 1336|      0|    return GetRaw<RepeatedField<LOWERCASE> >(message, field).size()
 1337|       |
 1338|      0|      HANDLE_TYPE(INT32, int32_t);
  ------------------
  |  | 1335|      0|  case FieldDescriptor::CPPTYPE_##UPPERCASE: \
  |  |  ------------------
  |  |  |  Branch (1335:3): [True: 0, False: 15.4k]
  |  |  ------------------
  |  | 1336|      0|    return GetRaw<RepeatedField<LOWERCASE> >(message, field).size()
  ------------------
 1339|      0|      HANDLE_TYPE(INT64, int64_t);
  ------------------
  |  | 1335|      0|  case FieldDescriptor::CPPTYPE_##UPPERCASE: \
  |  |  ------------------
  |  |  |  Branch (1335:3): [True: 0, False: 15.4k]
  |  |  ------------------
  |  | 1336|      0|    return GetRaw<RepeatedField<LOWERCASE> >(message, field).size()
  ------------------
 1340|      0|      HANDLE_TYPE(UINT32, uint32_t);
  ------------------
  |  | 1335|      0|  case FieldDescriptor::CPPTYPE_##UPPERCASE: \
  |  |  ------------------
  |  |  |  Branch (1335:3): [True: 0, False: 15.4k]
  |  |  ------------------
  |  | 1336|      0|    return GetRaw<RepeatedField<LOWERCASE> >(message, field).size()
  ------------------
 1341|      0|      HANDLE_TYPE(UINT64, uint64_t);
  ------------------
  |  | 1335|      0|  case FieldDescriptor::CPPTYPE_##UPPERCASE: \
  |  |  ------------------
  |  |  |  Branch (1335:3): [True: 0, False: 15.4k]
  |  |  ------------------
  |  | 1336|      0|    return GetRaw<RepeatedField<LOWERCASE> >(message, field).size()
  ------------------
 1342|      0|      HANDLE_TYPE(DOUBLE, double);
  ------------------
  |  | 1335|      0|  case FieldDescriptor::CPPTYPE_##UPPERCASE: \
  |  |  ------------------
  |  |  |  Branch (1335:3): [True: 0, False: 15.4k]
  |  |  ------------------
  |  | 1336|      0|    return GetRaw<RepeatedField<LOWERCASE> >(message, field).size()
  ------------------
 1343|      0|      HANDLE_TYPE(FLOAT, float);
  ------------------
  |  | 1335|      0|  case FieldDescriptor::CPPTYPE_##UPPERCASE: \
  |  |  ------------------
  |  |  |  Branch (1335:3): [True: 0, False: 15.4k]
  |  |  ------------------
  |  | 1336|      0|    return GetRaw<RepeatedField<LOWERCASE> >(message, field).size()
  ------------------
 1344|      0|      HANDLE_TYPE(BOOL, bool);
  ------------------
  |  | 1335|      0|  case FieldDescriptor::CPPTYPE_##UPPERCASE: \
  |  |  ------------------
  |  |  |  Branch (1335:3): [True: 0, False: 15.4k]
  |  |  ------------------
  |  | 1336|      0|    return GetRaw<RepeatedField<LOWERCASE> >(message, field).size()
  ------------------
 1345|      0|      HANDLE_TYPE(ENUM, int);
  ------------------
  |  | 1335|      0|  case FieldDescriptor::CPPTYPE_##UPPERCASE: \
  |  |  ------------------
  |  |  |  Branch (1335:3): [True: 0, False: 15.4k]
  |  |  ------------------
  |  | 1336|      0|    return GetRaw<RepeatedField<LOWERCASE> >(message, field).size()
  ------------------
 1346|      0|#undef HANDLE_TYPE
 1347|       |
 1348|      0|      case FieldDescriptor::CPPTYPE_STRING:
  ------------------
  |  Branch (1348:7): [True: 0, False: 15.4k]
  ------------------
 1349|      0|        if (field->cpp_string_type() == FieldDescriptor::CppStringType::kCord) {
  ------------------
  |  Branch (1349:13): [True: 0, False: 0]
  ------------------
 1350|      0|          return GetRaw<RepeatedField<absl::Cord> >(message, field).size();
 1351|      0|        }
 1352|      0|        ABSL_FALLTHROUGH_INTENDED;
  ------------------
  |  |  644|      0|#define ABSL_FALLTHROUGH_INTENDED [[fallthrough]]
  ------------------
 1353|  15.4k|      case FieldDescriptor::CPPTYPE_MESSAGE:
  ------------------
  |  Branch (1353:7): [True: 15.4k, False: 0]
  ------------------
 1354|  15.4k|        if (IsMapFieldInApi(field)) {
  ------------------
  |  Branch (1354:13): [True: 0, False: 15.4k]
  ------------------
 1355|      0|          const internal::MapFieldBase& map =
 1356|      0|              GetRaw<MapFieldBase>(message, field);
 1357|      0|          if (map.IsRepeatedFieldValid()) {
  ------------------
  |  Branch (1357:15): [True: 0, False: 0]
  ------------------
 1358|      0|            return map.GetRepeatedField().size();
 1359|      0|          } else {
 1360|       |            // No need to materialize the repeated field if it is out of sync:
 1361|       |            // its size will be the same as the map's size.
 1362|      0|            return map.size();
 1363|      0|          }
 1364|  15.4k|        } else {
 1365|  15.4k|          return GetRaw<RepeatedPtrFieldBase>(message, field).size();
 1366|  15.4k|        }
 1367|  15.4k|    }
 1368|       |
 1369|      0|    ABSL_LOG(FATAL) << "Can't get here.";
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|  15.4k|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  15.4k|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1370|      0|    return 0;
 1371|      0|  }
 1372|  15.4k|}
_ZNK6google8protobuf10Reflection10GetMessageERKNS0_7MessageEPKNS0_15FieldDescriptorEPNS0_14MessageFactoryE:
 2340|  2.81k|                                      MessageFactory* factory) const {
 2341|  2.81k|  USAGE_CHECK_ALL(GetMessage, SINGULAR, MESSAGE);
  ------------------
  |  |  296|  2.81k|  USAGE_CHECK_MESSAGE(METHOD, &message);        \
  |  |  297|  2.81k|  USAGE_CHECK_MESSAGE_TYPE(METHOD);             \
  |  |  ------------------
  |  |  |  |  286|  2.81k|  USAGE_CHECK_EQ(field->containing_type(), descriptor_, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  262|  2.81k|  USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|  2.81k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 2.81k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|  2.81k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  287|  2.81k|                 "Field does not match message type.");
  |  |  ------------------
  |  |  298|  2.81k|  USAGE_CHECK_##LABEL(METHOD);                  \
  |  |  ------------------
  |  |  |  |  289|  2.81k|  USAGE_CHECK_NE(field->label(), FieldDescriptor::LABEL_REPEATED, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  2.81k|  USAGE_CHECK((A) != (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|  2.81k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 2.81k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|  2.81k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  290|  2.81k|                 "Field is repeated; the method requires a singular field.")
  |  |  ------------------
  |  |  299|  2.81k|  USAGE_CHECK_TYPE(METHOD, CPPTYPE)
  |  |  ------------------
  |  |  |  |  267|  2.81k|  if (field->cpp_type() != FieldDescriptor::CPPTYPE_##CPPTYPE) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (267:7): [True: 0, False: 2.81k]
  |  |  |  |  ------------------
  |  |  |  |  268|  2.81k|  ReportReflectionUsageTypeError(descriptor_, field, #METHOD,  \
  |  |  |  |  269|      0|                                 FieldDescriptor::CPPTYPE_##CPPTYPE)
  |  |  ------------------
  ------------------
 2342|       |
 2343|  2.81k|  if (factory == nullptr) factory = message_factory_;
  ------------------
  |  Branch (2343:7): [True: 2.81k, False: 0]
  ------------------
 2344|       |
 2345|  2.81k|  if (field->is_extension()) {
  ------------------
  |  Branch (2345:7): [True: 0, False: 2.81k]
  ------------------
 2346|      0|    return static_cast<const Message&>(GetExtensionSet(message).GetMessage(
 2347|      0|        field->number(), field->message_type(), factory));
 2348|  2.81k|  } else {
 2349|  2.81k|    if (schema_.InRealOneof(field) && !HasOneofField(message, field)) {
  ------------------
  |  Branch (2349:9): [True: 0, False: 2.81k]
  |  Branch (2349:39): [True: 0, False: 0]
  ------------------
 2350|      0|      return *GetDefaultMessageInstance(field);
 2351|      0|    }
 2352|  2.81k|    const Message* result = GetRaw<const Message*>(message, field);
 2353|  2.81k|    if (result == nullptr) {
  ------------------
  |  Branch (2353:9): [True: 0, False: 2.81k]
  ------------------
 2354|      0|      result = GetDefaultMessageInstance(field);
 2355|      0|    }
 2356|  2.81k|    return *result;
 2357|  2.81k|  }
 2358|  2.81k|}
_ZNK6google8protobuf10Reflection14MutableMessageEPNS0_7MessageEPKNS0_15FieldDescriptorEPNS0_14MessageFactoryE:
 2362|  2.81k|                                    MessageFactory* factory) const {
 2363|  2.81k|  USAGE_MUTABLE_CHECK_ALL(MutableMessage, SINGULAR, MESSAGE);
  ------------------
  |  |  302|  2.81k|  USAGE_CHECK_MESSAGE(METHOD, message);                 \
  |  |  303|  2.81k|  USAGE_CHECK_MESSAGE_TYPE(METHOD);                     \
  |  |  ------------------
  |  |  |  |  286|  2.81k|  USAGE_CHECK_EQ(field->containing_type(), descriptor_, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  262|  2.81k|  USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|  2.81k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 2.81k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|  2.81k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  287|  2.81k|                 "Field does not match message type.");
  |  |  ------------------
  |  |  304|  2.81k|  USAGE_CHECK_##LABEL(METHOD);                          \
  |  |  ------------------
  |  |  |  |  289|  2.81k|  USAGE_CHECK_NE(field->label(), FieldDescriptor::LABEL_REPEATED, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  2.81k|  USAGE_CHECK((A) != (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|  2.81k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 2.81k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|  2.81k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  290|  2.81k|                 "Field is repeated; the method requires a singular field.")
  |  |  ------------------
  |  |  305|  2.81k|  USAGE_CHECK_TYPE(METHOD, CPPTYPE)
  |  |  ------------------
  |  |  |  |  267|  2.81k|  if (field->cpp_type() != FieldDescriptor::CPPTYPE_##CPPTYPE) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (267:7): [True: 0, False: 2.81k]
  |  |  |  |  ------------------
  |  |  |  |  268|  2.81k|  ReportReflectionUsageTypeError(descriptor_, field, #METHOD,  \
  |  |  |  |  269|      0|                                 FieldDescriptor::CPPTYPE_##CPPTYPE)
  |  |  ------------------
  ------------------
 2364|       |
 2365|  2.81k|  if (factory == nullptr) factory = message_factory_;
  ------------------
  |  Branch (2365:7): [True: 2.81k, False: 0]
  ------------------
 2366|       |
 2367|  2.81k|  if (field->is_extension()) {
  ------------------
  |  Branch (2367:7): [True: 0, False: 2.81k]
  ------------------
 2368|      0|    return static_cast<Message*>(
 2369|      0|        MutableExtensionSet(message)->MutableMessage(field, factory));
 2370|  2.81k|  } else {
 2371|  2.81k|    Message* result;
 2372|       |
 2373|  2.81k|    Message** result_holder = MutableRaw<Message*>(message, field);
 2374|       |
 2375|  2.81k|    if (schema_.InRealOneof(field)) {
  ------------------
  |  Branch (2375:9): [True: 0, False: 2.81k]
  ------------------
 2376|      0|      if (!HasOneofField(*message, field)) {
  ------------------
  |  Branch (2376:11): [True: 0, False: 0]
  ------------------
 2377|      0|        ClearOneof(message, field->containing_oneof());
 2378|      0|        result_holder = MutableField<Message*>(message, field);
 2379|      0|        const Message* default_message = GetDefaultMessageInstance(field);
 2380|      0|        *result_holder = default_message->New(message->GetArena());
 2381|      0|      }
 2382|  2.81k|    } else {
 2383|  2.81k|      SetHasBit(message, field);
 2384|  2.81k|    }
 2385|       |
 2386|  2.81k|    if (*result_holder == nullptr) {
  ------------------
  |  Branch (2386:9): [True: 0, False: 2.81k]
  ------------------
 2387|      0|      const Message* default_message = GetDefaultMessageInstance(field);
 2388|      0|      *result_holder = default_message->New(message->GetArena());
 2389|      0|    }
 2390|  2.81k|    result = *result_holder;
 2391|  2.81k|    return result;
 2392|  2.81k|  }
 2393|  2.81k|}
_ZNK6google8protobuf10Reflection18GetRepeatedMessageERKNS0_7MessageEPKNS0_15FieldDescriptorEi:
 2511|  1.13k|                                              int index) const {
 2512|  1.13k|  USAGE_CHECK_ALL(GetRepeatedMessage, REPEATED, MESSAGE);
  ------------------
  |  |  296|  1.13k|  USAGE_CHECK_MESSAGE(METHOD, &message);        \
  |  |  297|  1.13k|  USAGE_CHECK_MESSAGE_TYPE(METHOD);             \
  |  |  ------------------
  |  |  |  |  286|  1.13k|  USAGE_CHECK_EQ(field->containing_type(), descriptor_, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  262|  1.13k|  USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|  1.13k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 1.13k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|  1.13k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  287|  1.13k|                 "Field does not match message type.");
  |  |  ------------------
  |  |  298|  1.13k|  USAGE_CHECK_##LABEL(METHOD);                  \
  |  |  ------------------
  |  |  |  |  292|  1.13k|  USAGE_CHECK_EQ(field->label(), FieldDescriptor::LABEL_REPEATED, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  262|  1.13k|  USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|  1.13k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 1.13k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|  1.13k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  293|  1.13k|                 "Field is singular; the method requires a repeated field.")
  |  |  ------------------
  |  |  299|  1.13k|  USAGE_CHECK_TYPE(METHOD, CPPTYPE)
  |  |  ------------------
  |  |  |  |  267|  1.13k|  if (field->cpp_type() != FieldDescriptor::CPPTYPE_##CPPTYPE) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (267:7): [True: 0, False: 1.13k]
  |  |  |  |  ------------------
  |  |  |  |  268|  1.13k|  ReportReflectionUsageTypeError(descriptor_, field, #METHOD,  \
  |  |  |  |  269|      0|                                 FieldDescriptor::CPPTYPE_##CPPTYPE)
  |  |  ------------------
  ------------------
 2513|       |
 2514|  1.13k|  if (field->is_extension()) {
  ------------------
  |  Branch (2514:7): [True: 0, False: 1.13k]
  ------------------
 2515|      0|    return static_cast<const Message&>(
 2516|      0|        GetExtensionSet(message).GetRepeatedMessage(field->number(), index));
 2517|  1.13k|  } else {
 2518|  1.13k|    if (IsMapFieldInApi(field)) {
  ------------------
  |  Branch (2518:9): [True: 0, False: 1.13k]
  ------------------
 2519|      0|      return GetRaw<MapFieldBase>(message, field)
 2520|      0|          .GetRepeatedField()
 2521|      0|          .Get<GenericTypeHandler<Message> >(index);
 2522|  1.13k|    } else {
 2523|  1.13k|      return GetRaw<RepeatedPtrFieldBase>(message, field)
 2524|  1.13k|          .Get<GenericTypeHandler<Message> >(index);
 2525|  1.13k|    }
 2526|  1.13k|  }
 2527|  1.13k|}
_ZNK6google8protobuf10Reflection22MutableRepeatedMessageEPNS0_7MessageEPKNS0_15FieldDescriptorEi:
 2531|  1.13k|                                            int index) const {
 2532|  1.13k|  USAGE_MUTABLE_CHECK_ALL(MutableRepeatedMessage, REPEATED, MESSAGE);
  ------------------
  |  |  302|  1.13k|  USAGE_CHECK_MESSAGE(METHOD, message);                 \
  |  |  303|  1.13k|  USAGE_CHECK_MESSAGE_TYPE(METHOD);                     \
  |  |  ------------------
  |  |  |  |  286|  1.13k|  USAGE_CHECK_EQ(field->containing_type(), descriptor_, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  262|  1.13k|  USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|  1.13k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 1.13k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|  1.13k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  287|  1.13k|                 "Field does not match message type.");
  |  |  ------------------
  |  |  304|  1.13k|  USAGE_CHECK_##LABEL(METHOD);                          \
  |  |  ------------------
  |  |  |  |  292|  1.13k|  USAGE_CHECK_EQ(field->label(), FieldDescriptor::LABEL_REPEATED, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  262|  1.13k|  USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|  1.13k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 1.13k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|  1.13k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  293|  1.13k|                 "Field is singular; the method requires a repeated field.")
  |  |  ------------------
  |  |  305|  1.13k|  USAGE_CHECK_TYPE(METHOD, CPPTYPE)
  |  |  ------------------
  |  |  |  |  267|  1.13k|  if (field->cpp_type() != FieldDescriptor::CPPTYPE_##CPPTYPE) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (267:7): [True: 0, False: 1.13k]
  |  |  |  |  ------------------
  |  |  |  |  268|  1.13k|  ReportReflectionUsageTypeError(descriptor_, field, #METHOD,  \
  |  |  |  |  269|      0|                                 FieldDescriptor::CPPTYPE_##CPPTYPE)
  |  |  ------------------
  ------------------
 2533|       |
 2534|  1.13k|  if (field->is_extension()) {
  ------------------
  |  Branch (2534:7): [True: 0, False: 1.13k]
  ------------------
 2535|      0|    return static_cast<Message*>(
 2536|      0|        MutableExtensionSet(message)->MutableRepeatedMessage(field->number(),
 2537|      0|                                                             index));
 2538|  1.13k|  } else {
 2539|  1.13k|    if (IsMapFieldInApi(field)) {
  ------------------
  |  Branch (2539:9): [True: 0, False: 1.13k]
  ------------------
 2540|      0|      return MutableRaw<MapFieldBase>(message, field)
 2541|      0|          ->MutableRepeatedField()
 2542|      0|          ->Mutable<GenericTypeHandler<Message> >(index);
 2543|  1.13k|    } else {
 2544|  1.13k|      return MutableRaw<RepeatedPtrFieldBase>(message, field)
 2545|  1.13k|          ->Mutable<GenericTypeHandler<Message> >(index);
 2546|  1.13k|    }
 2547|  1.13k|  }
 2548|  1.13k|}
_ZNK6google8protobuf10Reflection22MutableRawNonOneofImplEPNS0_7MessageEPKNS0_15FieldDescriptorE:
 2825|  3.95k|                                         const FieldDescriptor* field) const {
 2826|  3.95k|  if (PROTOBUF_PREDICT_FALSE(schema_.IsSplit(field))) {
  ------------------
  |  |  365|  3.95k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 3.95k]
  |  |  |  Branch (365:54): [Folded, False: 3.95k]
  |  |  |  Branch (365:63): [True: 0, False: 3.95k]
  |  |  ------------------
  ------------------
 2827|      0|    return MutableRawSplitImpl(message, field);
 2828|      0|  }
 2829|       |
 2830|  3.95k|  const uint32_t field_offset = schema_.GetFieldOffsetNonOneof(field);
 2831|  3.95k|  return GetPointerAtOffset<void>(message, field_offset);
 2832|  3.95k|}
_ZNK6google8protobuf10Reflection14MutableRawImplEPNS0_7MessageEPKNS0_15FieldDescriptorE:
 2835|  3.95k|                                 const FieldDescriptor* field) const {
 2836|  3.95k|  if (PROTOBUF_PREDICT_TRUE(!schema_.InRealOneof(field))) {
  ------------------
  |  |  364|  3.95k|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 3.95k, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 3.95k]
  |  |  |  Branch (364:62): [True: 3.95k, False: 0]
  |  |  ------------------
  ------------------
 2837|  3.95k|    return MutableRawNonOneofImpl(message, field);
 2838|  3.95k|  }
 2839|       |
 2840|       |  // Oneof fields are not split.
 2841|      0|  ABSL_DCHECK(!schema_.IsSplit(field));
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  3.95k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2842|       |
 2843|      0|  const uint32_t field_offset = schema_.GetFieldOffset(field);
 2844|      0|  return GetPointerAtOffset<void>(message, field_offset);
 2845|      0|}
_ZNK6google8protobuf10Reflection10GetHasBitsERKNS0_7MessageE:
 2847|  30.8k|const uint32_t* Reflection::GetHasBits(const Message& message) const {
 2848|  30.8k|  ABSL_DCHECK(schema_.HasHasbits());
  ------------------
  |  |   47|  30.8k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  30.8k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  61.6k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  30.8k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  61.6k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  61.6k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 30.8k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  30.8k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 30.8k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  30.8k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 30.8k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  61.6k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  61.6k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2849|  30.8k|  return &GetConstRefAtOffset<uint32_t>(message, schema_.HasBitsOffset());
 2850|  30.8k|}
_ZNK6google8protobuf10Reflection16HasFieldSingularERKNS0_7MessageEPKNS0_15FieldDescriptorE:
 2954|  30.8k|                                  const FieldDescriptor* field) const {
 2955|  30.8k|  ABSL_DCHECK(!field->options().weak());
  ------------------
  |  |   47|  30.8k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  30.8k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  61.6k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  30.8k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  61.6k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  61.6k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 30.8k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  30.8k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 30.8k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  30.8k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 30.8k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  61.6k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  61.6k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2956|  30.8k|  if (schema_.HasBitIndex(field) != static_cast<uint32_t>(-1)) {
  ------------------
  |  Branch (2956:7): [True: 30.8k, False: 0]
  ------------------
 2957|  30.8k|    return IsIndexInHasBitSet(GetHasBits(message), schema_.HasBitIndex(field));
 2958|  30.8k|  }
 2959|       |
 2960|       |  // proto3: no has-bits. All fields present except messages, which are
 2961|       |  // present only if their message-field pointer is non-null.
 2962|      0|  if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) {
  ------------------
  |  Branch (2962:7): [True: 0, False: 0]
  ------------------
 2963|      0|    return !schema_.IsDefaultInstance(message) &&
  ------------------
  |  Branch (2963:12): [True: 0, False: 0]
  ------------------
 2964|      0|           GetRaw<const Message*>(message, field) != nullptr;
  ------------------
  |  Branch (2964:12): [True: 0, False: 0]
  ------------------
 2965|      0|  } else {
 2966|       |    // Non-message field (and non-oneof, since that was handled in HasField()
 2967|       |    // before calling us), and singular (again, checked in HasField). So, this
 2968|       |    // field must be a scalar.
 2969|       |
 2970|       |    // Scalar primitive (numeric or string/bytes) fields are present if
 2971|       |    // their value is non-zero (numeric) or non-empty (string/bytes). N.B.:
 2972|       |    // we must use this definition here, rather than the "scalar fields
 2973|       |    // always present" in the proto3 docs, because MergeFrom() semantics
 2974|       |    // require presence as "present on wire", and reflection-based merge
 2975|       |    // (which uses HasField()) needs to be consistent with this.
 2976|      0|    switch (field->cpp_type()) {
  ------------------
  |  Branch (2976:13): [True: 0, False: 0]
  ------------------
 2977|      0|      case FieldDescriptor::CPPTYPE_STRING:
  ------------------
  |  Branch (2977:7): [True: 0, False: 0]
  ------------------
 2978|      0|        switch (field->cpp_string_type()) {
  ------------------
  |  Branch (2978:17): [True: 0, False: 0]
  ------------------
 2979|      0|          case FieldDescriptor::CppStringType::kCord:
  ------------------
  |  Branch (2979:11): [True: 0, False: 0]
  ------------------
 2980|      0|            return !GetField<const absl::Cord>(message, field).empty();
 2981|      0|          case FieldDescriptor::CppStringType::kView:
  ------------------
  |  Branch (2981:11): [True: 0, False: 0]
  ------------------
 2982|      0|          case FieldDescriptor::CppStringType::kString: {
  ------------------
  |  Branch (2982:11): [True: 0, False: 0]
  ------------------
 2983|      0|            if (IsInlined(field)) {
  ------------------
  |  Branch (2983:17): [True: 0, False: 0]
  ------------------
 2984|      0|              return !GetField<InlinedStringField>(message, field)
 2985|      0|                          .GetNoArena()
 2986|      0|                          .empty();
 2987|      0|            }
 2988|       |
 2989|      0|            return GetField<ArenaStringPtr>(message, field).Get().size() > 0;
 2990|      0|          }
 2991|      0|        }
 2992|      0|        internal::Unreachable();
 2993|      0|      case FieldDescriptor::CPPTYPE_BOOL:
  ------------------
  |  Branch (2993:7): [True: 0, False: 0]
  ------------------
 2994|      0|        return GetRaw<bool>(message, field) != false;
 2995|      0|      case FieldDescriptor::CPPTYPE_INT32:
  ------------------
  |  Branch (2995:7): [True: 0, False: 0]
  ------------------
 2996|      0|        return GetRaw<int32_t>(message, field) != 0;
 2997|      0|      case FieldDescriptor::CPPTYPE_INT64:
  ------------------
  |  Branch (2997:7): [True: 0, False: 0]
  ------------------
 2998|      0|        return GetRaw<int64_t>(message, field) != 0;
 2999|      0|      case FieldDescriptor::CPPTYPE_UINT32:
  ------------------
  |  Branch (2999:7): [True: 0, False: 0]
  ------------------
 3000|      0|        return GetRaw<uint32_t>(message, field) != 0;
 3001|      0|      case FieldDescriptor::CPPTYPE_UINT64:
  ------------------
  |  Branch (3001:7): [True: 0, False: 0]
  ------------------
 3002|      0|        return GetRaw<uint64_t>(message, field) != 0;
 3003|      0|      case FieldDescriptor::CPPTYPE_FLOAT:
  ------------------
  |  Branch (3003:7): [True: 0, False: 0]
  ------------------
 3004|      0|        static_assert(sizeof(uint32_t) == sizeof(float),
 3005|      0|                      "Code assumes uint32_t and float are the same size.");
 3006|      0|        return GetRaw<uint32_t>(message, field) != 0;
 3007|      0|      case FieldDescriptor::CPPTYPE_DOUBLE:
  ------------------
  |  Branch (3007:7): [True: 0, False: 0]
  ------------------
 3008|      0|        static_assert(sizeof(uint64_t) == sizeof(double),
 3009|      0|                      "Code assumes uint64_t and double are the same size.");
 3010|      0|        return GetRaw<uint64_t>(message, field) != 0;
 3011|      0|      case FieldDescriptor::CPPTYPE_ENUM:
  ------------------
  |  Branch (3011:7): [True: 0, False: 0]
  ------------------
 3012|      0|        return GetRaw<int>(message, field) != 0;
 3013|      0|      case FieldDescriptor::CPPTYPE_MESSAGE:
  ------------------
  |  Branch (3013:7): [True: 0, False: 0]
  ------------------
 3014|       |        // handled above; avoid warning
 3015|      0|        break;
 3016|      0|    }
 3017|      0|    ABSL_LOG(FATAL) << "Reached impossible case in HasFieldSingular().";
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3018|      0|    return false;
 3019|      0|  }
 3020|      0|}
_ZNK6google8protobuf10Reflection9SetHasBitEPNS0_7MessageEPKNS0_15FieldDescriptorE:
 3023|  2.81k|                           const FieldDescriptor* field) const {
 3024|  2.81k|  ABSL_DCHECK(!field->options().weak());
  ------------------
  |  |   47|  2.81k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  2.81k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  5.63k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  2.81k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  5.63k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  5.63k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2.81k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  2.81k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2.81k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  2.81k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2.81k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  5.63k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  5.63k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3025|  2.81k|  const uint32_t index = schema_.HasBitIndex(field);
 3026|  2.81k|  if (index == static_cast<uint32_t>(-1)) return;
  ------------------
  |  Branch (3026:7): [True: 0, False: 2.81k]
  ------------------
 3027|  2.81k|  MutableHasBits(message)[index / 32] |=
 3028|  2.81k|      (static_cast<uint32_t>(1) << (index % 32));
 3029|  2.81k|}
_ZN6google8protobuf8internal14AddDescriptorsEPKNS1_15DescriptorTableE:
 3720|      9|void AddDescriptors(const DescriptorTable* table) {
 3721|       |  // AddDescriptors is not thread safe. Callers need to ensure calls are
 3722|       |  // properly serialized. This function is only called pre-main by global
 3723|       |  // descriptors and we can assume single threaded access or it's called
 3724|       |  // by AssignDescriptorImpl which uses a mutex to sequence calls.
 3725|      9|  if (table->is_initialized) return;
  ------------------
  |  Branch (3725:7): [True: 3, False: 6]
  ------------------
 3726|      6|  table->is_initialized = true;
 3727|      6|  AddDescriptorsImpl(table);
 3728|      6|}
_ZN6google8protobuf8internal30AssignDescriptorsOnceInnerCallEPKNS1_15DescriptorTableE:
 3730|      4|void AssignDescriptorsOnceInnerCall(const DescriptorTable* table) {
 3731|      4|  MaybeInitializeLazyDescriptors(table);
 3732|      4|  AssignDescriptorsImpl(table, table->is_eager);
 3733|      4|}
generated_message_reflection.cc:_ZN6google8protobuf12_GLOBAL__N_115IsMapFieldInApiEPKNS0_15FieldDescriptorE:
   79|  17.6k|bool IsMapFieldInApi(const FieldDescriptor* field) { return field->is_map(); }
generated_message_reflection.cc:_ZN6google8protobuf12_GLOBAL__N_118IsIndexInHasBitSetEPKjj:
 1647|  30.8k|bool IsIndexInHasBitSet(const uint32_t* has_bit_set, uint32_t has_bit_index) {
 1648|  30.8k|  ABSL_DCHECK_NE(has_bit_index, ~0u);
  ------------------
  |  |   76|  30.8k|  ABSL_LOG_INTERNAL_DCHECK_NE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   88|  30.8k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  30.8k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 30.8k]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  30.8k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1649|  30.8k|  return ((has_bit_set[has_bit_index / 32] >> (has_bit_index % 32)) &
 1650|  30.8k|          static_cast<uint32_t>(1)) != 0;
 1651|  30.8k|}
_ZNK6google8protobuf10Reflection14MutableHasBitsEPNS0_7MessageE:
 2852|  2.81k|uint32_t* Reflection::MutableHasBits(Message* message) const {
 2853|  2.81k|  ABSL_DCHECK(schema_.HasHasbits());
  ------------------
  |  |   47|  2.81k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  2.81k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  5.63k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  2.81k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  5.63k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  5.63k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2.81k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  2.81k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2.81k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  2.81k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2.81k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  5.63k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  5.63k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2854|  2.81k|  return GetPointerAtOffset<uint32_t>(message, schema_.HasBitsOffset());
 2855|  2.81k|}
generated_message_reflection.cc:_ZN6google8protobuf12_GLOBAL__N_118AddDescriptorsImplEPKNS0_8internal15DescriptorTableE:
 3697|      6|void AddDescriptorsImpl(const DescriptorTable* table) {
 3698|       |  // Reflection refers to the default fields so make sure they are initialized.
 3699|      6|  internal::InitProtobufDefaults();
 3700|      6|  internal::InitializeFileDescriptorDefaultInstances();
 3701|      6|  internal::InitializeLazyExtensionSet();
 3702|       |
 3703|       |  // Ensure all dependent descriptors are registered to the generated descriptor
 3704|       |  // pool and message factory.
 3705|      6|  int num_deps = table->num_deps;
 3706|      7|  for (int i = 0; i < num_deps; i++) {
  ------------------
  |  Branch (3706:19): [True: 1, False: 6]
  ------------------
 3707|       |    // In case of weak fields deps[i] could be null.
 3708|      1|    if (table->deps[i]) AddDescriptors(table->deps[i]);
  ------------------
  |  Branch (3708:9): [True: 1, False: 0]
  ------------------
 3709|      1|  }
 3710|       |
 3711|       |  // Register the descriptor of this file.
 3712|      6|  DescriptorPool::InternalAddGeneratedFile(table->descriptor, table->size);
 3713|      6|  MessageFactory::InternalRegisterGeneratedFile(table);
 3714|      6|}
generated_message_reflection.cc:_ZN6google8protobuf12_GLOBAL__N_130MaybeInitializeLazyDescriptorsEPKNS0_8internal15DescriptorTableE:
 3690|      4|void MaybeInitializeLazyDescriptors(const DescriptorTable* table) {
 3691|      4|  if (!IsLazilyInitializedFile(table->filename)) {
  ------------------
  |  Branch (3691:7): [True: 2, False: 2]
  ------------------
 3692|       |    // Ensure the generated pool has been lazily initialized.
 3693|      2|    DescriptorPool::generated_pool();
 3694|      2|  }
 3695|      4|}
generated_message_reflection.cc:_ZN6google8protobuf12_GLOBAL__N_121AssignDescriptorsImplEPKNS0_8internal15DescriptorTableEb:
 3631|      4|void AssignDescriptorsImpl(const DescriptorTable* table, bool eager) {
 3632|       |  // Ensure the file descriptor is added to the pool.
 3633|      4|  {
 3634|       |    // This only happens once per proto file. So a global mutex to serialize
 3635|       |    // calls to AddDescriptors.
 3636|      4|    static absl::Mutex mu{absl::kConstInit};
 3637|      4|    mu.Lock();
 3638|      4|    AddDescriptors(table);
 3639|      4|    mu.Unlock();
 3640|      4|  }
 3641|      4|  if (eager) {
  ------------------
  |  Branch (3641:7): [True: 0, False: 4]
  ------------------
 3642|       |    // Normally we do not want to eagerly build descriptors of our deps.
 3643|       |    // However if this proto is optimized for code size (ie using reflection)
 3644|       |    // and it has a message extending a custom option of a descriptor with that
 3645|       |    // message being optimized for code size as well. Building the descriptors
 3646|       |    // in this file requires parsing the serialized file descriptor, which now
 3647|       |    // requires parsing the message extension, which potentially requires
 3648|       |    // building the descriptor of the message extending one of the options.
 3649|       |    // However we are already updating descriptor pool under a lock. To prevent
 3650|       |    // this the compiler statically looks for this case and we just make sure we
 3651|       |    // first build the descriptors of all our dependencies, preventing the
 3652|       |    // deadlock.
 3653|      0|    int num_deps = table->num_deps;
 3654|      0|    for (int i = 0; i < num_deps; i++) {
  ------------------
  |  Branch (3654:21): [True: 0, False: 0]
  ------------------
 3655|       |      // In case of weak fields deps[i] could be null.
 3656|      0|      if (table->deps[i]) {
  ------------------
  |  Branch (3656:11): [True: 0, False: 0]
  ------------------
 3657|      0|        absl::call_once(*table->deps[i]->once, AssignDescriptorsImpl,
 3658|      0|                        table->deps[i],
 3659|      0|                        /*eager=*/true);
 3660|      0|      }
 3661|      0|    }
 3662|      0|  }
 3663|       |
 3664|       |  // Fill the arrays with pointers to descriptors and reflection classes.
 3665|      4|  const FileDescriptor* file =
 3666|      4|      DescriptorPool::internal_generated_pool()->FindFileByName(
 3667|      4|          table->filename);
 3668|      4|  ABSL_CHECK(file != nullptr);
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3669|       |
 3670|      4|  MessageFactory* factory = MessageFactory::generated_factory();
 3671|       |
 3672|      4|  AssignDescriptorsHelper helper(factory, table->file_level_enum_descriptors,
 3673|      4|                                 table->schemas, table->default_instances,
 3674|      4|                                 table->offsets);
 3675|       |
 3676|     41|  for (int i = 0; i < file->message_type_count(); i++) {
  ------------------
  |  Branch (3676:19): [True: 37, False: 4]
  ------------------
 3677|     37|    helper.AssignMessageDescriptor(file->message_type(i));
 3678|     37|  }
 3679|       |
 3680|     11|  for (int i = 0; i < file->enum_type_count(); i++) {
  ------------------
  |  Branch (3680:19): [True: 7, False: 4]
  ------------------
 3681|      7|    helper.AssignEnumDescriptor(file->enum_type(i));
 3682|      7|  }
 3683|      4|  if (file->options().cc_generic_services()) {
  ------------------
  |  Branch (3683:7): [True: 0, False: 4]
  ------------------
 3684|      0|    for (int i = 0; i < file->service_count(); i++) {
  ------------------
  |  Branch (3684:21): [True: 0, False: 0]
  ------------------
 3685|      0|      table->file_level_service_descriptors[i] = file->service(i);
 3686|      0|    }
 3687|      0|  }
 3688|      4|}
_ZN6google8protobuf23AssignDescriptorsHelperC2EPNS0_14MessageFactoryEPPKNS0_14EnumDescriptorEPKNS0_8internal15MigrationSchemaEPKPKNS0_7MessageEPKj:
 3582|      4|      : factory_(factory),
 3583|      4|        file_level_enum_descriptors_(file_level_enum_descriptors),
 3584|      4|        schemas_(schemas),
 3585|      4|        default_instance_data_(default_instance_data),
 3586|      4|        offsets_(offsets) {}
_ZN6google8protobuf23AssignDescriptorsHelper23AssignMessageDescriptorEPKNS0_10DescriptorE:
 3588|     47|  void AssignMessageDescriptor(const Descriptor* descriptor) {
 3589|     57|    for (int i = 0; i < descriptor->nested_type_count(); i++) {
  ------------------
  |  Branch (3589:21): [True: 10, False: 47]
  ------------------
 3590|     10|      AssignMessageDescriptor(descriptor->nested_type(i));
 3591|     10|    }
 3592|       |
 3593|       |    // If there is no default instance we only want to initialize the descriptor
 3594|       |    // without updating the reflection.
 3595|     47|    if (default_instance_data_[0] != nullptr) {
  ------------------
  |  Branch (3595:9): [True: 47, False: 0]
  ------------------
 3596|     47|      auto& class_data = default_instance_data_[0]->GetClassData()->full();
 3597|       |      // If there is no descriptor_table in the class data, then it is not
 3598|       |      // interested in receiving reflection information either.
 3599|     47|      if (class_data.descriptor_table != nullptr) {
  ------------------
  |  Branch (3599:11): [True: 47, False: 0]
  ------------------
 3600|     47|        class_data.descriptor = descriptor;
 3601|       |
 3602|     47|        class_data.reflection = OnShutdownDelete(new Reflection(
 3603|     47|            descriptor,
 3604|     47|            MigrationToReflectionSchema(default_instance_data_, offsets_,
 3605|     47|                                        *schemas_),
 3606|     47|            DescriptorPool::internal_generated_pool(), factory_));
 3607|     47|      }
 3608|     47|    }
 3609|     64|    for (int i = 0; i < descriptor->enum_type_count(); i++) {
  ------------------
  |  Branch (3609:21): [True: 17, False: 47]
  ------------------
 3610|     17|      AssignEnumDescriptor(descriptor->enum_type(i));
 3611|     17|    }
 3612|     47|    schemas_++;
 3613|     47|    default_instance_data_++;
 3614|     47|  }
generated_message_reflection.cc:_ZN6google8protobuf12_GLOBAL__N_127MigrationToReflectionSchemaEPKPKNS0_7MessageEPKjNS0_8internal15MigrationSchemaE:
 3549|     47|    MigrationSchema migration_schema) {
 3550|     47|  ReflectionSchema result;
 3551|     47|  result.default_instance_ = *default_instance;
 3552|       |  // First 9 offsets are offsets to the special fields. The following offsets
 3553|       |  // are the proto fields.
 3554|       |  //
 3555|       |  // TODO: Find a way to not encode sizeof_split_ in offsets.
 3556|     47|  result.offsets_ = offsets + migration_schema.offsets_index + 8;
 3557|     47|  result.has_bit_indices_ = offsets + migration_schema.has_bit_indices_index;
 3558|     47|  result.has_bits_offset_ = offsets[migration_schema.offsets_index + 0];
 3559|     47|  result.metadata_offset_ = offsets[migration_schema.offsets_index + 1];
 3560|     47|  result.extensions_offset_ = offsets[migration_schema.offsets_index + 2];
 3561|     47|  result.oneof_case_offset_ = offsets[migration_schema.offsets_index + 3];
 3562|     47|  result.object_size_ = migration_schema.object_size;
 3563|     47|  result.weak_field_map_offset_ = offsets[migration_schema.offsets_index + 4];
 3564|     47|  result.inlined_string_donated_offset_ =
 3565|     47|      offsets[migration_schema.offsets_index + 5];
 3566|     47|  result.split_offset_ = offsets[migration_schema.offsets_index + 6];
 3567|     47|  result.sizeof_split_ = offsets[migration_schema.offsets_index + 7];
 3568|     47|  result.inlined_string_indices_ =
 3569|     47|      offsets + migration_schema.inlined_string_indices_index;
 3570|     47|  return result;
 3571|     47|}
_ZN6google8protobuf23AssignDescriptorsHelper20AssignEnumDescriptorEPKNS0_14EnumDescriptorE:
 3616|     24|  void AssignEnumDescriptor(const EnumDescriptor* descriptor) {
 3617|     24|    *file_level_enum_descriptors_ = descriptor;
 3618|     24|    file_level_enum_descriptors_++;
 3619|     24|  }

_ZNK6google8protobuf8internal16ReflectionSchema11InRealOneofEPKNS0_15FieldDescriptorE:
  117|  59.8k|  bool InRealOneof(const FieldDescriptor* field) const {
  118|  59.8k|    return field->real_containing_oneof();
  119|  59.8k|  }
_ZNK6google8protobuf8internal16ReflectionSchema22GetFieldOffsetNonOneofEPKNS0_15FieldDescriptorE:
  123|  23.3k|  uint32_t GetFieldOffsetNonOneof(const FieldDescriptor* field) const {
  124|  23.3k|    ABSL_DCHECK(!InRealOneof(field));
  ------------------
  |  |   47|  23.3k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  23.3k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  46.6k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  23.3k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  46.6k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  46.6k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 23.3k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  23.3k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 23.3k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  23.3k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 23.3k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  46.6k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  46.6k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  125|  23.3k|    return OffsetValue(offsets_[field->index()], field->type());
  126|  23.3k|  }
_ZNK6google8protobuf8internal16ReflectionSchema11HasBitIndexEPKNS0_15FieldDescriptorE:
  154|  64.4k|  uint32_t HasBitIndex(const FieldDescriptor* field) const {
  155|  64.4k|    if (has_bits_offset_ == -1) return static_cast<uint32_t>(-1);
  ------------------
  |  Branch (155:9): [True: 0, False: 64.4k]
  ------------------
  156|  64.4k|    ABSL_DCHECK(HasHasbits());
  ------------------
  |  |   47|  64.4k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  64.4k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|   193k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  64.4k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|   128k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|   128k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 64.4k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  64.4k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 64.4k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  64.4k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 64.4k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|   193k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|   193k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  157|  64.4k|    return has_bit_indices_[field->index()];
  158|  64.4k|  }
_ZNK6google8protobuf8internal16ReflectionSchema13HasBitsOffsetEv:
  161|  33.6k|  uint32_t HasBitsOffset() const {
  162|  33.6k|    ABSL_DCHECK(HasHasbits());
  ------------------
  |  |   47|  33.6k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  33.6k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  67.3k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  33.6k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  67.3k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  67.3k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 33.6k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  33.6k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 33.6k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  33.6k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 33.6k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  67.3k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  67.3k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  163|  33.6k|    return static_cast<uint32_t>(has_bits_offset_);
  164|  33.6k|  }
_ZNK6google8protobuf8internal16ReflectionSchema7IsSplitEPKNS0_15FieldDescriptorE:
  222|  23.3k|  bool IsSplit(const FieldDescriptor* field) const {
  223|  23.3k|    return split_offset_ != -1 &&
  ------------------
  |  Branch (223:12): [True: 0, False: 23.3k]
  ------------------
  224|      0|           (offsets_[field->index()] & kSplitFieldOffsetMask) != 0;
  ------------------
  |  Branch (224:12): [True: 0, False: 0]
  ------------------
  225|  23.3k|  }
_ZN6google8protobuf8internal16ReflectionSchema11OffsetValueEjNS1_19FieldDescriptorLite4TypeE:
  263|  23.3k|  static uint32_t OffsetValue(uint32_t v, FieldDescriptor::Type type) {
  264|  23.3k|    if (type == FieldDescriptor::TYPE_MESSAGE ||
  ------------------
  |  Branch (264:9): [True: 23.3k, False: 0]
  ------------------
  265|      0|        type == FieldDescriptor::TYPE_STRING ||
  ------------------
  |  Branch (265:9): [True: 0, False: 0]
  ------------------
  266|  23.3k|        type == FieldDescriptor::TYPE_BYTES) {
  ------------------
  |  Branch (266:9): [True: 0, False: 0]
  ------------------
  267|  23.3k|      return v & (~kSplitFieldOffsetMask) & (~kInlinedMask) & (~kLazyMask);
  268|  23.3k|    }
  269|      0|    return v & (~kSplitFieldOffsetMask);
  270|  23.3k|  }

_ZN6google8protobuf8internal11TcFieldDataC2ENS2_11DefaultInitE:
   64|  38.5k|  TcFieldData(DefaultInit) {}  // NOLINT(google-explicit-constructor)
_ZNK6google8protobuf8internal11TcFieldData10hasbit_idxEv:
   85|  14.0k|  uint8_t hasbit_idx() const { return static_cast<uint8_t>(data >> 16); }
_ZNK6google8protobuf8internal11TcFieldData7aux_idxEv:
   86|  9.94k|  uint8_t aux_idx() const { return static_cast<uint8_t>(data >> 24); }
_ZNK6google8protobuf8internal11TcFieldData6offsetEv:
   87|  16.3k|  uint16_t offset() const { return static_cast<uint16_t>(data >> 48); }
_ZNK6google8protobuf8internal11TcFieldData3tagEv:
  122|  2.40k|  uint32_t tag() const { return static_cast<uint32_t>(data); }
_ZNK6google8protobuf8internal11TcFieldData12entry_offsetEv:
  123|  1.28k|  uint32_t entry_offset() const { return static_cast<uint32_t>(data >> 32); }
_ZNK6google8protobuf8internal16TcParseTableBase14FastFieldEntry6targetEv:
  370|  17.5k|    TailCallParseFunc target() const {
  371|  17.5k|      return target_atomic.load(std::memory_order_relaxed);
  372|  17.5k|    }
_ZNK6google8protobuf8internal16TcParseTableBase10fast_entryEm:
  378|  17.5k|  const FastFieldEntry* fast_entry(size_t idx) const {
  379|  17.5k|    return reinterpret_cast<const FastFieldEntry*>(this + 1) + idx;
  380|  17.5k|  }
_ZNK6google8protobuf8internal16TcParseTableBase18field_lookup_beginEv:
  386|     15|  const uint16_t* field_lookup_begin() const {
  387|     15|    return reinterpret_cast<const uint16_t*>(reinterpret_cast<uintptr_t>(this) +
  388|     15|                                             lookup_table_offset);
  389|     15|  }
_ZNK6google8protobuf8internal16TcParseTableBase19field_entries_beginEv:
  406|  1.23k|  const FieldEntry* field_entries_begin() const {
  407|  1.23k|    return reinterpret_cast<const FieldEntry*>(
  408|  1.23k|        reinterpret_cast<uintptr_t>(this) + field_entries_offset);
  409|  1.23k|  }
_ZN6google8protobuf8internal16TcParseTableBase8FieldAuxC2Ev:
  420|     27|    constexpr FieldAux() : message_default_p(nullptr) {}
_ZNK6google8protobuf8internal16TcParseTableBase9field_auxEj:
  451|  3.87k|  const FieldAux* field_aux(uint32_t idx) const {
  452|  3.87k|    return reinterpret_cast<const FieldAux*>(reinterpret_cast<uintptr_t>(this) +
  453|  3.87k|                                             aux_offset) +
  454|  3.87k|           idx;
  455|  3.87k|  }
_ZNK6google8protobuf8internal16TcParseTableBase9field_auxEPKNS2_10FieldEntryE:
  461|     88|  const FieldAux* field_aux(const FieldEntry* entry) const {
  462|     88|    return field_aux(entry->aux_idx);
  463|     88|  }
_ZNK6google8protobuf8internal16TcParseTableBase16default_instanceEv:
  477|      8|  const MessageLite* default_instance() const { return class_data->prototype; }
_ZNK6google8protobuf8internal11TcFieldData9coded_tagIhEET_v:
   82|  17.4k|  TagType coded_tag() const {
   83|  17.4k|    return static_cast<TagType>(data);
   84|  17.4k|  }
_ZNK6google8protobuf8internal11TcFieldData9coded_tagItEET_v:
   82|    101|  TagType coded_tag() const {
   83|    101|    return static_cast<TagType>(data);
   84|    101|  }

_ZN6google8protobuf8internal8TcParser15GenericFallbackEPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
   49|      8|const char* TcParser::GenericFallback(PROTOBUF_TC_PARAM_DECL) {
   50|      8|  PROTOBUF_MUSTTAIL return GenericFallbackImpl<Message, UnknownFieldSet>(
  ------------------
  |  |  236|      8|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
   51|      8|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      8|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
   52|      8|}

_ZN6google8protobuf8internal8TcParser11SyncHasbitsEPNS0_11MessageLiteEmPKNS1_16TcParseTableBaseE:
  860|  8.55k|      MessageLite* msg, uint64_t hasbits, const TcParseTableBase* table) {
  861|  8.55k|    const uint32_t has_bits_offset = table->has_bits_offset;
  862|  8.55k|    if (has_bits_offset) {
  ------------------
  |  Branch (862:9): [True: 7.00k, False: 1.54k]
  ------------------
  863|       |      // Only the first 32 has-bits are updated. Nothing above those is stored,
  864|       |      // but e.g. messages without has-bits update the upper bits.
  865|  7.00k|      RefAt<uint32_t>(msg, has_bits_offset) |= static_cast<uint32_t>(hasbits);
  866|  7.00k|    }
  867|  8.55k|  }
_ZN6google8protobuf8internal8TcParser11TagDispatchEPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1098|  17.5k|    PROTOBUF_TC_PARAM_NO_DATA_DECL) {
 1099|  17.5k|  const auto coded_tag = UnalignedLoad<uint16_t>(ptr);
 1100|  17.5k|  const size_t idx = coded_tag & table->fast_idx_mask;
 1101|  17.5k|  PROTOBUF_ASSUME((idx & 7) == 0);
  ------------------
  |  |  941|  17.5k|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
 1102|  17.5k|  auto* fast_entry = table->fast_entry(idx >> 3);
 1103|  17.5k|  TcFieldData data = fast_entry->bits;
 1104|  17.5k|  data.data ^= coded_tag;
 1105|  17.5k|  PROTOBUF_MUSTTAIL return fast_entry->target()(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|  17.5k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return fast_entry->target()(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|  17.5k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1106|  17.5k|}
_ZN6google8protobuf8internal8TcParser13ToTagDispatchEPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1114|  12.9k|    PROTOBUF_TC_PARAM_NO_DATA_DECL) {
 1115|  12.9k|  constexpr bool always_return = !PROTOBUF_TAILCALL;
  ------------------
  |  |  237|  12.9k|#define PROTOBUF_TAILCALL true
  ------------------
 1116|  12.9k|  if (always_return || !ctx->DataAvailable(ptr)) {
  ------------------
  |  Branch (1116:7): [Folded, False: 12.9k]
  |  Branch (1116:24): [True: 3.97k, False: 8.98k]
  ------------------
 1117|  3.97k|    PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|  3.97k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|  3.97k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1118|  3.97k|  }
 1119|  8.98k|  PROTOBUF_MUSTTAIL return TagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|  8.98k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return TagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|  8.98k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1120|  12.9k|}
_ZN6google8protobuf8internal8TcParser11ToParseLoopEPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1123|  5.55k|    PROTOBUF_TC_PARAM_NO_DATA_DECL) {
 1124|  5.55k|  (void)ctx;
 1125|  5.55k|  SyncHasbits(msg, hasbits, table);
 1126|  5.55k|  return ptr;
 1127|  5.55k|}
_ZN6google8protobuf8internal8TcParser9ParseLoopEPNS0_11MessageLiteEPKcPNS1_12ParseContextEPKNS1_16TcParseTableBaseE:
 1131|  7.93k|    const TcParseTableBase* table) {
 1132|       |  // Note: TagDispatch uses a dispatch table at "&table->fast_entries".
 1133|       |  // For fast dispatch, we'd like to have a pointer to that, but if we use
 1134|       |  // that expression, there's no easy way to get back to "table", which we also
 1135|       |  // need during dispatch.  It turns out that "table + 1" points exactly to
 1136|       |  // fast_entries, so we just increment table by 1 here, to get the register
 1137|       |  // holding the value we want.
 1138|  7.93k|  table += 1;
 1139|  16.4k|  while (!ctx->Done(&ptr)) {
  ------------------
  |  Branch (1139:10): [True: 8.55k, False: 7.93k]
  ------------------
 1140|  8.55k|#if defined(__GNUC__)
 1141|       |    // Note: this asm prevents the compiler (clang, specifically) from
 1142|       |    // believing (thanks to CSE) that it needs to dedicate a register both
 1143|       |    // to "table" and "&table->fast_entries".
 1144|       |    // TODO: remove this asm
 1145|  8.55k|    asm("" : "+r"(table));
 1146|  8.55k|#endif
 1147|  8.55k|    ptr = TagDispatch(msg, ptr, ctx, TcFieldData::DefaultInit(), table - 1, 0);
 1148|  8.55k|    if (ptr == nullptr) break;
  ------------------
  |  Branch (1148:9): [True: 0, False: 8.55k]
  ------------------
 1149|  8.55k|    if (ctx->LastTag() != 1) break;  // Ended on terminating tag
  ------------------
  |  Branch (1149:9): [True: 0, False: 8.55k]
  ------------------
 1150|  8.55k|  }
 1151|  7.93k|  table -= 1;
 1152|  7.93k|  if (ABSL_PREDICT_FALSE(table->has_post_loop_handler)) {
  ------------------
  |  |  178|  7.93k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 7.93k]
  |  |  |  Branch (178:49): [Folded, False: 7.93k]
  |  |  |  Branch (178:58): [True: 0, False: 7.93k]
  |  |  ------------------
  ------------------
 1153|      0|    return table->post_loop_handler(msg, ptr, ctx);
 1154|      0|  }
 1155|  7.93k|  return ptr;
 1156|  7.93k|}
_ZN6google8protobuf8internal8TcParser5RefAtIjEERT_Pvm:
  714|  13.1k|  static inline T& RefAt(void* x, size_t offset) {
  715|  13.1k|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  716|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  717|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  718|       |    // not respect the alignment as expressed by `alignof(T)`
  719|       |    if (PROTOBUF_PREDICT_FALSE(
  720|       |            reinterpret_cast<uintptr_t>(target) % alignof(T) != 0)) {
  721|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  722|       |                reinterpret_cast<uintptr_t>(target));
  723|       |      // Explicit abort to let compilers know this code-path does not return
  724|       |      abort();
  725|       |    }
  726|       |#endif
  727|  13.1k|    return *target;
  728|  13.1k|  }
_ZN6google8protobuf8internal8TcParser5RefAtINS1_12ExtensionSetEEERT_Pvm:
  714|      8|  static inline T& RefAt(void* x, size_t offset) {
  715|      8|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  716|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  717|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  718|       |    // not respect the alignment as expressed by `alignof(T)`
  719|       |    if (PROTOBUF_PREDICT_FALSE(
  720|       |            reinterpret_cast<uintptr_t>(target) % alignof(T) != 0)) {
  721|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  722|       |                reinterpret_cast<uintptr_t>(target));
  723|       |      // Explicit abort to let compilers know this code-path does not return
  724|       |      abort();
  725|       |    }
  726|       |#endif
  727|      8|    return *target;
  728|      8|  }
_ZN6google8protobuf8internal8TcParser5RefAtINS1_16TcParseTableBase10FieldEntryEEERKT_PKvm:
  731|  1.28k|  static inline const T& RefAt(const void* x, size_t offset) {
  732|  1.28k|    const T* target =
  733|  1.28k|        reinterpret_cast<const T*>(static_cast<const char*>(x) + offset);
  734|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  735|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  736|       |    // not respect the alignment as expressed by `alignof(T)`
  737|       |    if (PROTOBUF_PREDICT_FALSE(
  738|       |            reinterpret_cast<uintptr_t>(target) % alignof(T) != 0)) {
  739|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  740|       |                reinterpret_cast<uintptr_t>(target));
  741|       |      // Explicit abort to let compilers know this code-path does not return
  742|       |      abort();
  743|       |    }
  744|       |#endif
  745|  1.28k|    return *target;
  746|  1.28k|  }
_ZN6google8protobuf8internal8TcParser29MaybeCreateRepeatedFieldRefAtIjLb0EEERNS0_13RepeatedFieldIT_EEPvmPNS0_11MessageLiteE:
  767|     27|      void* x, size_t offset, MessageLite* msg) {
  768|     27|    return MaybeCreateRepeatedRefAt<RepeatedField<T>, is_split>(x, offset, msg);
  769|     27|  }
_ZN6google8protobuf8internal8TcParser24MaybeCreateRepeatedRefAtINS0_13RepeatedFieldIjEELb0EEERT_PvmPNS0_11MessageLiteE:
  756|     27|                                            MessageLite* msg) {
  757|     27|    if (!is_split) return RefAt<T>(x, offset);
  ------------------
  |  Branch (757:9): [True: 27, Folded]
  ------------------
  758|      0|    void*& ptr = RefAt<void*>(x, offset);
  759|      0|    if (ptr == DefaultRawPtr()) {
  ------------------
  |  Branch (759:9): [True: 0, False: 0]
  ------------------
  760|      0|      ptr = Arena::Create<T>(msg->GetArena());
  761|      0|    }
  762|      0|    return *static_cast<T*>(ptr);
  763|     27|  }
_ZN6google8protobuf8internal8TcParser5RefAtINS0_13RepeatedFieldIjEEEERT_Pvm:
  714|    128|  static inline T& RefAt(void* x, size_t offset) {
  715|    128|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  716|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  717|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  718|       |    // not respect the alignment as expressed by `alignof(T)`
  719|       |    if (PROTOBUF_PREDICT_FALSE(
  720|       |            reinterpret_cast<uintptr_t>(target) % alignof(T) != 0)) {
  721|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  722|       |                reinterpret_cast<uintptr_t>(target));
  723|       |      // Explicit abort to let compilers know this code-path does not return
  724|       |      abort();
  725|       |    }
  726|       |#endif
  727|    128|    return *target;
  728|    128|  }
_ZN6google8protobuf8internal8TcParser5RefAtImEERT_Pvm:
  714|    339|  static inline T& RefAt(void* x, size_t offset) {
  715|    339|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  716|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  717|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  718|       |    // not respect the alignment as expressed by `alignof(T)`
  719|       |    if (PROTOBUF_PREDICT_FALSE(
  720|       |            reinterpret_cast<uintptr_t>(target) % alignof(T) != 0)) {
  721|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  722|       |                reinterpret_cast<uintptr_t>(target));
  723|       |      // Explicit abort to let compilers know this code-path does not return
  724|       |      abort();
  725|       |    }
  726|       |#endif
  727|    339|    return *target;
  728|    339|  }
_ZN6google8protobuf8internal8TcParser5RefAtINS0_16RepeatedPtrFieldINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEERT_Pvm:
  714|  1.29k|  static inline T& RefAt(void* x, size_t offset) {
  715|  1.29k|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  716|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  717|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  718|       |    // not respect the alignment as expressed by `alignof(T)`
  719|       |    if (PROTOBUF_PREDICT_FALSE(
  720|       |            reinterpret_cast<uintptr_t>(target) % alignof(T) != 0)) {
  721|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  722|       |                reinterpret_cast<uintptr_t>(target));
  723|       |      // Explicit abort to let compilers know this code-path does not return
  724|       |      abort();
  725|       |    }
  726|       |#endif
  727|  1.29k|    return *target;
  728|  1.29k|  }
_ZN6google8protobuf8internal8TcParser5RefAtINS1_20RepeatedPtrFieldBaseEEERT_Pvm:
  714|    832|  static inline T& RefAt(void* x, size_t offset) {
  715|    832|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  716|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  717|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  718|       |    // not respect the alignment as expressed by `alignof(T)`
  719|       |    if (PROTOBUF_PREDICT_FALSE(
  720|       |            reinterpret_cast<uintptr_t>(target) % alignof(T) != 0)) {
  721|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  722|       |                reinterpret_cast<uintptr_t>(target));
  723|       |      // Explicit abort to let compilers know this code-path does not return
  724|       |      abort();
  725|       |    }
  726|       |#endif
  727|    832|    return *target;
  728|    832|  }
_ZN6google8protobuf8internal8TcParser5RefAtIbEERT_Pvm:
  714|    111|  static inline T& RefAt(void* x, size_t offset) {
  715|    111|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  716|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  717|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  718|       |    // not respect the alignment as expressed by `alignof(T)`
  719|       |    if (PROTOBUF_PREDICT_FALSE(
  720|       |            reinterpret_cast<uintptr_t>(target) % alignof(T) != 0)) {
  721|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  722|       |                reinterpret_cast<uintptr_t>(target));
  723|       |      // Explicit abort to let compilers know this code-path does not return
  724|       |      abort();
  725|       |    }
  726|       |#endif
  727|    111|    return *target;
  728|    111|  }
_ZN6google8protobuf8internal8TcParser5RefAtIiEERT_Pvm:
  714|  1.18k|  static inline T& RefAt(void* x, size_t offset) {
  715|  1.18k|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  716|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  717|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  718|       |    // not respect the alignment as expressed by `alignof(T)`
  719|       |    if (PROTOBUF_PREDICT_FALSE(
  720|       |            reinterpret_cast<uintptr_t>(target) % alignof(T) != 0)) {
  721|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  722|       |                reinterpret_cast<uintptr_t>(target));
  723|       |      // Explicit abort to let compilers know this code-path does not return
  724|       |      abort();
  725|       |    }
  726|       |#endif
  727|  1.18k|    return *target;
  728|  1.18k|  }
_ZN6google8protobuf8internal8TcParser5RefAtINS1_14ArenaStringPtrEEERT_Pvm:
  714|  5.79k|  static inline T& RefAt(void* x, size_t offset) {
  715|  5.79k|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  716|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  717|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  718|       |    // not respect the alignment as expressed by `alignof(T)`
  719|       |    if (PROTOBUF_PREDICT_FALSE(
  720|       |            reinterpret_cast<uintptr_t>(target) % alignof(T) != 0)) {
  721|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  722|       |                reinterpret_cast<uintptr_t>(target));
  723|       |      // Explicit abort to let compilers know this code-path does not return
  724|       |      abort();
  725|       |    }
  726|       |#endif
  727|  5.79k|    return *target;
  728|  5.79k|  }
_ZN6google8protobuf8internal8TcParser5RefAtIPNS0_11MessageLiteEEERT_Pvm:
  714|  2.89k|  static inline T& RefAt(void* x, size_t offset) {
  715|  2.89k|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  716|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  717|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  718|       |    // not respect the alignment as expressed by `alignof(T)`
  719|       |    if (PROTOBUF_PREDICT_FALSE(
  720|       |            reinterpret_cast<uintptr_t>(target) % alignof(T) != 0)) {
  721|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  722|       |                reinterpret_cast<uintptr_t>(target));
  723|       |      // Explicit abort to let compilers know this code-path does not return
  724|       |      abort();
  725|       |    }
  726|       |#endif
  727|  2.89k|    return *target;
  728|  2.89k|  }
_ZN6google8protobuf8internal8TcParser19GenericFallbackImplINS0_7MessageENS0_15UnknownFieldSetEEEPKcPNS0_11MessageLiteES7_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  906|      8|  PROTOBUF_CC static const char* GenericFallbackImpl(PROTOBUF_TC_PARAM_DECL) {
  907|      8|    if (PROTOBUF_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  365|      8|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 8]
  |  |  |  Branch (365:54): [Folded, False: 8]
  |  |  |  Branch (365:63): [True: 0, False: 8]
  |  |  ------------------
  ------------------
  908|       |      // This is the ABI used by GetUnknownFieldOps(). Return the vtable.
  909|      0|      static constexpr UnknownFieldOps kOps = {
  910|      0|          WriteVarintToUnknown<UnknownFieldsT>,
  911|      0|          WriteLengthDelimitedToUnknown<UnknownFieldsT>};
  912|      0|      return reinterpret_cast<const char*>(&kOps);
  913|      0|    }
  914|       |
  915|      8|    SyncHasbits(msg, hasbits, table);
  916|      8|    uint32_t tag = data.tag();
  917|      8|    if ((tag & 7) == WireFormatLite::WIRETYPE_END_GROUP || tag == 0) {
  ------------------
  |  Branch (917:9): [True: 0, False: 8]
  |  Branch (917:60): [True: 0, False: 8]
  ------------------
  918|      0|      ctx->SetLastTag(tag);
  919|      0|      return ptr;
  920|      0|    }
  921|       |
  922|      8|    if (table->extension_offset != 0) {
  ------------------
  |  Branch (922:9): [True: 8, False: 0]
  ------------------
  923|       |      // We don't need to check the extension ranges. If it is not an extension
  924|       |      // it will be handled just like if it was an unknown extension: sent to
  925|       |      // the unknown field set.
  926|      8|      return RefAt<ExtensionSet>(msg, table->extension_offset)
  927|      8|          .ParseField(
  928|      8|              tag, ptr,
  929|      8|              static_cast<const MessageBaseT*>(table->default_instance()),
  930|      8|              &msg->_internal_metadata_, ctx);
  931|      8|    } else {
  932|       |      // Otherwise, we directly put it on the unknown field set.
  933|      0|      return UnknownFieldParse(
  934|      0|          tag,
  935|      0|          msg->_internal_metadata_.mutable_unknown_fields<UnknownFieldsT>(),
  936|      0|          ptr, ctx);
  937|      0|    }
  938|      8|  }

_ZN6google8protobuf8internal8TcParser21ParseLoopPreserveNoneEPNS0_11MessageLiteEPKcPNS1_12ParseContextEPKNS1_16TcParseTableBaseE:
   82|     27|    const TcParseTableBase* table) {
   83|     27|  return ParseLoop(msg, ptr, ctx, table);
   84|     27|}
_ZN6google8protobuf8internal8TcParser14FindFieldEntryEPKNS1_16TcParseTableBaseEj:
  138|  1.23k|    const TcParseTableBase* table, uint32_t field_num) {
  139|  1.23k|  const FieldEntry* const field_entries = table->field_entries_begin();
  140|       |
  141|  1.23k|  uint32_t fstart = 1;
  142|  1.23k|  uint32_t adj_fnum = field_num - fstart;
  143|       |
  144|  1.23k|  if (PROTOBUF_PREDICT_TRUE(adj_fnum < 32)) {
  ------------------
  |  |  364|  1.23k|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 1.22k, False: 15]
  |  |  |  Branch (364:53): [Folded, False: 1.23k]
  |  |  |  Branch (364:62): [True: 1.22k, False: 15]
  |  |  ------------------
  ------------------
  145|  1.22k|    uint32_t skipmap = table->skipmap32;
  146|  1.22k|    uint32_t skipbit = 1 << adj_fnum;
  147|  1.22k|    if (PROTOBUF_PREDICT_FALSE(skipmap & skipbit)) return nullptr;
  ------------------
  |  |  365|  1.22k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1.22k]
  |  |  |  Branch (365:54): [Folded, False: 1.22k]
  |  |  |  Branch (365:63): [True: 0, False: 1.22k]
  |  |  ------------------
  ------------------
  148|  1.22k|    skipmap &= skipbit - 1;
  149|  1.22k|    adj_fnum -= absl::popcount(skipmap);
  150|  1.22k|    auto* entry = field_entries + adj_fnum;
  151|  1.22k|    PROTOBUF_ASSUME(entry != nullptr);
  ------------------
  |  |  941|  1.22k|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  152|  1.22k|    return entry;
  153|  1.22k|  }
  154|     15|  const uint16_t* lookup_table = table->field_lookup_begin();
  155|     15|  for (;;) {
  156|     15|#ifdef ABSL_IS_LITTLE_ENDIAN
  157|     15|    memcpy(&fstart, lookup_table, sizeof(fstart));
  158|       |#else
  159|       |    fstart = lookup_table[0] | (lookup_table[1] << 16);
  160|       |#endif
  161|     15|    lookup_table += sizeof(fstart) / sizeof(*lookup_table);
  162|     15|    uint32_t num_skip_entries = *lookup_table++;
  163|     15|    if (field_num < fstart) return nullptr;
  ------------------
  |  Branch (163:9): [True: 8, False: 7]
  ------------------
  164|      7|    adj_fnum = field_num - fstart;
  165|      7|    uint32_t skip_num = adj_fnum / 16;
  166|      7|    if (PROTOBUF_PREDICT_TRUE(skip_num < num_skip_entries)) {
  ------------------
  |  |  364|      7|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 7, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 7]
  |  |  |  Branch (364:62): [True: 7, False: 0]
  |  |  ------------------
  ------------------
  167|       |      // for each group of 16 fields we have:
  168|       |      // a bitmap of 16 bits
  169|       |      // a 16-bit field-entry offset for the first of them.
  170|      7|      auto* skip_data = lookup_table + (adj_fnum / 16) * (sizeof(SkipEntry16) /
  171|      7|                                                          sizeof(uint16_t));
  172|      7|      SkipEntry16 se = {skip_data[0], skip_data[1]};
  173|      7|      adj_fnum &= 15;
  174|      7|      uint32_t skipmap = se.skipmap;
  175|      7|      uint16_t skipbit = 1 << adj_fnum;
  176|      7|      if (PROTOBUF_PREDICT_FALSE(skipmap & skipbit)) return nullptr;
  ------------------
  |  |  365|      7|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 7]
  |  |  |  Branch (365:54): [Folded, False: 7]
  |  |  |  Branch (365:63): [True: 0, False: 7]
  |  |  ------------------
  ------------------
  177|      7|      skipmap &= skipbit - 1;
  178|      7|      adj_fnum += se.field_entry_offset;
  179|      7|      adj_fnum -= absl::popcount(skipmap);
  180|      7|      auto* entry = field_entries + adj_fnum;
  181|      7|      PROTOBUF_ASSUME(entry != nullptr);
  ------------------
  |  |  941|      7|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  182|      7|      return entry;
  183|      7|    }
  184|      0|    lookup_table +=
  185|      0|        num_skip_entries * (sizeof(SkipEntry16) / sizeof(*lookup_table));
  186|      0|  }
  187|     15|}
_ZN6google8protobuf8internal8TcParser9MiniParseEPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  322|  1.23k|    PROTOBUF_TC_PARAM_NO_DATA_DECL) {
  323|  1.23k|  PROTOBUF_MUSTTAIL return MiniParse<false>(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|  1.23k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return MiniParse<false>(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|  1.23k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  324|  1.23k|}
_ZN6google8protobuf8internal8TcParser10AddMessageEPKNS1_16TcParseTableBaseERNS1_20RepeatedPtrFieldBaseE:
  364|  2.43k|                                  RepeatedPtrFieldBase& field) {
  365|  2.43k|  return static_cast<MessageLite*>(field.AddInternal(
  366|  2.43k|      [table](Arena* arena) { return NewMessage(table, arena); }));
  367|  2.43k|}
_ZN6google8protobuf8internal8TcParser8FastMtS1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  417|  2.86k|PROTOBUF_NOINLINE const char* TcParser::FastMtS1(PROTOBUF_TC_PARAM_DECL) {
  418|  2.86k|  PROTOBUF_MUSTTAIL return SingularParseMessageAuxImpl<uint8_t, false, true>(
  ------------------
  |  |  236|  2.86k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
  419|  2.86k|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|  2.86k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
  420|  2.86k|}
_ZN6google8protobuf8internal8TcParser8FastMtR1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  503|    806|PROTOBUF_NOINLINE const char* TcParser::FastMtR1(PROTOBUF_TC_PARAM_DECL) {
  504|    806|  PROTOBUF_MUSTTAIL return RepeatedParseMessageAuxImpl<uint8_t, false, true>(
  ------------------
  |  |  236|    806|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
  505|    806|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|    806|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
  506|    806|}
_ZN6google8protobuf8internal8TcParser8FastMtR2EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  508|     27|PROTOBUF_NOINLINE const char* TcParser::FastMtR2(PROTOBUF_TC_PARAM_DECL) {
  509|     27|  PROTOBUF_MUSTTAIL return RepeatedParseMessageAuxImpl<uint16_t, false, true>(
  ------------------
  |  |  236|     27|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
  510|     27|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|     27|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
  511|     27|}
_ZN6google8protobuf8internal8TcParser8FastV8S1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  829|     57|PROTOBUF_NOINLINE const char* TcParser::FastV8S1(PROTOBUF_TC_PARAM_DECL) {
  830|     57|  using TagType = uint8_t;
  831|       |
  832|       |  // Special case for a varint bool field with a tag of 1 byte:
  833|       |  // The coded_tag() field will actually contain the value too and we can check
  834|       |  // both at the same time.
  835|     57|  auto coded_tag = data.coded_tag<uint16_t>();
  836|     57|  if (PROTOBUF_PREDICT_TRUE(coded_tag == 0x0000 || coded_tag == 0x0100)) {
  ------------------
  |  |  364|    108|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 30, False: 27]
  |  |  |  Branch (364:53): [Folded, False: 57]
  |  |  |  Branch (364:63): [True: 6, False: 51]
  |  |  |  Branch (364:63): [True: 24, False: 27]
  |  |  ------------------
  ------------------
  837|     30|    auto& field = RefAt<bool>(msg, data.offset());
  838|       |    // Note: we use `data.data` because Clang generates suboptimal code when
  839|       |    // using coded_tag.
  840|       |    // In x86_64 this uses the CH register to read the second byte out of
  841|       |    // `data`.
  842|     30|    uint8_t value = data.data >> 8;
  843|       |    // The assume allows using a mov instead of test+setne.
  844|     30|    PROTOBUF_ASSUME(value <= 1);
  ------------------
  |  |  941|     30|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  845|     30|    field = static_cast<bool>(value);
  846|       |
  847|     30|    ptr += sizeof(TagType) + 1;  // Consume the tag and the value.
  848|     30|    hasbits |= (uint64_t{1} << data.hasbit_idx());
  849|       |
  850|     30|    PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|     30|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|     30|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  851|     30|  }
  852|       |
  853|       |  // If it didn't match above either the tag is wrong, or the value is encoded
  854|       |  // non-canonically.
  855|       |  // Jump to MiniParse as wrong tag is the most probable reason.
  856|     27|  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|     27|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|     27|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  857|     57|}
_ZN6google8protobuf8internal8TcParser8FastV8S2EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  859|     10|PROTOBUF_NOINLINE const char* TcParser::FastV8S2(PROTOBUF_TC_PARAM_DECL) {
  860|     10|  PROTOBUF_MUSTTAIL return SingularVarint<bool, uint16_t>(
  ------------------
  |  |  236|     10|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
  861|     10|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|     10|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
  862|     10|}
_ZN6google8protobuf8internal8TcParser9FastV32S1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  863|  6.06k|PROTOBUF_NOINLINE const char* TcParser::FastV32S1(PROTOBUF_TC_PARAM_DECL) {
  864|  6.06k|  PROTOBUF_MUSTTAIL return FastVarintS1<uint32_t>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|  6.06k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return FastVarintS1<uint32_t>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|  6.06k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
  865|  6.06k|}
_ZN6google8protobuf8internal8TcParser9FastV32P1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  992|    101|PROTOBUF_NOINLINE const char* TcParser::FastV32P1(PROTOBUF_TC_PARAM_DECL) {
  993|    101|  PROTOBUF_MUSTTAIL return PackedVarint<uint32_t, uint8_t>(
  ------------------
  |  |  236|    101|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
  994|    101|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|    101|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
  995|    101|}
_ZN6google8protobuf8internal8TcParser8FastEvS1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1095|     93|PROTOBUF_NOINLINE const char* TcParser::FastEvS1(PROTOBUF_TC_PARAM_DECL) {
 1096|     93|  PROTOBUF_MUSTTAIL return SingularEnum<uint8_t, field_layout::kTvEnum>(
  ------------------
  |  |  236|     93|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1097|     93|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|     93|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1098|     93|}
_ZN6google8protobuf8internal8TcParser9FastEr0S1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1231|     84|PROTOBUF_NOINLINE const char* TcParser::FastEr0S1(PROTOBUF_TC_PARAM_DECL) {
 1232|     84|  PROTOBUF_MUSTTAIL return SingularEnumSmallRange<uint8_t, 0>(
  ------------------
  |  |  236|     84|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1233|     84|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|     84|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1234|     84|}
_ZN6google8protobuf8internal8TcParser9FastEr1S1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1241|  1.06k|PROTOBUF_NOINLINE const char* TcParser::FastEr1S1(PROTOBUF_TC_PARAM_DECL) {
 1242|  1.06k|  PROTOBUF_MUSTTAIL return SingularEnumSmallRange<uint8_t, 1>(
  ------------------
  |  |  236|  1.06k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1243|  1.06k|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|  1.06k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1244|  1.06k|}
_ZN6google8protobuf8internal8TcParser7FastBS1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1448|  3.50k|PROTOBUF_NOINLINE const char* TcParser::FastBS1(PROTOBUF_TC_PARAM_DECL) {
 1449|  3.50k|  PROTOBUF_MUSTTAIL return SingularString<uint8_t, ArenaStringPtr, kNoUtf8>(
  ------------------
  |  |  236|  3.50k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1450|  3.50k|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|  3.50k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1451|  3.50k|}
_ZN6google8protobuf8internal8TcParser7FastSS1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1456|  1.55k|PROTOBUF_NOINLINE const char* TcParser::FastSS1(PROTOBUF_TC_PARAM_DECL) {
 1457|  1.55k|  PROTOBUF_MUSTTAIL return SingularString<uint8_t, ArenaStringPtr,
  ------------------
  |  |  236|  1.55k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1458|  1.55k|                                          kUtf8ValidateOnly>(
 1459|  1.55k|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|  1.55k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1460|  1.55k|}
_ZN6google8protobuf8internal8TcParser7FastSS2EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1461|      7|PROTOBUF_NOINLINE const char* TcParser::FastSS2(PROTOBUF_TC_PARAM_DECL) {
 1462|      7|  PROTOBUF_MUSTTAIL return SingularString<uint16_t, ArenaStringPtr,
  ------------------
  |  |  236|      7|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1463|      7|                                          kUtf8ValidateOnly>(
 1464|      7|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      7|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1465|      7|}
_ZN6google8protobuf8internal8TcParser7FastBR1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1573|  1.29k|PROTOBUF_NOINLINE const char* TcParser::FastBR1(PROTOBUF_TC_PARAM_DECL) {
 1574|  1.29k|  PROTOBUF_MUSTTAIL return RepeatedString<
  ------------------
  |  |  236|  1.29k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1575|  1.29k|      uint8_t, RepeatedPtrField<std::string>, kNoUtf8>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|  1.29k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1576|  1.29k|}
_ZN6google8protobuf8internal8TcParser7FastSR1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1581|      6|PROTOBUF_NOINLINE const char* TcParser::FastSR1(PROTOBUF_TC_PARAM_DECL) {
 1582|      6|  PROTOBUF_MUSTTAIL return RepeatedString<
  ------------------
  |  |  236|      6|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1583|      6|      uint8_t, RepeatedPtrField<std::string>, kUtf8ValidateOnly>(
 1584|      6|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      6|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1585|      6|}
_ZN6google8protobuf8internal8TcParser11ChangeOneofEPKNS1_16TcParseTableBaseERKNS3_10FieldEntryEjPNS1_12ParseContextEPNS0_11MessageLiteE:
 1624|  1.13k|                           MessageLite* msg) {
 1625|       |  // The _oneof_case_ value offset is stored in the has-bit index.
 1626|  1.13k|  uint32_t* oneof_case = &TcParser::RefAt<uint32_t>(msg, entry.has_idx);
 1627|  1.13k|  uint32_t current_case = *oneof_case;
 1628|  1.13k|  *oneof_case = field_num;
 1629|       |
 1630|  1.13k|  if (current_case == 0) {
  ------------------
  |  Branch (1630:7): [True: 1.13k, False: 0]
  ------------------
 1631|       |    // If the member is empty, we don't have anything to clear. Caller is
 1632|       |    // responsible for creating a new member object.
 1633|  1.13k|    return true;
 1634|  1.13k|  }
 1635|      0|  if (current_case == field_num) {
  ------------------
  |  Branch (1635:7): [True: 0, False: 0]
  ------------------
 1636|       |    // If the member is already active, then it should be merged. We're done.
 1637|      0|    return false;
 1638|      0|  }
 1639|       |  // Look up the value that is already stored, and dispose of it if necessary.
 1640|      0|  const FieldEntry* current_entry = FindFieldEntry(table, current_case);
 1641|      0|  uint16_t current_kind = current_entry->type_card & field_layout::kFkMask;
 1642|      0|  uint16_t current_rep = current_entry->type_card & field_layout::kRepMask;
 1643|      0|  if (current_kind == field_layout::kFkString) {
  ------------------
  |  Branch (1643:7): [True: 0, False: 0]
  ------------------
 1644|      0|    switch (current_rep) {
 1645|      0|      case field_layout::kRepAString: {
  ------------------
  |  Branch (1645:7): [True: 0, False: 0]
  ------------------
 1646|      0|        auto& field = RefAt<ArenaStringPtr>(msg, current_entry->offset);
 1647|      0|        field.Destroy();
 1648|      0|        break;
 1649|      0|      }
 1650|      0|      case field_layout::kRepCord: {
  ------------------
  |  Branch (1650:7): [True: 0, False: 0]
  ------------------
 1651|      0|        if (msg->GetArena() == nullptr) {
  ------------------
  |  Branch (1651:13): [True: 0, False: 0]
  ------------------
 1652|      0|          delete RefAt<absl::Cord*>(msg, current_entry->offset);
 1653|      0|        }
 1654|      0|        break;
 1655|      0|      }
 1656|      0|      case field_layout::kRepSString:
  ------------------
  |  Branch (1656:7): [True: 0, False: 0]
  ------------------
 1657|      0|      case field_layout::kRepIString:
  ------------------
  |  Branch (1657:7): [True: 0, False: 0]
  ------------------
 1658|      0|      default:
  ------------------
  |  Branch (1658:7): [True: 0, False: 0]
  ------------------
 1659|      0|        ABSL_DLOG(FATAL) << "string rep not handled: "
  ------------------
  |  |   40|      0|#define ABSL_DLOG(severity) ABSL_LOG_INTERNAL_DLOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   41|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, false) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   42|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1660|      0|                         << (current_rep >> field_layout::kRepShift);
 1661|      0|        return true;
 1662|      0|    }
 1663|      0|  } else if (current_kind == field_layout::kFkMessage) {
  ------------------
  |  Branch (1663:14): [True: 0, False: 0]
  ------------------
 1664|      0|    switch (current_rep) {
 1665|      0|      case field_layout::kRepMessage:
  ------------------
  |  Branch (1665:7): [True: 0, False: 0]
  ------------------
 1666|      0|      case field_layout::kRepGroup: {
  ------------------
  |  Branch (1666:7): [True: 0, False: 0]
  ------------------
 1667|      0|        auto& field = RefAt<MessageLite*>(msg, current_entry->offset);
 1668|      0|        if (!msg->GetArena()) {
  ------------------
  |  Branch (1668:13): [True: 0, False: 0]
  ------------------
 1669|      0|          delete field;
 1670|      0|        }
 1671|      0|        break;
 1672|      0|      }
 1673|      0|      default:
  ------------------
  |  Branch (1673:7): [True: 0, False: 0]
  ------------------
 1674|      0|        ABSL_DLOG(FATAL) << "message rep not handled: "
  ------------------
  |  |   40|      0|#define ABSL_DLOG(severity) ABSL_LOG_INTERNAL_DLOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   41|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, false) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   42|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1675|      0|                         << (current_rep >> field_layout::kRepShift);
 1676|      0|        break;
 1677|      0|    }
 1678|      0|  }
 1679|      0|  return true;
 1680|      0|}
_ZN6google8protobuf8internal8TcParser17MaybeGetSplitBaseEPNS0_11MessageLiteEbPKNS1_16TcParseTableBaseE:
 1693|  1.23k|                                  const TcParseTableBase* table) {
 1694|  1.23k|  void* out = msg;
 1695|  1.23k|  if (is_split) {
  ------------------
  |  Branch (1695:7): [True: 0, False: 1.23k]
  ------------------
 1696|      0|    const uint32_t split_offset = GetSplitOffset(table);
 1697|      0|    void* default_split =
 1698|      0|        TcParser::RefAt<void*>(table->default_instance(), split_offset);
 1699|      0|    void*& split = TcParser::RefAt<void*>(msg, split_offset);
 1700|      0|    if (split == default_split) {
  ------------------
  |  Branch (1700:9): [True: 0, False: 0]
  ------------------
 1701|       |      // Allocate split instance when needed.
 1702|      0|      uint32_t size = GetSizeofSplit(table);
 1703|      0|      Arena* arena = msg->GetArena();
 1704|      0|      split = (arena == nullptr) ? ::operator new(size)
  ------------------
  |  Branch (1704:15): [True: 0, False: 0]
  ------------------
 1705|      0|                                 : arena->AllocateAligned(size);
 1706|      0|      memcpy(split, default_split, size);
 1707|      0|    }
 1708|      0|    out = split;
 1709|      0|  }
 1710|  1.23k|  return out;
 1711|  1.23k|}
_ZN6google8protobuf8internal8TcParser12MpVerifyUtf8EN4absl12lts_2024011611string_viewEPKNS1_16TcParseTableBaseERKNS6_10FieldEntryEt:
 2116|    725|                            const FieldEntry& entry, uint16_t xform_val) {
 2117|    725|  if (xform_val == field_layout::kTvUtf8) {
  ------------------
  |  Branch (2117:7): [True: 0, False: 725]
  ------------------
 2118|      0|    if (!utf8_range::IsStructurallyValid(wire_bytes)) {
  ------------------
  |  Branch (2118:9): [True: 0, False: 0]
  ------------------
 2119|      0|      PrintUTF8ErrorLog(MessageName(table), FieldName(table, &entry), "parsing",
 2120|      0|                        false);
 2121|      0|      return false;
 2122|      0|    }
 2123|      0|    return true;
 2124|      0|  }
 2125|       |#ifndef NDEBUG
 2126|       |  if (xform_val == field_layout::kTvUtf8Debug) {
 2127|       |    if (!utf8_range::IsStructurallyValid(wire_bytes)) {
 2128|       |      PrintUTF8ErrorLog(MessageName(table), FieldName(table, &entry), "parsing",
 2129|       |                        false);
 2130|       |    }
 2131|       |  }
 2132|       |#endif  // NDEBUG
 2133|    725|  return true;
 2134|    725|}
_ZN6google8protobuf8internal8TcParser9MiniParseILb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  238|  1.23k|    PROTOBUF_TC_PARAM_DECL) {
  239|  1.23k|  TestMiniParseResult* test_out;
  240|  1.23k|  if (export_called_function) {
  ------------------
  |  Branch (240:7): [Folded, False: 1.23k]
  ------------------
  241|      0|    test_out = reinterpret_cast<TestMiniParseResult*>(
  242|      0|        static_cast<uintptr_t>(data.data));
  243|      0|  }
  244|       |
  245|  1.23k|  uint32_t tag;
  246|  1.23k|  ptr = ReadTagInlined(ptr, &tag);
  247|  1.23k|  if (PROTOBUF_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  365|  1.23k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1.23k]
  |  |  |  Branch (365:54): [Folded, False: 1.23k]
  |  |  |  Branch (365:63): [True: 0, False: 1.23k]
  |  |  ------------------
  ------------------
  248|      0|    if (export_called_function) *test_out = {Error};
  ------------------
  |  Branch (248:9): [Folded, False: 0]
  ------------------
  249|      0|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  250|      0|  }
  251|       |
  252|  1.23k|  auto* entry = FindFieldEntry(table, tag >> 3);
  253|  1.23k|  if (entry == nullptr) {
  ------------------
  |  Branch (253:7): [True: 8, False: 1.23k]
  ------------------
  254|      8|    if (export_called_function) *test_out = {table->fallback, tag};
  ------------------
  |  Branch (254:9): [Folded, False: 8]
  ------------------
  255|      8|    data.data = tag;
  256|      8|    PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|      8|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      8|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
  257|      8|  }
  258|       |
  259|       |  // The handler may need the tag and the entry to resolve fallback logic. Both
  260|       |  // of these are 32 bits, so pack them into (the 64-bit) `data`. Since we can't
  261|       |  // pack the entry pointer itself, just pack its offset from `table`.
  262|  1.23k|  uint64_t entry_offset = reinterpret_cast<const char*>(entry) -
  263|  1.23k|                          reinterpret_cast<const char*>(table);
  264|  1.23k|  data.data = entry_offset << 32 | tag;
  265|       |
  266|  1.23k|  using field_layout::FieldKind;
  267|  1.23k|  auto field_type =
  268|  1.23k|      entry->type_card & (+field_layout::kSplitMask | FieldKind::kFkMask);
  269|       |
  270|  1.23k|  static constexpr TailCallParseFunc kMiniParseTable[] = {
  271|  1.23k|      &MpFallback,             // FieldKind::kFkNone
  272|  1.23k|      &MpVarint<false>,        // FieldKind::kFkVarint
  273|  1.23k|      &MpPackedVarint<false>,  // FieldKind::kFkPackedVarint
  274|  1.23k|      &MpFixed<false>,         // FieldKind::kFkFixed
  275|  1.23k|      &MpPackedFixed<false>,   // FieldKind::kFkPackedFixed
  276|  1.23k|      &MpString<false>,        // FieldKind::kFkString
  277|  1.23k|      &MpMessage<false>,       // FieldKind::kFkMessage
  278|  1.23k|      &MpMap<false>,           // FieldKind::kFkMap
  279|  1.23k|      &Error,                  // kSplitMask | FieldKind::kFkNone
  280|  1.23k|      &MpVarint<true>,         // kSplitMask | FieldKind::kFkVarint
  281|  1.23k|      &MpPackedVarint<true>,   // kSplitMask | FieldKind::kFkPackedVarint
  282|  1.23k|      &MpFixed<true>,          // kSplitMask | FieldKind::kFkFixed
  283|  1.23k|      &MpPackedFixed<true>,    // kSplitMask | FieldKind::kFkPackedFixed
  284|  1.23k|      &MpString<true>,         // kSplitMask | FieldKind::kFkString
  285|  1.23k|      &MpMessage<true>,        // kSplitMask | FieldKind::kFkMessage
  286|  1.23k|      &MpMap<true>,            // kSplitMask | FieldKind::kFkMap
  287|  1.23k|  };
  288|       |  // Just to be sure we got the order right, above.
  289|  1.23k|  static_assert(0 == FieldKind::kFkNone, "Invalid table order");
  290|  1.23k|  static_assert(1 == FieldKind::kFkVarint, "Invalid table order");
  291|  1.23k|  static_assert(2 == FieldKind::kFkPackedVarint, "Invalid table order");
  292|  1.23k|  static_assert(3 == FieldKind::kFkFixed, "Invalid table order");
  293|  1.23k|  static_assert(4 == FieldKind::kFkPackedFixed, "Invalid table order");
  294|  1.23k|  static_assert(5 == FieldKind::kFkString, "Invalid table order");
  295|  1.23k|  static_assert(6 == FieldKind::kFkMessage, "Invalid table order");
  296|  1.23k|  static_assert(7 == FieldKind::kFkMap, "Invalid table order");
  297|       |
  298|  1.23k|  static_assert(8 == (+field_layout::kSplitMask | FieldKind::kFkNone),
  299|  1.23k|    "Invalid table order");
  300|  1.23k|  static_assert(9 == (+field_layout::kSplitMask | FieldKind::kFkVarint),
  301|  1.23k|    "Invalid table order");
  302|  1.23k|  static_assert(10 == (+field_layout::kSplitMask | FieldKind::kFkPackedVarint),
  303|  1.23k|    "Invalid table order");
  304|  1.23k|  static_assert(11 == (+field_layout::kSplitMask | FieldKind::kFkFixed),
  305|  1.23k|    "Invalid table order");
  306|  1.23k|  static_assert(12 == (+field_layout::kSplitMask | FieldKind::kFkPackedFixed),
  307|  1.23k|    "Invalid table order");
  308|  1.23k|  static_assert(13 == (+field_layout::kSplitMask | FieldKind::kFkString),
  309|  1.23k|    "Invalid table order");
  310|  1.23k|  static_assert(14 == (+field_layout::kSplitMask | FieldKind::kFkMessage),
  311|  1.23k|    "Invalid table order");
  312|  1.23k|  static_assert(15 == (+field_layout::kSplitMask | FieldKind::kFkMap),
  313|  1.23k|    "Invalid table order");
  314|       |
  315|  1.23k|  TailCallParseFunc parse_fn = kMiniParseTable[field_type];
  316|  1.23k|  if (export_called_function) *test_out = {parse_fn, tag, entry};
  ------------------
  |  Branch (316:7): [Folded, False: 1.23k]
  ------------------
  317|       |
  318|  1.23k|  PROTOBUF_MUSTTAIL return parse_fn(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|  1.23k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return parse_fn(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|  1.23k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
  319|  1.23k|}
_ZN6google8protobuf8internal8TcParser8MpVarintILb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1845|    478|PROTOBUF_NOINLINE const char* TcParser::MpVarint(PROTOBUF_TC_PARAM_DECL) {
 1846|    478|  const auto& entry = RefAt<FieldEntry>(table, data.entry_offset());
 1847|    478|  const uint16_t type_card = entry.type_card;
 1848|    478|  const uint16_t card = type_card & field_layout::kFcMask;
 1849|       |
 1850|       |  // Check for repeated parsing:
 1851|    478|  if (card == field_layout::kFcRepeated) {
  ------------------
  |  Branch (1851:7): [True: 27, False: 451]
  ------------------
 1852|     27|    PROTOBUF_MUSTTAIL return MpRepeatedVarint<is_split>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|     27|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MpRepeatedVarint<is_split>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|     27|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1853|     27|  }
 1854|       |  // Check for wire type mismatch:
 1855|    451|  if ((data.tag() & 7) != WireFormatLite::WIRETYPE_VARINT) {
  ------------------
  |  Branch (1855:7): [True: 0, False: 451]
  ------------------
 1856|      0|    PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1857|      0|  }
 1858|    451|  const uint16_t xform_val = type_card & field_layout::kTvMask;
 1859|    451|  const bool is_zigzag = xform_val == field_layout::kTvZigZag;
 1860|    451|  const bool is_validated_enum = xform_val & field_layout::kTvEnum;
 1861|       |
 1862|       |  // Parse the value:
 1863|    451|  const char* ptr2 = ptr;  // save for unknown enum case
 1864|    451|  uint64_t tmp;
 1865|    451|  ptr = ParseVarint(ptr, &tmp);
 1866|    451|  if (ptr == nullptr) {
  ------------------
  |  Branch (1866:7): [True: 0, False: 451]
  ------------------
 1867|      0|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1868|      0|  }
 1869|       |
 1870|       |  // Transform and/or validate the value
 1871|    451|  uint16_t rep = type_card & field_layout::kRepMask;
 1872|    451|  if (rep == field_layout::kRep64Bits) {
  ------------------
  |  Branch (1872:7): [True: 339, False: 112]
  ------------------
 1873|    339|    if (is_zigzag) {
  ------------------
  |  Branch (1873:9): [True: 0, False: 339]
  ------------------
 1874|      0|      tmp = WireFormatLite::ZigZagDecode64(tmp);
 1875|      0|    }
 1876|    339|  } else if (rep == field_layout::kRep32Bits) {
  ------------------
  |  Branch (1876:14): [True: 34, False: 78]
  ------------------
 1877|     34|    if (is_validated_enum) {
  ------------------
  |  Branch (1877:9): [True: 34, False: 0]
  ------------------
 1878|     34|      if (!EnumIsValidAux(tmp, xform_val, *table->field_aux(&entry))) {
  ------------------
  |  Branch (1878:11): [True: 0, False: 34]
  ------------------
 1879|      0|        ptr = ptr2;
 1880|      0|        PROTOBUF_MUSTTAIL return MpUnknownEnumFallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                      PROTOBUF_MUSTTAIL return MpUnknownEnumFallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1881|      0|      }
 1882|     34|    } else if (is_zigzag) {
  ------------------
  |  Branch (1882:16): [True: 0, False: 0]
  ------------------
 1883|      0|      tmp = WireFormatLite::ZigZagDecode32(static_cast<uint32_t>(tmp));
 1884|      0|    }
 1885|     34|  }
 1886|       |
 1887|       |  // Mark the field as present:
 1888|    451|  const bool is_oneof = card == field_layout::kFcOneof;
 1889|    451|  if (card == field_layout::kFcOptional) {
  ------------------
  |  Branch (1889:7): [True: 34, False: 417]
  ------------------
 1890|     34|    SetHas(entry, msg);
 1891|    417|  } else if (is_oneof) {
  ------------------
  |  Branch (1891:14): [True: 417, False: 0]
  ------------------
 1892|    417|    ChangeOneof(table, entry, data.tag() >> 3, ctx, msg);
 1893|    417|  }
 1894|       |
 1895|    451|  void* const base = MaybeGetSplitBase(msg, is_split, table);
 1896|    451|  if (rep == field_layout::kRep64Bits) {
  ------------------
  |  Branch (1896:7): [True: 339, False: 112]
  ------------------
 1897|    339|    RefAt<uint64_t>(base, entry.offset) = tmp;
 1898|    339|  } else if (rep == field_layout::kRep32Bits) {
  ------------------
  |  Branch (1898:14): [True: 34, False: 78]
  ------------------
 1899|     34|    RefAt<uint32_t>(base, entry.offset) = static_cast<uint32_t>(tmp);
 1900|     78|  } else {
 1901|     78|    ABSL_DCHECK_EQ(rep, static_cast<uint16_t>(field_layout::kRep8Bits));
  ------------------
  |  |   74|     78|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|     78|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     78|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 78]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     78|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1902|     78|    RefAt<bool>(base, entry.offset) = static_cast<bool>(tmp);
 1903|     78|  }
 1904|       |
 1905|    451|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|    451|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|    451|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1906|    451|}
_ZN6google8protobuf8internal8TcParser16MpRepeatedVarintILb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1958|     27|    PROTOBUF_TC_PARAM_DECL) {
 1959|     27|  const auto& entry = RefAt<FieldEntry>(table, data.entry_offset());
 1960|     27|  const auto type_card = entry.type_card;
 1961|     27|  const uint32_t decoded_tag = data.tag();
 1962|     27|  const auto decoded_wiretype = decoded_tag & 7;
 1963|       |
 1964|       |  // Check for packed repeated fallback:
 1965|     27|  if (decoded_wiretype == WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
  ------------------
  |  Branch (1965:7): [True: 0, False: 27]
  ------------------
 1966|      0|    PROTOBUF_MUSTTAIL return MpPackedVarint<is_split>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MpPackedVarint<is_split>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1967|      0|  }
 1968|       |  // Check for wire type mismatch:
 1969|     27|  if (decoded_wiretype != WireFormatLite::WIRETYPE_VARINT) {
  ------------------
  |  Branch (1969:7): [True: 0, False: 27]
  ------------------
 1970|      0|    PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1971|      0|  }
 1972|       |  // For split we avoid the duplicate code and have the impl reload the value.
 1973|       |  // Less code bloat for uncommon paths.
 1974|     27|  const uint16_t xform_val = (type_card & field_layout::kTvMask);
 1975|     27|  const uint16_t rep = type_card & field_layout::kRepMask;
 1976|     27|  switch (rep >> field_layout::kRepShift) {
 1977|      0|    case field_layout::kRep64Bits >> field_layout::kRepShift:
  ------------------
  |  Branch (1977:5): [True: 0, False: 27]
  ------------------
 1978|      0|      if (xform_val == 0) {
  ------------------
  |  Branch (1978:11): [True: 0, False: 0]
  ------------------
 1979|      0|        PROTOBUF_MUSTTAIL return MpRepeatedVarintT<is_split, uint64_t, 0>(
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1980|      0|            PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1981|      0|      } else {
 1982|      0|        ABSL_DCHECK_EQ(xform_val, +field_layout::kTvZigZag);
  ------------------
  |  |   74|      0|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|      0|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      0|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 0]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1983|      0|        PROTOBUF_MUSTTAIL return MpRepeatedVarintT<
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1984|      0|            is_split, uint64_t, (is_split ? 0 : field_layout::kTvZigZag)>(
 1985|      0|            PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1986|      0|      }
 1987|     27|    case field_layout::kRep32Bits >> field_layout::kRepShift:
  ------------------
  |  Branch (1987:5): [True: 27, False: 0]
  ------------------
 1988|     27|      switch (xform_val >> field_layout::kTvShift) {
 1989|      0|        case 0:
  ------------------
  |  Branch (1989:9): [True: 0, False: 27]
  ------------------
 1990|      0|          PROTOBUF_MUSTTAIL return MpRepeatedVarintT<is_split, uint32_t, 0>(
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1991|      0|              PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1992|      0|        case field_layout::kTvZigZag >> field_layout::kTvShift:
  ------------------
  |  Branch (1992:9): [True: 0, False: 27]
  ------------------
 1993|      0|          PROTOBUF_MUSTTAIL return MpRepeatedVarintT<
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1994|      0|              is_split, uint32_t, (is_split ? 0 : field_layout::kTvZigZag)>(
 1995|      0|              PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1996|      0|        case field_layout::kTvEnum >> field_layout::kTvShift:
  ------------------
  |  Branch (1996:9): [True: 0, False: 27]
  ------------------
 1997|      0|          PROTOBUF_MUSTTAIL return MpRepeatedVarintT<
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1998|      0|              is_split, uint32_t, (is_split ? 0 : field_layout::kTvEnum)>(
 1999|      0|              PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2000|     27|        case field_layout::kTvRange >> field_layout::kTvShift:
  ------------------
  |  Branch (2000:9): [True: 27, False: 0]
  ------------------
 2001|     27|          PROTOBUF_MUSTTAIL return MpRepeatedVarintT<
  ------------------
  |  |  236|     27|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 2002|     27|              is_split, uint32_t, (is_split ? 0 : field_layout::kTvRange)>(
 2003|     27|              PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|     27|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2004|      0|        default:
  ------------------
  |  Branch (2004:9): [True: 0, False: 27]
  ------------------
 2005|      0|          Unreachable();
 2006|     27|      }
 2007|      0|    case field_layout::kRep8Bits >> field_layout::kRepShift:
  ------------------
  |  Branch (2007:5): [True: 0, False: 27]
  ------------------
 2008|      0|      PROTOBUF_MUSTTAIL return MpRepeatedVarintT<is_split, bool, 0>(
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 2009|      0|          PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2010|       |
 2011|      0|    default:
  ------------------
  |  Branch (2011:5): [True: 0, False: 27]
  ------------------
 2012|      0|      Unreachable();
 2013|      0|      return nullptr;  // To silence -Werror=return-type in some toolchains
 2014|     27|  }
 2015|     27|}
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal12_GLOBAL__N_116PrefetchEnumDataEtNS1_16TcParseTableBase8FieldAuxE:
  725|    120|    uint16_t xform_val, TcParseTableBase::FieldAux aux) {
  726|    120|}
_ZN6google8protobuf8internal8TcParser17MpRepeatedVarintTILb0EjLt1536EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1909|     27|const char* TcParser::MpRepeatedVarintT(PROTOBUF_TC_PARAM_DECL) {
 1910|     27|  const auto& entry = RefAt<FieldEntry>(table, data.entry_offset());
 1911|     27|  const uint32_t decoded_tag = data.tag();
 1912|       |  // For is_split we ignore the incoming xform_val and read it from entry to
 1913|       |  // reduce duplication for the uncommon paths.
 1914|     27|  const uint16_t xform_val =
 1915|     27|      is_split ? (entry.type_card & field_layout::kTvMask) : xform_val_in;
  ------------------
  |  Branch (1915:7): [Folded, False: 27]
  ------------------
 1916|     27|  const bool is_zigzag = xform_val == field_layout::kTvZigZag;
 1917|     27|  const bool is_validated_enum = xform_val & field_layout::kTvEnum;
 1918|       |
 1919|     27|  const char* ptr2 = ptr;
 1920|     27|  uint32_t next_tag;
 1921|     27|  void* const base = MaybeGetSplitBase(msg, is_split, table);
 1922|     27|  auto& field = MaybeCreateRepeatedFieldRefAt<FieldType, is_split>(
 1923|     27|      base, entry.offset, msg);
 1924|       |
 1925|     27|  TcParseTableBase::FieldAux aux;
 1926|     27|  if (is_validated_enum) {
  ------------------
  |  Branch (1926:7): [True: 27, Folded]
  ------------------
 1927|     27|    aux = *table->field_aux(&entry);
 1928|     27|    PrefetchEnumData(xform_val, aux);
 1929|     27|  }
 1930|       |
 1931|     57|  do {
 1932|     57|    uint64_t tmp;
 1933|     57|    ptr = ParseVarint(ptr2, &tmp);
 1934|     57|    if (PROTOBUF_PREDICT_FALSE(ptr == nullptr)) goto error;
  ------------------
  |  |  365|     57|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 57]
  |  |  |  Branch (365:54): [Folded, False: 57]
  |  |  |  Branch (365:63): [True: 0, False: 57]
  |  |  ------------------
  ------------------
 1935|     57|    if (is_validated_enum) {
  ------------------
  |  Branch (1935:9): [True: 57, Folded]
  ------------------
 1936|     57|      if (!EnumIsValidAux(static_cast<int32_t>(tmp), xform_val, aux)) {
  ------------------
  |  Branch (1936:11): [True: 0, False: 57]
  ------------------
 1937|      0|        ptr = ptr2;
 1938|      0|        PROTOBUF_MUSTTAIL return MpUnknownEnumFallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                      PROTOBUF_MUSTTAIL return MpUnknownEnumFallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1939|      0|      }
 1940|     57|    } else if (is_zigzag) {
  ------------------
  |  Branch (1940:16): [Folded, False: 0]
  ------------------
 1941|      0|      tmp = sizeof(FieldType) == 8 ? WireFormatLite::ZigZagDecode64(tmp)
  ------------------
  |  Branch (1941:13): [Folded, False: 0]
  ------------------
 1942|      0|                                   : WireFormatLite::ZigZagDecode32(tmp);
 1943|      0|    }
 1944|     57|    field.Add(static_cast<FieldType>(tmp));
 1945|     57|    if (PROTOBUF_PREDICT_FALSE(!ctx->DataAvailable(ptr))) goto parse_loop;
  ------------------
  |  |  365|     57|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 57]
  |  |  |  Branch (365:54): [Folded, False: 57]
  |  |  |  Branch (365:63): [True: 0, False: 57]
  |  |  ------------------
  ------------------
 1946|     57|    ptr2 = ReadTag(ptr, &next_tag);
 1947|     57|    if (PROTOBUF_PREDICT_FALSE(ptr2 == nullptr)) goto error;
  ------------------
  |  |  365|     57|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 57]
  |  |  |  Branch (365:54): [Folded, False: 57]
  |  |  |  Branch (365:63): [True: 0, False: 57]
  |  |  ------------------
  ------------------
 1948|     57|  } while (next_tag == decoded_tag);
  ------------------
  |  Branch (1948:12): [True: 30, False: 27]
  ------------------
 1949|       |
 1950|     27|parse_loop:
 1951|     27|  PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|     27|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|     27|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1952|      0|error:
 1953|      0|  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1954|     27|}
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal12_GLOBAL__N_114EnumIsValidAuxEitNS1_16TcParseTableBase8FieldAuxE:
  737|    184|    int32_t val, uint16_t xform_val, TcParseTableBase::FieldAux aux) {
  738|    184|  if (xform_val == field_layout::kTvRange) {
  ------------------
  |  Branch (738:7): [True: 90, False: 94]
  ------------------
  739|     90|    auto lo = aux.enum_range.start;
  740|     90|    return lo <= val && val < (lo + aux.enum_range.length);
  ------------------
  |  Branch (740:12): [True: 90, False: 0]
  |  Branch (740:25): [True: 90, False: 0]
  ------------------
  741|     90|  }
  742|     94|  if (PROTOBUF_BUILTIN_CONSTANT_P(xform_val)) {
  ------------------
  |  |  636|     94|#define PROTOBUF_BUILTIN_CONSTANT_P(x) __builtin_constant_p(x)
  |  |  ------------------
  |  |  |  Branch (636:40): [True: 93, False: 1]
  |  |  ------------------
  ------------------
  743|     93|    return internal::ValidateEnumInlined(val, aux.enum_data);
  744|     93|  } else {
  745|      1|    return internal::ValidateEnum(val, aux.enum_data);
  746|      1|  }
  747|     94|}
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal12_GLOBAL__N_16SetHasERKNS1_16TcParseTableBase10FieldEntryEPNS0_11MessageLiteE:
 1607|     68|inline void SetHas(const FieldEntry& entry, MessageLite* msg) {
 1608|     68|  auto has_idx = static_cast<uint32_t>(entry.has_idx);
 1609|     68|#if defined(__x86_64__) && defined(__GNUC__)
 1610|     68|  asm("bts %1, %0\n" : "+m"(*reinterpret_cast<char*>(msg)) : "r"(has_idx));
 1611|       |#else
 1612|       |  auto& hasblock = TcParser::RefAt<uint32_t>(msg, has_idx / 32 * 4);
 1613|       |  hasblock |= uint32_t{1} << (has_idx % 32);
 1614|       |#endif
 1615|     68|}
_ZN6google8protobuf8internal8TcParser8MpStringILb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 2146|    725|PROTOBUF_NOINLINE const char* TcParser::MpString(PROTOBUF_TC_PARAM_DECL) {
 2147|    725|  const auto& entry = RefAt<FieldEntry>(table, data.entry_offset());
 2148|    725|  const uint16_t type_card = entry.type_card;
 2149|    725|  const uint16_t card = type_card & field_layout::kFcMask;
 2150|    725|  const uint32_t decoded_wiretype = data.tag() & 7;
 2151|       |
 2152|    725|  if (decoded_wiretype != WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
  ------------------
  |  Branch (2152:7): [True: 0, False: 725]
  ------------------
 2153|      0|    PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2154|      0|  }
 2155|    725|  if (card == field_layout::kFcRepeated) {
  ------------------
  |  Branch (2155:7): [True: 0, False: 725]
  ------------------
 2156|      0|    PROTOBUF_MUSTTAIL return MpRepeatedString<is_split>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MpRepeatedString<is_split>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2157|      0|  }
 2158|    725|  const uint16_t xform_val = type_card & field_layout::kTvMask;
 2159|    725|  const uint16_t rep = type_card & field_layout::kRepMask;
 2160|       |
 2161|       |  // Mark the field as present:
 2162|    725|  const bool is_oneof = card == field_layout::kFcOneof;
 2163|    725|  bool need_init = false;
 2164|    725|  if (card == field_layout::kFcOptional) {
  ------------------
  |  Branch (2164:7): [True: 7, False: 718]
  ------------------
 2165|      7|    SetHas(entry, msg);
 2166|    718|  } else if (is_oneof) {
  ------------------
  |  Branch (2166:14): [True: 718, False: 0]
  ------------------
 2167|    718|    need_init = ChangeOneof(table, entry, data.tag() >> 3, ctx, msg);
 2168|    718|  }
 2169|       |
 2170|    725|  bool is_valid = false;
 2171|    725|  void* const base = MaybeGetSplitBase(msg, is_split, table);
 2172|    725|  switch (rep) {
 2173|    725|    case field_layout::kRepAString: {
  ------------------
  |  Branch (2173:5): [True: 725, False: 0]
  ------------------
 2174|    725|      auto& field = RefAt<ArenaStringPtr>(base, entry.offset);
 2175|    725|      if (need_init) field.InitDefault();
  ------------------
  |  Branch (2175:11): [True: 718, False: 7]
  ------------------
 2176|    725|      Arena* arena = msg->GetArena();
 2177|    725|      if (arena) {
  ------------------
  |  Branch (2177:11): [True: 2, False: 723]
  ------------------
 2178|      2|        ptr = ctx->ReadArenaString(ptr, &field, arena);
 2179|    723|      } else {
 2180|    723|        std::string* str = field.MutableNoCopy(nullptr);
 2181|    723|        ptr = InlineGreedyStringParser(str, ptr, ctx);
 2182|    723|      }
 2183|    725|      if (!ptr) break;
  ------------------
  |  Branch (2183:11): [True: 0, False: 725]
  ------------------
 2184|    725|      is_valid = MpVerifyUtf8(field.Get(), table, entry, xform_val);
 2185|    725|      break;
 2186|    725|    }
 2187|       |
 2188|       |
 2189|      0|    case field_layout::kRepCord: {
  ------------------
  |  Branch (2189:5): [True: 0, False: 725]
  ------------------
 2190|      0|      absl::Cord* field;
 2191|      0|      if (is_oneof) {
  ------------------
  |  Branch (2191:11): [True: 0, False: 0]
  ------------------
 2192|      0|        if (need_init) {
  ------------------
  |  Branch (2192:13): [True: 0, False: 0]
  ------------------
 2193|      0|          field = Arena::Create<absl::Cord>(msg->GetArena());
 2194|      0|          RefAt<absl::Cord*>(msg, entry.offset) = field;
 2195|      0|        } else {
 2196|      0|          field = RefAt<absl::Cord*>(msg, entry.offset);
 2197|      0|        }
 2198|      0|      } else {
 2199|      0|        field = &RefAt<absl::Cord>(base, entry.offset);
 2200|      0|      }
 2201|      0|      ptr = InlineCordParser(field, ptr, ctx);
 2202|      0|      if (!ptr) break;
  ------------------
  |  Branch (2202:11): [True: 0, False: 0]
  ------------------
 2203|      0|      is_valid = MpVerifyUtf8(*field, table, entry, xform_val);
 2204|      0|      break;
 2205|      0|    }
 2206|       |
 2207|      0|    default:
  ------------------
  |  Branch (2207:5): [True: 0, False: 725]
  ------------------
 2208|      0|      Unreachable();
 2209|    725|  }
 2210|       |
 2211|    725|  if (PROTOBUF_PREDICT_FALSE(ptr == nullptr || !is_valid)) {
  ------------------
  |  |  365|  1.45k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 725]
  |  |  |  Branch (365:54): [Folded, False: 725]
  |  |  |  Branch (365:64): [True: 0, False: 725]
  |  |  |  Branch (365:64): [True: 0, False: 725]
  |  |  ------------------
  ------------------
 2212|      0|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 2213|      0|  }
 2214|    725|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|    725|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|    725|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 2215|    725|}
_ZN6google8protobuf8internal8TcParser23ParseRepeatedStringOnceEPKcPNS1_11SerialArenaEPNS1_12ParseContextERNS0_16RepeatedPtrFieldINSt3__112basic_stringIcNSA_11char_traitsIcEENSA_9allocatorIcEEEEEE:
 2219|      3|    RepeatedPtrField<std::string>& field) {
 2220|      3|  int size = ReadSize(&ptr);
 2221|      3|  if (PROTOBUF_PREDICT_FALSE(!ptr)) return {};
  ------------------
  |  |  365|      3|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 3]
  |  |  |  Branch (365:54): [Folded, False: 3]
  |  |  |  Branch (365:63): [True: 0, False: 3]
  |  |  ------------------
  ------------------
 2222|      3|  auto* str = new (serial_arena->AllocateFromStringBlock()) std::string();
 2223|      3|  field.AddAllocatedForParse(str);
 2224|      3|  ptr = ctx->ReadString(ptr, size, str);
 2225|      3|  if (PROTOBUF_PREDICT_FALSE(!ptr)) return {};
  ------------------
  |  |  365|      3|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 3]
  |  |  |  Branch (365:54): [Folded, False: 3]
  |  |  |  Branch (365:63): [True: 0, False: 3]
  |  |  ------------------
  ------------------
 2226|      3|  PROTOBUF_ASSUME(ptr != nullptr);
  ------------------
  |  |  941|      3|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
 2227|      3|  return ptr;
 2228|      3|}
_ZN6google8protobuf8internal8TcParser9MpMessageILb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 2314|     27|PROTOBUF_NOINLINE const char* TcParser::MpMessage(PROTOBUF_TC_PARAM_DECL) {
 2315|     27|  const auto& entry = RefAt<FieldEntry>(table, data.entry_offset());
 2316|     27|  const uint16_t type_card = entry.type_card;
 2317|     27|  const uint16_t card = type_card & field_layout::kFcMask;
 2318|       |
 2319|       |  // Check for repeated parsing:
 2320|     27|  if (card == field_layout::kFcRepeated) {
  ------------------
  |  Branch (2320:7): [True: 0, False: 27]
  ------------------
 2321|      0|    const uint16_t rep = type_card & field_layout::kRepMask;
 2322|      0|    switch (rep) {
 2323|      0|      case field_layout::kRepMessage:
  ------------------
  |  Branch (2323:7): [True: 0, False: 0]
  ------------------
 2324|      0|        PROTOBUF_MUSTTAIL return MpRepeatedMessageOrGroup<is_split, false>(
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 2325|      0|            PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2326|      0|      case field_layout::kRepGroup:
  ------------------
  |  Branch (2326:7): [True: 0, False: 0]
  ------------------
 2327|      0|        PROTOBUF_MUSTTAIL return MpRepeatedMessageOrGroup<is_split, true>(
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 2328|      0|            PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2329|      0|      default:
  ------------------
  |  Branch (2329:7): [True: 0, False: 0]
  ------------------
 2330|      0|        PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                      PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2331|      0|    }
 2332|      0|  }
 2333|       |
 2334|     27|  const uint32_t decoded_tag = data.tag();
 2335|     27|  const uint32_t decoded_wiretype = decoded_tag & 7;
 2336|     27|  const uint16_t rep = type_card & field_layout::kRepMask;
 2337|     27|  const bool is_group = rep == field_layout::kRepGroup;
 2338|       |
 2339|       |  // Validate wiretype:
 2340|     27|  switch (rep) {
 2341|     27|    case field_layout::kRepMessage:
  ------------------
  |  Branch (2341:5): [True: 27, False: 0]
  ------------------
 2342|     27|      if (decoded_wiretype != WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
  ------------------
  |  Branch (2342:11): [True: 0, False: 27]
  ------------------
 2343|      0|        goto fallback;
 2344|      0|      }
 2345|     27|      break;
 2346|     27|    case field_layout::kRepGroup:
  ------------------
  |  Branch (2346:5): [True: 0, False: 27]
  ------------------
 2347|      0|      if (decoded_wiretype != WireFormatLite::WIRETYPE_START_GROUP) {
  ------------------
  |  Branch (2347:11): [True: 0, False: 0]
  ------------------
 2348|      0|        goto fallback;
 2349|      0|      }
 2350|      0|      break;
 2351|      0|    default: {
  ------------------
  |  Branch (2351:5): [True: 0, False: 27]
  ------------------
 2352|      0|    fallback:
 2353|      0|      PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                    PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2354|      0|    }
 2355|     27|  }
 2356|       |
 2357|     27|  const bool is_oneof = card == field_layout::kFcOneof;
 2358|     27|  bool need_init = false;
 2359|     27|  if (card == field_layout::kFcOptional) {
  ------------------
  |  Branch (2359:7): [True: 27, False: 0]
  ------------------
 2360|     27|    SetHas(entry, msg);
 2361|     27|  } else if (is_oneof) {
  ------------------
  |  Branch (2361:14): [True: 0, False: 0]
  ------------------
 2362|      0|    need_init = ChangeOneof(table, entry, data.tag() >> 3, ctx, msg);
 2363|      0|  }
 2364|       |
 2365|     27|  void* const base = MaybeGetSplitBase(msg, is_split, table);
 2366|     27|  SyncHasbits(msg, hasbits, table);
 2367|     27|  MessageLite*& field = RefAt<MessageLite*>(base, entry.offset);
 2368|       |
 2369|     27|  const TcParseTableBase* inner_table =
 2370|     27|      GetTableFromAux(type_card, *table->field_aux(&entry));
 2371|     27|  if (need_init || field == nullptr) {
  ------------------
  |  Branch (2371:7): [True: 0, False: 27]
  |  Branch (2371:20): [True: 27, False: 0]
  ------------------
 2372|     27|    field = NewMessage(inner_table, msg->GetArena());
 2373|     27|  }
 2374|     27|  const auto inner_loop = [&](const char* ptr) {
 2375|     27|    return ParseLoopPreserveNone(field, ptr, ctx, inner_table);
 2376|     27|  };
 2377|     27|  return is_group ? ctx->ParseGroupInlined(ptr, decoded_tag, inner_loop)
  ------------------
  |  Branch (2377:10): [True: 0, False: 27]
  ------------------
 2378|     27|                  : ctx->ParseLengthDelimitedInlined(ptr, inner_loop);
 2379|     27|}
_ZN6google8protobuf8internal8TcParser15GetTableFromAuxEtNS1_16TcParseTableBase8FieldAuxE:
 2301|     27|    uint16_t type_card, TcParseTableBase::FieldAux aux) {
 2302|     27|  uint16_t tv = type_card & field_layout::kTvMask;
 2303|     27|  if (ABSL_PREDICT_TRUE(tv == field_layout::kTvTable)) {
  ------------------
  |  |  179|     27|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 27, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 27]
  |  |  |  Branch (179:57): [True: 27, False: 0]
  |  |  ------------------
  ------------------
 2304|     27|    return aux.table;
 2305|     27|  }
 2306|      0|  ABSL_DCHECK(tv == field_layout::kTvDefault || tv == field_layout::kTvWeakPtr);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     27|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2307|      0|  const MessageLite* prototype = tv == field_layout::kTvDefault
  ------------------
  |  Branch (2307:34): [True: 0, False: 0]
  ------------------
 2308|      0|                                     ? aux.message_default()
 2309|      0|                                     : aux.message_default_weak();
 2310|      0|  return prototype->GetTcParseTable();
 2311|      0|}
_ZN6google8protobuf8internal8TcParser10NewMessageEPKNS1_16TcParseTableBaseEPNS0_5ArenaE:
  359|  5.32k|    const TcParseTableBase* table, Arena* arena) {
  360|  5.32k|  return table->class_data->New(arena);
  361|  5.32k|}
_ZZN6google8protobuf8internal8TcParser9MpMessageILb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmENKUlS5_E_clES5_:
 2374|     27|  const auto inner_loop = [&](const char* ptr) {
 2375|     27|    return ParseLoopPreserveNone(field, ptr, ctx, inner_table);
 2376|     27|  };
generated_message_tctable_lite.cc:_ZZN6google8protobuf8internal8TcParser10AddMessageEPKNS1_16TcParseTableBaseERNS1_20RepeatedPtrFieldBaseEENK3$_0clEPNS0_5ArenaE:
  366|  2.43k|      [table](Arena* arena) { return NewMessage(table, arena); }));
_ZN6google8protobuf8internal8TcParser27SingularParseMessageAuxImplIhLb0ELb1EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  371|  2.86k|    PROTOBUF_TC_PARAM_DECL) {
  372|  2.86k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 192);
  ------------------
  |  |  670|  2.86k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  373|  2.86k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 256);
  ------------------
  |  |  670|  2.86k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  374|  2.86k|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|  2.86k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 2.86k]
  |  |  |  Branch (365:54): [Folded, False: 2.86k]
  |  |  |  Branch (365:63): [True: 0, False: 2.86k]
  |  |  ------------------
  ------------------
  375|      0|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  376|      0|  }
  377|  2.86k|  auto saved_tag = UnalignedLoad<TagType>(ptr);
  378|  2.86k|  ptr += sizeof(TagType);
  379|  2.86k|  hasbits |= (uint64_t{1} << data.hasbit_idx());
  380|  2.86k|  SyncHasbits(msg, hasbits, table);
  381|  2.86k|  auto& field = RefAt<MessageLite*>(msg, data.offset());
  382|  2.86k|  const auto aux = *table->field_aux(data.aux_idx());
  383|  2.86k|  const auto* inner_table =
  384|  2.86k|      aux_is_table ? aux.table : aux.message_default()->GetTcParseTable();
  ------------------
  |  Branch (384:7): [True: 2.86k, Folded]
  ------------------
  385|       |
  386|  2.86k|  if (field == nullptr) {
  ------------------
  |  Branch (386:7): [True: 2.86k, False: 0]
  ------------------
  387|  2.86k|    field = NewMessage(inner_table, msg->GetArena());
  388|  2.86k|  }
  389|  2.86k|  const auto inner_loop = [&](const char* ptr) {
  390|  2.86k|    return ParseLoop(field, ptr, ctx, inner_table);
  391|  2.86k|  };
  392|  2.86k|  return group_coding
  ------------------
  |  Branch (392:10): [Folded, False: 2.86k]
  ------------------
  393|  2.86k|             ? ctx->ParseGroupInlined(ptr, FastDecodeTag(saved_tag), inner_loop)
  394|  2.86k|             : ctx->ParseLengthDelimitedInlined(ptr, inner_loop);
  395|  2.86k|}
_ZZN6google8protobuf8internal8TcParser27SingularParseMessageAuxImplIhLb0ELb1EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmENKUlS5_E_clES5_:
  389|  2.86k|  const auto inner_loop = [&](const char* ptr) {
  390|  2.86k|    return ParseLoop(field, ptr, ctx, inner_table);
  391|  2.86k|  };
_ZN6google8protobuf8internal8TcParser27RepeatedParseMessageAuxImplIhLb0ELb1EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  453|    806|    PROTOBUF_TC_PARAM_DECL) {
  454|    806|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|    806|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 1, False: 805]
  |  |  |  Branch (365:54): [Folded, False: 806]
  |  |  |  Branch (365:63): [True: 1, False: 805]
  |  |  ------------------
  ------------------
  455|      1|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      1|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      1|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  456|      1|  }
  457|    805|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 256);
  ------------------
  |  |  670|    805|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  458|    805|  const auto expected_tag = UnalignedLoad<TagType>(ptr);
  459|    805|  const auto aux = *table->field_aux(data.aux_idx());
  460|    805|  auto& field = RefAt<RepeatedPtrFieldBase>(msg, data.offset());
  461|    805|  const TcParseTableBase* inner_table =
  462|    805|      aux_is_table ? aux.table : aux.message_default()->GetTcParseTable();
  ------------------
  |  Branch (462:7): [True: 805, Folded]
  ------------------
  463|  2.37k|  do {
  464|  2.37k|    ptr += sizeof(TagType);
  465|  2.37k|    MessageLite* submsg = AddMessage(inner_table, field);
  466|  2.37k|    const auto inner_loop = [&](const char* ptr) {
  467|  2.37k|      return ParseLoop(submsg, ptr, ctx, inner_table);
  468|  2.37k|    };
  469|  2.37k|    ptr = group_coding ? ctx->ParseGroupInlined(
  ------------------
  |  Branch (469:11): [Folded, False: 2.37k]
  ------------------
  470|      0|                             ptr, FastDecodeTag(expected_tag), inner_loop)
  471|  2.37k|                       : ctx->ParseLengthDelimitedInlined(ptr, inner_loop);
  472|  2.37k|    if (PROTOBUF_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  365|  2.37k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 2.37k]
  |  |  |  Branch (365:54): [Folded, False: 2.37k]
  |  |  |  Branch (365:63): [True: 0, False: 2.37k]
  |  |  ------------------
  ------------------
  473|      0|      PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  474|      0|    }
  475|  2.37k|    if (PROTOBUF_PREDICT_FALSE(!ctx->DataAvailable(ptr))) {
  ------------------
  |  |  365|  2.37k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 257, False: 2.12k]
  |  |  |  Branch (365:54): [Folded, False: 2.37k]
  |  |  |  Branch (365:63): [True: 257, False: 2.12k]
  |  |  ------------------
  ------------------
  476|    257|      PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|    257|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                    PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|    257|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  477|    257|    }
  478|  2.37k|  } while (UnalignedLoad<TagType>(ptr) == expected_tag);
  ------------------
  |  Branch (478:12): [True: 1.57k, False: 548]
  ------------------
  479|       |
  480|    548|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|    548|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|    548|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  481|    805|}
_ZZN6google8protobuf8internal8TcParser27RepeatedParseMessageAuxImplIhLb0ELb1EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmENKUlS5_E_clES5_:
  466|  2.37k|    const auto inner_loop = [&](const char* ptr) {
  467|  2.37k|      return ParseLoop(submsg, ptr, ctx, inner_table);
  468|  2.37k|    };
_ZN6google8protobuf8internal8TcParser27RepeatedParseMessageAuxImplItLb0ELb1EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  453|     27|    PROTOBUF_TC_PARAM_DECL) {
  454|     27|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|     27|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 27]
  |  |  |  Branch (365:54): [Folded, False: 27]
  |  |  |  Branch (365:63): [True: 0, False: 27]
  |  |  ------------------
  ------------------
  455|      0|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  456|      0|  }
  457|     27|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 256);
  ------------------
  |  |  670|     27|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  458|     27|  const auto expected_tag = UnalignedLoad<TagType>(ptr);
  459|     27|  const auto aux = *table->field_aux(data.aux_idx());
  460|     27|  auto& field = RefAt<RepeatedPtrFieldBase>(msg, data.offset());
  461|     27|  const TcParseTableBase* inner_table =
  462|     27|      aux_is_table ? aux.table : aux.message_default()->GetTcParseTable();
  ------------------
  |  Branch (462:7): [True: 27, Folded]
  ------------------
  463|     54|  do {
  464|     54|    ptr += sizeof(TagType);
  465|     54|    MessageLite* submsg = AddMessage(inner_table, field);
  466|     54|    const auto inner_loop = [&](const char* ptr) {
  467|     54|      return ParseLoop(submsg, ptr, ctx, inner_table);
  468|     54|    };
  469|     54|    ptr = group_coding ? ctx->ParseGroupInlined(
  ------------------
  |  Branch (469:11): [Folded, False: 54]
  ------------------
  470|      0|                             ptr, FastDecodeTag(expected_tag), inner_loop)
  471|     54|                       : ctx->ParseLengthDelimitedInlined(ptr, inner_loop);
  472|     54|    if (PROTOBUF_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  365|     54|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 54]
  |  |  |  Branch (365:54): [Folded, False: 54]
  |  |  |  Branch (365:63): [True: 0, False: 54]
  |  |  ------------------
  ------------------
  473|      0|      PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  474|      0|    }
  475|     54|    if (PROTOBUF_PREDICT_FALSE(!ctx->DataAvailable(ptr))) {
  ------------------
  |  |  365|     54|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 54]
  |  |  |  Branch (365:54): [Folded, False: 54]
  |  |  |  Branch (365:63): [True: 0, False: 54]
  |  |  ------------------
  ------------------
  476|      0|      PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                    PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  477|      0|    }
  478|     54|  } while (UnalignedLoad<TagType>(ptr) == expected_tag);
  ------------------
  |  Branch (478:12): [True: 27, False: 27]
  ------------------
  479|       |
  480|     27|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|     27|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|     27|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  481|     27|}
_ZZN6google8protobuf8internal8TcParser27RepeatedParseMessageAuxImplItLb0ELb1EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmENKUlS5_E_clES5_:
  466|     54|    const auto inner_loop = [&](const char* ptr) {
  467|     54|      return ParseLoop(submsg, ptr, ctx, inner_table);
  468|     54|    };
_ZN6google8protobuf8internal8TcParser14SingularVarintIbtLb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  753|     10|    PROTOBUF_TC_PARAM_DECL) {
  754|     10|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|     10|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 7, False: 3]
  |  |  |  Branch (365:54): [Folded, False: 10]
  |  |  |  Branch (365:63): [True: 7, False: 3]
  |  |  ------------------
  ------------------
  755|      7|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      7|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      7|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  756|      7|  }
  757|      3|  ptr += sizeof(TagType);  // Consume tag
  758|      3|  hasbits |= (uint64_t{1} << data.hasbit_idx());
  759|       |
  760|       |  // clang isn't smart enough to be able to only conditionally save
  761|       |  // registers to the stack, so we turn the integer-greater-than-128
  762|       |  // case into a separate routine.
  763|      3|  if (PROTOBUF_PREDICT_FALSE(static_cast<int8_t>(*ptr) < 0)) {
  ------------------
  |  |  365|      3|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 3]
  |  |  |  Branch (365:54): [Folded, False: 3]
  |  |  |  Branch (365:63): [True: 0, False: 3]
  |  |  ------------------
  ------------------
  764|      0|    PROTOBUF_MUSTTAIL return SingularVarBigint<FieldType, TagType, zigzag>(
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
  765|      0|        PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
  766|      0|  }
  767|       |
  768|      3|  RefAt<FieldType>(msg, data.offset()) =
  769|      3|      ZigZagDecodeHelper<FieldType, zigzag>(static_cast<uint8_t>(*ptr++));
  770|      3|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      3|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      3|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  771|      3|}
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal12_GLOBAL__N_118ZigZagDecodeHelperIbLb0EEET_S4_:
  708|      3|inline FieldType ZigZagDecodeHelper(FieldType value) {
  709|      3|  return static_cast<FieldType>(value);
  710|      3|}
_ZN6google8protobuf8internal8TcParser12FastVarintS1IjEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  814|  6.06k|    PROTOBUF_TC_PARAM_DECL) {
  815|  6.06k|  using TagType = uint8_t;
  816|  6.06k|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|  6.06k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 1.13k, False: 4.92k]
  |  |  |  Branch (365:54): [Folded, False: 6.06k]
  |  |  |  Branch (365:63): [True: 1.13k, False: 4.92k]
  |  |  ------------------
  ------------------
  817|  1.13k|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|  1.13k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|  1.13k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  818|  1.13k|  }
  819|  4.92k|  int64_t res;
  820|  4.92k|  ptr = ShiftMixParseVarint<FieldType>(ptr + sizeof(TagType), res);
  821|  4.92k|  if (PROTOBUF_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  365|  4.92k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 4.92k]
  |  |  |  Branch (365:54): [Folded, False: 4.92k]
  |  |  |  Branch (365:63): [True: 0, False: 4.92k]
  |  |  ------------------
  ------------------
  822|      0|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  823|      0|  }
  824|  4.92k|  hasbits |= (uint64_t{1} << data.hasbit_idx());
  825|  4.92k|  RefAt<FieldType>(msg, data.offset()) = res;
  826|  4.92k|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|  4.92k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|  4.92k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  827|  4.92k|}
_ZN6google8protobuf8internal8TcParser12PackedVarintIjhLb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  962|    101|    PROTOBUF_TC_PARAM_DECL) {
  963|    101|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|    101|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 101]
  |  |  |  Branch (365:54): [Folded, False: 101]
  |  |  |  Branch (365:63): [True: 0, False: 101]
  |  |  ------------------
  ------------------
  964|      0|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  965|      0|  }
  966|    101|  ptr += sizeof(TagType);
  967|       |  // Since ctx->ReadPackedVarint does not use TailCall or Return, sync any
  968|       |  // pending hasbits now:
  969|    101|  SyncHasbits(msg, hasbits, table);
  970|    101|  auto* field = &RefAt<RepeatedField<FieldType>>(msg, data.offset());
  971|    101|  return ctx->ReadPackedVarint(ptr, [field](uint64_t varint) {
  972|    101|    FieldType val;
  973|    101|    if (zigzag) {
  974|    101|      if (sizeof(FieldType) == 8) {
  975|    101|        val = WireFormatLite::ZigZagDecode64(varint);
  976|    101|      } else {
  977|    101|        val = WireFormatLite::ZigZagDecode32(varint);
  978|    101|      }
  979|    101|    } else {
  980|    101|      val = varint;
  981|    101|    }
  982|    101|    field->Add(val);
  983|    101|  });
  984|    101|}
_ZZN6google8protobuf8internal8TcParser12PackedVarintIjhLb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmENKUlmE_clEm:
  971|    127|  return ctx->ReadPackedVarint(ptr, [field](uint64_t varint) {
  972|    127|    FieldType val;
  973|    127|    if (zigzag) {
  ------------------
  |  Branch (973:9): [Folded, False: 127]
  ------------------
  974|      0|      if (sizeof(FieldType) == 8) {
  ------------------
  |  Branch (974:11): [Folded, False: 0]
  ------------------
  975|      0|        val = WireFormatLite::ZigZagDecode64(varint);
  976|      0|      } else {
  977|      0|        val = WireFormatLite::ZigZagDecode32(varint);
  978|      0|      }
  979|    127|    } else {
  980|    127|      val = varint;
  981|    127|    }
  982|    127|    field->Add(val);
  983|    127|  });
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal12_GLOBAL__N_111ParseVarintImEEPKcS5_PT_:
  634|    601|                                                      Type* value) {
  635|    601|  static_assert(sizeof(Type) == 4 || sizeof(Type) == 8,
  636|    601|                "Only [u]int32_t and [u]int64_t please");
  637|       |#ifdef __aarch64__
  638|       |  // The VarintParse parser has a faster implementation on ARM.
  639|       |  absl::conditional_t<sizeof(Type) == 4, uint32_t, uint64_t> tmp;
  640|       |  p = VarintParse(p, &tmp);
  641|       |  if (p != nullptr) {
  642|       |    *value = tmp;
  643|       |  }
  644|       |  return p;
  645|       |#endif
  646|    601|  int64_t res;
  647|    601|  p = ShiftMixParseVarint<Type>(p, res);
  648|    601|  *value = res;
  649|    601|  return p;
  650|    601|}
_ZN6google8protobuf8internal8TcParser12SingularEnumIhLt1024EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1064|     93|    PROTOBUF_TC_PARAM_DECL) {
 1065|     93|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|     93|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 93]
  |  |  |  Branch (365:54): [Folded, False: 93]
  |  |  |  Branch (365:63): [True: 0, False: 93]
  |  |  ------------------
  ------------------
 1066|      0|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1067|      0|  }
 1068|     93|  const TcParseTableBase::FieldAux aux = *table->field_aux(data.aux_idx());
 1069|     93|  PrefetchEnumData(xform_val, aux);
 1070|     93|  const char* ptr2 = ptr;  // Save for unknown enum case
 1071|     93|  ptr += sizeof(TagType);  // Consume tag
 1072|     93|  uint64_t tmp;
 1073|     93|  ptr = ParseVarint(ptr, &tmp);
 1074|     93|  if (PROTOBUF_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  365|     93|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 93]
  |  |  |  Branch (365:54): [Folded, False: 93]
  |  |  |  Branch (365:63): [True: 0, False: 93]
  |  |  ------------------
  ------------------
 1075|      0|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1076|      0|  }
 1077|     93|  if (PROTOBUF_PREDICT_FALSE(
  ------------------
  |  |  365|     93|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 93]
  |  |  |  Branch (365:54): [Folded, False: 93]
  |  |  |  Branch (365:63): [True: 0, False: 93]
  |  |  ------------------
  ------------------
 1078|     93|          !EnumIsValidAux(static_cast<int32_t>(tmp), xform_val, aux))) {
 1079|      0|    ptr = ptr2;
 1080|      0|    PROTOBUF_MUSTTAIL return FastUnknownEnumFallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return FastUnknownEnumFallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1081|      0|  }
 1082|     93|  hasbits |= (uint64_t{1} << data.hasbit_idx());
 1083|     93|  RefAt<int32_t>(msg, data.offset()) = tmp;
 1084|     93|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|     93|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|     93|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1085|     93|}
_ZN6google8protobuf8internal8TcParser22SingularEnumSmallRangeIhLh0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1215|     84|    PROTOBUF_TC_PARAM_DECL) {
 1216|     84|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|     84|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 60, False: 24]
  |  |  |  Branch (365:54): [Folded, False: 84]
  |  |  |  Branch (365:63): [True: 60, False: 24]
  |  |  ------------------
  ------------------
 1217|     60|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|     60|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|     60|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1218|     60|  }
 1219|       |
 1220|     24|  uint8_t v = ptr[sizeof(TagType)];
 1221|     24|  if (PROTOBUF_PREDICT_FALSE(min > v || v > data.aux_idx())) {
  ------------------
  |  |  365|     48|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 24]
  |  |  |  Branch (365:54): [Folded, False: 24]
  |  |  |  Branch (365:64): [True: 0, False: 24]
  |  |  |  Branch (365:64): [True: 0, False: 24]
  |  |  ------------------
  ------------------
 1222|      0|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1223|      0|  }
 1224|       |
 1225|     24|  RefAt<int32_t>(msg, data.offset()) = v;
 1226|     24|  ptr += sizeof(TagType) + 1;
 1227|     24|  hasbits |= (uint64_t{1} << data.hasbit_idx());
 1228|     24|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|     24|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|     24|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1229|     24|}
_ZN6google8protobuf8internal8TcParser22SingularEnumSmallRangeIhLh1EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1215|  1.06k|    PROTOBUF_TC_PARAM_DECL) {
 1216|  1.06k|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|  1.06k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1.06k]
  |  |  |  Branch (365:54): [Folded, False: 1.06k]
  |  |  |  Branch (365:63): [True: 0, False: 1.06k]
  |  |  ------------------
  ------------------
 1217|      0|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1218|      0|  }
 1219|       |
 1220|  1.06k|  uint8_t v = ptr[sizeof(TagType)];
 1221|  1.06k|  if (PROTOBUF_PREDICT_FALSE(min > v || v > data.aux_idx())) {
  ------------------
  |  |  365|  2.13k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1.06k]
  |  |  |  Branch (365:54): [Folded, False: 1.06k]
  |  |  |  Branch (365:64): [True: 0, False: 1.06k]
  |  |  |  Branch (365:64): [True: 0, False: 1.06k]
  |  |  ------------------
  ------------------
 1222|      0|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1223|      0|  }
 1224|       |
 1225|  1.06k|  RefAt<int32_t>(msg, data.offset()) = v;
 1226|  1.06k|  ptr += sizeof(TagType) + 1;
 1227|  1.06k|  hasbits |= (uint64_t{1} << data.hasbit_idx());
 1228|  1.06k|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|  1.06k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|  1.06k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1229|  1.06k|}
_ZN6google8protobuf8internal8TcParser14SingularStringIhNS1_14ArenaStringPtrELNS2_8Utf8TypeE0EEEPKcPNS0_11MessageLiteES7_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1410|  3.50k|    PROTOBUF_TC_PARAM_DECL) {
 1411|  3.50k|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|  3.50k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 3.50k]
  |  |  |  Branch (365:54): [Folded, False: 3.50k]
  |  |  |  Branch (365:63): [True: 0, False: 3.50k]
  |  |  ------------------
  ------------------
 1412|      0|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1413|      0|  }
 1414|  3.50k|  auto saved_tag = UnalignedLoad<TagType>(ptr);
 1415|  3.50k|  ptr += sizeof(TagType);
 1416|  3.50k|  hasbits |= (uint64_t{1} << data.hasbit_idx());
 1417|  3.50k|  auto& field = RefAt<FieldType>(msg, data.offset());
 1418|  3.50k|  auto arena = msg->GetArena();
 1419|  3.50k|  if (arena) {
  ------------------
  |  Branch (1419:7): [True: 0, False: 3.50k]
  ------------------
 1420|      0|    ptr =
 1421|      0|        ReadStringIntoArena(msg, ptr, ctx, data.aux_idx(), table, field, arena);
 1422|  3.50k|  } else {
 1423|  3.50k|    ptr = ReadStringNoArena(msg, ptr, ctx, data.aux_idx(), table, field);
 1424|  3.50k|  }
 1425|  3.50k|  if (PROTOBUF_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  365|  3.50k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 3.50k]
  |  |  |  Branch (365:54): [Folded, False: 3.50k]
  |  |  |  Branch (365:63): [True: 0, False: 3.50k]
  |  |  ------------------
  ------------------
 1426|      0|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1427|      0|  }
 1428|  3.50k|  switch (utf8) {
 1429|  3.50k|    case kNoUtf8:
  ------------------
  |  Branch (1429:5): [True: 3.50k, False: 0]
  ------------------
 1430|  3.50k|#ifdef NDEBUG
 1431|  3.50k|    case kUtf8ValidateOnly:
  ------------------
  |  Branch (1431:5): [True: 0, False: 3.50k]
  ------------------
 1432|  3.50k|#endif
 1433|  3.50k|      break;
 1434|      0|    default:
  ------------------
  |  Branch (1434:5): [True: 0, False: 3.50k]
  ------------------
 1435|      0|      if (PROTOBUF_PREDICT_TRUE(IsValidUTF8(field))) {
  ------------------
  |  |  364|      0|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 0, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 0]
  |  |  |  Branch (364:62): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1436|      0|        break;
 1437|      0|      }
 1438|      0|      ReportFastUtf8Error(FastDecodeTag(saved_tag), table);
 1439|      0|      if (utf8 == kUtf8) {
  ------------------
  |  Branch (1439:11): [Folded, False: 0]
  ------------------
 1440|      0|        PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                      PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1441|      0|      }
 1442|      0|      break;
 1443|  3.50k|  }
 1444|       |
 1445|  3.50k|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|  3.50k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|  3.50k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1446|  3.50k|}
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal12_GLOBAL__N_119ReadStringIntoArenaEPNS0_11MessageLiteEPKcPNS1_12ParseContextEjPKNS1_16TcParseTableBaseERNS1_14ArenaStringPtrEPNS0_5ArenaE:
 1387|    661|    ArenaStringPtr& field, Arena* arena) {
 1388|    661|  return ctx->ReadArenaString(ptr, &field, arena);
 1389|    661|}
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal12_GLOBAL__N_117ReadStringNoArenaEPNS0_11MessageLiteEPKcPNS1_12ParseContextEjPKNS1_16TcParseTableBaseERNS1_14ArenaStringPtrE:
 1395|  4.40k|                              ArenaStringPtr& field) {
 1396|  4.40k|  int size = ReadSize(&ptr);
 1397|  4.40k|  if (!ptr) return nullptr;
  ------------------
  |  Branch (1397:7): [True: 0, False: 4.40k]
  ------------------
 1398|  4.40k|  return ctx->ReadString(ptr, size, field.MutableNoCopy(nullptr));
 1399|  4.40k|}
_ZN6google8protobuf8internal8TcParser14SingularStringIhNS1_14ArenaStringPtrELNS2_8Utf8TypeE2EEEPKcPNS0_11MessageLiteES7_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1410|  1.55k|    PROTOBUF_TC_PARAM_DECL) {
 1411|  1.55k|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|  1.55k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1.55k]
  |  |  |  Branch (365:54): [Folded, False: 1.55k]
  |  |  |  Branch (365:63): [True: 0, False: 1.55k]
  |  |  ------------------
  ------------------
 1412|      0|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1413|      0|  }
 1414|  1.55k|  auto saved_tag = UnalignedLoad<TagType>(ptr);
 1415|  1.55k|  ptr += sizeof(TagType);
 1416|  1.55k|  hasbits |= (uint64_t{1} << data.hasbit_idx());
 1417|  1.55k|  auto& field = RefAt<FieldType>(msg, data.offset());
 1418|  1.55k|  auto arena = msg->GetArena();
 1419|  1.55k|  if (arena) {
  ------------------
  |  Branch (1419:7): [True: 659, False: 898]
  ------------------
 1420|    659|    ptr =
 1421|    659|        ReadStringIntoArena(msg, ptr, ctx, data.aux_idx(), table, field, arena);
 1422|    898|  } else {
 1423|    898|    ptr = ReadStringNoArena(msg, ptr, ctx, data.aux_idx(), table, field);
 1424|    898|  }
 1425|  1.55k|  if (PROTOBUF_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  365|  1.55k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1.55k]
  |  |  |  Branch (365:54): [Folded, False: 1.55k]
  |  |  |  Branch (365:63): [True: 0, False: 1.55k]
  |  |  ------------------
  ------------------
 1426|      0|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1427|      0|  }
 1428|  1.55k|  switch (utf8) {
 1429|      0|    case kNoUtf8:
  ------------------
  |  Branch (1429:5): [True: 0, False: 1.55k]
  ------------------
 1430|      0|#ifdef NDEBUG
 1431|  1.55k|    case kUtf8ValidateOnly:
  ------------------
  |  Branch (1431:5): [True: 1.55k, False: 0]
  ------------------
 1432|  1.55k|#endif
 1433|  1.55k|      break;
 1434|      0|    default:
  ------------------
  |  Branch (1434:5): [True: 0, False: 1.55k]
  ------------------
 1435|      0|      if (PROTOBUF_PREDICT_TRUE(IsValidUTF8(field))) {
  ------------------
  |  |  364|      0|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 0, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 0]
  |  |  |  Branch (364:62): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1436|      0|        break;
 1437|      0|      }
 1438|      0|      ReportFastUtf8Error(FastDecodeTag(saved_tag), table);
 1439|      0|      if (utf8 == kUtf8) {
  ------------------
  |  Branch (1439:11): [Folded, False: 0]
  ------------------
 1440|      0|        PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                      PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1441|      0|      }
 1442|      0|      break;
 1443|  1.55k|  }
 1444|       |
 1445|  1.55k|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|  1.55k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|  1.55k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1446|  1.55k|}
_ZN6google8protobuf8internal8TcParser14SingularStringItNS1_14ArenaStringPtrELNS2_8Utf8TypeE2EEEPKcPNS0_11MessageLiteES7_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1410|      7|    PROTOBUF_TC_PARAM_DECL) {
 1411|      7|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|      7|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 7]
  |  |  |  Branch (365:54): [Folded, False: 7]
  |  |  |  Branch (365:63): [True: 0, False: 7]
  |  |  ------------------
  ------------------
 1412|      0|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1413|      0|  }
 1414|      7|  auto saved_tag = UnalignedLoad<TagType>(ptr);
 1415|      7|  ptr += sizeof(TagType);
 1416|      7|  hasbits |= (uint64_t{1} << data.hasbit_idx());
 1417|      7|  auto& field = RefAt<FieldType>(msg, data.offset());
 1418|      7|  auto arena = msg->GetArena();
 1419|      7|  if (arena) {
  ------------------
  |  Branch (1419:7): [True: 2, False: 5]
  ------------------
 1420|      2|    ptr =
 1421|      2|        ReadStringIntoArena(msg, ptr, ctx, data.aux_idx(), table, field, arena);
 1422|      5|  } else {
 1423|      5|    ptr = ReadStringNoArena(msg, ptr, ctx, data.aux_idx(), table, field);
 1424|      5|  }
 1425|      7|  if (PROTOBUF_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  365|      7|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 7]
  |  |  |  Branch (365:54): [Folded, False: 7]
  |  |  |  Branch (365:63): [True: 0, False: 7]
  |  |  ------------------
  ------------------
 1426|      0|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1427|      0|  }
 1428|      7|  switch (utf8) {
 1429|      0|    case kNoUtf8:
  ------------------
  |  Branch (1429:5): [True: 0, False: 7]
  ------------------
 1430|      0|#ifdef NDEBUG
 1431|      7|    case kUtf8ValidateOnly:
  ------------------
  |  Branch (1431:5): [True: 7, False: 0]
  ------------------
 1432|      7|#endif
 1433|      7|      break;
 1434|      0|    default:
  ------------------
  |  Branch (1434:5): [True: 0, False: 7]
  ------------------
 1435|      0|      if (PROTOBUF_PREDICT_TRUE(IsValidUTF8(field))) {
  ------------------
  |  |  364|      0|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 0, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 0]
  |  |  |  Branch (364:62): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1436|      0|        break;
 1437|      0|      }
 1438|      0|      ReportFastUtf8Error(FastDecodeTag(saved_tag), table);
 1439|      0|      if (utf8 == kUtf8) {
  ------------------
  |  Branch (1439:11): [Folded, False: 0]
  ------------------
 1440|      0|        PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                      PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1441|      0|      }
 1442|      0|      break;
 1443|      7|  }
 1444|       |
 1445|      7|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      7|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      7|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1446|      7|}
_ZN6google8protobuf8internal8TcParser14RepeatedStringIhNS0_16RepeatedPtrFieldINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEELNS2_8Utf8TypeE0EEEPKcPNS0_11MessageLiteESF_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1518|  1.29k|    PROTOBUF_TC_PARAM_DECL) {
 1519|  1.29k|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|  1.29k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1.29k]
  |  |  |  Branch (365:54): [Folded, False: 1.29k]
  |  |  |  Branch (365:63): [True: 0, False: 1.29k]
  |  |  ------------------
  ------------------
 1520|      0|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1521|      0|  }
 1522|  1.29k|  const auto expected_tag = UnalignedLoad<TagType>(ptr);
 1523|  1.29k|  auto& field = RefAt<FieldType>(msg, data.offset());
 1524|       |
 1525|  1.29k|  const auto validate_last_string = [expected_tag, table, &field] {
 1526|  1.29k|    switch (utf8) {
 1527|  1.29k|      case kNoUtf8:
 1528|  1.29k|#ifdef NDEBUG
 1529|  1.29k|      case kUtf8ValidateOnly:
 1530|  1.29k|#endif
 1531|  1.29k|        return true;
 1532|  1.29k|      default:
 1533|  1.29k|        if (PROTOBUF_PREDICT_TRUE(
 1534|  1.29k|                utf8_range::IsStructurallyValid(field[field.size() - 1]))) {
 1535|  1.29k|          return true;
 1536|  1.29k|        }
 1537|  1.29k|        ReportFastUtf8Error(FastDecodeTag(expected_tag), table);
 1538|  1.29k|        if (utf8 == kUtf8) return false;
 1539|  1.29k|        return true;
 1540|  1.29k|    }
 1541|  1.29k|  };
 1542|       |
 1543|  1.29k|  auto* arena = field.GetArena();
 1544|  1.29k|  SerialArena* serial_arena;
 1545|  1.29k|  if (PROTOBUF_PREDICT_TRUE(arena != nullptr &&
  ------------------
  |  |  364|  2.58k|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 0, False: 1.29k]
  |  |  |  Branch (364:53): [Folded, False: 1.29k]
  |  |  |  Branch (364:63): [True: 0, False: 1.29k]
  |  |  |  Branch (364:63): [True: 0, False: 0]
  |  |  |  Branch (364:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1546|  1.29k|                            arena->impl_.GetSerialArenaFast(&serial_arena) &&
 1547|  1.29k|                            field.PrepareForParse())) {
 1548|      0|    do {
 1549|      0|      ptr += sizeof(TagType);
 1550|      0|      ptr = ParseRepeatedStringOnce(ptr, serial_arena, ctx, field);
 1551|       |
 1552|      0|      if (PROTOBUF_PREDICT_FALSE(ptr == nullptr || !validate_last_string())) {
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:64): [True: 0, False: 0]
  |  |  |  Branch (365:64): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1553|      0|        PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                      PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1554|      0|      }
 1555|      0|      if (PROTOBUF_PREDICT_FALSE(!ctx->DataAvailable(ptr))) goto parse_loop;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1556|      0|    } while (UnalignedLoad<TagType>(ptr) == expected_tag);
  ------------------
  |  Branch (1556:14): [True: 0, False: 0]
  ------------------
 1557|  1.29k|  } else {
 1558|  2.42k|    do {
 1559|  2.42k|      ptr += sizeof(TagType);
 1560|  2.42k|      std::string* str = field.Add();
 1561|  2.42k|      ptr = InlineGreedyStringParser(str, ptr, ctx);
 1562|  2.42k|      if (PROTOBUF_PREDICT_FALSE(ptr == nullptr || !validate_last_string())) {
  ------------------
  |  |  365|  4.84k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 2.42k]
  |  |  |  Branch (365:54): [Folded, False: 2.42k]
  |  |  |  Branch (365:64): [True: 0, False: 2.42k]
  |  |  |  Branch (365:64): [True: 0, False: 2.42k]
  |  |  ------------------
  ------------------
 1563|      0|        PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                      PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1564|      0|      }
 1565|  2.42k|      if (PROTOBUF_PREDICT_FALSE(!ctx->DataAvailable(ptr))) goto parse_loop;
  ------------------
  |  |  365|  2.42k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 1.29k, False: 1.13k]
  |  |  |  Branch (365:54): [Folded, False: 2.42k]
  |  |  |  Branch (365:63): [True: 1.29k, False: 1.13k]
  |  |  ------------------
  ------------------
 1566|  2.42k|    } while (UnalignedLoad<TagType>(ptr) == expected_tag);
  ------------------
  |  Branch (1566:14): [True: 1.13k, False: 0]
  ------------------
 1567|  1.29k|  }
 1568|      0|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1569|  1.29k|parse_loop:
 1570|  1.29k|  PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|  1.29k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|  1.29k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1571|  1.29k|}
_ZZN6google8protobuf8internal8TcParser14RepeatedStringIhNS0_16RepeatedPtrFieldINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEELNS2_8Utf8TypeE0EEEPKcPNS0_11MessageLiteESF_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmENKUlvE_clEv:
 1525|  2.42k|  const auto validate_last_string = [expected_tag, table, &field] {
 1526|  2.42k|    switch (utf8) {
 1527|  2.42k|      case kNoUtf8:
  ------------------
  |  Branch (1527:7): [True: 2.42k, False: 0]
  ------------------
 1528|  2.42k|#ifdef NDEBUG
 1529|  2.42k|      case kUtf8ValidateOnly:
  ------------------
  |  Branch (1529:7): [True: 0, False: 2.42k]
  ------------------
 1530|  2.42k|#endif
 1531|  2.42k|        return true;
 1532|      0|      default:
  ------------------
  |  Branch (1532:7): [True: 0, False: 2.42k]
  ------------------
 1533|      0|        if (PROTOBUF_PREDICT_TRUE(
  ------------------
  |  |  364|      0|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 0, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 0]
  |  |  |  Branch (364:62): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1534|      0|                utf8_range::IsStructurallyValid(field[field.size() - 1]))) {
 1535|      0|          return true;
 1536|      0|        }
 1537|      0|        ReportFastUtf8Error(FastDecodeTag(expected_tag), table);
 1538|      0|        if (utf8 == kUtf8) return false;
  ------------------
  |  Branch (1538:13): [Folded, False: 0]
  ------------------
 1539|      0|        return true;
 1540|  2.42k|    }
 1541|  2.42k|  };
_ZN6google8protobuf8internal8TcParser14RepeatedStringIhNS0_16RepeatedPtrFieldINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEELNS2_8Utf8TypeE2EEEPKcPNS0_11MessageLiteESF_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1518|      6|    PROTOBUF_TC_PARAM_DECL) {
 1519|      6|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|      6|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 6]
  |  |  |  Branch (365:54): [Folded, False: 6]
  |  |  |  Branch (365:63): [True: 0, False: 6]
  |  |  ------------------
  ------------------
 1520|      0|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1521|      0|  }
 1522|      6|  const auto expected_tag = UnalignedLoad<TagType>(ptr);
 1523|      6|  auto& field = RefAt<FieldType>(msg, data.offset());
 1524|       |
 1525|      6|  const auto validate_last_string = [expected_tag, table, &field] {
 1526|      6|    switch (utf8) {
 1527|      6|      case kNoUtf8:
 1528|      6|#ifdef NDEBUG
 1529|      6|      case kUtf8ValidateOnly:
 1530|      6|#endif
 1531|      6|        return true;
 1532|      6|      default:
 1533|      6|        if (PROTOBUF_PREDICT_TRUE(
 1534|      6|                utf8_range::IsStructurallyValid(field[field.size() - 1]))) {
 1535|      6|          return true;
 1536|      6|        }
 1537|      6|        ReportFastUtf8Error(FastDecodeTag(expected_tag), table);
 1538|      6|        if (utf8 == kUtf8) return false;
 1539|      6|        return true;
 1540|      6|    }
 1541|      6|  };
 1542|       |
 1543|      6|  auto* arena = field.GetArena();
 1544|      6|  SerialArena* serial_arena;
 1545|      6|  if (PROTOBUF_PREDICT_TRUE(arena != nullptr &&
  ------------------
  |  |  364|     18|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 3, False: 3]
  |  |  |  Branch (364:53): [Folded, False: 6]
  |  |  |  Branch (364:63): [True: 3, False: 3]
  |  |  |  Branch (364:63): [True: 3, False: 0]
  |  |  |  Branch (364:63): [True: 3, False: 0]
  |  |  ------------------
  ------------------
 1546|      6|                            arena->impl_.GetSerialArenaFast(&serial_arena) &&
 1547|      6|                            field.PrepareForParse())) {
 1548|      3|    do {
 1549|      3|      ptr += sizeof(TagType);
 1550|      3|      ptr = ParseRepeatedStringOnce(ptr, serial_arena, ctx, field);
 1551|       |
 1552|      3|      if (PROTOBUF_PREDICT_FALSE(ptr == nullptr || !validate_last_string())) {
  ------------------
  |  |  365|      6|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 3]
  |  |  |  Branch (365:54): [Folded, False: 3]
  |  |  |  Branch (365:64): [True: 0, False: 3]
  |  |  |  Branch (365:64): [True: 0, False: 3]
  |  |  ------------------
  ------------------
 1553|      0|        PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                      PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1554|      0|      }
 1555|      3|      if (PROTOBUF_PREDICT_FALSE(!ctx->DataAvailable(ptr))) goto parse_loop;
  ------------------
  |  |  365|      3|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 2, False: 1]
  |  |  |  Branch (365:54): [Folded, False: 3]
  |  |  |  Branch (365:63): [True: 2, False: 1]
  |  |  ------------------
  ------------------
 1556|      3|    } while (UnalignedLoad<TagType>(ptr) == expected_tag);
  ------------------
  |  Branch (1556:14): [True: 0, False: 1]
  ------------------
 1557|      3|  } else {
 1558|      3|    do {
 1559|      3|      ptr += sizeof(TagType);
 1560|      3|      std::string* str = field.Add();
 1561|      3|      ptr = InlineGreedyStringParser(str, ptr, ctx);
 1562|      3|      if (PROTOBUF_PREDICT_FALSE(ptr == nullptr || !validate_last_string())) {
  ------------------
  |  |  365|      6|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 3]
  |  |  |  Branch (365:54): [Folded, False: 3]
  |  |  |  Branch (365:64): [True: 0, False: 3]
  |  |  |  Branch (365:64): [True: 0, False: 3]
  |  |  ------------------
  ------------------
 1563|      0|        PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                      PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1564|      0|      }
 1565|      3|      if (PROTOBUF_PREDICT_FALSE(!ctx->DataAvailable(ptr))) goto parse_loop;
  ------------------
  |  |  365|      3|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 2, False: 1]
  |  |  |  Branch (365:54): [Folded, False: 3]
  |  |  |  Branch (365:63): [True: 2, False: 1]
  |  |  ------------------
  ------------------
 1566|      3|    } while (UnalignedLoad<TagType>(ptr) == expected_tag);
  ------------------
  |  Branch (1566:14): [True: 0, False: 1]
  ------------------
 1567|      3|  }
 1568|      2|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      2|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      2|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1569|      4|parse_loop:
 1570|      4|  PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      4|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      4|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1571|      6|}
_ZZN6google8protobuf8internal8TcParser14RepeatedStringIhNS0_16RepeatedPtrFieldINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEELNS2_8Utf8TypeE2EEEPKcPNS0_11MessageLiteESF_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmENKUlvE_clEv:
 1525|      6|  const auto validate_last_string = [expected_tag, table, &field] {
 1526|      6|    switch (utf8) {
 1527|      0|      case kNoUtf8:
  ------------------
  |  Branch (1527:7): [True: 0, False: 6]
  ------------------
 1528|      0|#ifdef NDEBUG
 1529|      6|      case kUtf8ValidateOnly:
  ------------------
  |  Branch (1529:7): [True: 6, False: 0]
  ------------------
 1530|      6|#endif
 1531|      6|        return true;
 1532|      0|      default:
  ------------------
  |  Branch (1532:7): [True: 0, False: 6]
  ------------------
 1533|      0|        if (PROTOBUF_PREDICT_TRUE(
  ------------------
  |  |  364|      0|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 0, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 0]
  |  |  |  Branch (364:62): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1534|      0|                utf8_range::IsStructurallyValid(field[field.size() - 1]))) {
 1535|      0|          return true;
 1536|      0|        }
 1537|      0|        ReportFastUtf8Error(FastDecodeTag(expected_tag), table);
 1538|      0|        if (utf8 == kUtf8) return false;
  ------------------
  |  Branch (1538:13): [Folded, False: 0]
  ------------------
 1539|      0|        return true;
 1540|      6|    }
 1541|      6|  };

_ZN6google8protobuf8internal24InitProtobufDefaultsSlowEv:
  101|      2|void InitProtobufDefaultsSlow() {
  102|      2|  static bool is_inited = InitProtobufDefaultsImpl();
  103|      2|  (void)is_inited;
  104|      2|}
generated_message_util.cc:_ZN6google8protobuf8internalL24InitProtobufDefaultsImplEv:
   91|      2|static bool InitProtobufDefaultsImpl() {
   92|      2|  fixed_address_empty_string.DefaultConstruct();
   93|      2|  OnShutdownDestroyString(fixed_address_empty_string.get_mutable());
   94|      2|  InitWeakDefaults();
   95|       |
   96|       |
   97|      2|  init_protobuf_defaults_state.store(true, std::memory_order_release);
   98|      2|  return true;
   99|      2|}
generated_message_util.cc:_ZN6google8protobuf8internalL16InitWeakDefaultsEv:
   71|      2|static void InitWeakDefaults() {
   72|       |  // force link the dummy entry.
   73|      2|  StrongPointer<DummyWeakDefault*, &dummy_weak_default>();
   74|       |  // We don't know the size of each object, but we know the layout of the tail.
   75|       |  // It contains a WeakDescriptorDefaultTail object.
   76|       |  // As such, we iterate the section backwards.
   77|      2|  const char* start = &__start_pb_defaults;
   78|      2|  const char* end = &__stop_pb_defaults;
   79|      4|  while (start != end) {
  ------------------
  |  Branch (79:10): [True: 2, False: 2]
  ------------------
   80|      2|    auto* tail = reinterpret_cast<const WeakDescriptorDefaultTail*>(end) - 1;
   81|      2|    end -= tail->size;
   82|      2|    const Message* instance = reinterpret_cast<const Message*>(end);
   83|      2|    *tail->target = instance;
   84|      2|  }
   85|      2|}

_ZN6google8protobuf8internal20InitProtobufDefaultsEv:
   71|     67|PROTOBUF_EXPORT inline void InitProtobufDefaults() {
   72|     67|  if (PROTOBUF_PREDICT_FALSE(
  ------------------
  |  |  365|     67|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 67]
  |  |  |  Branch (365:54): [Folded, False: 67]
  |  |  |  Branch (365:63): [True: 0, False: 67]
  |  |  ------------------
  ------------------
   73|     67|          !init_protobuf_defaults_state.load(std::memory_order_acquire))) {
   74|      0|    InitProtobufDefaultsSlow();
   75|      0|  }
   76|     67|}
_ZN6google8protobuf8internal14GetEmptyStringEv:
   79|     61|PROTOBUF_EXPORT inline const std::string& GetEmptyString() {
   80|     61|  InitProtobufDefaults();
   81|     61|  return GetEmptyStringAlreadyInited();
   82|     61|}
_ZN6google8protobuf8internal23OnShutdownDestroyStringEPKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  182|      2|inline void OnShutdownDestroyString(const std::string* ptr) {
  183|      2|  OnShutdownRun(DestroyString, ptr);
  184|      2|}
_ZN6google8protobuf8internal17AllAreInitializedINS0_15DescriptorProtoEEEbRKNS0_16RepeatedPtrFieldIT_EE:
  103|    117|bool AllAreInitialized(const RepeatedPtrField<Msg>& t) {
  104|    224|  for (int i = t.size(); --i >= 0;) {
  ------------------
  |  Branch (104:26): [True: 107, False: 117]
  ------------------
  105|    107|    if (!t.Get(i).IsInitialized()) return false;
  ------------------
  |  Branch (105:9): [True: 0, False: 107]
  ------------------
  106|    107|  }
  107|    117|  return true;
  108|    117|}
_ZN6google8protobuf8internal17AllAreInitializedINS0_19EnumDescriptorProtoEEEbRKNS0_16RepeatedPtrFieldIT_EE:
  103|    117|bool AllAreInitialized(const RepeatedPtrField<Msg>& t) {
  104|    171|  for (int i = t.size(); --i >= 0;) {
  ------------------
  |  Branch (104:26): [True: 54, False: 117]
  ------------------
  105|     54|    if (!t.Get(i).IsInitialized()) return false;
  ------------------
  |  Branch (105:9): [True: 0, False: 54]
  ------------------
  106|     54|  }
  107|    117|  return true;
  108|    117|}
_ZN6google8protobuf8internal17AllAreInitializedINS0_22ServiceDescriptorProtoEEEbRKNS0_16RepeatedPtrFieldIT_EE:
  103|     10|bool AllAreInitialized(const RepeatedPtrField<Msg>& t) {
  104|     10|  for (int i = t.size(); --i >= 0;) {
  ------------------
  |  Branch (104:26): [True: 0, False: 10]
  ------------------
  105|      0|    if (!t.Get(i).IsInitialized()) return false;
  ------------------
  |  Branch (105:9): [True: 0, False: 0]
  ------------------
  106|      0|  }
  107|     10|  return true;
  108|     10|}
_ZN6google8protobuf8internal17AllAreInitializedINS0_20FieldDescriptorProtoEEEbRKNS0_16RepeatedPtrFieldIT_EE:
  103|    224|bool AllAreInitialized(const RepeatedPtrField<Msg>& t) {
  104|    755|  for (int i = t.size(); --i >= 0;) {
  ------------------
  |  Branch (104:26): [True: 531, False: 224]
  ------------------
  105|    531|    if (!t.Get(i).IsInitialized()) return false;
  ------------------
  |  Branch (105:9): [True: 0, False: 531]
  ------------------
  106|    531|  }
  107|    224|  return true;
  108|    224|}
_ZN6google8protobuf8internal17AllAreInitializedINS0_30DescriptorProto_ExtensionRangeEEEbRKNS0_16RepeatedPtrFieldIT_EE:
  103|    107|bool AllAreInitialized(const RepeatedPtrField<Msg>& t) {
  104|    135|  for (int i = t.size(); --i >= 0;) {
  ------------------
  |  Branch (104:26): [True: 28, False: 107]
  ------------------
  105|     28|    if (!t.Get(i).IsInitialized()) return false;
  ------------------
  |  Branch (105:9): [True: 0, False: 28]
  ------------------
  106|     28|  }
  107|    107|  return true;
  108|    107|}
_ZN6google8protobuf8internal17AllAreInitializedINS0_20OneofDescriptorProtoEEEbRKNS0_16RepeatedPtrFieldIT_EE:
  103|    107|bool AllAreInitialized(const RepeatedPtrField<Msg>& t) {
  104|    113|  for (int i = t.size(); --i >= 0;) {
  ------------------
  |  Branch (104:26): [True: 6, False: 107]
  ------------------
  105|      6|    if (!t.Get(i).IsInitialized()) return false;
  ------------------
  |  Branch (105:9): [True: 0, False: 6]
  ------------------
  106|      6|  }
  107|    107|  return true;
  108|    107|}
_ZN6google8protobuf8internal17AllAreInitializedINS0_19UninterpretedOptionEEEbRKNS0_16RepeatedPtrFieldIT_EE:
  103|     77|bool AllAreInitialized(const RepeatedPtrField<Msg>& t) {
  104|     77|  for (int i = t.size(); --i >= 0;) {
  ------------------
  |  Branch (104:26): [True: 0, False: 77]
  ------------------
  105|      0|    if (!t.Get(i).IsInitialized()) return false;
  ------------------
  |  Branch (105:9): [True: 0, False: 0]
  ------------------
  106|      0|  }
  107|     77|  return true;
  108|     77|}
_ZN6google8protobuf8internal17AllAreInitializedINS0_24EnumValueDescriptorProtoEEEbRKNS0_16RepeatedPtrFieldIT_EE:
  103|     54|bool AllAreInitialized(const RepeatedPtrField<Msg>& t) {
  104|    538|  for (int i = t.size(); --i >= 0;) {
  ------------------
  |  Branch (104:26): [True: 484, False: 54]
  ------------------
  105|    484|    if (!t.Get(i).IsInitialized()) return false;
  ------------------
  |  Branch (105:9): [True: 0, False: 484]
  ------------------
  106|    484|  }
  107|     54|  return true;
  108|     54|}
_ZN6google8protobuf8internal17AllAreInitializedINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEEbRKNS0_16RepeatedPtrFieldIT_EE:
  103|      1|bool AllAreInitialized(const RepeatedPtrField<Msg>& t) {
  104|      5|  for (int i = t.size(); --i >= 0;) {
  ------------------
  |  Branch (104:26): [True: 4, False: 1]
  ------------------
  105|      4|    if (!t.Get(i).IsInitialized()) return false;
  ------------------
  |  Branch (105:9): [True: 0, False: 4]
  ------------------
  106|      4|  }
  107|      1|  return true;
  108|      1|}

_ZN6google8protobuf2io19EpsCopyOutputStream30WriteStringMaybeAliasedOutlineEjRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPh:
  990|      1|                                                           uint8_t* ptr) {
  991|      1|  ptr = EnsureSpace(ptr);
  992|      1|  uint32_t size = s.size();
  993|      1|  ptr = WriteLengthDelim(num, size, ptr);
  994|      1|  return WriteRawMaybeAliased(s.data(), size, ptr);
  995|      1|}

_ZN6google8protobuf2io16CodedInputStream24GetDefaultRecursionLimitEv:
  387|  2.60k|  static int GetDefaultRecursionLimit() { return default_recursion_limit_; }
_ZN6google8protobuf2io19EpsCopyOutputStreamC2EPvib:
  643|    258|      : end_(static_cast<uint8_t*>(data) + size),
  644|    258|        buffer_end_(nullptr),
  645|    258|        stream_(nullptr),
  646|    258|        is_serialization_deterministic_(deterministic) {}
_ZN6google8protobuf2io19EpsCopyOutputStream8WriteRawEPKviPh:
  669|      1|  uint8_t* WriteRaw(const void* data, int size, uint8_t* ptr) {
  670|      1|    if (PROTOBUF_PREDICT_FALSE(end_ - ptr < size)) {
  ------------------
  |  |  365|      1|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1]
  |  |  |  Branch (365:54): [Folded, False: 1]
  |  |  |  Branch (365:63): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  671|      0|      return WriteRawFallback(data, size, ptr);
  672|      0|    }
  673|      1|    std::memcpy(ptr, data, static_cast<unsigned int>(size));
  674|      1|    return ptr + size;
  675|      1|  }
_ZN6google8protobuf2io19EpsCopyOutputStream20WriteRawMaybeAliasedEPKviPh:
  683|      1|  uint8_t* WriteRawMaybeAliased(const void* data, int size, uint8_t* ptr) {
  684|      1|    if (aliasing_enabled_) {
  ------------------
  |  Branch (684:9): [True: 0, False: 1]
  ------------------
  685|      0|      return WriteAliasedRaw(data, size, ptr);
  686|      1|    } else {
  687|      1|      return WriteRaw(data, size, ptr);
  688|      1|    }
  689|      1|  }
_ZN6google8protobuf2io17CodedOutputStream35IsDefaultSerializationDeterministicEv:
 1258|    258|  static bool IsDefaultSerializationDeterministic() {
 1259|    258|    return default_serialization_deterministic_.load(
 1260|    258|               std::memory_order_relaxed) != 0;
 1261|    258|  }

_ZN6google8protobuf2io9Tokenizer12IsIdentifierERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
 1244|      5|bool Tokenizer::IsIdentifier(const std::string& text) {
 1245|       |  // Mirrors IDENTIFIER definition in Tokenizer::Next() above.
 1246|      5|  if (text.size() == 0) return false;
  ------------------
  |  Branch (1246:7): [True: 0, False: 5]
  ------------------
 1247|      5|  if (!Letter::InClass(text.at(0))) return false;
  ------------------
  |  Branch (1247:7): [True: 0, False: 5]
  ------------------
 1248|      5|  if (!AllInClass<Alphanumeric>(text.substr(1))) return false;
  ------------------
  |  Branch (1248:7): [True: 0, False: 5]
  ------------------
 1249|      5|  return true;
 1250|      5|}
tokenizer.cc:_ZN6google8protobuf2io12_GLOBAL__N_16Letter7InClassEc:
  100|     30|    static inline bool InClass(char c) { return EXPRESSION; } \
  ------------------
  |  Branch (100:49): [True: 0, False: 5]
  |  Branch (100:49): [True: 0, False: 0]
  |  Branch (100:49): [True: 5, False: 0]
  |  Branch (100:49): [True: 5, False: 0]
  |  Branch (100:49): [True: 0, False: 0]
  ------------------
tokenizer.cc:_ZN6google8protobuf2io12_GLOBAL__N_112Alphanumeric7InClassEc:
  100|    316|    static inline bool InClass(char c) { return EXPRESSION; } \
  ------------------
  |  Branch (100:49): [True: 0, False: 44]
  |  Branch (100:49): [True: 0, False: 0]
  |  Branch (100:49): [True: 44, False: 0]
  |  Branch (100:49): [True: 42, False: 2]
  |  Branch (100:49): [True: 2, False: 0]
  |  Branch (100:49): [True: 0, False: 2]
  |  Branch (100:49): [True: 2, False: 0]
  ------------------
tokenizer.cc:_ZN6google8protobuf2ioL10AllInClassINS1_12_GLOBAL__N_112AlphanumericEEEbRKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE:
 1237|      5|static bool AllInClass(const std::string& s) {
 1238|     44|  for (const char character : s) {
  ------------------
  |  Branch (1238:29): [True: 44, False: 5]
  ------------------
 1239|     44|    if (!CharacterClass::InClass(character)) return false;
  ------------------
  |  Branch (1239:9): [True: 0, False: 44]
  ------------------
 1240|     44|  }
 1241|      5|  return true;
 1242|      5|}

_ZN6google8protobuf2io19mutable_string_dataEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  499|    258|inline char* mutable_string_data(std::string* s) {
  500|    258|  return &(*s)[0];
  501|    258|}

_ZNK6google8protobuf7Message11GetMetadataEv:
  155|  39.1k|Metadata Message::GetMetadata() const {
  156|  39.1k|  return GetMetadataImpl(GetClassData()->full());
  157|  39.1k|}
_ZN6google8protobuf7Message15GetMetadataImplERKNS0_8internal13ClassDataFullE:
  159|  52.1k|Metadata Message::GetMetadataImpl(const internal::ClassDataFull& data) {
  160|  52.1k|  auto* table = data.descriptor_table;
  161|       |  // Only codegen types provide a table. DynamicMessage does not provide a table
  162|       |  // and instead eagerly initializes the descriptor/reflection members.
  163|  52.1k|  if (ABSL_PREDICT_TRUE(table != nullptr)) {
  ------------------
  |  |  179|  52.1k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 52.1k, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 52.1k]
  |  |  |  Branch (179:57): [True: 52.1k, False: 0]
  |  |  ------------------
  ------------------
  164|  52.1k|    if (ABSL_PREDICT_FALSE(data.get_metadata_tracker != nullptr)) {
  ------------------
  |  |  178|  52.1k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 52.1k]
  |  |  |  Branch (178:49): [Folded, False: 52.1k]
  |  |  |  Branch (178:58): [True: 0, False: 52.1k]
  |  |  ------------------
  ------------------
  165|      0|      data.get_metadata_tracker();
  166|      0|    }
  167|  52.1k|    absl::call_once(*table->once, [table] {
  168|  52.1k|      internal::AssignDescriptorsOnceInnerCall(table);
  169|  52.1k|    });
  170|  52.1k|  }
  171|  52.1k|  return {data.descriptor, data.reflection};
  172|  52.1k|}
_ZNK6google8protobuf7Message29MaybeComputeUnknownFieldsSizeEmPKNS0_8internal10CachedSizeE:
  197|  1.27k|    size_t total_size, const internal::CachedSize* cached_size) const {
  198|  1.27k|  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
  ------------------
  |  |  365|  1.27k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1.27k]
  |  |  |  Branch (365:54): [Folded, False: 1.27k]
  |  |  |  Branch (365:63): [True: 0, False: 1.27k]
  |  |  ------------------
  ------------------
  199|      0|    return ComputeUnknownFieldsSize(total_size, cached_size);
  200|      0|  }
  201|  1.27k|  cached_size->Set(internal::ToCachedSize(total_size));
  202|  1.27k|  return total_size;
  203|  1.27k|}
_ZN6google8protobuf14MessageFactoryD2Ev:
  253|      4|MessageFactory::~MessageFactory() = default;
_ZN6google8protobuf14MessageFactory17generated_factoryEv:
  440|      4|MessageFactory* MessageFactory::generated_factory() {
  441|      4|  return GeneratedMessageFactory::singleton();
  442|      4|}
_ZN6google8protobuf14MessageFactory29InternalRegisterGeneratedFileEPKNS0_8internal15DescriptorTableE:
  445|      6|    const google::protobuf::internal::DescriptorTable* table) {
  446|      6|  GeneratedMessageFactory::singleton()->RegisterFile(table);
  447|      6|}
message.cc:_ZN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory9singletonEv:
  339|     10|GeneratedMessageFactory* GeneratedMessageFactory::singleton() {
  340|     10|  static auto instance =
  341|     10|      internal::OnShutdownDelete(new GeneratedMessageFactory);
  342|     10|  return instance;
  343|     10|}
message.cc:_ZN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactoryC2Ev:
  270|      2|  GeneratedMessageFactory() {
  271|      2|    dropped_defaults_factory_.SetDelegateToGeneratedFactory(true);
  272|      2|  }
message.cc:_ZN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory12RegisterFileEPKNS0_8internal15DescriptorTableE:
  346|      6|    const google::protobuf::internal::DescriptorTable* table) {
  347|      6|  if (!files_.insert(table).second) {
  ------------------
  |  Branch (347:7): [True: 0, False: 6]
  ------------------
  348|      0|    ABSL_LOG(FATAL) << "File is already registered: " << table->filename;
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  349|      0|  }
  350|      6|}
message.cc:_ZNK6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashclEPKNS0_8internal15DescriptorTableE:
  291|      6|    size_t operator()(const google::protobuf::internal::DescriptorTable* t) const {
  292|      6|      return absl::HashOf(absl::string_view{t->filename});
  293|      6|    }
message.cc:_ZZN6google8protobuf7Message15GetMetadataImplERKNS0_8internal13ClassDataFullEENK3$_0clEv:
  167|      4|    absl::call_once(*table->once, [table] {
  168|      4|      internal::AssignDescriptorsOnceInnerCall(table);
  169|      4|    });

_ZN6google8protobuf14MessageFactoryC2Ev:
 1365|      8|  inline MessageFactory() = default;
_ZN6google8protobuf8internal18GetPointerAtOffsetIjEEPT_Pvj:
  214|  2.81k|inline To* GetPointerAtOffset(void* message, uint32_t offset) {
  215|  2.81k|  return reinterpret_cast<To*>(reinterpret_cast<char*>(message) + offset);
  216|  2.81k|}
_ZNK6google8protobuf10Reflection6GetRawINS0_8internal20RepeatedPtrFieldBaseEEERKT_RKNS0_7MessageEPKNS0_15FieldDescriptorE:
 1624|  16.5k|                               const FieldDescriptor* field) const {
 1625|  33.1k|  ABSL_DCHECK(!schema_.InRealOneof(field) || HasOneofField(message, field))
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  16.5k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  16.5k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  33.1k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  33.1k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 16.5k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  16.5k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 16.5k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  16.5k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 16.5k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  16.5k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|  16.5k|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1626|  33.1k|      << "Field = " << field->full_name();
 1627|       |
 1628|  16.5k|  if (PROTOBUF_PREDICT_TRUE(!schema_.InRealOneof(field))) {
  ------------------
  |  |  364|  16.5k|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 16.5k, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 16.5k]
  |  |  |  Branch (364:62): [True: 16.5k, False: 0]
  |  |  ------------------
  ------------------
 1629|  16.5k|    return GetRawNonOneof<Type>(message, field);
 1630|  16.5k|  }
 1631|       |
 1632|       |  // Oneof fields are not split.
 1633|      0|  ABSL_DCHECK(!schema_.IsSplit(field));
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  16.5k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1634|       |
 1635|      0|  const uint32_t field_offset = schema_.GetFieldOffset(field);
 1636|      0|  return internal::GetConstRefAtOffset<Type>(message, field_offset);
 1637|      0|}
_ZNK6google8protobuf10Reflection14GetRawNonOneofINS0_8internal20RepeatedPtrFieldBaseEEERKT_RKNS0_7MessageEPKNS0_15FieldDescriptorE:
 1614|  16.5k|                                       const FieldDescriptor* field) const {
 1615|  16.5k|  if (PROTOBUF_PREDICT_FALSE(schema_.IsSplit(field))) {
  ------------------
  |  |  365|  16.5k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 16.5k]
  |  |  |  Branch (365:54): [Folded, False: 16.5k]
  |  |  |  Branch (365:63): [True: 0, False: 16.5k]
  |  |  ------------------
  ------------------
 1616|      0|    return GetRawSplit<Type>(message, field);
 1617|      0|  }
 1618|  16.5k|  const uint32_t field_offset = schema_.GetFieldOffsetNonOneof(field);
 1619|  16.5k|  return internal::GetConstRefAtOffset<Type>(message, field_offset);
 1620|  16.5k|}
_ZN6google8protobuf8internal23GetConstPointerAtOffsetINS1_20RepeatedPtrFieldBaseEEEPKT_PKvj:
  219|  16.5k|const To* GetConstPointerAtOffset(const void* message, uint32_t offset) {
  220|  16.5k|  return reinterpret_cast<const To*>(reinterpret_cast<const char*>(message) +
  221|  16.5k|                                     offset);
  222|  16.5k|}
_ZN6google8protobuf8internal19GetConstRefAtOffsetINS1_20RepeatedPtrFieldBaseEEERKT_RKNS0_7MessageEj:
  225|  16.5k|const To& GetConstRefAtOffset(const Message& message, uint32_t offset) {
  226|  16.5k|  return *GetConstPointerAtOffset<To>(&message, offset);
  227|  16.5k|}
_ZNK6google8protobuf10Reflection6GetRawIPKNS0_7MessageEEERKT_RS4_PKNS0_15FieldDescriptorE:
 1624|  2.81k|                               const FieldDescriptor* field) const {
 1625|  5.63k|  ABSL_DCHECK(!schema_.InRealOneof(field) || HasOneofField(message, field))
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  2.81k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  2.81k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  5.63k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  5.63k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2.81k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  2.81k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2.81k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  2.81k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2.81k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  2.81k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|  2.81k|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1626|  5.63k|      << "Field = " << field->full_name();
 1627|       |
 1628|  2.81k|  if (PROTOBUF_PREDICT_TRUE(!schema_.InRealOneof(field))) {
  ------------------
  |  |  364|  2.81k|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 2.81k, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 2.81k]
  |  |  |  Branch (364:62): [True: 2.81k, False: 0]
  |  |  ------------------
  ------------------
 1629|  2.81k|    return GetRawNonOneof<Type>(message, field);
 1630|  2.81k|  }
 1631|       |
 1632|       |  // Oneof fields are not split.
 1633|      0|  ABSL_DCHECK(!schema_.IsSplit(field));
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  2.81k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1634|       |
 1635|      0|  const uint32_t field_offset = schema_.GetFieldOffset(field);
 1636|      0|  return internal::GetConstRefAtOffset<Type>(message, field_offset);
 1637|      0|}
_ZNK6google8protobuf10Reflection14GetRawNonOneofIPKNS0_7MessageEEERKT_RS4_PKNS0_15FieldDescriptorE:
 1614|  2.81k|                                       const FieldDescriptor* field) const {
 1615|  2.81k|  if (PROTOBUF_PREDICT_FALSE(schema_.IsSplit(field))) {
  ------------------
  |  |  365|  2.81k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 2.81k]
  |  |  |  Branch (365:54): [Folded, False: 2.81k]
  |  |  |  Branch (365:63): [True: 0, False: 2.81k]
  |  |  ------------------
  ------------------
 1616|      0|    return GetRawSplit<Type>(message, field);
 1617|      0|  }
 1618|  2.81k|  const uint32_t field_offset = schema_.GetFieldOffsetNonOneof(field);
 1619|  2.81k|  return internal::GetConstRefAtOffset<Type>(message, field_offset);
 1620|  2.81k|}
_ZN6google8protobuf8internal23GetConstPointerAtOffsetIPKNS0_7MessageEEEPKT_PKvj:
  219|  2.81k|const To* GetConstPointerAtOffset(const void* message, uint32_t offset) {
  220|  2.81k|  return reinterpret_cast<const To*>(reinterpret_cast<const char*>(message) +
  221|  2.81k|                                     offset);
  222|  2.81k|}
_ZN6google8protobuf8internal19GetConstRefAtOffsetIPKNS0_7MessageEEERKT_RS4_j:
  225|  2.81k|const To& GetConstRefAtOffset(const Message& message, uint32_t offset) {
  226|  2.81k|  return *GetConstPointerAtOffset<To>(&message, offset);
  227|  2.81k|}
_ZNK6google8protobuf10Reflection10MutableRawIPNS0_7MessageEEEPT_S4_PKNS0_15FieldDescriptorE:
 1207|  2.81k|  Type* MutableRaw(Message* message, const FieldDescriptor* field) const {
 1208|  2.81k|    return reinterpret_cast<Type*>(MutableRawImpl(message, field));
 1209|  2.81k|  }
_ZNK6google8protobuf10Reflection10MutableRawINS0_8internal20RepeatedPtrFieldBaseEEEPT_PNS0_7MessageEPKNS0_15FieldDescriptorE:
 1207|  1.13k|  Type* MutableRaw(Message* message, const FieldDescriptor* field) const {
 1208|  1.13k|    return reinterpret_cast<Type*>(MutableRawImpl(message, field));
 1209|  1.13k|  }
_ZN6google8protobuf8internal23GetConstPointerAtOffsetIjEEPKT_PKvj:
  219|  30.8k|const To* GetConstPointerAtOffset(const void* message, uint32_t offset) {
  220|  30.8k|  return reinterpret_cast<const To*>(reinterpret_cast<const char*>(message) +
  221|  30.8k|                                     offset);
  222|  30.8k|}
_ZN6google8protobuf8internal18GetPointerAtOffsetIvEEPT_Pvj:
  214|  3.95k|inline To* GetPointerAtOffset(void* message, uint32_t offset) {
  215|  3.95k|  return reinterpret_cast<To*>(reinterpret_cast<char*>(message) + offset);
  216|  3.95k|}
_ZN6google8protobuf8internal19GetConstRefAtOffsetIjEERKT_RKNS0_7MessageEj:
  225|  30.8k|const To& GetConstRefAtOffset(const Message& message, uint32_t offset) {
  226|  30.8k|  return *GetConstPointerAtOffset<To>(&message, offset);
  227|  30.8k|}

_ZN6google8protobuf8internal13MergeFromImplILb0EEEbN4absl12lts_2024011611string_viewEPNS0_11MessageLiteEPKNS1_16TcParseTableBaseENS6_10ParseFlagsE:
  214|  2.57k|                   MessageLite::ParseFlags parse_flags) {
  215|  2.57k|  const char* ptr;
  216|  2.57k|  internal::ParseContext ctx(io::CodedInputStream::GetDefaultRecursionLimit(),
  217|  2.57k|                             aliasing, &ptr, input);
  218|  2.57k|  ptr = internal::TcParser::ParseLoop(msg, ptr, &ctx, tc_table);
  219|       |  // ctx has an explicit limit set (length of string_view).
  220|  2.57k|  if (PROTOBUF_PREDICT_TRUE(ptr && ctx.EndedAtLimit())) {
  ------------------
  |  |  364|  5.15k|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 2.57k, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 2.57k]
  |  |  |  Branch (364:63): [True: 2.57k, False: 0]
  |  |  |  Branch (364:63): [True: 2.57k, False: 0]
  |  |  ------------------
  ------------------
  221|  2.57k|    return CheckFieldPresence(ctx, *msg, parse_flags);
  222|  2.57k|  }
  223|      0|  return false;
  224|  2.57k|}
_ZN6google8protobuf11MessageLite21CheckTypeAndMergeFromERKS1_:
   67|    749|void MessageLite::CheckTypeAndMergeFrom(const MessageLite& other) {
   68|    749|  auto* data = GetClassData();
   69|    749|  auto* other_data = other.GetClassData();
   70|       |
   71|    749|  ABSL_CHECK_EQ(data, other_data)
  ------------------
  |  |   50|      0|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|    749|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|    749|  while (                                                                      \
  |  |  |  |  |  |   62|    749|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 749]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|    749|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|    749|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|    749|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|    749|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|    749|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|    749|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|    749|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|    749|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   72|      0|      << "Invalid call to CheckTypeAndMergeFrom between types " << GetTypeName()
   73|      0|      << " and " << other.GetTypeName();
   74|    749|  data->merge_to_from(*this, other);
   75|    749|}
_ZNK6google8protobuf11MessageLite3NewEPNS0_5ArenaE:
   77|    502|MessageLite* MessageLite::New(Arena* arena) const {
   78|    502|  auto* data = GetClassData();
   79|       |  // The `instance->New()` expression requires using the actual instance
   80|       |  // instead of the prototype for the inner function call.
   81|       |  // Certain custom instances have special per-instance state that needs to be
   82|       |  // copied.
   83|    502|  return data->message_creator.New(this, data->prototype, arena);
   84|    502|}
_ZNK6google8protobuf11MessageLite13IsInitializedEv:
   86|     38|bool MessageLite::IsInitialized() const {
   87|     38|  auto* data = GetClassData();
   88|     38|  return data->is_initialized != nullptr ? data->is_initialized(*this) : true;
  ------------------
  |  Branch (88:10): [True: 30, False: 8]
  ------------------
   89|     38|}
_ZN6google8protobuf11MessageLite14_InternalParseEPKcPNS0_8internal12ParseContextE:
   92|     32|                                        internal::ParseContext* ctx) {
   93|     32|  return internal::TcParser::ParseLoop(this, ptr, ctx, GetTcParseTable());
   94|     32|}
_ZNK6google8protobuf11MessageLite13GetCachedSizeEv:
  143|    239|int MessageLite::GetCachedSize() const { return AccessCachedSize().Get(); }
_ZN6google8protobuf11MessageLite22ParsePartialFromStringEN4absl12lts_2024011611string_viewE:
  404|  2.57k|bool MessageLite::ParsePartialFromString(absl::string_view data) {
  405|  2.57k|  return ParseFrom<kParsePartial>(data);
  406|  2.57k|}
_ZN6google8protobuf11MessageLite14ParseFromArrayEPKvi:
  408|      6|bool MessageLite::ParseFromArray(const void* data, int size) {
  409|      6|  return ParseFrom<kParse>(as_string_view(data, size));
  410|      6|}
_ZNK6google8protobuf11MessageLite14AppendToStringEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  572|    258|bool MessageLite::AppendToString(std::string* output) const {
  573|    516|  ABSL_DCHECK(IsInitialized())
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    258|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    258|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    516|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    516|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 258, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    258|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 258]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    258|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 258, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    258|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|    258|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  574|    516|      << InitializationErrorMessage("serialize", *this);
  575|    258|  return AppendPartialToString(output);
  576|    258|}
_ZNK6google8protobuf11MessageLite21AppendPartialToStringEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  578|    258|bool MessageLite::AppendPartialToString(std::string* output) const {
  579|    258|  size_t old_size = output->size();
  580|    258|  size_t byte_size = ByteSizeLong();
  581|    258|  if (byte_size > INT_MAX) {
  ------------------
  |  Branch (581:7): [True: 0, False: 258]
  ------------------
  582|      0|    ABSL_LOG(ERROR) << GetTypeName()
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  583|      0|                    << " exceeded maximum protobuf size of 2GB: " << byte_size;
  584|      0|    return false;
  585|      0|  }
  586|       |
  587|    258|  absl::strings_internal::STLStringResizeUninitializedAmortized(
  588|    258|      output, old_size + byte_size);
  589|    258|  uint8_t* start =
  590|    258|      reinterpret_cast<uint8_t*>(io::mutable_string_data(output) + old_size);
  591|    258|  SerializeToArrayImpl(*this, start, byte_size);
  592|    258|  return true;
  593|    258|}
_ZNK6google8protobuf11MessageLite17SerializeAsStringEv:
  624|    258|std::string MessageLite::SerializeAsString() const {
  625|       |  // If the compiler implements the (Named) Return Value Optimization,
  626|       |  // the local variable 'output' will not actually reside on the stack
  627|       |  // of this function, but will be overlaid with the object that the
  628|       |  // caller supplied for the return value to be constructed in.
  629|    258|  std::string output;
  630|    258|  if (!AppendToString(&output)) output.clear();
  ------------------
  |  Branch (630:7): [True: 0, False: 258]
  ------------------
  631|    258|  return output;
  632|    258|}
_ZN6google8protobuf8internal13OnShutdownRunEPFvPKvES3_:
  783|     57|void OnShutdownRun(void (*f)(const void*), const void* arg) {
  784|     57|  auto shutdown_data = ShutdownData::get();
  785|     57|  absl::MutexLock lock(&shutdown_data->mutex);
  786|     57|  shutdown_data->functions.push_back(std::make_pair(f, arg));
  787|     57|}
message_lite.cc:_ZN6google8protobuf12_GLOBAL__N_118CheckFieldPresenceERKNS0_8internal12ParseContextERKNS0_11MessageLiteENS6_10ParseFlagsE:
  184|  2.57k|                               MessageLite::ParseFlags parse_flags) {
  185|  2.57k|  (void)ctx;  // Parameter is used by Google-internal code.
  186|  2.57k|  if (PROTOBUF_PREDICT_FALSE((parse_flags & MessageLite::kMergePartial) != 0)) {
  ------------------
  |  |  365|  2.57k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 2.57k, False: 6]
  |  |  |  Branch (365:54): [Folded, False: 2.57k]
  |  |  |  Branch (365:63): [True: 2.57k, False: 6]
  |  |  ------------------
  ------------------
  187|  2.57k|    return true;
  188|  2.57k|  }
  189|      6|  return msg.IsInitializedWithErrors();
  190|  2.57k|}
message_lite.cc:_ZN6google8protobuf12_GLOBAL__N_114as_string_viewEPKvi:
  177|      6|inline absl::string_view as_string_view(const void* data, int size) {
  178|      6|  return absl::string_view(static_cast<const char*>(data), size);
  179|      6|}
_ZN6google8protobuf20SerializeToArrayImplERKNS0_11MessageLiteEPhi:
  462|    258|                                     int size) {
  463|    258|  constexpr bool debug = false;
  464|    258|  if (debug) {
  ------------------
  |  Branch (464:7): [Folded, False: 258]
  ------------------
  465|       |    // Force serialization to a stream with a block size of 1, which forces
  466|       |    // all writes to the stream to cross buffers triggering all fallback paths
  467|       |    // in the unittests when serializing to string / array.
  468|      0|    io::ArrayOutputStream stream(target, size, 1);
  469|      0|    uint8_t* ptr;
  470|      0|    io::EpsCopyOutputStream out(
  471|      0|        &stream, io::CodedOutputStream::IsDefaultSerializationDeterministic(),
  472|      0|        &ptr);
  473|      0|    ptr = msg._InternalSerialize(ptr, &out);
  474|      0|    out.Trim(ptr);
  475|      0|    ABSL_DCHECK(!out.HadError() && stream.ByteCount() == size);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  476|      0|    return target + size;
  477|    258|  } else {
  478|    258|    io::EpsCopyOutputStream out(
  479|    258|        target, size,
  480|    258|        io::CodedOutputStream::IsDefaultSerializationDeterministic());
  481|    258|    uint8_t* res = msg._InternalSerialize(target, &out);
  482|    258|    ABSL_DCHECK(target + size == res);
  ------------------
  |  |   47|    258|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    258|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    516|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    258|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    516|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    516|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 258, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    258|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 258]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    258|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 258, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|    516|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    516|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  483|    258|    return res;
  484|    258|  }
  485|    258|}
_ZN6google8protobuf8internal12ShutdownData3getEv:
  765|     57|  static ShutdownData* get() {
  766|     57|    static auto* data = new ShutdownData;
  767|     57|    return data;
  768|     57|  }

_ZNK6google8protobuf8internal14MessageCreator3tagEv:
  131|  5.82k|  Tag tag() const { return tag_; }
_ZNK6google8protobuf8internal14MessageCreator10arena_bitsEv:
  137|  6.40k|  uintptr_t arena_bits() const {
  138|  6.40k|    ABSL_DCHECK_NE(+tag(), +kFunc);
  ------------------
  |  |   76|  6.40k|  ABSL_LOG_INTERNAL_DCHECK_NE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   88|  6.40k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  6.40k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 6.40k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  6.40k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  139|  6.40k|    return arena_bits_;
  140|  6.40k|  }
_ZNK6google8protobuf8internal10CachedSize3SetEi:
  182|  1.27k|  void Set(Scalar desired) const noexcept {
  183|       |    // Avoid writing the value when it is zero. This prevents writing to global
  184|       |    // default instances, which might be in readonly memory.
  185|  1.27k|    if (ABSL_PREDICT_FALSE(desired == 0)) {
  ------------------
  |  |  178|  1.27k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 516, False: 759]
  |  |  |  Branch (178:49): [Folded, False: 1.27k]
  |  |  |  Branch (178:58): [True: 516, False: 759]
  |  |  ------------------
  ------------------
  186|    516|      if (Get() == 0) return;
  ------------------
  |  Branch (186:11): [True: 516, False: 0]
  ------------------
  187|    516|    }
  188|    759|    __atomic_store_n(&atom_, desired, __ATOMIC_RELAXED);
  189|    759|  }
_ZNK6google8protobuf8internal9ClassData3NewEPNS0_5ArenaE:
  410|  5.32k|  MessageLite* New(Arena* arena) const {
  411|  5.32k|    return message_creator.New(prototype, prototype, arena);
  412|  5.32k|  }
_ZNK6google8protobuf11MessageLite15GetTcParseTableEv:
  860|  2.60k|  const internal::TcParseTableBase* GetTcParseTable() const {
  861|  2.60k|    auto* data = GetClassData();
  862|  2.60k|    ABSL_DCHECK(data != nullptr);
  ------------------
  |  |   47|  2.60k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  2.60k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  5.21k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  2.60k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  5.21k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  5.21k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2.60k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  2.60k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2.60k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  2.60k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2.60k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  5.21k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  5.21k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  863|       |
  864|  2.60k|    auto* tc_table = data->tc_table;
  865|  2.60k|    if (ABSL_PREDICT_FALSE(tc_table == nullptr)) {
  ------------------
  |  |  178|  2.60k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 2.60k]
  |  |  |  Branch (178:49): [Folded, False: 2.60k]
  |  |  |  Branch (178:58): [True: 0, False: 2.60k]
  |  |  ------------------
  ------------------
  866|      0|      ABSL_DCHECK(!data->is_lite);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  867|      0|      return data->full().descriptor_methods->get_tc_table(*this);
  868|      0|    }
  869|  2.60k|    return tc_table;
  870|  2.60k|  }
_ZNK6google8protobuf11MessageLite16AccessCachedSizeEv:
  918|    239|  const internal::CachedSize& AccessCachedSize() const {
  919|    239|    return *reinterpret_cast<const internal::CachedSize*>(
  920|    239|        reinterpret_cast<const char*>(this) +
  921|    239|        GetClassData()->cached_size_offset);
  922|    239|  }
_ZNK6google8protobuf11MessageLite23IsInitializedWithErrorsEv:
  966|     30|  bool IsInitializedWithErrors() const {
  967|     30|    if (IsInitialized()) return true;
  ------------------
  |  Branch (967:9): [True: 30, False: 0]
  ------------------
  968|      0|    LogInitializationErrorMessage();
  969|      0|    return false;
  970|     30|  }
_ZN6google8protobuf8internal12ToCachedSizeEm:
  281|  1.27k|inline int ToCachedSize(size_t size) { return static_cast<int>(size); }
_ZNK6google8protobuf8internal14MessageCreator3NewILb0ENS0_11MessageLiteEEEPT0_PKS5_S8_PNS0_5ArenaE:
 1299|  5.82k|    const MessageLite* prototype_for_copy, Arena* arena) const {
 1300|  5.82k|  return PlacementNew<test_call>(prototype_for_func, prototype_for_copy,
 1301|  5.82k|                                 arena != nullptr
  ------------------
  |  Branch (1301:34): [True: 573, False: 5.25k]
  ------------------
 1302|  5.82k|                                     ? arena->AllocateAligned(allocation_size_)
 1303|  5.82k|                                     : ::operator new(allocation_size_),
 1304|  5.82k|                                 arena);
 1305|  5.82k|}
_ZNK6google8protobuf8internal14MessageCreator12PlacementNewILb0ENS0_11MessageLiteEEEPT0_PKS5_S8_PvPNS0_5ArenaE:
 1193|  5.82k|    const MessageLite* prototype_for_copy, void* mem, Arena* arena) const {
 1194|  5.82k|  ABSL_DCHECK_EQ(reinterpret_cast<uintptr_t>(mem) % alignment_, 0u);
  ------------------
  |  |   74|  5.82k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|  5.82k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  5.82k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 5.82k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  5.82k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1195|  5.82k|  const Tag as_tag = tag();
 1196|       |  // When the feature is not enabled we skip the `as_tag` check since it is
 1197|       |  // unnecessary. Except for testing, where we want to test the copy logic even
 1198|       |  // when we can't use it for real messages.
 1199|  5.82k|  constexpr bool kMustBeFunc = !test_call && !internal::EnableCustomNew();
  ------------------
  |  Branch (1199:32): [True: 0, Folded]
  |  Branch (1199:46): [Folded, False: 0]
  ------------------
 1200|  5.82k|  static_assert(kFunc < 0 && !(kZeroInit < 0) && !(kMemcpy < 0),
 1201|  5.82k|                "Only kFunc must be the only negative value");
 1202|  5.82k|  if (ABSL_PREDICT_FALSE(kMustBeFunc || as_tag < 0)) {
  ------------------
  |  |  178|  11.6k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 5.82k]
  |  |  |  Branch (178:49): [Folded, False: 5.82k]
  |  |  |  Branch (178:59): [Folded, False: 5.82k]
  |  |  |  Branch (178:59): [True: 0, False: 5.82k]
  |  |  ------------------
  ------------------
 1203|      0|    PROTOBUF_DEBUG_COUNTER("MessageCreator.Func").Inc();
  ------------------
  |  |  983|      0|  ::google::protobuf::internal::NoopDebugCounter {}
  ------------------
 1204|      0|    return static_cast<MessageLite*>(func_(prototype_for_func, mem, arena));
 1205|      0|  }
 1206|       |
 1207|  5.82k|  char* dst = static_cast<char*>(mem);
 1208|  5.82k|  const size_t size = allocation_size_;
 1209|  5.82k|  const char* src = reinterpret_cast<const char*>(prototype_for_copy);
 1210|       |
 1211|       |  // These are a bit more efficient than calling normal memset/memcpy because:
 1212|       |  //  - We know the minimum size is 16. We have a fallback for when it is not.
 1213|       |  //  - We can "underflow" the buffer because those are the MessageLite bytes
 1214|       |  //    we will set later.
 1215|  5.82k|#ifndef PROTO2_OPENSOURCE
 1216|       |  // This manual handling shows a 1.85% improvement in the parsing
 1217|       |  // microbenchmark.
 1218|       |  // TODO: Verify this is still the case.
 1219|  5.82k|#endif  // !PROTO2_OPENSOUCE
 1220|  5.82k|  if (as_tag == kZeroInit) {
  ------------------
  |  Branch (1220:7): [True: 1.74k, False: 4.08k]
  ------------------
 1221|       |    // Make sure the input is really all zeros.
 1222|  1.74k|    ABSL_DCHECK(std::all_of(src + sizeof(MessageLite), src + size,
  ------------------
  |  |   47|  1.74k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  1.74k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  3.48k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  1.74k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  3.48k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  3.48k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1.74k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  1.74k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1.74k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  1.74k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1.74k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  3.48k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  3.48k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1223|  1.74k|                            [](auto c) { return c == 0; }));
 1224|       |
 1225|  1.74k|    if (sizeof(MessageLite) != 16) {
  ------------------
  |  Branch (1225:9): [Folded, False: 1.74k]
  ------------------
 1226|      0|      memset(dst, 0, size);
 1227|  1.74k|    } else if (size <= 32) {
  ------------------
  |  Branch (1227:16): [True: 532, False: 1.20k]
  ------------------
 1228|    532|      memset(dst + size - 16, 0, 16);
 1229|  1.20k|    } else if (size <= 64) {
  ------------------
  |  Branch (1229:16): [True: 1.16k, False: 42]
  ------------------
 1230|  1.16k|      memset(dst + 16, 0, 16);
 1231|  1.16k|      memset(dst + size - 32, 0, 32);
 1232|  1.16k|    } else {
 1233|    110|      for (size_t offset = 16; offset + 64 < size; offset += 64) {
  ------------------
  |  Branch (1233:32): [True: 68, False: 42]
  ------------------
 1234|     68|        absl::PrefetchToLocalCacheForWrite(dst + offset + 64);
 1235|     68|        memset(dst + offset, 0, 64);
 1236|     68|      }
 1237|     42|      memset(dst + size - 64, 0, 64);
 1238|     42|    }
 1239|  4.08k|  } else {
 1240|  4.08k|    ABSL_DCHECK_EQ(+as_tag, +kMemcpy);
  ------------------
  |  |   74|  4.08k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|  4.08k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  4.08k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 4.08k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  4.08k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1241|       |
 1242|  4.08k|    if (sizeof(MessageLite) != 16) {
  ------------------
  |  Branch (1242:9): [Folded, False: 4.08k]
  ------------------
 1243|      0|      memcpy(dst, src, size);
 1244|  4.08k|    } else if (size <= 32) {
  ------------------
  |  Branch (1244:16): [True: 0, False: 4.08k]
  ------------------
 1245|      0|      memcpy(dst + size - 16, src + size - 16, 16);
 1246|  4.08k|    } else if (size <= 64) {
  ------------------
  |  Branch (1246:16): [True: 820, False: 3.26k]
  ------------------
 1247|    820|      memcpy(dst + 16, src + 16, 16);
 1248|    820|      memcpy(dst + size - 32, src + size - 32, 32);
 1249|  3.26k|    } else {
 1250|  6.75k|      for (size_t offset = 16; offset + 64 < size; offset += 64) {
  ------------------
  |  Branch (1250:32): [True: 3.48k, False: 3.26k]
  ------------------
 1251|  3.48k|        absl::PrefetchToLocalCache(src + offset + 64);
 1252|  3.48k|        absl::PrefetchToLocalCacheForWrite(dst + offset + 64);
 1253|  3.48k|        memcpy(dst + offset, src + offset, 64);
 1254|  3.48k|      }
 1255|  3.26k|      memcpy(dst + size - 64, src + size - 64, 64);
 1256|  3.26k|    }
 1257|  4.08k|  }
 1258|       |
 1259|  5.82k|  if (arena_bits() != 0) {
  ------------------
  |  Branch (1259:7): [True: 3.02k, False: 2.80k]
  ------------------
 1260|  3.02k|    if (as_tag == kZeroInit) {
  ------------------
  |  Branch (1260:9): [True: 42, False: 2.98k]
  ------------------
 1261|     42|      PROTOBUF_DEBUG_COUNTER("MessageCreator.ZeroArena").Inc();
  ------------------
  |  |  983|     42|  ::google::protobuf::internal::NoopDebugCounter {}
  ------------------
 1262|  2.98k|    } else {
 1263|  2.98k|      PROTOBUF_DEBUG_COUNTER("MessageCreator.McpyArena").Inc();
  ------------------
  |  |  983|  2.98k|  ::google::protobuf::internal::NoopDebugCounter {}
  ------------------
 1264|  2.98k|    }
 1265|  3.02k|  } else {
 1266|  2.80k|    if (as_tag == kZeroInit) {
  ------------------
  |  Branch (1266:9): [True: 1.69k, False: 1.10k]
  ------------------
 1267|  1.69k|      PROTOBUF_DEBUG_COUNTER("MessageCreator.Zero").Inc();
  ------------------
  |  |  983|  1.69k|  ::google::protobuf::internal::NoopDebugCounter {}
  ------------------
 1268|  1.69k|    } else {
 1269|  1.10k|      PROTOBUF_DEBUG_COUNTER("MessageCreator.Mcpy").Inc();
  ------------------
  |  |  983|  1.10k|  ::google::protobuf::internal::NoopDebugCounter {}
  ------------------
 1270|  1.10k|    }
 1271|  2.80k|  }
 1272|       |
 1273|  5.82k|  if (internal::PerformDebugChecks() || arena != nullptr) {
  ------------------
  |  Branch (1273:7): [Folded, False: 5.82k]
  |  Branch (1273:41): [True: 573, False: 5.25k]
  ------------------
 1274|    573|    if (uintptr_t offsets = arena_bits()) {
  ------------------
  |  Branch (1274:19): [True: 90, False: 483]
  ------------------
 1275|    520|      do {
 1276|    520|        const size_t offset = absl::countr_zero(offsets) * sizeof(Arena*);
 1277|    520|        ABSL_DCHECK_LE(offset + sizeof(Arena*), size);
  ------------------
  |  |   78|    520|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|    520|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    520|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 520]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    520|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1278|       |        // Verify we are overwriting a null pointer. If we are not, there is a
 1279|       |        // bug somewhere.
 1280|    520|        ABSL_DCHECK_EQ(*reinterpret_cast<Arena**>(dst + offset), nullptr);
  ------------------
  |  |   74|    520|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|    520|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    520|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 520]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    520|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1281|    520|        memcpy(dst + offset, &arena, sizeof(arena));
 1282|    520|        offsets &= offsets - 1;
 1283|    520|      } while (offsets != 0);
  ------------------
  |  Branch (1283:16): [True: 430, False: 90]
  ------------------
 1284|     90|    }
 1285|    573|  }
 1286|       |
 1287|       |  // The second memcpy overwrites part of the first, but the compiler should
 1288|       |  // avoid the double-write. It's easier than trying to avoid the overlap.
 1289|  5.82k|  memcpy(dst, static_cast<const void*>(prototype_for_copy),
 1290|  5.82k|         sizeof(MessageLite));
 1291|  5.82k|  memcpy(dst + PROTOBUF_FIELD_OFFSET(MessageLite, _internal_metadata_), &arena,
  ------------------
  |  |  303|  5.82k|  _Pragma("clang diagnostic push")                           \
  |  |  304|  5.82k|  _Pragma("clang diagnostic ignored \"-Winvalid-offsetof\"") \
  |  |  305|  5.82k|  __builtin_offsetof(TYPE, FIELD)                            \
  |  |  306|  5.82k|  _Pragma("clang diagnostic pop")
  ------------------
 1292|  5.82k|         sizeof(arena));
 1293|  5.82k|  return Launder(reinterpret_cast<MessageLite*>(mem));
 1294|  5.82k|}
_ZN6google8protobuf11MessageLite9ParseFromILNS1_10ParseFlagsE1EN4absl12lts_2024011611string_viewEEEbRKT0_:
 1144|      6|bool MessageLite::ParseFrom(const T& input) {
 1145|      6|  if (flags & kParse) Clear();
  ------------------
  |  Branch (1145:7): [True: 6, Folded]
  ------------------
 1146|      6|  constexpr bool alias = (flags & kMergeWithAliasing) != 0;
 1147|      6|  const internal::TcParseTableBase* tc_table;
 1148|      6|  PROTOBUF_ALWAYS_INLINE_CALL tc_table = GetTcParseTable();
  ------------------
  |  |  187|      6|#define PROTOBUF_ALWAYS_INLINE_CALL [[clang::always_inline]]
  ------------------
 1149|      6|  return internal::MergeFromImpl<alias>(input, this, tc_table, flags);
 1150|      6|}
_ZN6google8protobuf11MessageLite9ParseFromILNS1_10ParseFlagsE3EN4absl12lts_2024011611string_viewEEEbRKT0_:
 1144|  2.57k|bool MessageLite::ParseFrom(const T& input) {
 1145|  2.57k|  if (flags & kParse) Clear();
  ------------------
  |  Branch (1145:7): [True: 2.57k, Folded]
  ------------------
 1146|  2.57k|  constexpr bool alias = (flags & kMergeWithAliasing) != 0;
 1147|  2.57k|  const internal::TcParseTableBase* tc_table;
 1148|  2.57k|  PROTOBUF_ALWAYS_INLINE_CALL tc_table = GetTcParseTable();
  ------------------
  |  |  187|  2.57k|#define PROTOBUF_ALWAYS_INLINE_CALL [[clang::always_inline]]
  ------------------
 1149|  2.57k|  return internal::MergeFromImpl<alias>(input, this, tc_table, flags);
 1150|  2.57k|}
extension_set.cc:_ZN6google8protobuf8internal16OnShutdownDeleteIN4absl12lts_2024011613flat_hash_setINS1_13ExtensionInfoENS1_12_GLOBAL__N_115ExtensionHasherENS7_11ExtensionEqENSt3__19allocatorIS6_EEEEEEPT_SF_:
 1180|      1|T* OnShutdownDelete(T* p) {
 1181|      1|  OnShutdownRun([](const void* pp) { delete static_cast<const T*>(pp); }, p);
 1182|      1|  return p;
 1183|      1|}
_ZN6google8protobuf8internal16OnShutdownDeleteINS0_25EncodedDescriptorDatabaseEEEPT_S5_:
 1180|      2|T* OnShutdownDelete(T* p) {
 1181|      2|  OnShutdownRun([](const void* pp) { delete static_cast<const T*>(pp); }, p);
 1182|      2|  return p;
 1183|      2|}
_ZN6google8protobuf8internal16OnShutdownDeleteINS0_18FeatureSetDefaultsEEEPT_S5_:
 1180|      1|T* OnShutdownDelete(T* p) {
 1181|      1|  OnShutdownRun([](const void* pp) { delete static_cast<const T*>(pp); }, p);
 1182|      1|  return p;
 1183|      1|}
_ZN6google8protobuf8internal16OnShutdownDeleteINS0_14DescriptorPoolEEEPT_S5_:
 1180|      2|T* OnShutdownDelete(T* p) {
 1181|      2|  OnShutdownRun([](const void* pp) { delete static_cast<const T*>(pp); }, p);
 1182|      2|  return p;
 1183|      2|}
_ZN6google8protobuf8internal16OnShutdownDeleteINS0_10ReflectionEEEPT_S5_:
 1180|     47|T* OnShutdownDelete(T* p) {
 1181|     47|  OnShutdownRun([](const void* pp) { delete static_cast<const T*>(pp); }, p);
 1182|     47|  return p;
 1183|     47|}
message.cc:_ZN6google8protobuf8internal16OnShutdownDeleteINS0_12_GLOBAL__N_123GeneratedMessageFactoryEEEPT_S6_:
 1180|      2|T* OnShutdownDelete(T* p) {
 1181|      2|  OnShutdownRun([](const void* pp) { delete static_cast<const T*>(pp); }, p);
 1182|      2|  return p;
 1183|      2|}

_ZN6google8protobuf8internal18EpsCopyInputStream12DoneFallbackEii:
  149|  1.66k|                                                              int depth) {
  150|       |  // Did we exceeded the limit (parse error).
  151|  1.66k|  if (PROTOBUF_PREDICT_FALSE(overrun > limit_)) return {nullptr, true};
  ------------------
  |  |  365|  1.66k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1.66k]
  |  |  |  Branch (365:54): [Folded, False: 1.66k]
  |  |  |  Branch (365:63): [True: 0, False: 1.66k]
  |  |  ------------------
  ------------------
  152|  1.66k|  ABSL_DCHECK(overrun != limit_);  // Guaranteed by caller.
  ------------------
  |  |   47|  1.66k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  1.66k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  4.99k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  1.66k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  3.33k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  3.33k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1.66k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  1.66k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1.66k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  1.66k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1.66k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  4.99k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  4.99k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  153|  1.66k|  ABSL_DCHECK(overrun < limit_);   // Follows from above
  ------------------
  |  |   47|  1.66k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  1.66k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  4.99k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  1.66k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  3.33k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  3.33k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1.66k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  1.66k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1.66k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  1.66k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1.66k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  4.99k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  4.99k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  154|       |  // TODO Instead of this dcheck we could just assign, and remove
  155|       |  // updating the limit_end from PopLimit, ie.
  156|       |  // limit_end_ = buffer_end_ + (std::min)(0, limit_);
  157|       |  // if (ptr < limit_end_) return {ptr, false};
  158|  1.66k|  ABSL_DCHECK(limit_end_ == buffer_end_ + (std::min)(0, limit_));
  ------------------
  |  |   47|  1.66k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  1.66k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  4.99k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  1.66k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  3.33k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  3.33k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1.66k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  1.66k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1.66k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  1.66k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1.66k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  4.99k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  4.99k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  159|       |  // At this point we know the following assertion holds.
  160|  1.66k|  ABSL_DCHECK_GT(limit_, 0);
  ------------------
  |  |   84|  1.66k|  ABSL_LOG_INTERNAL_DCHECK_GT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   96|  1.66k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  1.66k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 1.66k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  1.66k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  161|  1.66k|  ABSL_DCHECK(limit_end_ == buffer_end_);  // because limit_ > 0
  ------------------
  |  |   47|  1.66k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  1.66k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  3.33k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  1.66k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  3.33k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  3.33k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1.66k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  1.66k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1.66k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  1.66k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1.66k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  3.33k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  3.33k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  162|  1.66k|  const char* p;
  163|  1.66k|  do {
  164|       |    // We are past the end of buffer_end_, in the slop region.
  165|  1.66k|    ABSL_DCHECK_GE(overrun, 0);
  ------------------
  |  |   82|  1.66k|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|  1.66k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  1.66k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 1.66k]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  1.66k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  166|  1.66k|    p = NextBuffer(overrun, depth);
  167|  1.66k|    if (p == nullptr) {
  ------------------
  |  Branch (167:9): [True: 0, False: 1.66k]
  ------------------
  168|       |      // We are at the end of the stream
  169|      0|      if (PROTOBUF_PREDICT_FALSE(overrun != 0)) return {nullptr, true};
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  170|      0|      ABSL_DCHECK_GT(limit_, 0);
  ------------------
  |  |   84|      0|  ABSL_LOG_INTERNAL_DCHECK_GT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   96|      0|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      0|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 0]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  171|      0|      limit_end_ = buffer_end_;
  172|       |      // Distinguish ending on a pushed limit or ending on end-of-stream.
  173|      0|      SetEndOfStream();
  174|      0|      return {buffer_end_, true};
  175|      0|    }
  176|  1.66k|    limit_ -= buffer_end_ - p;  // Adjust limit_ relative to new anchor
  177|  1.66k|    p += overrun;
  178|  1.66k|    overrun = p - buffer_end_;
  179|  1.66k|  } while (overrun >= 0);
  ------------------
  |  Branch (179:12): [True: 0, False: 1.66k]
  ------------------
  180|  1.66k|  limit_end_ = buffer_end_ + std::min(0, limit_);
  181|  1.66k|  return {p, false};
  182|  1.66k|}
_ZN6google8protobuf8internal12ParseContext28ReadSizeAndPushLimitAndDepthEPKcPNS1_18EpsCopyInputStream10LimitTokenE:
  299|      8|                                                       LimitToken* old_limit) {
  300|      8|  return ReadSizeAndPushLimitAndDepthInlined(ptr, old_limit);
  301|      8|}
_ZN6google8protobuf8internal12ParseContext12ParseMessageEPNS0_11MessageLiteEPKc:
  303|      8|const char* ParseContext::ParseMessage(MessageLite* msg, const char* ptr) {
  304|      8|  LimitToken old;
  305|      8|  ptr = ReadSizeAndPushLimitAndDepth(ptr, &old);
  306|      8|  if (ptr == nullptr) return ptr;
  ------------------
  |  Branch (306:7): [True: 0, False: 8]
  ------------------
  307|      8|  auto old_depth = depth_;
  308|      8|  ptr = msg->_InternalParse(ptr, this);
  309|      8|  if (ptr != nullptr) ABSL_DCHECK_EQ(old_depth, depth_);
  ------------------
  |  |   74|      8|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|      8|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      8|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 8]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      8|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (309:7): [True: 8, False: 0]
  ------------------
  310|      8|  depth_++;
  311|      8|  if (!PopLimit(std::move(old))) return nullptr;
  ------------------
  |  Branch (311:7): [True: 0, False: 8]
  ------------------
  312|      8|  return ptr;
  313|      8|}
_ZN6google8protobuf8internal17VarintParseSlow64EPKcj:
  355|     47|                                                   uint32_t res32) {
  356|     47|  uint64_t res = res32;
  357|     47|  for (std::uint32_t i = 1; i < 10; i++) {
  ------------------
  |  Branch (357:29): [True: 47, False: 0]
  ------------------
  358|     47|    uint64_t byte = static_cast<uint8_t>(p[i]);
  359|     47|    res += (byte - 1) << (7 * i);
  360|     47|    if (PROTOBUF_PREDICT_TRUE(byte < 128)) {
  ------------------
  |  |  364|     47|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 47, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 47]
  |  |  |  Branch (364:62): [True: 47, False: 0]
  |  |  ------------------
  ------------------
  361|     47|      return {p + i + 1, res};
  362|     47|    }
  363|     47|  }
  364|      0|  return {nullptr, 0};
  365|     47|}
_ZN6google8protobuf8internal16ReadSizeFallbackEPKcj:
  378|  1.26k|std::pair<const char*, int32_t> ReadSizeFallback(const char* p, uint32_t res) {
  379|  1.29k|  for (std::uint32_t i = 1; i < 4; i++) {
  ------------------
  |  Branch (379:29): [True: 1.29k, False: 0]
  ------------------
  380|  1.29k|    uint32_t byte = static_cast<uint8_t>(p[i]);
  381|  1.29k|    res += (byte - 1) << (7 * i);
  382|  1.29k|    if (PROTOBUF_PREDICT_TRUE(byte < 128)) {
  ------------------
  |  |  364|  1.29k|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 1.26k, False: 35]
  |  |  |  Branch (364:53): [Folded, False: 1.29k]
  |  |  |  Branch (364:62): [True: 1.26k, False: 35]
  |  |  ------------------
  ------------------
  383|  1.26k|      return {p + i + 1, res};
  384|  1.26k|    }
  385|  1.29k|  }
  386|      0|  std::uint32_t byte = static_cast<uint8_t>(p[4]);
  387|      0|  if (PROTOBUF_PREDICT_FALSE(byte >= 8)) return {nullptr, 0};  // size >= 2gb
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  388|      0|  res += (byte - 1) << 28;
  389|       |  // Protect against sign integer overflow in PushLimit. Limits are relative
  390|       |  // to buffer ends and ptr could potential be kSlopBytes beyond a buffer end.
  391|       |  // To protect against overflow we reject limits absurdly close to INT_MAX.
  392|      0|  if (PROTOBUF_PREDICT_FALSE(res > INT_MAX - ParseContext::kSlopBytes)) {
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  393|      0|    return {nullptr, 0};
  394|      0|  }
  395|      0|  return {p + 5, res};
  396|      0|}
_ZN6google8protobuf8internal24InlineGreedyStringParserEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPKcPNS1_12ParseContextE:
  419|  3.14k|                                     ParseContext* ctx) {
  420|  3.14k|  int size = ReadSize(&ptr);
  421|  3.14k|  if (!ptr) return nullptr;
  ------------------
  |  Branch (421:7): [True: 0, False: 3.14k]
  ------------------
  422|  3.14k|  return ctx->ReadString(ptr, size, s);
  423|  3.14k|}
_ZN6google8protobuf8internal18EpsCopyInputStream10NextBufferEii:
   79|  1.66k|const char* EpsCopyInputStream::NextBuffer(int overrun, int depth) {
   80|  1.66k|  if (next_chunk_ == nullptr) return nullptr;  // We've reached end of stream.
  ------------------
  |  Branch (80:7): [True: 0, False: 1.66k]
  ------------------
   81|  1.66k|  if (next_chunk_ != patch_buffer_) {
  ------------------
  |  Branch (81:7): [True: 0, False: 1.66k]
  ------------------
   82|      0|    ABSL_DCHECK(size_ > kSlopBytes);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   83|       |    // The chunk is large enough to be used directly
   84|      0|    buffer_end_ = next_chunk_ + size_ - kSlopBytes;
   85|      0|    auto res = next_chunk_;
   86|      0|    next_chunk_ = patch_buffer_;
   87|      0|    if (aliasing_ == kOnPatch) aliasing_ = kNoDelta;
  ------------------
  |  Branch (87:9): [True: 0, False: 0]
  ------------------
   88|      0|    return res;
   89|      0|  }
   90|       |  // Move the slop bytes of previous buffer to start of the patch buffer.
   91|       |  // Note we must use memmove because the previous buffer could be part of
   92|       |  // patch_buffer_.
   93|  1.66k|  std::memmove(patch_buffer_, buffer_end_, kSlopBytes);
   94|  1.66k|  if (overall_limit_ > 0 &&
  ------------------
  |  Branch (94:7): [True: 0, False: 1.66k]
  ------------------
   95|      0|      (depth < 0 || !ParseEndsInSlopRegion(patch_buffer_, overrun, depth))) {
  ------------------
  |  Branch (95:8): [True: 0, False: 0]
  |  Branch (95:21): [True: 0, False: 0]
  ------------------
   96|      0|    const void* data;
   97|       |    // ZeroCopyInputStream indicates Next may return 0 size buffers. Hence
   98|       |    // we loop.
   99|      0|    while (StreamNext(&data)) {
  ------------------
  |  Branch (99:12): [True: 0, False: 0]
  ------------------
  100|      0|      if (size_ > kSlopBytes) {
  ------------------
  |  Branch (100:11): [True: 0, False: 0]
  ------------------
  101|       |        // We got a large chunk
  102|      0|        std::memcpy(patch_buffer_ + kSlopBytes, data, kSlopBytes);
  103|      0|        next_chunk_ = static_cast<const char*>(data);
  104|      0|        buffer_end_ = patch_buffer_ + kSlopBytes;
  105|      0|        if (aliasing_ >= kNoDelta) aliasing_ = kOnPatch;
  ------------------
  |  Branch (105:13): [True: 0, False: 0]
  ------------------
  106|      0|        return patch_buffer_;
  107|      0|      } else if (size_ > 0) {
  ------------------
  |  Branch (107:18): [True: 0, False: 0]
  ------------------
  108|      0|        std::memcpy(patch_buffer_ + kSlopBytes, data, size_);
  109|      0|        next_chunk_ = patch_buffer_;
  110|      0|        buffer_end_ = patch_buffer_ + size_;
  111|      0|        if (aliasing_ >= kNoDelta) aliasing_ = kOnPatch;
  ------------------
  |  Branch (111:13): [True: 0, False: 0]
  ------------------
  112|      0|        return patch_buffer_;
  113|      0|      }
  114|      0|      ABSL_DCHECK(size_ == 0) << size_;
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  115|      0|    }
  116|      0|    overall_limit_ = 0;  // Next failed, no more needs for next
  117|      0|  }
  118|       |  // End of stream or array
  119|  1.66k|  if (aliasing_ == kNoDelta) {
  ------------------
  |  Branch (119:7): [True: 0, False: 1.66k]
  ------------------
  120|       |    // If there is no more block and aliasing is true, the previous block
  121|       |    // is still valid and we can alias. We have users relying on string_view's
  122|       |    // obtained from protos to outlive the proto, when the parse was from an
  123|       |    // array. This guarantees string_view's are always aliased if parsed from
  124|       |    // an array.
  125|      0|    aliasing_ = reinterpret_cast<std::uintptr_t>(buffer_end_) -
  126|      0|                reinterpret_cast<std::uintptr_t>(patch_buffer_);
  127|      0|  }
  128|  1.66k|  next_chunk_ = nullptr;
  129|  1.66k|  buffer_end_ = patch_buffer_ + kSlopBytes;
  130|  1.66k|  size_ = 0;
  131|  1.66k|  return patch_buffer_;
  132|  1.66k|}

_ZN6google8protobuf8internal18EpsCopyInputStreamC2Eb:
  100|  2.60k|      : aliasing_(enable_aliasing ? kOnPatch : kNoAliasing) {}
  ------------------
  |  Branch (100:19): [True: 0, False: 2.60k]
  ------------------
_ZN6google8protobuf8internal18EpsCopyInputStream10LimitTokenC2Ev:
  119|  5.33k|    LimitToken() { PROTOBUF_POISON_MEMORY_REGION(&token_, sizeof(token_)); }
_ZN6google8protobuf8internal18EpsCopyInputStream10LimitTokenC2Ei:
  121|  5.33k|    explicit LimitToken(int token) : token_(token) {
  122|  5.33k|      PROTOBUF_UNPOISON_MEMORY_REGION(&token_, sizeof(token_));
  123|  5.33k|    }
_ZN6google8protobuf8internal18EpsCopyInputStream10LimitTokenC2EOS3_:
  128|  5.33k|    LimitToken(LimitToken&& other) { *this = std::move(other); }
_ZN6google8protobuf8internal18EpsCopyInputStream10LimitTokenaSEOS3_:
  130|  10.6k|    LimitToken& operator=(LimitToken&& other) {
  131|  10.6k|      PROTOBUF_UNPOISON_MEMORY_REGION(&token_, sizeof(token_));
  132|  10.6k|      token_ = other.token_;
  133|  10.6k|      PROTOBUF_POISON_MEMORY_REGION(&other.token_, sizeof(token_));
  134|  10.6k|      return *this;
  135|  10.6k|    }
_ZN6google8protobuf8internal18EpsCopyInputStream10LimitTokenD2Ev:
  137|  16.0k|    ~LimitToken() { PROTOBUF_UNPOISON_MEMORY_REGION(&token_, sizeof(token_)); }
_ZNO6google8protobuf8internal18EpsCopyInputStream10LimitToken5tokenEv:
  139|  5.33k|    int token() && {
  140|  5.33k|      int t = token_;
  141|  5.33k|      PROTOBUF_POISON_MEMORY_REGION(&token_, sizeof(token_));
  142|  5.33k|      return t;
  143|  5.33k|    }
_ZN6google8protobuf8internal18EpsCopyInputStream9PushLimitEPKci:
  150|  5.33k|  PROTOBUF_NODISCARD LimitToken PushLimit(const char* ptr, int limit) {
  151|  5.33k|    ABSL_DCHECK(limit >= 0 && limit <= INT_MAX - kSlopBytes);
  ------------------
  |  |   47|  5.33k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  5.33k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  10.6k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  5.33k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  10.6k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  10.6k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 5.33k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  5.33k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 5.33k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  5.33k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 5.33k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  10.6k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  10.6k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  152|       |    // This add is safe due to the invariant above, because
  153|       |    // ptr - buffer_end_ <= kSlopBytes.
  154|  5.33k|    limit += static_cast<int>(ptr - buffer_end_);
  155|  5.33k|    limit_end_ = buffer_end_ + (std::min)(0, limit);
  156|  5.33k|    auto old_limit = limit_;
  157|  5.33k|    limit_ = limit;
  158|  5.33k|    return LimitToken(old_limit - limit);
  159|  5.33k|  }
_ZN6google8protobuf8internal18EpsCopyInputStream8PopLimitENS2_10LimitTokenE:
  161|  5.33k|  PROTOBUF_NODISCARD bool PopLimit(LimitToken delta) {
  162|       |    // We must update the limit first before the early return. Otherwise, we can
  163|       |    // end up with an invalid limit and it can lead to integer overflows.
  164|  5.33k|    limit_ = limit_ + std::move(delta).token();
  165|  5.33k|    if (PROTOBUF_PREDICT_FALSE(!EndedAtLimit())) return false;
  ------------------
  |  |  365|  5.33k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 5.33k]
  |  |  |  Branch (365:54): [Folded, False: 5.33k]
  |  |  |  Branch (365:63): [True: 0, False: 5.33k]
  |  |  ------------------
  ------------------
  166|       |    // TODO We could remove this line and hoist the code to
  167|       |    // DoneFallback. Study the perf/bin-size effects.
  168|  5.33k|    limit_end_ = buffer_end_ + (std::min)(0, limit_);
  169|  5.33k|    return true;
  170|  5.33k|  }
_ZN6google8protobuf8internal18EpsCopyInputStream10ReadStringEPKciPNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE:
  179|  8.22k|                                            std::string* s) {
  180|  8.22k|    if (size <= buffer_end_ + kSlopBytes - ptr) {
  ------------------
  |  Branch (180:9): [True: 8.22k, False: 0]
  ------------------
  181|       |      // Fundamentally we just want to do assign to the string.
  182|       |      // However micro-benchmarks regress on string reading cases. So we copy
  183|       |      // the same logic from the old CodedInputStream ReadString. Note: as of
  184|       |      // Apr 2021, this is still a significant win over `assign()`.
  185|  8.22k|      absl::strings_internal::STLStringResizeUninitialized(s, size);
  186|  8.22k|      char* z = &(*s)[0];
  187|  8.22k|      memcpy(z, ptr, size);
  188|  8.22k|      return ptr + size;
  189|  8.22k|    }
  190|      0|    return ReadStringFallback(ptr, size, s);
  191|  8.22k|  }
_ZNK6google8protobuf8internal18EpsCopyInputStream7LastTagEv:
  232|  8.55k|  uint32_t LastTag() const { return last_tag_minus_1_ + 1; }
_ZNK6google8protobuf8internal18EpsCopyInputStream12EndedAtLimitEv:
  238|  7.93k|  bool EndedAtLimit() const { return last_tag_minus_1_ == 0; }
_ZN6google8protobuf8internal18EpsCopyInputStream13DataAvailableEPKc:
  256|  17.8k|  bool DataAvailable(const char* ptr) { return ptr < limit_end_; }
_ZN6google8protobuf8internal18EpsCopyInputStream13DoneWithCheckEPPKci:
  262|  16.4k|  bool DoneWithCheck(const char** ptr, int d) {
  263|  16.4k|    ABSL_DCHECK(*ptr);
  ------------------
  |  |   47|  16.4k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  16.4k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  32.9k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  16.4k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  32.9k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  32.9k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 16.4k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  16.4k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 16.4k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  16.4k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 16.4k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  32.9k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  32.9k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  264|  16.4k|    if (PROTOBUF_PREDICT_TRUE(*ptr < limit_end_)) return false;
  ------------------
  |  |  364|  16.4k|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 6.89k, False: 9.59k]
  |  |  |  Branch (364:53): [Folded, False: 16.4k]
  |  |  |  Branch (364:62): [True: 6.89k, False: 9.59k]
  |  |  ------------------
  ------------------
  265|  9.59k|    int overrun = static_cast<int>(*ptr - buffer_end_);
  266|  9.59k|    ABSL_DCHECK_LE(overrun, kSlopBytes);  // Guaranteed by parse loop.
  ------------------
  |  |   78|  9.59k|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|  9.59k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  9.59k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 9.59k]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  9.59k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  267|  9.59k|    if (overrun ==
  ------------------
  |  Branch (267:9): [True: 7.93k, False: 1.66k]
  ------------------
  268|  9.59k|        limit_) {  //  No need to flip buffers if we ended on a limit.
  269|       |      // If we actually overrun the buffer and next_chunk_ is null, it means
  270|       |      // the stream ended and we passed the stream end.
  271|  7.93k|      if (overrun > 0 && next_chunk_ == nullptr) *ptr = nullptr;
  ------------------
  |  Branch (271:11): [True: 783, False: 7.15k]
  |  Branch (271:26): [True: 0, False: 783]
  ------------------
  272|  7.93k|      return true;
  273|  7.93k|    }
  274|  1.66k|    auto res = DoneFallback(overrun, d);
  275|  1.66k|    *ptr = res.first;
  276|  1.66k|    return res.second;
  277|  9.59k|  }
_ZN6google8protobuf8internal18EpsCopyInputStream8InitFromEN4absl12lts_2024011611string_viewE:
  279|  2.60k|  const char* InitFrom(absl::string_view flat) {
  280|  2.60k|    overall_limit_ = 0;
  281|  2.60k|    if (flat.size() > kSlopBytes) {
  ------------------
  |  Branch (281:9): [True: 2.04k, False: 557]
  ------------------
  282|  2.04k|      limit_ = kSlopBytes;
  283|  2.04k|      limit_end_ = buffer_end_ = flat.data() + flat.size() - kSlopBytes;
  284|  2.04k|      next_chunk_ = patch_buffer_;
  285|  2.04k|      if (aliasing_ == kOnPatch) aliasing_ = kNoDelta;
  ------------------
  |  Branch (285:11): [True: 0, False: 2.04k]
  ------------------
  286|  2.04k|      return flat.data();
  287|  2.04k|    } else {
  288|    557|      if (!flat.empty()) {
  ------------------
  |  Branch (288:11): [True: 557, False: 0]
  ------------------
  289|    557|        std::memcpy(patch_buffer_, flat.data(), flat.size());
  290|    557|      }
  291|    557|      limit_ = 0;
  292|    557|      limit_end_ = buffer_end_ = patch_buffer_ + flat.size();
  293|    557|      next_chunk_ = nullptr;
  294|    557|      if (aliasing_ == kOnPatch) {
  ------------------
  |  Branch (294:11): [True: 0, False: 557]
  ------------------
  295|      0|        aliasing_ = reinterpret_cast<std::uintptr_t>(flat.data()) -
  296|      0|                    reinterpret_cast<std::uintptr_t>(patch_buffer_);
  297|      0|      }
  298|    557|      return patch_buffer_;
  299|    557|    }
  300|  2.60k|  }
_ZN6google8protobuf8internal12ParseContext4DoneEPPKc:
  487|  16.4k|  bool Done(const char** ptr) { return DoneWithCheck(ptr, group_depth_); }
_ZNK6google8protobuf8internal12ParseContext4dataEv:
  492|      8|  const Data& data() const { return data_; }
_ZN6google8protobuf8internal12EndianHelperILi1EE4LoadEPKv:
  578|  13.2k|  static uint8_t Load(const void* p) { return *static_cast<const uint8_t*>(p); }
_ZN6google8protobuf8internal12EndianHelperILi2EE4LoadEPKv:
  583|  17.6k|  static uint16_t Load(const void* p) {
  584|  17.6k|    uint16_t tmp;
  585|  17.6k|    std::memcpy(&tmp, p, 2);
  586|  17.6k|    return little_endian::ToHost(tmp);
  587|  17.6k|  }
_ZN6google8protobuf8internal10RotateLeftImEET_S3_i:
  930|    102|    T x, int s) noexcept {
  931|    102|  return static_cast<T>(x << (s & (std::numeric_limits<T>::digits - 1))) |
  932|    102|         static_cast<T>(x >> ((-s) & (std::numeric_limits<T>::digits - 1)));
  933|    102|}
_ZN6google8protobuf8internal15VarintParseSlowEPKcjPm:
  632|     47|inline const char* VarintParseSlow(const char* p, uint32_t res, uint64_t* out) {
  633|     47|  auto tmp = VarintParseSlow64(p, res);
  634|     47|  *out = tmp.second;
  635|     47|  return tmp.first;
  636|     47|}
_ZN6google8protobuf8internal7ReadTagEPKcPjj:
  906|     57|                           uint32_t /*max_tag*/ = 0) {
  907|     57|  uint32_t res = static_cast<uint8_t>(p[0]);
  908|     57|  if (res < 128) {
  ------------------
  |  Branch (908:7): [True: 0, False: 57]
  ------------------
  909|      0|    *out = res;
  910|      0|    return p + 1;
  911|      0|  }
  912|     57|  uint32_t second = static_cast<uint8_t>(p[1]);
  913|     57|  res += (second - 1) << 7;
  914|     57|  if (second < 128) {
  ------------------
  |  Branch (914:7): [True: 57, False: 0]
  ------------------
  915|     57|    *out = res;
  916|     57|    return p + 2;
  917|     57|  }
  918|      0|  auto tmp = ReadTagFallback(p, res);
  919|      0|  *out = tmp.second;
  920|      0|  return tmp.first;
  921|     57|}
_ZN6google8protobuf8internal26RotRight7AndReplaceLowByteEmRKc:
  936|    102|RotRight7AndReplaceLowByte(uint64_t res, const char& byte) {
  937|       |  // TODO: remove the inline assembly
  938|    102|#if defined(__x86_64__) && defined(__GNUC__)
  939|       |  // This will only use one register for `res`.
  940|       |  // `byte` comes as a reference to allow the compiler to generate code like:
  941|       |  //
  942|       |  //   rorq    $7, %rcx
  943|       |  //   movb    1(%rax), %cl
  944|       |  //
  945|       |  // which avoids loading the incoming bytes into a separate register first.
  946|    102|  asm("ror $7,%0\n\t"
  947|    102|      "movb %1,%b0"
  948|    102|      : "+r"(res)
  949|    102|      : "m"(byte));
  950|       |#else
  951|       |  res = RotateLeft(res, -7);
  952|       |  res = res & ~0xFF;
  953|       |  res |= 0xFF & byte;
  954|       |#endif
  955|    102|  return res;
  956|    102|}
_ZN6google8protobuf8internal14ReadTagInlinedEPKcPj:
  959|  1.23k|                                                         uint32_t* out) {
  960|  1.23k|  uint64_t res = 0xFF & ptr[0];
  961|  1.23k|  if (PROTOBUF_PREDICT_FALSE(res >= 128)) {
  ------------------
  |  |  365|  1.23k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 102, False: 1.13k]
  |  |  |  Branch (365:54): [Folded, False: 1.23k]
  |  |  |  Branch (365:63): [True: 102, False: 1.13k]
  |  |  ------------------
  ------------------
  962|    102|    res = RotRight7AndReplaceLowByte(res, ptr[1]);
  963|    102|    if (PROTOBUF_PREDICT_FALSE(res & 0x80)) {
  ------------------
  |  |  365|    102|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 102]
  |  |  |  Branch (365:54): [Folded, False: 102]
  |  |  |  Branch (365:63): [True: 0, False: 102]
  |  |  ------------------
  ------------------
  964|      0|      res = RotRight7AndReplaceLowByte(res, ptr[2]);
  965|      0|      if (PROTOBUF_PREDICT_FALSE(res & 0x80)) {
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  966|      0|        res = RotRight7AndReplaceLowByte(res, ptr[3]);
  967|      0|        if (PROTOBUF_PREDICT_FALSE(res & 0x80)) {
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  968|       |          // Note: this wouldn't work if res were 32-bit,
  969|       |          // because then replacing the low byte would overwrite
  970|       |          // the bottom 4 bits of the result.
  971|      0|          res = RotRight7AndReplaceLowByte(res, ptr[4]);
  972|      0|          if (PROTOBUF_PREDICT_FALSE(res & 0x80)) {
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  973|       |            // The proto format does not permit longer than 5-byte encodings for
  974|       |            // tags.
  975|      0|            *out = 0;
  976|      0|            return nullptr;
  977|      0|          }
  978|      0|          *out = static_cast<uint32_t>(RotateLeft(res, 28));
  979|      0|#if defined(__GNUC__)
  980|       |          // Note: this asm statement prevents the compiler from
  981|       |          // trying to share the "return ptr + constant" among all
  982|       |          // branches.
  983|      0|          asm("" : "+r"(ptr));
  984|      0|#endif
  985|      0|          return ptr + 5;
  986|      0|        }
  987|      0|        *out = static_cast<uint32_t>(RotateLeft(res, 21));
  988|      0|        return ptr + 4;
  989|      0|      }
  990|      0|      *out = static_cast<uint32_t>(RotateLeft(res, 14));
  991|      0|      return ptr + 3;
  992|      0|    }
  993|    102|    *out = static_cast<uint32_t>(RotateLeft(res, 7));
  994|    102|    return ptr + 2;
  995|    102|  }
  996|  1.13k|  *out = static_cast<uint32_t>(res);
  997|  1.13k|  return ptr + 1;
  998|  1.23k|}
_ZN6google8protobuf8internal8ReadSizeEPPKc:
 1050|  13.6k|inline uint32_t ReadSize(const char** pp) {
 1051|  13.6k|  auto p = *pp;
 1052|  13.6k|  uint32_t res = static_cast<uint8_t>(p[0]);
 1053|  13.6k|  if (res < 128) {
  ------------------
  |  Branch (1053:7): [True: 12.3k, False: 1.26k]
  ------------------
 1054|  12.3k|    *pp = p + 1;
 1055|  12.3k|    return res;
 1056|  12.3k|  }
 1057|  1.26k|  auto x = ReadSizeFallback(p, res);
 1058|  1.26k|  *pp = x.first;
 1059|  1.26k|  return x.second;
 1060|  13.6k|}
_ZN6google8protobuf8internal12ParseContext35ReadSizeAndPushLimitAndDepthInlinedEPKcPNS1_18EpsCopyInputStream10LimitTokenE:
 1125|  5.33k|    const char* ptr, LimitToken* old_limit) {
 1126|  5.33k|  int size = ReadSize(&ptr);
 1127|  5.33k|  if (PROTOBUF_PREDICT_FALSE(!ptr) || depth_ <= 0) {
  ------------------
  |  |  365|  10.6k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 5.33k]
  |  |  |  Branch (365:54): [Folded, False: 5.33k]
  |  |  |  Branch (365:63): [True: 0, False: 5.33k]
  |  |  ------------------
  ------------------
  |  Branch (1127:39): [True: 0, False: 5.33k]
  ------------------
 1128|      0|    return nullptr;
 1129|      0|  }
 1130|  5.33k|  *old_limit = PushLimit(ptr, size);
 1131|  5.33k|  --depth_;
 1132|  5.33k|  return ptr;
 1133|  5.33k|}
_ZN6google8protobuf8internal13UnalignedLoadItEET_PKc:
  609|  17.6k|T UnalignedLoad(const char* p) {
  610|  17.6k|  auto tmp = EndianHelper<sizeof(T)>::Load(p);
  611|  17.6k|  T res;
  612|  17.6k|  memcpy(&res, &tmp, sizeof(T));
  613|  17.6k|  return res;
  614|  17.6k|}
_ZN6google8protobuf8internal11VarintParseImEEPKcS4_PT_:
  868|    127|PROTOBUF_NODISCARD const char* VarintParse(const char* p, T* out) {
  869|       |#if defined(__aarch64__) && defined(ABSL_IS_LITTLE_ENDIAN) && !defined(_MSC_VER)
  870|       |  // This optimization is not supported in big endian mode
  871|       |  uint64_t first8;
  872|       |  std::memcpy(&first8, p, sizeof(first8));
  873|       |  if (PROTOBUF_PREDICT_TRUE((first8 & 0x80) == 0)) {
  874|       |    *out = static_cast<uint8_t>(first8);
  875|       |    return p + 1;
  876|       |  }
  877|       |  if (PROTOBUF_PREDICT_TRUE((first8 & 0x8000) == 0)) {
  878|       |    uint64_t chunk1;
  879|       |    uint64_t chunk2;
  880|       |    // Extracting the two chunks this way gives a speedup for this path.
  881|       |    chunk1 = Ubfx7(first8, 0);
  882|       |    chunk2 = Ubfx7(first8, 8);
  883|       |    *out = chunk1 | (chunk2 << 7);
  884|       |    return p + 2;
  885|       |  }
  886|       |  return VarintParseSlowArm(p, out, first8);
  887|       |#else   // __aarch64__
  888|    127|  auto ptr = reinterpret_cast<const uint8_t*>(p);
  889|    127|  uint32_t res = ptr[0];
  890|    127|  if ((res & 0x80) == 0) {
  ------------------
  |  Branch (890:7): [True: 80, False: 47]
  ------------------
  891|     80|    *out = res;
  892|     80|    return p + 1;
  893|     80|  }
  894|     47|  return VarintParseSlow(p, res, out);
  895|    127|#endif  // __aarch64__
  896|    127|}
_ZN6google8protobuf8internal12ParseContext27ParseLengthDelimitedInlinedIZNS1_8TcParser9MpMessageILb0EEEPKcPNS0_11MessageLiteES7_PS2_NS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmEUlS7_E_EES7_S7_RKT_:
 1093|     27|ParseContext::ParseLengthDelimitedInlined(const char* ptr, const Func& func) {
 1094|     27|  LimitToken old;
 1095|     27|  ptr = ReadSizeAndPushLimitAndDepthInlined(ptr, &old);
 1096|     27|  if (ptr == nullptr) return ptr;
  ------------------
  |  Branch (1096:7): [True: 0, False: 27]
  ------------------
 1097|     27|  auto old_depth = depth_;
 1098|     27|  PROTOBUF_ALWAYS_INLINE_CALL ptr = func(ptr);
  ------------------
  |  |  187|     27|#define PROTOBUF_ALWAYS_INLINE_CALL [[clang::always_inline]]
  ------------------
 1099|     27|  if (ptr != nullptr) ABSL_DCHECK_EQ(old_depth, depth_);
  ------------------
  |  |   74|     27|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|     27|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     27|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 27]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     27|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1099:7): [True: 27, False: 0]
  ------------------
 1100|     27|  depth_++;
 1101|     27|  if (!PopLimit(std::move(old))) return nullptr;
  ------------------
  |  Branch (1101:7): [True: 0, False: 27]
  ------------------
 1102|     27|  return ptr;
 1103|     27|}
_ZN6google8protobuf8internal13UnalignedLoadIhEET_PKc:
  609|  13.2k|T UnalignedLoad(const char* p) {
  610|  13.2k|  auto tmp = EndianHelper<sizeof(T)>::Load(p);
  611|  13.2k|  T res;
  612|  13.2k|  memcpy(&res, &tmp, sizeof(T));
  613|  13.2k|  return res;
  614|  13.2k|}
_ZN6google8protobuf8internal12ParseContext27ParseLengthDelimitedInlinedIZNS1_8TcParser27SingularParseMessageAuxImplIhLb0ELb1EEEPKcPNS0_11MessageLiteES7_PS2_NS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmEUlS7_E_EES7_S7_RKT_:
 1093|  2.86k|ParseContext::ParseLengthDelimitedInlined(const char* ptr, const Func& func) {
 1094|  2.86k|  LimitToken old;
 1095|  2.86k|  ptr = ReadSizeAndPushLimitAndDepthInlined(ptr, &old);
 1096|  2.86k|  if (ptr == nullptr) return ptr;
  ------------------
  |  Branch (1096:7): [True: 0, False: 2.86k]
  ------------------
 1097|  2.86k|  auto old_depth = depth_;
 1098|  2.86k|  PROTOBUF_ALWAYS_INLINE_CALL ptr = func(ptr);
  ------------------
  |  |  187|  2.86k|#define PROTOBUF_ALWAYS_INLINE_CALL [[clang::always_inline]]
  ------------------
 1099|  2.86k|  if (ptr != nullptr) ABSL_DCHECK_EQ(old_depth, depth_);
  ------------------
  |  |   74|  2.86k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|  2.86k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  2.86k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 2.86k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  2.86k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1099:7): [True: 2.86k, False: 0]
  ------------------
 1100|  2.86k|  depth_++;
 1101|  2.86k|  if (!PopLimit(std::move(old))) return nullptr;
  ------------------
  |  Branch (1101:7): [True: 0, False: 2.86k]
  ------------------
 1102|  2.86k|  return ptr;
 1103|  2.86k|}
_ZN6google8protobuf8internal12ParseContext27ParseLengthDelimitedInlinedIZNS1_8TcParser27RepeatedParseMessageAuxImplIhLb0ELb1EEEPKcPNS0_11MessageLiteES7_PS2_NS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmEUlS7_E_EES7_S7_RKT_:
 1093|  2.37k|ParseContext::ParseLengthDelimitedInlined(const char* ptr, const Func& func) {
 1094|  2.37k|  LimitToken old;
 1095|  2.37k|  ptr = ReadSizeAndPushLimitAndDepthInlined(ptr, &old);
 1096|  2.37k|  if (ptr == nullptr) return ptr;
  ------------------
  |  Branch (1096:7): [True: 0, False: 2.37k]
  ------------------
 1097|  2.37k|  auto old_depth = depth_;
 1098|  2.37k|  PROTOBUF_ALWAYS_INLINE_CALL ptr = func(ptr);
  ------------------
  |  |  187|  2.37k|#define PROTOBUF_ALWAYS_INLINE_CALL [[clang::always_inline]]
  ------------------
 1099|  2.37k|  if (ptr != nullptr) ABSL_DCHECK_EQ(old_depth, depth_);
  ------------------
  |  |   74|  2.37k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|  2.37k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  2.37k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 2.37k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  2.37k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1099:7): [True: 2.37k, False: 0]
  ------------------
 1100|  2.37k|  depth_++;
 1101|  2.37k|  if (!PopLimit(std::move(old))) return nullptr;
  ------------------
  |  Branch (1101:7): [True: 0, False: 2.37k]
  ------------------
 1102|  2.37k|  return ptr;
 1103|  2.37k|}
_ZN6google8protobuf8internal12ParseContext27ParseLengthDelimitedInlinedIZNS1_8TcParser27RepeatedParseMessageAuxImplItLb0ELb1EEEPKcPNS0_11MessageLiteES7_PS2_NS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmEUlS7_E_EES7_S7_RKT_:
 1093|     54|ParseContext::ParseLengthDelimitedInlined(const char* ptr, const Func& func) {
 1094|     54|  LimitToken old;
 1095|     54|  ptr = ReadSizeAndPushLimitAndDepthInlined(ptr, &old);
 1096|     54|  if (ptr == nullptr) return ptr;
  ------------------
  |  Branch (1096:7): [True: 0, False: 54]
  ------------------
 1097|     54|  auto old_depth = depth_;
 1098|     54|  PROTOBUF_ALWAYS_INLINE_CALL ptr = func(ptr);
  ------------------
  |  |  187|     54|#define PROTOBUF_ALWAYS_INLINE_CALL [[clang::always_inline]]
  ------------------
 1099|     54|  if (ptr != nullptr) ABSL_DCHECK_EQ(old_depth, depth_);
  ------------------
  |  |   74|     54|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|     54|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     54|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 54]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     54|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1099:7): [True: 54, False: 0]
  ------------------
 1100|     54|  depth_++;
 1101|     54|  if (!PopLimit(std::move(old))) return nullptr;
  ------------------
  |  Branch (1101:7): [True: 0, False: 54]
  ------------------
 1102|     54|  return ptr;
 1103|     54|}
_ZN6google8protobuf8internal18EpsCopyInputStream16ReadPackedVarintIZNS1_8TcParser12PackedVarintIjhLb0EEEPKcPNS0_11MessageLiteES7_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmEUlmE_EES7_S7_T_:
  225|    101|  PROTOBUF_NODISCARD const char* ReadPackedVarint(const char* ptr, Add add) {
  226|    101|    return ReadPackedVarint(ptr, add, [](int) {});
  227|    101|  }
_ZN6google8protobuf8internal18EpsCopyInputStream16ReadPackedVarintIZNS1_8TcParser12PackedVarintIjhLb0EEEPKcPNS0_11MessageLiteES7_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmEUlmE_ZNS2_16ReadPackedVarintISG_EES7_S7_T_EUliE_EES7_S7_SI_T0_:
 1213|    101|                                                 SizeCb size_callback) {
 1214|    101|  int size = ReadSize(&ptr);
 1215|    101|  size_callback(size);
 1216|       |
 1217|    101|  GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
  ------------------
  |  | 1157|    101|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  ------------------
  |  |  |  | 1150|    101|  if (!(predicate)) {                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1150:7): [True: 0, False: 101]
  |  |  |  |  ------------------
  |  |  |  | 1151|      0|    /*  ::raise(SIGINT);  */                           \
  |  |  |  | 1152|      0|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  | 1153|      0|    return ret;                                        \
  |  |  |  | 1154|      0|  }
  |  |  ------------------
  ------------------
 1218|    101|  int chunk_size = static_cast<int>(buffer_end_ - ptr);
 1219|    101|  while (size > chunk_size) {
  ------------------
  |  Branch (1219:10): [True: 1, False: 100]
  ------------------
 1220|      1|    ptr = ReadPackedVarintArray(ptr, buffer_end_, add);
 1221|      1|    if (ptr == nullptr) return nullptr;
  ------------------
  |  Branch (1221:9): [True: 0, False: 1]
  ------------------
 1222|      1|    int overrun = static_cast<int>(ptr - buffer_end_);
 1223|      1|    ABSL_DCHECK(overrun >= 0 && overrun <= kSlopBytes);
  ------------------
  |  |   47|      1|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      1|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      2|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      1|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      2|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      2|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      1|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      1|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      2|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      2|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1224|      1|    if (size - chunk_size <= kSlopBytes) {
  ------------------
  |  Branch (1224:9): [True: 1, False: 0]
  ------------------
 1225|       |      // The current buffer contains all the information needed, we don't need
 1226|       |      // to flip buffers. However we must parse from a buffer with enough space
 1227|       |      // so we are not prone to a buffer overflow.
 1228|      1|      char buf[kSlopBytes + 10] = {};
 1229|      1|      std::memcpy(buf, buffer_end_, kSlopBytes);
 1230|      1|      ABSL_CHECK_LE(size - chunk_size, kSlopBytes);
  ------------------
  |  |   54|      1|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|      1|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      1|  while (                                                                      \
  |  |  |  |  |  |   62|      1|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      1|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      1|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      1|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      1|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      1|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      1|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1231|      1|      auto end = buf + (size - chunk_size);
 1232|      1|      auto res = ReadPackedVarintArray(buf + overrun, end, add);
 1233|      1|      if (res == nullptr || res != end) return nullptr;
  ------------------
  |  Branch (1233:11): [True: 0, False: 1]
  |  Branch (1233:29): [True: 0, False: 1]
  ------------------
 1234|      1|      return buffer_end_ + (res - buf);
 1235|      1|    }
 1236|      0|    size -= overrun + chunk_size;
 1237|      0|    ABSL_DCHECK_GT(size, 0);
  ------------------
  |  |   84|      0|  ABSL_LOG_INTERNAL_DCHECK_GT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   96|      0|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      0|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 0]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1238|       |    // We must flip buffers
 1239|      0|    if (limit_ <= kSlopBytes) return nullptr;
  ------------------
  |  Branch (1239:9): [True: 0, False: 0]
  ------------------
 1240|      0|    ptr = Next();
 1241|      0|    if (ptr == nullptr) return nullptr;
  ------------------
  |  Branch (1241:9): [True: 0, False: 0]
  ------------------
 1242|      0|    ptr += overrun;
 1243|      0|    chunk_size = static_cast<int>(buffer_end_ - ptr);
 1244|      0|  }
 1245|    100|  auto end = ptr + size;
 1246|    100|  ptr = ReadPackedVarintArray(ptr, end, add);
 1247|    100|  return end == ptr ? ptr : nullptr;
  ------------------
  |  Branch (1247:10): [True: 100, False: 0]
  ------------------
 1248|    101|}
_ZZN6google8protobuf8internal18EpsCopyInputStream16ReadPackedVarintIZNS1_8TcParser12PackedVarintIjhLb0EEEPKcPNS0_11MessageLiteES7_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmEUlmE_EES7_S7_T_ENKUliE_clEi:
  226|    101|    return ReadPackedVarint(ptr, add, [](int) {});
_ZN6google8protobuf8internal21ReadPackedVarintArrayIZNS1_8TcParser12PackedVarintIjhLb0EEEPKcPNS0_11MessageLiteES6_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmEUlmE_EES6_S6_S6_T_:
 1201|    102|const char* ReadPackedVarintArray(const char* ptr, const char* end, Add add) {
 1202|    229|  while (ptr < end) {
  ------------------
  |  Branch (1202:10): [True: 127, False: 102]
  ------------------
 1203|    127|    uint64_t varint;
 1204|    127|    ptr = VarintParse(ptr, &varint);
 1205|    127|    if (ptr == nullptr) return nullptr;
  ------------------
  |  Branch (1205:9): [True: 0, False: 127]
  ------------------
 1206|    127|    add(varint);
 1207|    127|  }
 1208|    102|  return ptr;
 1209|    102|}
_ZN6google8protobuf8internal12ParseContextC2IJRN4absl12lts_2024011611string_viewEEEEibPPKcDpOT_:
  455|  2.60k|      : EpsCopyInputStream(aliasing), depth_(depth) {
  456|  2.60k|    *start = InitFrom(std::forward<T>(args)...);
  457|  2.60k|  }

_ZN6google8protobuf8internal16NoopDebugCounter3IncEv:
  440|  5.82k|  constexpr void Inc() {}
_ZN6google8protobuf8internal16SizedArrayDeleteEPvm:
  148|  1.05k|inline void SizedArrayDelete(void* p, size_t size) {
  149|  1.05k|#if defined(__cpp_sized_deallocation)
  150|  1.05k|  ::operator delete[](p, size);
  151|       |#else
  152|       |  // Avoid -Wunused-parameter
  153|       |  (void)size;
  154|       |  ::operator delete[](p);
  155|       |#endif
  156|  1.05k|}
_ZN6google8protobuf8internal23Prefetch5LinesFrom1LineEPKv:
  323|  1.27k|inline PROTOBUF_ALWAYS_INLINE void Prefetch5LinesFrom1Line(const void* ptr) {
  324|  1.27k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 64);
  ------------------
  |  |  670|  1.27k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  325|  1.27k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 128);
  ------------------
  |  |  670|  1.27k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  326|  1.27k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 192);
  ------------------
  |  |  670|  1.27k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  327|  1.27k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 256);
  ------------------
  |  |  670|  1.27k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  328|  1.27k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 320);
  ------------------
  |  |  670|  1.27k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  329|  1.27k|}
_ZN6google8protobuf8internal7LaunderINS0_11MessageLiteEEEPT_S5_:
  376|  5.82k|constexpr T* Launder(T* p) {
  377|       |#if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606L
  378|       |  return std::launder(p);
  379|       |#elif ABSL_HAVE_BUILTIN(__builtin_launder)
  380|       |  return __builtin_launder(p);
  381|       |#else
  382|       |  return p;
  383|       |#endif
  384|  5.82k|}
_ZN6google8protobuf8internal13StrongPointerIPNS1_16DummyWeakDefaultETnT_XadL_ZNS1_18dummy_weak_defaultEEEEEvv:
   60|      2|inline PROTOBUF_ALWAYS_INLINE void StrongPointer() {
   61|       |  // This injects a relocation in the code path without having to run code, but
   62|       |  // we can only do it with a newer clang.
   63|      2|  asm(".reloc ., BFD_RELOC_NONE, %p0" ::"Ws"(ptr));
   64|      2|}

_ZNK6google8protobuf13RepeatedFieldIiE6is_sooEv:
  476|    326|  bool is_soo() const { return soo_rep_.is_soo(); }
_ZNK6google8protobuf13RepeatedFieldIiE4sizeEb:
  477|    211|  int size(bool is_soo) const { return soo_rep_.size(is_soo); }
_ZNK6google8protobuf13RepeatedFieldIiE8CapacityEb:
  478|     30|  int Capacity(bool is_soo) const {
  479|       |#if !defined(__clang__) && defined(__GNUC__)
  480|       |#pragma GCC diagnostic push
  481|       |#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
  482|       |#endif
  483|     30|    return is_soo ? kSooCapacityElements : soo_rep_.long_rep.capacity;
  ------------------
  |  Branch (483:12): [True: 28, False: 2]
  ------------------
  484|       |#if !defined(__clang__) && defined(__GNUC__)
  485|       |#pragma GCC diagnostic pop
  486|       |#endif
  487|     30|  }
_ZN6google8protobuf13RepeatedFieldIiE15unsafe_elementsEb:
  592|    140|  Element* unsafe_elements(bool is_soo) {
  593|    140|    return is_soo ? reinterpret_cast<Element*>(soo_rep_.short_rep.data)
  ------------------
  |  Branch (593:12): [True: 134, False: 6]
  ------------------
  594|    140|                  : reinterpret_cast<Element*>(soo_rep_.long_rep.elements());
  595|    140|  }
_ZNK6google8protobuf13RepeatedFieldIiE14UnpoisonBufferEv:
  557|     29|  void UnpoisonBuffer() const {
  558|     29|    AnnotateSize(size(), Capacity());
  559|     29|    if (is_soo()) {
  ------------------
  |  Branch (559:9): [True: 28, False: 1]
  ------------------
  560|       |      // We need to manually unpoison the SOO buffer because in reflection for
  561|       |      // split repeated fields, we poison the whole SOO buffer even when we
  562|       |      // don't actually use the whole SOO buffer (e.g. for RepeatedField<bool>).
  563|     28|      PROTOBUF_UNPOISON_MEMORY_REGION(soo_rep_.short_rep.data,
  564|     28|                                      sizeof(soo_rep_.short_rep.data));
  565|     28|    }
  566|     29|  }
_ZNK6google8protobuf13RepeatedFieldIiE8heap_repEv:
  602|      2|  HeapRep* heap_rep() const {
  603|      2|    ABSL_DCHECK(!is_soo());
  ------------------
  |  |   47|      2|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      2|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      4|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      2|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      4|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      4|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      2|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      2|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      4|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      4|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  604|      2|    return reinterpret_cast<HeapRep*>(soo_rep_.long_rep.elements() -
  605|      2|                                      kHeapRepHeaderSize);
  606|      2|  }
_ZN6google8protobuf13RepeatedFieldIiE8elementsEb:
  581|     19|  Element* elements(bool is_soo) {
  582|     19|    ABSL_DCHECK_GT(Capacity(is_soo), 0);
  ------------------
  |  |   84|     19|  ABSL_LOG_INTERNAL_DCHECK_GT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   96|     19|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     19|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 19]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     19|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  583|     19|    return unsafe_elements(is_soo);
  584|     19|  }
_ZNK6google8protobuf13RepeatedFieldIiE12AnnotateSizeEii:
  543|    103|  void AnnotateSize(int old_size, int new_size) const {
  544|    103|    if (old_size != new_size) {
  ------------------
  |  Branch (544:9): [True: 58, False: 45]
  ------------------
  545|     58|      ABSL_ATTRIBUTE_UNUSED const bool is_soo = this->is_soo();
  ------------------
  |  |  557|     58|#define ABSL_ATTRIBUTE_UNUSED __attribute__((__unused__))
  ------------------
  546|     58|      ABSL_ATTRIBUTE_UNUSED const Element* elem = unsafe_elements(is_soo);
  ------------------
  |  |  557|     58|#define ABSL_ATTRIBUTE_UNUSED __attribute__((__unused__))
  ------------------
  547|     58|      ABSL_ANNOTATE_CONTIGUOUS_CONTAINER(elem, elem + Capacity(is_soo),
  548|     58|                                         elem + old_size, elem + new_size);
  549|     58|      if (new_size < old_size) {
  ------------------
  |  Branch (549:11): [True: 37, False: 21]
  ------------------
  550|     37|        ABSL_ANNOTATE_MEMORY_IS_UNINITIALIZED(
  551|     37|            elem + new_size, (old_size - new_size) * sizeof(Element));
  552|     37|      }
  553|     58|    }
  554|    103|  }
_ZNK6google8protobuf13RepeatedFieldIiE15unsafe_elementsEb:
  596|     75|  const Element* unsafe_elements(bool is_soo) const {
  597|     75|    return const_cast<RepeatedField*>(this)->unsafe_elements(is_soo);
  598|     75|  }
_ZN6google8protobuf13RepeatedFieldIiE19ExchangeCurrentSizeEbi:
  572|     37|  inline int ExchangeCurrentSize(bool is_soo, int new_size) {
  573|     37|    const int prev_size = size(is_soo);
  574|     37|    AnnotateSize(prev_size, new_size);
  575|     37|    set_size(is_soo, new_size);
  576|     37|    return prev_size;
  577|     37|  }
_ZN6google8protobuf13RepeatedFieldIiE8set_sizeEbi:
  488|     37|  void set_size(bool is_soo, int size) {
  489|     37|    ABSL_DCHECK_LE(size, Capacity(is_soo));
  ------------------
  |  |   78|     37|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|     37|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     37|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 37]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     37|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  490|     37|    soo_rep_.set_size(is_soo, size);
  491|     37|  }
_ZNK6google8protobuf13RepeatedFieldIiE8CapacityEv:
  743|     29|inline int RepeatedField<Element>::Capacity() const {
  744|     29|  return Capacity(is_soo());
  745|     29|}
_ZNK6google8protobuf13RepeatedFieldIiE4sizeEv:
  738|    108|inline int RepeatedField<Element>::size() const {
  739|    108|  return size(is_soo());
  740|    108|}
_ZN6google8protobuf13RepeatedFieldIiE7DestroyEPKiS4_:
  518|     46|  static void Destroy(const Element* begin, const Element* end) {
  519|     46|    if (!std::is_trivial<Element>::value) {
  ------------------
  |  Branch (519:9): [Folded, False: 46]
  ------------------
  520|      0|      std::for_each(begin, end, [&](const Element& e) { e.~Element(); });
  521|      0|    }
  522|     46|  }
_ZNK6google8protobuf13RepeatedFieldIiE4dataEv:
 1043|     17|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1044|     17|  return unsafe_elements(is_soo());
 1045|     17|}
_ZNK6google8protobuf13RepeatedFieldINS0_12UnknownFieldEE6is_sooEv:
  476|     19|  bool is_soo() const { return soo_rep_.is_soo(); }
_ZNK6google8protobuf13RepeatedFieldINS0_12UnknownFieldEE4sizeEb:
  477|     19|  int size(bool is_soo) const { return soo_rep_.size(is_soo); }
_ZNK6google8protobuf13RepeatedFieldINS0_12UnknownFieldEE5emptyEv:
  733|     19|inline bool RepeatedField<Element>::empty() const {
  734|     19|  return size() == 0;
  735|     19|}
_ZNK6google8protobuf13RepeatedFieldINS0_12UnknownFieldEE4sizeEv:
  738|     19|inline int RepeatedField<Element>::size() const {
  739|     19|  return size(is_soo());
  740|     19|}
_ZN6google8protobuf13RepeatedFieldIjE3AddEj:
  841|    184|inline void RepeatedField<Element>::Add(Element value) {
  842|    184|  bool is_soo = this->is_soo();
  843|    184|  const int old_size = size(is_soo);
  844|    184|  int capacity = Capacity(is_soo);
  845|    184|  Element* elem = unsafe_elements(is_soo);
  846|    184|  if (ABSL_PREDICT_FALSE(old_size == capacity)) {
  ------------------
  |  |  178|    184|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 3, False: 181]
  |  |  |  Branch (178:49): [Folded, False: 184]
  |  |  |  Branch (178:58): [True: 3, False: 181]
  |  |  ------------------
  ------------------
  847|      3|    Grow(is_soo, old_size, old_size + 1);
  848|      3|    is_soo = false;
  849|      3|    capacity = Capacity(is_soo);
  850|      3|    elem = unsafe_elements(is_soo);
  851|      3|  }
  852|    184|  int new_size = old_size + 1;
  853|    184|  void* p = elem + ExchangeCurrentSize(is_soo, new_size);
  854|    184|  ::new (p) Element(std::move(value));
  855|       |
  856|       |  // The below helps the compiler optimize dense loops.
  857|       |  // Note: we can't call functions in PROTOBUF_ASSUME so use local variables.
  858|    184|  ABSL_ATTRIBUTE_UNUSED const bool final_is_soo = this->is_soo();
  ------------------
  |  |  557|    184|#define ABSL_ATTRIBUTE_UNUSED __attribute__((__unused__))
  ------------------
  859|    184|  PROTOBUF_ASSUME(is_soo == final_is_soo);
  ------------------
  |  |  941|    184|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  860|    184|  ABSL_ATTRIBUTE_UNUSED const int final_size = size(is_soo);
  ------------------
  |  |  557|    184|#define ABSL_ATTRIBUTE_UNUSED __attribute__((__unused__))
  ------------------
  861|    184|  PROTOBUF_ASSUME(new_size == final_size);
  ------------------
  |  |  941|    184|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  862|    184|  ABSL_ATTRIBUTE_UNUSED Element* const final_elements = unsafe_elements(is_soo);
  ------------------
  |  |  557|    184|#define ABSL_ATTRIBUTE_UNUSED __attribute__((__unused__))
  ------------------
  863|    184|  PROTOBUF_ASSUME(elem == final_elements);
  ------------------
  |  |  941|    184|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  864|    184|  ABSL_ATTRIBUTE_UNUSED const int final_capacity = Capacity(is_soo);
  ------------------
  |  |  557|    184|#define ABSL_ATTRIBUTE_UNUSED __attribute__((__unused__))
  ------------------
  865|    184|  PROTOBUF_ASSUME(capacity == final_capacity);
  ------------------
  |  |  941|    184|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  866|    184|}
_ZN6google8protobuf13RepeatedFieldIiE5ClearEv:
  984|     37|inline void RepeatedField<Element>::Clear() {
  985|     37|  const bool is_soo = this->is_soo();
  986|     37|  Element* elem = unsafe_elements(is_soo);
  987|     37|  Destroy(elem, elem + size(is_soo));
  988|     37|  ExchangeCurrentSize(is_soo, 0);
  989|     37|}
_ZNK6google8protobuf13RepeatedFieldIiE3GetEi:
  805|     19|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  806|     19|  ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|     19|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     19|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     19|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 19]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     19|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  807|     19|  ABSL_DCHECK_LT(index, size());
  ------------------
  |  |   80|     19|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|     19|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     19|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 19]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     19|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  808|     19|  return elements(is_soo())[index];
  809|     19|}
_ZNK6google8protobuf13RepeatedFieldIiE8elementsEb:
  585|     19|  const Element* elements(bool is_soo) const {
  586|     19|    return const_cast<RepeatedField*>(this)->elements(is_soo);
  587|     19|  }
_ZN6google8protobuf8internal20CalculateReserveSizeIPvLi8EEEiii:
 1142|  1.72k|inline int CalculateReserveSize(int capacity, int new_size) {
 1143|  1.72k|  constexpr int lower_limit =
 1144|  1.72k|      RepeatedFieldLowerClampLimit<T, kHeapRepHeaderSize>();
 1145|  1.72k|  if (new_size < lower_limit) {
  ------------------
  |  Branch (1145:7): [True: 0, False: 1.72k]
  ------------------
 1146|       |    // Clamp to smallest allowed size.
 1147|      0|    return lower_limit;
 1148|      0|  }
 1149|  1.72k|  constexpr int kMaxSizeBeforeClamp =
 1150|  1.72k|      (std::numeric_limits<int>::max() - kHeapRepHeaderSize) / 2;
 1151|  1.72k|  if (PROTOBUF_PREDICT_FALSE(capacity > kMaxSizeBeforeClamp)) {
  ------------------
  |  |  365|  1.72k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1.72k]
  |  |  |  Branch (365:54): [Folded, False: 1.72k]
  |  |  |  Branch (365:63): [True: 0, False: 1.72k]
  |  |  ------------------
  ------------------
 1152|      0|    return std::numeric_limits<int>::max();
 1153|      0|  }
 1154|  1.72k|  constexpr int kSooCapacityElements = SooCapacityElements(sizeof(T));
 1155|  1.72k|  if (kSooCapacityElements > 0 && kSooCapacityElements < lower_limit) {
  ------------------
  |  Branch (1155:7): [True: 0, Folded]
  |  Branch (1155:35): [Folded, False: 0]
  ------------------
 1156|       |    // In this case, we need to set capacity to 0 here to ensure power-of-two
 1157|       |    // sized allocations.
 1158|      0|    if (capacity < lower_limit) capacity = 0;
  ------------------
  |  Branch (1158:9): [True: 0, False: 0]
  ------------------
 1159|  1.72k|  } else {
 1160|  3.44k|    ABSL_DCHECK(capacity == 0 || capacity >= lower_limit)
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  1.72k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  1.72k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  3.44k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  3.44k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1.72k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  1.72k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1.72k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  1.72k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1.72k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  1.72k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|  1.72k|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1161|  3.44k|        << capacity << " " << lower_limit;
 1162|  1.72k|  }
 1163|       |  // We want to double the number of bytes, not the number of elements, to try
 1164|       |  // to stay within power-of-two allocations.
 1165|       |  // The allocation has kHeapRepHeaderSize + sizeof(T) * capacity.
 1166|  1.72k|  int doubled_size = 2 * capacity + kHeapRepHeaderSize / sizeof(T);
 1167|  1.72k|  return std::max(doubled_size, new_size);
 1168|  1.72k|}
_ZN6google8protobuf13RepeatedFieldIiE19StaticValidityCheckEv:
  259|     66|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  260|     66|    static_assert(
  261|     66|        absl::disjunction<internal::is_supported_integral_type<Element>,
  262|     66|                          internal::is_supported_floating_point_type<Element>,
  263|     66|                          std::is_same<absl::Cord, Element>,
  264|     66|                          std::is_same<UnknownField, Element>,
  265|     66|                          is_proto_enum<Element>>::value,
  266|     66|        "We only support non-string scalars in RepeatedField.");
  267|     66|  }
_ZN6google8protobuf13RepeatedFieldIiEC2EPNS0_5ArenaE:
  648|     37|inline RepeatedField<Element>::RepeatedField(Arena* arena) : soo_rep_(arena) {
  649|     37|  StaticValidityCheck();
  650|     37|  AnnotateSize(kSooCapacityElements, 0);
  651|     37|}
_ZN6google8protobuf13RepeatedFieldIiED2Ev:
  680|     29|RepeatedField<Element>::~RepeatedField() {
  681|     29|  StaticValidityCheck();
  682|     29|  const bool is_soo = this->is_soo();
  683|       |#ifndef NDEBUG
  684|       |  // Try to trigger segfault / asan failure in non-opt builds if arena_
  685|       |  // lifetime has ended before the destructor.
  686|       |  auto arena = GetArena(is_soo);
  687|       |  if (arena) (void)arena->SpaceAllocated();
  688|       |#endif
  689|     29|  const int size = this->size(is_soo);
  690|     29|  if (size > 0) {
  ------------------
  |  Branch (690:7): [True: 9, False: 20]
  ------------------
  691|      9|    Element* elem = unsafe_elements(is_soo);
  692|      9|    Destroy(elem, elem + size);
  693|      9|  }
  694|     29|  UnpoisonBuffer();
  695|     29|  if (!is_soo) InternalDeallocate<true>();
  ------------------
  |  Branch (695:7): [True: 1, False: 28]
  ------------------
  696|     29|}
_ZN6google8protobuf13RepeatedFieldIiE18InternalDeallocateILb1EEEvv:
  610|      1|  void InternalDeallocate() {
  611|      1|    ABSL_DCHECK(!is_soo());
  ------------------
  |  |   47|      1|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      1|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      2|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      1|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      2|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      2|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      1|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      1|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      2|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      2|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  612|      1|    const size_t bytes = Capacity(false) * sizeof(Element) + kHeapRepHeaderSize;
  613|      1|    if (heap_rep()->arena == nullptr) {
  ------------------
  |  Branch (613:9): [True: 1, False: 0]
  ------------------
  614|      1|      internal::SizedDelete(heap_rep(), bytes);
  615|      1|    } else if (!in_destructor) {
  ------------------
  |  Branch (615:16): [Folded, False: 0]
  ------------------
  616|       |      // If we are in the destructor, we might be being destroyed as part of
  617|       |      // the arena teardown. We can't try and return blocks to the arena then.
  618|      0|      heap_rep()->arena->ReturnArrayMemory(heap_rep(), bytes);
  619|      0|    }
  620|      1|  }
_ZN6google8protobuf13RepeatedFieldIiEC2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
  295|     37|      : RepeatedField(arena) {}

_ZN6google8protobuf8internal20RepeatedPtrFieldBase14InternalExtendEi:
   36|  1.72k|void** RepeatedPtrFieldBase::InternalExtend(int extend_amount) {
   37|  1.72k|  ABSL_DCHECK(extend_amount > 0);
  ------------------
  |  |   47|  1.72k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  1.72k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  3.44k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  1.72k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  3.44k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  3.44k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1.72k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  1.72k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1.72k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  1.72k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1.72k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  3.44k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  3.44k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   38|  1.72k|  constexpr size_t kPtrSize = sizeof(rep()->elements[0]);
   39|  1.72k|  constexpr size_t kMaxSize = std::numeric_limits<size_t>::max();
   40|  1.72k|  constexpr size_t kMaxCapacity = (kMaxSize - kRepHeaderSize) / kPtrSize;
   41|  1.72k|  const int old_capacity = Capacity();
   42|  1.72k|  Arena* arena = GetArena();
   43|  1.72k|  Rep* new_rep = nullptr;
   44|  1.72k|  {
   45|  1.72k|    int new_capacity = internal::CalculateReserveSize<void*, kRepHeaderSize>(
   46|  1.72k|        old_capacity, old_capacity + extend_amount);
   47|  1.72k|    ABSL_DCHECK_LE(new_capacity, kMaxCapacity)
  ------------------
  |  |   78|      0|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|  1.72k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  1.72k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 1.72k]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  1.72k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   48|      0|        << "New capacity is too large to fit into internal representation";
   49|  1.72k|    const size_t new_size = kRepHeaderSize + kPtrSize * new_capacity;
   50|  1.72k|    if (arena == nullptr) {
  ------------------
  |  Branch (50:9): [True: 1.57k, False: 147]
  ------------------
   51|  1.57k|      const internal::SizedPtr alloc = internal::AllocateAtLeast(new_size);
   52|  1.57k|      new_capacity = static_cast<int>((alloc.n - kRepHeaderSize) / kPtrSize);
   53|  1.57k|      new_rep = reinterpret_cast<Rep*>(alloc.p);
   54|  1.57k|    } else {
   55|    147|      auto* alloc = Arena::CreateArray<char>(arena, new_size);
   56|    147|      new_rep = reinterpret_cast<Rep*>(alloc);
   57|    147|    }
   58|  1.72k|    capacity_proxy_ = new_capacity - kSSOCapacity;
   59|  1.72k|  }
   60|       |
   61|  1.72k|  if (using_sso()) {
  ------------------
  |  Branch (61:7): [True: 1.12k, False: 598]
  ------------------
   62|  1.12k|    new_rep->allocated_size = tagged_rep_or_elem_ != nullptr ? 1 : 0;
  ------------------
  |  Branch (62:31): [True: 1.12k, False: 0]
  ------------------
   63|  1.12k|    new_rep->elements[0] = tagged_rep_or_elem_;
   64|  1.12k|  } else {
   65|    598|    Rep* old_rep = rep();
   66|    598|    memcpy(new_rep, old_rep,
   67|    598|           old_rep->allocated_size * kPtrSize + kRepHeaderSize);
   68|    598|    size_t old_size = old_capacity * kPtrSize + kRepHeaderSize;
   69|    598|    if (arena == nullptr) {
  ------------------
  |  Branch (69:9): [True: 538, False: 60]
  ------------------
   70|    538|      internal::SizedDelete(old_rep, old_size);
   71|    538|    } else {
   72|     60|      arena->ReturnArrayMemory(old_rep, old_size);
   73|     60|    }
   74|    598|  }
   75|       |
   76|  1.72k|  tagged_rep_or_elem_ =
   77|  1.72k|      reinterpret_cast<void*>(reinterpret_cast<uintptr_t>(new_rep) + 1);
   78|       |
   79|  1.72k|  return &new_rep->elements[current_size_];
   80|  1.72k|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase13DestroyProtosEv:
   89|    656|void RepeatedPtrFieldBase::DestroyProtos() {
   90|    656|  PROTOBUF_ALWAYS_INLINE_CALL Destroy<GenericTypeHandler<MessageLite>>();
  ------------------
  |  |  187|    656|#define PROTOBUF_ALWAYS_INLINE_CALL [[clang::always_inline]]
  ------------------
   91|       |
   92|       |  // TODO:  Eliminate this store when invoked from the destructor,
   93|       |  // since it is dead.
   94|    656|  tagged_rep_or_elem_ = nullptr;
   95|    656|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase9AddStringEv:
  101|  3.80k|void* RepeatedPtrFieldBase::AddString() {
  102|  3.80k|  return AddInternal([](Arena* arena) { return NewStringElement(arena); });
  103|  3.80k|}
_ZN6google8protobuf8internal16NewStringElementEPNS0_5ArenaE:
  231|  3.80k|void* NewStringElement(Arena* arena) {
  232|  3.80k|  return Arena::Create<std::string>(arena);
  233|  3.80k|}
repeated_ptr_field.cc:_ZZN6google8protobuf8internal20RepeatedPtrFieldBase9AddStringEvENK3$_0clEPNS0_5ArenaE:
  102|  3.80k|  return AddInternal([](Arena* arena) { return NewStringElement(arena); });

_ZN6google8protobuf8internal20RepeatedPtrFieldBase15PrepareForParseEv:
  296|      3|  bool PrepareForParse() { return allocated_size() == current_size_; }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase20AddAllocatedForParseEPv:
  301|      3|  void AddAllocatedForParse(void* value) {
  302|      3|    ABSL_DCHECK(PrepareForParse());
  ------------------
  |  |   47|      3|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      3|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      6|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      3|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      6|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      6|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 3, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      3|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 3]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      3|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 3, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      6|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      6|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  303|      3|    if (PROTOBUF_PREDICT_FALSE(SizeAtCapacity())) {
  ------------------
  |  |  365|      3|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 3]
  |  |  |  Branch (365:54): [Folded, False: 3]
  |  |  |  Branch (365:63): [True: 0, False: 3]
  |  |  ------------------
  ------------------
  304|      0|      *InternalExtend(1) = value;
  305|      0|      ++rep()->allocated_size;
  306|      3|    } else {
  307|      3|      if (using_sso()) {
  ------------------
  |  Branch (307:11): [True: 3, False: 0]
  ------------------
  308|      3|        tagged_rep_or_elem_ = value;
  309|      3|      } else {
  310|      0|        rep()->elements[current_size_] = value;
  311|      0|        ++rep()->allocated_size;
  312|      0|      }
  313|      3|    }
  314|      3|    ExchangeCurrentSize(current_size_ + 1);
  315|      3|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase14SizeAtCapacityEv:
  605|  2.59k|  inline bool SizeAtCapacity() const {
  606|       |    // Harden invariant size() <= allocated_size() <= Capacity().
  607|  2.59k|    ABSL_DCHECK_LE(size(), allocated_size());
  ------------------
  |  |   78|  2.59k|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|  2.59k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  2.59k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 2.59k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  2.59k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  608|  2.59k|    ABSL_DCHECK_LE(allocated_size(), Capacity());
  ------------------
  |  |   78|  2.59k|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|  2.59k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  2.59k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 2.59k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  2.59k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  609|       |    // This is equivalent to `current_size_ == Capacity()`.
  610|       |    // Assuming `Capacity()` function is inlined, compiler is likely to optimize
  611|       |    // away "+ kSSOCapacity" and reduce it to "current_size_ > capacity_proxy_"
  612|       |    // which is an instruction less than "current_size_ == capacity_proxy_ + 1".
  613|  2.59k|    return current_size_ >= Capacity();
  614|  2.59k|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_15DescriptorProtoEE4sizeEv:
 1340|    536|inline int RepeatedPtrField<Element>::size() const {
 1341|    536|  return RepeatedPtrFieldBase::size();
 1342|    536|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_15DescriptorProtoEE5ClearEv:
 1469|     10|inline void RepeatedPtrField<Element>::Clear() {
 1470|     10|  RepeatedPtrFieldBase::Clear<TypeHandler>();
 1471|     10|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS1_18GenericTypeHandlerINS0_15DescriptorProtoEEEEEvv:
  265|     10|  void Clear() {
  266|     10|    const int n = current_size_;
  267|     10|    ABSL_DCHECK_GE(n, 0);
  ------------------
  |  |   82|     10|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     10|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     10|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 10]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     10|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|     10|    if (n > 0) {
  ------------------
  |  Branch (268:9): [True: 0, False: 10]
  ------------------
  269|      0|      using H = CommonHandler<TypeHandler>;
  270|      0|      ClearNonEmpty<H>();
  271|      0|    }
  272|     10|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_15DescriptorProtoEE3GetEi:
 1346|    342|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|    342|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|    342|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINS0_15DescriptorProtoEEEEERKNT_4TypeEi:
  252|    342|  const Value<TypeHandler>& Get(int index) const {
  253|    342|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|    342|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|    342|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    342|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 342]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    342|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|    342|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|    342|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|    342|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    342|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 342]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    342|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|    342|    return *cast<TypeHandler>(element_at(index));
  256|    342|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_15DescriptorProtoEEEEEPKNT_4TypeEPKv:
  665|    342|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|    342|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|    342|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_19EnumDescriptorProtoEE4sizeEv:
 1340|    453|inline int RepeatedPtrField<Element>::size() const {
 1341|    453|  return RepeatedPtrFieldBase::size();
 1342|    453|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_19EnumDescriptorProtoEE5ClearEv:
 1469|     10|inline void RepeatedPtrField<Element>::Clear() {
 1470|     10|  RepeatedPtrFieldBase::Clear<TypeHandler>();
 1471|     10|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS1_18GenericTypeHandlerINS0_19EnumDescriptorProtoEEEEEvv:
  265|     10|  void Clear() {
  266|     10|    const int n = current_size_;
  267|     10|    ABSL_DCHECK_GE(n, 0);
  ------------------
  |  |   82|     10|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     10|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     10|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 10]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     10|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|     10|    if (n > 0) {
  ------------------
  |  Branch (268:9): [True: 0, False: 10]
  ------------------
  269|      0|      using H = CommonHandler<TypeHandler>;
  270|      0|      ClearNonEmpty<H>();
  271|      0|    }
  272|     10|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_19EnumDescriptorProtoEE3GetEi:
 1346|    150|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|    150|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|    150|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINS0_19EnumDescriptorProtoEEEEERKNT_4TypeEi:
  252|    150|  const Value<TypeHandler>& Get(int index) const {
  253|    150|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|    150|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|    150|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    150|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 150]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    150|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|    150|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|    150|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|    150|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    150|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 150]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    150|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|    150|    return *cast<TypeHandler>(element_at(index));
  256|    150|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_19EnumDescriptorProtoEEEEEPKNT_4TypeEPKv:
  665|    150|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|    150|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|    150|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_22ServiceDescriptorProtoEE4sizeEv:
 1340|     40|inline int RepeatedPtrField<Element>::size() const {
 1341|     40|  return RepeatedPtrFieldBase::size();
 1342|     40|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_22ServiceDescriptorProtoEE5ClearEv:
 1469|     10|inline void RepeatedPtrField<Element>::Clear() {
 1470|     10|  RepeatedPtrFieldBase::Clear<TypeHandler>();
 1471|     10|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS1_18GenericTypeHandlerINS0_22ServiceDescriptorProtoEEEEEvv:
  265|     10|  void Clear() {
  266|     10|    const int n = current_size_;
  267|     10|    ABSL_DCHECK_GE(n, 0);
  ------------------
  |  |   82|     10|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     10|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     10|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 10]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     10|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|     10|    if (n > 0) {
  ------------------
  |  Branch (268:9): [True: 0, False: 10]
  ------------------
  269|      0|      using H = CommonHandler<TypeHandler>;
  270|      0|      ClearNonEmpty<H>();
  271|      0|    }
  272|     10|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_20FieldDescriptorProtoEE4sizeEv:
 1340|  1.18k|inline int RepeatedPtrField<Element>::size() const {
 1341|  1.18k|  return RepeatedPtrFieldBase::size();
 1342|  1.18k|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_20FieldDescriptorProtoEE5ClearEv:
 1469|     10|inline void RepeatedPtrField<Element>::Clear() {
 1470|     10|  RepeatedPtrFieldBase::Clear<TypeHandler>();
 1471|     10|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS1_18GenericTypeHandlerINS0_20FieldDescriptorProtoEEEEEvv:
  265|     10|  void Clear() {
  266|     10|    const int n = current_size_;
  267|     10|    ABSL_DCHECK_GE(n, 0);
  ------------------
  |  |   82|     10|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     10|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     10|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 10]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     10|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|     10|    if (n > 0) {
  ------------------
  |  Branch (268:9): [True: 0, False: 10]
  ------------------
  269|      0|      using H = CommonHandler<TypeHandler>;
  270|      0|      ClearNonEmpty<H>();
  271|      0|    }
  272|     10|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_20FieldDescriptorProtoEE3GetEi:
 1346|  1.85k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|  1.85k|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|  1.85k|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINS0_20FieldDescriptorProtoEEEEERKNT_4TypeEi:
  252|  1.85k|  const Value<TypeHandler>& Get(int index) const {
  253|  1.85k|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|  1.85k|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|  1.85k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  1.85k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 1.85k]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  1.85k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|  1.85k|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|  1.85k|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|  1.85k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  1.85k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 1.85k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  1.85k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|  1.85k|    return *cast<TypeHandler>(element_at(index));
  256|  1.85k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_20FieldDescriptorProtoEEEEEPKNT_4TypeEPKv:
  665|  1.85k|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|  1.85k|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|  1.85k|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_30DescriptorProto_ExtensionRangeEE4sizeEv:
 1340|    356|inline int RepeatedPtrField<Element>::size() const {
 1341|    356|  return RepeatedPtrFieldBase::size();
 1342|    356|}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_30DescriptorProto_ExtensionRangeEE3GetEi:
 1346|     84|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|     84|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|     84|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINS0_30DescriptorProto_ExtensionRangeEEEEERKNT_4TypeEi:
  252|     84|  const Value<TypeHandler>& Get(int index) const {
  253|     84|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|     84|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     84|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     84|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 84]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     84|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|     84|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|     84|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|     84|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     84|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 84]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     84|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|     84|    return *cast<TypeHandler>(element_at(index));
  256|     84|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_30DescriptorProto_ExtensionRangeEEEEEPKNT_4TypeEPKv:
  665|     84|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|     84|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|     84|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_20OneofDescriptorProtoEE4sizeEv:
 1340|    391|inline int RepeatedPtrField<Element>::size() const {
 1341|    391|  return RepeatedPtrFieldBase::size();
 1342|    391|}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_20OneofDescriptorProtoEE3GetEi:
 1346|     14|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|     14|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|     14|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINS0_20OneofDescriptorProtoEEEEERKNT_4TypeEi:
  252|     14|  const Value<TypeHandler>& Get(int index) const {
  253|     14|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|     14|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     14|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     14|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 14]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     14|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|     14|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|     14|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|     14|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     14|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 14]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     14|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|     14|    return *cast<TypeHandler>(element_at(index));
  256|     14|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_20OneofDescriptorProtoEEEEEPKNT_4TypeEPKv:
  665|     14|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|     14|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|     14|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_29DescriptorProto_ReservedRangeEE4sizeEv:
 1340|    290|inline int RepeatedPtrField<Element>::size() const {
 1341|    290|  return RepeatedPtrFieldBase::size();
 1342|    290|}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_29DescriptorProto_ReservedRangeEE3GetEi:
 1346|     41|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|     41|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|     41|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINS0_29DescriptorProto_ReservedRangeEEEEERKNT_4TypeEi:
  252|     41|  const Value<TypeHandler>& Get(int index) const {
  253|     41|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|     41|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     41|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     41|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 41]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     41|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|     41|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|     41|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|     41|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     41|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 41]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     41|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|     41|    return *cast<TypeHandler>(element_at(index));
  256|     41|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_29DescriptorProto_ReservedRangeEEEEEPKNT_4TypeEPKv:
  665|     41|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|     41|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|     41|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_19UninterpretedOptionEE4sizeEv:
 1340|    153|inline int RepeatedPtrField<Element>::size() const {
 1341|    153|  return RepeatedPtrFieldBase::size();
 1342|    153|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_19UninterpretedOptionEE5ClearEv:
 1469|     19|inline void RepeatedPtrField<Element>::Clear() {
 1470|     19|  RepeatedPtrFieldBase::Clear<TypeHandler>();
 1471|     19|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS1_18GenericTypeHandlerINS0_19UninterpretedOptionEEEEEvv:
  265|     19|  void Clear() {
  266|     19|    const int n = current_size_;
  267|     19|    ABSL_DCHECK_GE(n, 0);
  ------------------
  |  |   82|     19|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     19|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     19|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 19]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     19|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|     19|    if (n > 0) {
  ------------------
  |  Branch (268:9): [True: 0, False: 19]
  ------------------
  269|      0|      using H = CommonHandler<TypeHandler>;
  270|      0|      ClearNonEmpty<H>();
  271|      0|    }
  272|     19|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_24EnumValueDescriptorProtoEE4sizeEv:
 1340|    531|inline int RepeatedPtrField<Element>::size() const {
 1341|    531|  return RepeatedPtrFieldBase::size();
 1342|    531|}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_24EnumValueDescriptorProtoEE3GetEi:
 1346|  1.44k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|  1.44k|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|  1.44k|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINS0_24EnumValueDescriptorProtoEEEEERKNT_4TypeEi:
  252|  1.44k|  const Value<TypeHandler>& Get(int index) const {
  253|  1.44k|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|  1.44k|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|  1.44k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  1.44k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 1.44k]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  1.44k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|  1.44k|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|  1.44k|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|  1.44k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  1.44k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 1.44k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  1.44k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|  1.44k|    return *cast<TypeHandler>(element_at(index));
  256|  1.44k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_24EnumValueDescriptorProtoEEEEEPKNT_4TypeEPKv:
  665|  1.44k|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|  1.44k|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|  1.44k|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_37EnumDescriptorProto_EnumReservedRangeEE4sizeEv:
 1340|    123|inline int RepeatedPtrField<Element>::size() const {
 1341|    123|  return RepeatedPtrFieldBase::size();
 1342|    123|}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_37EnumDescriptorProto_EnumReservedRangeEE3GetEi:
 1346|      2|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|      2|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|      2|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINS0_37EnumDescriptorProto_EnumReservedRangeEEEEERKNT_4TypeEi:
  252|      2|  const Value<TypeHandler>& Get(int index) const {
  253|      2|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|      2|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|      2|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      2|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 2]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      2|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|      2|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|      2|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|      2|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      2|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 2]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      2|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|      2|    return *cast<TypeHandler>(element_at(index));
  256|      2|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_37EnumDescriptorProto_EnumReservedRangeEEEEEPKNT_4TypeEPKv:
  665|      2|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|      2|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|      2|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_27FieldOptions_EditionDefaultEE4sizeEv:
 1340|     51|inline int RepeatedPtrField<Element>::size() const {
 1341|     51|  return RepeatedPtrFieldBase::size();
 1342|     51|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_27FieldOptions_EditionDefaultEE5ClearEv:
 1469|     17|inline void RepeatedPtrField<Element>::Clear() {
 1470|     17|  RepeatedPtrFieldBase::Clear<TypeHandler>();
 1471|     17|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS1_18GenericTypeHandlerINS0_27FieldOptions_EditionDefaultEEEEEvv:
  265|     17|  void Clear() {
  266|     17|    const int n = current_size_;
  267|     17|    ABSL_DCHECK_GE(n, 0);
  ------------------
  |  |   82|     17|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     17|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     17|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 17]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     17|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|     17|    if (n > 0) {
  ------------------
  |  Branch (268:9): [True: 0, False: 17]
  ------------------
  269|      0|      using H = CommonHandler<TypeHandler>;
  270|      0|      ClearNonEmpty<H>();
  271|      0|    }
  272|     17|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_27FieldOptions_EditionDefaultEE3GetEi:
 1346|     18|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|     18|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|     18|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINS0_27FieldOptions_EditionDefaultEEEEERKNT_4TypeEi:
  252|     18|  const Value<TypeHandler>& Get(int index) const {
  253|     18|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|     18|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     18|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     18|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 18]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     18|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|     18|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|     18|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|     18|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     18|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 18]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     18|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|     18|    return *cast<TypeHandler>(element_at(index));
  256|     18|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_27FieldOptions_EditionDefaultEEEEEPKNT_4TypeEPKv:
  665|     18|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|     18|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|     18|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEE4sizeEv:
 1340|      9|inline int RepeatedPtrField<Element>::size() const {
 1341|      9|  return RepeatedPtrFieldBase::size();
 1342|      9|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEE5ClearEv:
 1469|      1|inline void RepeatedPtrField<Element>::Clear() {
 1470|      1|  RepeatedPtrFieldBase::Clear<TypeHandler>();
 1471|      1|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS1_18GenericTypeHandlerINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEEEEvv:
  265|      1|  void Clear() {
  266|      1|    const int n = current_size_;
  267|      1|    ABSL_DCHECK_GE(n, 0);
  ------------------
  |  |   82|      1|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|      1|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 1]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      1|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|      1|    if (n > 0) {
  ------------------
  |  Branch (268:9): [True: 0, False: 1]
  ------------------
  269|      0|      using H = CommonHandler<TypeHandler>;
  270|      0|      ClearNonEmpty<H>();
  271|      0|    }
  272|      1|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEE3GetEi:
 1346|      4|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|      4|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|      4|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEEEERKNT_4TypeEi:
  252|      4|  const Value<TypeHandler>& Get(int index) const {
  253|      4|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|      4|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|      4|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      4|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 4]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      4|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|      4|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|      4|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|      4|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      4|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 4]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      4|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|      4|    return *cast<TypeHandler>(element_at(index));
  256|      4|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEEEEPKNT_4TypeEPKv:
  665|      4|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|      4|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|      4|  }
_ZN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE20AddAllocatedForParseEPS8_:
 1248|      3|  void AddAllocatedForParse(Element* p) {
 1249|      3|    return RepeatedPtrFieldBase::AddAllocatedForParse(p);
 1250|      3|  }
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal20RepeatedPtrFieldBase11AddInternalIZNS1_8TcParser10AddMessageEPKNS1_16TcParseTableBaseERS2_E3$_0EEPvT_:
  779|  2.43k|void* RepeatedPtrFieldBase::AddInternal(Factory factory) {
  780|  2.43k|  Arena* const arena = GetArena();
  781|  2.43k|  if (tagged_rep_or_elem_ == nullptr) {
  ------------------
  |  Branch (781:7): [True: 791, False: 1.64k]
  ------------------
  782|    791|    ExchangeCurrentSize(1);
  783|    791|    tagged_rep_or_elem_ = factory(arena);
  784|    791|    return tagged_rep_or_elem_;
  785|    791|  }
  786|  1.64k|  absl::PrefetchToLocalCache(tagged_rep_or_elem_);
  787|  1.64k|  if (using_sso()) {
  ------------------
  |  Branch (787:7): [True: 334, False: 1.30k]
  ------------------
  788|    334|    if (current_size_ == 0) {
  ------------------
  |  Branch (788:9): [True: 0, False: 334]
  ------------------
  789|      0|      ExchangeCurrentSize(1);
  790|      0|      return tagged_rep_or_elem_;
  791|      0|    }
  792|    334|    void*& result = *InternalExtend(1);
  793|    334|    result = factory(arena);
  794|    334|    Rep* r = rep();
  795|    334|    r->allocated_size = 2;
  796|    334|    ExchangeCurrentSize(2);
  797|    334|    return result;
  798|    334|  }
  799|  1.30k|  Rep* r = rep();
  800|  1.30k|  if (PROTOBUF_PREDICT_FALSE(SizeAtCapacity())) {
  ------------------
  |  |  365|  1.30k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 256, False: 1.05k]
  |  |  |  Branch (365:54): [Folded, False: 1.30k]
  |  |  |  Branch (365:63): [True: 256, False: 1.05k]
  |  |  ------------------
  ------------------
  801|    256|    InternalExtend(1);
  802|    256|    r = rep();
  803|  1.05k|  } else {
  804|  1.05k|    if (current_size_ != r->allocated_size) {
  ------------------
  |  Branch (804:9): [True: 0, False: 1.05k]
  ------------------
  805|      0|      return r->elements[ExchangeCurrentSize(current_size_ + 1)];
  806|      0|    }
  807|  1.05k|  }
  808|  1.30k|  ++r->allocated_size;
  809|  1.30k|  void*& result = r->elements[ExchangeCurrentSize(current_size_ + 1)];
  810|  1.30k|  result = factory(arena);
  811|  1.30k|  return result;
  812|  1.30k|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase7DestroyINS1_18GenericTypeHandlerINS0_11MessageLiteEEEEEvv:
  220|    656|  void Destroy() {
  221|    656|    ABSL_DCHECK(NeedsDestroy());
  ------------------
  |  |   47|    656|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    656|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  1.31k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    656|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  1.31k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  1.31k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 656, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    656|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 656]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    656|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 656, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  1.31k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  1.31k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  222|       |
  223|       |    // TODO: arena check is redundant once all `RepeatedPtrField`s
  224|       |    // with non-null arena are owned by the arena.
  225|    656|    if (PROTOBUF_PREDICT_FALSE(arena_ != nullptr)) return;
  ------------------
  |  |  365|    656|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 656]
  |  |  |  Branch (365:54): [Folded, False: 656]
  |  |  |  Branch (365:63): [True: 0, False: 656]
  |  |  ------------------
  ------------------
  226|       |
  227|    656|    using H = CommonHandler<TypeHandler>;
  228|    656|    int n = allocated_size();
  229|    656|    void** elems = elements();
  230|  2.52k|    for (int i = 0; i < n; i++) {
  ------------------
  |  Branch (230:21): [True: 1.86k, False: 656]
  ------------------
  231|  1.86k|      Delete<H>(elems[i], nullptr);
  232|  1.86k|    }
  233|    656|    if (!using_sso()) {
  ------------------
  |  Branch (233:9): [True: 238, False: 418]
  ------------------
  234|    238|      internal::SizedDelete(rep(),
  235|    238|                            Capacity() * sizeof(elems[0]) + kRepHeaderSize);
  236|    238|    }
  237|    656|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase6DeleteINS1_18GenericTypeHandlerINS0_11MessageLiteEEEEEvPvPNS0_5ArenaE:
  669|  1.86k|  static inline void Delete(void* obj, Arena* arena) {
  670|  1.86k|    TypeHandler::Delete(cast<TypeHandler>(obj), arena);
  671|  1.86k|  }
repeated_ptr_field.cc:_ZN6google8protobuf8internal20RepeatedPtrFieldBase11AddInternalIZNS2_9AddStringEvE3$_0EEPvT_:
  779|  3.80k|void* RepeatedPtrFieldBase::AddInternal(Factory factory) {
  780|  3.80k|  Arena* const arena = GetArena();
  781|  3.80k|  if (tagged_rep_or_elem_ == nullptr) {
  ------------------
  |  Branch (781:7): [True: 1.73k, False: 2.07k]
  ------------------
  782|  1.73k|    ExchangeCurrentSize(1);
  783|  1.73k|    tagged_rep_or_elem_ = factory(arena);
  784|  1.73k|    return tagged_rep_or_elem_;
  785|  1.73k|  }
  786|  2.07k|  absl::PrefetchToLocalCache(tagged_rep_or_elem_);
  787|  2.07k|  if (using_sso()) {
  ------------------
  |  Branch (787:7): [True: 790, False: 1.28k]
  ------------------
  788|    790|    if (current_size_ == 0) {
  ------------------
  |  Branch (788:9): [True: 0, False: 790]
  ------------------
  789|      0|      ExchangeCurrentSize(1);
  790|      0|      return tagged_rep_or_elem_;
  791|      0|    }
  792|    790|    void*& result = *InternalExtend(1);
  793|    790|    result = factory(arena);
  794|    790|    Rep* r = rep();
  795|    790|    r->allocated_size = 2;
  796|    790|    ExchangeCurrentSize(2);
  797|    790|    return result;
  798|    790|  }
  799|  1.28k|  Rep* r = rep();
  800|  1.28k|  if (PROTOBUF_PREDICT_FALSE(SizeAtCapacity())) {
  ------------------
  |  |  365|  1.28k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 342, False: 938]
  |  |  |  Branch (365:54): [Folded, False: 1.28k]
  |  |  |  Branch (365:63): [True: 342, False: 938]
  |  |  ------------------
  ------------------
  801|    342|    InternalExtend(1);
  802|    342|    r = rep();
  803|    938|  } else {
  804|    938|    if (current_size_ != r->allocated_size) {
  ------------------
  |  Branch (804:9): [True: 0, False: 938]
  ------------------
  805|      0|      return r->elements[ExchangeCurrentSize(current_size_ + 1)];
  806|      0|    }
  807|    938|  }
  808|  1.28k|  ++r->allocated_size;
  809|  1.28k|  void*& result = r->elements[ExchangeCurrentSize(current_size_ + 1)];
  810|  1.28k|  result = factory(arena);
  811|  1.28k|  return result;
  812|  1.28k|}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_22ServiceDescriptorProtoEE5beginEv:
 1836|     10|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1837|     10|  return iterator(raw_data());
 1838|     10|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorINS0_22ServiceDescriptorProtoEEC2EPKPv:
 1617|     20|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_22ServiceDescriptorProtoEEC2IS3_TnPNSt3__19enable_ifIXsr3std14is_convertibleIPT_PS4_EE5valueEvE4typeELPv0EEERKNS2_IS9_EE:
 1625|     20|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_22ServiceDescriptorProtoEE3endEv:
 1851|     10|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1852|     10|  return iterator(raw_data() + size());
 1853|     10|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKNS0_22ServiceDescriptorProtoEEES7_:
 1647|     10|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|     10|    return x.it_ != y.it_;
 1649|     10|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_15DescriptorProtoEE5beginEv:
 1836|    117|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1837|    117|  return iterator(raw_data());
 1838|    117|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorINS0_15DescriptorProtoEEC2EPKPv:
 1617|    234|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_15DescriptorProtoEEC2IS3_TnPNSt3__19enable_ifIXsr3std14is_convertibleIPT_PS4_EE5valueEvE4typeELPv0EEERKNS2_IS9_EE:
 1625|    234|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_15DescriptorProtoEE3endEv:
 1851|    117|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1852|    117|  return iterator(raw_data() + size());
 1853|    117|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKNS0_15DescriptorProtoEEES7_:
 1647|    224|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|    224|    return x.it_ != y.it_;
 1649|    224|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIKNS0_15DescriptorProtoEEdeEv:
 1628|    107|  reference operator*() const { return *reinterpret_cast<Element*>(*it_); }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_30DescriptorProto_ExtensionRangeEE5beginEv:
 1836|     47|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1837|     47|  return iterator(raw_data());
 1838|     47|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorINS0_30DescriptorProto_ExtensionRangeEEC2EPKPv:
 1617|     94|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_30DescriptorProto_ExtensionRangeEEC2IS3_TnPNSt3__19enable_ifIXsr3std14is_convertibleIPT_PS4_EE5valueEvE4typeELPv0EEERKNS2_IS9_EE:
 1625|     94|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_30DescriptorProto_ExtensionRangeEE3endEv:
 1851|     47|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1852|     47|  return iterator(raw_data() + size());
 1853|     47|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKNS0_30DescriptorProto_ExtensionRangeEEES7_:
 1647|     61|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|     61|    return x.it_ != y.it_;
 1649|     61|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIKNS0_30DescriptorProto_ExtensionRangeEEdeEv:
 1628|     14|  reference operator*() const { return *reinterpret_cast<Element*>(*it_); }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_30DescriptorProto_ExtensionRangeEEppEv:
 1632|     14|  iterator& operator++() {
 1633|     14|    ++it_;
 1634|     14|    return *this;
 1635|     14|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_20OneofDescriptorProtoEE5beginEv:
 1836|     47|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1837|     47|  return iterator(raw_data());
 1838|     47|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorINS0_20OneofDescriptorProtoEEC2EPKPv:
 1617|     94|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_20OneofDescriptorProtoEEC2IS3_TnPNSt3__19enable_ifIXsr3std14is_convertibleIPT_PS4_EE5valueEvE4typeELPv0EEERKNS2_IS9_EE:
 1625|     94|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_20OneofDescriptorProtoEE3endEv:
 1851|     47|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1852|     47|  return iterator(raw_data() + size());
 1853|     47|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKNS0_20OneofDescriptorProtoEEES7_:
 1647|     49|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|     49|    return x.it_ != y.it_;
 1649|     49|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIKNS0_20OneofDescriptorProtoEEdeEv:
 1628|      2|  reference operator*() const { return *reinterpret_cast<Element*>(*it_); }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_20OneofDescriptorProtoEEppEv:
 1632|      2|  iterator& operator++() {
 1633|      2|    ++it_;
 1634|      2|    return *this;
 1635|      2|  }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_15DescriptorProtoEEppEv:
 1632|    107|  iterator& operator++() {
 1633|    107|    ++it_;
 1634|    107|    return *this;
 1635|    107|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_19EnumDescriptorProtoEE5beginEv:
 1836|     57|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1837|     57|  return iterator(raw_data());
 1838|     57|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorINS0_19EnumDescriptorProtoEEC2EPKPv:
 1617|    114|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_19EnumDescriptorProtoEEC2IS3_TnPNSt3__19enable_ifIXsr3std14is_convertibleIPT_PS4_EE5valueEvE4typeELPv0EEERKNS2_IS9_EE:
 1625|    114|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_19EnumDescriptorProtoEE3endEv:
 1851|     57|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1852|     57|  return iterator(raw_data() + size());
 1853|     57|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKNS0_19EnumDescriptorProtoEEES7_:
 1647|     94|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|     94|    return x.it_ != y.it_;
 1649|     94|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIKNS0_19EnumDescriptorProtoEEdeEv:
 1628|     37|  reference operator*() const { return *reinterpret_cast<Element*>(*it_); }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_24EnumValueDescriptorProtoEE5beginEv:
 1836|     24|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1837|     24|  return iterator(raw_data());
 1838|     24|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorINS0_24EnumValueDescriptorProtoEEC2EPKPv:
 1617|     48|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_24EnumValueDescriptorProtoEEC2IS3_TnPNSt3__19enable_ifIXsr3std14is_convertibleIPT_PS4_EE5valueEvE4typeELPv0EEERKNS2_IS9_EE:
 1625|     48|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_24EnumValueDescriptorProtoEE3endEv:
 1851|     24|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1852|     24|  return iterator(raw_data() + size());
 1853|     24|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKNS0_24EnumValueDescriptorProtoEEES7_:
 1647|    214|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|    214|    return x.it_ != y.it_;
 1649|    214|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIKNS0_24EnumValueDescriptorProtoEEdeEv:
 1628|    190|  reference operator*() const { return *reinterpret_cast<Element*>(*it_); }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_24EnumValueDescriptorProtoEEppEv:
 1632|    190|  iterator& operator++() {
 1633|    190|    ++it_;
 1634|    190|    return *this;
 1635|    190|  }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_19EnumDescriptorProtoEEppEv:
 1632|     37|  iterator& operator++() {
 1633|     37|    ++it_;
 1634|     37|    return *this;
 1635|     37|  }
_ZNK6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE5beginEv:
 1836|     71|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1837|     71|  return iterator(raw_data());
 1838|     71|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEC2IS9_TnPNS3_9enable_ifIXsr3std14is_convertibleIPT_PSA_EE5valueEvE4typeELPv0EEERKNS2_ISE_EE:
 1625|    142|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3endEv:
 1851|     71|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1852|     71|  return iterator(raw_data() + size());
 1853|     71|}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEE5beginEv:
 1836|     12|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1837|     12|  return iterator(raw_data());
 1838|     12|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEC2EPKPv:
 1617|     20|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEC2IS3_TnPNSt3__19enable_ifIXsr3std14is_convertibleIPT_PS4_EE5valueEvE4typeELPv0EEERKNS2_IS9_EE:
 1625|     20|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEE3endEv:
 1851|      8|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1852|      8|  return iterator(raw_data() + size());
 1853|      8|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKNS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEES7_:
 1647|     20|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|     20|    return x.it_ != y.it_;
 1649|     20|  }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEppEv:
 1632|     20|  iterator& operator++() {
 1633|     20|    ++it_;
 1634|     20|    return *this;
 1635|     20|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIKNS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEdeEv:
 1628|     34|  reference operator*() const { return *reinterpret_cast<Element*>(*it_); }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_20FieldDescriptorProtoEE5beginEv:
 1836|    164|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1837|    164|  return iterator(raw_data());
 1838|    164|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorINS0_20FieldDescriptorProtoEEC2EPKPv:
 1617|    328|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_20FieldDescriptorProtoEEC2IS3_TnPNSt3__19enable_ifIXsr3std14is_convertibleIPT_PS4_EE5valueEvE4typeELPv0EEERKNS2_IS9_EE:
 1625|    328|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_20FieldDescriptorProtoEE3endEv:
 1851|    164|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1852|    164|  return iterator(raw_data() + size());
 1853|    164|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKNS0_20FieldDescriptorProtoEEES7_:
 1647|    400|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|    400|    return x.it_ != y.it_;
 1649|    400|  }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_20FieldDescriptorProtoEEppEv:
 1632|    236|  iterator& operator++() {
 1633|    236|    ++it_;
 1634|    236|    return *this;
 1635|    236|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIKNS0_20FieldDescriptorProtoEEdeEv:
 1628|    236|  reference operator*() const { return *reinterpret_cast<Element*>(*it_); }
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEESD_:
 1647|     73|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|     73|    return x.it_ != y.it_;
 1649|     73|  }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEppEv:
 1632|      2|  iterator& operator++() {
 1633|      2|    ++it_;
 1634|      2|    return *this;
 1635|      2|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEdeEv:
 1628|      2|  reference operator*() const { return *reinterpret_cast<Element*>(*it_); }
_ZN6google8protobuf16RepeatedPtrFieldINS0_15DescriptorProtoEE19StaticValidityCheckEv:
  938|     66|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|     66|    static_assert(
  940|     66|        absl::disjunction<
  941|     66|            internal::is_supported_string_type<Element>,
  942|     66|            internal::is_supported_message_type<Element>>::value,
  943|     66|        "We only support string and Message types in RepeatedPtrField.");
  944|     66|  }
_ZN6google8protobuf16RepeatedPtrFieldINS0_19EnumDescriptorProtoEE19StaticValidityCheckEv:
  938|     66|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|     66|    static_assert(
  940|     66|        absl::disjunction<
  941|     66|            internal::is_supported_string_type<Element>,
  942|     66|            internal::is_supported_message_type<Element>>::value,
  943|     66|        "We only support string and Message types in RepeatedPtrField.");
  944|     66|  }
_ZN6google8protobuf16RepeatedPtrFieldINS0_22ServiceDescriptorProtoEE19StaticValidityCheckEv:
  938|      6|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|      6|    static_assert(
  940|      6|        absl::disjunction<
  941|      6|            internal::is_supported_string_type<Element>,
  942|      6|            internal::is_supported_message_type<Element>>::value,
  943|      6|        "We only support string and Message types in RepeatedPtrField.");
  944|      6|  }
_ZN6google8protobuf16RepeatedPtrFieldINS0_20FieldDescriptorProtoEE19StaticValidityCheckEv:
  938|    126|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|    126|    static_assert(
  940|    126|        absl::disjunction<
  941|    126|            internal::is_supported_string_type<Element>,
  942|    126|            internal::is_supported_message_type<Element>>::value,
  943|    126|        "We only support string and Message types in RepeatedPtrField.");
  944|    126|  }
_ZN6google8protobuf16RepeatedPtrFieldINS0_15DescriptorProtoEEC2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
  970|     10|      : RepeatedPtrField(arena) {}
_ZN6google8protobuf16RepeatedPtrFieldINS0_15DescriptorProtoEEC2EPNS0_5ArenaE:
 1263|     10|    : RepeatedPtrFieldBase(arena) {
 1264|       |  // We can't have StaticValidityCheck here because that requires Element to be
 1265|       |  // a complete type, and in split repeated fields cases, we call
 1266|       |  // CreateMessage<RepeatedPtrField<T>> for incomplete Ts.
 1267|     10|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_19EnumDescriptorProtoEEC2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
  970|     10|      : RepeatedPtrField(arena) {}
_ZN6google8protobuf16RepeatedPtrFieldINS0_19EnumDescriptorProtoEEC2EPNS0_5ArenaE:
 1263|     10|    : RepeatedPtrFieldBase(arena) {
 1264|       |  // We can't have StaticValidityCheck here because that requires Element to be
 1265|       |  // a complete type, and in split repeated fields cases, we call
 1266|       |  // CreateMessage<RepeatedPtrField<T>> for incomplete Ts.
 1267|     10|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_22ServiceDescriptorProtoEEC2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
  970|     10|      : RepeatedPtrField(arena) {}
_ZN6google8protobuf16RepeatedPtrFieldINS0_22ServiceDescriptorProtoEEC2EPNS0_5ArenaE:
 1263|     10|    : RepeatedPtrFieldBase(arena) {
 1264|       |  // We can't have StaticValidityCheck here because that requires Element to be
 1265|       |  // a complete type, and in split repeated fields cases, we call
 1266|       |  // CreateMessage<RepeatedPtrField<T>> for incomplete Ts.
 1267|     10|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_20FieldDescriptorProtoEEC2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
  970|     10|      : RepeatedPtrField(arena) {}
_ZN6google8protobuf16RepeatedPtrFieldINS0_20FieldDescriptorProtoEEC2EPNS0_5ArenaE:
 1263|     10|    : RepeatedPtrFieldBase(arena) {
 1264|       |  // We can't have StaticValidityCheck here because that requires Element to be
 1265|       |  // a complete type, and in split repeated fields cases, we call
 1266|       |  // CreateMessage<RepeatedPtrField<T>> for incomplete Ts.
 1267|     10|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_20FieldDescriptorProtoEED2Ev:
 1285|    126|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|    126|  StaticValidityCheck();
 1287|    126|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 65, False: 61]
  ------------------
 1288|       |#ifdef __cpp_if_constexpr
 1289|       |  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|     61|  if (std::is_base_of<MessageLite, Element>::value) {
  ------------------
  |  Branch (1291:7): [True: 61, Folded]
  ------------------
 1292|     61|#endif
 1293|     61|    DestroyProtos();
 1294|     61|  } else {
 1295|      0|    Destroy<TypeHandler>();
 1296|      0|  }
 1297|     61|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_22ServiceDescriptorProtoEED2Ev:
 1285|      6|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|      6|  StaticValidityCheck();
 1287|      6|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 6, False: 0]
  ------------------
 1288|       |#ifdef __cpp_if_constexpr
 1289|       |  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|      0|  if (std::is_base_of<MessageLite, Element>::value) {
  ------------------
  |  Branch (1291:7): [True: 0, Folded]
  ------------------
 1292|      0|#endif
 1293|      0|    DestroyProtos();
 1294|      0|  } else {
 1295|      0|    Destroy<TypeHandler>();
 1296|      0|  }
 1297|      0|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_19EnumDescriptorProtoEED2Ev:
 1285|     66|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|     66|  StaticValidityCheck();
 1287|     66|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 55, False: 11]
  ------------------
 1288|       |#ifdef __cpp_if_constexpr
 1289|       |  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|     11|  if (std::is_base_of<MessageLite, Element>::value) {
  ------------------
  |  Branch (1291:7): [True: 11, Folded]
  ------------------
 1292|     11|#endif
 1293|     11|    DestroyProtos();
 1294|     11|  } else {
 1295|      0|    Destroy<TypeHandler>();
 1296|      0|  }
 1297|     11|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_15DescriptorProtoEED2Ev:
 1285|     66|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|     66|  StaticValidityCheck();
 1287|     66|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 52, False: 14]
  ------------------
 1288|       |#ifdef __cpp_if_constexpr
 1289|       |  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|     14|  if (std::is_base_of<MessageLite, Element>::value) {
  ------------------
  |  Branch (1291:7): [True: 14, Folded]
  ------------------
 1292|     14|#endif
 1293|     14|    DestroyProtos();
 1294|     14|  } else {
 1295|      0|    Destroy<TypeHandler>();
 1296|      0|  }
 1297|     14|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_30DescriptorProto_ExtensionRangeEE19StaticValidityCheckEv:
  938|     60|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|     60|    static_assert(
  940|     60|        absl::disjunction<
  941|     60|            internal::is_supported_string_type<Element>,
  942|     60|            internal::is_supported_message_type<Element>>::value,
  943|     60|        "We only support string and Message types in RepeatedPtrField.");
  944|     60|  }
_ZN6google8protobuf16RepeatedPtrFieldINS0_20OneofDescriptorProtoEE19StaticValidityCheckEv:
  938|     60|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|     60|    static_assert(
  940|     60|        absl::disjunction<
  941|     60|            internal::is_supported_string_type<Element>,
  942|     60|            internal::is_supported_message_type<Element>>::value,
  943|     60|        "We only support string and Message types in RepeatedPtrField.");
  944|     60|  }
_ZN6google8protobuf16RepeatedPtrFieldINS0_29DescriptorProto_ReservedRangeEE19StaticValidityCheckEv:
  938|     60|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|     60|    static_assert(
  940|     60|        absl::disjunction<
  941|     60|            internal::is_supported_string_type<Element>,
  942|     60|            internal::is_supported_message_type<Element>>::value,
  943|     60|        "We only support string and Message types in RepeatedPtrField.");
  944|     60|  }
_ZN6google8protobuf16RepeatedPtrFieldINS0_29DescriptorProto_ReservedRangeEED2Ev:
 1285|     60|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|     60|  StaticValidityCheck();
 1287|     60|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 53, False: 7]
  ------------------
 1288|       |#ifdef __cpp_if_constexpr
 1289|       |  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|      7|  if (std::is_base_of<MessageLite, Element>::value) {
  ------------------
  |  Branch (1291:7): [True: 7, Folded]
  ------------------
 1292|      7|#endif
 1293|      7|    DestroyProtos();
 1294|      7|  } else {
 1295|      0|    Destroy<TypeHandler>();
 1296|      0|  }
 1297|      7|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_20OneofDescriptorProtoEED2Ev:
 1285|     60|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|     60|  StaticValidityCheck();
 1287|     60|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 56, False: 4]
  ------------------
 1288|       |#ifdef __cpp_if_constexpr
 1289|       |  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|      4|  if (std::is_base_of<MessageLite, Element>::value) {
  ------------------
  |  Branch (1291:7): [True: 4, Folded]
  ------------------
 1292|      4|#endif
 1293|      4|    DestroyProtos();
 1294|      4|  } else {
 1295|      0|    Destroy<TypeHandler>();
 1296|      0|  }
 1297|      4|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_30DescriptorProto_ExtensionRangeEED2Ev:
 1285|     60|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|     60|  StaticValidityCheck();
 1287|     60|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 48, False: 12]
  ------------------
 1288|       |#ifdef __cpp_if_constexpr
 1289|       |  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|     12|  if (std::is_base_of<MessageLite, Element>::value) {
  ------------------
  |  Branch (1291:7): [True: 12, Folded]
  ------------------
 1292|     12|#endif
 1293|     12|    DestroyProtos();
 1294|     12|  } else {
 1295|      0|    Destroy<TypeHandler>();
 1296|      0|  }
 1297|     12|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_19UninterpretedOptionEE19StaticValidityCheckEv:
  938|     20|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|     20|    static_assert(
  940|     20|        absl::disjunction<
  941|     20|            internal::is_supported_string_type<Element>,
  942|     20|            internal::is_supported_message_type<Element>>::value,
  943|     20|        "We only support string and Message types in RepeatedPtrField.");
  944|     20|  }
_ZN6google8protobuf16RepeatedPtrFieldINS0_19UninterpretedOptionEEC2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
  970|     19|      : RepeatedPtrField(arena) {}
_ZN6google8protobuf16RepeatedPtrFieldINS0_19UninterpretedOptionEEC2EPNS0_5ArenaE:
 1263|     19|    : RepeatedPtrFieldBase(arena) {
 1264|       |  // We can't have StaticValidityCheck here because that requires Element to be
 1265|       |  // a complete type, and in split repeated fields cases, we call
 1266|       |  // CreateMessage<RepeatedPtrField<T>> for incomplete Ts.
 1267|     19|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_19UninterpretedOptionEED2Ev:
 1285|     20|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|     20|  StaticValidityCheck();
 1287|     20|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 20, False: 0]
  ------------------
 1288|       |#ifdef __cpp_if_constexpr
 1289|       |  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|      0|  if (std::is_base_of<MessageLite, Element>::value) {
  ------------------
  |  Branch (1291:7): [True: 0, Folded]
  ------------------
 1292|      0|#endif
 1293|      0|    DestroyProtos();
 1294|      0|  } else {
 1295|      0|    Destroy<TypeHandler>();
 1296|      0|  }
 1297|      0|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_24EnumValueDescriptorProtoEE19StaticValidityCheckEv:
  938|     30|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|     30|    static_assert(
  940|     30|        absl::disjunction<
  941|     30|            internal::is_supported_string_type<Element>,
  942|     30|            internal::is_supported_message_type<Element>>::value,
  943|     30|        "We only support string and Message types in RepeatedPtrField.");
  944|     30|  }
_ZN6google8protobuf16RepeatedPtrFieldINS0_37EnumDescriptorProto_EnumReservedRangeEE19StaticValidityCheckEv:
  938|     30|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|     30|    static_assert(
  940|     30|        absl::disjunction<
  941|     30|            internal::is_supported_string_type<Element>,
  942|     30|            internal::is_supported_message_type<Element>>::value,
  943|     30|        "We only support string and Message types in RepeatedPtrField.");
  944|     30|  }
_ZN6google8protobuf16RepeatedPtrFieldINS0_37EnumDescriptorProto_EnumReservedRangeEED2Ev:
 1285|     30|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|     30|  StaticValidityCheck();
 1287|     30|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 29, False: 1]
  ------------------
 1288|       |#ifdef __cpp_if_constexpr
 1289|       |  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|      1|  if (std::is_base_of<MessageLite, Element>::value) {
  ------------------
  |  Branch (1291:7): [True: 1, Folded]
  ------------------
 1292|      1|#endif
 1293|      1|    DestroyProtos();
 1294|      1|  } else {
 1295|      0|    Destroy<TypeHandler>();
 1296|      0|  }
 1297|      1|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_24EnumValueDescriptorProtoEED2Ev:
 1285|     30|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|     30|  StaticValidityCheck();
 1287|     30|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 0, False: 30]
  ------------------
 1288|       |#ifdef __cpp_if_constexpr
 1289|       |  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|     30|  if (std::is_base_of<MessageLite, Element>::value) {
  ------------------
  |  Branch (1291:7): [True: 30, Folded]
  ------------------
 1292|     30|#endif
 1293|     30|    DestroyProtos();
 1294|     30|  } else {
 1295|      0|    Destroy<TypeHandler>();
 1296|      0|  }
 1297|     30|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_27FieldOptions_EditionDefaultEE19StaticValidityCheckEv:
  938|     17|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|     17|    static_assert(
  940|     17|        absl::disjunction<
  941|     17|            internal::is_supported_string_type<Element>,
  942|     17|            internal::is_supported_message_type<Element>>::value,
  943|     17|        "We only support string and Message types in RepeatedPtrField.");
  944|     17|  }
_ZN6google8protobuf16RepeatedPtrFieldINS0_27FieldOptions_EditionDefaultEEC2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
  970|     17|      : RepeatedPtrField(arena) {}
_ZN6google8protobuf16RepeatedPtrFieldINS0_27FieldOptions_EditionDefaultEEC2EPNS0_5ArenaE:
 1263|     17|    : RepeatedPtrFieldBase(arena) {
 1264|       |  // We can't have StaticValidityCheck here because that requires Element to be
 1265|       |  // a complete type, and in split repeated fields cases, we call
 1266|       |  // CreateMessage<RepeatedPtrField<T>> for incomplete Ts.
 1267|     17|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_27FieldOptions_EditionDefaultEED2Ev:
 1285|     17|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|     17|  StaticValidityCheck();
 1287|     17|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 8, False: 9]
  ------------------
 1288|       |#ifdef __cpp_if_constexpr
 1289|       |  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|      9|  if (std::is_base_of<MessageLite, Element>::value) {
  ------------------
  |  Branch (1291:7): [True: 9, Folded]
  ------------------
 1292|      9|#endif
 1293|      9|    DestroyProtos();
 1294|      9|  } else {
 1295|      0|    Destroy<TypeHandler>();
 1296|      0|  }
 1297|      9|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEC2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
  970|      1|      : RepeatedPtrField(arena) {}
_ZN6google8protobuf16RepeatedPtrFieldINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEC2EPNS0_5ArenaE:
 1263|      1|    : RepeatedPtrFieldBase(arena) {
 1264|       |  // We can't have StaticValidityCheck here because that requires Element to be
 1265|       |  // a complete type, and in split repeated fields cases, we call
 1266|       |  // CreateMessage<RepeatedPtrField<T>> for incomplete Ts.
 1267|      1|}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_19UninterpretedOptionEE5beginEv:
 1836|     19|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1837|     19|  return iterator(raw_data());
 1838|     19|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorINS0_19UninterpretedOptionEEC2EPKPv:
 1617|     38|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_19UninterpretedOptionEEC2IS3_TnPNSt3__19enable_ifIXsr3std14is_convertibleIPT_PS4_EE5valueEvE4typeELPv0EEERKNS2_IS9_EE:
 1625|     38|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_19UninterpretedOptionEE3endEv:
 1851|     19|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1852|     19|  return iterator(raw_data() + size());
 1853|     19|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKNS0_19UninterpretedOptionEEES7_:
 1647|     19|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|     19|    return x.it_ != y.it_;
 1649|     19|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_27FieldOptions_EditionDefaultEE5beginEv:
 1836|     17|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1837|     17|  return iterator(raw_data());
 1838|     17|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorINS0_27FieldOptions_EditionDefaultEEC2EPKPv:
 1617|     34|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_27FieldOptions_EditionDefaultEEC2IS3_TnPNSt3__19enable_ifIXsr3std14is_convertibleIPT_PS4_EE5valueEvE4typeELPv0EEERKNS2_IS9_EE:
 1625|     34|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_27FieldOptions_EditionDefaultEE3endEv:
 1851|     17|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1852|     17|  return iterator(raw_data() + size());
 1853|     17|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKNS0_27FieldOptions_EditionDefaultEEES7_:
 1647|     35|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|     35|    return x.it_ != y.it_;
 1649|     35|  }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_27FieldOptions_EditionDefaultEEppEv:
 1632|     18|  iterator& operator++() {
 1633|     18|    ++it_;
 1634|     18|    return *this;
 1635|     18|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIKNS0_27FieldOptions_EditionDefaultEEdeEv:
 1628|     18|  reference operator*() const { return *reinterpret_cast<Element*>(*it_); }
_ZN6google8protobuf8internal7memswapILm24EEEvPcS3_:
   78|    259|inline void memswap(char* PROTOBUF_RESTRICT a, char* PROTOBUF_RESTRICT b) {
   79|       |  // `PROTOBUF_RESTRICT` tells compiler that blocks do not overlapping which
   80|       |  // allows it to generate optimized code for swap_ranges.
   81|    259|  std::swap_ranges(a, a + N, b);
   82|    259|}
_ZN6google8protobuf8internalmiENS1_19RepeatedPtrIteratorIKNS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEES5_:
 1691|      4|  friend difference_type operator-(iterator it1, iterator it2) {
 1692|      4|    return it1.it_ - it2.it_;
 1693|      4|  }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEpLEl:
 1666|     18|  iterator& operator+=(difference_type d) {
 1667|     18|    it_ += d;
 1668|     18|    return *this;
 1669|     18|  }
_ZN6google8protobuf8internaleqERKNS1_19RepeatedPtrIteratorIKNS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEES7_:
 1644|      4|  friend bool operator==(const iterator& x, const iterator& y) {
 1645|      4|    return x.it_ == y.it_;
 1646|      4|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIKNS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEptEv:
 1629|      8|  pointer operator->() const { return &(operator*()); }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_7MessageEEEEEPNT_4TypeEPv:
  661|  1.13k|  static inline Value<TypeHandler>* cast(void* element) {
  662|  1.13k|    return reinterpret_cast<Value<TypeHandler>*>(element);
  663|  1.13k|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINS0_7MessageEEEEERKNT_4TypeEi:
  252|  1.13k|  const Value<TypeHandler>& Get(int index) const {
  253|  1.13k|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|  1.13k|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|  1.13k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  1.13k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 1.13k]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  1.13k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|  1.13k|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|  1.13k|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|  1.13k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  1.13k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 1.13k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  1.13k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|  1.13k|    return *cast<TypeHandler>(element_at(index));
  256|  1.13k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_7MessageEEEEEPKNT_4TypeEPKv:
  665|  1.13k|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|  1.13k|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|  1.13k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase7MutableINS1_18GenericTypeHandlerINS0_7MessageEEEEEPNT_4TypeEi:
  187|  1.13k|  Value<TypeHandler>* Mutable(int index) {
  188|  1.13k|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|  1.13k|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|  1.13k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  1.13k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 1.13k]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  1.13k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|  1.13k|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|  1.13k|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|  1.13k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  1.13k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 1.13k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  1.13k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  190|  1.13k|    return cast<TypeHandler>(element_at(index));
  191|  1.13k|  }

_ZN6google8protobuf8internal10ArenaBlockC2EPS2_m:
   43|     22|  ArenaBlock(ArenaBlock* next, size_t size) : next(next), size(size) {
   44|     22|    ABSL_DCHECK_GT(size, sizeof(ArenaBlock));
  ------------------
  |  |   84|     22|  ABSL_LOG_INTERNAL_DCHECK_GT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   96|     22|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     22|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 22]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     22|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   45|     22|  }
_ZN6google8protobuf8internal10ArenaBlock7PointerEm:
   47|     62|  char* Pointer(size_t n) {
   48|     62|    ABSL_DCHECK_LE(n, size);
  ------------------
  |  |   78|     62|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|     62|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     62|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 62]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     62|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   49|     62|    return reinterpret_cast<char*>(this) + n;
   50|     62|  }
_ZN6google8protobuf8internal10ArenaBlock5LimitEv:
   51|     22|  char* Limit() { return Pointer(size & static_cast<size_t>(-8)); }
_ZNK6google8protobuf8internal10ArenaBlock8IsSentryEv:
   53|     22|  bool IsSentry() const { return size == 0; }
_ZN6google8protobuf8internal11SerialArena11CleanupListEv:
   85|      4|  void CleanupList() { cleanup_list_.Cleanup(*this); }
_ZNK6google8protobuf8internal11SerialArena14SpaceAllocatedEv:
   86|      4|  uint64_t SpaceAllocated() const {
   87|      4|    return space_allocated_.load(std::memory_order_relaxed);
   88|      4|  }
_ZN6google8protobuf8internal11SerialArena26TryAllocateFromCachedBlockEm:
   92|    148|  PROTOBUF_ALWAYS_INLINE void* TryAllocateFromCachedBlock(size_t size) {
   93|    148|    if (PROTOBUF_PREDICT_FALSE(size < 16)) return nullptr;
  ------------------
  |  |  365|    148|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 148]
  |  |  |  Branch (365:54): [Folded, False: 148]
  |  |  |  Branch (365:63): [True: 0, False: 148]
  |  |  ------------------
  ------------------
   94|       |    // We round up to the next larger block in case the memory doesn't match
   95|       |    // the pattern we are looking for.
   96|    148|    const size_t index = absl::bit_width(size - 1) - 4;
   97|       |
   98|    148|    if (PROTOBUF_PREDICT_FALSE(index >= cached_block_length_)) return nullptr;
  ------------------
  |  |  365|    148|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 17, False: 131]
  |  |  |  Branch (365:54): [Folded, False: 148]
  |  |  |  Branch (365:63): [True: 17, False: 131]
  |  |  ------------------
  ------------------
   99|    131|    auto& cached_head = cached_blocks_[index];
  100|    131|    if (cached_head == nullptr) return nullptr;
  ------------------
  |  Branch (100:9): [True: 81, False: 50]
  ------------------
  101|       |
  102|     50|    void* ret = cached_head;
  103|     50|    PROTOBUF_UNPOISON_MEMORY_REGION(ret, size);
  104|     50|    cached_head = cached_head->next;
  105|     50|    return ret;
  106|    131|  }
_ZN6google8protobuf8internal11SerialArena20MaybeAllocateAlignedEmPPv:
  202|    715|  bool MaybeAllocateAligned(size_t n, void** out) {
  203|    715|    ABSL_DCHECK(internal::ArenaAlignDefault::IsAligned(n));
  ------------------
  |  |   47|    715|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    715|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  1.43k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    715|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  1.43k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  1.43k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 715, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    715|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 715]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    715|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 715, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  1.43k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  1.43k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  204|    715|    ABSL_DCHECK_GE(limit_, ptr());
  ------------------
  |  |   82|    715|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|    715|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    715|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 715]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    715|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|    715|    char* ret = ptr();
  206|       |    // ret + n may point out of the block bounds, or ret may be nullptr.
  207|       |    // Both computations have undefined behavior when done on pointers,
  208|       |    // so do them on uintptr_t instead.
  209|    715|    if (PROTOBUF_PREDICT_FALSE(reinterpret_cast<uintptr_t>(ret) + n >
  ------------------
  |  |  365|    715|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 27, False: 688]
  |  |  |  Branch (365:54): [Folded, False: 715]
  |  |  |  Branch (365:63): [True: 27, False: 688]
  |  |  ------------------
  ------------------
  210|    715|                               reinterpret_cast<uintptr_t>(limit_))) {
  211|     27|      return false;
  212|     27|    }
  213|    688|    PROTOBUF_UNPOISON_MEMORY_REGION(ret, n);
  214|    688|    *out = ret;
  215|    688|    char* next = ret + n;
  216|    688|    set_ptr(next);
  217|    688|    MaybePrefetchData(next);
  218|    688|    return true;
  219|    715|  }
_ZN6google8protobuf8internal11SerialArena17MaybePrefetchImplElPKcS4_S4_:
  286|    688|                                       const char* prefetch_ptr) {
  287|    688|    if (PROTOBUF_PREDICT_TRUE(prefetch_ptr - next > prefetch_degree))
  ------------------
  |  |  364|    688|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 495, False: 193]
  |  |  |  Branch (364:53): [Folded, False: 688]
  |  |  |  Branch (364:62): [True: 495, False: 193]
  |  |  ------------------
  ------------------
  288|    495|      return prefetch_ptr;
  289|    193|    if (PROTOBUF_PREDICT_TRUE(prefetch_ptr < limit)) {
  ------------------
  |  |  364|    193|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 81, False: 112]
  |  |  |  Branch (364:53): [Folded, False: 193]
  |  |  |  Branch (364:62): [True: 81, False: 112]
  |  |  ------------------
  ------------------
  290|     81|      prefetch_ptr = std::max(next, prefetch_ptr);
  291|     81|      ABSL_DCHECK(prefetch_ptr != nullptr);
  ------------------
  |  |   47|     81|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     81|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    162|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     81|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    162|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    162|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 81, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     81|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 81]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     81|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 81, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|    162|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    162|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  292|     81|      const char* end = std::min(limit, prefetch_ptr + prefetch_degree);
  293|  1.22k|      for (; prefetch_ptr < end; prefetch_ptr += ABSL_CACHELINE_SIZE) {
  ------------------
  |  |   77|  1.14k|#define ABSL_CACHELINE_SIZE 64
  ------------------
  |  Branch (293:14): [True: 1.14k, False: 81]
  ------------------
  294|  1.14k|        absl::PrefetchToLocalCacheForWrite(prefetch_ptr);
  295|  1.14k|      }
  296|     81|    }
  297|    193|    return prefetch_ptr;
  298|    193|  }
_ZN6google8protobuf8internal11SerialArena17MaybePrefetchDataEPKc:
  300|    688|  void MaybePrefetchData(const char* next) {
  301|    688|    ABSL_DCHECK(static_cast<const void*>(prefetch_ptr_) == nullptr ||
  ------------------
  |  |   47|    688|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    688|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  1.37k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    688|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  1.37k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  1.37k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 688, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    688|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 688]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    688|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 688, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  1.37k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  1.37k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  302|    688|                static_cast<const void*>(prefetch_ptr_) >= head());
  303|    688|    prefetch_ptr_ =
  304|    688|        MaybePrefetchImpl(kPrefetchDataDegree, next, limit_, prefetch_ptr_);
  305|    688|  }
_ZN6google8protobuf8internal11SerialArena16FreeStringBlocksEv:
  327|      4|  size_t FreeStringBlocks() {
  328|       |    // On the active block delete all strings skipping the unused instances.
  329|      4|    size_t unused_bytes = string_block_unused_.load(std::memory_order_relaxed);
  330|      4|    if (StringBlock* sb = string_block_.load(std::memory_order_relaxed)) {
  ------------------
  |  Branch (330:22): [True: 4, False: 0]
  ------------------
  331|      4|      return FreeStringBlocks(sb, unused_bytes);
  332|      4|    }
  333|      0|    return 0;
  334|      4|  }
_ZN6google8protobuf8internal11SerialArena12AddSpaceUsedEm:
  338|     45|  void AddSpaceUsed(size_t space_used) {
  339|     45|    space_used_.store(space_used_.load(std::memory_order_relaxed) + space_used,
  340|     45|                      std::memory_order_relaxed);
  341|     45|  }
_ZN6google8protobuf8internal11SerialArena17AddSpaceAllocatedEm:
  344|     27|  void AddSpaceAllocated(size_t space_allocated) {
  345|     27|    space_allocated_.store(
  346|     27|        space_allocated_.load(std::memory_order_relaxed) + space_allocated,
  347|     27|        std::memory_order_relaxed);
  348|     27|  }
_ZN6google8protobuf8internal11SerialArena4headEv:
  351|     26|  ArenaBlock* head() { return head_.load(std::memory_order_relaxed); }
_ZN6google8protobuf8internal11SerialArena3ptrEv:
  356|    733|  char* ptr() { return ptr_.load(std::memory_order_relaxed); }
_ZN6google8protobuf8internal11SerialArena7set_ptrEPc:
  358|    710|  void set_ptr(char* ptr) { return ptr_.store(ptr, std::memory_order_relaxed); }
_ZN6google8protobuf8internal11SerialArena9set_rangeEPcS3_:
  359|     22|  PROTOBUF_ALWAYS_INLINE void set_range(char* ptr, char* limit) {
  360|     22|    set_ptr(ptr);
  361|     22|    prefetch_ptr_ = ptr;
  362|     22|    limit_ = limit;
  363|     22|  }
_ZN6google8protobuf8internal11SerialArena19MaybeAllocateStringERPv:
  412|    666|inline PROTOBUF_ALWAYS_INLINE bool SerialArena::MaybeAllocateString(void*& p) {
  413|       |  // Check how many unused instances are in the current block.
  414|    666|  size_t unused_bytes = string_block_unused_.load(std::memory_order_relaxed);
  415|    666|  if (PROTOBUF_PREDICT_TRUE(unused_bytes != 0)) {
  ------------------
  |  |  364|    666|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 648, False: 18]
  |  |  |  Branch (364:53): [Folded, False: 666]
  |  |  |  Branch (364:62): [True: 648, False: 18]
  |  |  ------------------
  ------------------
  416|    648|    unused_bytes -= sizeof(std::string);
  417|    648|    string_block_unused_.store(unused_bytes, std::memory_order_relaxed);
  418|    648|    p = string_block_.load(std::memory_order_relaxed)->AtOffset(unused_bytes);
  419|    648|    return true;
  420|    648|  }
  421|     18|  return false;
  422|    666|}
_ZN6google8protobuf8internal11SerialArena23AllocateFromStringBlockEv:
  425|    666|SerialArena::AllocateFromStringBlock() {
  426|    666|  void* p;
  427|    666|  if (ABSL_PREDICT_TRUE(MaybeAllocateString(p))) return p;
  ------------------
  |  |  179|    666|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 648, False: 18]
  |  |  |  Branch (179:48): [Folded, False: 666]
  |  |  |  Branch (179:57): [True: 648, False: 18]
  |  |  ------------------
  ------------------
  428|     18|  return AllocateFromStringBlockFallback();
  429|    666|}
_ZN6google8protobuf8internal11SerialArena15AllocateAlignedILNS1_16AllocationClientE0EEEPvm:
  116|    577|  void* AllocateAligned(size_t n) {
  117|    577|    ABSL_DCHECK(internal::ArenaAlignDefault::IsAligned(n));
  ------------------
  |  |   47|    577|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    577|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  1.15k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    577|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  1.15k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  1.15k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 577, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    577|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 577]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    577|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 577, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  1.15k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  1.15k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  118|    577|    ABSL_DCHECK_GE(limit_, ptr());
  ------------------
  |  |   82|    577|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|    577|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    577|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 577]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    577|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  119|       |
  120|    577|    if (alloc_client == AllocationClient::kArray) {
  ------------------
  |  Branch (120:9): [Folded, False: 577]
  ------------------
  121|      0|      if (void* res = TryAllocateFromCachedBlock(n)) {
  ------------------
  |  Branch (121:17): [True: 0, False: 0]
  ------------------
  122|      0|        return res;
  123|      0|      }
  124|      0|    }
  125|       |
  126|    577|    void* ptr;
  127|    577|    if (PROTOBUF_PREDICT_TRUE(MaybeAllocateAligned(n, &ptr))) {
  ------------------
  |  |  364|    577|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 557, False: 20]
  |  |  |  Branch (364:53): [Folded, False: 577]
  |  |  |  Branch (364:62): [True: 557, False: 20]
  |  |  ------------------
  ------------------
  128|    557|      return ptr;
  129|    557|    }
  130|     20|    return AllocateAlignedFallback(n);
  131|    577|  }
_ZN6google8protobuf8internal11SerialArena15AllocateAlignedILNS1_16AllocationClientE1EEEPvm:
  116|    148|  void* AllocateAligned(size_t n) {
  117|    148|    ABSL_DCHECK(internal::ArenaAlignDefault::IsAligned(n));
  ------------------
  |  |   47|    148|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    148|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    296|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    148|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    296|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    296|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 148, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    148|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 148]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    148|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 148, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|    296|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    296|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  118|    148|    ABSL_DCHECK_GE(limit_, ptr());
  ------------------
  |  |   82|    148|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|    148|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    148|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 148]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    148|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  119|       |
  120|    148|    if (alloc_client == AllocationClient::kArray) {
  ------------------
  |  Branch (120:9): [True: 148, Folded]
  ------------------
  121|    148|      if (void* res = TryAllocateFromCachedBlock(n)) {
  ------------------
  |  Branch (121:17): [True: 50, False: 98]
  ------------------
  122|     50|        return res;
  123|     50|      }
  124|    148|    }
  125|       |
  126|     98|    void* ptr;
  127|     98|    if (PROTOBUF_PREDICT_TRUE(MaybeAllocateAligned(n, &ptr))) {
  ------------------
  |  |  364|     98|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 96, False: 2]
  |  |  |  Branch (364:53): [Folded, False: 98]
  |  |  |  Branch (364:62): [True: 96, False: 2]
  |  |  ------------------
  ------------------
  128|     96|      return ptr;
  129|     96|    }
  130|      2|    return AllocateAlignedFallback(n);
  131|     98|  }

_ZNK6google8protobuf8internal11StringBlock14allocated_sizeEv:
   74|     10|  size_t allocated_size() const { return allocated_size_; }
_ZN6google8protobuf8internal11StringBlockC2EPS2_btt:
   94|     18|      : next_(next),
   95|     18|        allocated_size_(size),
   96|     18|        next_size_(next_size),
   97|     18|        heap_allocated_(heap_allocated) {}
_ZN6google8protobuf8internal11StringBlock8min_sizeEv:
   99|     14|  static constexpr size_type min_size() { return size_type{256}; }
_ZN6google8protobuf8internal11StringBlock8max_sizeEv:
  100|     14|  static constexpr size_type max_size() { return size_type{8192}; }
_ZNK6google8protobuf8internal11StringBlock9next_sizeEv:
  107|     14|  size_t next_size() const { return next_size_; }
_ZN6google8protobuf8internal11StringBlock11RoundedSizeEt:
  115|     18|constexpr StringBlock::size_type StringBlock::RoundedSize(size_type size) {
  116|     18|  return size - (size - sizeof(StringBlock)) % sizeof(std::string);
  117|     18|}
_ZN6google8protobuf8internal11StringBlock8NextSizeEPS2_:
  119|     18|inline size_t StringBlock::NextSize(StringBlock* block) {
  120|     18|  return block ? block->next_size() : min_size();
  ------------------
  |  Branch (120:10): [True: 14, False: 4]
  ------------------
  121|     18|}
_ZN6google8protobuf8internal11StringBlock7EmplaceEPvmPS2_:
  123|     13|inline StringBlock* StringBlock::Emplace(void* p, size_t n, StringBlock* next) {
  124|     13|  const auto count = static_cast<size_type>(n);
  125|     13|  ABSL_DCHECK_EQ(count, NextSize(next));
  ------------------
  |  |   74|     13|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|     13|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     13|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 13]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     13|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  126|     13|  size_type doubled = count * 2;
  127|     13|  size_type next_size = next ? std::min(doubled, max_size()) : min_size();
  ------------------
  |  Branch (127:25): [True: 13, False: 0]
  ------------------
  128|     13|  return new (p) StringBlock(next, false, RoundedSize(count), next_size);
  129|     13|}
_ZN6google8protobuf8internal11StringBlock3NewEPS2_:
  131|      5|inline StringBlock* StringBlock::New(StringBlock* next) {
  132|       |  // Compute required size, rounding down to a multiple of sizeof(std:string)
  133|       |  // so that we can optimize the allocation path. I.e., we incur a (constant
  134|       |  // size) MOD() operation cost here to avoid any MUL() later on.
  135|      5|  size_type size = min_size();
  136|      5|  size_type next_size = min_size();
  137|      5|  if (next) {
  ------------------
  |  Branch (137:7): [True: 1, False: 4]
  ------------------
  138|      1|    size = next->next_size_;
  139|      1|    next_size = std::min<size_type>(size * 2, max_size());
  140|      1|  }
  141|      5|  size = RoundedSize(size);
  142|      5|  void* p = ::operator new(size);
  143|      5|  return new (p) StringBlock(next, true, size, next_size);
  144|      5|}
_ZN6google8protobuf8internal11StringBlock6DeleteEPS2_:
  146|     18|inline size_t StringBlock::Delete(StringBlock* block) {
  147|     18|  ABSL_DCHECK(block != nullptr);
  ------------------
  |  |   47|     18|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     18|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     36|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     18|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     36|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     36|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 18, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     18|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 18]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     18|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 18, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     36|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     36|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  148|     18|  if (!block->heap_allocated_) return size_t{0};
  ------------------
  |  Branch (148:7): [True: 13, False: 5]
  ------------------
  149|      5|  size_t size = block->allocated_size();
  150|      5|  internal::SizedDelete(block, size);
  151|      5|  return size;
  152|     18|}
_ZNK6google8protobuf8internal11StringBlock4nextEv:
  154|     18|inline StringBlock* StringBlock::next() const { return next_; }
_ZNK6google8protobuf8internal11StringBlock14effective_sizeEv:
  156|     50|inline size_t StringBlock::effective_size() const {
  157|     50|  return allocated_size_ - sizeof(StringBlock);
  158|     50|}
_ZN6google8protobuf8internal11StringBlock8AtOffsetEm:
  161|    702|    size_t offset) {
  162|    702|  ABSL_DCHECK_LE(offset, effective_size());
  ------------------
  |  |   78|    702|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|    702|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    702|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 702]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    702|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  163|    702|  return reinterpret_cast<std::string*>(reinterpret_cast<char*>(this + 1) +
  164|    702|                                        offset);
  165|    702|}
_ZN6google8protobuf8internal11StringBlock5beginEv:
  167|     14|ABSL_ATTRIBUTE_RETURNS_NONNULL inline std::string* StringBlock::begin() {
  168|     14|  return AtOffset(0);
  169|     14|}
_ZN6google8protobuf8internal11StringBlock3endEv:
  171|     18|ABSL_ATTRIBUTE_RETURNS_NONNULL inline std::string* StringBlock::end() {
  172|     18|  return AtOffset(effective_size());
  173|     18|}

_ZNK6google8protobuf8internal15ThreadSafeArena11AllocPolicyEv:
  158|     22|  const AllocationPolicy* AllocPolicy() const { return alloc_policy_.get(); }
_ZN6google8protobuf8internal15ThreadSafeArena16CacheSerialArenaEPNS1_11SerialArenaE:
  168|      4|  inline void CacheSerialArena(SerialArena* serial) {
  169|      4|    thread_cache().last_serial_arena = serial;
  170|      4|    thread_cache().last_lifecycle_id_seen = tag_and_id_;
  171|      4|  }
_ZN6google8protobuf8internal15ThreadSafeArena15AllocateAlignedILNS1_16AllocationClientE0EEEPvm:
   69|    577|  void* AllocateAligned(size_t n) {
   70|    577|    SerialArena* arena;
   71|    577|    if (PROTOBUF_PREDICT_TRUE(GetSerialArenaFast(&arena))) {
  ------------------
  |  |  364|    577|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 577, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 577]
  |  |  |  Branch (364:62): [True: 577, False: 0]
  |  |  ------------------
  ------------------
   72|    577|      return arena->AllocateAligned<alloc_client>(n);
   73|    577|    } else {
   74|      0|      return AllocateAlignedFallback<alloc_client>(n);
   75|      0|    }
   76|    577|  }
_ZN6google8protobuf8internal15ThreadSafeArena15AllocateAlignedILNS1_16AllocationClientE1EEEPvm:
   69|    148|  void* AllocateAligned(size_t n) {
   70|    148|    SerialArena* arena;
   71|    148|    if (PROTOBUF_PREDICT_TRUE(GetSerialArenaFast(&arena))) {
  ------------------
  |  |  364|    148|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 148, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 148]
  |  |  |  Branch (364:62): [True: 148, False: 0]
  |  |  ------------------
  ------------------
   72|    148|      return arena->AllocateAligned<alloc_client>(n);
   73|    148|    } else {
   74|      0|      return AllocateAlignedFallback<alloc_client>(n);
   75|      0|    }
   76|    148|  }

_ZNK6google8protobuf15UnknownFieldSet5emptyEv:
  334|     19|inline bool UnknownFieldSet::empty() const { return fields_.empty(); }

_ZN6google8protobuf8internal19ShiftMixParseVarintIjLi10EEEPKcS4_Rl:
   53|  4.92k|                                                              int64_t& res1) {
   54|  4.92k|  using Signed = std::make_signed_t<VarintType>;
   55|  4.92k|  constexpr bool kIs64BitVarint = std::is_same<Signed, int64_t>::value;
   56|  4.92k|  constexpr bool kIs32BitVarint = std::is_same<Signed, int32_t>::value;
   57|  4.92k|  static_assert(kIs64BitVarint || kIs32BitVarint, "");
   58|       |
   59|       |  // The algorithm relies on sign extension for each byte to set all high bits
   60|       |  // when the varint continues. It also relies on asserting all of the lower
   61|       |  // bits for each successive byte read. This allows the result to be aggregated
   62|       |  // using a bitwise AND. For example:
   63|       |  //
   64|       |  //          8       1          64     57 ... 24     17  16      9  8       1
   65|       |  // ptr[0] = 1aaa aaaa ; res1 = 1111 1111 ... 1111 1111  1111 1111  1aaa aaaa
   66|       |  // ptr[1] = 1bbb bbbb ; res2 = 1111 1111 ... 1111 1111  11bb bbbb  b111 1111
   67|       |  // ptr[2] = 0ccc cccc ; res3 = 0000 0000 ... 000c cccc  cc11 1111  1111 1111
   68|       |  //                             ---------------------------------------------
   69|       |  //        res1 & res2 & res3 = 0000 0000 ... 000c cccc  ccbb bbbb  baaa aaaa
   70|       |  //
   71|       |  // On x86-64, a shld from a single register filled with enough 1s in the high
   72|       |  // bits can accomplish all this in one instruction. It so happens that res1
   73|       |  // has 57 high bits of ones, which is enough for the largest shift done.
   74|       |  //
   75|       |  // Just as importantly, by keeping results in res1, res2, and res3, we take
   76|       |  // advantage of the superscalar abilities of the CPU.
   77|  4.92k|  const auto next = [&p] { return static_cast<const int8_t>(*p++); };
   78|  4.92k|  const auto last = [&p] { return static_cast<const int8_t>(p[-1]); };
   79|       |
   80|  4.92k|  int64_t res2, res3;  // accumulated result chunks
   81|  4.92k|  res1 = next();
   82|  4.92k|  if (PROTOBUF_PREDICT_TRUE(res1 >= 0)) return p;
  ------------------
  |  |  364|  4.92k|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 3.61k, False: 1.31k]
  |  |  |  Branch (364:53): [Folded, False: 4.92k]
  |  |  |  Branch (364:62): [True: 3.61k, False: 1.31k]
  |  |  ------------------
  ------------------
   83|  1.31k|  if (limit <= 1) goto limit0;
  ------------------
  |  Branch (83:7): [Folded, False: 1.31k]
  ------------------
   84|       |
   85|       |  // Densify all ops with explicit FALSE predictions from here on, except that
   86|       |  // we predict length = 5 as a common length for fields like timestamp.
   87|  1.31k|  if (PROTOBUF_PREDICT_FALSE(VarintShl<1>(next(), res1, res2))) goto done1;
  ------------------
  |  |  365|  1.31k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 929, False: 385]
  |  |  |  Branch (365:54): [Folded, False: 1.31k]
  |  |  |  Branch (365:63): [True: 929, False: 385]
  |  |  ------------------
  ------------------
   88|    385|  if (limit <= 2) goto limit1;
  ------------------
  |  Branch (88:7): [Folded, False: 385]
  ------------------
   89|    385|  if (PROTOBUF_PREDICT_FALSE(VarintShl<2>(next(), res1, res3))) goto done2;
  ------------------
  |  |  365|    385|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 357, False: 28]
  |  |  |  Branch (365:54): [Folded, False: 385]
  |  |  |  Branch (365:63): [True: 357, False: 28]
  |  |  ------------------
  ------------------
   90|     28|  if (limit <= 3) goto limit2;
  ------------------
  |  Branch (90:7): [Folded, False: 28]
  ------------------
   91|     28|  if (PROTOBUF_PREDICT_FALSE(VarintShlAnd<3>(next(), res1, res2))) goto done2;
  ------------------
  |  |  365|     28|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 28]
  |  |  |  Branch (365:54): [Folded, False: 28]
  |  |  |  Branch (365:63): [True: 0, False: 28]
  |  |  ------------------
  ------------------
   92|     28|  if (limit <= 4) goto limit2;
  ------------------
  |  Branch (92:7): [Folded, False: 28]
  ------------------
   93|     28|  if (PROTOBUF_PREDICT_TRUE(VarintShlAnd<4>(next(), res1, res3))) goto done2;
  ------------------
  |  |  364|     28|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 28, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 28]
  |  |  |  Branch (364:62): [True: 28, False: 0]
  |  |  ------------------
  ------------------
   94|      0|  if (limit <= 5) goto limit2;
  ------------------
  |  Branch (94:7): [Folded, False: 0]
  ------------------
   95|       |
   96|      0|  if (kIs64BitVarint) {
  ------------------
  |  Branch (96:7): [Folded, False: 0]
  ------------------
   97|      0|    if (PROTOBUF_PREDICT_FALSE(VarintShlAnd<5>(next(), res1, res2))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   98|      0|    if (limit <= 6) goto limit2;
  ------------------
  |  Branch (98:9): [Folded, False: 0]
  ------------------
   99|      0|    if (PROTOBUF_PREDICT_FALSE(VarintShlAnd<6>(next(), res1, res3))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  100|      0|    if (limit <= 7) goto limit2;
  ------------------
  |  Branch (100:9): [Folded, False: 0]
  ------------------
  101|      0|    if (PROTOBUF_PREDICT_FALSE(VarintShlAnd<7>(next(), res1, res2))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  102|      0|    if (limit <= 8) goto limit2;
  ------------------
  |  Branch (102:9): [Folded, False: 0]
  ------------------
  103|      0|    if (PROTOBUF_PREDICT_FALSE(VarintShlAnd<8>(next(), res1, res3))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  104|      0|    if (limit <= 9) goto limit2;
  ------------------
  |  Branch (104:9): [Folded, False: 0]
  ------------------
  105|      0|  } else {
  106|       |    // An overlong int32 is expected to span the full 10 bytes
  107|      0|    if (PROTOBUF_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  108|      0|    if (limit <= 6) goto limit2;
  ------------------
  |  Branch (108:9): [Folded, False: 0]
  ------------------
  109|      0|    if (PROTOBUF_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  110|      0|    if (limit <= 7) goto limit2;
  ------------------
  |  Branch (110:9): [Folded, False: 0]
  ------------------
  111|      0|    if (PROTOBUF_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  112|      0|    if (limit <= 8) goto limit2;
  ------------------
  |  Branch (112:9): [Folded, False: 0]
  ------------------
  113|      0|    if (PROTOBUF_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  114|      0|    if (limit <= 9) goto limit2;
  ------------------
  |  Branch (114:9): [Folded, False: 0]
  ------------------
  115|      0|  }
  116|       |
  117|       |  // For valid 64bit varints, the 10th byte/ptr[9] should be exactly 1. In this
  118|       |  // case, the continuation bit of ptr[8] already set the top bit of res3
  119|       |  // correctly, so all we have to do is check that the expected case is true.
  120|      0|  if (PROTOBUF_PREDICT_TRUE(next() == 1)) goto done2;
  ------------------
  |  |  364|      0|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 0, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 0]
  |  |  |  Branch (364:62): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  121|       |
  122|      0|  if (PROTOBUF_PREDICT_FALSE(last() & 0x80)) {
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  123|       |    // If the continue bit is set, it is an unterminated varint.
  124|      0|    return nullptr;
  125|      0|  }
  126|       |
  127|       |  // A zero value of the first bit of the 10th byte represents an
  128|       |  // over-serialized varint. This case should not happen, but if does (say, due
  129|       |  // to a nonconforming serializer), deassert the continuation bit that came
  130|       |  // from ptr[8].
  131|      0|  if (kIs64BitVarint && (last() & 1) == 0) {
  ------------------
  |  Branch (131:7): [Folded, False: 0]
  |  Branch (131:25): [True: 0, False: 0]
  ------------------
  132|      0|    static constexpr int bits = 64 - 1;
  133|      0|#if defined(__GCC_ASM_FLAG_OUTPUTS__) && defined(__x86_64__)
  134|       |    // Use a small instruction since this is an uncommon code path.
  135|      0|    asm("btc %[bits], %[res3]" : [res3] "+r"(res3) : [bits] "i"(bits));
  136|       |#else
  137|       |    res3 ^= int64_t{1} << bits;
  138|       |#endif
  139|      0|  }
  140|       |
  141|    385|done2:
  142|    385|  res2 &= res3;
  143|  1.31k|done1:
  144|  1.31k|  res1 &= res2;
  145|  1.31k|  PROTOBUF_ASSUME(p != nullptr);
  ------------------
  |  |  941|  1.31k|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  146|  1.31k|  return p;
  147|      0|limit2:
  148|      0|  res2 &= res3;
  149|      0|limit1:
  150|      0|  res1 &= res2;
  151|      0|limit0:
  152|      0|  PROTOBUF_ASSUME(p != nullptr);
  ------------------
  |  |  941|      0|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  153|      0|  PROTOBUF_ASSUME(res1 < 0);
  ------------------
  |  |  941|      0|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  154|      0|  return p;
  155|      0|}
_ZZN6google8protobuf8internal19ShiftMixParseVarintIjLi10EEEPKcS4_RlENKUlvE_clEv:
   77|  6.68k|  const auto next = [&p] { return static_cast<const int8_t>(*p++); };
_ZN6google8protobuf8internal9VarintShlILi1EEEbalRl:
   46|  1.66k|                                             int64_t& res) {
   47|  1.66k|  res = VarintShlByte<n>(byte, ones);
   48|  1.66k|  return res >= 0;
   49|  1.66k|}
_ZN6google8protobuf8internal13VarintShlByteILi1EEElal:
   26|  1.66k|inline PROTOBUF_ALWAYS_INLINE int64_t VarintShlByte(int8_t byte, int64_t ones) {
   27|  1.66k|  return static_cast<int64_t>((static_cast<uint64_t>(byte) << n * 7) |
   28|  1.66k|                              (static_cast<uint64_t>(ones) >> (64 - n * 7)));
   29|  1.66k|}
_ZN6google8protobuf8internal9VarintShlILi2EEEbalRl:
   46|    630|                                             int64_t& res) {
   47|    630|  res = VarintShlByte<n>(byte, ones);
   48|    630|  return res >= 0;
   49|    630|}
_ZN6google8protobuf8internal13VarintShlByteILi2EEElal:
   26|    630|inline PROTOBUF_ALWAYS_INLINE int64_t VarintShlByte(int8_t byte, int64_t ones) {
   27|    630|  return static_cast<int64_t>((static_cast<uint64_t>(byte) << n * 7) |
   28|    630|                              (static_cast<uint64_t>(ones) >> (64 - n * 7)));
   29|    630|}
_ZN6google8protobuf8internal12VarintShlAndILi3EEEbalRl:
   36|    263|                                                int64_t& res) {
   37|    263|  res &= VarintShlByte<n>(byte, ones);
   38|    263|  return res >= 0;
   39|    263|}
_ZN6google8protobuf8internal13VarintShlByteILi3EEElal:
   26|    263|inline PROTOBUF_ALWAYS_INLINE int64_t VarintShlByte(int8_t byte, int64_t ones) {
   27|    263|  return static_cast<int64_t>((static_cast<uint64_t>(byte) << n * 7) |
   28|    263|                              (static_cast<uint64_t>(ones) >> (64 - n * 7)));
   29|    263|}
_ZN6google8protobuf8internal12VarintShlAndILi4EEEbalRl:
   36|    248|                                                int64_t& res) {
   37|    248|  res &= VarintShlByte<n>(byte, ones);
   38|    248|  return res >= 0;
   39|    248|}
_ZN6google8protobuf8internal13VarintShlByteILi4EEElal:
   26|    248|inline PROTOBUF_ALWAYS_INLINE int64_t VarintShlByte(int8_t byte, int64_t ones) {
   27|    248|  return static_cast<int64_t>((static_cast<uint64_t>(byte) << n * 7) |
   28|    248|                              (static_cast<uint64_t>(ones) >> (64 - n * 7)));
   29|    248|}
_ZN6google8protobuf8internal19ShiftMixParseVarintImLi10EEEPKcS4_Rl:
   53|    601|                                                              int64_t& res1) {
   54|    601|  using Signed = std::make_signed_t<VarintType>;
   55|    601|  constexpr bool kIs64BitVarint = std::is_same<Signed, int64_t>::value;
   56|    601|  constexpr bool kIs32BitVarint = std::is_same<Signed, int32_t>::value;
   57|    601|  static_assert(kIs64BitVarint || kIs32BitVarint, "");
   58|       |
   59|       |  // The algorithm relies on sign extension for each byte to set all high bits
   60|       |  // when the varint continues. It also relies on asserting all of the lower
   61|       |  // bits for each successive byte read. This allows the result to be aggregated
   62|       |  // using a bitwise AND. For example:
   63|       |  //
   64|       |  //          8       1          64     57 ... 24     17  16      9  8       1
   65|       |  // ptr[0] = 1aaa aaaa ; res1 = 1111 1111 ... 1111 1111  1111 1111  1aaa aaaa
   66|       |  // ptr[1] = 1bbb bbbb ; res2 = 1111 1111 ... 1111 1111  11bb bbbb  b111 1111
   67|       |  // ptr[2] = 0ccc cccc ; res3 = 0000 0000 ... 000c cccc  cc11 1111  1111 1111
   68|       |  //                             ---------------------------------------------
   69|       |  //        res1 & res2 & res3 = 0000 0000 ... 000c cccc  ccbb bbbb  baaa aaaa
   70|       |  //
   71|       |  // On x86-64, a shld from a single register filled with enough 1s in the high
   72|       |  // bits can accomplish all this in one instruction. It so happens that res1
   73|       |  // has 57 high bits of ones, which is enough for the largest shift done.
   74|       |  //
   75|       |  // Just as importantly, by keeping results in res1, res2, and res3, we take
   76|       |  // advantage of the superscalar abilities of the CPU.
   77|    601|  const auto next = [&p] { return static_cast<const int8_t>(*p++); };
   78|    601|  const auto last = [&p] { return static_cast<const int8_t>(p[-1]); };
   79|       |
   80|    601|  int64_t res2, res3;  // accumulated result chunks
   81|    601|  res1 = next();
   82|    601|  if (PROTOBUF_PREDICT_TRUE(res1 >= 0)) return p;
  ------------------
  |  |  364|    601|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 255, False: 346]
  |  |  |  Branch (364:53): [Folded, False: 601]
  |  |  |  Branch (364:62): [True: 255, False: 346]
  |  |  ------------------
  ------------------
   83|    346|  if (limit <= 1) goto limit0;
  ------------------
  |  Branch (83:7): [Folded, False: 346]
  ------------------
   84|       |
   85|       |  // Densify all ops with explicit FALSE predictions from here on, except that
   86|       |  // we predict length = 5 as a common length for fields like timestamp.
   87|    346|  if (PROTOBUF_PREDICT_FALSE(VarintShl<1>(next(), res1, res2))) goto done1;
  ------------------
  |  |  365|    346|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 101, False: 245]
  |  |  |  Branch (365:54): [Folded, False: 346]
  |  |  |  Branch (365:63): [True: 101, False: 245]
  |  |  ------------------
  ------------------
   88|    245|  if (limit <= 2) goto limit1;
  ------------------
  |  Branch (88:7): [Folded, False: 245]
  ------------------
   89|    245|  if (PROTOBUF_PREDICT_FALSE(VarintShl<2>(next(), res1, res3))) goto done2;
  ------------------
  |  |  365|    245|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 10, False: 235]
  |  |  |  Branch (365:54): [Folded, False: 245]
  |  |  |  Branch (365:63): [True: 10, False: 235]
  |  |  ------------------
  ------------------
   90|    235|  if (limit <= 3) goto limit2;
  ------------------
  |  Branch (90:7): [Folded, False: 235]
  ------------------
   91|    235|  if (PROTOBUF_PREDICT_FALSE(VarintShlAnd<3>(next(), res1, res2))) goto done2;
  ------------------
  |  |  365|    235|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 15, False: 220]
  |  |  |  Branch (365:54): [Folded, False: 235]
  |  |  |  Branch (365:63): [True: 15, False: 220]
  |  |  ------------------
  ------------------
   92|    220|  if (limit <= 4) goto limit2;
  ------------------
  |  Branch (92:7): [Folded, False: 220]
  ------------------
   93|    220|  if (PROTOBUF_PREDICT_TRUE(VarintShlAnd<4>(next(), res1, res3))) goto done2;
  ------------------
  |  |  364|    220|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 18, False: 202]
  |  |  |  Branch (364:53): [Folded, False: 220]
  |  |  |  Branch (364:62): [True: 18, False: 202]
  |  |  ------------------
  ------------------
   94|    202|  if (limit <= 5) goto limit2;
  ------------------
  |  Branch (94:7): [Folded, False: 202]
  ------------------
   95|       |
   96|    202|  if (kIs64BitVarint) {
  ------------------
  |  Branch (96:7): [True: 202, Folded]
  ------------------
   97|    202|    if (PROTOBUF_PREDICT_FALSE(VarintShlAnd<5>(next(), res1, res2))) goto done2;
  ------------------
  |  |  365|    202|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 15, False: 187]
  |  |  |  Branch (365:54): [Folded, False: 202]
  |  |  |  Branch (365:63): [True: 15, False: 187]
  |  |  ------------------
  ------------------
   98|    187|    if (limit <= 6) goto limit2;
  ------------------
  |  Branch (98:9): [Folded, False: 187]
  ------------------
   99|    187|    if (PROTOBUF_PREDICT_FALSE(VarintShlAnd<6>(next(), res1, res3))) goto done2;
  ------------------
  |  |  365|    187|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 19, False: 168]
  |  |  |  Branch (365:54): [Folded, False: 187]
  |  |  |  Branch (365:63): [True: 19, False: 168]
  |  |  ------------------
  ------------------
  100|    168|    if (limit <= 7) goto limit2;
  ------------------
  |  Branch (100:9): [Folded, False: 168]
  ------------------
  101|    168|    if (PROTOBUF_PREDICT_FALSE(VarintShlAnd<7>(next(), res1, res2))) goto done2;
  ------------------
  |  |  365|    168|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 20, False: 148]
  |  |  |  Branch (365:54): [Folded, False: 168]
  |  |  |  Branch (365:63): [True: 20, False: 148]
  |  |  ------------------
  ------------------
  102|    148|    if (limit <= 8) goto limit2;
  ------------------
  |  Branch (102:9): [Folded, False: 148]
  ------------------
  103|    148|    if (PROTOBUF_PREDICT_FALSE(VarintShlAnd<8>(next(), res1, res3))) goto done2;
  ------------------
  |  |  365|    148|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 51, False: 97]
  |  |  |  Branch (365:54): [Folded, False: 148]
  |  |  |  Branch (365:63): [True: 51, False: 97]
  |  |  ------------------
  ------------------
  104|     97|    if (limit <= 9) goto limit2;
  ------------------
  |  Branch (104:9): [Folded, False: 97]
  ------------------
  105|     97|  } else {
  106|       |    // An overlong int32 is expected to span the full 10 bytes
  107|      0|    if (PROTOBUF_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  108|      0|    if (limit <= 6) goto limit2;
  ------------------
  |  Branch (108:9): [Folded, False: 0]
  ------------------
  109|      0|    if (PROTOBUF_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  110|      0|    if (limit <= 7) goto limit2;
  ------------------
  |  Branch (110:9): [Folded, False: 0]
  ------------------
  111|      0|    if (PROTOBUF_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  112|      0|    if (limit <= 8) goto limit2;
  ------------------
  |  Branch (112:9): [Folded, False: 0]
  ------------------
  113|      0|    if (PROTOBUF_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  114|      0|    if (limit <= 9) goto limit2;
  ------------------
  |  Branch (114:9): [Folded, False: 0]
  ------------------
  115|      0|  }
  116|       |
  117|       |  // For valid 64bit varints, the 10th byte/ptr[9] should be exactly 1. In this
  118|       |  // case, the continuation bit of ptr[8] already set the top bit of res3
  119|       |  // correctly, so all we have to do is check that the expected case is true.
  120|     97|  if (PROTOBUF_PREDICT_TRUE(next() == 1)) goto done2;
  ------------------
  |  |  364|     97|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 97, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 97]
  |  |  |  Branch (364:62): [True: 97, False: 0]
  |  |  ------------------
  ------------------
  121|       |
  122|      0|  if (PROTOBUF_PREDICT_FALSE(last() & 0x80)) {
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  123|       |    // If the continue bit is set, it is an unterminated varint.
  124|      0|    return nullptr;
  125|      0|  }
  126|       |
  127|       |  // A zero value of the first bit of the 10th byte represents an
  128|       |  // over-serialized varint. This case should not happen, but if does (say, due
  129|       |  // to a nonconforming serializer), deassert the continuation bit that came
  130|       |  // from ptr[8].
  131|      0|  if (kIs64BitVarint && (last() & 1) == 0) {
  ------------------
  |  Branch (131:7): [True: 0, Folded]
  |  Branch (131:25): [True: 0, False: 0]
  ------------------
  132|      0|    static constexpr int bits = 64 - 1;
  133|      0|#if defined(__GCC_ASM_FLAG_OUTPUTS__) && defined(__x86_64__)
  134|       |    // Use a small instruction since this is an uncommon code path.
  135|      0|    asm("btc %[bits], %[res3]" : [res3] "+r"(res3) : [bits] "i"(bits));
  136|       |#else
  137|       |    res3 ^= int64_t{1} << bits;
  138|       |#endif
  139|      0|  }
  140|       |
  141|    245|done2:
  142|    245|  res2 &= res3;
  143|    346|done1:
  144|    346|  res1 &= res2;
  145|    346|  PROTOBUF_ASSUME(p != nullptr);
  ------------------
  |  |  941|    346|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  146|    346|  return p;
  147|      0|limit2:
  148|      0|  res2 &= res3;
  149|      0|limit1:
  150|      0|  res1 &= res2;
  151|      0|limit0:
  152|      0|  PROTOBUF_ASSUME(p != nullptr);
  ------------------
  |  |  941|      0|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  153|      0|  PROTOBUF_ASSUME(res1 < 0);
  ------------------
  |  |  941|      0|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  154|      0|  return p;
  155|      0|}
_ZZN6google8protobuf8internal19ShiftMixParseVarintImLi10EEEPKcS4_RlENKUlvE_clEv:
   77|  2.44k|  const auto next = [&p] { return static_cast<const int8_t>(*p++); };
_ZN6google8protobuf8internal12VarintShlAndILi5EEEbalRl:
   36|    202|                                                int64_t& res) {
   37|    202|  res &= VarintShlByte<n>(byte, ones);
   38|    202|  return res >= 0;
   39|    202|}
_ZN6google8protobuf8internal13VarintShlByteILi5EEElal:
   26|    202|inline PROTOBUF_ALWAYS_INLINE int64_t VarintShlByte(int8_t byte, int64_t ones) {
   27|    202|  return static_cast<int64_t>((static_cast<uint64_t>(byte) << n * 7) |
   28|    202|                              (static_cast<uint64_t>(ones) >> (64 - n * 7)));
   29|    202|}
_ZN6google8protobuf8internal12VarintShlAndILi6EEEbalRl:
   36|    187|                                                int64_t& res) {
   37|    187|  res &= VarintShlByte<n>(byte, ones);
   38|    187|  return res >= 0;
   39|    187|}
_ZN6google8protobuf8internal13VarintShlByteILi6EEElal:
   26|    187|inline PROTOBUF_ALWAYS_INLINE int64_t VarintShlByte(int8_t byte, int64_t ones) {
   27|    187|  return static_cast<int64_t>((static_cast<uint64_t>(byte) << n * 7) |
   28|    187|                              (static_cast<uint64_t>(ones) >> (64 - n * 7)));
   29|    187|}
_ZN6google8protobuf8internal12VarintShlAndILi7EEEbalRl:
   36|    168|                                                int64_t& res) {
   37|    168|  res &= VarintShlByte<n>(byte, ones);
   38|    168|  return res >= 0;
   39|    168|}
_ZN6google8protobuf8internal13VarintShlByteILi7EEElal:
   26|    168|inline PROTOBUF_ALWAYS_INLINE int64_t VarintShlByte(int8_t byte, int64_t ones) {
   27|    168|  return static_cast<int64_t>((static_cast<uint64_t>(byte) << n * 7) |
   28|    168|                              (static_cast<uint64_t>(ones) >> (64 - n * 7)));
   29|    168|}
_ZN6google8protobuf8internal12VarintShlAndILi8EEEbalRl:
   36|    148|                                                int64_t& res) {
   37|    148|  res &= VarintShlByte<n>(byte, ones);
   38|    148|  return res >= 0;
   39|    148|}
_ZN6google8protobuf8internal13VarintShlByteILi8EEElal:
   26|    148|inline PROTOBUF_ALWAYS_INLINE int64_t VarintShlByte(int8_t byte, int64_t ones) {
   27|    148|  return static_cast<int64_t>((static_cast<uint64_t>(byte) << n * 7) |
   28|    148|                              (static_cast<uint64_t>(ones) >> (64 - n * 7)));
   29|    148|}

_ZN6google8protobuf8internal10WireFormat26VerifyUTF8StringNamedFieldEPKciNS2_9OperationEN4absl12lts_2024011611string_viewE:
  357|     29|    const absl::string_view field_name) {
  358|       |#ifdef GOOGLE_PROTOBUF_UTF8_VALIDATION_ENABLED
  359|       |  WireFormatLite::VerifyUtf8String(
  360|       |      data, size, static_cast<WireFormatLite::Operation>(op), field_name);
  361|       |#else
  362|       |  // Avoid the compiler warning about unused variables.
  363|     29|  (void)data;
  364|     29|  (void)size;
  365|     29|  (void)op;
  366|     29|  (void)field_name;
  367|     29|#endif
  368|     29|}

_ZN6google8protobuf8internal14WireFormatLite20InternalWriteMessageEiRKNS0_11MessageLiteEiPhPNS0_2io19EpsCopyOutputStreamE:
  537|    266|                                              io::EpsCopyOutputStream* stream) {
  538|    266|  target = stream->EnsureSpace(target);
  539|    266|  target = WriteTagToArray(field_number, WIRETYPE_LENGTH_DELIMITED, target);
  540|    266|  target = io::CodedOutputStream::WriteVarint32ToArray(
  541|    266|      static_cast<uint32_t>(cached_size), target);
  542|    266|  return value._InternalSerialize(target, stream);
  543|    266|}
_ZN6google8protobuf8internal14WireFormatLite8EnumSizeERKNS0_13RepeatedFieldIiEE:
  753|     17|size_t WireFormatLite::EnumSize(const RepeatedField<int>& value) {
  754|       |  // On ILP64, sizeof(int) == 8, which would require a different template.
  755|     17|  return VarintSize<false, true>(value.data(), value.size());
  756|     17|}
wire_format_lite.cc:_ZN6google8protobuf8internalL10VarintSizeILb0ELb1EiEEmPKT1_i:
  635|     17|static size_t VarintSize(const T* data, const int n) {
  636|     17|  static_assert(sizeof(T) == 4, "This routine only works for 32 bit integers");
  637|       |  // is_unsigned<T> => !ZigZag
  638|     17|  static_assert(
  639|     17|      (std::is_unsigned<T>::value ^ ZigZag) || std::is_signed<T>::value,
  640|     17|      "Cannot ZigZag encode unsigned types");
  641|       |  // is_unsigned<T> => !SignExtended
  642|     17|  static_assert(
  643|     17|      (std::is_unsigned<T>::value ^ SignExtended) || std::is_signed<T>::value,
  644|     17|      "Cannot SignExtended unsigned types");
  645|     17|  static_assert(!(SignExtended && ZigZag),
  646|     17|                "Cannot SignExtended and ZigZag on the same type");
  647|       |  // This approach is only faster when vectorized, and the vectorized
  648|       |  // implementation only works in units of the platform's vector width, and is
  649|       |  // only faster once a certain number of iterations are used. Normally the
  650|       |  // compiler generates two loops - one partially unrolled vectorized loop that
  651|       |  // processes big chunks, and a second "epilogue" scalar loop to finish up the
  652|       |  // remainder. This is done manually here so that the faster scalar
  653|       |  // implementation is used for small inputs and for the epilogue.
  654|     17|  int vectorN = n & -32;
  655|     17|  uint32_t sum = vectorN;
  656|     17|  uint32_t msb_sum = 0;
  657|     17|  int i = 0;
  658|     17|  for (; i < vectorN; i++) {
  ------------------
  |  Branch (658:10): [True: 0, False: 17]
  ------------------
  659|      0|    uint32_t x = data[i];
  660|      0|    if (ZigZag) {
  ------------------
  |  Branch (660:9): [Folded, False: 0]
  ------------------
  661|      0|      x = WireFormatLite::ZigZagEncode32(x);
  662|      0|    } else if (SignExtended) {
  ------------------
  |  Branch (662:16): [True: 0, Folded]
  ------------------
  663|      0|      msb_sum += x >> 31;
  664|      0|    }
  665|       |    // clang is so smart that it produces optimal SIMD sequence unrolling
  666|       |    // the loop 8 ints at a time. With a sequence of 4
  667|       |    // cmpres = cmpgt x, sizeclass  ( -1 or 0)
  668|       |    // sum = sum - cmpres
  669|      0|    if (x > 0x7F) sum++;
  ------------------
  |  Branch (669:9): [True: 0, False: 0]
  ------------------
  670|      0|    if (x > 0x3FFF) sum++;
  ------------------
  |  Branch (670:9): [True: 0, False: 0]
  ------------------
  671|      0|    if (x > 0x1FFFFF) sum++;
  ------------------
  |  Branch (671:9): [True: 0, False: 0]
  ------------------
  672|      0|    if (x > 0xFFFFFFF) sum++;
  ------------------
  |  Branch (672:9): [True: 0, False: 0]
  ------------------
  673|      0|  }
  674|     17|#ifdef __clang__
  675|       |// Clang is not smart enough to see that this loop doesn't run many times
  676|       |// NOLINTNEXTLINE(google3-runtime-pragma-loop-hint): b/315043579
  677|     17|#pragma clang loop vectorize(disable) unroll(disable) interleave(disable)
  678|     17|#endif
  679|     36|  for (; i < n; i++) {
  ------------------
  |  Branch (679:10): [True: 19, False: 17]
  ------------------
  680|     19|    uint32_t x = data[i];
  681|     19|    if (ZigZag) {
  ------------------
  |  Branch (681:9): [Folded, False: 19]
  ------------------
  682|      0|      sum += WireFormatLite::SInt32Size(x);
  683|     19|    } else if (SignExtended) {
  ------------------
  |  Branch (683:16): [True: 19, Folded]
  ------------------
  684|     19|      sum += WireFormatLite::Int32Size(x);
  685|     19|    } else {
  686|      0|      sum += WireFormatLite::UInt32Size(x);
  687|      0|    }
  688|     19|  }
  689|     17|  if (SignExtended) sum += msb_sum * 5;
  ------------------
  |  Branch (689:7): [True: 17, Folded]
  ------------------
  690|     17|  return sum;
  691|     17|}

_ZN6google8protobuf8internal14WireFormatLite20WireTypeForFieldTypeENS2_9FieldTypeE:
  141|      8|      WireFormatLite::FieldType type) {
  142|      8|    return kWireTypeForFieldType[type];
  143|      8|  }
_ZN6google8protobuf8internal14WireFormatLite18FieldTypeToCppTypeENS2_9FieldTypeE:
  823|  1.24k|    FieldType type) {
  824|  1.24k|  return kFieldTypeToCppTypeMap[type];
  825|  1.24k|}
_ZN6google8protobuf8internal14WireFormatLite7TagSizeEiNS2_9FieldTypeE:
  841|    474|                                      WireFormatLite::FieldType type) {
  842|    474|  size_t result = io::CodedOutputStream::VarintSize32(
  843|    474|      static_cast<uint32_t>(field_number << kTagTypeBits));
  844|    474|  if (type == TYPE_GROUP) {
  ------------------
  |  Branch (844:7): [True: 0, False: 474]
  ------------------
  845|       |    // Groups have both a start and an end tag.
  846|      0|    return result * 2;
  847|    474|  } else {
  848|    474|    return result;
  849|    474|  }
  850|    474|}
_ZN6google8protobuf8internal14WireFormatLite9Int32SizeEi:
 1781|     19|inline size_t WireFormatLite::Int32Size(int32_t value) {
 1782|     19|  return io::CodedOutputStream::VarintSize32SignExtended(value);
 1783|     19|}
_ZN6google8protobuf8internal14WireFormatLite10StringSizeERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
 1825|     29|inline size_t WireFormatLite::StringSize(const std::string& value) {
 1826|     29|  return LengthDelimitedSize(value.size());
 1827|     29|}
_ZN6google8protobuf8internal14WireFormatLite11MessageSizeINS0_27FieldOptions_EditionDefaultEEEmRKT_:
 1855|     18|inline size_t WireFormatLite::MessageSize(const MessageType& value) {
 1856|     18|  return LengthDelimitedSize(value.ByteSizeLong());
 1857|     18|}
_ZN6google8protobuf8internal14WireFormatLite11MessageSizeINS0_27FieldOptions_FeatureSupportEEEmRKT_:
 1855|      9|inline size_t WireFormatLite::MessageSize(const MessageType& value) {
 1856|      9|  return LengthDelimitedSize(value.ByteSizeLong());
 1857|      9|}

feature_resolver.cc:_ZN4absl12lts_2024011613c_upper_boundIKN6google8protobuf16RepeatedPtrFieldINS3_43FeatureSetDefaults_FeatureSetEditionDefaultEEES5_RZNS3_15FeatureResolver6CreateENS3_7EditionERKNS3_18FeatureSetDefaultsEE3$_0EEDTcl5beginclsr3stdE7declvalIRT_EEEESG_RKT0_OT1_:
 1086|      4|    Sequence& sequence, const T& value, LessThan&& comp) {
 1087|      4|  return std::upper_bound(container_algorithm_internal::c_begin(sequence),
 1088|      4|                          container_algorithm_internal::c_end(sequence), value,
 1089|      4|                          std::forward<LessThan>(comp));
 1090|      4|}
_ZN4absl12lts_2024011628container_algorithm_internal7c_beginIKN6google8protobuf16RepeatedPtrFieldINS4_43FeatureSetDefaults_FeatureSetEditionDefaultEEEEEDTcl5beginclsr3stdE7declvalIRT_EEEESA_:
  100|      4|ContainerIter<C> c_begin(C& c) {
  101|      4|  return begin(c);
  102|      4|}
_ZN4absl12lts_2024011628container_algorithm_internal5c_endIKN6google8protobuf16RepeatedPtrFieldINS4_43FeatureSetDefaults_FeatureSetEditionDefaultEEEEEDTcl5beginclsr3stdE7declvalIRT_EEEESA_:
  105|      4|ContainerIter<C> c_end(C& c) {
  106|      4|  return end(c);
  107|      4|}

_ZN4absl12lts_202401169once_flagC2Ev:
   89|     59|  constexpr once_flag() : control_(0) {}
_ZN4absl12lts_2024011613base_internal16SchedulingHelperC2ENS1_14SchedulingModeE:
  116|      4|  explicit SchedulingHelper(base_internal::SchedulingMode mode) : mode_(mode) {
  117|      4|    if (mode_ == base_internal::SCHEDULE_KERNEL_ONLY) {
  ------------------
  |  Branch (117:9): [True: 0, False: 4]
  ------------------
  118|      0|      guard_result_ = base_internal::SchedulingGuard::DisableRescheduling();
  119|      0|    }
  120|      4|  }
_ZN4absl12lts_2024011613base_internal16SchedulingHelperD2Ev:
  122|      4|  ~SchedulingHelper() {
  123|      4|    if (mode_ == base_internal::SCHEDULE_KERNEL_ONLY) {
  ------------------
  |  Branch (123:9): [True: 0, False: 4]
  ------------------
  124|      0|      base_internal::SchedulingGuard::EnableRescheduling(guard_result_);
  125|      0|    }
  126|      4|  }
_ZN4absl12lts_2024011613base_internal11ControlWordEPNS0_9once_flagE:
  193|  52.1k|    absl::Nonnull<once_flag*> flag) {
  194|  52.1k|  return &flag->control_;
  195|  52.1k|}
message.cc:_ZN4absl12lts_202401169call_onceIZN6google8protobuf7Message15GetMetadataImplERKNS3_8internal13ClassDataFullEE3$_0JEEEvRNS0_9once_flagEOT_DpOT0_:
  212|  52.1k|void call_once(absl::once_flag& flag, Callable&& fn, Args&&... args) {
  213|  52.1k|  std::atomic<uint32_t>* once = base_internal::ControlWord(&flag);
  214|  52.1k|  uint32_t s = once->load(std::memory_order_acquire);
  215|  52.1k|  if (ABSL_PREDICT_FALSE(s != base_internal::kOnceDone)) {
  ------------------
  |  |  178|  52.1k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 4, False: 52.1k]
  |  |  |  Branch (178:49): [Folded, False: 52.1k]
  |  |  |  Branch (178:58): [True: 4, False: 52.1k]
  |  |  ------------------
  ------------------
  216|      4|    base_internal::CallOnceImpl(
  217|      4|        once, base_internal::SCHEDULE_COOPERATIVE_AND_KERNEL,
  218|      4|        std::forward<Callable>(fn), std::forward<Args>(args)...);
  219|      4|  }
  220|  52.1k|}
message.cc:_ZN4absl12lts_2024011613base_internal12CallOnceImplIZN6google8protobuf7Message15GetMetadataImplERKNS4_8internal13ClassDataFullEE3$_0JEEEvPNSt3__16atomicIjEENS1_14SchedulingModeEOT_DpOT0_:
  153|      4|    Args&&... args) {
  154|       |#ifndef NDEBUG
  155|       |  {
  156|       |    uint32_t old_control = control->load(std::memory_order_relaxed);
  157|       |    if (old_control != kOnceInit &&
  158|       |        old_control != kOnceRunning &&
  159|       |        old_control != kOnceWaiter &&
  160|       |        old_control != kOnceDone) {
  161|       |      ABSL_RAW_LOG(FATAL, "Unexpected value for control word: 0x%lx",
  162|       |                   static_cast<unsigned long>(old_control));  // NOLINT
  163|       |    }
  164|       |  }
  165|       |#endif  // NDEBUG
  166|      4|  static const base_internal::SpinLockWaitTransition trans[] = {
  167|      4|      {kOnceInit, kOnceRunning, true},
  168|      4|      {kOnceRunning, kOnceWaiter, false},
  169|      4|      {kOnceDone, kOnceDone, true}};
  170|       |
  171|       |  // Must do this before potentially modifying control word's state.
  172|      4|  base_internal::SchedulingHelper maybe_disable_scheduling(scheduling_mode);
  173|       |  // Short circuit the simplest case to avoid procedure call overhead.
  174|       |  // The base_internal::SpinLockWait() call returns either kOnceInit or
  175|       |  // kOnceDone. If it returns kOnceDone, it must have loaded the control word
  176|       |  // with std::memory_order_acquire and seen a value of kOnceDone.
  177|      4|  uint32_t old_control = kOnceInit;
  178|      4|  if (control->compare_exchange_strong(old_control, kOnceRunning,
  ------------------
  |  Branch (178:7): [True: 4, False: 0]
  ------------------
  179|      4|                                       std::memory_order_relaxed) ||
  180|      0|      base_internal::SpinLockWait(control, ABSL_ARRAYSIZE(trans), trans,
  ------------------
  |  |   45|      0|  (sizeof(::absl::macros_internal::ArraySizeHelper(array)))
  ------------------
  |  Branch (180:7): [True: 0, False: 0]
  ------------------
  181|      4|                                  scheduling_mode) == kOnceInit) {
  182|      4|    base_internal::invoke(std::forward<Callable>(fn),
  183|      4|                          std::forward<Args>(args)...);
  184|      4|    old_control =
  185|      4|        control->exchange(base_internal::kOnceDone, std::memory_order_release);
  186|      4|    if (old_control == base_internal::kOnceWaiter) {
  ------------------
  |  Branch (186:9): [True: 0, False: 4]
  ------------------
  187|      0|      base_internal::SpinLockWake(control, true);
  188|      0|    }
  189|      4|  }  // else *control is already kOnceDone
  190|      4|}

_ZN4absl12lts_202401168bit_castIPKvN6google8protobuf8internal12ExtensionSet9Extension7PointerETnNSt3__19enable_ifIXaaaaeqstT_stT0_sr3std21is_trivially_copyableISD_EE5valuesr3std21is_trivially_copyableISC_EE5valueEiE4typeELi0EEESC_RKSD_:
  163|  1.71k|inline constexpr Dest bit_cast(const Source& source) {
  164|  1.71k|  return __builtin_bit_cast(Dest, source);
  165|  1.71k|}

message.cc:_ZN4absl12lts_2024011613base_internal6invokeIZN6google8protobuf7Message15GetMetadataImplERKNS4_8internal13ClassDataFullEE3$_0JEEEDTclsr7InvokerIT_DpT0_E4typeE6Invokeclsr3stdE7declvalISB_EEspclsr3stdE7declvalISC_EEEEOSB_DpOSC_:
  211|      4|invoke_result_t<F, Args...> invoke(F&& f, Args&&... args) {
  212|      4|  return Invoker<F, Args...>::type::Invoke(std::forward<F>(f),
  213|      4|                                           std::forward<Args>(args)...);
  214|      4|}
message.cc:_ZN4absl12lts_2024011613base_internal8Callable6InvokeIZN6google8protobuf7Message15GetMetadataImplERKNS5_8internal13ClassDataFullEE3$_0JEEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSC_DpOSD_:
  184|      4|      F&& f, Args&&... args) {
  185|      4|    return std::forward<F>(f)(std::forward<Args>(args)...);
  186|      4|  }

_ZN4absl12lts_2024011613base_internal15UnalignedLoad32EPKv:
   45|  19.7k|inline uint32_t UnalignedLoad32(absl::Nonnull<const void *> p) {
   46|  19.7k|  uint32_t t;
   47|  19.7k|  memcpy(&t, p, sizeof t);
   48|  19.7k|  return t;
   49|  19.7k|}
_ZN4absl12lts_2024011613base_internal15UnalignedLoad64EPKv:
   51|  11.7k|inline uint64_t UnalignedLoad64(absl::Nonnull<const void *> p) {
   52|  11.7k|  uint64_t t;
   53|  11.7k|  memcpy(&t, p, sizeof t);
   54|  11.7k|  return t;
   55|  11.7k|}

_ZN4absl12lts_2024011623PrefetchToLocalCacheNtaEPKv:
  151|    508|    const void* addr) {
  152|    508|  __builtin_prefetch(addr, 0, 0);
  153|    508|}
_ZN4absl12lts_2024011628PrefetchToLocalCacheForWriteEPKv:
  156|  4.69k|    const void* addr) {
  157|       |  // [x86] gcc/clang don't generate PREFETCHW for __builtin_prefetch(.., 1)
  158|       |  // unless -march=broadwell or newer; this is not generally the default, so we
  159|       |  // manually emit prefetchw. PREFETCHW is recognized as a no-op on older Intel
  160|       |  // processors and has been present on AMD processors since the K6-2.
  161|  4.69k|#if defined(__x86_64__) && !defined(__PRFCHW__)
  162|  4.69k|  asm("prefetchw %0" : : "m"(*reinterpret_cast<const char*>(addr)));
  163|       |#else
  164|       |  __builtin_prefetch(addr, 1, 3);
  165|       |#endif
  166|  4.69k|}

descriptor.cc:_ZN4absl12lts_2024011611MakeCleanupIJEZN6google8protobuf12_GLOBAL__N_115DisableTrackingEvE3$_0EENS0_7CleanupINS0_16cleanup_internal3TagET0_EES9_:
  127|     28|absl::Cleanup<cleanup_internal::Tag, Callback> MakeCleanup(Callback callback) {
  128|     28|  static_assert(cleanup_internal::WasDeduced<cleanup_internal::Tag, Args...>(),
  129|     28|                "Explicit template parameters are not supported.");
  130|       |
  131|     28|  static_assert(cleanup_internal::ReturnsVoid<Callback>(),
  132|     28|                "Callbacks that return values are not supported.");
  133|       |
  134|     28|  return {std::move(callback)};
  135|     28|}
descriptor.cc:_ZN4absl12lts_202401167CleanupINS0_16cleanup_internal3TagEZN6google8protobuf12_GLOBAL__N_115DisableTrackingEvE3$_0EC2ES7_:
   89|     28|  Cleanup(Callback callback) : storage_(std::move(callback)) {}  // NOLINT
descriptor.cc:_ZN4absl12lts_202401167CleanupINS0_16cleanup_internal3TagEZN6google8protobuf12_GLOBAL__N_115DisableTrackingEvE3$_0ED2Ev:
  104|     28|  ~Cleanup() {
  105|     28|    if (storage_.IsCallbackEngaged()) {
  ------------------
  |  Branch (105:9): [True: 28, False: 0]
  ------------------
  106|     28|      storage_.InvokeCallback();
  107|     28|      storage_.DestroyCallback();
  108|     28|    }
  109|     28|  }

descriptor.cc:_ZN4absl12lts_2024011616cleanup_internal7StorageIZN6google8protobuf12_GLOBAL__N_115DisableTrackingEvE3$_0EC2ES6_:
   50|     28|  explicit Storage(Callback callback) {
   51|       |    // Placement-new into a character buffer is used for eager destruction when
   52|       |    // the cleanup is invoked or cancelled. To ensure this optimizes well, the
   53|       |    // behavior is implemented locally instead of using an absl::optional.
   54|     28|    ::new (GetCallbackBuffer()) Callback(std::move(callback));
   55|     28|    is_callback_engaged_ = true;
   56|     28|  }
descriptor.cc:_ZN4absl12lts_2024011616cleanup_internal7StorageIZN6google8protobuf12_GLOBAL__N_115DisableTrackingEvE3$_0E17GetCallbackBufferEv:
   73|     84|  void* GetCallbackBuffer() { return static_cast<void*>(+callback_buffer_); }
descriptor.cc:_ZNK4absl12lts_2024011616cleanup_internal7StorageIZN6google8protobuf12_GLOBAL__N_115DisableTrackingEvE3$_0E17IsCallbackEngagedEv:
   79|     28|  bool IsCallbackEngaged() const { return is_callback_engaged_; }
descriptor.cc:_ZN4absl12lts_2024011616cleanup_internal7StorageIZN6google8protobuf12_GLOBAL__N_115DisableTrackingEvE3$_0E14InvokeCallbackEv:
   86|     28|  void InvokeCallback() ABSL_NO_THREAD_SAFETY_ANALYSIS {
   87|     28|    std::move(GetCallback())();
   88|     28|  }
descriptor.cc:_ZN4absl12lts_2024011616cleanup_internal7StorageIZN6google8protobuf12_GLOBAL__N_115DisableTrackingEvE3$_0E11GetCallbackEv:
   75|     56|  Callback& GetCallback() {
   76|     56|    return *reinterpret_cast<Callback*>(GetCallbackBuffer());
   77|     56|  }
descriptor.cc:_ZN4absl12lts_2024011616cleanup_internal7StorageIZN6google8protobuf12_GLOBAL__N_115DisableTrackingEvE3$_0E15DestroyCallbackEv:
   81|     28|  void DestroyCallback() {
   82|     28|    is_callback_engaged_ = false;
   83|     28|    GetCallback().~Callback();
   84|     28|  }

_ZN4absl12lts_202401169btree_mapINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS5_15FieldDescriptorENS2_4lessIS9_EENS2_9allocatorINS3_IKS9_SC_EEEEEC2Ev:
  134|      2|  btree_map() {}
_ZN4absl12lts_2024011618container_internal10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS6_15FieldDescriptorENS3_4lessISA_EENS3_9allocatorINS4_IKSA_SD_EEEELi256ELb0EE3keyISI_EEDTdtfp_5firstERKT_:
  869|      1|      -> decltype((value.first)) {
  870|      1|    return value.first;
  871|      1|  }

_ZN4absl12lts_2024011618container_internal10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS6_11FileCompareENSt3__19allocatorIS7_EELi256ELb0EE3keyEPKS7_:
  812|      3|  static const Key &key(const slot_type *slot) { return *slot; }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEE9constructINSt3__19allocatorIS7_EEJS7_EEEvPT_PS7_DpOT0_:
  778|     10|  static void construct(Alloc *alloc, slot_type *slot, Args &&...args) {
  779|     10|    absl::allocator_traits<Alloc>::construct(*alloc, slot,
  780|     10|                                             std::forward<Args>(args)...);
  781|     10|  }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEE7elementEPS7_:
  774|     11|  static value_type &element(slot_type *slot) { return *slot; }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEE7destroyINSt3__19allocatorIS7_EEEEvPT_PS7_:
  794|      8|  static void destroy(Alloc *alloc, slot_type *slot) {
  795|      8|    absl::allocator_traits<Alloc>::destroy(*alloc, slot);
  796|      8|  }
_ZN4absl12lts_2024011618container_internal10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS6_11FileCompareENSt3__19allocatorIS7_EELi256ELb0EE3keyIS7_EERKT_SG_:
  809|      6|  static const V &key(const V &value) {
  810|      6|    return value;
  811|      6|  }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEE9constructINSt3__19allocatorIS7_EEJS7_EEEvPT_PS7_DpOT0_:
  778|      1|  static void construct(Alloc *alloc, slot_type *slot, Args &&...args) {
  779|      1|    absl::allocator_traits<Alloc>::construct(*alloc, slot,
  780|      1|                                             std::forward<Args>(args)...);
  781|      1|  }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEE7elementEPS7_:
  774|      1|  static value_type &element(slot_type *slot) { return *slot; }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEE7destroyINSt3__19allocatorIS7_EEEEvPT_PS7_:
  794|      1|  static void destroy(Alloc *alloc, slot_type *slot) {
  795|      1|    absl::allocator_traits<Alloc>::destroy(*alloc, slot);
  796|      1|  }
_ZN4absl12lts_2024011618container_internal10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS6_16ExtensionCompareENSt3__19allocatorIS7_EELi256ELb0EE3keyIS7_EERKT_SG_:
  809|      1|  static const V &key(const V &value) {
  810|      1|    return value;
  811|      1|  }
_ZN4absl12lts_2024011618container_internal10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS6_13SymbolCompareENSt3__19allocatorIS7_EELi256ELb0EE3keyEPKS7_:
  812|    351|  static const Key &key(const slot_type *slot) { return *slot; }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEE7elementEPKS7_:
  775|    108|  static const value_type &element(const slot_type *slot) { return *slot; }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEE9constructINSt3__19allocatorIS7_EEJS7_EEEvPT_PS7_DpOT0_:
  778|    235|  static void construct(Alloc *alloc, slot_type *slot, Args &&...args) {
  779|    235|    absl::allocator_traits<Alloc>::construct(*alloc, slot,
  780|    235|                                             std::forward<Args>(args)...);
  781|    235|  }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEE7elementEPS7_:
  774|    323|  static value_type &element(slot_type *slot) { return *slot; }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEE7destroyINSt3__19allocatorIS7_EEEEvPT_PS7_:
  794|    288|  static void destroy(Alloc *alloc, slot_type *slot) {
  795|    288|    absl::allocator_traits<Alloc>::destroy(*alloc, slot);
  796|    288|  }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEE9constructINSt3__19allocatorIS7_EEEEvPT_PS7_SF_:
  784|      8|  static void construct(Alloc *alloc, slot_type *slot, slot_type *other) {
  785|      8|    absl::allocator_traits<Alloc>::construct(*alloc, slot, std::move(*other));
  786|      8|  }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEE9constructINSt3__19allocatorIS7_EEJRKS7_EEEvPT_PS7_DpOT0_:
  778|     64|  static void construct(Alloc *alloc, slot_type *slot, Args &&...args) {
  779|     64|    absl::allocator_traits<Alloc>::construct(*alloc, slot,
  780|     64|                                             std::forward<Args>(args)...);
  781|     64|  }
_ZN4absl12lts_2024011618container_internal10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS6_13SymbolCompareENSt3__19allocatorIS7_EELi256ELb0EE3keyIS7_EERKT_SG_:
  809|     64|  static const V &key(const V &value) {
  810|     64|    return value;
  811|     64|  }

_ZN4absl12lts_2024011613flat_hash_mapIPKN6google8protobuf14FileDescriptorENSt3__16vectorINS3_14DescriptorPool18DeferredValidation13LifetimesInfoENS7_9allocatorISB_EEEENS0_18container_internal6HashEqIS6_vE4HashENSH_2EqENSC_INS7_4pairIKS6_SE_EEEEEC2Ev:
  159|      4|  flat_hash_map() {}
_ZN4absl12lts_2024011613flat_hash_mapINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeENS0_18container_internal10StringHashENSD_8StringEqENS6_INS2_4pairIKS8_SC_EEEEEC2Ev:
  159|      2|  flat_hash_map() {}
_ZN4absl12lts_2024011613flat_hash_mapINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS2_10unique_ptrIN6google8protobuf10FeatureSetENS2_14default_deleteISC_EEEENS0_18container_internal10StringHashENSG_8StringEqENS6_INS2_4pairIKS8_SF_EEEEEC2Ev:
  159|      2|  flat_hash_map() {}
_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEE5applyINS1_12raw_hash_setISE_NS1_10StringHashENS1_8StringEqENS7_INS3_4pairIKS9_SD_EEEEE19EmplaceDecomposableEJRKNSJ_IS9_SD_EEEEEDTclsr4absl18container_internalE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSS_DpOST_:
  590|     32|  apply(F&& f, Args&&... args) {
  591|     32|    return absl::container_internal::DecomposePair(std::forward<F>(f),
  592|     32|                                                   std::forward<Args>(args)...);
  593|     32|  }
_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEE5applyINS1_12raw_hash_setISE_NS1_10StringHashENS1_8StringEqENS7_INS3_4pairIKS9_SD_EEEEE12EqualElementIS9_EEJRSL_EEEDTclsr4absl18container_internalE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSR_DpOSS_:
  590|      5|  apply(F&& f, Args&&... args) {
  591|      5|    return absl::container_internal::DecomposePair(std::forward<F>(f),
  592|      5|                                                   std::forward<Args>(args)...);
  593|      5|  }
_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEE7elementEPNS1_13map_slot_typeIS9_SD_EE:
  597|     34|  static std::pair<const K, V>& element(slot_type* slot) { return slot->value; }
_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEE8transferINS7_INS3_4pairIKS9_SD_EEEEEEDaPT_PNS1_13map_slot_typeIS9_SD_EESO_:
  583|     50|                       slot_type* old_slot) {
  584|     50|    return slot_policy::transfer(alloc, new_slot, old_slot);
  585|     50|  }
_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEE5applyINS1_12raw_hash_setISE_NS1_10StringHashENS1_8StringEqENS7_INS3_4pairIKS9_SD_EEEEE11HashElementEJRSL_EEEDTclsr4absl18container_internalE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSQ_DpOSR_:
  590|     28|  apply(F&& f, Args&&... args) {
  591|     28|    return absl::container_internal::DecomposePair(std::forward<F>(f),
  592|     28|                                                   std::forward<Args>(args)...);
  593|     28|  }
_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEE9constructINS7_INS3_4pairIKS9_SD_EEEEJRKNS3_21piecewise_construct_tENS3_5tupleIJRSH_EEENSN_IJRKSD_EEEEEEvPT_PNS1_13map_slot_typeIS9_SD_EEDpOT0_:
  572|     32|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  573|     32|    slot_policy::construct(alloc, slot, std::forward<Args>(args)...);
  574|     32|  }
_ZN4absl12lts_2024011613flat_hash_mapINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPKN6google8protobuf23SourceCodeInfo_LocationENS0_18container_internal10StringHashENSE_8StringEqENS6_INS2_4pairIKS8_SD_EEEEEC2Ev:
  159|      4|  flat_hash_map() {}
_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISD_EEEEE5valueEPNS3_4pairIKS9_SG_EE:
  599|    239|  static V& value(std::pair<const K, V>* kv) { return kv->second; }
_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISD_EEEEE7elementEPNS1_13map_slot_typeIS9_SG_EE:
  597|    474|  static std::pair<const K, V>& element(slot_type* slot) { return slot->value; }
_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISD_EEEEE5applyINS1_12raw_hash_setISH_NS1_10StringHashENS1_8StringEqENS7_INS3_4pairIKS9_SG_EEEEE12EqualElementIS9_EEJRSO_EEEDTclsr4absl18container_internalE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSU_DpOSV_:
  590|    235|  apply(F&& f, Args&&... args) {
  591|    235|    return absl::container_internal::DecomposePair(std::forward<F>(f),
  592|    235|                                                   std::forward<Args>(args)...);
  593|    235|  }
_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISD_EEEEE8transferINS7_INS3_4pairIKS9_SG_EEEEEEDaPT_PNS1_13map_slot_typeIS9_SG_EESR_:
  583|      4|                       slot_type* old_slot) {
  584|      4|    return slot_policy::transfer(alloc, new_slot, old_slot);
  585|      4|  }
_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISD_EEEEE9constructINS7_INS3_4pairIKS9_SG_EEEEJRKNS3_21piecewise_construct_tENS3_5tupleIJOS9_EEENSQ_IJEEEEEEvPT_PNS1_13map_slot_typeIS9_SG_EEDpOT0_:
  572|      4|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  573|      4|    slot_policy::construct(alloc, slot, std::forward<Args>(args)...);
  574|      4|  }
_ZN4absl12lts_2024011613flat_hash_mapINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEbNS0_18container_internal10StringHashENS9_8StringEqENS6_INS2_4pairIKS8_bEEEEEC2Ev:
  159|      2|  flat_hash_map() {}
_ZN4absl12lts_2024011613flat_hash_mapIPKN6google8protobuf10DescriptorENS3_17DescriptorBuilder12MessageHintsENS0_18container_internal6HashEqIS6_vE4HashENSB_2EqENSt3__19allocatorINSE_4pairIKS6_S8_EEEEEC2Ev:
  159|      4|  flat_hash_map() {}
_ZN4absl12lts_2024011613flat_hash_mapINSt3__16vectorIiNS2_9allocatorIiEEEES6_NS0_13hash_internal4HashIS6_EENS2_8equal_toIS6_EENS4_INS2_4pairIKS6_S6_EEEEEC2Ev:
  159|      4|  flat_hash_map() {}
_ZN4absl12lts_2024011613flat_hash_mapINSt3__16vectorIiNS2_9allocatorIiEEEEiNS0_13hash_internal4HashIS6_EENS2_8equal_toIS6_EENS4_INS2_4pairIKS6_iEEEEEC2Ev:
  159|      4|  flat_hash_map() {}
_ZN4absl12lts_2024011613flat_hash_mapIPKN6google8protobuf10DescriptorEPKNS3_21DynamicMessageFactory8TypeInfoENS0_18container_internal6HashEqIS6_vE4HashENSD_2EqENSt3__19allocatorINSG_4pairIKS6_SA_EEEEEC2Ev:
  159|      6|  flat_hash_map() {}
message.cc:_ZN4absl12lts_2024011613flat_hash_mapIPKN6google8protobuf10DescriptorENS3_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrENS0_18container_internal6HashEqIS6_vE4HashENSC_2EqENSt3__19allocatorINSF_4pairIKS6_S9_EEEEEC2Ev:
  159|      2|  flat_hash_map() {}

extension_set.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEE5applyINS1_12raw_hash_setIS7_NS5_12_GLOBAL__N_115ExtensionHasherENSA_11ExtensionEqENSt3__19allocatorIS6_EEE12EqualElementINSA_16ExtensionInfoKeyEEEJRS6_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSL_DpOSM_:
  486|      8|  apply(F&& f, Args&&... args) {
  487|      8|    return absl::container_internal::DecomposeValue(
  488|      8|        std::forward<F>(f), std::forward<Args>(args)...);
  489|      8|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEE7elementEPS6_:
  481|     16|  static T& element(slot_type* slot) { return *slot; }
extension_set.cc:_ZN4absl12lts_2024011613flat_hash_setIN6google8protobuf8internal13ExtensionInfoENS4_12_GLOBAL__N_115ExtensionHasherENS6_11ExtensionEqENSt3__19allocatorIS5_EEEC2Ev:
  151|      1|  flat_hash_set() {}
extension_set.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEE5applyINS1_12raw_hash_setIS7_NS5_12_GLOBAL__N_115ExtensionHasherENSA_11ExtensionEqENSt3__19allocatorIS6_EEE19EmplaceDecomposableEJRKS6_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSK_DpOSL_:
  486|      1|  apply(F&& f, Args&&... args) {
  487|      1|    return absl::container_internal::DecomposeValue(
  488|      1|        std::forward<F>(f), std::forward<Args>(args)...);
  489|      1|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEE9constructINSt3__19allocatorIS6_EEJRKS6_EEEvPT_PS6_DpOT0_:
  471|      1|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  472|      1|    absl::allocator_traits<Allocator>::construct(*alloc, slot,
  473|      1|                                                 std::forward<Args>(args)...);
  474|      1|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEE7destroyINSt3__19allocatorIS7_EEEEvPT_PS7_:
  477|      4|  static void destroy(Allocator* alloc, slot_type* slot) {
  478|      4|    absl::allocator_traits<Allocator>::destroy(*alloc, slot);
  479|      4|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf6SymbolEE7destroyINSt3__19allocatorIS5_EEEEvPT_PS5_:
  477|  1.79k|  static void destroy(Allocator* alloc, slot_type* slot) {
  478|  1.79k|    absl::allocator_traits<Allocator>::destroy(*alloc, slot);
  479|  1.79k|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEE7destroyINSt3__19allocatorIS7_EEEEvPT_PS7_:
  477|    134|  static void destroy(Allocator* alloc, slot_type* slot) {
  478|    134|    absl::allocator_traits<Allocator>::destroy(*alloc, slot);
  479|    134|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEE7destroyINSt3__19allocatorIS7_EEEEvPT_PS7_:
  477|    120|  static void destroy(Allocator* alloc, slot_type* slot) {
  478|    120|    absl::allocator_traits<Allocator>::destroy(*alloc, slot);
  479|    120|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf6SymbolEE5applyINS1_12raw_hash_setIS6_NS4_12_GLOBAL__N_120SymbolByFullNameHashENS9_18SymbolByFullNameEqENSt3__19allocatorIS5_EEE12EqualElementINS9_13FullNameQueryEEEJRS5_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSK_DpOSL_:
  486|    106|  apply(F&& f, Args&&... args) {
  487|    106|    return absl::container_internal::DecomposeValue(
  488|    106|        std::forward<F>(f), std::forward<Args>(args)...);
  489|    106|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf6SymbolEE7elementEPS5_:
  481|  3.86k|  static T& element(slot_type* slot) { return *slot; }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEE5applyINS1_12raw_hash_setIS8_NS4_12_GLOBAL__N_121DescriptorsByNameHashIS5_EENSB_19DescriptorsByNameEqIS5_EENSt3__19allocatorIS7_EEE12EqualElementINS0_11string_viewEEEJRS7_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSO_DpOSP_:
  486|      5|  apply(F&& f, Args&&... args) {
  487|      5|    return absl::container_internal::DecomposeValue(
  488|      5|        std::forward<F>(f), std::forward<Args>(args)...);
  489|      5|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEE7elementEPS7_:
  481|     14|  static T& element(slot_type* slot) { return *slot; }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEE7elementEPS7_:
  481|    224|  static T& element(slot_type* slot) { return *slot; }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEE7elementEPS7_:
  481|    253|  static T& element(slot_type* slot) { return *slot; }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyINS0_11string_viewEE7destroyINSt3__19allocatorIS3_EEEEvPT_PS3_:
  477|      3|  static void destroy(Allocator* alloc, slot_type* slot) {
  478|      3|    absl::allocator_traits<Allocator>::destroy(*alloc, slot);
  479|      3|  }
_ZN4absl12lts_2024011613flat_hash_setINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS0_18container_internal10StringHashENS9_8StringEqENS6_IS8_EEEC2Ev:
  151|      4|  flat_hash_set() {}
_ZN4absl12lts_2024011613flat_hash_setIPKN6google8protobuf10DescriptorENS0_18container_internal6HashEqIS6_vE4HashENS9_2EqENSt3__19allocatorIS6_EEEC2Ev:
  151|      2|  flat_hash_set() {}
descriptor.cc:_ZN4absl12lts_2024011613flat_hash_setIN6google8protobuf6SymbolENS3_12_GLOBAL__N_120SymbolByFullNameHashENS5_18SymbolByFullNameEqENSt3__19allocatorIS4_EEEC2Ev:
  151|      2|  flat_hash_set() {}
descriptor.cc:_ZN4absl12lts_2024011613flat_hash_setIPKN6google8protobuf14FileDescriptorENS3_12_GLOBAL__N_121DescriptorsByNameHashIS4_EENS7_19DescriptorsByNameEqIS4_EENSt3__19allocatorIS6_EEEC2Ev:
  151|      2|  flat_hash_set() {}
descriptor.cc:_ZN4absl12lts_2024011613flat_hash_setIN6google8protobuf6SymbolENS3_12_GLOBAL__N_118SymbolByParentHashENS5_16SymbolByParentEqENSt3__19allocatorIS4_EEEC2Ev:
  151|      4|  flat_hash_set() {}
descriptor.cc:_ZN4absl12lts_2024011613flat_hash_setIPKN6google8protobuf15FieldDescriptorENS3_12_GLOBAL__N_116ParentNumberHashENS7_14ParentNumberEqENSt3__19allocatorIS6_EEEC2Ev:
  151|      4|  flat_hash_set() {}
descriptor.cc:_ZN4absl12lts_2024011613flat_hash_setIPKN6google8protobuf19EnumValueDescriptorENS3_12_GLOBAL__N_116ParentNumberHashENS7_14ParentNumberEqENSt3__19allocatorIS6_EEEC2Ev:
  151|      8|  flat_hash_set() {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf6SymbolEE5applyINS1_12raw_hash_setIS6_NS4_12_GLOBAL__N_120SymbolByFullNameHashENS9_18SymbolByFullNameEqENSt3__19allocatorIS5_EEE12EqualElementIS5_EEJRS5_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSJ_DpOSK_:
  486|     51|  apply(F&& f, Args&&... args) {
  487|     51|    return absl::container_internal::DecomposeValue(
  488|     51|        std::forward<F>(f), std::forward<Args>(args)...);
  489|     51|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEE5applyINS1_12raw_hash_setIS8_NS4_12_GLOBAL__N_116ParentNumberHashENSB_14ParentNumberEqENSt3__19allocatorIS7_EEE19EmplaceDecomposableEJRKPS5_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSM_DpOSN_:
  486|     95|  apply(F&& f, Args&&... args) {
  487|     95|    return absl::container_internal::DecomposeValue(
  488|     95|        std::forward<F>(f), std::forward<Args>(args)...);
  489|     95|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEE5applyINS1_12raw_hash_setIS8_NS4_12_GLOBAL__N_116ParentNumberHashENSB_14ParentNumberEqENSt3__19allocatorIS7_EEE12EqualElementIPS5_EEJRS7_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSM_DpOSN_:
  486|      7|  apply(F&& f, Args&&... args) {
  487|      7|    return absl::container_internal::DecomposeValue(
  488|      7|        std::forward<F>(f), std::forward<Args>(args)...);
  489|      7|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEE9constructINSt3__19allocatorIS7_EEJS7_EEEvPT_PS7_DpOT0_:
  471|    134|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  472|    134|    absl::allocator_traits<Allocator>::construct(*alloc, slot,
  473|    134|                                                 std::forward<Args>(args)...);
  474|    134|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEE5applyINS1_12raw_hash_setIS8_NS4_12_GLOBAL__N_116ParentNumberHashENSB_14ParentNumberEqENSt3__19allocatorIS7_EEE11HashElementEJRS7_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSK_DpOSL_:
  486|    112|  apply(F&& f, Args&&... args) {
  487|    112|    return absl::container_internal::DecomposeValue(
  488|    112|        std::forward<F>(f), std::forward<Args>(args)...);
  489|    112|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEE9constructINSt3__19allocatorIS7_EEJRKPS5_EEEvPT_PS7_DpOT0_:
  471|     95|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  472|     95|    absl::allocator_traits<Allocator>::construct(*alloc, slot,
  473|     95|                                                 std::forward<Args>(args)...);
  474|     95|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf6SymbolEE5applyINS1_12raw_hash_setIS6_NS4_12_GLOBAL__N_120SymbolByFullNameHashENS9_18SymbolByFullNameEqENSt3__19allocatorIS5_EEE19EmplaceDecomposableEJRKS5_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSJ_DpOSK_:
  486|    504|  apply(F&& f, Args&&... args) {
  487|    504|    return absl::container_internal::DecomposeValue(
  488|    504|        std::forward<F>(f), std::forward<Args>(args)...);
  489|    504|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf6SymbolEE9constructINSt3__19allocatorIS5_EEJS5_EEEvPT_PS5_DpOT0_:
  471|  1.79k|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  472|  1.79k|    absl::allocator_traits<Allocator>::construct(*alloc, slot,
  473|  1.79k|                                                 std::forward<Args>(args)...);
  474|  1.79k|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf6SymbolEE5applyINS1_12raw_hash_setIS6_NS4_12_GLOBAL__N_120SymbolByFullNameHashENS9_18SymbolByFullNameEqENSt3__19allocatorIS5_EEE11HashElementEJRS5_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSI_DpOSJ_:
  486|    882|  apply(F&& f, Args&&... args) {
  487|    882|    return absl::container_internal::DecomposeValue(
  488|    882|        std::forward<F>(f), std::forward<Args>(args)...);
  489|    882|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf6SymbolEE9constructINSt3__19allocatorIS5_EEJRKS5_EEEvPT_PS5_DpOT0_:
  471|  1.19k|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  472|  1.19k|    absl::allocator_traits<Allocator>::construct(*alloc, slot,
  473|  1.19k|                                                 std::forward<Args>(args)...);
  474|  1.19k|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf6SymbolEE5applyINS1_12raw_hash_setIS6_NS4_12_GLOBAL__N_118SymbolByParentHashENS9_16SymbolByParentEqENSt3__19allocatorIS5_EEE19EmplaceDecomposableEJRKS5_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSJ_DpOSK_:
  486|    688|  apply(F&& f, Args&&... args) {
  487|    688|    return absl::container_internal::DecomposeValue(
  488|    688|        std::forward<F>(f), std::forward<Args>(args)...);
  489|    688|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf6SymbolEE5applyINS1_12raw_hash_setIS6_NS4_12_GLOBAL__N_118SymbolByParentHashENS9_16SymbolByParentEqENSt3__19allocatorIS5_EEE12EqualElementIS5_EEJRS5_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSJ_DpOSK_:
  486|     56|  apply(F&& f, Args&&... args) {
  487|     56|    return absl::container_internal::DecomposeValue(
  488|     56|        std::forward<F>(f), std::forward<Args>(args)...);
  489|     56|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf6SymbolEE5applyINS1_12raw_hash_setIS6_NS4_12_GLOBAL__N_118SymbolByParentHashENS9_16SymbolByParentEqENSt3__19allocatorIS5_EEE11HashElementEJRS5_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSI_DpOSJ_:
  486|    868|  apply(F&& f, Args&&... args) {
  487|    868|    return absl::container_internal::DecomposeValue(
  488|    868|        std::forward<F>(f), std::forward<Args>(args)...);
  489|    868|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEE5applyINS1_12raw_hash_setIS8_NS4_12_GLOBAL__N_121DescriptorsByNameHashIS5_EENSB_19DescriptorsByNameEqIS5_EENSt3__19allocatorIS7_EEE19EmplaceDecomposableEJRKS7_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSN_DpOSO_:
  486|      4|  apply(F&& f, Args&&... args) {
  487|      4|    return absl::container_internal::DecomposeValue(
  488|      4|        std::forward<F>(f), std::forward<Args>(args)...);
  489|      4|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEE9constructINSt3__19allocatorIS7_EEJS7_EEEvPT_PS7_DpOT0_:
  471|      4|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  472|      4|    absl::allocator_traits<Allocator>::construct(*alloc, slot,
  473|      4|                                                 std::forward<Args>(args)...);
  474|      4|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEE9constructINSt3__19allocatorIS7_EEJRKS7_EEEvPT_PS7_DpOT0_:
  471|      4|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  472|      4|    absl::allocator_traits<Allocator>::construct(*alloc, slot,
  473|      4|                                                 std::forward<Args>(args)...);
  474|      4|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEE5applyINS1_12raw_hash_setIS8_NS4_12_GLOBAL__N_116ParentNumberHashENSB_14ParentNumberEqENSt3__19allocatorIS7_EEE19EmplaceDecomposableEJRKPS5_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSM_DpOSN_:
  486|    108|  apply(F&& f, Args&&... args) {
  487|    108|    return absl::container_internal::DecomposeValue(
  488|    108|        std::forward<F>(f), std::forward<Args>(args)...);
  489|    108|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEE5applyINS1_12raw_hash_setIS8_NS4_12_GLOBAL__N_116ParentNumberHashENSB_14ParentNumberEqENSt3__19allocatorIS7_EEE12EqualElementIPS5_EEJRS7_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSM_DpOSN_:
  486|      6|  apply(F&& f, Args&&... args) {
  487|      6|    return absl::container_internal::DecomposeValue(
  488|      6|        std::forward<F>(f), std::forward<Args>(args)...);
  489|      6|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEE9constructINSt3__19allocatorIS7_EEJS7_EEEvPT_PS7_DpOT0_:
  471|    120|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  472|    120|    absl::allocator_traits<Allocator>::construct(*alloc, slot,
  473|    120|                                                 std::forward<Args>(args)...);
  474|    120|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEE5applyINS1_12raw_hash_setIS8_NS4_12_GLOBAL__N_116ParentNumberHashENSB_14ParentNumberEqENSt3__19allocatorIS7_EEE11HashElementEJRS7_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSK_DpOSL_:
  486|     98|  apply(F&& f, Args&&... args) {
  487|     98|    return absl::container_internal::DecomposeValue(
  488|     98|        std::forward<F>(f), std::forward<Args>(args)...);
  489|     98|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEE9constructINSt3__19allocatorIS7_EEJRKPS5_EEEvPT_PS7_DpOT0_:
  471|    108|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  472|    108|    absl::allocator_traits<Allocator>::construct(*alloc, slot,
  473|    108|                                                 std::forward<Args>(args)...);
  474|    108|  }
_ZN4absl12lts_2024011613flat_hash_setIPKN6google8protobuf14FileDescriptorENS0_18container_internal6HashEqIS6_vE4HashENS9_2EqENSt3__19allocatorIS6_EEEC2Ev:
  151|      8|  flat_hash_set() {}
_ZN4absl12lts_2024011613flat_hash_setINS0_11string_viewENS0_18container_internal10StringHashENS3_8StringEqENSt3__19allocatorIS2_EEEC2Ev:
  151|     75|  flat_hash_set() {}
_ZN4absl12lts_2024011613flat_hash_setIiNS0_13hash_internal4HashIiEENSt3__18equal_toIiEENS5_9allocatorIiEEEC2Ev:
  151|      4|  flat_hash_set() {}
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyINS0_11string_viewEE5applyINS1_12raw_hash_setIS4_NS1_10StringHashENS1_8StringEqENSt3__19allocatorIS3_EEE19EmplaceDecomposableEJRKNS9_12basic_stringIcNS9_11char_traitsIcEENSA_IcEEEEEEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSL_DpOSM_:
  486|      3|  apply(F&& f, Args&&... args) {
  487|      3|    return absl::container_internal::DecomposeValue(
  488|      3|        std::forward<F>(f), std::forward<Args>(args)...);
  489|      3|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyINS0_11string_viewEE9constructINSt3__19allocatorIS3_EEJRKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEEEEvPT_PS3_DpOT0_:
  471|      3|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  472|      3|    absl::allocator_traits<Allocator>::construct(*alloc, slot,
  473|      3|                                                 std::forward<Args>(args)...);
  474|      3|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEE7destroyINSt3__19allocatorIS8_EEEEvPT_PS8_:
  477|      5|  static void destroy(Allocator* alloc, slot_type* slot) {
  478|      5|    absl::allocator_traits<Allocator>::destroy(*alloc, slot);
  479|      5|  }
message.cc:_ZN4absl12lts_2024011613flat_hash_setIPKN6google8protobuf8internal15DescriptorTableENS3_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENS9_18DescriptorByNameEqENSt3__19allocatorIS7_EEEC2Ev:
  151|      2|  flat_hash_set() {}
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEE7elementEPS8_:
  481|      5|  static T& element(slot_type* slot) { return *slot; }
message.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEE5applyINS1_12raw_hash_setIS9_NS4_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSD_18DescriptorByNameEqENSt3__19allocatorIS8_EEE19EmplaceDecomposableEJRKS8_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSN_DpOSO_:
  486|      6|  apply(F&& f, Args&&... args) {
  487|      6|    return absl::container_internal::DecomposeValue(
  488|      6|        std::forward<F>(f), std::forward<Args>(args)...);
  489|      6|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEE9constructINSt3__19allocatorIS8_EEJS8_EEEvPT_PS8_DpOT0_:
  471|      5|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  472|      5|    absl::allocator_traits<Allocator>::construct(*alloc, slot,
  473|      5|                                                 std::forward<Args>(args)...);
  474|      5|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEE9constructINSt3__19allocatorIS8_EEJRKS8_EEEvPT_PS8_DpOT0_:
  471|      6|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  472|      6|    absl::allocator_traits<Allocator>::construct(*alloc, slot,
  473|      6|                                                 std::forward<Args>(args)...);
  474|      6|  }

_ZN4absl12lts_2024011618container_internal39btree_iterator_generation_info_disabledC2Ej:
 1096|    418|  explicit btree_iterator_generation_info_disabled(uint32_t) {}
_ZN4absl12lts_2024011618container_internal39btree_iterator_generation_info_disabled17update_generationEPKv:
 1097|    151|  static void update_generation(const void *) {}
_ZN4absl12lts_2024011618container_internal39btree_iterator_generation_info_disabled10generationEv:
 1098|     64|  static uint32_t generation() { return 0; }
_ZN4absl12lts_2024011618container_internal39btree_iterator_generation_info_disabled23assert_valid_generationEPKv:
 1099|  1.26k|  static void assert_valid_generation(const void *) {}
_ZN4absl12lts_2024011618container_internal12SearchResultImLb0EEC2Em:
  479|    127|  explicit SearchResult(V v) : value(v) {}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE5emptyEv:
 1583|      1|  bool empty() const { return size_ == 0; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE7is_leafEv:
  685|      4|  bool is_leaf() const { return GetField<2>()[3] != kInternalNodeMaxCount; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE8GetFieldILm2EEEPKNS4_13tuple_elementIXT_ENS4_5tupleIJPSM_jhNS1_13map_slot_typeISB_SE_EESQ_EEEE4typeEv:
  665|     12|  inline const typename layout_type::template ElementType<N> *GetField() const {
  666|       |    assert(N < 4 || is_internal());
  667|     12|    return InternalLayout().template Pointer<N>(
  668|     12|        reinterpret_cast<const char *>(this));
  669|     12|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE14InternalLayoutEv:
  640|     23|  constexpr static layout_type InternalLayout() {
  641|     23|    return Layout(kNodeSlots, kNodeSlots + 1);
  642|     23|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE6LayoutEmm:
  627|     24|                                      const size_type child_count) {
  628|     24|    return layout_type(
  629|     24|        /*parent*/ 1,
  630|     24|        /*generation*/ BtreeGenerationsEnabled() ? 1 : 0,
  ------------------
  |  Branch (630:24): [Folded, False: 24]
  ------------------
  631|     24|        /*position, start, finish, max_count*/ 4,
  632|     24|        /*slots*/ slot_count,
  633|     24|        /*children*/ child_count);
  634|     24|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE15next_generationEv:
  747|      1|  void next_generation() {
  748|      1|    if (BtreeGenerationsEnabled()) ++*get_root_generation();
  ------------------
  |  Branch (748:9): [Folded, False: 1]
  ------------------
  749|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE4slotEm:
  672|      4|  slot_type *slot(size_type i) { return &GetField<3>()[i]; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE8GetFieldILm3EEEPNS4_13tuple_elementIXT_ENS4_5tupleIJPSM_jhNS1_13map_slot_typeISB_SE_EESQ_EEEE4typeEv:
  659|      4|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|      4|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|      4|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE5startEv:
  694|      4|  field_type start() const {
  695|       |    // TODO(ezb): when floating storage is implemented, return GetField<2>()[1];
  696|       |    assert(GetField<2>()[1] == 0);
  697|      4|    return 0;
  698|      4|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE5countEv:
  704|      1|  field_type count() const {
  705|       |    assert(finish() >= start());
  706|      1|    return finish() - start();
  707|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE8LeafSizeEm:
  643|      1|  constexpr static size_type LeafSize(const size_type slot_count = kNodeSlots) {
  644|      1|    return LeafLayout(slot_count).AllocSize();
  645|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE10LeafLayoutEm:
  637|      1|      const size_type slot_count = kNodeSlots) {
  638|      1|    return Layout(slot_count, 0);
  639|      1|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE9max_countEv:
  708|      1|  field_type max_count() const {
  709|       |    // Internal nodes have max_count==kInternalNodeMaxCount.
  710|       |    // Leaf nodes have max_count in [1, kNodeSlots].
  711|      1|    const field_type max_count = GetField<2>()[3];
  712|      1|    return max_count == field_type{kInternalNodeMaxCount}
  ------------------
  |  Branch (712:12): [True: 0, False: 1]
  ------------------
  713|      1|               ? field_type{kNodeSlots}
  714|      1|               : max_count;
  715|      1|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE6parentEv:
  718|      1|  btree_node *parent() const { return *GetField<0>(); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE8GetFieldILm0EEEPKNS4_13tuple_elementIXT_ENS4_5tupleIJPSM_jhNS1_13map_slot_typeISB_SE_EESQ_EEEE4typeEv:
  665|      1|  inline const typename layout_type::template ElementType<N> *GetField() const {
  666|       |    assert(N < 4 || is_internal());
  667|      1|    return InternalLayout().template Pointer<N>(
  668|      1|        reinterpret_cast<const char *>(this));
  669|      1|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE11is_internalEv:
  688|      2|  bool is_internal() const { return !is_leaf(); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE8positionEv:
  691|      1|  field_type position() const { return GetField<2>()[0]; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE6finishEv:
  701|      6|  field_type finish() const { return GetField<2>()[2]; }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE17mutable_allocatorEv:
 1676|      2|  allocator_type *mutable_allocator() noexcept {
 1677|      2|    return &rightmost_.template get<1>();
 1678|      2|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE9EmptyNodeEv:
 1340|      4|  static node_type *EmptyNode() {
 1341|      4|    alignas(node_type::Alignment()) static constexpr EmptyNodeType empty_node;
 1342|      4|    return const_cast<EmptyNodeType *>(&empty_node);
 1343|      4|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE17mutable_rightmostEv:
 1664|      1|  node_type *&mutable_rightmost() noexcept {
 1665|      1|    return rightmost_.template get<2>();
 1666|      1|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE12mutable_rootEv:
 1661|      1|  node_type *&mutable_root() noexcept { return root_; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE10generationEv:
  738|      1|  uint32_t generation() const {
  739|      1|    return BtreeGenerationsEnabled() ? *get_root_generation() : 0;
  ------------------
  |  Branch (739:12): [Folded, False: 1]
  ------------------
  740|      1|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE15internal_locateISB_EENS1_12SearchResultINS1_14btree_iteratorINS1_10btree_nodeISL_EERSJ_PSJ_EELb0EEERKT_:
 2898|      1|    -> SearchResult<iterator, is_key_compare_to::value> {
 2899|      1|  iterator iter(const_cast<node_type *>(root()));
 2900|      1|  for (;;) {
 2901|      1|    SearchResult<size_type, is_key_compare_to::value> res =
 2902|      1|        iter.node_->lower_bound(key, key_comp());
 2903|      1|    iter.position_ = static_cast<int>(res.value);
 2904|      1|    if (res.IsEq()) {
  ------------------
  |  Branch (2904:9): [Folded, False: 1]
  ------------------
 2905|      0|      return {iter, MatchKind::kEq};
 2906|      0|    }
 2907|       |    // Note: in the non-key-compare-to case, we don't need to walk all the way
 2908|       |    // down the tree if the keys are equal, but determining equality would
 2909|       |    // require doing an extra comparison on each node on the way down, and we
 2910|       |    // will need to go all the way to the leaf node in the expected case.
 2911|      1|    if (iter.node_->is_leaf()) {
  ------------------
  |  Branch (2911:9): [True: 1, False: 0]
  ------------------
 2912|      1|      break;
 2913|      1|    }
 2914|      0|    iter.node_ = iter.node_->child(static_cast<field_type>(iter.position_));
 2915|      0|  }
 2916|       |  // Note: in the non-key-compare-to case, the key may actually be equivalent
 2917|       |  // here (and the MatchKind::kNe is ignored).
 2918|      1|  return {iter, MatchKind::kNe};
 2919|      1|}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE4rootEv:
 1660|      1|  const node_type *root() const { return root_; }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorENS5_4lessISC_EENS5_9allocatorINS6_IKSC_SF_EEEELi256ELb0EEEEERSK_PSK_EC2EPSN_:
 1142|      1|  explicit btree_iterator(Node *n) : btree_iterator(n, n->start()) {}
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorENS5_4lessISC_EENS5_9allocatorINS6_IKSC_SF_EEEELi256ELb0EEEEERSK_PSK_EC2EPSN_i:
 1144|      1|      : btree_iterator_generation_info(n != nullptr ? n->generation()
  ------------------
  |  Branch (1144:40): [True: 1, False: 0]
  ------------------
 1145|      1|                                                    : ~uint32_t{}),
 1146|      1|        node_(n),
 1147|      1|        position_(p) {}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE11lower_boundISB_EENS1_12SearchResultImLb0EEERKT_RKNS1_19key_compare_adapterISG_SB_E15checked_compareE:
  781|      1|      const K &k, const key_compare &comp) const {
  782|      1|    return use_linear_search::value ? linear_search(k, comp)
  ------------------
  |  Branch (782:12): [Folded, False: 1]
  ------------------
  783|      1|                                    : binary_search(k, comp);
  784|      1|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE13binary_searchISB_NS1_19key_compare_adapterISG_SB_E15checked_compareEEENS1_12SearchResultImXsr23btree_is_key_compare_toIT0_SB_EE5valueEEERKT_RKSS_:
  802|      1|  binary_search(const K &k, const Compare &comp) const {
  803|      1|    return binary_search_impl(k, start(), finish(), comp,
  804|      1|                              btree_is_key_compare_to<Compare, key_type>());
  805|      1|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE18binary_search_implISB_NS1_19key_compare_adapterISG_SB_E15checked_compareEEENS1_12SearchResultImLb0EEERKT_mmRKT0_NS4_17integral_constantIbLb0EEE:
  845|      1|      std::false_type /* IsCompareTo */) const {
  846|      1|    while (s != e) {
  ------------------
  |  Branch (846:12): [True: 0, False: 1]
  ------------------
  847|      0|      const size_type mid = (s + e) >> 1;
  848|      0|      if (comp(key(mid), k)) {
  ------------------
  |  Branch (848:11): [True: 0, False: 0]
  ------------------
  849|      0|        s = mid + 1;
  850|      0|      } else {
  851|      0|        e = mid;
  852|      0|      }
  853|      0|    }
  854|      1|    return SearchResult<size_type, false>{s};
  855|      1|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE8key_compEv:
 1565|      1|  const key_compare &key_comp() const noexcept {
 1566|      1|    return rightmost_.template get<0>();
 1567|      1|  }
_ZN4absl12lts_2024011618container_internal12SearchResultINS1_14btree_iteratorINS1_10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS9_15FieldDescriptorENS6_4lessISD_EENS6_9allocatorINS7_IKSD_SG_EEEELi256ELb0EEEEERSL_PSL_EELb0EEC2ESR_NS1_9MatchKindE:
  480|      1|  SearchResult(V v, MatchKind /*match*/) : value(v) {}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE13internal_lastINS1_14btree_iteratorINS1_10btree_nodeISL_EERSJ_PSJ_EEEET_SU_:
 2802|      1|inline IterType btree<P>::internal_last(IterType iter) {
 2803|      1|  assert(iter.node_ != nullptr);
 2804|      1|  while (iter.position_ == iter.node_->finish()) {
  ------------------
  |  Branch (2804:10): [True: 1, False: 0]
  ------------------
 2805|      1|    iter.position_ = iter.node_->position();
 2806|      1|    iter.node_ = iter.node_->parent();
 2807|      1|    if (iter.node_->is_leaf()) {
  ------------------
  |  Branch (2807:9): [True: 1, False: 0]
  ------------------
 2808|      1|      iter.node_ = nullptr;
 2809|      1|      break;
 2810|      1|    }
 2811|      1|  }
 2812|      1|  iter.update_generation();
 2813|      1|  return iter;
 2814|      1|}
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorENS5_4lessISC_EENS5_9allocatorINS6_IKSC_SF_EEEELi256ELb0EEEEERSK_PSK_E17update_generationEv:
 1304|      2|  void update_generation() {
 1305|      2|    btree_iterator_generation_info::update_generation(node_);
 1306|      2|  }
_ZN4absl12lts_2024011618container_internal19key_compare_adapterINSt3__14lessINS3_4pairIPKN6google8protobuf10DescriptorEiEEEESB_E15checked_compareC2ESC_:
  227|      2|    checked_compare(Compare comp) : Base(std::move(comp)) {}  // NOLINT
_ZN4absl12lts_2024011618container_internal20checked_compare_baseINSt3__14lessINS3_4pairIPKN6google8protobuf10DescriptorEiEEEELb1EEC2ESC_:
  174|      2|  explicit checked_compare_base(Compare c) : Compare(std::move(c)) {}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEEC2ERKNS1_19key_compare_adapterISG_SB_E15checked_compareERKSK_:
 1402|      2|      : root_(EmptyNode()), rightmost_(comp, alloc, EmptyNode()), size_(0) {}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE12set_positionEh:
  676|      1|  void set_position(field_type v) { GetField<2>()[0] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE8GetFieldILm2EEEPNS4_13tuple_elementIXT_ENS4_5tupleIJPSM_jhNS1_13map_slot_typeISB_SE_EESQ_EEEE4typeEv:
  659|      5|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|      5|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|      5|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE10set_finishEh:
  678|      2|  void set_finish(field_type v) { GetField<2>()[2] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE14set_generationEj:
  743|      1|  void set_generation(uint32_t generation) {
  744|      1|    if (BtreeGenerationsEnabled()) GetField<1>()[0] = generation;
  ------------------
  |  Branch (744:9): [Folded, False: 1]
  ------------------
  745|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE10set_parentEPSM_:
  670|      1|  void set_parent(btree_node *p) { *GetField<0>() = p; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE8GetFieldILm0EEEPNS4_13tuple_elementIXT_ENS4_5tupleIJPSM_jhNS1_13map_slot_typeISB_SE_EESQ_EEEE4typeEv:
  659|      1|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|      1|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|      1|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE13insert_uniqueISB_JSJ_EEENS5_INS1_14btree_iteratorINS1_10btree_nodeISL_EERSJ_PSJ_EEbEERKT_DpOT0_:
 2278|      1|    -> std::pair<iterator, bool> {
 2279|      1|  if (empty()) {
  ------------------
  |  Branch (2279:7): [True: 1, False: 0]
  ------------------
 2280|      1|    mutable_root() = mutable_rightmost() = new_leaf_root_node(1);
 2281|      1|  }
 2282|       |
 2283|      1|  SearchResult<iterator, is_key_compare_to::value> res = internal_locate(key);
 2284|      1|  iterator iter = res.value;
 2285|       |
 2286|      1|  if (res.HasMatch()) {
  ------------------
  |  Branch (2286:7): [Folded, False: 1]
  ------------------
 2287|      0|    if (res.IsEq()) {
  ------------------
  |  Branch (2287:9): [Folded, False: 0]
  ------------------
 2288|       |      // The key already exists in the tree, do nothing.
 2289|      0|      return {iter, false};
 2290|      0|    }
 2291|      1|  } else {
 2292|      1|    iterator last = internal_last(iter);
 2293|      1|    if (last.node_ && !compare_keys(key, last.key())) {
  ------------------
  |  Branch (2293:9): [True: 0, False: 1]
  |  Branch (2293:23): [True: 0, False: 0]
  ------------------
 2294|       |      // The key already exists in the tree, do nothing.
 2295|      0|      return {last, false};
 2296|      0|    }
 2297|      1|  }
 2298|      1|  return {internal_emplace(iter, std::forward<Args>(args)...), true};
 2299|      1|}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE18new_leaf_root_nodeEh:
 1702|      1|  node_type *new_leaf_root_node(field_type max_count) {
 1703|      1|    node_type *n = allocate(node_type::LeafSize(max_count));
 1704|      1|    n->init_leaf(/*position=*/0, max_count, /*parent=*/n);
 1705|      1|    return n;
 1706|      1|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE8allocateEm:
 1685|      1|  node_type *allocate(size_type size) {
 1686|      1|    return reinterpret_cast<node_type *>(
 1687|      1|        absl::container_internal::Allocate<node_type::Alignment()>(
 1688|      1|            mutable_allocator(), size));
 1689|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE9init_leafEhhPSM_:
  954|      1|                 btree_node *parent) {
  955|      1|    set_generation(0);
  956|      1|    set_parent(parent);
  957|      1|    set_position(position);
  958|      1|    set_start(0);
  959|      1|    set_finish(0);
  960|      1|    set_max_count(max_count);
  961|      1|    absl::container_internal::SanitizerPoisonMemoryRegion(
  962|      1|        start_slot(), max_count * sizeof(slot_type));
  963|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE9set_startEh:
  677|      1|  void set_start(field_type v) { GetField<2>()[1] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE13set_max_countEh:
  680|      1|  void set_max_count(field_type v) { GetField<2>()[3] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE10start_slotEv:
  673|      1|  slot_type *start_slot() { return slot(start()); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE16internal_emplaceIJSJ_EEENS1_14btree_iteratorINS1_10btree_nodeISL_EERSJ_PSJ_EEST_DpOT_:
 2819|      1|    -> iterator {
 2820|      1|  if (iter.node_->is_internal()) {
  ------------------
  |  Branch (2820:7): [True: 0, False: 1]
  ------------------
 2821|       |    // We can't insert on an internal node. Instead, we'll insert after the
 2822|       |    // previous value which is guaranteed to be on a leaf node.
 2823|      0|    --iter;
 2824|      0|    ++iter.position_;
 2825|      0|  }
 2826|      1|  const field_type max_count = iter.node_->max_count();
 2827|      1|  allocator_type *alloc = mutable_allocator();
 2828|       |
 2829|      1|  const auto transfer_and_delete = [&](node_type *old_node,
 2830|      1|                                       node_type *new_node) {
 2831|      1|    new_node->transfer_n(old_node->count(), new_node->start(),
 2832|      1|                         old_node->start(), old_node, alloc);
 2833|      1|    new_node->set_finish(old_node->finish());
 2834|      1|    old_node->set_finish(old_node->start());
 2835|      1|    new_node->set_generation(old_node->generation());
 2836|      1|    node_type::clear_and_delete(old_node, alloc);
 2837|      1|  };
 2838|      1|  const auto replace_leaf_root_node = [&](field_type new_node_size) {
 2839|      1|    assert(iter.node_ == root());
 2840|      1|    node_type *old_root = iter.node_;
 2841|      1|    node_type *new_root = iter.node_ = new_leaf_root_node(new_node_size);
 2842|      1|    transfer_and_delete(old_root, new_root);
 2843|      1|    mutable_root() = mutable_rightmost() = new_root;
 2844|      1|  };
 2845|       |
 2846|      1|  bool replaced_node = false;
 2847|      1|  if (iter.node_->count() == max_count) {
  ------------------
  |  Branch (2847:7): [True: 0, False: 1]
  ------------------
 2848|       |    // Make room in the leaf for the new item.
 2849|      0|    if (max_count < kNodeSlots) {
  ------------------
  |  Branch (2849:9): [True: 0, False: 0]
  ------------------
 2850|       |      // Insertion into the root where the root is smaller than the full node
 2851|       |      // size. Simply grow the size of the root node.
 2852|      0|      replace_leaf_root_node(static_cast<field_type>(
 2853|      0|          (std::min)(static_cast<int>(kNodeSlots), 2 * max_count)));
 2854|      0|      replaced_node = true;
 2855|      0|    } else {
 2856|      0|      rebalance_or_split(&iter);
 2857|      0|    }
 2858|      0|  }
 2859|      1|  (void)replaced_node;
 2860|       |#if defined(ABSL_HAVE_ADDRESS_SANITIZER) || \
 2861|       |    defined(ABSL_HAVE_HWADDRESS_SANITIZER)
 2862|       |  if (!replaced_node) {
 2863|       |    assert(iter.node_->is_leaf());
 2864|       |    if (iter.node_->is_root()) {
 2865|       |      replace_leaf_root_node(max_count);
 2866|       |    } else {
 2867|       |      node_type *old_node = iter.node_;
 2868|       |      const bool was_rightmost = rightmost() == old_node;
 2869|       |      const bool was_leftmost = leftmost() == old_node;
 2870|       |      node_type *parent = old_node->parent();
 2871|       |      const field_type position = old_node->position();
 2872|       |      node_type *new_node = iter.node_ = new_leaf_node(position, parent);
 2873|       |      parent->set_child_noupdate_position(position, new_node);
 2874|       |      transfer_and_delete(old_node, new_node);
 2875|       |      if (was_rightmost) mutable_rightmost() = new_node;
 2876|       |      // The leftmost node is stored as the parent of the root node.
 2877|       |      if (was_leftmost) root()->set_parent(new_node);
 2878|       |    }
 2879|       |  }
 2880|       |#endif
 2881|      1|  iter.node_->emplace_value(static_cast<field_type>(iter.position_), alloc,
 2882|      1|                            std::forward<Args>(args)...);
 2883|       |  assert(
 2884|      1|      iter.node_->is_ordered_correctly(static_cast<field_type>(iter.position_),
 2885|      1|                                       original_key_compare(key_comp())) &&
 2886|      1|      "If this assert fails, then either (1) the comparator may violate "
 2887|      1|      "transitivity, i.e. comp(a,b) && comp(b,c) -> comp(a,c) (see "
 2888|      1|      "https://en.cppreference.com/w/cpp/named_req/Compare), or (2) a "
 2889|      1|      "key may have been mutated after it was inserted into the tree.");
 2890|      1|  ++size_;
 2891|      1|  iter.update_generation();
 2892|      1|  return iter;
 2893|      1|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE13emplace_valueIJSJ_EEEvhPSK_DpOT_:
 1807|      1|                                         Args &&...args) {
 1808|      1|  assert(i >= start());
 1809|      1|  assert(i <= finish());
 1810|       |  // Shift old values to create space for new value and then construct it in
 1811|       |  // place.
 1812|      1|  if (i < finish()) {
  ------------------
  |  Branch (1812:7): [True: 0, False: 1]
  ------------------
 1813|      0|    transfer_n_backward(finish() - i, /*dest_i=*/i + 1, /*src_i=*/i, this,
 1814|      0|                        alloc);
 1815|      0|  }
 1816|      1|  value_init(static_cast<field_type>(i), alloc, std::forward<Args>(args)...);
 1817|      1|  set_finish(finish() + 1);
 1818|       |
 1819|      1|  if (is_internal() && finish() > i + 1) {
  ------------------
  |  Branch (1819:7): [True: 0, False: 1]
  |  Branch (1819:24): [True: 0, False: 0]
  ------------------
 1820|      0|    for (field_type j = finish(); j > i + 1; --j) {
  ------------------
  |  Branch (1820:35): [True: 0, False: 0]
  ------------------
 1821|      0|      set_child(j, child(j - 1));
 1822|      0|    }
 1823|      0|    clear_child(i + 1);
 1824|      0|  }
 1825|      1|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE10value_initIJSJ_EEEvhPSK_DpOT_:
  984|      1|  void value_init(const field_type i, allocator_type *alloc, Args &&...args) {
  985|      1|    next_generation();
  986|      1|    absl::container_internal::SanitizerUnpoisonObject(slot(i));
  987|      1|    params_type::construct(alloc, slot(i), std::forward<Args>(args)...);
  988|      1|  }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorENS5_4lessISC_EENS5_9allocatorINS6_IKSC_SF_EEEELi256ELb0EEEEERSK_PSK_EptEv:
 1196|      1|  pointer operator->() const { return &operator*(); }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorENS5_4lessISC_EENS5_9allocatorINS6_IKSC_SF_EEEELi256ELb0EEEEERSK_PSK_EdeEv:
 1186|      1|  reference operator*() const {
 1187|      1|    ABSL_HARDENING_ASSERT(node_ != nullptr);
  ------------------
  |  |  128|      1|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      1|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1188|      1|    assert_valid_generation(node_);
 1189|      1|    ABSL_HARDENING_ASSERT(position_ >= node_->start());
  ------------------
  |  |  128|      1|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      1|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1190|      1|    if (position_ >= node_->finish()) {
  ------------------
  |  Branch (1190:9): [True: 0, False: 1]
  ------------------
 1191|      0|      ABSL_HARDENING_ASSERT(!IsEndIterator() && "Dereferencing end() iterator");
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1192|      0|      ABSL_HARDENING_ASSERT(position_ < node_->finish());
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1193|      0|    }
 1194|      1|    return node_->value(static_cast<field_type>(position_));
 1195|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE5valueEm:
  753|      1|  reference value(size_type i) { return params_type::element(slot(i)); }
_ZN4absl12lts_2024011618container_internal19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareENS6_9FileEntryEE15checked_compareC2ES7_:
  227|      2|    checked_compare(Compare comp) : Base(std::move(comp)) {}  // NOLINT
_ZN4absl12lts_2024011618container_internal20checked_compare_baseIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareELb1EEC2ES7_:
  174|      2|  explicit checked_compare_base(Compare c) : Compare(std::move(c)) {}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEEC2ERKNS1_19key_compare_adapterIS9_S8_E15checked_compareERKSC_:
 1402|      2|      : root_(EmptyNode()), rightmost_(comp, alloc, EmptyNode()), size_(0) {}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9EmptyNodeEv:
 1340|      6|  static node_type *EmptyNode() {
 1341|      6|    alignas(node_type::Alignment()) static constexpr EmptyNodeType empty_node;
 1342|      6|    return const_cast<EmptyNodeType *>(&empty_node);
 1343|      6|  }
_ZN4absl12lts_2024011618container_internal19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS6_11SymbolEntryEE15checked_compareC2ES7_:
  227|      2|    checked_compare(Compare comp) : Base(std::move(comp)) {}  // NOLINT
_ZN4absl12lts_2024011618container_internal20checked_compare_baseIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareELb1EEC2ES7_:
  174|      2|  explicit checked_compare_base(Compare c) : Compare(std::move(c)) {}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEEC2ERKNS1_19key_compare_adapterIS9_S8_E15checked_compareERKSC_:
 1402|      2|      : root_(EmptyNode()), rightmost_(comp, alloc, EmptyNode()), size_(0) {}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9EmptyNodeEv:
 1340|      6|  static node_type *EmptyNode() {
 1341|      6|    alignas(node_type::Alignment()) static constexpr EmptyNodeType empty_node;
 1342|      6|    return const_cast<EmptyNodeType *>(&empty_node);
 1343|      6|  }
_ZN4absl12lts_2024011618container_internal19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex16ExtensionCompareENS6_14ExtensionEntryEE15checked_compareC2ES7_:
  227|      2|    checked_compare(Compare comp) : Base(std::move(comp)) {}  // NOLINT
_ZN4absl12lts_2024011618container_internal20checked_compare_baseIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex16ExtensionCompareELb1EEC2ES7_:
  174|      2|  explicit checked_compare_base(Compare c) : Compare(std::move(c)) {}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEEC2ERKNS1_19key_compare_adapterIS9_S8_E15checked_compareERKSC_:
 1402|      2|      : root_(EmptyNode()), rightmost_(comp, alloc, EmptyNode()), size_(0) {}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9EmptyNodeEv:
 1340|      5|  static node_type *EmptyNode() {
 1341|      5|    alignas(node_type::Alignment()) static constexpr EmptyNodeType empty_node;
 1342|      5|    return const_cast<EmptyNodeType *>(&empty_node);
 1343|      5|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13insert_uniqueIS8_JS8_EEENSA_4pairINS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSK_EEbEERKT_DpOT0_:
 2278|      6|    -> std::pair<iterator, bool> {
 2279|      6|  if (empty()) {
  ------------------
  |  Branch (2279:7): [True: 3, False: 3]
  ------------------
 2280|      3|    mutable_root() = mutable_rightmost() = new_leaf_root_node(1);
 2281|      3|  }
 2282|       |
 2283|      6|  SearchResult<iterator, is_key_compare_to::value> res = internal_locate(key);
 2284|      6|  iterator iter = res.value;
 2285|       |
 2286|      6|  if (res.HasMatch()) {
  ------------------
  |  Branch (2286:7): [Folded, False: 6]
  ------------------
 2287|      0|    if (res.IsEq()) {
  ------------------
  |  Branch (2287:9): [Folded, False: 0]
  ------------------
 2288|       |      // The key already exists in the tree, do nothing.
 2289|      0|      return {iter, false};
 2290|      0|    }
 2291|      6|  } else {
 2292|      6|    iterator last = internal_last(iter);
 2293|      6|    if (last.node_ && !compare_keys(key, last.key())) {
  ------------------
  |  Branch (2293:9): [True: 0, False: 6]
  |  Branch (2293:23): [True: 0, False: 0]
  ------------------
 2294|       |      // The key already exists in the tree, do nothing.
 2295|      0|      return {last, false};
 2296|      0|    }
 2297|      6|  }
 2298|      6|  return {internal_emplace(iter, std::forward<Args>(args)...), true};
 2299|      6|}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5emptyEv:
 1583|     12|  bool empty() const { return size_ == 0; }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE18new_leaf_root_nodeEh:
 1702|      6|  node_type *new_leaf_root_node(field_type max_count) {
 1703|      6|    node_type *n = allocate(node_type::LeafSize(max_count));
 1704|      6|    n->init_leaf(/*position=*/0, max_count, /*parent=*/n);
 1705|      6|    return n;
 1706|      6|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8allocateEm:
 1685|      6|  node_type *allocate(size_type size) {
 1686|      6|    return reinterpret_cast<node_type *>(
 1687|      6|        absl::container_internal::Allocate<node_type::Alignment()>(
 1688|      6|            mutable_allocator(), size));
 1689|      6|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE17mutable_allocatorEv:
 1676|     14|  allocator_type *mutable_allocator() noexcept {
 1677|     14|    return &rightmost_.template get<1>();
 1678|     14|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8LeafSizeEm:
  643|     11|  constexpr static size_type LeafSize(const size_type slot_count = kNodeSlots) {
  644|     11|    return LeafLayout(slot_count).AllocSize();
  645|     11|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10LeafLayoutEm:
  637|     11|      const size_type slot_count = kNodeSlots) {
  638|     11|    return Layout(slot_count, 0);
  639|     11|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE6LayoutEmm:
  627|    219|                                      const size_type child_count) {
  628|    219|    return layout_type(
  629|    219|        /*parent*/ 1,
  630|    219|        /*generation*/ BtreeGenerationsEnabled() ? 1 : 0,
  ------------------
  |  Branch (630:24): [Folded, False: 219]
  ------------------
  631|    219|        /*position, start, finish, max_count*/ 4,
  632|    219|        /*slots*/ slot_count,
  633|    219|        /*children*/ child_count);
  634|    219|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9init_leafEhhPSE_:
  954|      6|                 btree_node *parent) {
  955|      6|    set_generation(0);
  956|      6|    set_parent(parent);
  957|      6|    set_position(position);
  958|      6|    set_start(0);
  959|      6|    set_finish(0);
  960|      6|    set_max_count(max_count);
  961|      6|    absl::container_internal::SanitizerPoisonMemoryRegion(
  962|      6|        start_slot(), max_count * sizeof(slot_type));
  963|      6|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE14set_generationEj:
  743|      9|  void set_generation(uint32_t generation) {
  744|      9|    if (BtreeGenerationsEnabled()) GetField<1>()[0] = generation;
  ------------------
  |  Branch (744:9): [Folded, False: 9]
  ------------------
  745|      9|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10set_parentEPSE_:
  670|      6|  void set_parent(btree_node *p) { *GetField<0>() = p; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm0EEEPNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  659|      6|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|      6|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|      6|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE14InternalLayoutEv:
  640|    208|  constexpr static layout_type InternalLayout() {
  641|    208|    return Layout(kNodeSlots, kNodeSlots + 1);
  642|    208|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE12set_positionEh:
  676|      6|  void set_position(field_type v) { GetField<2>()[0] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm2EEEPNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  659|     36|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|     36|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|     36|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9set_startEh:
  677|      6|  void set_start(field_type v) { GetField<2>()[1] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10set_finishEh:
  678|     18|  void set_finish(field_type v) { GetField<2>()[2] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13set_max_countEh:
  680|      6|  void set_max_count(field_type v) { GetField<2>()[3] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10start_slotEv:
  673|      6|  slot_type *start_slot() { return slot(start()); }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4slotEm:
  672|     41|  slot_type *slot(size_type i) { return &GetField<3>()[i]; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm3EEEPNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  659|     41|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|     41|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|     41|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5startEv:
  694|     48|  field_type start() const {
  695|       |    // TODO(ezb): when floating storage is implemented, return GetField<2>()[1];
  696|       |    assert(GetField<2>()[1] == 0);
  697|     48|    return 0;
  698|     48|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE17mutable_rightmostEv:
 1664|      8|  node_type *&mutable_rightmost() noexcept {
 1665|      8|    return rightmost_.template get<2>();
 1666|      8|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE12mutable_rootEv:
 1661|      8|  node_type *&mutable_root() noexcept { return root_; }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE15internal_locateIS8_EENS1_12SearchResultINS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSK_EELb0EEERKT_:
 2898|      6|    -> SearchResult<iterator, is_key_compare_to::value> {
 2899|      6|  iterator iter(const_cast<node_type *>(root()));
 2900|      6|  for (;;) {
 2901|      6|    SearchResult<size_type, is_key_compare_to::value> res =
 2902|      6|        iter.node_->lower_bound(key, key_comp());
 2903|      6|    iter.position_ = static_cast<int>(res.value);
 2904|      6|    if (res.IsEq()) {
  ------------------
  |  Branch (2904:9): [Folded, False: 6]
  ------------------
 2905|      0|      return {iter, MatchKind::kEq};
 2906|      0|    }
 2907|       |    // Note: in the non-key-compare-to case, we don't need to walk all the way
 2908|       |    // down the tree if the keys are equal, but determining equality would
 2909|       |    // require doing an extra comparison on each node on the way down, and we
 2910|       |    // will need to go all the way to the leaf node in the expected case.
 2911|      6|    if (iter.node_->is_leaf()) {
  ------------------
  |  Branch (2911:9): [True: 6, False: 0]
  ------------------
 2912|      6|      break;
 2913|      6|    }
 2914|      0|    iter.node_ = iter.node_->child(static_cast<field_type>(iter.position_));
 2915|      0|  }
 2916|       |  // Note: in the non-key-compare-to case, the key may actually be equivalent
 2917|       |  // here (and the MatchKind::kNe is ignored).
 2918|      6|  return {iter, MatchKind::kNe};
 2919|      6|}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4rootEv:
 1660|      6|  const node_type *root() const { return root_; }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EC2EPSF_:
 1142|      8|  explicit btree_iterator(Node *n) : btree_iterator(n, n->start()) {}
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EC2EPSF_i:
 1144|     10|      : btree_iterator_generation_info(n != nullptr ? n->generation()
  ------------------
  |  Branch (1144:40): [True: 10, False: 0]
  ------------------
 1145|     10|                                                    : ~uint32_t{}),
 1146|     10|        node_(n),
 1147|     10|        position_(p) {}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10generationEv:
  738|     13|  uint32_t generation() const {
  739|     13|    return BtreeGenerationsEnabled() ? *get_root_generation() : 0;
  ------------------
  |  Branch (739:12): [Folded, False: 13]
  ------------------
  740|     13|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE11lower_boundIS8_EENS1_12SearchResultImLb0EEERKT_RKNS1_19key_compare_adapterIS9_S8_E15checked_compareE:
  781|      6|      const K &k, const key_compare &comp) const {
  782|      6|    return use_linear_search::value ? linear_search(k, comp)
  ------------------
  |  Branch (782:12): [Folded, False: 6]
  ------------------
  783|      6|                                    : binary_search(k, comp);
  784|      6|  }
_ZNK4absl12lts_2024011618container_internal19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareENS6_9FileEntryEE15checked_compareclIS8_S8_TnNSt3__19enable_ifIXsr3std7is_sameIbNSC_9result_ofIFKS7_RKT_RKT0_EE4typeEEE5valueEiE4typeELi0EEEbSI_SL_:
  236|      3|    bool operator()(const T &lhs, const U &rhs) const {
  237|       |      // NOTE: if any of these assertions fail, then the comparator does not
  238|       |      // establish a strict-weak-ordering (see
  239|       |      // https://en.cppreference.com/w/cpp/named_req/Compare).
  240|      3|      assert(is_self_equivalent(lhs));
  241|      3|      assert(is_self_equivalent(rhs));
  242|      3|      const bool lhs_comp_rhs = comp()(lhs, rhs);
  243|       |      assert(!lhs_comp_rhs || !comp()(rhs, lhs));
  244|      3|      return lhs_comp_rhs;
  245|      3|    }
_ZNK4absl12lts_2024011618container_internal20checked_compare_baseIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareELb1EE4compEv:
  175|      3|  const Compare &comp() const { return *this; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE3keyEm:
  752|      3|  const key_type &key(size_type i) const { return params_type::key(slot(i)); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4slotEm:
  675|      3|  const slot_type *slot(size_type i) const { return &GetField<3>()[i]; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm3EEEPKNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  665|      3|  inline const typename layout_type::template ElementType<N> *GetField() const {
  666|       |    assert(N < 4 || is_internal());
  667|      3|    return InternalLayout().template Pointer<N>(
  668|      3|        reinterpret_cast<const char *>(this));
  669|      3|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE6finishEv:
  701|     58|  field_type finish() const { return GetField<2>()[2]; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm2EEEPKNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  665|    112|  inline const typename layout_type::template ElementType<N> *GetField() const {
  666|       |    assert(N < 4 || is_internal());
  667|    112|    return InternalLayout().template Pointer<N>(
  668|    112|        reinterpret_cast<const char *>(this));
  669|    112|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13binary_searchIS8_NS1_19key_compare_adapterIS9_S8_E15checked_compareEEENS1_12SearchResultImXsr23btree_is_key_compare_toIT0_S8_EE5valueEEERKT_RKSK_:
  802|      6|  binary_search(const K &k, const Compare &comp) const {
  803|      6|    return binary_search_impl(k, start(), finish(), comp,
  804|      6|                              btree_is_key_compare_to<Compare, key_type>());
  805|      6|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE18binary_search_implIS8_NS1_19key_compare_adapterIS9_S8_E15checked_compareEEENS1_12SearchResultImLb0EEERKT_mmRKT0_NSA_17integral_constantIbLb0EEE:
  845|      6|      std::false_type /* IsCompareTo */) const {
  846|      9|    while (s != e) {
  ------------------
  |  Branch (846:12): [True: 3, False: 6]
  ------------------
  847|      3|      const size_type mid = (s + e) >> 1;
  848|      3|      if (comp(key(mid), k)) {
  ------------------
  |  Branch (848:11): [True: 3, False: 0]
  ------------------
  849|      3|        s = mid + 1;
  850|      3|      } else {
  851|      0|        e = mid;
  852|      0|      }
  853|      3|    }
  854|      6|    return SearchResult<size_type, false>{s};
  855|      6|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8key_compEv:
 1565|     18|  const key_compare &key_comp() const noexcept {
 1566|     18|    return rightmost_.template get<0>();
 1567|     18|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE7is_leafEv:
  685|     37|  bool is_leaf() const { return GetField<2>()[3] != kInternalNodeMaxCount; }
_ZN4absl12lts_2024011618container_internal12SearchResultINS1_14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS9_11FileCompareENSt3__19allocatorISA_EELi256ELb0EEEEERKSA_PSH_EELb0EEC2ESK_NS1_9MatchKindE:
  480|      6|  SearchResult(V v, MatchKind /*match*/) : value(v) {}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13internal_lastINS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSJ_EEEET_SN_:
 2802|      6|inline IterType btree<P>::internal_last(IterType iter) {
 2803|      6|  assert(iter.node_ != nullptr);
 2804|      6|  while (iter.position_ == iter.node_->finish()) {
  ------------------
  |  Branch (2804:10): [True: 6, False: 0]
  ------------------
 2805|      6|    iter.position_ = iter.node_->position();
 2806|      6|    iter.node_ = iter.node_->parent();
 2807|      6|    if (iter.node_->is_leaf()) {
  ------------------
  |  Branch (2807:9): [True: 6, False: 0]
  ------------------
 2808|      6|      iter.node_ = nullptr;
 2809|      6|      break;
 2810|      6|    }
 2811|      6|  }
 2812|      6|  iter.update_generation();
 2813|      6|  return iter;
 2814|      6|}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8positionEv:
  691|      6|  field_type position() const { return GetField<2>()[0]; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE6parentEv:
  718|     10|  btree_node *parent() const { return *GetField<0>(); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm0EEEPKNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  665|     10|  inline const typename layout_type::template ElementType<N> *GetField() const {
  666|       |    assert(N < 4 || is_internal());
  667|     10|    return InternalLayout().template Pointer<N>(
  668|     10|        reinterpret_cast<const char *>(this));
  669|     10|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E17update_generationEv:
 1304|     12|  void update_generation() {
 1305|     12|    btree_iterator_generation_info::update_generation(node_);
 1306|     12|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE16internal_emplaceIJS8_EEENS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSJ_EESM_DpOT_:
 2819|      6|    -> iterator {
 2820|      6|  if (iter.node_->is_internal()) {
  ------------------
  |  Branch (2820:7): [True: 0, False: 6]
  ------------------
 2821|       |    // We can't insert on an internal node. Instead, we'll insert after the
 2822|       |    // previous value which is guaranteed to be on a leaf node.
 2823|      0|    --iter;
 2824|      0|    ++iter.position_;
 2825|      0|  }
 2826|      6|  const field_type max_count = iter.node_->max_count();
 2827|      6|  allocator_type *alloc = mutable_allocator();
 2828|       |
 2829|      6|  const auto transfer_and_delete = [&](node_type *old_node,
 2830|      6|                                       node_type *new_node) {
 2831|      6|    new_node->transfer_n(old_node->count(), new_node->start(),
 2832|      6|                         old_node->start(), old_node, alloc);
 2833|      6|    new_node->set_finish(old_node->finish());
 2834|      6|    old_node->set_finish(old_node->start());
 2835|      6|    new_node->set_generation(old_node->generation());
 2836|      6|    node_type::clear_and_delete(old_node, alloc);
 2837|      6|  };
 2838|      6|  const auto replace_leaf_root_node = [&](field_type new_node_size) {
 2839|      6|    assert(iter.node_ == root());
 2840|      6|    node_type *old_root = iter.node_;
 2841|      6|    node_type *new_root = iter.node_ = new_leaf_root_node(new_node_size);
 2842|      6|    transfer_and_delete(old_root, new_root);
 2843|      6|    mutable_root() = mutable_rightmost() = new_root;
 2844|      6|  };
 2845|       |
 2846|      6|  bool replaced_node = false;
 2847|      6|  if (iter.node_->count() == max_count) {
  ------------------
  |  Branch (2847:7): [True: 3, False: 3]
  ------------------
 2848|       |    // Make room in the leaf for the new item.
 2849|      3|    if (max_count < kNodeSlots) {
  ------------------
  |  Branch (2849:9): [True: 3, False: 0]
  ------------------
 2850|       |      // Insertion into the root where the root is smaller than the full node
 2851|       |      // size. Simply grow the size of the root node.
 2852|      3|      replace_leaf_root_node(static_cast<field_type>(
 2853|      3|          (std::min)(static_cast<int>(kNodeSlots), 2 * max_count)));
 2854|      3|      replaced_node = true;
 2855|      3|    } else {
 2856|      0|      rebalance_or_split(&iter);
 2857|      0|    }
 2858|      3|  }
 2859|      6|  (void)replaced_node;
 2860|       |#if defined(ABSL_HAVE_ADDRESS_SANITIZER) || \
 2861|       |    defined(ABSL_HAVE_HWADDRESS_SANITIZER)
 2862|       |  if (!replaced_node) {
 2863|       |    assert(iter.node_->is_leaf());
 2864|       |    if (iter.node_->is_root()) {
 2865|       |      replace_leaf_root_node(max_count);
 2866|       |    } else {
 2867|       |      node_type *old_node = iter.node_;
 2868|       |      const bool was_rightmost = rightmost() == old_node;
 2869|       |      const bool was_leftmost = leftmost() == old_node;
 2870|       |      node_type *parent = old_node->parent();
 2871|       |      const field_type position = old_node->position();
 2872|       |      node_type *new_node = iter.node_ = new_leaf_node(position, parent);
 2873|       |      parent->set_child_noupdate_position(position, new_node);
 2874|       |      transfer_and_delete(old_node, new_node);
 2875|       |      if (was_rightmost) mutable_rightmost() = new_node;
 2876|       |      // The leftmost node is stored as the parent of the root node.
 2877|       |      if (was_leftmost) root()->set_parent(new_node);
 2878|       |    }
 2879|       |  }
 2880|       |#endif
 2881|      6|  iter.node_->emplace_value(static_cast<field_type>(iter.position_), alloc,
 2882|      6|                            std::forward<Args>(args)...);
 2883|       |  assert(
 2884|      6|      iter.node_->is_ordered_correctly(static_cast<field_type>(iter.position_),
 2885|      6|                                       original_key_compare(key_comp())) &&
 2886|      6|      "If this assert fails, then either (1) the comparator may violate "
 2887|      6|      "transitivity, i.e. comp(a,b) && comp(b,c) -> comp(a,c) (see "
 2888|      6|      "https://en.cppreference.com/w/cpp/named_req/Compare), or (2) a "
 2889|      6|      "key may have been mutated after it was inserted into the tree.");
 2890|      6|  ++size_;
 2891|      6|  iter.update_generation();
 2892|      6|  return iter;
 2893|      6|}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE11is_internalEv:
  688|     12|  bool is_internal() const { return !is_leaf(); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE7is_rootEv:
  722|      2|  bool is_root() const { return parent()->is_leaf(); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9max_countEv:
  708|     11|  field_type max_count() const {
  709|       |    // Internal nodes have max_count==kInternalNodeMaxCount.
  710|       |    // Leaf nodes have max_count in [1, kNodeSlots].
  711|     11|    const field_type max_count = GetField<2>()[3];
  712|     11|    return max_count == field_type{kInternalNodeMaxCount}
  ------------------
  |  Branch (712:12): [True: 0, False: 11]
  ------------------
  713|     11|               ? field_type{kNodeSlots}
  714|     11|               : max_count;
  715|     11|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5countEv:
  704|     14|  field_type count() const {
  705|       |    assert(finish() >= start());
  706|     14|    return finish() - start();
  707|     14|  }
_ZZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE16internal_emplaceIJS8_EEENS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSJ_EESM_DpOT_ENKUlhE_clEh:
 2838|      3|  const auto replace_leaf_root_node = [&](field_type new_node_size) {
 2839|       |    assert(iter.node_ == root());
 2840|      3|    node_type *old_root = iter.node_;
 2841|      3|    node_type *new_root = iter.node_ = new_leaf_root_node(new_node_size);
 2842|      3|    transfer_and_delete(old_root, new_root);
 2843|      3|    mutable_root() = mutable_rightmost() = new_root;
 2844|      3|  };
_ZZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE16internal_emplaceIJS8_EEENS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSJ_EESM_DpOT_ENKUlPSI_SQ_E_clESQ_SQ_:
 2830|      3|                                       node_type *new_node) {
 2831|      3|    new_node->transfer_n(old_node->count(), new_node->start(),
 2832|      3|                         old_node->start(), old_node, alloc);
 2833|      3|    new_node->set_finish(old_node->finish());
 2834|      3|    old_node->set_finish(old_node->start());
 2835|      3|    new_node->set_generation(old_node->generation());
 2836|      3|    node_type::clear_and_delete(old_node, alloc);
 2837|      3|  };
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10transfer_nEmmmPSE_PSC_:
 1020|      3|                  allocator_type *alloc) {
 1021|      3|    next_generation();
 1022|      3|    for (slot_type *src = src_node->slot(src_i), *end = src + n,
 1023|      3|                   *dest = slot(dest_i);
 1024|      7|         src != end; ++src, ++dest) {
  ------------------
  |  Branch (1024:10): [True: 4, False: 3]
  ------------------
 1025|      4|      transfer(dest, src, alloc);
 1026|      4|    }
 1027|      3|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE15next_generationEv:
  747|     14|  void next_generation() {
  748|     14|    if (BtreeGenerationsEnabled()) ++*get_root_generation();
  ------------------
  |  Branch (748:9): [Folded, False: 14]
  ------------------
  749|     14|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8transferEPS8_SF_PSC_:
 1003|      4|  static void transfer(slot_type *dest, slot_type *src, allocator_type *alloc) {
 1004|      4|    absl::container_internal::SanitizerUnpoisonObject(dest);
 1005|      4|    params_type::transfer(alloc, dest, src);
 1006|      4|    absl::container_internal::SanitizerPoisonObject(src);
 1007|      4|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE16clear_and_deleteEPSE_PSC_:
 2008|      5|void btree_node<P>::clear_and_delete(btree_node *node, allocator_type *alloc) {
 2009|      5|  if (node->is_leaf()) {
  ------------------
  |  Branch (2009:7): [True: 5, False: 0]
  ------------------
 2010|      5|    node->value_destroy_n(node->start(), node->count(), alloc);
 2011|      5|    deallocate(LeafSize(node->max_count()), node, alloc);
 2012|      5|    return;
 2013|      5|  }
 2014|      0|  if (node->count() == 0) {
  ------------------
  |  Branch (2014:7): [True: 0, False: 0]
  ------------------
 2015|      0|    deallocate(InternalSize(), node, alloc);
 2016|      0|    return;
 2017|      0|  }
 2018|       |
 2019|       |  // The parent of the root of the subtree we are deleting.
 2020|      0|  btree_node *delete_root_parent = node->parent();
 2021|       |
 2022|       |  // Navigate to the leftmost leaf under node, and then delete upwards.
 2023|      0|  while (node->is_internal()) node = node->start_child();
  ------------------
  |  Branch (2023:10): [True: 0, False: 0]
  ------------------
 2024|       |#ifdef ABSL_BTREE_ENABLE_GENERATIONS
 2025|       |  // When generations are enabled, we delete the leftmost leaf last in case it's
 2026|       |  // the parent of the root and we need to check whether it's a leaf before we
 2027|       |  // can update the root's generation.
 2028|       |  // TODO(ezb): if we change btree_node::is_root to check a bool inside the node
 2029|       |  // instead of checking whether the parent is a leaf, we can remove this logic.
 2030|       |  btree_node *leftmost_leaf = node;
 2031|       |#endif
 2032|       |  // Use `size_type` because `pos` needs to be able to hold `kNodeSlots+1`,
 2033|       |  // which isn't guaranteed to be a valid `field_type`.
 2034|      0|  size_type pos = node->position();
 2035|      0|  btree_node *parent = node->parent();
 2036|      0|  for (;;) {
 2037|       |    // In each iteration of the next loop, we delete one leaf node and go right.
 2038|      0|    assert(pos <= parent->finish());
 2039|      0|    do {
 2040|      0|      node = parent->child(static_cast<field_type>(pos));
 2041|      0|      if (node->is_internal()) {
  ------------------
  |  Branch (2041:11): [True: 0, False: 0]
  ------------------
 2042|       |        // Navigate to the leftmost leaf under node.
 2043|      0|        while (node->is_internal()) node = node->start_child();
  ------------------
  |  Branch (2043:16): [True: 0, False: 0]
  ------------------
 2044|      0|        pos = node->position();
 2045|      0|        parent = node->parent();
 2046|      0|      }
 2047|      0|      node->value_destroy_n(node->start(), node->count(), alloc);
 2048|       |#ifdef ABSL_BTREE_ENABLE_GENERATIONS
 2049|       |      if (leftmost_leaf != node)
 2050|       |#endif
 2051|      0|        deallocate(LeafSize(node->max_count()), node, alloc);
 2052|      0|      ++pos;
 2053|      0|    } while (pos <= parent->finish());
  ------------------
  |  Branch (2053:14): [True: 0, False: 0]
  ------------------
 2054|       |
 2055|       |    // Once we've deleted all children of parent, delete parent and go up/right.
 2056|      0|    assert(pos > parent->finish());
 2057|      0|    do {
 2058|      0|      node = parent;
 2059|      0|      pos = node->position();
 2060|      0|      parent = node->parent();
 2061|      0|      node->value_destroy_n(node->start(), node->count(), alloc);
 2062|      0|      deallocate(InternalSize(), node, alloc);
 2063|      0|      if (parent == delete_root_parent) {
  ------------------
  |  Branch (2063:11): [True: 0, False: 0]
  ------------------
 2064|       |#ifdef ABSL_BTREE_ENABLE_GENERATIONS
 2065|       |        deallocate(LeafSize(leftmost_leaf->max_count()), leftmost_leaf, alloc);
 2066|       |#endif
 2067|      0|        return;
 2068|      0|      }
 2069|      0|      ++pos;
 2070|      0|    } while (pos > parent->finish());
  ------------------
  |  Branch (2070:14): [True: 0, False: 0]
  ------------------
 2071|      0|  }
 2072|      0|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE15value_destroy_nEhhPSC_:
  995|      5|                       allocator_type *alloc) {
  996|      5|    next_generation();
  997|      9|    for (slot_type *s = slot(i), *end = slot(i + n); s != end; ++s) {
  ------------------
  |  Branch (997:54): [True: 4, False: 5]
  ------------------
  998|      4|      params_type::destroy(alloc, s);
  999|      4|      absl::container_internal::SanitizerPoisonObject(s);
 1000|      4|    }
 1001|      5|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10deallocateEmPSE_PSC_:
  974|      5|                         allocator_type *alloc) {
  975|      5|    absl::container_internal::SanitizerUnpoisonMemoryRegion(node, size);
  976|      5|    absl::container_internal::Deallocate<Alignment()>(alloc, node, size);
  977|      5|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4rootEv:
 1659|      4|  node_type *root() { return root_; }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9rightmostEv:
 1662|      4|  node_type *rightmost() { return rightmost_.template get<2>(); }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13emplace_valueIJS8_EEEvhPSC_DpOT_:
 1807|      6|                                         Args &&...args) {
 1808|      6|  assert(i >= start());
 1809|      6|  assert(i <= finish());
 1810|       |  // Shift old values to create space for new value and then construct it in
 1811|       |  // place.
 1812|      6|  if (i < finish()) {
  ------------------
  |  Branch (1812:7): [True: 0, False: 6]
  ------------------
 1813|      0|    transfer_n_backward(finish() - i, /*dest_i=*/i + 1, /*src_i=*/i, this,
 1814|      0|                        alloc);
 1815|      0|  }
 1816|      6|  value_init(static_cast<field_type>(i), alloc, std::forward<Args>(args)...);
 1817|      6|  set_finish(finish() + 1);
 1818|       |
 1819|      6|  if (is_internal() && finish() > i + 1) {
  ------------------
  |  Branch (1819:7): [True: 0, False: 6]
  |  Branch (1819:24): [True: 0, False: 0]
  ------------------
 1820|      0|    for (field_type j = finish(); j > i + 1; --j) {
  ------------------
  |  Branch (1820:35): [True: 0, False: 0]
  ------------------
 1821|      0|      set_child(j, child(j - 1));
 1822|      0|    }
 1823|      0|    clear_child(i + 1);
 1824|      0|  }
 1825|      6|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10value_initIJS8_EEEvhPSC_DpOT_:
  984|      6|  void value_init(const field_type i, allocator_type *alloc, Args &&...args) {
  985|      6|    next_generation();
  986|      6|    absl::container_internal::SanitizerUnpoisonObject(slot(i));
  987|      6|    params_type::construct(alloc, slot(i), std::forward<Args>(args)...);
  988|      6|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13insert_uniqueIS8_JS8_EEENSA_4pairINS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSK_EEbEERKT_DpOT0_:
 2278|      1|    -> std::pair<iterator, bool> {
 2279|      1|  if (empty()) {
  ------------------
  |  Branch (2279:7): [True: 1, False: 0]
  ------------------
 2280|      1|    mutable_root() = mutable_rightmost() = new_leaf_root_node(1);
 2281|      1|  }
 2282|       |
 2283|      1|  SearchResult<iterator, is_key_compare_to::value> res = internal_locate(key);
 2284|      1|  iterator iter = res.value;
 2285|       |
 2286|      1|  if (res.HasMatch()) {
  ------------------
  |  Branch (2286:7): [Folded, False: 1]
  ------------------
 2287|      0|    if (res.IsEq()) {
  ------------------
  |  Branch (2287:9): [Folded, False: 0]
  ------------------
 2288|       |      // The key already exists in the tree, do nothing.
 2289|      0|      return {iter, false};
 2290|      0|    }
 2291|      1|  } else {
 2292|      1|    iterator last = internal_last(iter);
 2293|      1|    if (last.node_ && !compare_keys(key, last.key())) {
  ------------------
  |  Branch (2293:9): [True: 0, False: 1]
  |  Branch (2293:23): [True: 0, False: 0]
  ------------------
 2294|       |      // The key already exists in the tree, do nothing.
 2295|      0|      return {last, false};
 2296|      0|    }
 2297|      1|  }
 2298|      1|  return {internal_emplace(iter, std::forward<Args>(args)...), true};
 2299|      1|}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5emptyEv:
 1583|      6|  bool empty() const { return size_ == 0; }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE18new_leaf_root_nodeEh:
 1702|      1|  node_type *new_leaf_root_node(field_type max_count) {
 1703|      1|    node_type *n = allocate(node_type::LeafSize(max_count));
 1704|      1|    n->init_leaf(/*position=*/0, max_count, /*parent=*/n);
 1705|      1|    return n;
 1706|      1|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8allocateEm:
 1685|      1|  node_type *allocate(size_type size) {
 1686|      1|    return reinterpret_cast<node_type *>(
 1687|      1|        absl::container_internal::Allocate<node_type::Alignment()>(
 1688|      1|            mutable_allocator(), size));
 1689|      1|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE17mutable_allocatorEv:
 1676|      3|  allocator_type *mutable_allocator() noexcept {
 1677|      3|    return &rightmost_.template get<1>();
 1678|      3|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8LeafSizeEm:
  643|      2|  constexpr static size_type LeafSize(const size_type slot_count = kNodeSlots) {
  644|      2|    return LeafLayout(slot_count).AllocSize();
  645|      2|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10LeafLayoutEm:
  637|      2|      const size_type slot_count = kNodeSlots) {
  638|      2|    return Layout(slot_count, 0);
  639|      2|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE6LayoutEmm:
  627|     39|                                      const size_type child_count) {
  628|     39|    return layout_type(
  629|     39|        /*parent*/ 1,
  630|     39|        /*generation*/ BtreeGenerationsEnabled() ? 1 : 0,
  ------------------
  |  Branch (630:24): [Folded, False: 39]
  ------------------
  631|     39|        /*position, start, finish, max_count*/ 4,
  632|     39|        /*slots*/ slot_count,
  633|     39|        /*children*/ child_count);
  634|     39|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9init_leafEhhPSE_:
  954|      1|                 btree_node *parent) {
  955|      1|    set_generation(0);
  956|      1|    set_parent(parent);
  957|      1|    set_position(position);
  958|      1|    set_start(0);
  959|      1|    set_finish(0);
  960|      1|    set_max_count(max_count);
  961|      1|    absl::container_internal::SanitizerPoisonMemoryRegion(
  962|      1|        start_slot(), max_count * sizeof(slot_type));
  963|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE14set_generationEj:
  743|      1|  void set_generation(uint32_t generation) {
  744|      1|    if (BtreeGenerationsEnabled()) GetField<1>()[0] = generation;
  ------------------
  |  Branch (744:9): [Folded, False: 1]
  ------------------
  745|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10set_parentEPSE_:
  670|      1|  void set_parent(btree_node *p) { *GetField<0>() = p; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm0EEEPNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  659|      1|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|      1|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE14InternalLayoutEv:
  640|     37|  constexpr static layout_type InternalLayout() {
  641|     37|    return Layout(kNodeSlots, kNodeSlots + 1);
  642|     37|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE12set_positionEh:
  676|      1|  void set_position(field_type v) { GetField<2>()[0] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm2EEEPNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  659|      5|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|      5|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|      5|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9set_startEh:
  677|      1|  void set_start(field_type v) { GetField<2>()[1] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10set_finishEh:
  678|      2|  void set_finish(field_type v) { GetField<2>()[2] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13set_max_countEh:
  680|      1|  void set_max_count(field_type v) { GetField<2>()[3] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10start_slotEv:
  673|      1|  slot_type *start_slot() { return slot(start()); }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4slotEm:
  672|      6|  slot_type *slot(size_type i) { return &GetField<3>()[i]; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm3EEEPNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  659|      6|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|      6|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|      6|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5startEv:
  694|      7|  field_type start() const {
  695|       |    // TODO(ezb): when floating storage is implemented, return GetField<2>()[1];
  696|       |    assert(GetField<2>()[1] == 0);
  697|      7|    return 0;
  698|      7|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE17mutable_rightmostEv:
 1664|      2|  node_type *&mutable_rightmost() noexcept {
 1665|      2|    return rightmost_.template get<2>();
 1666|      2|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE12mutable_rootEv:
 1661|      2|  node_type *&mutable_root() noexcept { return root_; }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE15internal_locateIS8_EENS1_12SearchResultINS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSK_EELb0EEERKT_:
 2898|      1|    -> SearchResult<iterator, is_key_compare_to::value> {
 2899|      1|  iterator iter(const_cast<node_type *>(root()));
 2900|      1|  for (;;) {
 2901|      1|    SearchResult<size_type, is_key_compare_to::value> res =
 2902|      1|        iter.node_->lower_bound(key, key_comp());
 2903|      1|    iter.position_ = static_cast<int>(res.value);
 2904|      1|    if (res.IsEq()) {
  ------------------
  |  Branch (2904:9): [Folded, False: 1]
  ------------------
 2905|      0|      return {iter, MatchKind::kEq};
 2906|      0|    }
 2907|       |    // Note: in the non-key-compare-to case, we don't need to walk all the way
 2908|       |    // down the tree if the keys are equal, but determining equality would
 2909|       |    // require doing an extra comparison on each node on the way down, and we
 2910|       |    // will need to go all the way to the leaf node in the expected case.
 2911|      1|    if (iter.node_->is_leaf()) {
  ------------------
  |  Branch (2911:9): [True: 1, False: 0]
  ------------------
 2912|      1|      break;
 2913|      1|    }
 2914|      0|    iter.node_ = iter.node_->child(static_cast<field_type>(iter.position_));
 2915|      0|  }
 2916|       |  // Note: in the non-key-compare-to case, the key may actually be equivalent
 2917|       |  // here (and the MatchKind::kNe is ignored).
 2918|      1|  return {iter, MatchKind::kNe};
 2919|      1|}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4rootEv:
 1660|      1|  const node_type *root() const { return root_; }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EC2EPSF_:
 1142|      2|  explicit btree_iterator(Node *n) : btree_iterator(n, n->start()) {}
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EC2EPSF_i:
 1144|      3|      : btree_iterator_generation_info(n != nullptr ? n->generation()
  ------------------
  |  Branch (1144:40): [True: 3, False: 0]
  ------------------
 1145|      3|                                                    : ~uint32_t{}),
 1146|      3|        node_(n),
 1147|      3|        position_(p) {}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10generationEv:
  738|      3|  uint32_t generation() const {
  739|      3|    return BtreeGenerationsEnabled() ? *get_root_generation() : 0;
  ------------------
  |  Branch (739:12): [Folded, False: 3]
  ------------------
  740|      3|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE11lower_boundIS8_EENS1_12SearchResultImLb0EEERKT_RKNS1_19key_compare_adapterIS9_S8_E15checked_compareE:
  781|      1|      const K &k, const key_compare &comp) const {
  782|      1|    return use_linear_search::value ? linear_search(k, comp)
  ------------------
  |  Branch (782:12): [Folded, False: 1]
  ------------------
  783|      1|                                    : binary_search(k, comp);
  784|      1|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE6finishEv:
  701|     11|  field_type finish() const { return GetField<2>()[2]; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm2EEEPKNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  665|     22|  inline const typename layout_type::template ElementType<N> *GetField() const {
  666|       |    assert(N < 4 || is_internal());
  667|     22|    return InternalLayout().template Pointer<N>(
  668|     22|        reinterpret_cast<const char *>(this));
  669|     22|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13binary_searchIS8_NS1_19key_compare_adapterIS9_S8_E15checked_compareEEENS1_12SearchResultImXsr23btree_is_key_compare_toIT0_S8_EE5valueEEERKT_RKSK_:
  802|      1|  binary_search(const K &k, const Compare &comp) const {
  803|      1|    return binary_search_impl(k, start(), finish(), comp,
  804|      1|                              btree_is_key_compare_to<Compare, key_type>());
  805|      1|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE18binary_search_implIS8_NS1_19key_compare_adapterIS9_S8_E15checked_compareEEENS1_12SearchResultImLb0EEERKT_mmRKT0_NSA_17integral_constantIbLb0EEE:
  845|      1|      std::false_type /* IsCompareTo */) const {
  846|      1|    while (s != e) {
  ------------------
  |  Branch (846:12): [True: 0, False: 1]
  ------------------
  847|      0|      const size_type mid = (s + e) >> 1;
  848|      0|      if (comp(key(mid), k)) {
  ------------------
  |  Branch (848:11): [True: 0, False: 0]
  ------------------
  849|      0|        s = mid + 1;
  850|      0|      } else {
  851|      0|        e = mid;
  852|      0|      }
  853|      0|    }
  854|      1|    return SearchResult<size_type, false>{s};
  855|      1|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8key_compEv:
 1565|      3|  const key_compare &key_comp() const noexcept {
 1566|      3|    return rightmost_.template get<0>();
 1567|      3|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE7is_leafEv:
  685|      8|  bool is_leaf() const { return GetField<2>()[3] != kInternalNodeMaxCount; }
_ZN4absl12lts_2024011618container_internal12SearchResultINS1_14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS9_16ExtensionCompareENSt3__19allocatorISA_EELi256ELb0EEEEERKSA_PSH_EELb0EEC2ESK_NS1_9MatchKindE:
  480|      1|  SearchResult(V v, MatchKind /*match*/) : value(v) {}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13internal_lastINS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSJ_EEEET_SN_:
 2802|      1|inline IterType btree<P>::internal_last(IterType iter) {
 2803|      1|  assert(iter.node_ != nullptr);
 2804|      1|  while (iter.position_ == iter.node_->finish()) {
  ------------------
  |  Branch (2804:10): [True: 1, False: 0]
  ------------------
 2805|      1|    iter.position_ = iter.node_->position();
 2806|      1|    iter.node_ = iter.node_->parent();
 2807|      1|    if (iter.node_->is_leaf()) {
  ------------------
  |  Branch (2807:9): [True: 1, False: 0]
  ------------------
 2808|      1|      iter.node_ = nullptr;
 2809|      1|      break;
 2810|      1|    }
 2811|      1|  }
 2812|      1|  iter.update_generation();
 2813|      1|  return iter;
 2814|      1|}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8positionEv:
  691|      1|  field_type position() const { return GetField<2>()[0]; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE6parentEv:
  718|      3|  btree_node *parent() const { return *GetField<0>(); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm0EEEPKNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  665|      3|  inline const typename layout_type::template ElementType<N> *GetField() const {
  666|       |    assert(N < 4 || is_internal());
  667|      3|    return InternalLayout().template Pointer<N>(
  668|      3|        reinterpret_cast<const char *>(this));
  669|      3|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E17update_generationEv:
 1304|      2|  void update_generation() {
 1305|      2|    btree_iterator_generation_info::update_generation(node_);
 1306|      2|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE16internal_emplaceIJS8_EEENS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSJ_EESM_DpOT_:
 2819|      1|    -> iterator {
 2820|      1|  if (iter.node_->is_internal()) {
  ------------------
  |  Branch (2820:7): [True: 0, False: 1]
  ------------------
 2821|       |    // We can't insert on an internal node. Instead, we'll insert after the
 2822|       |    // previous value which is guaranteed to be on a leaf node.
 2823|      0|    --iter;
 2824|      0|    ++iter.position_;
 2825|      0|  }
 2826|      1|  const field_type max_count = iter.node_->max_count();
 2827|      1|  allocator_type *alloc = mutable_allocator();
 2828|       |
 2829|      1|  const auto transfer_and_delete = [&](node_type *old_node,
 2830|      1|                                       node_type *new_node) {
 2831|      1|    new_node->transfer_n(old_node->count(), new_node->start(),
 2832|      1|                         old_node->start(), old_node, alloc);
 2833|      1|    new_node->set_finish(old_node->finish());
 2834|      1|    old_node->set_finish(old_node->start());
 2835|      1|    new_node->set_generation(old_node->generation());
 2836|      1|    node_type::clear_and_delete(old_node, alloc);
 2837|      1|  };
 2838|      1|  const auto replace_leaf_root_node = [&](field_type new_node_size) {
 2839|      1|    assert(iter.node_ == root());
 2840|      1|    node_type *old_root = iter.node_;
 2841|      1|    node_type *new_root = iter.node_ = new_leaf_root_node(new_node_size);
 2842|      1|    transfer_and_delete(old_root, new_root);
 2843|      1|    mutable_root() = mutable_rightmost() = new_root;
 2844|      1|  };
 2845|       |
 2846|      1|  bool replaced_node = false;
 2847|      1|  if (iter.node_->count() == max_count) {
  ------------------
  |  Branch (2847:7): [True: 0, False: 1]
  ------------------
 2848|       |    // Make room in the leaf for the new item.
 2849|      0|    if (max_count < kNodeSlots) {
  ------------------
  |  Branch (2849:9): [True: 0, False: 0]
  ------------------
 2850|       |      // Insertion into the root where the root is smaller than the full node
 2851|       |      // size. Simply grow the size of the root node.
 2852|      0|      replace_leaf_root_node(static_cast<field_type>(
 2853|      0|          (std::min)(static_cast<int>(kNodeSlots), 2 * max_count)));
 2854|      0|      replaced_node = true;
 2855|      0|    } else {
 2856|      0|      rebalance_or_split(&iter);
 2857|      0|    }
 2858|      0|  }
 2859|      1|  (void)replaced_node;
 2860|       |#if defined(ABSL_HAVE_ADDRESS_SANITIZER) || \
 2861|       |    defined(ABSL_HAVE_HWADDRESS_SANITIZER)
 2862|       |  if (!replaced_node) {
 2863|       |    assert(iter.node_->is_leaf());
 2864|       |    if (iter.node_->is_root()) {
 2865|       |      replace_leaf_root_node(max_count);
 2866|       |    } else {
 2867|       |      node_type *old_node = iter.node_;
 2868|       |      const bool was_rightmost = rightmost() == old_node;
 2869|       |      const bool was_leftmost = leftmost() == old_node;
 2870|       |      node_type *parent = old_node->parent();
 2871|       |      const field_type position = old_node->position();
 2872|       |      node_type *new_node = iter.node_ = new_leaf_node(position, parent);
 2873|       |      parent->set_child_noupdate_position(position, new_node);
 2874|       |      transfer_and_delete(old_node, new_node);
 2875|       |      if (was_rightmost) mutable_rightmost() = new_node;
 2876|       |      // The leftmost node is stored as the parent of the root node.
 2877|       |      if (was_leftmost) root()->set_parent(new_node);
 2878|       |    }
 2879|       |  }
 2880|       |#endif
 2881|      1|  iter.node_->emplace_value(static_cast<field_type>(iter.position_), alloc,
 2882|      1|                            std::forward<Args>(args)...);
 2883|       |  assert(
 2884|      1|      iter.node_->is_ordered_correctly(static_cast<field_type>(iter.position_),
 2885|      1|                                       original_key_compare(key_comp())) &&
 2886|      1|      "If this assert fails, then either (1) the comparator may violate "
 2887|      1|      "transitivity, i.e. comp(a,b) && comp(b,c) -> comp(a,c) (see "
 2888|      1|      "https://en.cppreference.com/w/cpp/named_req/Compare), or (2) a "
 2889|      1|      "key may have been mutated after it was inserted into the tree.");
 2890|      1|  ++size_;
 2891|      1|  iter.update_generation();
 2892|      1|  return iter;
 2893|      1|}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE11is_internalEv:
  688|      2|  bool is_internal() const { return !is_leaf(); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE7is_rootEv:
  722|      1|  bool is_root() const { return parent()->is_leaf(); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9max_countEv:
  708|      2|  field_type max_count() const {
  709|       |    // Internal nodes have max_count==kInternalNodeMaxCount.
  710|       |    // Leaf nodes have max_count in [1, kNodeSlots].
  711|      2|    const field_type max_count = GetField<2>()[3];
  712|      2|    return max_count == field_type{kInternalNodeMaxCount}
  ------------------
  |  Branch (712:12): [True: 0, False: 2]
  ------------------
  713|      2|               ? field_type{kNodeSlots}
  714|      2|               : max_count;
  715|      2|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5countEv:
  704|      2|  field_type count() const {
  705|       |    assert(finish() >= start());
  706|      2|    return finish() - start();
  707|      2|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE15next_generationEv:
  747|      2|  void next_generation() {
  748|      2|    if (BtreeGenerationsEnabled()) ++*get_root_generation();
  ------------------
  |  Branch (748:9): [Folded, False: 2]
  ------------------
  749|      2|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE16clear_and_deleteEPSE_PSC_:
 2008|      1|void btree_node<P>::clear_and_delete(btree_node *node, allocator_type *alloc) {
 2009|      1|  if (node->is_leaf()) {
  ------------------
  |  Branch (2009:7): [True: 1, False: 0]
  ------------------
 2010|      1|    node->value_destroy_n(node->start(), node->count(), alloc);
 2011|      1|    deallocate(LeafSize(node->max_count()), node, alloc);
 2012|      1|    return;
 2013|      1|  }
 2014|      0|  if (node->count() == 0) {
  ------------------
  |  Branch (2014:7): [True: 0, False: 0]
  ------------------
 2015|      0|    deallocate(InternalSize(), node, alloc);
 2016|      0|    return;
 2017|      0|  }
 2018|       |
 2019|       |  // The parent of the root of the subtree we are deleting.
 2020|      0|  btree_node *delete_root_parent = node->parent();
 2021|       |
 2022|       |  // Navigate to the leftmost leaf under node, and then delete upwards.
 2023|      0|  while (node->is_internal()) node = node->start_child();
  ------------------
  |  Branch (2023:10): [True: 0, False: 0]
  ------------------
 2024|       |#ifdef ABSL_BTREE_ENABLE_GENERATIONS
 2025|       |  // When generations are enabled, we delete the leftmost leaf last in case it's
 2026|       |  // the parent of the root and we need to check whether it's a leaf before we
 2027|       |  // can update the root's generation.
 2028|       |  // TODO(ezb): if we change btree_node::is_root to check a bool inside the node
 2029|       |  // instead of checking whether the parent is a leaf, we can remove this logic.
 2030|       |  btree_node *leftmost_leaf = node;
 2031|       |#endif
 2032|       |  // Use `size_type` because `pos` needs to be able to hold `kNodeSlots+1`,
 2033|       |  // which isn't guaranteed to be a valid `field_type`.
 2034|      0|  size_type pos = node->position();
 2035|      0|  btree_node *parent = node->parent();
 2036|      0|  for (;;) {
 2037|       |    // In each iteration of the next loop, we delete one leaf node and go right.
 2038|      0|    assert(pos <= parent->finish());
 2039|      0|    do {
 2040|      0|      node = parent->child(static_cast<field_type>(pos));
 2041|      0|      if (node->is_internal()) {
  ------------------
  |  Branch (2041:11): [True: 0, False: 0]
  ------------------
 2042|       |        // Navigate to the leftmost leaf under node.
 2043|      0|        while (node->is_internal()) node = node->start_child();
  ------------------
  |  Branch (2043:16): [True: 0, False: 0]
  ------------------
 2044|      0|        pos = node->position();
 2045|      0|        parent = node->parent();
 2046|      0|      }
 2047|      0|      node->value_destroy_n(node->start(), node->count(), alloc);
 2048|       |#ifdef ABSL_BTREE_ENABLE_GENERATIONS
 2049|       |      if (leftmost_leaf != node)
 2050|       |#endif
 2051|      0|        deallocate(LeafSize(node->max_count()), node, alloc);
 2052|      0|      ++pos;
 2053|      0|    } while (pos <= parent->finish());
  ------------------
  |  Branch (2053:14): [True: 0, False: 0]
  ------------------
 2054|       |
 2055|       |    // Once we've deleted all children of parent, delete parent and go up/right.
 2056|      0|    assert(pos > parent->finish());
 2057|      0|    do {
 2058|      0|      node = parent;
 2059|      0|      pos = node->position();
 2060|      0|      parent = node->parent();
 2061|      0|      node->value_destroy_n(node->start(), node->count(), alloc);
 2062|      0|      deallocate(InternalSize(), node, alloc);
 2063|      0|      if (parent == delete_root_parent) {
  ------------------
  |  Branch (2063:11): [True: 0, False: 0]
  ------------------
 2064|       |#ifdef ABSL_BTREE_ENABLE_GENERATIONS
 2065|       |        deallocate(LeafSize(leftmost_leaf->max_count()), leftmost_leaf, alloc);
 2066|       |#endif
 2067|      0|        return;
 2068|      0|      }
 2069|      0|      ++pos;
 2070|      0|    } while (pos > parent->finish());
  ------------------
  |  Branch (2070:14): [True: 0, False: 0]
  ------------------
 2071|      0|  }
 2072|      0|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE15value_destroy_nEhhPSC_:
  995|      1|                       allocator_type *alloc) {
  996|      1|    next_generation();
  997|      2|    for (slot_type *s = slot(i), *end = slot(i + n); s != end; ++s) {
  ------------------
  |  Branch (997:54): [True: 1, False: 1]
  ------------------
  998|      1|      params_type::destroy(alloc, s);
  999|      1|      absl::container_internal::SanitizerPoisonObject(s);
 1000|      1|    }
 1001|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10deallocateEmPSE_PSC_:
  974|      1|                         allocator_type *alloc) {
  975|      1|    absl::container_internal::SanitizerUnpoisonMemoryRegion(node, size);
  976|      1|    absl::container_internal::Deallocate<Alignment()>(alloc, node, size);
  977|      1|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4rootEv:
 1659|      2|  node_type *root() { return root_; }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9rightmostEv:
 1662|      2|  node_type *rightmost() { return rightmost_.template get<2>(); }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13emplace_valueIJS8_EEEvhPSC_DpOT_:
 1807|      1|                                         Args &&...args) {
 1808|      1|  assert(i >= start());
 1809|      1|  assert(i <= finish());
 1810|       |  // Shift old values to create space for new value and then construct it in
 1811|       |  // place.
 1812|      1|  if (i < finish()) {
  ------------------
  |  Branch (1812:7): [True: 0, False: 1]
  ------------------
 1813|      0|    transfer_n_backward(finish() - i, /*dest_i=*/i + 1, /*src_i=*/i, this,
 1814|      0|                        alloc);
 1815|      0|  }
 1816|      1|  value_init(static_cast<field_type>(i), alloc, std::forward<Args>(args)...);
 1817|      1|  set_finish(finish() + 1);
 1818|       |
 1819|      1|  if (is_internal() && finish() > i + 1) {
  ------------------
  |  Branch (1819:7): [True: 0, False: 1]
  |  Branch (1819:24): [True: 0, False: 0]
  ------------------
 1820|      0|    for (field_type j = finish(); j > i + 1; --j) {
  ------------------
  |  Branch (1820:35): [True: 0, False: 0]
  ------------------
 1821|      0|      set_child(j, child(j - 1));
 1822|      0|    }
 1823|      0|    clear_child(i + 1);
 1824|      0|  }
 1825|      1|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10value_initIJS8_EEEvhPSC_DpOT_:
  984|      1|  void value_init(const field_type i, allocator_type *alloc, Args &&...args) {
  985|      1|    next_generation();
  986|      1|    absl::container_internal::SanitizerUnpoisonObject(slot(i));
  987|      1|    params_type::construct(alloc, slot(i), std::forward<Args>(args)...);
  988|      1|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE11upper_boundIS8_EENS1_14btree_iteratorIKNS1_10btree_nodeISD_EERKS8_PSK_EERKT_:
 1472|     64|  const_iterator upper_bound(const K &key) const {
 1473|     64|    return internal_end(internal_upper_bound(key));
 1474|     64|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE12internal_endENS1_14btree_iteratorIKNS1_10btree_nodeISD_EERKS8_PSJ_EE:
 1730|     64|  const_iterator internal_end(const_iterator iter) const {
 1731|     64|    return iter.node_ != nullptr ? iter : end();
  ------------------
  |  Branch (1731:12): [True: 49, False: 15]
  ------------------
 1732|     64|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE3endEv:
 1439|     15|  const_iterator end() const {
 1440|     15|    return const_iterator(rightmost(), rightmost()->finish());
 1441|     15|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9rightmostEv:
 1663|     30|  const node_type *rightmost() const { return rightmost_.template get<2>(); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE6finishEv:
  701|  1.17k|  field_type finish() const { return GetField<2>()[2]; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm2EEEPKNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  665|  2.05k|  inline const typename layout_type::template ElementType<N> *GetField() const {
  666|       |    assert(N < 4 || is_internal());
  667|  2.05k|    return InternalLayout().template Pointer<N>(
  668|  2.05k|        reinterpret_cast<const char *>(this));
  669|  2.05k|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE14InternalLayoutEv:
  640|  3.67k|  constexpr static layout_type InternalLayout() {
  641|  3.67k|    return Layout(kNodeSlots, kNodeSlots + 1);
  642|  3.67k|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE6LayoutEmm:
  627|  3.70k|                                      const size_type child_count) {
  628|  3.70k|    return layout_type(
  629|  3.70k|        /*parent*/ 1,
  630|  3.70k|        /*generation*/ BtreeGenerationsEnabled() ? 1 : 0,
  ------------------
  |  Branch (630:24): [Folded, False: 3.70k]
  ------------------
  631|  3.70k|        /*position, start, finish, max_count*/ 4,
  632|  3.70k|        /*slots*/ slot_count,
  633|  3.70k|        /*children*/ child_count);
  634|  3.70k|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_EC2EPSG_i:
 1144|     79|      : btree_iterator_generation_info(n != nullptr ? n->generation()
  ------------------
  |  Branch (1144:40): [True: 79, False: 0]
  ------------------
 1145|     79|                                                    : ~uint32_t{}),
 1146|     79|        node_(n),
 1147|     79|        position_(p) {}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10generationEv:
  738|    349|  uint32_t generation() const {
  739|    349|    return BtreeGenerationsEnabled() ? *get_root_generation() : 0;
  ------------------
  |  Branch (739:12): [Folded, False: 349]
  ------------------
  740|    349|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE20internal_upper_boundIS8_EENS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSJ_EERKT_:
 2948|     64|auto btree<P>::internal_upper_bound(const K &key) const -> iterator {
 2949|     64|  iterator iter(const_cast<node_type *>(root()));
 2950|    110|  for (;;) {
 2951|    110|    iter.position_ = static_cast<int>(iter.node_->upper_bound(key, key_comp()));
 2952|    110|    if (iter.node_->is_leaf()) {
  ------------------
  |  Branch (2952:9): [True: 64, False: 46]
  ------------------
 2953|     64|      break;
 2954|     64|    }
 2955|     46|    iter.node_ = iter.node_->child(static_cast<field_type>(iter.position_));
 2956|     46|  }
 2957|     64|  return internal_last(iter);
 2958|     64|}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4rootEv:
 1660|    135|  const node_type *root() const { return root_; }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EC2EPSF_:
 1142|    134|  explicit btree_iterator(Node *n) : btree_iterator(n, n->start()) {}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5startEv:
  694|    786|  field_type start() const {
  695|       |    // TODO(ezb): when floating storage is implemented, return GetField<2>()[1];
  696|       |    assert(GetField<2>()[1] == 0);
  697|    786|    return 0;
  698|    786|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EC2EPSF_i:
 1144|    261|      : btree_iterator_generation_info(n != nullptr ? n->generation()
  ------------------
  |  Branch (1144:40): [True: 261, False: 0]
  ------------------
 1145|    261|                                                    : ~uint32_t{}),
 1146|    261|        node_(n),
 1147|    261|        position_(p) {}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE11upper_boundIS8_EEmRKT_RKNS1_19key_compare_adapterIS9_S8_E15checked_compareE:
  787|    110|  size_type upper_bound(const K &k, const key_compare &comp) const {
  788|    110|    auto upper_compare = upper_bound_adapter<key_compare>(comp);
  789|    110|    return use_linear_search::value ? linear_search(k, upper_compare).value
  ------------------
  |  Branch (789:12): [Folded, False: 110]
  ------------------
  790|    110|                                    : binary_search(k, upper_compare).value;
  791|    110|  }
_ZN4absl12lts_2024011618container_internal19upper_bound_adapterINS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS7_11SymbolEntryEE15checked_compareEEC2ERKSB_:
  451|    110|  explicit upper_bound_adapter(const Compare &c) : comp(c) {}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13binary_searchIS8_NS1_19upper_bound_adapterINS1_19key_compare_adapterIS9_S8_E15checked_compareEEEEENS1_12SearchResultImXsr23btree_is_key_compare_toIT0_S8_EE5valueEEERKT_RKSM_:
  802|    110|  binary_search(const K &k, const Compare &comp) const {
  803|    110|    return binary_search_impl(k, start(), finish(), comp,
  804|    110|                              btree_is_key_compare_to<Compare, key_type>());
  805|    110|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE18binary_search_implIS8_NS1_19upper_bound_adapterINS1_19key_compare_adapterIS9_S8_E15checked_compareEEEEENS1_12SearchResultImLb0EEERKT_mmRKT0_NSA_17integral_constantIbLb0EEE:
  845|    110|      std::false_type /* IsCompareTo */) const {
  846|    339|    while (s != e) {
  ------------------
  |  Branch (846:12): [True: 229, False: 110]
  ------------------
  847|    229|      const size_type mid = (s + e) >> 1;
  848|    229|      if (comp(key(mid), k)) {
  ------------------
  |  Branch (848:11): [True: 131, False: 98]
  ------------------
  849|    131|        s = mid + 1;
  850|    131|      } else {
  851|     98|        e = mid;
  852|     98|      }
  853|    229|    }
  854|    110|    return SearchResult<size_type, false>{s};
  855|    110|  }
_ZNK4absl12lts_2024011618container_internal19upper_bound_adapterINS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS7_11SymbolEntryEE15checked_compareEEclIS9_S9_EEbRKT_RKT0_:
  453|    229|  bool operator()(const K1 &a, const K2 &b) const {
  454|       |    // Returns true when a is not greater than b.
  455|    229|    return !compare_internal::compare_result_as_less_than(comp(b, a));
  456|    229|  }
_ZNK4absl12lts_2024011618container_internal19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS6_11SymbolEntryEE15checked_compareclIS8_S8_TnNSt3__19enable_ifIXsr3std7is_sameIbNSC_9result_ofIFKS7_RKT_RKT0_EE4typeEEE5valueEiE4typeELi0EEEbSI_SL_:
  236|    351|    bool operator()(const T &lhs, const U &rhs) const {
  237|       |      // NOTE: if any of these assertions fail, then the comparator does not
  238|       |      // establish a strict-weak-ordering (see
  239|       |      // https://en.cppreference.com/w/cpp/named_req/Compare).
  240|    351|      assert(is_self_equivalent(lhs));
  241|    351|      assert(is_self_equivalent(rhs));
  242|    351|      const bool lhs_comp_rhs = comp()(lhs, rhs);
  243|       |      assert(!lhs_comp_rhs || !comp()(rhs, lhs));
  244|    351|      return lhs_comp_rhs;
  245|    351|    }
_ZNK4absl12lts_2024011618container_internal20checked_compare_baseIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareELb1EE4compEv:
  175|    351|  const Compare &comp() const { return *this; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE3keyEm:
  752|    351|  const key_type &key(size_type i) const { return params_type::key(slot(i)); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4slotEm:
  675|    459|  const slot_type *slot(size_type i) const { return &GetField<3>()[i]; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm3EEEPKNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  665|    459|  inline const typename layout_type::template ElementType<N> *GetField() const {
  666|       |    assert(N < 4 || is_internal());
  667|    459|    return InternalLayout().template Pointer<N>(
  668|    459|        reinterpret_cast<const char *>(this));
  669|    459|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8key_compEv:
 1565|    297|  const key_compare &key_comp() const noexcept {
 1566|    297|    return rightmost_.template get<0>();
 1567|    297|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE7is_leafEv:
  685|    665|  bool is_leaf() const { return GetField<2>()[3] != kInternalNodeMaxCount; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5childEh:
  759|     94|  btree_node *child(field_type i) const { return GetField<4>()[i]; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm4EEEPKNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  665|     94|  inline const typename layout_type::template ElementType<N> *GetField() const {
  666|       |    assert(N < 4 || is_internal());
  667|     94|    return InternalLayout().template Pointer<N>(
  668|     94|        reinterpret_cast<const char *>(this));
  669|     94|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13internal_lastINS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSJ_EEEET_SN_:
 2802|     71|inline IterType btree<P>::internal_last(IterType iter) {
 2803|     71|  assert(iter.node_ != nullptr);
 2804|     82|  while (iter.position_ == iter.node_->finish()) {
  ------------------
  |  Branch (2804:10): [True: 29, False: 53]
  ------------------
 2805|     29|    iter.position_ = iter.node_->position();
 2806|     29|    iter.node_ = iter.node_->parent();
 2807|     29|    if (iter.node_->is_leaf()) {
  ------------------
  |  Branch (2807:9): [True: 18, False: 11]
  ------------------
 2808|     18|      iter.node_ = nullptr;
 2809|     18|      break;
 2810|     18|    }
 2811|     29|  }
 2812|     71|  iter.update_generation();
 2813|     71|  return iter;
 2814|     71|}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8positionEv:
  691|    140|  field_type position() const { return GetField<2>()[0]; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE6parentEv:
  718|    282|  btree_node *parent() const { return *GetField<0>(); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm0EEEPKNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  665|    282|  inline const typename layout_type::template ElementType<N> *GetField() const {
  666|       |    assert(N < 4 || is_internal());
  667|    282|    return InternalLayout().template Pointer<N>(
  668|    282|        reinterpret_cast<const char *>(this));
  669|    282|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E17update_generationEv:
 1304|    135|  void update_generation() {
 1305|    135|    btree_iterator_generation_info::update_generation(node_);
 1306|    135|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_EC2ISF_SI_SJ_TnNSB_9enable_ifIXaasr3std7is_sameINS2_IT_T0_T1_EENS2_ISF_SI_SJ_EEEE5valueL_ZNSB_17integral_constantIbLb1EE5valueEEEiE4typeELi0EEESQ_:
 1158|    403|      : btree_iterator_generation_info(other),
 1159|    403|        node_(other.node_),
 1160|    403|        position_(other.position_) {}
_ZNK4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_EneERKSK_:
 1171|     64|  bool operator!=(const const_iterator &other) const {
 1172|     64|    return !Equals(other);
 1173|     64|  }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_E6EqualsESK_:
 1248|    189|  bool Equals(const const_iterator other) const {
 1249|    189|    ABSL_HARDENING_ASSERT(((node_ == nullptr && other.node_ == nullptr) ||
  ------------------
  |  |  128|    189|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|    189|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 189]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1250|    189|                           (node_ != nullptr && other.node_ != nullptr)) &&
 1251|    189|                          "Comparing default-constructed iterator with "
 1252|    189|                          "non-default-constructed iterator.");
 1253|       |    // Note: we use assert instead of ABSL_HARDENING_ASSERT here because this
 1254|       |    // changes the complexity of Equals from O(1) to O(log(N) + log(M)) where
 1255|       |    // N/M are sizes of the containers containing node_/other.node_.
 1256|    189|    assert(AreNodesFromSameContainer(node_, other.node_) &&
 1257|    189|           "Comparing iterators from different containers.");
 1258|    189|    assert_valid_generation(node_);
 1259|    189|    other.assert_valid_generation(other.node_);
 1260|    189|    return node_ == other.node_ && position_ == other.position_;
  ------------------
  |  Branch (1260:12): [True: 109, False: 80]
  |  Branch (1260:36): [True: 24, False: 85]
  ------------------
 1261|    189|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5beginEv:
 1437|     64|  const_iterator begin() const { return const_iterator(leftmost()); }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8leftmostEv:
 1673|     64|  const node_type *leftmost() const { return root()->parent(); }
_ZN4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_EC2EPSG_:
 1142|     64|  explicit btree_iterator(Node *n) : btree_iterator(n, n->start()) {}
_ZN4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_EmmEv:
 1202|     57|  btree_iterator &operator--() {
 1203|     57|    decrement();
 1204|     57|    return *this;
 1205|     57|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_E9decrementEv:
 1288|     57|  void decrement() {
 1289|     57|    assert_valid_generation(node_);
 1290|     57|    if (node_->is_leaf() && --position_ >= node_->start()) {
  ------------------
  |  Branch (1290:9): [True: 55, False: 2]
  |  Branch (1290:29): [True: 50, False: 5]
  ------------------
 1291|     50|      return;
 1292|     50|    }
 1293|      7|    decrement_slow();
 1294|      7|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_E14decrement_slowEv:
 2159|      7|void btree_iterator<N, R, P>::decrement_slow() {
 2160|      7|  if (node_->is_leaf()) {
  ------------------
  |  Branch (2160:7): [True: 5, False: 2]
  ------------------
 2161|      5|    assert(position_ <= -1);
 2162|      5|    btree_iterator save(*this);
 2163|     10|    while (position_ < node_->start() && !node_->is_root()) {
  ------------------
  |  Branch (2163:12): [True: 5, False: 5]
  |  Branch (2163:42): [True: 5, False: 0]
  ------------------
 2164|      5|      assert(node_->parent()->child(node_->position()) == node_);
 2165|      5|      position_ = node_->position() - 1;
 2166|      5|      node_ = node_->parent();
 2167|      5|    }
 2168|       |    // TODO(ezb): assert we aren't decrementing begin() instead of handling.
 2169|      5|    if (position_ < node_->start()) {
  ------------------
  |  Branch (2169:9): [True: 0, False: 5]
  ------------------
 2170|      0|      *this = save;
 2171|      0|    }
 2172|      5|  } else {
 2173|      2|    assert(position_ >= node_->start());
 2174|      2|    node_ = node_->child(static_cast<field_type>(position_));
 2175|      2|    while (node_->is_internal()) {
  ------------------
  |  Branch (2175:12): [True: 0, False: 2]
  ------------------
 2176|      0|      node_ = node_->child(node_->finish());
 2177|      0|    }
 2178|      2|    position_ = node_->finish() - 1;
 2179|      2|  }
 2180|      7|}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE7is_rootEv:
  722|     44|  bool is_root() const { return parent()->is_leaf(); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE11is_internalEv:
  688|    179|  bool is_internal() const { return !is_leaf(); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE3endEv:
 1438|    127|  iterator end() { return iterator(rightmost(), rightmost()->finish()); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9rightmostEv:
 1662|    262|  node_type *rightmost() { return rightmost_.template get<2>(); }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_EneERKNS2_ISF_SI_SJ_EE:
 1168|    125|  bool operator!=(const iterator &other) const {
 1169|    125|    return !Equals(other);
 1170|    125|  }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_EptEv:
 1196|    108|  pointer operator->() const { return &operator*(); }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_EdeEv:
 1186|    108|  reference operator*() const {
 1187|    108|    ABSL_HARDENING_ASSERT(node_ != nullptr);
  ------------------
  |  |  128|    108|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|    108|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 108]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1188|    108|    assert_valid_generation(node_);
 1189|    108|    ABSL_HARDENING_ASSERT(position_ >= node_->start());
  ------------------
  |  |  128|    108|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|    108|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 108]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1190|    108|    if (position_ >= node_->finish()) {
  ------------------
  |  Branch (1190:9): [True: 0, False: 108]
  ------------------
 1191|      0|      ABSL_HARDENING_ASSERT(!IsEndIterator() && "Dereferencing end() iterator");
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1192|      0|      ABSL_HARDENING_ASSERT(position_ < node_->finish());
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1193|      0|    }
 1194|    108|    return node_->value(static_cast<field_type>(position_));
 1195|    108|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5valueEm:
  754|    108|  const_reference value(size_type i) const {
  755|    108|    return params_type::element(slot(i));
  756|    108|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_EppEv:
 1198|     61|  btree_iterator &operator++() {
 1199|     61|    increment();
 1200|     61|    return *this;
 1201|     61|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_E9incrementEv:
 1279|     61|  void increment() {
 1280|     61|    assert_valid_generation(node_);
 1281|     61|    if (node_->is_leaf() && ++position_ < node_->finish()) {
  ------------------
  |  Branch (1281:9): [True: 56, False: 5]
  |  Branch (1281:29): [True: 40, False: 16]
  ------------------
 1282|     40|      return;
 1283|     40|    }
 1284|     21|    increment_slow();
 1285|     21|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_E14increment_slowEv:
 2135|     21|void btree_iterator<N, R, P>::increment_slow() {
 2136|     21|  if (node_->is_leaf()) {
  ------------------
  |  Branch (2136:7): [True: 16, False: 5]
  ------------------
 2137|     16|    assert(position_ >= node_->finish());
 2138|     16|    btree_iterator save(*this);
 2139|     27|    while (position_ == node_->finish() && !node_->is_root()) {
  ------------------
  |  Branch (2139:12): [True: 25, False: 2]
  |  Branch (2139:44): [True: 11, False: 14]
  ------------------
 2140|     11|      assert(node_->parent()->child(node_->position()) == node_);
 2141|     11|      position_ = node_->position();
 2142|     11|      node_ = node_->parent();
 2143|     11|    }
 2144|       |    // TODO(ezb): assert we aren't incrementing end() instead of handling.
 2145|     16|    if (position_ == node_->finish()) {
  ------------------
  |  Branch (2145:9): [True: 14, False: 2]
  ------------------
 2146|     14|      *this = save;
 2147|     14|    }
 2148|     16|  } else {
 2149|      5|    assert(position_ < node_->finish());
 2150|      5|    node_ = node_->child(static_cast<field_type>(position_ + 1));
 2151|      5|    while (node_->is_internal()) {
  ------------------
  |  Branch (2151:12): [True: 0, False: 5]
  ------------------
 2152|      0|      node_ = node_->start_child();
 2153|      0|    }
 2154|      5|    position_ = node_->start();
 2155|      5|  }
 2156|     21|}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE11start_childEv:
  760|      1|  btree_node *start_child() const { return child(start()); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE18insert_hint_uniqueIS8_JRKS8_EEENSA_4pairINS1_14btree_iteratorINS1_10btree_nodeISD_EESH_PSG_EEbEESN_RKT_DpOT0_:
 2305|     64|    -> std::pair<iterator, bool> {
 2306|     64|  if (!empty()) {
  ------------------
  |  Branch (2306:7): [True: 61, False: 3]
  ------------------
 2307|     61|    if (position == end() || compare_keys(key, position.key())) {
  ------------------
  |  Branch (2307:9): [True: 14, False: 47]
  |  Branch (2307:9): [True: 61, False: 0]
  |  Branch (2307:30): [True: 47, False: 0]
  ------------------
 2308|     61|      if (position == begin() || compare_keys(std::prev(position).key(), key)) {
  ------------------
  |  Branch (2308:11): [True: 0, False: 61]
  |  Branch (2308:11): [True: 57, False: 4]
  |  Branch (2308:34): [True: 57, False: 4]
  ------------------
 2309|       |        // prev.key() < key < position.key()
 2310|     57|        return {internal_emplace(position, std::forward<Args>(args)...), true};
 2311|     57|      }
 2312|     61|    } else if (compare_keys(position.key(), key)) {
  ------------------
  |  Branch (2312:16): [True: 0, False: 0]
  ------------------
 2313|      0|      ++position;
 2314|      0|      if (position == end() || compare_keys(key, position.key())) {
  ------------------
  |  Branch (2314:11): [True: 0, False: 0]
  |  Branch (2314:11): [True: 0, False: 0]
  |  Branch (2314:32): [True: 0, False: 0]
  ------------------
 2315|       |        // {original `position`}.key() < key < {current `position`}.key()
 2316|      0|        return {internal_emplace(position, std::forward<Args>(args)...), true};
 2317|      0|      }
 2318|      0|    } else {
 2319|       |      // position.key() == key
 2320|      0|      return {position, false};
 2321|      0|    }
 2322|     61|  }
 2323|      7|  return insert_unique(key, std::forward<Args>(args)...);
 2324|     64|}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5emptyEv:
 1583|     77|  bool empty() const { return size_ == 0; }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EeqERKSJ_:
 1162|    122|  bool operator==(const iterator &other) const {
 1163|    122|    return Equals(other);
 1164|    122|  }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E6EqualsENS2_IKSF_SH_SI_EE:
 1248|    214|  bool Equals(const const_iterator other) const {
 1249|    214|    ABSL_HARDENING_ASSERT(((node_ == nullptr && other.node_ == nullptr) ||
  ------------------
  |  |  128|    214|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|    214|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 214]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1250|    214|                           (node_ != nullptr && other.node_ != nullptr)) &&
 1251|    214|                          "Comparing default-constructed iterator with "
 1252|    214|                          "non-default-constructed iterator.");
 1253|       |    // Note: we use assert instead of ABSL_HARDENING_ASSERT here because this
 1254|       |    // changes the complexity of Equals from O(1) to O(log(N) + log(M)) where
 1255|       |    // N/M are sizes of the containers containing node_/other.node_.
 1256|    214|    assert(AreNodesFromSameContainer(node_, other.node_) &&
 1257|    214|           "Comparing iterators from different containers.");
 1258|    214|    assert_valid_generation(node_);
 1259|    214|    other.assert_valid_generation(other.node_);
 1260|    214|    return node_ == other.node_ && position_ == other.position_;
  ------------------
  |  Branch (1260:12): [True: 115, False: 99]
  |  Branch (1260:36): [True: 16, False: 99]
  ------------------
 1261|    214|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE12compare_keysIS8_S8_EEbRKT_RKT0_:
 1569|    112|  bool compare_keys(const K1 &a, const K2 &b) const {
 1570|    112|    return compare_internal::compare_result_as_less_than(key_comp()(a, b));
 1571|    112|  }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E3keyEv:
 1297|    112|  const key_type &key() const {
 1298|    112|    return node_->key(static_cast<size_type>(position_));
 1299|    112|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5beginEv:
 1436|     63|  iterator begin() { return iterator(leftmost()); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8leftmostEv:
 1672|     63|  node_type *leftmost() { return root()->parent(); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4rootEv:
 1659|     84|  node_type *root() { return root_; }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EmmEv:
 1202|     63|  btree_iterator &operator--() {
 1203|     63|    decrement();
 1204|     63|    return *this;
 1205|     63|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E9decrementEv:
 1288|     63|  void decrement() {
 1289|     63|    assert_valid_generation(node_);
 1290|     63|    if (node_->is_leaf() && --position_ >= node_->start()) {
  ------------------
  |  Branch (1290:9): [True: 59, False: 4]
  |  Branch (1290:29): [True: 54, False: 5]
  ------------------
 1291|     54|      return;
 1292|     54|    }
 1293|      9|    decrement_slow();
 1294|      9|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E14decrement_slowEv:
 2159|      9|void btree_iterator<N, R, P>::decrement_slow() {
 2160|      9|  if (node_->is_leaf()) {
  ------------------
  |  Branch (2160:7): [True: 5, False: 4]
  ------------------
 2161|      5|    assert(position_ <= -1);
 2162|      5|    btree_iterator save(*this);
 2163|     10|    while (position_ < node_->start() && !node_->is_root()) {
  ------------------
  |  Branch (2163:12): [True: 5, False: 5]
  |  Branch (2163:42): [True: 5, False: 0]
  ------------------
 2164|      5|      assert(node_->parent()->child(node_->position()) == node_);
 2165|      5|      position_ = node_->position() - 1;
 2166|      5|      node_ = node_->parent();
 2167|      5|    }
 2168|       |    // TODO(ezb): assert we aren't decrementing begin() instead of handling.
 2169|      5|    if (position_ < node_->start()) {
  ------------------
  |  Branch (2169:9): [True: 0, False: 5]
  ------------------
 2170|      0|      *this = save;
 2171|      0|    }
 2172|      5|  } else {
 2173|      4|    assert(position_ >= node_->start());
 2174|      4|    node_ = node_->child(static_cast<field_type>(position_));
 2175|      4|    while (node_->is_internal()) {
  ------------------
  |  Branch (2175:12): [True: 0, False: 4]
  ------------------
 2176|      0|      node_ = node_->child(node_->finish());
 2177|      0|    }
 2178|      4|    position_ = node_->finish() - 1;
 2179|      4|  }
 2180|      9|}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE16internal_emplaceIJRKS8_EEENS1_14btree_iteratorINS1_10btree_nodeISD_EESH_PSG_EESM_DpOT_:
 2819|     64|    -> iterator {
 2820|     64|  if (iter.node_->is_internal()) {
  ------------------
  |  Branch (2820:7): [True: 2, False: 62]
  ------------------
 2821|       |    // We can't insert on an internal node. Instead, we'll insert after the
 2822|       |    // previous value which is guaranteed to be on a leaf node.
 2823|      2|    --iter;
 2824|      2|    ++iter.position_;
 2825|      2|  }
 2826|     64|  const field_type max_count = iter.node_->max_count();
 2827|     64|  allocator_type *alloc = mutable_allocator();
 2828|       |
 2829|     64|  const auto transfer_and_delete = [&](node_type *old_node,
 2830|     64|                                       node_type *new_node) {
 2831|     64|    new_node->transfer_n(old_node->count(), new_node->start(),
 2832|     64|                         old_node->start(), old_node, alloc);
 2833|     64|    new_node->set_finish(old_node->finish());
 2834|     64|    old_node->set_finish(old_node->start());
 2835|     64|    new_node->set_generation(old_node->generation());
 2836|     64|    node_type::clear_and_delete(old_node, alloc);
 2837|     64|  };
 2838|     64|  const auto replace_leaf_root_node = [&](field_type new_node_size) {
 2839|     64|    assert(iter.node_ == root());
 2840|     64|    node_type *old_root = iter.node_;
 2841|     64|    node_type *new_root = iter.node_ = new_leaf_root_node(new_node_size);
 2842|     64|    transfer_and_delete(old_root, new_root);
 2843|     64|    mutable_root() = mutable_rightmost() = new_root;
 2844|     64|  };
 2845|       |
 2846|     64|  bool replaced_node = false;
 2847|     64|  if (iter.node_->count() == max_count) {
  ------------------
  |  Branch (2847:7): [True: 24, False: 40]
  ------------------
 2848|       |    // Make room in the leaf for the new item.
 2849|     24|    if (max_count < kNodeSlots) {
  ------------------
  |  Branch (2849:9): [True: 7, False: 17]
  ------------------
 2850|       |      // Insertion into the root where the root is smaller than the full node
 2851|       |      // size. Simply grow the size of the root node.
 2852|      7|      replace_leaf_root_node(static_cast<field_type>(
 2853|      7|          (std::min)(static_cast<int>(kNodeSlots), 2 * max_count)));
 2854|      7|      replaced_node = true;
 2855|     17|    } else {
 2856|     17|      rebalance_or_split(&iter);
 2857|     17|    }
 2858|     24|  }
 2859|     64|  (void)replaced_node;
 2860|       |#if defined(ABSL_HAVE_ADDRESS_SANITIZER) || \
 2861|       |    defined(ABSL_HAVE_HWADDRESS_SANITIZER)
 2862|       |  if (!replaced_node) {
 2863|       |    assert(iter.node_->is_leaf());
 2864|       |    if (iter.node_->is_root()) {
 2865|       |      replace_leaf_root_node(max_count);
 2866|       |    } else {
 2867|       |      node_type *old_node = iter.node_;
 2868|       |      const bool was_rightmost = rightmost() == old_node;
 2869|       |      const bool was_leftmost = leftmost() == old_node;
 2870|       |      node_type *parent = old_node->parent();
 2871|       |      const field_type position = old_node->position();
 2872|       |      node_type *new_node = iter.node_ = new_leaf_node(position, parent);
 2873|       |      parent->set_child_noupdate_position(position, new_node);
 2874|       |      transfer_and_delete(old_node, new_node);
 2875|       |      if (was_rightmost) mutable_rightmost() = new_node;
 2876|       |      // The leftmost node is stored as the parent of the root node.
 2877|       |      if (was_leftmost) root()->set_parent(new_node);
 2878|       |    }
 2879|       |  }
 2880|       |#endif
 2881|     64|  iter.node_->emplace_value(static_cast<field_type>(iter.position_), alloc,
 2882|     64|                            std::forward<Args>(args)...);
 2883|       |  assert(
 2884|     64|      iter.node_->is_ordered_correctly(static_cast<field_type>(iter.position_),
 2885|     64|                                       original_key_compare(key_comp())) &&
 2886|     64|      "If this assert fails, then either (1) the comparator may violate "
 2887|     64|      "transitivity, i.e. comp(a,b) && comp(b,c) -> comp(a,c) (see "
 2888|     64|      "https://en.cppreference.com/w/cpp/named_req/Compare), or (2) a "
 2889|     64|      "key may have been mutated after it was inserted into the tree.");
 2890|     64|  ++size_;
 2891|     64|  iter.update_generation();
 2892|     64|  return iter;
 2893|     64|}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9max_countEv:
  708|     79|  field_type max_count() const {
  709|       |    // Internal nodes have max_count==kInternalNodeMaxCount.
  710|       |    // Leaf nodes have max_count in [1, kNodeSlots].
  711|     79|    const field_type max_count = GetField<2>()[3];
  712|     79|    return max_count == field_type{kInternalNodeMaxCount}
  ------------------
  |  Branch (712:12): [True: 0, False: 79]
  ------------------
  713|     79|               ? field_type{kNodeSlots}
  714|     79|               : max_count;
  715|     79|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE17mutable_allocatorEv:
 1676|    103|  allocator_type *mutable_allocator() noexcept {
 1677|    103|    return &rightmost_.template get<1>();
 1678|    103|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5countEv:
  704|    160|  field_type count() const {
  705|       |    assert(finish() >= start());
  706|    160|    return finish() - start();
  707|    160|  }
_ZZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE16internal_emplaceIJRKS8_EEENS1_14btree_iteratorINS1_10btree_nodeISD_EESH_PSG_EESM_DpOT_ENKUlhE_clEh:
 2838|      7|  const auto replace_leaf_root_node = [&](field_type new_node_size) {
 2839|       |    assert(iter.node_ == root());
 2840|      7|    node_type *old_root = iter.node_;
 2841|      7|    node_type *new_root = iter.node_ = new_leaf_root_node(new_node_size);
 2842|      7|    transfer_and_delete(old_root, new_root);
 2843|      7|    mutable_root() = mutable_rightmost() = new_root;
 2844|      7|  };
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE18new_leaf_root_nodeEh:
 1702|     10|  node_type *new_leaf_root_node(field_type max_count) {
 1703|     10|    node_type *n = allocate(node_type::LeafSize(max_count));
 1704|     10|    n->init_leaf(/*position=*/0, max_count, /*parent=*/n);
 1705|     10|    return n;
 1706|     10|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8allocateEm:
 1685|     20|  node_type *allocate(size_type size) {
 1686|     20|    return reinterpret_cast<node_type *>(
 1687|     20|        absl::container_internal::Allocate<node_type::Alignment()>(
 1688|     20|            mutable_allocator(), size));
 1689|     20|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8LeafSizeEm:
  643|     33|  constexpr static size_type LeafSize(const size_type slot_count = kNodeSlots) {
  644|     33|    return LeafLayout(slot_count).AllocSize();
  645|     33|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10LeafLayoutEm:
  637|     33|      const size_type slot_count = kNodeSlots) {
  638|     33|    return Layout(slot_count, 0);
  639|     33|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9init_leafEhhPSE_:
  954|     20|                 btree_node *parent) {
  955|     20|    set_generation(0);
  956|     20|    set_parent(parent);
  957|     20|    set_position(position);
  958|     20|    set_start(0);
  959|     20|    set_finish(0);
  960|     20|    set_max_count(max_count);
  961|     20|    absl::container_internal::SanitizerPoisonMemoryRegion(
  962|     20|        start_slot(), max_count * sizeof(slot_type));
  963|     20|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE14set_generationEj:
  743|     29|  void set_generation(uint32_t generation) {
  744|     29|    if (BtreeGenerationsEnabled()) GetField<1>()[0] = generation;
  ------------------
  |  Branch (744:9): [Folded, False: 29]
  ------------------
  745|     29|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10set_parentEPSE_:
  670|     22|  void set_parent(btree_node *p) { *GetField<0>() = p; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm0EEEPNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  659|     22|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|     22|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|     22|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE12set_positionEh:
  676|     26|  void set_position(field_type v) { GetField<2>()[0] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm2EEEPNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  659|    216|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|    216|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|    216|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9set_startEh:
  677|     20|  void set_start(field_type v) { GetField<2>()[1] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10set_finishEh:
  678|    140|  void set_finish(field_type v) { GetField<2>()[2] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13set_max_countEh:
  680|     22|  void set_max_count(field_type v) { GetField<2>()[3] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10start_slotEv:
  673|     20|  slot_type *start_slot() { return slot(start()); }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4slotEm:
  672|    510|  slot_type *slot(size_type i) { return &GetField<3>()[i]; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm3EEEPNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  659|    510|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|    510|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|    510|  }
_ZZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE16internal_emplaceIJRKS8_EEENS1_14btree_iteratorINS1_10btree_nodeISD_EESH_PSG_EESM_DpOT_ENKUlPSK_SQ_E_clESQ_SQ_:
 2830|      7|                                       node_type *new_node) {
 2831|      7|    new_node->transfer_n(old_node->count(), new_node->start(),
 2832|      7|                         old_node->start(), old_node, alloc);
 2833|      7|    new_node->set_finish(old_node->finish());
 2834|      7|    old_node->set_finish(old_node->start());
 2835|      7|    new_node->set_generation(old_node->generation());
 2836|      7|    node_type::clear_and_delete(old_node, alloc);
 2837|      7|  };
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10transfer_nEmmmPSE_PSC_:
 1020|     32|                  allocator_type *alloc) {
 1021|     32|    next_generation();
 1022|     32|    for (slot_type *src = src_node->slot(src_i), *end = src + n,
 1023|     32|                   *dest = slot(dest_i);
 1024|    112|         src != end; ++src, ++dest) {
  ------------------
  |  Branch (1024:10): [True: 80, False: 32]
  ------------------
 1025|     80|      transfer(dest, src, alloc);
 1026|     80|    }
 1027|     32|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE15next_generationEv:
  747|    197|  void next_generation() {
  748|    197|    if (BtreeGenerationsEnabled()) ++*get_root_generation();
  ------------------
  |  Branch (748:9): [Folded, False: 197]
  ------------------
  749|    197|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8transferEPS8_SF_PSC_:
 1003|    235|  static void transfer(slot_type *dest, slot_type *src, allocator_type *alloc) {
 1004|    235|    absl::container_internal::SanitizerUnpoisonObject(dest);
 1005|    235|    params_type::transfer(alloc, dest, src);
 1006|    235|    absl::container_internal::SanitizerPoisonObject(src);
 1007|    235|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE16clear_and_deleteEPSE_PSC_:
 2008|      9|void btree_node<P>::clear_and_delete(btree_node *node, allocator_type *alloc) {
 2009|      9|  if (node->is_leaf()) {
  ------------------
  |  Branch (2009:7): [True: 8, False: 1]
  ------------------
 2010|      8|    node->value_destroy_n(node->start(), node->count(), alloc);
 2011|      8|    deallocate(LeafSize(node->max_count()), node, alloc);
 2012|      8|    return;
 2013|      8|  }
 2014|      1|  if (node->count() == 0) {
  ------------------
  |  Branch (2014:7): [True: 0, False: 1]
  ------------------
 2015|      0|    deallocate(InternalSize(), node, alloc);
 2016|      0|    return;
 2017|      0|  }
 2018|       |
 2019|       |  // The parent of the root of the subtree we are deleting.
 2020|      1|  btree_node *delete_root_parent = node->parent();
 2021|       |
 2022|       |  // Navigate to the leftmost leaf under node, and then delete upwards.
 2023|      2|  while (node->is_internal()) node = node->start_child();
  ------------------
  |  Branch (2023:10): [True: 1, False: 1]
  ------------------
 2024|       |#ifdef ABSL_BTREE_ENABLE_GENERATIONS
 2025|       |  // When generations are enabled, we delete the leftmost leaf last in case it's
 2026|       |  // the parent of the root and we need to check whether it's a leaf before we
 2027|       |  // can update the root's generation.
 2028|       |  // TODO(ezb): if we change btree_node::is_root to check a bool inside the node
 2029|       |  // instead of checking whether the parent is a leaf, we can remove this logic.
 2030|       |  btree_node *leftmost_leaf = node;
 2031|       |#endif
 2032|       |  // Use `size_type` because `pos` needs to be able to hold `kNodeSlots+1`,
 2033|       |  // which isn't guaranteed to be a valid `field_type`.
 2034|      1|  size_type pos = node->position();
 2035|      1|  btree_node *parent = node->parent();
 2036|      1|  for (;;) {
 2037|       |    // In each iteration of the next loop, we delete one leaf node and go right.
 2038|      1|    assert(pos <= parent->finish());
 2039|      7|    do {
 2040|      7|      node = parent->child(static_cast<field_type>(pos));
 2041|      7|      if (node->is_internal()) {
  ------------------
  |  Branch (2041:11): [True: 0, False: 7]
  ------------------
 2042|       |        // Navigate to the leftmost leaf under node.
 2043|      0|        while (node->is_internal()) node = node->start_child();
  ------------------
  |  Branch (2043:16): [True: 0, False: 0]
  ------------------
 2044|      0|        pos = node->position();
 2045|      0|        parent = node->parent();
 2046|      0|      }
 2047|      7|      node->value_destroy_n(node->start(), node->count(), alloc);
 2048|       |#ifdef ABSL_BTREE_ENABLE_GENERATIONS
 2049|       |      if (leftmost_leaf != node)
 2050|       |#endif
 2051|      7|        deallocate(LeafSize(node->max_count()), node, alloc);
 2052|      7|      ++pos;
 2053|      7|    } while (pos <= parent->finish());
  ------------------
  |  Branch (2053:14): [True: 6, False: 1]
  ------------------
 2054|       |
 2055|       |    // Once we've deleted all children of parent, delete parent and go up/right.
 2056|      1|    assert(pos > parent->finish());
 2057|      1|    do {
 2058|      1|      node = parent;
 2059|      1|      pos = node->position();
 2060|      1|      parent = node->parent();
 2061|      1|      node->value_destroy_n(node->start(), node->count(), alloc);
 2062|      1|      deallocate(InternalSize(), node, alloc);
 2063|      1|      if (parent == delete_root_parent) {
  ------------------
  |  Branch (2063:11): [True: 1, False: 0]
  ------------------
 2064|       |#ifdef ABSL_BTREE_ENABLE_GENERATIONS
 2065|       |        deallocate(LeafSize(leftmost_leaf->max_count()), leftmost_leaf, alloc);
 2066|       |#endif
 2067|      1|        return;
 2068|      1|      }
 2069|      0|      ++pos;
 2070|      0|    } while (pos > parent->finish());
  ------------------
  |  Branch (2070:14): [True: 0, False: 0]
  ------------------
 2071|      1|  }
 2072|      1|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE15value_destroy_nEhhPSC_:
  995|     16|                       allocator_type *alloc) {
  996|     16|    next_generation();
  997|     61|    for (slot_type *s = slot(i), *end = slot(i + n); s != end; ++s) {
  ------------------
  |  Branch (997:54): [True: 45, False: 16]
  ------------------
  998|     45|      params_type::destroy(alloc, s);
  999|     45|      absl::container_internal::SanitizerPoisonObject(s);
 1000|     45|    }
 1001|     16|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10deallocateEmPSE_PSC_:
  974|     16|                         allocator_type *alloc) {
  975|     16|    absl::container_internal::SanitizerUnpoisonMemoryRegion(node, size);
  976|     16|    absl::container_internal::Deallocate<Alignment()>(alloc, node, size);
  977|     16|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE12InternalSizeEv:
  646|      3|  constexpr static size_type InternalSize() {
  647|      3|    return InternalLayout().AllocSize();
  648|      3|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE17mutable_rightmostEv:
 1664|     17|  node_type *&mutable_rightmost() noexcept {
 1665|     17|    return rightmost_.template get<2>();
 1666|     17|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE12mutable_rootEv:
 1661|     14|  node_type *&mutable_root() noexcept { return root_; }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE18rebalance_or_splitEPNS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSI_EE:
 2615|     17|void btree<P>::rebalance_or_split(iterator *iter) {
 2616|     17|  node_type *&node = iter->node_;
 2617|     17|  int &insert_position = iter->position_;
 2618|     17|  assert(node->count() == node->max_count());
 2619|     17|  assert(kNodeSlots == node->max_count());
 2620|       |
 2621|       |  // First try to make room on the node by rebalancing.
 2622|     17|  node_type *parent = node->parent();
 2623|     17|  if (node != root()) {
  ------------------
  |  Branch (2623:7): [True: 15, False: 2]
  ------------------
 2624|     15|    if (node->position() > parent->start()) {
  ------------------
  |  Branch (2624:9): [True: 13, False: 2]
  ------------------
 2625|       |      // Try rebalancing with our left sibling.
 2626|     13|      node_type *left = parent->child(node->position() - 1);
 2627|     13|      assert(left->max_count() == kNodeSlots);
 2628|     13|      if (left->count() < kNodeSlots) {
  ------------------
  |  Branch (2628:11): [True: 8, False: 5]
  ------------------
 2629|       |        // We bias rebalancing based on the position being inserted. If we're
 2630|       |        // inserting at the end of the right node then we bias rebalancing to
 2631|       |        // fill up the left node.
 2632|      8|        field_type to_move =
 2633|      8|            (kNodeSlots - left->count()) /
 2634|      8|            (1 + (static_cast<field_type>(insert_position) < kNodeSlots));
 2635|      8|        to_move = (std::max)(field_type{1}, to_move);
 2636|       |
 2637|      8|        if (static_cast<field_type>(insert_position) - to_move >=
  ------------------
  |  Branch (2637:13): [True: 8, False: 0]
  ------------------
 2638|      8|                node->start() ||
 2639|      8|            left->count() + to_move < kNodeSlots) {
  ------------------
  |  Branch (2639:13): [True: 0, False: 0]
  ------------------
 2640|      8|          left->rebalance_right_to_left(to_move, node, mutable_allocator());
 2641|       |
 2642|      8|          assert(node->max_count() - node->count() == to_move);
 2643|      8|          insert_position = static_cast<int>(
 2644|      8|              static_cast<field_type>(insert_position) - to_move);
 2645|      8|          if (insert_position < node->start()) {
  ------------------
  |  Branch (2645:15): [True: 0, False: 8]
  ------------------
 2646|      0|            insert_position = insert_position + left->count() + 1;
 2647|      0|            node = left;
 2648|      0|          }
 2649|       |
 2650|      8|          assert(node->count() < node->max_count());
 2651|      8|          return;
 2652|      8|        }
 2653|      8|      }
 2654|     13|    }
 2655|       |
 2656|      7|    if (node->position() < parent->finish()) {
  ------------------
  |  Branch (2656:9): [True: 4, False: 3]
  ------------------
 2657|       |      // Try rebalancing with our right sibling.
 2658|      4|      node_type *right = parent->child(node->position() + 1);
 2659|      4|      assert(right->max_count() == kNodeSlots);
 2660|      4|      if (right->count() < kNodeSlots) {
  ------------------
  |  Branch (2660:11): [True: 1, False: 3]
  ------------------
 2661|       |        // We bias rebalancing based on the position being inserted. If we're
 2662|       |        // inserting at the beginning of the left node then we bias rebalancing
 2663|       |        // to fill up the right node.
 2664|      1|        field_type to_move = (kNodeSlots - right->count()) /
 2665|      1|                             (1 + (insert_position > node->start()));
 2666|      1|        to_move = (std::max)(field_type{1}, to_move);
 2667|       |
 2668|      1|        if (static_cast<field_type>(insert_position) <=
  ------------------
  |  Branch (2668:13): [True: 0, False: 1]
  ------------------
 2669|      1|                node->finish() - to_move ||
 2670|      1|            right->count() + to_move < kNodeSlots) {
  ------------------
  |  Branch (2670:13): [True: 1, False: 0]
  ------------------
 2671|      1|          node->rebalance_left_to_right(to_move, right, mutable_allocator());
 2672|       |
 2673|      1|          if (insert_position > node->finish()) {
  ------------------
  |  Branch (2673:15): [True: 1, False: 0]
  ------------------
 2674|      1|            insert_position = insert_position - node->count() - 1;
 2675|      1|            node = right;
 2676|      1|          }
 2677|       |
 2678|      1|          assert(node->count() < node->max_count());
 2679|      1|          return;
 2680|      1|        }
 2681|      1|      }
 2682|      4|    }
 2683|       |
 2684|       |    // Rebalancing failed, make sure there is room on the parent node for a new
 2685|       |    // value.
 2686|      7|    assert(parent->max_count() == kNodeSlots);
 2687|      6|    if (parent->count() == kNodeSlots) {
  ------------------
  |  Branch (2687:9): [True: 0, False: 6]
  ------------------
 2688|      0|      iterator parent_iter(parent, node->position());
 2689|      0|      rebalance_or_split(&parent_iter);
 2690|      0|      parent = node->parent();
 2691|      0|    }
 2692|      6|  } else {
 2693|       |    // Rebalancing not possible because this is the root node.
 2694|       |    // Create a new root node and set the current root node as the child of the
 2695|       |    // new root.
 2696|      2|    parent = new_internal_node(/*position=*/0, parent);
 2697|      2|    parent->set_generation(root()->generation());
 2698|      2|    parent->init_child(parent->start(), node);
 2699|      2|    mutable_root() = parent;
 2700|       |    // If the former root was a leaf node, then it's now the rightmost node.
 2701|      2|    assert(parent->start_child()->is_internal() ||
 2702|      2|           parent->start_child() == rightmost());
 2703|      2|  }
 2704|       |
 2705|       |  // Split the node.
 2706|      8|  node_type *split_node;
 2707|      8|  if (node->is_leaf()) {
  ------------------
  |  Branch (2707:7): [True: 8, False: 0]
  ------------------
 2708|      8|    split_node = new_leaf_node(node->position() + 1, parent);
 2709|      8|    node->split(insert_position, split_node, mutable_allocator());
 2710|      8|    if (rightmost() == node) mutable_rightmost() = split_node;
  ------------------
  |  Branch (2710:9): [True: 5, False: 3]
  ------------------
 2711|      8|  } else {
 2712|      0|    split_node = new_internal_node(node->position() + 1, parent);
 2713|      0|    node->split(insert_position, split_node, mutable_allocator());
 2714|      0|  }
 2715|       |
 2716|      8|  if (insert_position > node->finish()) {
  ------------------
  |  Branch (2716:7): [True: 8, False: 0]
  ------------------
 2717|      8|    insert_position = insert_position - node->count() - 1;
 2718|      8|    node = split_node;
 2719|      8|  }
 2720|      8|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE23rebalance_right_to_leftEhPSE_PSC_:
 1854|      8|                                            allocator_type *alloc) {
 1855|      8|  assert(parent() == right->parent());
 1856|      8|  assert(position() + 1 == right->position());
 1857|      8|  assert(right->count() >= count());
 1858|      8|  assert(to_move >= 1);
 1859|      8|  assert(to_move <= right->count());
 1860|       |
 1861|       |  // 1) Move the delimiting value in the parent to the left node.
 1862|      8|  transfer(finish(), position(), parent(), alloc);
 1863|       |
 1864|       |  // 2) Move the (to_move - 1) values from the right node to the left node.
 1865|      8|  transfer_n(to_move - 1, finish() + 1, right->start(), right, alloc);
 1866|       |
 1867|       |  // 3) Move the new delimiting value to the parent from the right node.
 1868|      8|  parent()->transfer(position(), right->start() + to_move - 1, right, alloc);
 1869|       |
 1870|       |  // 4) Shift the values in the right node to their correct positions.
 1871|      8|  right->transfer_n(right->count() - to_move, right->start(),
 1872|      8|                    right->start() + to_move, right, alloc);
 1873|       |
 1874|      8|  if (is_internal()) {
  ------------------
  |  Branch (1874:7): [True: 0, False: 8]
  ------------------
 1875|       |    // Move the child pointers from the right to the left node.
 1876|      0|    for (field_type i = 0; i < to_move; ++i) {
  ------------------
  |  Branch (1876:28): [True: 0, False: 0]
  ------------------
 1877|      0|      init_child(finish() + i + 1, right->child(i));
 1878|      0|    }
 1879|      0|    for (field_type i = right->start(); i <= right->finish() - to_move; ++i) {
  ------------------
  |  Branch (1879:41): [True: 0, False: 0]
  ------------------
 1880|      0|      assert(i + to_move <= right->max_count());
 1881|      0|      right->init_child(i, right->child(i + to_move));
 1882|      0|      right->clear_child(i + to_move);
 1883|      0|    }
 1884|      0|  }
 1885|       |
 1886|       |  // Fixup `finish` on the left and right nodes.
 1887|      8|  set_finish(finish() + to_move);
 1888|      8|  right->set_finish(right->finish() - to_move);
 1889|      8|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8transferEmmPSE_PSC_:
 1011|     18|                btree_node *src_node, allocator_type *alloc) {
 1012|     18|    next_generation();
 1013|     18|    transfer(slot(dest_i), src_node->slot(src_i), alloc);
 1014|     18|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE11clear_childEh:
  762|      3|  void clear_child(field_type i) {
  763|      3|    absl::container_internal::SanitizerPoisonObject(&mutable_child(i));
  764|      3|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13mutable_childEh:
  761|     33|  btree_node *&mutable_child(field_type i) { return GetField<4>()[i]; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm4EEEPNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  659|     33|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|     33|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|     33|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE23rebalance_left_to_rightEhPSE_PSC_:
 1894|      1|                                            allocator_type *alloc) {
 1895|      1|  assert(parent() == right->parent());
 1896|      1|  assert(position() + 1 == right->position());
 1897|      1|  assert(count() >= right->count());
 1898|      1|  assert(to_move >= 1);
 1899|      1|  assert(to_move <= count());
 1900|       |
 1901|       |  // Values in the right node are shifted to the right to make room for the
 1902|       |  // new to_move values. Then, the delimiting value in the parent and the
 1903|       |  // other (to_move - 1) values in the left node are moved into the right node.
 1904|       |  // Lastly, a new delimiting value is moved from the left node into the
 1905|       |  // parent, and the remaining empty left node entries are destroyed.
 1906|       |
 1907|       |  // 1) Shift existing values in the right node to their correct positions.
 1908|      1|  right->transfer_n_backward(right->count(), right->start() + to_move,
 1909|      1|                             right->start(), right, alloc);
 1910|       |
 1911|       |  // 2) Move the delimiting value in the parent to the right node.
 1912|      1|  right->transfer(right->start() + to_move - 1, position(), parent(), alloc);
 1913|       |
 1914|       |  // 3) Move the (to_move - 1) values from the left node to the right node.
 1915|      1|  right->transfer_n(to_move - 1, right->start(), finish() - (to_move - 1), this,
 1916|      1|                    alloc);
 1917|       |
 1918|       |  // 4) Move the new delimiting value to the parent from the left node.
 1919|      1|  parent()->transfer(position(), finish() - to_move, this, alloc);
 1920|       |
 1921|      1|  if (is_internal()) {
  ------------------
  |  Branch (1921:7): [True: 0, False: 1]
  ------------------
 1922|       |    // Move the child pointers from the left to the right node.
 1923|      0|    for (field_type i = right->finish() + 1; i > right->start(); --i) {
  ------------------
  |  Branch (1923:46): [True: 0, False: 0]
  ------------------
 1924|      0|      right->init_child(i - 1 + to_move, right->child(i - 1));
 1925|      0|      right->clear_child(i - 1);
 1926|      0|    }
 1927|      0|    for (field_type i = 1; i <= to_move; ++i) {
  ------------------
  |  Branch (1927:28): [True: 0, False: 0]
  ------------------
 1928|      0|      right->init_child(i - 1, child(finish() - to_move + i));
 1929|      0|      clear_child(finish() - to_move + i);
 1930|      0|    }
 1931|      0|  }
 1932|       |
 1933|       |  // Fixup the counts on the left and right nodes.
 1934|      1|  set_finish(finish() - to_move);
 1935|      1|  right->set_finish(right->finish() + to_move);
 1936|      1|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE19transfer_n_backwardEmmmPSE_PSC_:
 1033|     51|                           allocator_type *alloc) {
 1034|     51|    next_generation();
 1035|     51|    for (slot_type *src = src_node->slot(src_i + n), *end = src - n,
 1036|     51|                   *dest = slot(dest_i + n);
 1037|    188|         src != end; --src, --dest) {
  ------------------
  |  Branch (1037:10): [True: 137, False: 51]
  ------------------
 1038|       |      // If we modified the loop index calculations above to avoid the -1s here,
 1039|       |      // it would result in UB in the computation of `end` (and possibly `src`
 1040|       |      // as well, if n == 0), since slot() is effectively an array index and it
 1041|       |      // is UB to compute the address of any out-of-bounds array element except
 1042|       |      // for one-past-the-end.
 1043|    137|      transfer(dest - 1, src - 1, alloc);
 1044|    137|    }
 1045|     51|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE17new_internal_nodeEhPNS1_10btree_nodeISD_EE:
 1692|      2|  node_type *new_internal_node(field_type position, node_type *parent) {
 1693|      2|    node_type *n = allocate(node_type::InternalSize());
 1694|      2|    n->init_internal(position, parent);
 1695|      2|    return n;
 1696|      2|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13init_internalEhPSE_:
  964|      2|  void init_internal(field_type position, btree_node *parent) {
  965|      2|    init_leaf(position, kNodeSlots, parent);
  966|       |    // Set `max_count` to a sentinel value to indicate that this node is
  967|       |    // internal.
  968|      2|    set_max_count(kInternalNodeMaxCount);
  969|      2|    absl::container_internal::SanitizerPoisonMemoryRegion(
  970|      2|        &mutable_child(start()), (kNodeSlots + 1) * sizeof(btree_node *));
  971|      2|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10init_childEhPSE_:
  773|      2|  void init_child(field_type i, btree_node *c) {
  774|      2|    set_child(i, c);
  775|      2|    c->set_parent(this);
  776|      2|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9set_childEhPSE_:
  769|      6|  void set_child(field_type i, btree_node *c) {
  770|      6|    set_child_noupdate_position(i, c);
  771|      6|    c->set_position(i);
  772|      6|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE27set_child_noupdate_positionEhPSE_:
  765|     14|  void set_child_noupdate_position(field_type i, btree_node *c) {
  766|     14|    absl::container_internal::SanitizerUnpoisonObject(&mutable_child(i));
  767|     14|    mutable_child(i) = c;
  768|     14|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13new_leaf_nodeEhPNS1_10btree_nodeISD_EE:
 1697|      8|  node_type *new_leaf_node(field_type position, node_type *parent) {
 1698|      8|    node_type *n = allocate(node_type::LeafSize());
 1699|      8|    n->init_leaf(position, kNodeSlots, parent);
 1700|      8|    return n;
 1701|      8|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5splitEiPSE_PSC_:
 1940|      8|                          allocator_type *alloc) {
 1941|      8|  assert(dest->count() == 0);
 1942|      8|  assert(max_count() == kNodeSlots);
 1943|      8|  assert(position() + 1 == dest->position());
 1944|      8|  assert(parent() == dest->parent());
 1945|       |
 1946|       |  // We bias the split based on the position being inserted. If we're
 1947|       |  // inserting at the beginning of the left node then bias the split to put
 1948|       |  // more values on the right node. If we're inserting at the end of the
 1949|       |  // right node then bias the split to put more values on the left node.
 1950|      8|  if (insert_position == start()) {
  ------------------
  |  Branch (1950:7): [True: 0, False: 8]
  ------------------
 1951|      0|    dest->set_finish(dest->start() + finish() - 1);
 1952|      8|  } else if (insert_position == kNodeSlots) {
  ------------------
  |  Branch (1952:14): [True: 3, False: 5]
  ------------------
 1953|      3|    dest->set_finish(dest->start());
 1954|      5|  } else {
 1955|      5|    dest->set_finish(dest->start() + count() / 2);
 1956|      5|  }
 1957|      8|  set_finish(finish() - dest->count());
 1958|      8|  assert(count() >= 1);
 1959|       |
 1960|       |  // Move values from the left sibling to the right sibling.
 1961|      8|  dest->transfer_n(dest->count(), dest->start(), finish(), this, alloc);
 1962|       |
 1963|       |  // The split key is the largest value in the left sibling.
 1964|      8|  --mutable_finish();
 1965|      8|  parent()->emplace_value(position(), alloc, finish_slot());
 1966|      8|  value_destroy(finish(), alloc);
 1967|      8|  parent()->set_child_noupdate_position(position() + 1, dest);
 1968|       |
 1969|      8|  if (is_internal()) {
  ------------------
  |  Branch (1969:7): [True: 0, False: 8]
  ------------------
 1970|      0|    for (field_type i = dest->start(), j = finish() + 1; i <= dest->finish();
  ------------------
  |  Branch (1970:58): [True: 0, False: 0]
  ------------------
 1971|      0|         ++i, ++j) {
 1972|       |      assert(child(j) != nullptr);
 1973|      0|      dest->init_child(i, child(j));
 1974|      0|      clear_child(j);
 1975|      0|    }
 1976|      0|  }
 1977|      8|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE14mutable_finishEv:
  671|      8|  field_type &mutable_finish() { return GetField<2>()[2]; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13emplace_valueIJPS8_EEEvhPSC_DpOT_:
 1807|      8|                                         Args &&...args) {
 1808|      8|  assert(i >= start());
 1809|      8|  assert(i <= finish());
 1810|       |  // Shift old values to create space for new value and then construct it in
 1811|       |  // place.
 1812|      8|  if (i < finish()) {
  ------------------
  |  Branch (1812:7): [True: 3, False: 5]
  ------------------
 1813|      3|    transfer_n_backward(finish() - i, /*dest_i=*/i + 1, /*src_i=*/i, this,
 1814|      3|                        alloc);
 1815|      3|  }
 1816|      8|  value_init(static_cast<field_type>(i), alloc, std::forward<Args>(args)...);
 1817|      8|  set_finish(finish() + 1);
 1818|       |
 1819|      8|  if (is_internal() && finish() > i + 1) {
  ------------------
  |  Branch (1819:7): [True: 8, False: 0]
  |  Branch (1819:24): [True: 3, False: 5]
  ------------------
 1820|      7|    for (field_type j = finish(); j > i + 1; --j) {
  ------------------
  |  Branch (1820:35): [True: 4, False: 3]
  ------------------
 1821|      4|      set_child(j, child(j - 1));
 1822|      4|    }
 1823|      3|    clear_child(i + 1);
 1824|      3|  }
 1825|      8|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10value_initIJPS8_EEEvhPSC_DpOT_:
  984|      8|  void value_init(const field_type i, allocator_type *alloc, Args &&...args) {
  985|      8|    next_generation();
  986|      8|    absl::container_internal::SanitizerUnpoisonObject(slot(i));
  987|      8|    params_type::construct(alloc, slot(i), std::forward<Args>(args)...);
  988|      8|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE11finish_slotEv:
  674|      8|  slot_type *finish_slot() { return slot(finish()); }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13value_destroyEhPSC_:
  989|      8|  void value_destroy(const field_type i, allocator_type *alloc) {
  990|      8|    next_generation();
  991|      8|    params_type::destroy(alloc, slot(i));
  992|      8|    absl::container_internal::SanitizerPoisonObject(slot(i));
  993|      8|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13emplace_valueIJRKS8_EEEvhPSC_DpOT_:
 1807|     64|                                         Args &&...args) {
 1808|     64|  assert(i >= start());
 1809|     64|  assert(i <= finish());
 1810|       |  // Shift old values to create space for new value and then construct it in
 1811|       |  // place.
 1812|     64|  if (i < finish()) {
  ------------------
  |  Branch (1812:7): [True: 47, False: 17]
  ------------------
 1813|     47|    transfer_n_backward(finish() - i, /*dest_i=*/i + 1, /*src_i=*/i, this,
 1814|     47|                        alloc);
 1815|     47|  }
 1816|     64|  value_init(static_cast<field_type>(i), alloc, std::forward<Args>(args)...);
 1817|     64|  set_finish(finish() + 1);
 1818|       |
 1819|     64|  if (is_internal() && finish() > i + 1) {
  ------------------
  |  Branch (1819:7): [True: 0, False: 64]
  |  Branch (1819:24): [True: 0, False: 0]
  ------------------
 1820|      0|    for (field_type j = finish(); j > i + 1; --j) {
  ------------------
  |  Branch (1820:35): [True: 0, False: 0]
  ------------------
 1821|      0|      set_child(j, child(j - 1));
 1822|      0|    }
 1823|      0|    clear_child(i + 1);
 1824|      0|  }
 1825|     64|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10value_initIJRKS8_EEEvhPSC_DpOT_:
  984|     64|  void value_init(const field_type i, allocator_type *alloc, Args &&...args) {
  985|     64|    next_generation();
  986|     64|    absl::container_internal::SanitizerUnpoisonObject(slot(i));
  987|     64|    params_type::construct(alloc, slot(i), std::forward<Args>(args)...);
  988|     64|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EppEv:
 1198|     45|  btree_iterator &operator++() {
 1199|     45|    increment();
 1200|     45|    return *this;
 1201|     45|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E9incrementEv:
 1279|     45|  void increment() {
 1280|     45|    assert_valid_generation(node_);
 1281|     45|    if (node_->is_leaf() && ++position_ < node_->finish()) {
  ------------------
  |  Branch (1281:9): [True: 39, False: 6]
  |  Branch (1281:29): [True: 31, False: 8]
  ------------------
 1282|     31|      return;
 1283|     31|    }
 1284|     14|    increment_slow();
 1285|     14|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E14increment_slowEv:
 2135|     14|void btree_iterator<N, R, P>::increment_slow() {
 2136|     14|  if (node_->is_leaf()) {
  ------------------
  |  Branch (2136:7): [True: 8, False: 6]
  ------------------
 2137|      8|    assert(position_ >= node_->finish());
 2138|      8|    btree_iterator save(*this);
 2139|     15|    while (position_ == node_->finish() && !node_->is_root()) {
  ------------------
  |  Branch (2139:12): [True: 9, False: 6]
  |  Branch (2139:44): [True: 7, False: 2]
  ------------------
 2140|      7|      assert(node_->parent()->child(node_->position()) == node_);
 2141|      7|      position_ = node_->position();
 2142|      7|      node_ = node_->parent();
 2143|      7|    }
 2144|       |    // TODO(ezb): assert we aren't incrementing end() instead of handling.
 2145|      8|    if (position_ == node_->finish()) {
  ------------------
  |  Branch (2145:9): [True: 2, False: 6]
  ------------------
 2146|      2|      *this = save;
 2147|      2|    }
 2148|      8|  } else {
 2149|      6|    assert(position_ < node_->finish());
 2150|      6|    node_ = node_->child(static_cast<field_type>(position_ + 1));
 2151|      6|    while (node_->is_internal()) {
  ------------------
  |  Branch (2151:12): [True: 0, False: 6]
  ------------------
 2152|      0|      node_ = node_->start_child();
 2153|      0|    }
 2154|      6|    position_ = node_->start();
 2155|      6|  }
 2156|     14|}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13insert_uniqueIS8_JRKS8_EEENSA_4pairINS1_14btree_iteratorINS1_10btree_nodeISD_EESH_PSG_EEbEERKT_DpOT0_:
 2278|      7|    -> std::pair<iterator, bool> {
 2279|      7|  if (empty()) {
  ------------------
  |  Branch (2279:7): [True: 3, False: 4]
  ------------------
 2280|      3|    mutable_root() = mutable_rightmost() = new_leaf_root_node(1);
 2281|      3|  }
 2282|       |
 2283|      7|  SearchResult<iterator, is_key_compare_to::value> res = internal_locate(key);
 2284|      7|  iterator iter = res.value;
 2285|       |
 2286|      7|  if (res.HasMatch()) {
  ------------------
  |  Branch (2286:7): [Folded, False: 7]
  ------------------
 2287|      0|    if (res.IsEq()) {
  ------------------
  |  Branch (2287:9): [Folded, False: 0]
  ------------------
 2288|       |      // The key already exists in the tree, do nothing.
 2289|      0|      return {iter, false};
 2290|      0|    }
 2291|      7|  } else {
 2292|      7|    iterator last = internal_last(iter);
 2293|      7|    if (last.node_ && !compare_keys(key, last.key())) {
  ------------------
  |  Branch (2293:9): [True: 4, False: 3]
  |  Branch (2293:23): [True: 0, False: 4]
  ------------------
 2294|       |      // The key already exists in the tree, do nothing.
 2295|      0|      return {last, false};
 2296|      0|    }
 2297|      7|  }
 2298|      7|  return {internal_emplace(iter, std::forward<Args>(args)...), true};
 2299|      7|}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE15internal_locateIS8_EENS1_12SearchResultINS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSK_EELb0EEERKT_:
 2898|      7|    -> SearchResult<iterator, is_key_compare_to::value> {
 2899|      7|  iterator iter(const_cast<node_type *>(root()));
 2900|      9|  for (;;) {
 2901|      9|    SearchResult<size_type, is_key_compare_to::value> res =
 2902|      9|        iter.node_->lower_bound(key, key_comp());
 2903|      9|    iter.position_ = static_cast<int>(res.value);
 2904|      9|    if (res.IsEq()) {
  ------------------
  |  Branch (2904:9): [Folded, False: 9]
  ------------------
 2905|      0|      return {iter, MatchKind::kEq};
 2906|      0|    }
 2907|       |    // Note: in the non-key-compare-to case, we don't need to walk all the way
 2908|       |    // down the tree if the keys are equal, but determining equality would
 2909|       |    // require doing an extra comparison on each node on the way down, and we
 2910|       |    // will need to go all the way to the leaf node in the expected case.
 2911|      9|    if (iter.node_->is_leaf()) {
  ------------------
  |  Branch (2911:9): [True: 7, False: 2]
  ------------------
 2912|      7|      break;
 2913|      7|    }
 2914|      2|    iter.node_ = iter.node_->child(static_cast<field_type>(iter.position_));
 2915|      2|  }
 2916|       |  // Note: in the non-key-compare-to case, the key may actually be equivalent
 2917|       |  // here (and the MatchKind::kNe is ignored).
 2918|      7|  return {iter, MatchKind::kNe};
 2919|      7|}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE11lower_boundIS8_EENS1_12SearchResultImLb0EEERKT_RKNS1_19key_compare_adapterIS9_S8_E15checked_compareE:
  781|      9|      const K &k, const key_compare &comp) const {
  782|      9|    return use_linear_search::value ? linear_search(k, comp)
  ------------------
  |  Branch (782:12): [Folded, False: 9]
  ------------------
  783|      9|                                    : binary_search(k, comp);
  784|      9|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13binary_searchIS8_NS1_19key_compare_adapterIS9_S8_E15checked_compareEEENS1_12SearchResultImXsr23btree_is_key_compare_toIT0_S8_EE5valueEEERKT_RKSK_:
  802|      9|  binary_search(const K &k, const Compare &comp) const {
  803|      9|    return binary_search_impl(k, start(), finish(), comp,
  804|      9|                              btree_is_key_compare_to<Compare, key_type>());
  805|      9|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE18binary_search_implIS8_NS1_19key_compare_adapterIS9_S8_E15checked_compareEEENS1_12SearchResultImLb0EEERKT_mmRKT0_NSA_17integral_constantIbLb0EEE:
  845|      9|      std::false_type /* IsCompareTo */) const {
  846|     19|    while (s != e) {
  ------------------
  |  Branch (846:12): [True: 10, False: 9]
  ------------------
  847|     10|      const size_type mid = (s + e) >> 1;
  848|     10|      if (comp(key(mid), k)) {
  ------------------
  |  Branch (848:11): [True: 0, False: 10]
  ------------------
  849|      0|        s = mid + 1;
  850|     10|      } else {
  851|     10|        e = mid;
  852|     10|      }
  853|     10|    }
  854|      9|    return SearchResult<size_type, false>{s};
  855|      9|  }
_ZN4absl12lts_2024011618container_internal12SearchResultINS1_14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS9_13SymbolCompareENSt3__19allocatorISA_EELi256ELb0EEEEERKSA_PSH_EELb0EEC2ESK_NS1_9MatchKindE:
  480|      7|  SearchResult(V v, MatchKind /*match*/) : value(v) {}
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EC2IKSF_SH_SI_TnNSB_9enable_ifIXaasr3std7is_sameINS2_IT_T0_T1_EENS2_ISL_SH_SI_EEEE5valueL_ZNSB_17integral_constantIbLb1EE5valueEEEiE4typeELi0EEESQ_:
 1244|     64|      : btree_iterator_generation_info(other.generation()),
 1245|     64|        node_(const_cast<node_type *>(other.node_)),
 1246|     64|        position_(other.position_) {}
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EneERKSJ_:
 1168|      9|  bool operator!=(const iterator &other) const {
 1169|      9|    return !Equals(other);
 1170|      9|  }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E6EqualsENS2_IKSF_SH_SI_EE:
 1248|      9|  bool Equals(const const_iterator other) const {
 1249|      9|    ABSL_HARDENING_ASSERT(((node_ == nullptr && other.node_ == nullptr) ||
  ------------------
  |  |  128|      9|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      9|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 9]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1250|      9|                           (node_ != nullptr && other.node_ != nullptr)) &&
 1251|      9|                          "Comparing default-constructed iterator with "
 1252|      9|                          "non-default-constructed iterator.");
 1253|       |    // Note: we use assert instead of ABSL_HARDENING_ASSERT here because this
 1254|       |    // changes the complexity of Equals from O(1) to O(log(N) + log(M)) where
 1255|       |    // N/M are sizes of the containers containing node_/other.node_.
 1256|      9|    assert(AreNodesFromSameContainer(node_, other.node_) &&
 1257|      9|           "Comparing iterators from different containers.");
 1258|      9|    assert_valid_generation(node_);
 1259|      9|    other.assert_valid_generation(other.node_);
 1260|      9|    return node_ == other.node_ && position_ == other.position_;
  ------------------
  |  Branch (1260:12): [True: 9, False: 0]
  |  Branch (1260:36): [True: 2, False: 7]
  ------------------
 1261|      9|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_EC2ISF_SI_SJ_TnNSB_9enable_ifIXaasr3std7is_sameINS2_IT_T0_T1_EENS2_ISF_SI_SJ_EEEE5valueL_ZNSB_17integral_constantIbLb1EE5valueEEEiE4typeELi0EEESQ_:
 1158|      9|      : btree_iterator_generation_info(other),
 1159|      9|        node_(other.node_),
 1160|      9|        position_(other.position_) {}
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EdeEv:
 1186|      7|  reference operator*() const {
 1187|      7|    ABSL_HARDENING_ASSERT(node_ != nullptr);
  ------------------
  |  |  128|      7|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      7|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1188|      7|    assert_valid_generation(node_);
 1189|      7|    ABSL_HARDENING_ASSERT(position_ >= node_->start());
  ------------------
  |  |  128|      7|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      7|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1190|      7|    if (position_ >= node_->finish()) {
  ------------------
  |  Branch (1190:9): [True: 0, False: 7]
  ------------------
 1191|      0|      ABSL_HARDENING_ASSERT(!IsEndIterator() && "Dereferencing end() iterator");
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1192|      0|      ABSL_HARDENING_ASSERT(position_ < node_->finish());
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1193|      0|    }
 1194|      7|    return node_->value(static_cast<field_type>(position_));
 1195|      7|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5valueEm:
  753|      7|  reference value(size_type i) { return params_type::element(slot(i)); }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EppEv:
 1198|      4|  btree_iterator &operator++() {
 1199|      4|    increment();
 1200|      4|    return *this;
 1201|      4|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E9incrementEv:
 1279|      4|  void increment() {
 1280|      4|    assert_valid_generation(node_);
 1281|      4|    if (node_->is_leaf() && ++position_ < node_->finish()) {
  ------------------
  |  Branch (1281:9): [True: 4, False: 0]
  |  Branch (1281:29): [True: 2, False: 2]
  ------------------
 1282|      2|      return;
 1283|      2|    }
 1284|      2|    increment_slow();
 1285|      2|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E14increment_slowEv:
 2135|      2|void btree_iterator<N, R, P>::increment_slow() {
 2136|      2|  if (node_->is_leaf()) {
  ------------------
  |  Branch (2136:7): [True: 2, False: 0]
  ------------------
 2137|      2|    assert(position_ >= node_->finish());
 2138|      2|    btree_iterator save(*this);
 2139|      2|    while (position_ == node_->finish() && !node_->is_root()) {
  ------------------
  |  Branch (2139:12): [True: 2, False: 0]
  |  Branch (2139:44): [True: 0, False: 2]
  ------------------
 2140|      0|      assert(node_->parent()->child(node_->position()) == node_);
 2141|      0|      position_ = node_->position();
 2142|      0|      node_ = node_->parent();
 2143|      0|    }
 2144|       |    // TODO(ezb): assert we aren't incrementing end() instead of handling.
 2145|      2|    if (position_ == node_->finish()) {
  ------------------
  |  Branch (2145:9): [True: 2, False: 0]
  ------------------
 2146|      2|      *this = save;
 2147|      2|    }
 2148|      2|  } else {
 2149|      0|    assert(position_ < node_->finish());
 2150|      0|    node_ = node_->child(static_cast<field_type>(position_ + 1));
 2151|      0|    while (node_->is_internal()) {
  ------------------
  |  Branch (2151:12): [True: 0, False: 0]
  ------------------
 2152|      0|      node_ = node_->start_child();
 2153|      0|    }
 2154|      0|    position_ = node_->start();
 2155|      0|  }
 2156|      2|}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5beginEv:
 1436|      2|  iterator begin() { return iterator(leftmost()); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8leftmostEv:
 1672|      2|  node_type *leftmost() { return root()->parent(); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE3endEv:
 1438|      2|  iterator end() { return iterator(rightmost(), rightmost()->finish()); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5clearEv:
 2577|      2|void btree<P>::clear() {
 2578|      2|  if (!empty()) {
  ------------------
  |  Branch (2578:7): [True: 2, False: 0]
  ------------------
 2579|      2|    node_type::clear_and_delete(root(), mutable_allocator());
 2580|      2|  }
 2581|      2|  mutable_root() = mutable_rightmost() = EmptyNode();
 2582|      2|  size_ = 0;
 2583|      2|}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4sizeEv:
 1581|      2|  size_type size() const { return size_; }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EneERKSJ_:
 1168|     92|  bool operator!=(const iterator &other) const {
 1169|     92|    return !Equals(other);
 1170|     92|  }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EdeEv:
 1186|     88|  reference operator*() const {
 1187|     88|    ABSL_HARDENING_ASSERT(node_ != nullptr);
  ------------------
  |  |  128|     88|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|     88|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 88]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1188|     88|    assert_valid_generation(node_);
 1189|     88|    ABSL_HARDENING_ASSERT(position_ >= node_->start());
  ------------------
  |  |  128|     88|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|     88|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 88]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1190|     88|    if (position_ >= node_->finish()) {
  ------------------
  |  Branch (1190:9): [True: 0, False: 88]
  ------------------
 1191|      0|      ABSL_HARDENING_ASSERT(!IsEndIterator() && "Dereferencing end() iterator");
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1192|      0|      ABSL_HARDENING_ASSERT(position_ < node_->finish());
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1193|      0|    }
 1194|     88|    return node_->value(static_cast<field_type>(position_));
 1195|     88|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5valueEm:
  753|     88|  reference value(size_type i) { return params_type::element(slot(i)); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5clearEv:
 2577|      2|void btree<P>::clear() {
 2578|      2|  if (!empty()) {
  ------------------
  |  Branch (2578:7): [True: 2, False: 0]
  ------------------
 2579|      2|    node_type::clear_and_delete(root(), mutable_allocator());
 2580|      2|  }
 2581|      2|  mutable_root() = mutable_rightmost() = EmptyNode();
 2582|      2|  size_ = 0;
 2583|      2|}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4sizeEv:
 1581|      1|  size_type size() const { return size_; }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EneERKSJ_:
 1168|      3|  bool operator!=(const iterator &other) const {
 1169|      3|    return !Equals(other);
 1170|      3|  }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E6EqualsENS2_IKSF_SH_SI_EE:
 1248|      3|  bool Equals(const const_iterator other) const {
 1249|      3|    ABSL_HARDENING_ASSERT(((node_ == nullptr && other.node_ == nullptr) ||
  ------------------
  |  |  128|      3|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      3|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 3]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1250|      3|                           (node_ != nullptr && other.node_ != nullptr)) &&
 1251|      3|                          "Comparing default-constructed iterator with "
 1252|      3|                          "non-default-constructed iterator.");
 1253|       |    // Note: we use assert instead of ABSL_HARDENING_ASSERT here because this
 1254|       |    // changes the complexity of Equals from O(1) to O(log(N) + log(M)) where
 1255|       |    // N/M are sizes of the containers containing node_/other.node_.
 1256|      3|    assert(AreNodesFromSameContainer(node_, other.node_) &&
 1257|      3|           "Comparing iterators from different containers.");
 1258|      3|    assert_valid_generation(node_);
 1259|      3|    other.assert_valid_generation(other.node_);
 1260|      3|    return node_ == other.node_ && position_ == other.position_;
  ------------------
  |  Branch (1260:12): [True: 3, False: 0]
  |  Branch (1260:36): [True: 1, False: 2]
  ------------------
 1261|      3|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_EC2ISF_SI_SJ_TnNSB_9enable_ifIXaasr3std7is_sameINS2_IT_T0_T1_EENS2_ISF_SI_SJ_EEEE5valueL_ZNSB_17integral_constantIbLb1EE5valueEEEiE4typeELi0EEESQ_:
 1158|      3|      : btree_iterator_generation_info(other),
 1159|      3|        node_(other.node_),
 1160|      3|        position_(other.position_) {}
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EdeEv:
 1186|      1|  reference operator*() const {
 1187|      1|    ABSL_HARDENING_ASSERT(node_ != nullptr);
  ------------------
  |  |  128|      1|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      1|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1188|      1|    assert_valid_generation(node_);
 1189|      1|    ABSL_HARDENING_ASSERT(position_ >= node_->start());
  ------------------
  |  |  128|      1|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      1|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1190|      1|    if (position_ >= node_->finish()) {
  ------------------
  |  Branch (1190:9): [True: 0, False: 1]
  ------------------
 1191|      0|      ABSL_HARDENING_ASSERT(!IsEndIterator() && "Dereferencing end() iterator");
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1192|      0|      ABSL_HARDENING_ASSERT(position_ < node_->finish());
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1193|      0|    }
 1194|      1|    return node_->value(static_cast<field_type>(position_));
 1195|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5valueEm:
  753|      1|  reference value(size_type i) { return params_type::element(slot(i)); }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EppEv:
 1198|      1|  btree_iterator &operator++() {
 1199|      1|    increment();
 1200|      1|    return *this;
 1201|      1|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E9incrementEv:
 1279|      1|  void increment() {
 1280|      1|    assert_valid_generation(node_);
 1281|      1|    if (node_->is_leaf() && ++position_ < node_->finish()) {
  ------------------
  |  Branch (1281:9): [True: 1, False: 0]
  |  Branch (1281:29): [True: 0, False: 1]
  ------------------
 1282|      0|      return;
 1283|      0|    }
 1284|      1|    increment_slow();
 1285|      1|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E14increment_slowEv:
 2135|      1|void btree_iterator<N, R, P>::increment_slow() {
 2136|      1|  if (node_->is_leaf()) {
  ------------------
  |  Branch (2136:7): [True: 1, False: 0]
  ------------------
 2137|      1|    assert(position_ >= node_->finish());
 2138|      1|    btree_iterator save(*this);
 2139|      1|    while (position_ == node_->finish() && !node_->is_root()) {
  ------------------
  |  Branch (2139:12): [True: 1, False: 0]
  |  Branch (2139:44): [True: 0, False: 1]
  ------------------
 2140|      0|      assert(node_->parent()->child(node_->position()) == node_);
 2141|      0|      position_ = node_->position();
 2142|      0|      node_ = node_->parent();
 2143|      0|    }
 2144|       |    // TODO(ezb): assert we aren't incrementing end() instead of handling.
 2145|      1|    if (position_ == node_->finish()) {
  ------------------
  |  Branch (2145:9): [True: 1, False: 0]
  ------------------
 2146|      1|      *this = save;
 2147|      1|    }
 2148|      1|  } else {
 2149|      0|    assert(position_ < node_->finish());
 2150|      0|    node_ = node_->child(static_cast<field_type>(position_ + 1));
 2151|      0|    while (node_->is_internal()) {
  ------------------
  |  Branch (2151:12): [True: 0, False: 0]
  ------------------
 2152|      0|      node_ = node_->start_child();
 2153|      0|    }
 2154|      0|    position_ = node_->start();
 2155|      0|  }
 2156|      1|}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5beginEv:
 1436|      1|  iterator begin() { return iterator(leftmost()); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8leftmostEv:
 1672|      1|  node_type *leftmost() { return root()->parent(); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE3endEv:
 1438|      1|  iterator end() { return iterator(rightmost(), rightmost()->finish()); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5clearEv:
 2577|      1|void btree<P>::clear() {
 2578|      1|  if (!empty()) {
  ------------------
  |  Branch (2578:7): [True: 1, False: 0]
  ------------------
 2579|      1|    node_type::clear_and_delete(root(), mutable_allocator());
 2580|      1|  }
 2581|      1|  mutable_root() = mutable_rightmost() = EmptyNode();
 2582|      1|  size_ = 0;
 2583|      1|}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4sizeEv:
 1581|      2|  size_type size() const { return size_; }

_ZN4absl12lts_2024011618container_internal19btree_map_containerINS1_5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorENS5_4lessISC_EENS5_9allocatorINS6_IKSC_SF_EEEELi256ELb0EEEEEEC2Ev:
  465|      2|  btree_map_container() {}
_ZN4absl12lts_2024011618container_internal19btree_set_containerINS1_5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorENS5_4lessISC_EENS5_9allocatorINS6_IKSC_SF_EEEELi256ELb0EEEEEEC2Ev:
  303|      2|  btree_set_container() {}
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorENS5_4lessISC_EENS5_9allocatorINS6_IKSC_SF_EEEELi256ELb0EEEEEEC2Ev:
   74|      2|  btree_container() : tree_(key_compare(), allocator_type()) {}
_ZN4absl12lts_2024011618container_internal19btree_set_containerINS1_5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorENS5_4lessISC_EENS5_9allocatorINS6_IKSC_SF_EEEELi256ELb0EEEEEE6insertEOSK_:
  333|      1|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  334|      1|    return this->tree_.insert_unique(params_type::key(v), std::move(v));
  335|      1|  }
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEEC2ERKSA_RKSD_:
   77|      2|      : tree_(comp, alloc) {}
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEEC2ERKSA_RKSD_:
   77|      2|      : tree_(comp, alloc) {}
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEEC2ERKSA_RKSD_:
   77|      2|      : tree_(comp, alloc) {}
_ZN4absl12lts_2024011618container_internal19btree_set_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE6insertEOS9_:
  333|      6|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  334|      6|    return this->tree_.insert_unique(params_type::key(v), std::move(v));
  335|      6|  }
_ZN4absl12lts_2024011618container_internal19btree_set_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE6insertEOS9_:
  333|      1|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  334|      1|    return this->tree_.insert_unique(params_type::key(v), std::move(v));
  335|      1|  }
_ZNK4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE11upper_boundIS9_EENS1_14btree_iteratorIKNS1_10btree_nodeISE_EERKS9_PSM_EERSM_:
  163|     64|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  164|     64|    return tree_.upper_bound(key);
  165|     64|  }
_ZNK4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE5beginEv:
   99|     64|  const_iterator begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  100|     64|    return tree_.begin();
  101|     64|  }
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE3endEv:
  105|     66|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND { return tree_.end(); }
_ZNK4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE8key_compEv:
  260|     66|  key_compare key_comp() const { return key_compare(tree_.key_comp()); }
_ZN4absl12lts_2024011618container_internal19btree_set_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE6insertENS1_14btree_iteratorIKNS1_10btree_nodeISE_EERKS9_PSL_EESM_:
  346|     64|                  const value_type &v) ABSL_ATTRIBUTE_LIFETIME_BOUND {
  347|     64|    return this->tree_
  348|     64|        .insert_hint_unique(iterator(hint), params_type::key(v), v)
  349|     64|        .first;
  350|     64|  }
_ZNK4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE8key_compEv:
  260|      2|  key_compare key_comp() const { return key_compare(tree_.key_comp()); }
_ZNK4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE5emptyEv:
  229|      4|  bool empty() const { return tree_.empty(); }
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE5beginEv:
   98|      2|  iterator begin() ABSL_ATTRIBUTE_LIFETIME_BOUND { return tree_.begin(); }
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE3endEv:
  105|      2|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND { return tree_.end(); }
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE5clearEv:
  222|      2|  ABSL_ATTRIBUTE_REINITIALIZES void clear() { tree_.clear(); }
_ZNK4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE5emptyEv:
  229|      4|  bool empty() const { return tree_.empty(); }
_ZNK4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE4sizeEv:
  227|      2|  size_type size() const { return tree_.size(); }
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE5beginEv:
   98|      2|  iterator begin() ABSL_ATTRIBUTE_LIFETIME_BOUND { return tree_.begin(); }
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE5clearEv:
  222|      2|  ABSL_ATTRIBUTE_REINITIALIZES void clear() { tree_.clear(); }
_ZNK4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE5emptyEv:
  229|      4|  bool empty() const { return tree_.empty(); }
_ZNK4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE4sizeEv:
  227|      1|  size_type size() const { return tree_.size(); }
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE5beginEv:
   98|      1|  iterator begin() ABSL_ATTRIBUTE_LIFETIME_BOUND { return tree_.begin(); }
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE3endEv:
  105|      1|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND { return tree_.end(); }
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE5clearEv:
  222|      1|  ABSL_ATTRIBUTE_REINITIALIZES void clear() { tree_.clear(); }
_ZNK4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE4sizeEv:
  227|      2|  size_type size() const { return tree_.size(); }
_ZNK4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE8key_compEv:
  260|     12|  key_compare key_comp() const { return key_compare(tree_.key_comp()); }

_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEEvE7elementIS8_EEDTclsrT_7elementfp_EEPS7_:
   75|     16|      -> decltype(P::element(slot)) {
   76|     16|    return P::element(slot);
   77|     16|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEEvE9constructINSt3__19allocatorIS7_EEJRKS7_EEEvPT_PS7_DpOT0_:
   42|      1|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|      1|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|      1|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEEvE7destroyINSt3__19allocatorIS8_EEEEvPT_PS8_:
   49|      4|  static void destroy(Alloc* alloc, slot_type* slot) {
   50|      4|    Policy::destroy(alloc, slot);
   51|      4|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE7destroyINSt3__19allocatorIS6_EEEEvPT_PS6_:
   49|  1.79k|  static void destroy(Alloc* alloc, slot_type* slot) {
   50|  1.79k|    Policy::destroy(alloc, slot);
   51|  1.79k|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEEvE7destroyINSt3__19allocatorIS8_EEEEvPT_PS8_:
   49|    134|  static void destroy(Alloc* alloc, slot_type* slot) {
   50|    134|    Policy::destroy(alloc, slot);
   51|    134|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEEvE7destroyINSt3__19allocatorIS8_EEEEvPT_PS8_:
   49|    120|  static void destroy(Alloc* alloc, slot_type* slot) {
   50|    120|    Policy::destroy(alloc, slot);
   51|    120|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE7elementIS7_EEDTclsrT_7elementfp_EEPS6_:
   75|  3.86k|      -> decltype(P::element(slot)) {
   76|  3.86k|    return P::element(slot);
   77|  3.86k|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEEvE7elementIS9_EEDTclsrT_7elementfp_EEPS8_:
   75|     14|      -> decltype(P::element(slot)) {
   76|     14|    return P::element(slot);
   77|     14|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEEvE7elementIS9_EEDTclsrT_7elementfp_EEPS8_:
   75|    224|      -> decltype(P::element(slot)) {
   76|    224|    return P::element(slot);
   77|    224|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEEvE7elementIS9_EEDTclsrT_7elementfp_EEPS8_:
   75|    253|      -> decltype(P::element(slot)) {
   76|    253|    return P::element(slot);
   77|    253|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyINS0_11string_viewEEEvE7destroyINSt3__19allocatorIS4_EEEEvPT_PS4_:
   49|      3|  static void destroy(Alloc* alloc, slot_type* slot) {
   50|      3|    Policy::destroy(alloc, slot);
   51|      3|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEvE7elementISF_EEDTclsrT_7elementfp_EEPNS1_13map_slot_typeISA_SE_EE:
   75|     34|      -> decltype(P::element(slot)) {
   76|     34|    return P::element(slot);
   77|     34|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEvE8transferINS8_INS4_4pairIKSA_SE_EEEEEEvPT_PNS1_13map_slot_typeISA_SE_EESQ_:
   65|     50|  static void transfer(Alloc* alloc, slot_type* new_slot, slot_type* old_slot) {
   66|     50|    transfer_impl(alloc, new_slot, old_slot, Rank0{});
   67|     50|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEvE13transfer_implINS8_INS4_4pairIKSA_SE_EEEESF_EEDTclsrT0_8transferfp_fp0_fp1_EEPT_PNS1_13map_slot_typeISA_SE_EESS_NSG_5Rank0E:
  101|     50|      -> decltype(P::transfer(alloc, new_slot, old_slot)) {
  102|     50|    return P::transfer(alloc, new_slot, old_slot);
  103|     50|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEvE9constructINS8_INS4_4pairIKSA_SE_EEEEJRKNS4_21piecewise_construct_tENS4_5tupleIJRSJ_EEENSP_IJRKSE_EEEEEEvPT_PNS1_13map_slot_typeISA_SE_EEDpOT0_:
   42|     32|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|     32|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|     32|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEEvE8transferINSt3__19allocatorIS8_EEEEvPT_PS8_SH_:
   65|    134|  static void transfer(Alloc* alloc, slot_type* new_slot, slot_type* old_slot) {
   66|    134|    transfer_impl(alloc, new_slot, old_slot, Rank0{});
   67|    134|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEEvE13transfer_implINSt3__19allocatorIS8_EEEEvPT_PS8_SH_NSA_5Rank2E:
  124|    134|                            slot_type* old_slot, Rank2) {
  125|    134|    construct(alloc, new_slot, std::move(element(old_slot)));
  126|    134|    destroy(alloc, old_slot);
  127|    134|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEEvE9constructINSt3__19allocatorIS8_EEJS8_EEEvPT_PS8_DpOT0_:
   42|    134|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|    134|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|    134|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEEvE9constructINSt3__19allocatorIS8_EEJRKPS6_EEEvPT_PS8_DpOT0_:
   42|     95|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|     95|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|     95|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE8transferINSt3__19allocatorIS6_EEEEvPT_PS6_SF_:
   65|  1.79k|  static void transfer(Alloc* alloc, slot_type* new_slot, slot_type* old_slot) {
   66|  1.79k|    transfer_impl(alloc, new_slot, old_slot, Rank0{});
   67|  1.79k|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE13transfer_implINSt3__19allocatorIS6_EEEEvPT_PS6_SF_NS8_5Rank2E:
  124|  1.79k|                            slot_type* old_slot, Rank2) {
  125|  1.79k|    construct(alloc, new_slot, std::move(element(old_slot)));
  126|  1.79k|    destroy(alloc, old_slot);
  127|  1.79k|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE9constructINSt3__19allocatorIS6_EEJS6_EEEvPT_PS6_DpOT0_:
   42|  1.79k|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|  1.79k|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|  1.79k|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE9constructINSt3__19allocatorIS6_EEJRKS6_EEEvPT_PS6_DpOT0_:
   42|  1.19k|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|  1.19k|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|  1.19k|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEEvE8transferINSt3__19allocatorIS8_EEEEvPT_PS8_SH_:
   65|      4|  static void transfer(Alloc* alloc, slot_type* new_slot, slot_type* old_slot) {
   66|      4|    transfer_impl(alloc, new_slot, old_slot, Rank0{});
   67|      4|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEEvE13transfer_implINSt3__19allocatorIS8_EEEEvPT_PS8_SH_NSA_5Rank2E:
  124|      4|                            slot_type* old_slot, Rank2) {
  125|      4|    construct(alloc, new_slot, std::move(element(old_slot)));
  126|      4|    destroy(alloc, old_slot);
  127|      4|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEEvE9constructINSt3__19allocatorIS8_EEJS8_EEEvPT_PS8_DpOT0_:
   42|      4|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|      4|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|      4|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEEvE9constructINSt3__19allocatorIS8_EEJRKS8_EEEvPT_PS8_DpOT0_:
   42|      4|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|      4|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|      4|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEEvE8transferINSt3__19allocatorIS8_EEEEvPT_PS8_SH_:
   65|    120|  static void transfer(Alloc* alloc, slot_type* new_slot, slot_type* old_slot) {
   66|    120|    transfer_impl(alloc, new_slot, old_slot, Rank0{});
   67|    120|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEEvE13transfer_implINSt3__19allocatorIS8_EEEEvPT_PS8_SH_NSA_5Rank2E:
  124|    120|                            slot_type* old_slot, Rank2) {
  125|    120|    construct(alloc, new_slot, std::move(element(old_slot)));
  126|    120|    destroy(alloc, old_slot);
  127|    120|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEEvE9constructINSt3__19allocatorIS8_EEJS8_EEEvPT_PS8_DpOT0_:
   42|    120|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|    120|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|    120|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEEvE9constructINSt3__19allocatorIS8_EEJRKPS6_EEEvPT_PS8_DpOT0_:
   42|    108|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|    108|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|    108|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15map_slot_policyINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorEEEvE9constructINS4_9allocatorINS5_IKSB_SE_EEEEJSK_EEEvPT_PNS1_13map_slot_typeISB_SE_EEDpOT0_:
   42|      1|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|      1|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|      1|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15map_slot_policyINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorEEEvE7elementISF_EEDTclsrT_7elementfp_EEPNS1_13map_slot_typeISB_SE_EE:
   75|      1|      -> decltype(P::element(slot)) {
   76|      1|    return P::element(slot);
   77|      1|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEEvE7elementISI_EEDTclsrT_7elementfp_EEPNS1_13map_slot_typeISA_SH_EE:
   75|    474|      -> decltype(P::element(slot)) {
   76|    474|    return P::element(slot);
   77|    474|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEEvE8transferINS8_INS4_4pairIKSA_SH_EEEEEEvPT_PNS1_13map_slot_typeISA_SH_EEST_:
   65|      4|  static void transfer(Alloc* alloc, slot_type* new_slot, slot_type* old_slot) {
   66|      4|    transfer_impl(alloc, new_slot, old_slot, Rank0{});
   67|      4|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEEvE13transfer_implINS8_INS4_4pairIKSA_SH_EEEESI_EEDTclsrT0_8transferfp_fp0_fp1_EEPT_PNS1_13map_slot_typeISA_SH_EESV_NSJ_5Rank0E:
  101|      4|      -> decltype(P::transfer(alloc, new_slot, old_slot)) {
  102|      4|    return P::transfer(alloc, new_slot, old_slot);
  103|      4|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEEvE9constructINS8_INS4_4pairIKSA_SH_EEEEJRKNS4_21piecewise_construct_tENS4_5tupleIJOSA_EEENSS_IJEEEEEEvPT_PNS1_13map_slot_typeISA_SH_EEDpOT0_:
   42|      4|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|      4|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|      4|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyINS0_11string_viewEEEvE9constructINSt3__19allocatorIS4_EEJRKNS8_12basic_stringIcNS8_11char_traitsIcEENS9_IcEEEEEEEvPT_PS4_DpOT0_:
   42|      3|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|      3|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|      3|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEEvE8transferINSt3__19allocatorIS8_EEEEvPT_PS8_SH_:
   65|      4|  static void transfer(Alloc* alloc, slot_type* new_slot, slot_type* old_slot) {
   66|      4|    transfer_impl(alloc, new_slot, old_slot, Rank0{});
   67|      4|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEEvE13transfer_implINSt3__19allocatorIS8_EEEEvPT_PS8_SH_NSA_5Rank2E:
  124|      4|                            slot_type* old_slot, Rank2) {
  125|      4|    construct(alloc, new_slot, std::move(element(old_slot)));
  126|      4|    destroy(alloc, old_slot);
  127|      4|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEEvE9constructINSt3__19allocatorIS8_EEJS8_EEEvPT_PS8_DpOT0_:
   42|     10|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|     10|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|     10|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEEvE7elementIS9_EEDTclsrT_7elementfp_EEPS8_:
   75|     11|      -> decltype(P::element(slot)) {
   76|     11|    return P::element(slot);
   77|     11|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEEvE7destroyINSt3__19allocatorIS8_EEEEvPT_PS8_:
   49|      8|  static void destroy(Alloc* alloc, slot_type* slot) {
   50|      8|    Policy::destroy(alloc, slot);
   51|      8|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEEEvE9constructINSt3__19allocatorIS8_EEJS8_EEEvPT_PS8_DpOT0_:
   42|      1|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|      1|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|      1|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEEEvE7elementIS9_EEDTclsrT_7elementfp_EEPS8_:
   75|      1|      -> decltype(P::element(slot)) {
   76|      1|    return P::element(slot);
   77|      1|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEEEvE7destroyINSt3__19allocatorIS8_EEEEvPT_PS8_:
   49|      1|  static void destroy(Alloc* alloc, slot_type* slot) {
   50|      1|    Policy::destroy(alloc, slot);
   51|      1|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEvE7elementIS9_EEDTclsrT_7elementfp_EEPKS8_:
   79|    108|  static auto element(const slot_type* slot) -> decltype(P::element(slot)) {
   80|    108|    return P::element(slot);
   81|    108|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEvE8transferINSt3__19allocatorIS8_EEEEvPT_PS8_SH_:
   65|    235|  static void transfer(Alloc* alloc, slot_type* new_slot, slot_type* old_slot) {
   66|    235|    transfer_impl(alloc, new_slot, old_slot, Rank0{});
   67|    235|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEvE13transfer_implINSt3__19allocatorIS8_EEEEvPT_PS8_SH_NSA_5Rank2E:
  124|    235|                            slot_type* old_slot, Rank2) {
  125|    235|    construct(alloc, new_slot, std::move(element(old_slot)));
  126|    235|    destroy(alloc, old_slot);
  127|    235|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEvE9constructINSt3__19allocatorIS8_EEJS8_EEEvPT_PS8_DpOT0_:
   42|    235|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|    235|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|    235|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEvE7elementIS9_EEDTclsrT_7elementfp_EEPS8_:
   75|    323|      -> decltype(P::element(slot)) {
   76|    323|    return P::element(slot);
   77|    323|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEvE7destroyINSt3__19allocatorIS8_EEEEvPT_PS8_:
   49|    288|  static void destroy(Alloc* alloc, slot_type* slot) {
   50|    288|    Policy::destroy(alloc, slot);
   51|    288|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEvE9constructINSt3__19allocatorIS8_EEJPS8_EEEvPT_SF_DpOT0_:
   42|      8|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|      8|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|      8|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEvE9constructINSt3__19allocatorIS8_EEJRKS8_EEEvPT_PS8_DpOT0_:
   42|     64|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|     64|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|     64|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEEvE7destroyINSt3__19allocatorIS9_EEEEvPT_PS9_:
   49|      5|  static void destroy(Alloc* alloc, slot_type* slot) {
   50|      5|    Policy::destroy(alloc, slot);
   51|      5|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEEvE7elementISA_EEDTclsrT_7elementfp_EEPS9_:
   75|      5|      -> decltype(P::element(slot)) {
   76|      5|    return P::element(slot);
   77|      5|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEEvE8transferINSt3__19allocatorIS9_EEEEvPT_PS9_SI_:
   65|      5|  static void transfer(Alloc* alloc, slot_type* new_slot, slot_type* old_slot) {
   66|      5|    transfer_impl(alloc, new_slot, old_slot, Rank0{});
   67|      5|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEEvE13transfer_implINSt3__19allocatorIS9_EEEEvPT_PS9_SI_NSB_5Rank2E:
  124|      5|                            slot_type* old_slot, Rank2) {
  125|      5|    construct(alloc, new_slot, std::move(element(old_slot)));
  126|      5|    destroy(alloc, old_slot);
  127|      5|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEEvE9constructINSt3__19allocatorIS9_EEJS9_EEEvPT_PS9_DpOT0_:
   42|      5|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|      5|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|      5|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEEvE9constructINSt3__19allocatorIS9_EEJRKS9_EEEvPT_PS9_DpOT0_:
   42|      6|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|      6|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|      6|  }

_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_12CommonFieldsELm0ELb0EE3getEv:
   91|  16.3k|  constexpr const T& get() const& { return value; }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_12CommonFieldsELm0ELb0EE3getEv:
   92|  19.4k|  T& get() & { return value; }
extension_set.cc:_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherENS7_11ExtensionEqENSt3__19allocatorINS6_13ExtensionInfoEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISE_XT_EE4typeEv:
  246|     60|  constexpr const ElemT<I>& get() const& {
  247|     60|    return StorageT<I>::get();
  248|     60|  }
extension_set.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherENS7_11ExtensionEqENSt3__19allocatorINS6_13ExtensionInfoEEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISE_XT_EE4typeEv:
  241|     29|  ElemT<I>& get() & {
  242|     29|    return StorageT<I>::get();
  243|     29|  }
extension_set.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherENS7_11ExtensionEqENSt3__19allocatorINS6_13ExtensionInfoEEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISE_XT_EE4typeEv:
  241|      8|  ElemT<I>& get() & {
  242|      8|    return StorageT<I>::get();
  243|      8|  }
extension_set.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf8internal12_GLOBAL__N_111ExtensionEqELm2ELb1EE3getEv:
  106|      8|  T& get() & { return *this; }
extension_set.cc:_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherENS7_11ExtensionEqENSt3__19allocatorINS6_13ExtensionInfoEEEEE3getILi1EEERKNS1_25internal_compressed_tuple4ElemISE_XT_EE4typeEv:
  246|      8|  constexpr const ElemT<I>& get() const& {
  247|      8|    return StorageT<I>::get();
  248|      8|  }
extension_set.cc:_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherELm1ELb1EE3getEv:
  105|      8|  constexpr const T& get() const& { return *this; }
extension_set.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherENS7_11ExtensionEqENSt3__19allocatorINS6_13ExtensionInfoEEEEE3getILi3EEERNS1_25internal_compressed_tuple4ElemISE_XT_EE4typeEv:
  241|      2|  ElemT<I>& get() & {
  242|      2|    return StorageT<I>::get();
  243|      2|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIN6google8protobuf8internal13ExtensionInfoEEELm3ELb1EE3getEv:
  106|      2|  T& get() & { return *this; }
extension_set.cc:_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherENS7_11ExtensionEqENSt3__19allocatorINS6_13ExtensionInfoEEEEEC2IS3_JS8_S9_SD_ETnNSA_9enable_ifIXsr4absl11conjunctionINS0_8negationINSA_7is_sameIFvSE_EFvNSA_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISE_JSL_DpT0_EEEEE5valueEbE4typeELb1EEEOSL_DpOST_:
  236|      1|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      1|                                             absl::forward<First>(first),
  238|      1|                                             absl::forward<Vs>(base)...) {}
extension_set.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorINS8_13ExtensionInfoEEEEEENSC_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_SA_SB_SF_EEENS0_10in_place_tEDpOT_:
  126|      4|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_12CommonFieldsELm0ELb0EEC2IS4_EENS0_10in_place_tEOT_:
   90|    150|      : value(absl::forward<V>(v)) {}
extension_set.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherELm1ELb1EEC2IS8_EENS0_10in_place_tEOT_:
  103|      1|      : T(absl::forward<V>(v)) {}
extension_set.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf8internal12_GLOBAL__N_111ExtensionEqELm2ELb1EEC2IS8_EENS0_10in_place_tEOT_:
  103|      1|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIN6google8protobuf8internal13ExtensionInfoEEELm3ELb1EEC2ISA_EENS0_10in_place_tEOT_:
  103|      1|      : T(absl::forward<V>(v)) {}
extension_set.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherENS7_11ExtensionEqENSt3__19allocatorINS6_13ExtensionInfoEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISE_XT_EE4typeEv:
  241|      1|  ElemT<I>& get() & {
  242|      1|    return StorageT<I>::get();
  243|      1|  }
extension_set.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherELm1ELb1EE3getEv:
  106|      1|  T& get() & { return *this; }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEENS6_10unique_ptrIN6google8protobuf10FeatureSetENS6_14default_deleteISI_EEEEEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISO_XT_EE4typeEv:
  246|  1.21k|  constexpr const ElemT<I>& get() const& {
  247|  1.21k|    return StorageT<I>::get();
  248|  1.21k|  }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEENS6_10unique_ptrIN6google8protobuf10FeatureSetENS6_14default_deleteISI_EEEEEEEEEE3getILi3EEERNS1_25internal_compressed_tuple4ElemISO_XT_EE4typeEv:
  241|     11|  ElemT<I>& get() & {
  242|     11|    return StorageT<I>::get();
  243|     11|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKNS4_12basic_stringIcNS4_11char_traitsIcEENS5_IcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISG_EEEEEEEELm3ELb1EE3getEv:
  106|     11|  T& get() & { return *this; }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEENS6_10unique_ptrIN6google8protobuf10FeatureSetENS6_14default_deleteISI_EEEEEEEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISO_XT_EE4typeEv:
  241|    520|  ElemT<I>& get() & {
  242|    520|    return StorageT<I>::get();
  243|    520|  }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterINSt3__14lessINS4_4pairIPKN6google8protobuf10DescriptorEiEEEESC_E15checked_compareENS4_9allocatorINS6_IKSC_PKNS8_15FieldDescriptorEEEEEPNS1_10btree_nodeINS1_10map_paramsISC_SK_SD_SM_Li256ELb0EEEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISS_XT_EE4typeEv:
  241|      2|  ElemT<I>& get() & {
  242|      2|    return StorageT<I>::get();
  243|      2|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKNS6_IPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorEEEEELm1ELb1EE3getEv:
  106|      2|  T& get() & { return *this; }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterINSt3__14lessINS4_4pairIPKN6google8protobuf10DescriptorEiEEEESC_E15checked_compareENS4_9allocatorINS6_IKSC_PKNS8_15FieldDescriptorEEEEEPNS1_10btree_nodeINS1_10map_paramsISC_SK_SD_SM_Li256ELb0EEEEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISS_XT_EE4typeEv:
  241|      1|  ElemT<I>& get() & {
  242|      1|    return StorageT<I>::get();
  243|      1|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIPNS1_10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS9_15FieldDescriptorENS6_4lessISD_EENS6_9allocatorINS7_IKSD_SG_EEEELi256ELb0EEEEELm2ELb0EE3getEv:
   92|      1|  T& get() & { return value; }
descriptor.cc:_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS5_14FileDescriptorEEENS6_19DescriptorsByNameEqIS8_EENSt3__19allocatorIPKS8_EEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  246|    106|  constexpr const ElemT<I>& get() const& {
  247|    106|    return StorageT<I>::get();
  248|    106|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS5_14FileDescriptorEEENS6_19DescriptorsByNameEqIS8_EENSt3__19allocatorIPKS8_EEEE3getILi3EEERNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  241|     11|  ElemT<I>& get() & {
  242|     11|    return StorageT<I>::get();
  243|     11|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIPKN6google8protobuf14FileDescriptorEEELm3ELb1EE3getEv:
  106|     11|  T& get() & { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS5_14FileDescriptorEEENS6_19DescriptorsByNameEqIS8_EENSt3__19allocatorIPKS8_EEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  241|     76|  ElemT<I>& get() & {
  242|     76|    return StorageT<I>::get();
  243|     76|  }
descriptor.cc:_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashENS6_18SymbolByFullNameEqENSt3__19allocatorINS5_6SymbolEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  246|  4.78k|  constexpr const ElemT<I>& get() const& {
  247|  4.78k|    return StorageT<I>::get();
  248|  4.78k|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashENS6_18SymbolByFullNameEqENSt3__19allocatorINS5_6SymbolEEEEE3getILi3EEERNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  241|  1.40k|  ElemT<I>& get() & {
  242|  1.40k|    return StorageT<I>::get();
  243|  1.40k|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIN6google8protobuf6SymbolEEELm3ELb1EE3getEv:
  106|  3.01k|  T& get() & { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashENS6_18SymbolByFullNameEqENSt3__19allocatorINS5_6SymbolEEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  241|  6.57k|  ElemT<I>& get() & {
  242|  6.57k|    return StorageT<I>::get();
  243|  6.57k|  }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISL_XT_EE4typeEv:
  246|    442|  constexpr const ElemT<I>& get() const& {
  247|    442|    return StorageT<I>::get();
  248|    442|  }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEEEEE3getILi3EEERNS1_25internal_compressed_tuple4ElemISL_XT_EE4typeEv:
  241|     84|  ElemT<I>& get() & {
  242|     84|    return StorageT<I>::get();
  243|     84|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKNS4_12basic_stringIcNS4_11char_traitsIcEENS5_IcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEEELm3ELb1EE3getEv:
  106|     84|  T& get() & { return *this; }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISL_XT_EE4typeEv:
  241|    533|  ElemT<I>& get() & {
  242|    533|    return StorageT<I>::get();
  243|    533|  }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISE_XT_EE4typeEv:
  246|     40|  constexpr const ElemT<I>& get() const& {
  247|     40|    return StorageT<I>::get();
  248|     40|  }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISE_XT_EE4typeEv:
  241|     32|  ElemT<I>& get() & {
  242|     32|    return StorageT<I>::get();
  243|     32|  }
descriptor.cc:_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS6_14ParentNumberEqENSt3__19allocatorIPKNS5_19EnumValueDescriptorEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISF_XT_EE4typeEv:
  246|    821|  constexpr const ElemT<I>& get() const& {
  247|    821|    return StorageT<I>::get();
  248|    821|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS6_14ParentNumberEqENSt3__19allocatorIPKNS5_19EnumValueDescriptorEEEEE3getILi3EEERNS1_25internal_compressed_tuple4ElemISF_XT_EE4typeEv:
  241|    235|  ElemT<I>& get() & {
  242|    235|    return StorageT<I>::get();
  243|    235|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIPKN6google8protobuf19EnumValueDescriptorEEELm3ELb1EE3getEv:
  106|    235|  T& get() & { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS6_14ParentNumberEqENSt3__19allocatorIPKNS5_19EnumValueDescriptorEEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISF_XT_EE4typeEv:
  241|  1.13k|  ElemT<I>& get() & {
  242|  1.13k|    return StorageT<I>::get();
  243|  1.13k|  }
descriptor.cc:_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS6_14ParentNumberEqENSt3__19allocatorIPKNS5_15FieldDescriptorEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISF_XT_EE4typeEv:
  246|    923|  constexpr const ElemT<I>& get() const& {
  247|    923|    return StorageT<I>::get();
  248|    923|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS6_14ParentNumberEqENSt3__19allocatorIPKNS5_15FieldDescriptorEEEEE3getILi3EEERNS1_25internal_compressed_tuple4ElemISF_XT_EE4typeEv:
  241|    233|  ElemT<I>& get() & {
  242|    233|    return StorageT<I>::get();
  243|    233|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIPKN6google8protobuf15FieldDescriptorEEELm3ELb1EE3getEv:
  106|    233|  T& get() & { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS6_14ParentNumberEqENSt3__19allocatorIPKNS5_15FieldDescriptorEEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISF_XT_EE4typeEv:
  241|  1.22k|  ElemT<I>& get() & {
  242|  1.22k|    return StorageT<I>::get();
  243|  1.22k|  }
descriptor.cc:_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_118SymbolByParentHashENS6_16SymbolByParentEqENSt3__19allocatorINS5_6SymbolEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  246|  5.67k|  constexpr const ElemT<I>& get() const& {
  247|  5.67k|    return StorageT<I>::get();
  248|  5.67k|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_118SymbolByParentHashENS6_16SymbolByParentEqENSt3__19allocatorINS5_6SymbolEEEEE3getILi3EEERNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  241|  1.61k|  ElemT<I>& get() & {
  242|  1.61k|    return StorageT<I>::get();
  243|  1.61k|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_118SymbolByParentHashENS6_16SymbolByParentEqENSt3__19allocatorINS5_6SymbolEEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  241|  8.04k|  ElemT<I>& get() & {
  242|  8.04k|    return StorageT<I>::get();
  243|  8.04k|  }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashENSA_2EqENSt3__19allocatorINSD_4pairIKS9_NSD_6vectorINS6_14DescriptorPool18DeferredValidation13LifetimesInfoENSE_ISK_EEEEEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISP_XT_EE4typeEv:
  246|     12|  constexpr const ElemT<I>& get() const& {
  247|     12|    return StorageT<I>::get();
  248|     12|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashELm1ELb1EE3getEv:
  106|    103|  T& get() & { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashENS6_18SymbolByFullNameEqENSt3__19allocatorINS5_6SymbolEEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  241|    157|  ElemT<I>& get() & {
  242|    157|    return StorageT<I>::get();
  243|    157|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_118SymbolByFullNameEqELm2ELb1EE3getEv:
  106|    157|  T& get() & { return *this; }
descriptor.cc:_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashENS6_18SymbolByFullNameEqENSt3__19allocatorINS5_6SymbolEEEEE3getILi1EEERKNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  246|    111|  constexpr const ElemT<I>& get() const& {
  247|    111|    return StorageT<I>::get();
  248|    111|  }
descriptor.cc:_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashELm1ELb1EE3getEv:
  105|    111|  constexpr const T& get() const& { return *this; }
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashENSA_2EqENSt3__19allocatorINSD_4pairIKS9_NSD_6vectorINS6_14DescriptorPool18DeferredValidation13LifetimesInfoENSE_ISK_EEEEEEEEEEC2IS3_JSB_SC_SO_ETnNSD_9enable_ifIXsr4absl11conjunctionINS0_8negationINSD_7is_sameIFvSP_EFvNSD_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISP_JSW_DpT0_EEEEE5valueEbE4typeELb1EEEOSW_DpOS14_:
  236|      4|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      4|                                             absl::forward<First>(first),
  238|      4|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashENSC_2EqENSt3__19allocatorINSF_4pairIKSB_NSF_6vectorINS8_14DescriptorPool18DeferredValidation13LifetimesInfoENSG_ISM_EEEEEEEEEEENSF_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_SD_SE_SQ_EEENS0_10in_place_tEDpOT_:
  126|     16|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashELm1ELb1EEC2ISB_EENS0_10in_place_tEOT_:
  103|     12|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE2EqELm2ELb1EEC2ISB_EENS0_10in_place_tEOT_:
  103|     12|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKPKN6google8protobuf14FileDescriptorENS4_6vectorINS8_14DescriptorPool18DeferredValidation13LifetimesInfoENS5_ISG_EEEEEEEELm3ELb1EEC2ISK_EENS0_10in_place_tEOT_:
  103|      4|      : T(absl::forward<V>(v)) {}
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_10StringHashELm1ELb1EE3getEv:
  106|    349|  T& get() & { return *this; }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_8StringEqELm2ELb1EE3getEv:
  106|    240|  T& get() & { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS5_14FileDescriptorEEENS6_19DescriptorsByNameEqIS8_EENSt3__19allocatorIPKS8_EEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  241|      5|  ElemT<I>& get() & {
  242|      5|    return StorageT<I>::get();
  243|      5|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_119DescriptorsByNameEqINS5_14FileDescriptorEEELm2ELb1EE3getEv:
  106|      5|  T& get() & { return *this; }
descriptor.cc:_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS5_14FileDescriptorEEENS6_19DescriptorsByNameEqIS8_EENSt3__19allocatorIPKS8_EEEE3getILi1EEERKNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  246|     13|  constexpr const ElemT<I>& get() const& {
  247|     13|    return StorageT<I>::get();
  248|     13|  }
descriptor.cc:_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS5_14FileDescriptorEEELm1ELb1EE3getEv:
  105|     13|  constexpr const T& get() const& { return *this; }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterINSt3__14lessINS4_4pairIPKN6google8protobuf10DescriptorEiEEEESC_E15checked_compareENS4_9allocatorINS6_IKSC_PKNS8_15FieldDescriptorEEEEEPNS1_10btree_nodeINS1_10map_paramsISC_SK_SD_SM_Li256ELb0EEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISS_XT_EE4typeEv:
  246|      1|  constexpr const ElemT<I>& get() const& {
  247|      1|    return StorageT<I>::get();
  248|      1|  }
_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_19key_compare_adapterINSt3__14lessINS5_4pairIPKN6google8protobuf10DescriptorEiEEEESD_E15checked_compareELm0ELb1EE3getEv:
  105|      1|  constexpr const T& get() const& { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS6_14ParentNumberEqENSt3__19allocatorIPKNS5_15FieldDescriptorEEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISF_XT_EE4typeEv:
  241|      6|  ElemT<I>& get() & {
  242|      6|    return StorageT<I>::get();
  243|      6|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_114ParentNumberEqELm2ELb1EE3getEv:
  106|     13|  T& get() & { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_118SymbolByParentHashENS6_16SymbolByParentEqENSt3__19allocatorINS5_6SymbolEEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  241|     56|  ElemT<I>& get() & {
  242|     56|    return StorageT<I>::get();
  243|     56|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_116SymbolByParentEqELm2ELb1EE3getEv:
  106|     56|  T& get() & { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS6_14ParentNumberEqENSt3__19allocatorIPKNS5_19EnumValueDescriptorEEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISF_XT_EE4typeEv:
  241|      7|  ElemT<I>& get() & {
  242|      7|    return StorageT<I>::get();
  243|      7|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS6_14ParentNumberEqENSt3__19allocatorIPKNS5_19EnumValueDescriptorEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISF_XT_EE4typeEv:
  241|    207|  ElemT<I>& get() & {
  242|    207|    return StorageT<I>::get();
  243|    207|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_116ParentNumberHashELm1ELb1EE3getEv:
  106|    413|  T& get() & { return *this; }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS0_13hash_internal4HashIiEENSt3__18equal_toIiEENS7_9allocatorIiEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISC_XT_EE4typeEv:
  246|      4|  constexpr const ElemT<I>& get() const& {
  247|      4|    return StorageT<I>::get();
  248|      4|  }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashENSA_2EqENSt3__19allocatorIS9_EEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISG_XT_EE4typeEv:
  246|    333|  constexpr const ElemT<I>& get() const& {
  247|    333|    return StorageT<I>::get();
  248|    333|  }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashENSA_2EqENSt3__19allocatorIS9_EEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISG_XT_EE4typeEv:
  241|    327|  ElemT<I>& get() & {
  242|    327|    return StorageT<I>::get();
  243|    327|  }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSA_2EqENSt3__19allocatorINSD_4pairIKS9_NS6_17DescriptorBuilder12MessageHintsEEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISL_XT_EE4typeEv:
  246|      8|  constexpr const ElemT<I>& get() const& {
  247|      8|    return StorageT<I>::get();
  248|      8|  }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS0_11string_viewEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISA_XT_EE4typeEv:
  246|  1.82k|  constexpr const ElemT<I>& get() const& {
  247|  1.82k|    return StorageT<I>::get();
  248|  1.82k|  }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS0_11string_viewEEEEE3getILi3EEERNS1_25internal_compressed_tuple4ElemISA_XT_EE4typeEv:
  241|     12|  ElemT<I>& get() & {
  242|     12|    return StorageT<I>::get();
  243|     12|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS0_11string_viewEEELm3ELb1EE3getEv:
  106|     12|  T& get() & { return *this; }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS0_11string_viewEEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISA_XT_EE4typeEv:
  241|    896|  ElemT<I>& get() & {
  242|    896|    return StorageT<I>::get();
  243|    896|  }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS0_11string_viewEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISA_XT_EE4typeEv:
  241|      3|  ElemT<I>& get() & {
  242|      3|    return StorageT<I>::get();
  243|      3|  }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS0_11string_viewEEEEE3getILi1EEERKNS1_25internal_compressed_tuple4ElemISA_XT_EE4typeEv:
  246|    424|  constexpr const ElemT<I>& get() const& {
  247|    424|    return StorageT<I>::get();
  248|    424|  }
_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_10StringHashELm1ELb1EE3getEv:
  105|    432|  constexpr const T& get() const& { return *this; }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS0_13hash_internal4HashINSt3__16vectorIiNS6_9allocatorIiEEEEEENS6_8equal_toISA_EENS8_INS6_4pairIKSA_iEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISI_XT_EE4typeEv:
  246|      4|  constexpr const ElemT<I>& get() const& {
  247|      4|    return StorageT<I>::get();
  248|      4|  }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS0_13hash_internal4HashINSt3__16vectorIiNS6_9allocatorIiEEEEEENS6_8equal_toISA_EENS8_INS6_4pairIKSA_SA_EEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISI_XT_EE4typeEv:
  246|      4|  constexpr const ElemT<I>& get() const& {
  247|      4|    return StorageT<I>::get();
  248|      4|  }
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEEEEEC2IS3_JS4_S5_SD_ETnNS6_9enable_ifIXsr4absl11conjunctionINS0_8negationINS6_7is_sameIFvSE_EFvNS6_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISE_JSL_DpT0_EEEEE5valueEbE4typeELb1EEEOSL_DpOST_:
  236|      4|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      4|                                             absl::forward<First>(first),
  238|      4|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS8_12basic_stringIcNS8_11char_traitsIcEENS9_IcEEEEEEEEENS8_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_S6_S7_SF_EEENS0_10in_place_tEDpOT_:
  126|     16|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_10StringHashELm1ELb1EEC2IS4_EENS0_10in_place_tEOT_:
  103|     89|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_8StringEqELm2ELb1EEC2IS4_EENS0_10in_place_tEOT_:
  103|     89|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_12basic_stringIcNS4_11char_traitsIcEENS5_IcEEEEEELm3ELb1EEC2ISB_EENS0_10in_place_tEOT_:
  103|      4|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSA_2EqENSt3__19allocatorIS9_EEEEC2IS3_JSB_SC_SF_ETnNSD_9enable_ifIXsr4absl11conjunctionINS0_8negationINSD_7is_sameIFvSG_EFvNSD_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISG_JSN_DpT0_EEEEE5valueEbE4typeELb1EEEOSN_DpOSV_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSC_2EqENSt3__19allocatorISB_EEEEENSF_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_SD_SE_SH_EEENS0_10in_place_tEDpOT_:
  126|      8|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashELm1ELb1EEC2ISB_EENS0_10in_place_tEOT_:
  103|     14|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_6HashEqIPKN6google8protobuf10DescriptorEvE2EqELm2ELb1EEC2ISB_EENS0_10in_place_tEOT_:
  103|     14|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIPKN6google8protobuf10DescriptorEEELm3ELb1EEC2ISB_EENS0_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEEEEEC2IS3_JS4_S5_SK_ETnNS6_9enable_ifIXsr4absl11conjunctionINS0_8negationINS6_7is_sameIFvSL_EFvNS6_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISL_JSS_DpT0_EEEEE5valueEbE4typeELb1EEEOSS_DpOS10_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS8_4pairIKNS8_12basic_stringIcNS8_11char_traitsIcEENS9_IcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEEEEEENS8_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_S6_S7_SM_EEENS0_10in_place_tEDpOT_:
  126|      8|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKNS4_12basic_stringIcNS4_11char_traitsIcEENS5_IcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEEELm3ELb1EEC2ISI_EENS0_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashENS6_18SymbolByFullNameEqENSt3__19allocatorINS5_6SymbolEEEEEC2IS3_JS7_S8_SC_ETnNS9_9enable_ifIXsr4absl11conjunctionINS0_8negationINS9_7is_sameIFvSD_EFvNS9_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISD_JSK_DpT0_EEEEE5valueEbE4typeELb1EEEOSK_DpOSS_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorINS7_6SymbolEEEEEENSB_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_S9_SA_SE_EEENS0_10in_place_tEDpOT_:
  126|      8|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashELm1ELb1EEC2IS7_EENS0_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_118SymbolByFullNameEqELm2ELb1EEC2IS7_EENS0_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIN6google8protobuf6SymbolEEELm3ELb1EEC2IS9_EENS0_10in_place_tEOT_:
  103|      6|      : T(absl::forward<V>(v)) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS5_14FileDescriptorEEENS6_19DescriptorsByNameEqIS8_EENSt3__19allocatorIPKS8_EEEEC2IS3_JS9_SB_SG_ETnNSC_9enable_ifIXsr4absl11conjunctionINS0_8negationINSC_7is_sameIFvSH_EFvNSC_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISH_JSO_DpT0_EEEEE5valueEbE4typeELb1EEEOSO_DpOSW_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS7_14FileDescriptorEEENS8_19DescriptorsByNameEqISA_EENSt3__19allocatorIPKSA_EEEEENSE_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_SB_SD_SI_EEENS0_10in_place_tEDpOT_:
  126|      8|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS5_14FileDescriptorEEELm1ELb1EEC2IS9_EENS0_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_119DescriptorsByNameEqINS5_14FileDescriptorEEELm2ELb1EEC2IS9_EENS0_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIPKN6google8protobuf14FileDescriptorEEELm3ELb1EEC2ISB_EENS0_10in_place_tEOT_:
  103|     10|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterINSt3__14lessINS4_4pairIPKN6google8protobuf10DescriptorEiEEEESC_E15checked_compareENS4_9allocatorINS6_IKSC_PKNS8_15FieldDescriptorEEEEEPNS1_10btree_nodeINS1_10map_paramsISC_SK_SD_SM_Li256ELb0EEEEEEEC2IRKSF_JRKSM_SR_ETnNS4_9enable_ifIXsr4absl11conjunctionINS0_8negationINS4_7is_sameIFvSS_EFvNS4_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISS_JS13_DpT0_EEEEE5valueEbE4typeELb1EEEOS13_DpOS1B_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_19key_compare_adapterINSt3__14lessINS6_4pairIPKN6google8protobuf10DescriptorEiEEEESE_E15checked_compareENS6_9allocatorINS8_IKSE_PKNSA_15FieldDescriptorEEEEEPNS1_10btree_nodeINS1_10map_paramsISE_SM_SF_SO_Li256ELb0EEEEEEEENS6_16integer_sequenceImJLm0ELm1ELm2EEEELb1EEC2IJRKSH_RKSO_ST_EEENS0_10in_place_tEDpOT_:
  126|      6|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_19key_compare_adapterINSt3__14lessINS5_4pairIPKN6google8protobuf10DescriptorEiEEEESD_E15checked_compareELm0ELb1EEC2IRKSG_EENS0_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKNS6_IPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorEEEEELm1ELb1EEC2IRKSI_EENS0_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIPNS1_10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS9_15FieldDescriptorENS6_4lessISD_EENS6_9allocatorINS7_IKSD_SG_EEEELi256ELb0EEEEELm2ELb0EEC2ISP_EENS0_10in_place_tEOT_:
   90|      2|      : value(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEENS6_10unique_ptrIN6google8protobuf10FeatureSetENS6_14default_deleteISI_EEEEEEEEEEC2IS3_JS4_S5_SN_ETnNS6_9enable_ifIXsr4absl11conjunctionINS0_8negationINS6_7is_sameIFvSO_EFvNS6_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISO_JSV_DpT0_EEEEE5valueEbE4typeELb1EEEOSV_DpOS13_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS8_4pairIKNS8_12basic_stringIcNS8_11char_traitsIcEENS9_IcEEEENS8_10unique_ptrIN6google8protobuf10FeatureSetENS8_14default_deleteISK_EEEEEEEEEEENS8_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_S6_S7_SP_EEENS0_10in_place_tEDpOT_:
  126|      8|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKNS4_12basic_stringIcNS4_11char_traitsIcEENS5_IcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISG_EEEEEEEELm3ELb1EEC2ISL_EENS0_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISL_XT_EE4typeEv:
  241|    107|  ElemT<I>& get() & {
  242|    107|    return StorageT<I>::get();
  243|    107|  }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISL_XT_EE4typeEv:
  241|      5|  ElemT<I>& get() & {
  242|      5|    return StorageT<I>::get();
  243|      5|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_118SymbolByParentHashENS6_16SymbolByParentEqENSt3__19allocatorINS5_6SymbolEEEEEC2IS3_JS7_S8_SC_ETnNS9_9enable_ifIXsr4absl11conjunctionINS0_8negationINS9_7is_sameIFvSD_EFvNS9_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISD_JSK_DpT0_EEEEE5valueEbE4typeELb1EEEOSK_DpOSS_:
  236|      4|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      4|                                             absl::forward<First>(first),
  238|      4|                                             absl::forward<Vs>(base)...) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorINS7_6SymbolEEEEEENSB_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_S9_SA_SE_EEENS0_10in_place_tEDpOT_:
  126|     16|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_118SymbolByParentHashELm1ELb1EEC2IS7_EENS0_10in_place_tEOT_:
  103|      4|      : T(absl::forward<V>(v)) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_116SymbolByParentEqELm2ELb1EEC2IS7_EENS0_10in_place_tEOT_:
  103|      4|      : T(absl::forward<V>(v)) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS6_14ParentNumberEqENSt3__19allocatorIPKNS5_15FieldDescriptorEEEEEC2IS3_JS7_S8_SE_ETnNS9_9enable_ifIXsr4absl11conjunctionINS0_8negationINS9_7is_sameIFvSF_EFvNS9_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISF_JSM_DpT0_EEEEE5valueEbE4typeELb1EEEOSM_DpOSU_:
  236|      4|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      4|                                             absl::forward<First>(first),
  238|      4|                                             absl::forward<Vs>(base)...) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS8_14ParentNumberEqENSt3__19allocatorIPKNS7_15FieldDescriptorEEEEEENSB_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_S9_SA_SG_EEENS0_10in_place_tEDpOT_:
  126|     16|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_116ParentNumberHashELm1ELb1EEC2IS7_EENS0_10in_place_tEOT_:
  103|     12|      : T(absl::forward<V>(v)) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_114ParentNumberEqELm2ELb1EEC2IS7_EENS0_10in_place_tEOT_:
  103|     12|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIPKN6google8protobuf15FieldDescriptorEEELm3ELb1EEC2ISB_EENS0_10in_place_tEOT_:
  103|      4|      : T(absl::forward<V>(v)) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS6_14ParentNumberEqENSt3__19allocatorIPKNS5_19EnumValueDescriptorEEEEEC2IS3_JS7_S8_SE_ETnNS9_9enable_ifIXsr4absl11conjunctionINS0_8negationINS9_7is_sameIFvSF_EFvNS9_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISF_JSM_DpT0_EEEEE5valueEbE4typeELb1EEEOSM_DpOSU_:
  236|      8|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      8|                                             absl::forward<First>(first),
  238|      8|                                             absl::forward<Vs>(base)...) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS8_14ParentNumberEqENSt3__19allocatorIPKNS7_19EnumValueDescriptorEEEEEENSB_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_S9_SA_SG_EEENS0_10in_place_tEDpOT_:
  126|     32|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIPKN6google8protobuf19EnumValueDescriptorEEELm3ELb1EEC2ISB_EENS0_10in_place_tEOT_:
  103|      8|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEPKN6google8protobuf23SourceCodeInfo_LocationEEEEEEEC2IS3_JS4_S5_SL_ETnNS6_9enable_ifIXsr4absl11conjunctionINS0_8negationINS6_7is_sameIFvSM_EFvNS6_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISM_JST_DpT0_EEEEE5valueEbE4typeELb1EEEOST_DpOS11_:
  236|      4|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      4|                                             absl::forward<First>(first),
  238|      4|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS8_4pairIKNS8_12basic_stringIcNS8_11char_traitsIcEENS9_IcEEEEPKN6google8protobuf23SourceCodeInfo_LocationEEEEEEEENS8_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_S6_S7_SN_EEENS0_10in_place_tEDpOT_:
  126|     16|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKNS4_12basic_stringIcNS4_11char_traitsIcEENS5_IcEEEEPKN6google8protobuf23SourceCodeInfo_LocationEEEEELm3ELb1EEC2ISJ_EENS0_10in_place_tEOT_:
  103|      4|      : T(absl::forward<V>(v)) {}
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashENS6_18SymbolByFullNameEqENSt3__19allocatorINS5_6SymbolEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  241|  1.38k|  ElemT<I>& get() & {
  242|  1.38k|    return StorageT<I>::get();
  243|  1.38k|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashELm1ELb1EE3getEv:
  106|  1.38k|  T& get() & { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS5_14FileDescriptorEEENS6_19DescriptorsByNameEqIS8_EENSt3__19allocatorIPKS8_EEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  241|      4|  ElemT<I>& get() & {
  242|      4|    return StorageT<I>::get();
  243|      4|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS5_14FileDescriptorEEELm1ELb1EE3getEv:
  106|      4|  T& get() & { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_118SymbolByParentHashENS6_16SymbolByParentEqENSt3__19allocatorINS5_6SymbolEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  241|  1.55k|  ElemT<I>& get() & {
  242|  1.55k|    return StorageT<I>::get();
  243|  1.55k|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_118SymbolByParentHashELm1ELb1EE3getEv:
  106|  1.55k|  T& get() & { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS6_14ParentNumberEqENSt3__19allocatorIPKNS5_15FieldDescriptorEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISF_XT_EE4typeEv:
  241|    206|  ElemT<I>& get() & {
  242|    206|    return StorageT<I>::get();
  243|    206|  }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEENS6_10unique_ptrIN6google8protobuf10FeatureSetENS6_14default_deleteISI_EEEEEEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISO_XT_EE4typeEv:
  241|    239|  ElemT<I>& get() & {
  242|    239|    return StorageT<I>::get();
  243|    239|  }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEENS6_10unique_ptrIN6google8protobuf10FeatureSetENS6_14default_deleteISI_EEEEEEEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISO_XT_EE4typeEv:
  241|    235|  ElemT<I>& get() & {
  242|    235|    return StorageT<I>::get();
  243|    235|  }
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEbEEEEEEC2IS3_JS4_S5_SG_ETnNS6_9enable_ifIXsr4absl11conjunctionINS0_8negationINS6_7is_sameIFvSH_EFvNS6_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISH_JSO_DpT0_EEEEE5valueEbE4typeELb1EEEOSO_DpOSW_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS8_4pairIKNS8_12basic_stringIcNS8_11char_traitsIcEENS9_IcEEEEbEEEEEEENS8_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_S6_S7_SI_EEENS0_10in_place_tEDpOT_:
  126|      8|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKNS4_12basic_stringIcNS4_11char_traitsIcEENS5_IcEEEEbEEEELm3ELb1EEC2ISE_EENS0_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEEEEE3getILi1EEERKNS1_25internal_compressed_tuple4ElemISE_XT_EE4typeEv:
  246|      8|  constexpr const ElemT<I>& get() const& {
  247|      8|    return StorageT<I>::get();
  248|      8|  }
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashENSA_2EqENSt3__19allocatorIS9_EEEEC2IS3_JSB_SC_SF_ETnNSD_9enable_ifIXsr4absl11conjunctionINS0_8negationINSD_7is_sameIFvSG_EFvNSD_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISG_JSN_DpT0_EEEEE5valueEbE4typeELb1EEEOSN_DpOSV_:
  236|      8|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      8|                                             absl::forward<First>(first),
  238|      8|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashENSC_2EqENSt3__19allocatorISB_EEEEENSF_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_SD_SE_SH_EEENS0_10in_place_tEDpOT_:
  126|     32|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSA_2EqENSt3__19allocatorINSD_4pairIKS9_NS6_17DescriptorBuilder12MessageHintsEEEEEEEC2IS3_JSB_SC_SK_ETnNSD_9enable_ifIXsr4absl11conjunctionINS0_8negationINSD_7is_sameIFvSL_EFvNSD_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISL_JSS_DpT0_EEEEE5valueEbE4typeELb1EEEOSS_DpOS10_:
  236|      4|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      4|                                             absl::forward<First>(first),
  238|      4|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSC_2EqENSt3__19allocatorINSF_4pairIKSB_NS8_17DescriptorBuilder12MessageHintsEEEEEEEENSF_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_SD_SE_SM_EEENS0_10in_place_tEDpOT_:
  126|     16|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKPKN6google8protobuf10DescriptorENS8_17DescriptorBuilder12MessageHintsEEEEELm3ELb1EEC2ISG_EENS0_10in_place_tEOT_:
  103|      4|      : T(absl::forward<V>(v)) {}
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashENSA_2EqENSt3__19allocatorIS9_EEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISG_XT_EE4typeEv:
  241|    103|  ElemT<I>& get() & {
  242|    103|    return StorageT<I>::get();
  243|    103|  }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashENSA_2EqENSt3__19allocatorIS9_EEEE3getILi1EEERKNS1_25internal_compressed_tuple4ElemISG_XT_EE4typeEv:
  246|      1|  constexpr const ElemT<I>& get() const& {
  247|      1|    return StorageT<I>::get();
  248|      1|  }
_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashELm1ELb1EE3getEv:
  105|      1|  constexpr const T& get() const& { return *this; }
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS0_11string_viewEEEEEC2IS3_JS4_S5_S9_ETnNS6_9enable_ifIXsr4absl11conjunctionINS0_8negationINS6_7is_sameIFvSA_EFvNS6_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISA_JSH_DpT0_EEEEE5valueEbE4typeELb1EEEOSH_DpOSP_:
  236|     75|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|     75|                                             absl::forward<First>(first),
  238|     75|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS0_11string_viewEEEEEENS8_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_S6_S7_SB_EEENS0_10in_place_tEDpOT_:
  126|    300|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS0_11string_viewEEELm3ELb1EEC2IS7_EENS0_10in_place_tEOT_:
  103|     75|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS0_13hash_internal4HashIiEENSt3__18equal_toIiEENS7_9allocatorIiEEEEC2IS3_JS6_S9_SB_ETnNS7_9enable_ifIXsr4absl11conjunctionINS0_8negationINS7_7is_sameIFvSC_EFvNS7_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISC_JSJ_DpT0_EEEEE5valueEbE4typeELb1EEEOSJ_DpOSR_:
  236|      4|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      4|                                             absl::forward<First>(first),
  238|      4|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS0_13hash_internal4HashIiEENSt3__18equal_toIiEENS9_9allocatorIiEEEEENS9_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_S8_SB_SD_EEENS0_10in_place_tEDpOT_:
  126|     16|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS0_13hash_internal4HashIiEELm1ELb1EEC2IS6_EENS0_10in_place_tEOT_:
  103|      4|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__18equal_toIiEELm2ELb1EEC2IS6_EENS0_10in_place_tEOT_:
  103|      4|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIiEELm3ELb1EEC2IS6_EENS0_10in_place_tEOT_:
  103|      4|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS0_13hash_internal4HashINSt3__16vectorIiNS6_9allocatorIiEEEEEENS6_8equal_toISA_EENS8_INS6_4pairIKSA_SA_EEEEEEC2IS3_JSB_SD_SH_ETnNS6_9enable_ifIXsr4absl11conjunctionINS0_8negationINS6_7is_sameIFvSI_EFvNS6_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISI_JSP_DpT0_EEEEE5valueEbE4typeELb1EEEOSP_DpOSX_:
  236|      4|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      4|                                             absl::forward<First>(first),
  238|      4|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS0_13hash_internal4HashINSt3__16vectorIiNS8_9allocatorIiEEEEEENS8_8equal_toISC_EENSA_INS8_4pairIKSC_SC_EEEEEEENS8_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_SD_SF_SJ_EEENS0_10in_place_tEDpOT_:
  126|     16|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS0_13hash_internal4HashINSt3__16vectorIiNS6_9allocatorIiEEEEEELm1ELb1EEC2ISB_EENS0_10in_place_tEOT_:
  103|      8|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__18equal_toINS4_6vectorIiNS4_9allocatorIiEEEEEELm2ELb1EEC2ISA_EENS0_10in_place_tEOT_:
  103|      8|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKNS4_6vectorIiNS5_IiEEEES9_EEEELm3ELb1EEC2ISC_EENS0_10in_place_tEOT_:
  103|      4|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS0_13hash_internal4HashINSt3__16vectorIiNS6_9allocatorIiEEEEEENS6_8equal_toISA_EENS8_INS6_4pairIKSA_iEEEEEEC2IS3_JSB_SD_SH_ETnNS6_9enable_ifIXsr4absl11conjunctionINS0_8negationINS6_7is_sameIFvSI_EFvNS6_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISI_JSP_DpT0_EEEEE5valueEbE4typeELb1EEEOSP_DpOSX_:
  236|      4|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      4|                                             absl::forward<First>(first),
  238|      4|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS0_13hash_internal4HashINSt3__16vectorIiNS8_9allocatorIiEEEEEENS8_8equal_toISC_EENSA_INS8_4pairIKSC_iEEEEEEENS8_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_SD_SF_SJ_EEENS0_10in_place_tEDpOT_:
  126|     16|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKNS4_6vectorIiNS5_IiEEEEiEEEELm3ELb1EEC2ISC_EENS0_10in_place_tEOT_:
  103|      4|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareENS7_9FileEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEEC2IRKSB_JRKSE_SJ_ETnNSC_9enable_ifIXsr4absl11conjunctionINS0_8negationINSC_7is_sameIFvSK_EFvNSC_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISK_JSV_DpT0_EEEEE5valueEbE4typeELb1EEEOSV_DpOS13_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareENS9_9FileEntryEE15checked_compareENSt3__19allocatorISB_EEPNS1_10btree_nodeINS1_10set_paramsISB_SA_SG_Li256ELb0EEEEEEEENSE_16integer_sequenceImJLm0ELm1ELm2EEEELb1EEC2IJRKSD_RKSG_SL_EEENS0_10in_place_tEDpOT_:
  126|      6|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareENS8_9FileEntryEE15checked_compareELm0ELb0EEC2IRKSC_EENS0_10in_place_tEOT_:
   90|      2|      : value(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEELm1ELb1EEC2IRKSB_EENS0_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS9_11FileCompareENSt3__19allocatorISA_EELi256ELb0EEEEELm2ELb0EEC2ISH_EENS0_10in_place_tEOT_:
   90|      2|      : value(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS7_11SymbolEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEEC2IRKSB_JRKSE_SJ_ETnNSC_9enable_ifIXsr4absl11conjunctionINS0_8negationINSC_7is_sameIFvSK_EFvNSC_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISK_JSV_DpT0_EEEEE5valueEbE4typeELb1EEEOSV_DpOS13_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS9_11SymbolEntryEE15checked_compareENSt3__19allocatorISB_EEPNS1_10btree_nodeINS1_10set_paramsISB_SA_SG_Li256ELb0EEEEEEEENSE_16integer_sequenceImJLm0ELm1ELm2EEEELb1EEC2IJRKSD_RKSG_SL_EEENS0_10in_place_tEDpOT_:
  126|      6|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS8_11SymbolEntryEE15checked_compareELm0ELb0EEC2IRKSC_EENS0_10in_place_tEOT_:
   90|      2|      : value(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEELm1ELb1EEC2IRKSB_EENS0_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS9_13SymbolCompareENSt3__19allocatorISA_EELi256ELb0EEEEELm2ELb0EEC2ISH_EENS0_10in_place_tEOT_:
   90|      2|      : value(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex16ExtensionCompareENS7_14ExtensionEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEEC2IRKSB_JRKSE_SJ_ETnNSC_9enable_ifIXsr4absl11conjunctionINS0_8negationINSC_7is_sameIFvSK_EFvNSC_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISK_JSV_DpT0_EEEEE5valueEbE4typeELb1EEEOSV_DpOS13_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex16ExtensionCompareENS9_14ExtensionEntryEE15checked_compareENSt3__19allocatorISB_EEPNS1_10btree_nodeINS1_10set_paramsISB_SA_SG_Li256ELb0EEEEEEEENSE_16integer_sequenceImJLm0ELm1ELm2EEEELb1EEC2IJRKSD_RKSG_SL_EEENS0_10in_place_tEDpOT_:
  126|      6|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex16ExtensionCompareENS8_14ExtensionEntryEE15checked_compareELm0ELb0EEC2IRKSC_EENS0_10in_place_tEOT_:
   90|      2|      : value(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEEELm1ELb1EEC2IRKSB_EENS0_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS9_16ExtensionCompareENSt3__19allocatorISA_EELi256ELb0EEEEELm2ELb0EEC2ISH_EENS0_10in_place_tEOT_:
   90|      2|      : value(absl::forward<V>(v)) {}
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareENS7_9FileEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISK_XT_EE4typeEv:
  241|     14|  ElemT<I>& get() & {
  242|     14|    return StorageT<I>::get();
  243|     14|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEELm1ELb1EE3getEv:
  106|     14|  T& get() & { return *this; }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareENS7_9FileEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISK_XT_EE4typeEv:
  241|     12|  ElemT<I>& get() & {
  242|     12|    return StorageT<I>::get();
  243|     12|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS9_11FileCompareENSt3__19allocatorISA_EELi256ELb0EEEEELm2ELb0EE3getEv:
   92|     12|  T& get() & { return value; }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareENS7_9FileEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISK_XT_EE4typeEv:
  246|     18|  constexpr const ElemT<I>& get() const& {
  247|     18|    return StorageT<I>::get();
  248|     18|  }
_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareENS8_9FileEntryEE15checked_compareELm0ELb0EE3getEv:
   91|     18|  constexpr const T& get() const& { return value; }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex16ExtensionCompareENS7_14ExtensionEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISK_XT_EE4typeEv:
  241|      3|  ElemT<I>& get() & {
  242|      3|    return StorageT<I>::get();
  243|      3|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEEELm1ELb1EE3getEv:
  106|      3|  T& get() & { return *this; }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex16ExtensionCompareENS7_14ExtensionEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISK_XT_EE4typeEv:
  241|      4|  ElemT<I>& get() & {
  242|      4|    return StorageT<I>::get();
  243|      4|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS9_16ExtensionCompareENSt3__19allocatorISA_EELi256ELb0EEEEELm2ELb0EE3getEv:
   92|      4|  T& get() & { return value; }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex16ExtensionCompareENS7_14ExtensionEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISK_XT_EE4typeEv:
  246|      3|  constexpr const ElemT<I>& get() const& {
  247|      3|    return StorageT<I>::get();
  248|      3|  }
_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex16ExtensionCompareENS8_14ExtensionEntryEE15checked_compareELm0ELb0EE3getEv:
   91|      3|  constexpr const T& get() const& { return value; }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS7_11SymbolEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEE3getILi2EEERKNS1_25internal_compressed_tuple4ElemISK_XT_EE4typeEv:
  246|     30|  constexpr const ElemT<I>& get() const& {
  247|     30|    return StorageT<I>::get();
  248|     30|  }
_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS9_13SymbolCompareENSt3__19allocatorISA_EELi256ELb0EEEEELm2ELb0EE3getEv:
   91|     30|  constexpr const T& get() const& { return value; }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS7_11SymbolEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISK_XT_EE4typeEv:
  246|    297|  constexpr const ElemT<I>& get() const& {
  247|    297|    return StorageT<I>::get();
  248|    297|  }
_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS8_11SymbolEntryEE15checked_compareELm0ELb0EE3getEv:
   91|    297|  constexpr const T& get() const& { return value; }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS7_11SymbolEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISK_XT_EE4typeEv:
  241|    279|  ElemT<I>& get() & {
  242|    279|    return StorageT<I>::get();
  243|    279|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS9_13SymbolCompareENSt3__19allocatorISA_EELi256ELb0EEEEELm2ELb0EE3getEv:
   92|    279|  T& get() & { return value; }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS7_11SymbolEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISK_XT_EE4typeEv:
  241|    103|  ElemT<I>& get() & {
  242|    103|    return StorageT<I>::get();
  243|    103|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEELm1ELb1EE3getEv:
  106|    103|  T& get() & { return *this; }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSA_2EqENSt3__19allocatorINSD_4pairIKS9_PKNS6_21DynamicMessageFactory8TypeInfoEEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISN_XT_EE4typeEv:
  246|     12|  constexpr const ElemT<I>& get() const& {
  247|     12|    return StorageT<I>::get();
  248|     12|  }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSA_2EqENSt3__19allocatorINSD_4pairIKS9_PKNS6_21DynamicMessageFactory8TypeInfoEEEEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISN_XT_EE4typeEv:
  241|      8|  ElemT<I>& get() & {
  242|      8|    return StorageT<I>::get();
  243|      8|  }
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSA_2EqENSt3__19allocatorINSD_4pairIKS9_PKNS6_21DynamicMessageFactory8TypeInfoEEEEEEEC2IS3_JSB_SC_SM_ETnNSD_9enable_ifIXsr4absl11conjunctionINS0_8negationINSD_7is_sameIFvSN_EFvNSD_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISN_JSU_DpT0_EEEEE5valueEbE4typeELb1EEEOSU_DpOS12_:
  236|      6|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      6|                                             absl::forward<First>(first),
  238|      6|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSC_2EqENSt3__19allocatorINSF_4pairIKSB_PKNS8_21DynamicMessageFactory8TypeInfoEEEEEEEENSF_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_SD_SE_SO_EEENS0_10in_place_tEDpOT_:
  126|     24|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKPKN6google8protobuf10DescriptorEPKNS8_21DynamicMessageFactory8TypeInfoEEEEELm3ELb1EEC2ISI_EENS0_10in_place_tEOT_:
  103|      6|      : T(absl::forward<V>(v)) {}
message.cc:_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENS7_18DescriptorByNameEqENSt3__19allocatorIPKNS5_8internal15DescriptorTableEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  246|     68|  constexpr const ElemT<I>& get() const& {
  247|     68|    return StorageT<I>::get();
  248|     68|  }
message.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENS7_18DescriptorByNameEqENSt3__19allocatorIPKNS5_8internal15DescriptorTableEEEEE3getILi3EEERNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  241|     17|  ElemT<I>& get() & {
  242|     17|    return StorageT<I>::get();
  243|     17|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIPKN6google8protobuf8internal15DescriptorTableEEELm3ELb1EE3getEv:
  106|     17|  T& get() & { return *this; }
message.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENS7_18DescriptorByNameEqENSt3__19allocatorIPKNS5_8internal15DescriptorTableEEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  241|     77|  ElemT<I>& get() & {
  242|     77|    return StorageT<I>::get();
  243|     77|  }
message.cc:_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENS7_18DescriptorByNameEqENSt3__19allocatorIPKNS5_8internal15DescriptorTableEEEEEC2IS3_JS8_S9_SG_ETnNSA_9enable_ifIXsr4absl11conjunctionINS0_8negationINSA_7is_sameIFvSH_EFvNSA_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISH_JSO_DpT0_EEEEE5valueEbE4typeELb1EEEOSO_DpOSW_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
message.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENS9_18DescriptorByNameEqENSt3__19allocatorIPKNS7_8internal15DescriptorTableEEEEEENSC_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_SA_SB_SI_EEENS0_10in_place_tEDpOT_:
  126|      8|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
message.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashELm1ELb1EEC2IS8_EENS0_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
message.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory18DescriptorByNameEqELm2ELb1EEC2IS8_EENS0_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIPKN6google8protobuf8internal15DescriptorTableEEELm3ELb1EEC2ISC_EENS0_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
message.cc:_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSA_2EqENSt3__19allocatorINSD_4pairIKS9_NS6_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEEEEEEC2IS3_JSB_SC_SL_ETnNSD_9enable_ifIXsr4absl11conjunctionINS0_8negationINSD_7is_sameIFvSM_EFvNSD_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISM_JST_DpT0_EEEEE5valueEbE4typeELb1EEEOST_DpOS11_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
message.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSC_2EqENSt3__19allocatorINSF_4pairIKSB_NS8_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEEEEEEENSF_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_SD_SE_SN_EEENS0_10in_place_tEDpOT_:
  126|      8|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
message.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKPKN6google8protobuf10DescriptorENS8_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEEEELm3ELb1EEC2ISH_EENS0_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
message.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENS7_18DescriptorByNameEqENSt3__19allocatorIPKNS5_8internal15DescriptorTableEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  241|      6|  ElemT<I>& get() & {
  242|      6|    return StorageT<I>::get();
  243|      6|  }
message.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashELm1ELb1EE3getEv:
  106|      6|  T& get() & { return *this; }

_ZN4absl12lts_2024011618container_internal27SanitizerPoisonMemoryRegionEPKvm:
  220|    537|inline void SanitizerPoisonMemoryRegion(const void* m, size_t s) {
  221|       |#ifdef ABSL_HAVE_ADDRESS_SANITIZER
  222|       |  ASAN_POISON_MEMORY_REGION(m, s);
  223|       |#endif
  224|       |#ifdef ABSL_HAVE_MEMORY_SANITIZER
  225|       |  __msan_poison(m, s);
  226|       |#endif
  227|    537|  (void)m;
  228|    537|  (void)s;
  229|    537|}
_ZN4absl12lts_2024011618container_internal29SanitizerUnpoisonMemoryRegionEPKvm:
  231|  3.97k|inline void SanitizerUnpoisonMemoryRegion(const void* m, size_t s) {
  232|       |#ifdef ABSL_HAVE_ADDRESS_SANITIZER
  233|       |  ASAN_UNPOISON_MEMORY_REGION(m, s);
  234|       |#endif
  235|       |#ifdef ABSL_HAVE_MEMORY_SANITIZER
  236|       |  __msan_unpoison(m, s);
  237|       |#endif
  238|  3.97k|  (void)m;
  239|  3.97k|  (void)s;
  240|  3.97k|}
_ZN4absl12lts_2024011618container_internal8AllocateILm8ENSt3__19allocatorIcEEEEPvPT0_m:
   55|     83|void* Allocate(Alloc* alloc, size_t n) {
   56|     83|  static_assert(Alignment > 0, "");
   57|     83|  assert(n && "n must be positive");
   58|     83|  using M = AlignedType<Alignment>;
   59|     83|  using A = typename absl::allocator_traits<Alloc>::template rebind_alloc<M>;
   60|     83|  using AT = typename absl::allocator_traits<Alloc>::template rebind_traits<M>;
   61|       |  // On macOS, "mem_alloc" is a #define with one argument defined in
   62|       |  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
   63|       |  // with the "foo(bar)" syntax.
   64|     83|  A my_mem_alloc(*alloc);
   65|     83|  void* p = AT::allocate(my_mem_alloc, (n + sizeof(M) - 1) / sizeof(M));
   66|       |  assert(reinterpret_cast<uintptr_t>(p) % Alignment == 0 &&
   67|     83|         "allocator does not respect alignment");
   68|     83|  return p;
   69|     83|}
_ZN4absl12lts_2024011618container_internal10DeallocateILm8ENSt3__19allocatorIcEEEEvPT0_Pvm:
   74|     63|void Deallocate(Alloc* alloc, void* p, size_t n) {
   75|     63|  static_assert(Alignment > 0, "");
   76|     63|  assert(n && "n must be positive");
   77|     63|  using M = AlignedType<Alignment>;
   78|     63|  using A = typename absl::allocator_traits<Alloc>::template rebind_alloc<M>;
   79|     63|  using AT = typename absl::allocator_traits<Alloc>::template rebind_traits<M>;
   80|       |  // On macOS, "mem_alloc" is a #define with one argument defined in
   81|       |  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
   82|       |  // with the "foo(bar)" syntax.
   83|     63|  A my_mem_alloc(*alloc);
   84|     63|  AT::deallocate(my_mem_alloc, static_cast<M*>(p),
   85|     63|                 (n + sizeof(M) - 1) / sizeof(M));
   86|     63|}
extension_set.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS7_12_GLOBAL__N_115ExtensionHasherENSA_11ExtensionEqENSt3__19allocatorIS8_EEE12EqualElementINSA_16ExtensionInfoKeyEEERS8_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISM_EEEEOSL_OSM_:
  214|      8|DecomposeValue(F&& f, Arg&& arg) {
  215|      8|  const auto& key = arg;
  216|      8|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|      8|}
extension_set.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS7_12_GLOBAL__N_115ExtensionHasherENSA_11ExtensionEqENSt3__19allocatorIS8_EEE19EmplaceDecomposableERKS8_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISL_EEEEOSK_OSL_:
  214|      1|DecomposeValue(F&& f, Arg&& arg) {
  215|      1|  const auto& key = arg;
  216|      1|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|      1|}
_ZN4absl12lts_2024011618container_internal15map_slot_policyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISD_EEEEE7destroyINS7_INS3_4pairIKS9_SG_EEEEEEvPT_PNS1_13map_slot_typeIS9_SG_EE:
  417|      4|  static void destroy(Allocator* alloc, slot_type* slot) {
  418|      4|    if (kMutableKeys::value) {
  ------------------
  |  Branch (418:9): [True: 4, Folded]
  ------------------
  419|      4|      absl::allocator_traits<Allocator>::destroy(*alloc, &slot->mutable_value);
  420|      4|    } else {
  421|      0|      absl::allocator_traits<Allocator>::destroy(*alloc, &slot->value);
  422|      0|    }
  423|      4|  }
_ZN4absl12lts_2024011618container_internal15map_slot_policyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEE7destroyINS7_INS3_4pairIKS9_SD_EEEEEEvPT_PNS1_13map_slot_typeIS9_SD_EE:
  417|     50|  static void destroy(Allocator* alloc, slot_type* slot) {
  418|     50|    if (kMutableKeys::value) {
  ------------------
  |  Branch (418:9): [True: 50, Folded]
  ------------------
  419|     50|      absl::allocator_traits<Allocator>::destroy(*alloc, &slot->mutable_value);
  420|     50|    } else {
  421|      0|      absl::allocator_traits<Allocator>::destroy(*alloc, &slot->value);
  422|      0|    }
  423|     50|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS6_12_GLOBAL__N_120SymbolByFullNameHashENS9_18SymbolByFullNameEqENSt3__19allocatorIS7_EEE12EqualElementINS9_13FullNameQueryEEERS7_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISL_EEEEOSK_OSL_:
  214|    106|DecomposeValue(F&& f, Arg&& arg) {
  215|    106|  const auto& key = arg;
  216|    106|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|    106|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS6_12_GLOBAL__N_121DescriptorsByNameHashIS7_EENSB_19DescriptorsByNameEqIS7_EENSt3__19allocatorIS9_EEE12EqualElementINS0_11string_viewEEERS9_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISP_EEEEOSO_OSP_:
  214|      5|DecomposeValue(F&& f, Arg&& arg) {
  215|      5|  const auto& key = arg;
  216|      5|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|      5|}
_ZN4absl12lts_2024011618container_internal10DeallocateILm8ENSt3__19allocatorINS0_11string_viewEEEEEvPT0_Pvm:
   74|      3|void Deallocate(Alloc* alloc, void* p, size_t n) {
   75|      3|  static_assert(Alignment > 0, "");
   76|      3|  assert(n && "n must be positive");
   77|      3|  using M = AlignedType<Alignment>;
   78|      3|  using A = typename absl::allocator_traits<Alloc>::template rebind_alloc<M>;
   79|      3|  using AT = typename absl::allocator_traits<Alloc>::template rebind_traits<M>;
   80|       |  // On macOS, "mem_alloc" is a #define with one argument defined in
   81|       |  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
   82|       |  // with the "foo(bar)" syntax.
   83|      3|  A my_mem_alloc(*alloc);
   84|      3|  AT::deallocate(my_mem_alloc, static_cast<M*>(p),
   85|      3|                 (n + sizeof(M) - 1) / sizeof(M));
   86|      3|}
_ZN4absl12lts_2024011618container_internal13DecomposePairINS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS9_INS5_4pairIKSB_SF_EEEEE19EmplaceDecomposableEJRKNSJ_ISB_SF_EEEEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSS_DpOST_:
  206|     32|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
  207|     32|  return memory_internal::DecomposePairImpl(
  208|     32|      std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
  209|     32|}
_ZN4absl12lts_2024011618container_internal15memory_internal17DecomposePairImplINS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENSA_INS6_4pairIKSC_SG_EEEEE19EmplaceDecomposableERSL_NS6_5tupleIJRKSG_EEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNS6_L19piecewise_constructEEclsr3stdE7declvalINSR_IJSW_EEEEEclsr3stdE7declvalIT1_EEEEOSV_NSK_ISZ_S10_EE:
  138|     32|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  139|     32|  const auto& key = std::get<0>(p.first);
  140|     32|  return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  141|     32|                            std::move(p.second));
  142|     32|}
_ZN4absl12lts_2024011618container_internal13DecomposePairINS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS9_INS5_4pairIKSB_SF_EEEEE12EqualElementISB_EEJRSL_EEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSR_DpOSS_:
  206|      5|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
  207|      5|  return memory_internal::DecomposePairImpl(
  208|      5|      std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
  209|      5|}
_ZN4absl12lts_2024011618container_internal15memory_internal17DecomposePairImplINS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENSA_INS6_4pairIKSC_SG_EEEEE12EqualElementISC_EERSL_NS6_5tupleIJRKSG_EEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNS6_L19piecewise_constructEEclsr3stdE7declvalINSS_IJSX_EEEEEclsr3stdE7declvalIT1_EEEEOSW_NSK_IS10_S11_EE:
  138|      5|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  139|      5|  const auto& key = std::get<0>(p.first);
  140|      5|  return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  141|      5|                            std::move(p.second));
  142|      5|}
_ZN4absl12lts_2024011618container_internal8PairArgsIKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS3_4pairINS3_5tupleIJRKT_EEENSG_IJRKT0_EEEEERKNSF_ISH_SL_EE:
  187|     33|    const std::pair<F, S>& p) {
  188|     33|  return PairArgs(p.first, p.second);
  189|     33|}
_ZN4absl12lts_2024011618container_internal8PairArgsIRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKN6google8protobuf10Descriptor13WellKnownTypeEEENS3_4pairINS3_5tupleIJOT_EEENSJ_IJOT0_EEEEESL_SO_:
  181|     65|std::pair<std::tuple<F&&>, std::tuple<S&&>> PairArgs(F&& f, S&& s) {
  182|     65|  return {std::piecewise_construct, std::forward_as_tuple(std::forward<F>(f)),
  183|     65|          std::forward_as_tuple(std::forward<S>(s))};
  184|     65|}
_ZN4absl12lts_2024011618container_internal15map_slot_policyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEE8transferINS7_INS3_4pairIKS9_SD_EEEEEEDaPT_PNS1_13map_slot_typeIS9_SD_EESO_:
  427|     50|                       slot_type* old_slot) {
  428|     50|    auto is_relocatable =
  429|     50|        typename absl::is_trivially_relocatable<value_type>::type();
  430|       |
  431|     50|    emplace(new_slot);
  432|       |#if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606
  433|       |    if (is_relocatable) {
  434|       |      // TODO(b/247130232,b/251814870): remove casts after fixing warnings.
  435|       |      std::memcpy(static_cast<void*>(std::launder(&new_slot->value)),
  436|       |                  static_cast<const void*>(&old_slot->value),
  437|       |                  sizeof(value_type));
  438|       |      return is_relocatable;
  439|       |    }
  440|       |#endif
  441|       |
  442|     50|    if (kMutableKeys::value) {
  ------------------
  |  Branch (442:9): [True: 50, Folded]
  ------------------
  443|     50|      absl::allocator_traits<Allocator>::construct(
  444|     50|          *alloc, &new_slot->mutable_value, std::move(old_slot->mutable_value));
  445|     50|    } else {
  446|      0|      absl::allocator_traits<Allocator>::construct(*alloc, &new_slot->value,
  447|      0|                                                   std::move(old_slot->value));
  448|      0|    }
  449|     50|    destroy(alloc, old_slot);
  450|     50|    return is_relocatable;
  451|     50|  }
_ZN4absl12lts_2024011618container_internal15map_slot_policyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEE7emplaceEPNS1_13map_slot_typeIS9_SD_EE:
  348|     82|  static void emplace(slot_type* slot) {
  349|       |    // The construction of union doesn't do anything at runtime but it allows us
  350|       |    // to access its members without violating aliasing rules.
  351|     82|    new (slot) slot_type;
  352|     82|  }
_ZN4absl12lts_2024011618container_internal13map_slot_typeINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEC2Ev:
  329|     82|  map_slot_type() {}
_ZN4absl12lts_2024011618container_internal13DecomposePairINS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS9_INS5_4pairIKSB_SF_EEEEE11HashElementEJRSL_EEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSQ_DpOSR_:
  206|     28|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
  207|     28|  return memory_internal::DecomposePairImpl(
  208|     28|      std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
  209|     28|}
_ZN4absl12lts_2024011618container_internal15memory_internal17DecomposePairImplINS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENSA_INS6_4pairIKSC_SG_EEEEE11HashElementERSL_NS6_5tupleIJRKSG_EEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNS6_L19piecewise_constructEEclsr3stdE7declvalINSR_IJSW_EEEEEclsr3stdE7declvalIT1_EEEEOSV_NSK_ISZ_S10_EE:
  138|     28|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  139|     28|  const auto& key = std::get<0>(p.first);
  140|     28|  return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  141|     28|                            std::move(p.second));
  142|     28|}
_ZN4absl12lts_2024011618container_internal15map_slot_policyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEE9constructINS7_INS3_4pairIKS9_SD_EEEEJRKNS3_21piecewise_construct_tENS3_5tupleIJRSH_EEENSN_IJRKSD_EEEEEEvPT_PNS1_13map_slot_typeIS9_SD_EEDpOT0_:
  383|     32|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  384|     32|    emplace(slot);
  385|     32|    if (kMutableKeys::value) {
  ------------------
  |  Branch (385:9): [True: 32, Folded]
  ------------------
  386|     32|      absl::allocator_traits<Allocator>::construct(*alloc, &slot->mutable_value,
  387|     32|                                                   std::forward<Args>(args)...);
  388|     32|    } else {
  389|      0|      absl::allocator_traits<Allocator>::construct(*alloc, &slot->value,
  390|      0|                                                   std::forward<Args>(args)...);
  391|      0|    }
  392|     32|  }
_ZN4absl12lts_2024011618container_internal8PairArgsINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS3_4pairINS3_5tupleIJRKT_EEENSF_IJRKT0_EEEEERKNSE_ISG_SK_EE:
  187|     32|    const std::pair<F, S>& p) {
  188|     32|  return PairArgs(p.first, p.second);
  189|     32|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS6_12_GLOBAL__N_120SymbolByFullNameHashENS9_18SymbolByFullNameEqENSt3__19allocatorIS7_EEE12EqualElementIS7_EERS7_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISK_EEEEOSJ_OSK_:
  214|     51|DecomposeValue(F&& f, Arg&& arg) {
  215|     51|  const auto& key = arg;
  216|     51|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|     51|}
_ZN4absl12lts_2024011618container_internal23SanitizerUnpoisonObjectINS1_13map_slot_typeINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorEEEEEvPKT_:
  248|      1|inline void SanitizerUnpoisonObject(const T* object) {
  249|      1|  SanitizerUnpoisonMemoryRegion(object, sizeof(T));
  250|      1|}
_ZN4absl12lts_2024011618container_internal15map_slot_policyINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS6_15FieldDescriptorEE7emplaceEPNS1_13map_slot_typeISA_SD_EE:
  348|      1|  static void emplace(slot_type* slot) {
  349|       |    // The construction of union doesn't do anything at runtime but it allows us
  350|       |    // to access its members without violating aliasing rules.
  351|      1|    new (slot) slot_type;
  352|      1|  }
_ZN4absl12lts_2024011618container_internal13map_slot_typeINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS6_15FieldDescriptorEEC2Ev:
  329|      1|  map_slot_type() {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS6_12_GLOBAL__N_116ParentNumberHashENSB_14ParentNumberEqENSt3__19allocatorIS9_EEE19EmplaceDecomposableERKPS7_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISN_EEEEOSM_OSN_:
  214|     95|DecomposeValue(F&& f, Arg&& arg) {
  215|     95|  const auto& key = arg;
  216|     95|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|     95|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS6_12_GLOBAL__N_116ParentNumberHashENSB_14ParentNumberEqENSt3__19allocatorIS9_EEE12EqualElementIPS7_EERS9_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISN_EEEEOSM_OSN_:
  214|      7|DecomposeValue(F&& f, Arg&& arg) {
  215|      7|  const auto& key = arg;
  216|      7|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|      7|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS6_12_GLOBAL__N_116ParentNumberHashENSB_14ParentNumberEqENSt3__19allocatorIS9_EEE11HashElementERS9_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISL_EEEEOSK_OSL_:
  214|    112|DecomposeValue(F&& f, Arg&& arg) {
  215|    112|  const auto& key = arg;
  216|    112|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|    112|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS6_12_GLOBAL__N_120SymbolByFullNameHashENS9_18SymbolByFullNameEqENSt3__19allocatorIS7_EEE19EmplaceDecomposableERKS7_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISK_EEEEOSJ_OSK_:
  214|    504|DecomposeValue(F&& f, Arg&& arg) {
  215|    504|  const auto& key = arg;
  216|    504|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|    504|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS6_12_GLOBAL__N_120SymbolByFullNameHashENS9_18SymbolByFullNameEqENSt3__19allocatorIS7_EEE11HashElementERS7_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISJ_EEEEOSI_OSJ_:
  214|    882|DecomposeValue(F&& f, Arg&& arg) {
  215|    882|  const auto& key = arg;
  216|    882|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|    882|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS6_12_GLOBAL__N_118SymbolByParentHashENS9_16SymbolByParentEqENSt3__19allocatorIS7_EEE19EmplaceDecomposableERKS7_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISK_EEEEOSJ_OSK_:
  214|    688|DecomposeValue(F&& f, Arg&& arg) {
  215|    688|  const auto& key = arg;
  216|    688|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|    688|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS6_12_GLOBAL__N_118SymbolByParentHashENS9_16SymbolByParentEqENSt3__19allocatorIS7_EEE12EqualElementIS7_EERS7_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISK_EEEEOSJ_OSK_:
  214|     56|DecomposeValue(F&& f, Arg&& arg) {
  215|     56|  const auto& key = arg;
  216|     56|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|     56|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS6_12_GLOBAL__N_118SymbolByParentHashENS9_16SymbolByParentEqENSt3__19allocatorIS7_EEE11HashElementERS7_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISJ_EEEEOSI_OSJ_:
  214|    868|DecomposeValue(F&& f, Arg&& arg) {
  215|    868|  const auto& key = arg;
  216|    868|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|    868|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS6_12_GLOBAL__N_121DescriptorsByNameHashIS7_EENSB_19DescriptorsByNameEqIS7_EENSt3__19allocatorIS9_EEE19EmplaceDecomposableERKS9_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISO_EEEEOSN_OSO_:
  214|      4|DecomposeValue(F&& f, Arg&& arg) {
  215|      4|  const auto& key = arg;
  216|      4|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|      4|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS6_12_GLOBAL__N_116ParentNumberHashENSB_14ParentNumberEqENSt3__19allocatorIS9_EEE19EmplaceDecomposableERKPS7_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISN_EEEEOSM_OSN_:
  214|    108|DecomposeValue(F&& f, Arg&& arg) {
  215|    108|  const auto& key = arg;
  216|    108|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|    108|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS6_12_GLOBAL__N_116ParentNumberHashENSB_14ParentNumberEqENSt3__19allocatorIS9_EEE12EqualElementIPS7_EERS9_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISN_EEEEOSM_OSN_:
  214|      6|DecomposeValue(F&& f, Arg&& arg) {
  215|      6|  const auto& key = arg;
  216|      6|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|      6|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS6_12_GLOBAL__N_116ParentNumberHashENSB_14ParentNumberEqENSt3__19allocatorIS9_EEE11HashElementERS9_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISL_EEEEOSK_OSL_:
  214|     98|DecomposeValue(F&& f, Arg&& arg) {
  215|     98|  const auto& key = arg;
  216|     98|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|     98|}
_ZN4absl12lts_2024011618container_internal8AllocateILm8ENSt3__19allocatorINS3_4pairIKNS5_IPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorEEEEEEEPvPT0_m:
   55|      1|void* Allocate(Alloc* alloc, size_t n) {
   56|      1|  static_assert(Alignment > 0, "");
   57|      1|  assert(n && "n must be positive");
   58|      1|  using M = AlignedType<Alignment>;
   59|      1|  using A = typename absl::allocator_traits<Alloc>::template rebind_alloc<M>;
   60|      1|  using AT = typename absl::allocator_traits<Alloc>::template rebind_traits<M>;
   61|       |  // On macOS, "mem_alloc" is a #define with one argument defined in
   62|       |  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
   63|       |  // with the "foo(bar)" syntax.
   64|      1|  A my_mem_alloc(*alloc);
   65|      1|  void* p = AT::allocate(my_mem_alloc, (n + sizeof(M) - 1) / sizeof(M));
   66|       |  assert(reinterpret_cast<uintptr_t>(p) % Alignment == 0 &&
   67|      1|         "allocator does not respect alignment");
   68|      1|  return p;
   69|      1|}
_ZN4absl12lts_2024011618container_internal15map_slot_policyINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS6_15FieldDescriptorEE9constructINS3_9allocatorINS4_IKSA_SD_EEEEJSI_EEEvPT_PNS1_13map_slot_typeISA_SD_EEDpOT0_:
  383|      1|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  384|      1|    emplace(slot);
  385|      1|    if (kMutableKeys::value) {
  ------------------
  |  Branch (385:9): [True: 1, Folded]
  ------------------
  386|      1|      absl::allocator_traits<Allocator>::construct(*alloc, &slot->mutable_value,
  387|      1|                                                   std::forward<Args>(args)...);
  388|      1|    } else {
  389|      0|      absl::allocator_traits<Allocator>::construct(*alloc, &slot->value,
  390|      0|                                                   std::forward<Args>(args)...);
  391|      0|    }
  392|      1|  }
_ZN4absl12lts_2024011618container_internal15map_slot_policyINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS6_15FieldDescriptorEE7elementEPNS1_13map_slot_typeISA_SD_EE:
  359|      1|  static value_type& element(slot_type* slot) { return slot->value; }
_ZN4absl12lts_2024011618container_internal13DecomposePairINS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS5_10unique_ptrIN6google8protobuf10FeatureSetENS5_14default_deleteISF_EEEEEENS1_10StringHashENS1_8StringEqENS9_INS5_4pairIKSB_SI_EEEEE12EqualElementISB_EEJRSO_EEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSU_DpOSV_:
  206|    235|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
  207|    235|  return memory_internal::DecomposePairImpl(
  208|    235|      std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
  209|    235|}
_ZN4absl12lts_2024011618container_internal15memory_internal17DecomposePairImplINS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEENS6_10unique_ptrIN6google8protobuf10FeatureSetENS6_14default_deleteISG_EEEEEENS1_10StringHashENS1_8StringEqENSA_INS6_4pairIKSC_SJ_EEEEE12EqualElementISC_EERSO_NS6_5tupleIJRKSJ_EEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNS6_L19piecewise_constructEEclsr3stdE7declvalINSV_IJS10_EEEEEclsr3stdE7declvalIT1_EEEEOSZ_NSN_IS13_S14_EE:
  138|    235|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  139|    235|  const auto& key = std::get<0>(p.first);
  140|    235|  return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  141|    235|                            std::move(p.second));
  142|    235|}
_ZN4absl12lts_2024011618container_internal8PairArgsIKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISE_EEEEEENS3_4pairINS3_5tupleIJRKT_EEENSJ_IJRKT0_EEEEERKNSI_ISK_SO_EE:
  187|    235|    const std::pair<F, S>& p) {
  188|    235|  return PairArgs(p.first, p.second);
  189|    235|}
_ZN4absl12lts_2024011618container_internal8PairArgsIRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKNS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISF_EEEEEENS3_4pairINS3_5tupleIJOT_EEENSM_IJOT0_EEEEESO_SR_:
  181|    235|std::pair<std::tuple<F&&>, std::tuple<S&&>> PairArgs(F&& f, S&& s) {
  182|    235|  return {std::piecewise_construct, std::forward_as_tuple(std::forward<F>(f)),
  183|    235|          std::forward_as_tuple(std::forward<S>(s))};
  184|    235|}
_ZN4absl12lts_2024011618container_internal15map_slot_policyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISD_EEEEE8transferINS7_INS3_4pairIKS9_SG_EEEEEEDaPT_PNS1_13map_slot_typeIS9_SG_EESR_:
  427|      4|                       slot_type* old_slot) {
  428|      4|    auto is_relocatable =
  429|      4|        typename absl::is_trivially_relocatable<value_type>::type();
  430|       |
  431|      4|    emplace(new_slot);
  432|       |#if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606
  433|       |    if (is_relocatable) {
  434|       |      // TODO(b/247130232,b/251814870): remove casts after fixing warnings.
  435|       |      std::memcpy(static_cast<void*>(std::launder(&new_slot->value)),
  436|       |                  static_cast<const void*>(&old_slot->value),
  437|       |                  sizeof(value_type));
  438|       |      return is_relocatable;
  439|       |    }
  440|       |#endif
  441|       |
  442|      4|    if (kMutableKeys::value) {
  ------------------
  |  Branch (442:9): [True: 4, Folded]
  ------------------
  443|      4|      absl::allocator_traits<Allocator>::construct(
  444|      4|          *alloc, &new_slot->mutable_value, std::move(old_slot->mutable_value));
  445|      4|    } else {
  446|      0|      absl::allocator_traits<Allocator>::construct(*alloc, &new_slot->value,
  447|      0|                                                   std::move(old_slot->value));
  448|      0|    }
  449|      4|    destroy(alloc, old_slot);
  450|      4|    return is_relocatable;
  451|      4|  }
_ZN4absl12lts_2024011618container_internal15map_slot_policyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISD_EEEEE7emplaceEPNS1_13map_slot_typeIS9_SG_EE:
  348|      8|  static void emplace(slot_type* slot) {
  349|       |    // The construction of union doesn't do anything at runtime but it allows us
  350|       |    // to access its members without violating aliasing rules.
  351|      8|    new (slot) slot_type;
  352|      8|  }
_ZN4absl12lts_2024011618container_internal13map_slot_typeINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISD_EEEEEC2Ev:
  329|      8|  map_slot_type() {}
_ZN4absl12lts_2024011618container_internal15map_slot_policyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISD_EEEEE9constructINS7_INS3_4pairIKS9_SG_EEEEJRKNS3_21piecewise_construct_tENS3_5tupleIJOS9_EEENSQ_IJEEEEEEvPT_PNS1_13map_slot_typeIS9_SG_EEDpOT0_:
  383|      4|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  384|      4|    emplace(slot);
  385|      4|    if (kMutableKeys::value) {
  ------------------
  |  Branch (385:9): [True: 4, Folded]
  ------------------
  386|      4|      absl::allocator_traits<Allocator>::construct(*alloc, &slot->mutable_value,
  387|      4|                                                   std::forward<Args>(args)...);
  388|      4|    } else {
  389|      0|      absl::allocator_traits<Allocator>::construct(*alloc, &slot->value,
  390|      0|                                                   std::forward<Args>(args)...);
  391|      0|    }
  392|      4|  }
_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS5_EEE19EmplaceDecomposableERKNS9_12basic_stringIcNS9_11char_traitsIcEENSA_IcEEEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISM_EEEEOSL_OSM_:
  214|      3|DecomposeValue(F&& f, Arg&& arg) {
  215|      3|  const auto& key = arg;
  216|      3|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|      3|}
_ZN4absl12lts_2024011618container_internal8AllocateILm8ENSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEEEEPvPT0_m:
   55|      6|void* Allocate(Alloc* alloc, size_t n) {
   56|      6|  static_assert(Alignment > 0, "");
   57|      6|  assert(n && "n must be positive");
   58|      6|  using M = AlignedType<Alignment>;
   59|      6|  using A = typename absl::allocator_traits<Alloc>::template rebind_alloc<M>;
   60|      6|  using AT = typename absl::allocator_traits<Alloc>::template rebind_traits<M>;
   61|       |  // On macOS, "mem_alloc" is a #define with one argument defined in
   62|       |  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
   63|       |  // with the "foo(bar)" syntax.
   64|      6|  A my_mem_alloc(*alloc);
   65|      6|  void* p = AT::allocate(my_mem_alloc, (n + sizeof(M) - 1) / sizeof(M));
   66|       |  assert(reinterpret_cast<uintptr_t>(p) % Alignment == 0 &&
   67|      6|         "allocator does not respect alignment");
   68|      6|  return p;
   69|      6|}
_ZN4absl12lts_2024011618container_internal23SanitizerUnpoisonObjectIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEEvPKT_:
  248|     10|inline void SanitizerUnpoisonObject(const T* object) {
  249|     10|  SanitizerUnpoisonMemoryRegion(object, sizeof(T));
  250|     10|}
_ZN4absl12lts_2024011618container_internal21SanitizerPoisonObjectIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEEvPKT_:
  243|      8|inline void SanitizerPoisonObject(const T* object) {
  244|      8|  SanitizerPoisonMemoryRegion(object, sizeof(T));
  245|      8|}
_ZN4absl12lts_2024011618container_internal10DeallocateILm8ENSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEEEEvPT0_Pvm:
   74|      5|void Deallocate(Alloc* alloc, void* p, size_t n) {
   75|      5|  static_assert(Alignment > 0, "");
   76|      5|  assert(n && "n must be positive");
   77|      5|  using M = AlignedType<Alignment>;
   78|      5|  using A = typename absl::allocator_traits<Alloc>::template rebind_alloc<M>;
   79|      5|  using AT = typename absl::allocator_traits<Alloc>::template rebind_traits<M>;
   80|       |  // On macOS, "mem_alloc" is a #define with one argument defined in
   81|       |  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
   82|       |  // with the "foo(bar)" syntax.
   83|      5|  A my_mem_alloc(*alloc);
   84|      5|  AT::deallocate(my_mem_alloc, static_cast<M*>(p),
   85|      5|                 (n + sizeof(M) - 1) / sizeof(M));
   86|      5|}
_ZN4absl12lts_2024011618container_internal8AllocateILm8ENSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEEEEEPvPT0_m:
   55|      1|void* Allocate(Alloc* alloc, size_t n) {
   56|      1|  static_assert(Alignment > 0, "");
   57|      1|  assert(n && "n must be positive");
   58|      1|  using M = AlignedType<Alignment>;
   59|      1|  using A = typename absl::allocator_traits<Alloc>::template rebind_alloc<M>;
   60|      1|  using AT = typename absl::allocator_traits<Alloc>::template rebind_traits<M>;
   61|       |  // On macOS, "mem_alloc" is a #define with one argument defined in
   62|       |  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
   63|       |  // with the "foo(bar)" syntax.
   64|      1|  A my_mem_alloc(*alloc);
   65|      1|  void* p = AT::allocate(my_mem_alloc, (n + sizeof(M) - 1) / sizeof(M));
   66|       |  assert(reinterpret_cast<uintptr_t>(p) % Alignment == 0 &&
   67|      1|         "allocator does not respect alignment");
   68|      1|  return p;
   69|      1|}
_ZN4absl12lts_2024011618container_internal23SanitizerUnpoisonObjectIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEEEvPKT_:
  248|      1|inline void SanitizerUnpoisonObject(const T* object) {
  249|      1|  SanitizerUnpoisonMemoryRegion(object, sizeof(T));
  250|      1|}
_ZN4absl12lts_2024011618container_internal21SanitizerPoisonObjectIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEEEvPKT_:
  243|      1|inline void SanitizerPoisonObject(const T* object) {
  244|      1|  SanitizerPoisonMemoryRegion(object, sizeof(T));
  245|      1|}
_ZN4absl12lts_2024011618container_internal10DeallocateILm8ENSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEEEEEvPT0_Pvm:
   74|      1|void Deallocate(Alloc* alloc, void* p, size_t n) {
   75|      1|  static_assert(Alignment > 0, "");
   76|      1|  assert(n && "n must be positive");
   77|      1|  using M = AlignedType<Alignment>;
   78|      1|  using A = typename absl::allocator_traits<Alloc>::template rebind_alloc<M>;
   79|      1|  using AT = typename absl::allocator_traits<Alloc>::template rebind_traits<M>;
   80|       |  // On macOS, "mem_alloc" is a #define with one argument defined in
   81|       |  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
   82|       |  // with the "foo(bar)" syntax.
   83|      1|  A my_mem_alloc(*alloc);
   84|      1|  AT::deallocate(my_mem_alloc, static_cast<M*>(p),
   85|      1|                 (n + sizeof(M) - 1) / sizeof(M));
   86|      1|}
_ZN4absl12lts_2024011618container_internal8AllocateILm8ENSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEEEPvPT0_m:
   55|     20|void* Allocate(Alloc* alloc, size_t n) {
   56|     20|  static_assert(Alignment > 0, "");
   57|     20|  assert(n && "n must be positive");
   58|     20|  using M = AlignedType<Alignment>;
   59|     20|  using A = typename absl::allocator_traits<Alloc>::template rebind_alloc<M>;
   60|     20|  using AT = typename absl::allocator_traits<Alloc>::template rebind_traits<M>;
   61|       |  // On macOS, "mem_alloc" is a #define with one argument defined in
   62|       |  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
   63|       |  // with the "foo(bar)" syntax.
   64|     20|  A my_mem_alloc(*alloc);
   65|     20|  void* p = AT::allocate(my_mem_alloc, (n + sizeof(M) - 1) / sizeof(M));
   66|       |  assert(reinterpret_cast<uintptr_t>(p) % Alignment == 0 &&
   67|     20|         "allocator does not respect alignment");
   68|     20|  return p;
   69|     20|}
_ZN4absl12lts_2024011618container_internal23SanitizerUnpoisonObjectIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEvPKT_:
  248|    307|inline void SanitizerUnpoisonObject(const T* object) {
  249|    307|  SanitizerUnpoisonMemoryRegion(object, sizeof(T));
  250|    307|}
_ZN4absl12lts_2024011618container_internal21SanitizerPoisonObjectIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEvPKT_:
  243|    288|inline void SanitizerPoisonObject(const T* object) {
  244|    288|  SanitizerPoisonMemoryRegion(object, sizeof(T));
  245|    288|}
_ZN4absl12lts_2024011618container_internal10DeallocateILm8ENSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEEEvPT0_Pvm:
   74|     16|void Deallocate(Alloc* alloc, void* p, size_t n) {
   75|     16|  static_assert(Alignment > 0, "");
   76|     16|  assert(n && "n must be positive");
   77|     16|  using M = AlignedType<Alignment>;
   78|     16|  using A = typename absl::allocator_traits<Alloc>::template rebind_alloc<M>;
   79|     16|  using AT = typename absl::allocator_traits<Alloc>::template rebind_traits<M>;
   80|       |  // On macOS, "mem_alloc" is a #define with one argument defined in
   81|       |  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
   82|       |  // with the "foo(bar)" syntax.
   83|     16|  A my_mem_alloc(*alloc);
   84|     16|  AT::deallocate(my_mem_alloc, static_cast<M*>(p),
   85|     16|                 (n + sizeof(M) - 1) / sizeof(M));
   86|     16|}
_ZN4absl12lts_2024011618container_internal21SanitizerPoisonObjectIPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEEEvPKT_:
  243|      3|inline void SanitizerPoisonObject(const T* object) {
  244|      3|  SanitizerPoisonMemoryRegion(object, sizeof(T));
  245|      3|}
_ZN4absl12lts_2024011618container_internal23SanitizerUnpoisonObjectIPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEEEvPKT_:
  248|     14|inline void SanitizerUnpoisonObject(const T* object) {
  249|     14|  SanitizerUnpoisonMemoryRegion(object, sizeof(T));
  250|     14|}
message.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS6_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSD_18DescriptorByNameEqENSt3__19allocatorISA_EEE19EmplaceDecomposableERKSA_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISO_EEEEOSN_OSO_:
  214|      6|DecomposeValue(F&& f, Arg&& arg) {
  215|      6|  const auto& key = arg;
  216|      6|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|      6|}

_ZNK4absl12lts_2024011618container_internal10StringHashclENS0_11string_viewE:
   77|    781|  size_t operator()(absl::string_view v) const {
   78|    781|    return absl::Hash<absl::string_view>{}(v);
   79|    781|  }
_ZNK4absl12lts_2024011618container_internal8StringEqclENS0_11string_viewES3_:
   87|    240|  bool operator()(absl::string_view lhs, absl::string_view rhs) const {
   88|    240|    return lhs == rhs;
   89|    240|  }
_ZN4absl12lts_2024011618container_internal6HashEqIPKN6google8protobuf14FileDescriptorEvE5ToPtrES7_:
  175|    104|  static const T* ToPtr(const T* ptr) { return ptr; }
_ZNK4absl12lts_2024011618container_internal6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashclIS7_EEmRKT_:
  162|    104|    size_t operator()(const U& ptr) const {
  163|    104|      return absl::Hash<const T*>{}(HashEq::ToPtr(ptr));
  164|    104|    }

extension_set.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEEvE5applyINS1_12raw_hash_setIS8_NS6_12_GLOBAL__N_115ExtensionHasherENSC_11ExtensionEqENSt3__19allocatorIS7_EEE12EqualElementINSC_16ExtensionInfoKeyEEEJRS7_ES8_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSO_DpOSP_:
  133|      8|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|      8|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|      8|  }
extension_set.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEEvE5applyINS1_12raw_hash_setIS8_NS6_12_GLOBAL__N_115ExtensionHasherENSC_11ExtensionEqENSt3__19allocatorIS7_EEE19EmplaceDecomposableEJRKS7_ES8_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSN_DpOSO_:
  133|      1|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|      1|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|      1|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE5applyINS1_12raw_hash_setIS7_NS5_12_GLOBAL__N_120SymbolByFullNameHashENSB_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE12EqualElementINSB_13FullNameQueryEEEJRS6_ES7_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSN_DpOSO_:
  133|    106|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|    106|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|    106|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEEvE5applyINS1_12raw_hash_setIS9_NS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSD_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE12EqualElementINS0_11string_viewEEEJRS8_ES9_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSR_DpOSS_:
  133|      5|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|      5|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|      5|  }
_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEvE5applyINS1_12raw_hash_setISF_NS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE19EmplaceDecomposableEJRKNSL_ISA_SE_EEESF_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSV_DpOSW_:
  133|     32|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|     32|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|     32|  }
_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEvE5applyINS1_12raw_hash_setISF_NS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE12EqualElementISA_EEJRSN_ESF_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSU_DpOSV_:
  133|      5|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|      5|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|      5|  }
_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEvE5applyINS1_12raw_hash_setISF_NS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE11HashElementEJRSN_ESF_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOST_DpOSU_:
  133|     28|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|     28|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|     28|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE5applyINS1_12raw_hash_setIS7_NS5_12_GLOBAL__N_120SymbolByFullNameHashENSB_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE12EqualElementIS6_EEJRS6_ES7_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSM_DpOSN_:
  133|     51|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|     51|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|     51|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEEvE5applyINS1_12raw_hash_setIS9_NS5_12_GLOBAL__N_116ParentNumberHashENSD_14ParentNumberEqENSt3__19allocatorIS8_EEE19EmplaceDecomposableEJRKPS6_ES9_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSP_DpOSQ_:
  133|     95|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|     95|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|     95|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEEvE5applyINS1_12raw_hash_setIS9_NS5_12_GLOBAL__N_116ParentNumberHashENSD_14ParentNumberEqENSt3__19allocatorIS8_EEE12EqualElementIPS6_EEJRS8_ES9_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSP_DpOSQ_:
  133|      7|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|      7|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|      7|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEEvE5applyINS1_12raw_hash_setIS9_NS5_12_GLOBAL__N_116ParentNumberHashENSD_14ParentNumberEqENSt3__19allocatorIS8_EEE11HashElementEJRS8_ES9_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSN_DpOSO_:
  133|    112|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|    112|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|    112|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE5applyINS1_12raw_hash_setIS7_NS5_12_GLOBAL__N_120SymbolByFullNameHashENSB_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE19EmplaceDecomposableEJRKS6_ES7_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSM_DpOSN_:
  133|    504|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|    504|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|    504|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE5applyINS1_12raw_hash_setIS7_NS5_12_GLOBAL__N_120SymbolByFullNameHashENSB_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE11HashElementEJRS6_ES7_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSL_DpOSM_:
  133|    882|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|    882|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|    882|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE5applyINS1_12raw_hash_setIS7_NS5_12_GLOBAL__N_118SymbolByParentHashENSB_16SymbolByParentEqENSt3__19allocatorIS6_EEE19EmplaceDecomposableEJRKS6_ES7_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSM_DpOSN_:
  133|    688|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|    688|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|    688|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE5applyINS1_12raw_hash_setIS7_NS5_12_GLOBAL__N_118SymbolByParentHashENSB_16SymbolByParentEqENSt3__19allocatorIS6_EEE12EqualElementIS6_EEJRS6_ES7_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSM_DpOSN_:
  133|     56|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|     56|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|     56|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE5applyINS1_12raw_hash_setIS7_NS5_12_GLOBAL__N_118SymbolByParentHashENSB_16SymbolByParentEqENSt3__19allocatorIS6_EEE11HashElementEJRS6_ES7_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSL_DpOSM_:
  133|    868|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|    868|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|    868|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEEvE5applyINS1_12raw_hash_setIS9_NS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSD_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE19EmplaceDecomposableEJRKS8_ES9_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSQ_DpOSR_:
  133|      4|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|      4|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|      4|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEEvE5applyINS1_12raw_hash_setIS9_NS5_12_GLOBAL__N_116ParentNumberHashENSD_14ParentNumberEqENSt3__19allocatorIS8_EEE19EmplaceDecomposableEJRKPS6_ES9_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSP_DpOSQ_:
  133|    108|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|    108|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|    108|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEEvE5applyINS1_12raw_hash_setIS9_NS5_12_GLOBAL__N_116ParentNumberHashENSD_14ParentNumberEqENSt3__19allocatorIS8_EEE12EqualElementIPS6_EEJRS8_ES9_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSP_DpOSQ_:
  133|      6|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|      6|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|      6|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEEvE5applyINS1_12raw_hash_setIS9_NS5_12_GLOBAL__N_116ParentNumberHashENSD_14ParentNumberEqENSt3__19allocatorIS8_EEE11HashElementEJRS8_ES9_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSN_DpOSO_:
  133|     98|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|     98|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|     98|  }
_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEEvE5applyINS1_12raw_hash_setISI_NS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE12EqualElementISA_EEJRSQ_ESI_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSX_DpOSY_:
  133|    235|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|    235|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|    235|  }
_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyINS0_11string_viewEEEvE5applyINS1_12raw_hash_setIS5_NS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE19EmplaceDecomposableEJRKNSB_12basic_stringIcNSB_11char_traitsIcEENSC_IcEEEEES5_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSO_DpOSP_:
  133|      3|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|      3|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|      3|  }
message.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEEvE5applyINS1_12raw_hash_setISA_NS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSF_18DescriptorByNameEqENSt3__19allocatorIS9_EEE19EmplaceDecomposableEJRKS9_ESA_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSQ_DpOSR_:
  133|      6|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|      6|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|      6|  }

_ZN4absl12lts_2024011618container_internal20HashtablezInfoHandleC2EDn:
  187|     20|  explicit HashtablezInfoHandle(std::nullptr_t) {}
_ZN4absl12lts_2024011618container_internal20HashtablezInfoHandle10UnregisterEv:
  189|      3|  inline void Unregister() {}
_ZNK4absl12lts_2024011618container_internal20HashtablezInfoHandle9IsSampledEv:
  190|     83|  inline bool IsSampled() const { return false; }
_ZN4absl12lts_2024011618container_internal20HashtablezInfoHandle12RecordRehashEm:
  192|     25|  inline void RecordRehash(size_t /*total_probe_length*/) {}
_ZN4absl12lts_2024011618container_internal20HashtablezInfoHandle12RecordInsertEmm:
  195|  1.44k|  inline void RecordInsert(size_t /*hash*/, size_t /*distance_from_desired*/) {}
_ZN4absl12lts_2024011618container_internal6SampleEm:
  210|     20|    size_t inline_element_size ABSL_ATTRIBUTE_UNUSED) {
  211|       |#if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
  212|       |  if (ABSL_PREDICT_TRUE(--global_next_sample.next_sample > 0)) {
  213|       |    return HashtablezInfoHandle(nullptr);
  214|       |  }
  215|       |  return HashtablezInfoHandle(
  216|       |      SampleSlow(global_next_sample, inline_element_size));
  217|       |#else
  218|     20|  return HashtablezInfoHandle(nullptr);
  219|     20|#endif  // !ABSL_PER_THREAD_TLS
  220|     20|}

_ZN4absl12lts_2024011618container_internal15internal_layout11adl_barrier5AlignEmm:
  276|  8.70k|constexpr size_t Align(size_t n, size_t m) { return (n + m - 1) & ~(m - 1); }
_ZN4absl12lts_2024011618container_internal6LayoutIJN6google8protobuf8internal22SerialArenaChunkHeaderENSt3__16atomicIPvEENS8_IPNS5_11SerialArenaEEEEE7PartialIJEEENS1_15internal_layout10LayoutImplINS7_5tupleIJS6_SA_SD_EEE18__make_integer_seqINS7_16integer_sequenceEmXsZT_EESK_ISL_mXclL_ZNSG_11adl_barrier3MinEmmEsZT0_plsZT_Li1EEEEEEDpOT_:
  707|      8|  static constexpr PartialType<sizeof...(Sizes)> Partial(Sizes&&... sizes) {
  708|      8|    static_assert(sizeof...(Sizes) <= sizeof...(Ts), "");
  709|      8|    return PartialType<sizeof...(Sizes)>(absl::forward<Sizes>(sizes)...);
  710|      8|  }
_ZN4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJN6google8protobuf8internal22SerialArenaChunkHeaderENS4_6atomicIPvEENSA_IPNS8_11SerialArenaEEEEEENS4_16integer_sequenceImJEEENSH_ImJLm0EEEEEC2Ev:
  367|      8|      : size_{sizes...} {}
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJN6google8protobuf8internal22SerialArenaChunkHeaderENS4_6atomicIPvEENSA_IPNS8_11SerialArenaEEEEEENS4_16integer_sequenceImJEEENSH_ImJLm0EEEEE6OffsetILm0ETnNS4_9enable_ifIXeqT_Li0EEiE4typeELi0EEEmv:
  384|      8|  constexpr size_t Offset() const {
  385|      8|    return 0;
  386|      8|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJN6google8protobuf8internal22SerialArenaChunkHeaderENS4_6atomicIPvEENSA_IPNS8_11SerialArenaEEEEEENS4_16integer_sequenceImJEEENSH_ImJLm0EEEEE7PointerILm0EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESG_E4typeESR_E4typeEPSO_:
  460|      8|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|      8|    using C = typename std::remove_const<Char>::type;
  462|      8|    static_assert(
  463|      8|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|      8|            std::is_same<C, signed char>(),
  465|      8|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|      8|    constexpr size_t alignment = Alignment();
  467|      8|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|      8|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|      8|  }
_ZN4absl12lts_2024011618container_internal6LayoutIJPNS1_10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorENS5_4lessISC_EENS5_9allocatorINS6_IKSC_SF_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISC_SF_EESO_EEC2Emmmmm:
  721|     24|      : internal_layout::LayoutType<sizeof...(Ts), Ts...>(sizes...) {}
_ZN4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_EC2Emmmmm:
  367|     24|      : size_{sizes...} {}
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_E7PointerILm2EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_EST_E4typeES13_E4typeEPS10_:
  460|     12|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|     12|    using C = typename std::remove_const<Char>::type;
  462|     12|    static_assert(
  463|     12|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|     12|            std::is_same<C, signed char>(),
  465|     12|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|     12|    constexpr size_t alignment = Alignment();
  467|     12|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|     12|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|     12|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_E6OffsetILm2ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|     22|  constexpr size_t Offset() const {
  390|     22|    static_assert(N < NumOffsets, "Index out of bounds");
  391|     22|    return adl_barrier::Align(
  392|     22|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|     22|        ElementAlignment<N>::value);
  394|     22|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_E6OffsetILm1ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|     22|  constexpr size_t Offset() const {
  390|     22|    static_assert(N < NumOffsets, "Index out of bounds");
  391|     22|    return adl_barrier::Align(
  392|     22|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|     22|        ElementAlignment<N>::value);
  394|     22|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_E6OffsetILm0ETnNS4_9enable_ifIXeqT_Li0EEiE4typeELi0EEEmv:
  384|     24|  constexpr size_t Offset() const {
  385|     24|    return 0;
  386|     24|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_E7PointerILm3EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_EST_E4typeES12_E4typeEPSZ_:
  460|      4|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|      4|    using C = typename std::remove_const<Char>::type;
  462|      4|    static_assert(
  463|      4|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|      4|            std::is_same<C, signed char>(),
  465|      4|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|      4|    constexpr size_t alignment = Alignment();
  467|      4|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|      4|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|      4|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_E6OffsetILm3ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|      5|  constexpr size_t Offset() const {
  390|      5|    static_assert(N < NumOffsets, "Index out of bounds");
  391|      5|    return adl_barrier::Align(
  392|      5|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|      5|        ElementAlignment<N>::value);
  394|      5|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_E9AllocSizeEv:
  582|      1|  constexpr size_t AllocSize() const {
  583|      1|    static_assert(NumTypes == NumSizes, "You must specify sizes of all fields");
  584|      1|    return Offset<NumTypes - 1>() +
  585|      1|        SizeOf<ElementType<NumTypes - 1>>::value * size_[NumTypes - 1];
  586|      1|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_E6OffsetILm4ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|      1|  constexpr size_t Offset() const {
  390|      1|    static_assert(N < NumOffsets, "Index out of bounds");
  391|      1|    return adl_barrier::Align(
  392|      1|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|      1|        ElementAlignment<N>::value);
  394|      1|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_E7PointerILm0EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_EST_E4typeES13_E4typeEPS10_:
  460|      1|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|      1|    using C = typename std::remove_const<Char>::type;
  462|      1|    static_assert(
  463|      1|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|      1|            std::is_same<C, signed char>(),
  465|      1|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|      1|    constexpr size_t alignment = Alignment();
  467|      1|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|      1|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|      1|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_E7PointerILm2EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_EST_E4typeES12_E4typeEPSZ_:
  460|      5|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|      5|    using C = typename std::remove_const<Char>::type;
  462|      5|    static_assert(
  463|      5|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|      5|            std::is_same<C, signed char>(),
  465|      5|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|      5|    constexpr size_t alignment = Alignment();
  467|      5|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|      5|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|      5|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_E7PointerILm0EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_EST_E4typeES12_E4typeEPSZ_:
  460|      1|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|      1|    using C = typename std::remove_const<Char>::type;
  462|      1|    static_assert(
  463|      1|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|      1|            std::is_same<C, signed char>(),
  465|      1|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|      1|    constexpr size_t alignment = Alignment();
  467|      1|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|      1|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|      1|  }
_ZN4absl12lts_2024011618container_internal6LayoutIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEjhS9_SG_EEC2Emmmmm:
  721|    219|      : internal_layout::LayoutType<sizeof...(Ts), Ts...>(sizes...) {}
_ZN4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_EC2Emmmmm:
  367|    219|      : size_{sizes...} {}
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E9AllocSizeEv:
  582|     11|  constexpr size_t AllocSize() const {
  583|     11|    static_assert(NumTypes == NumSizes, "You must specify sizes of all fields");
  584|     11|    return Offset<NumTypes - 1>() +
  585|     11|        SizeOf<ElementType<NumTypes - 1>>::value * size_[NumTypes - 1];
  586|     11|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm4ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|     11|  constexpr size_t Offset() const {
  390|     11|    static_assert(N < NumOffsets, "Index out of bounds");
  391|     11|    return adl_barrier::Align(
  392|     11|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|     11|        ElementAlignment<N>::value);
  394|     11|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm3ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|     55|  constexpr size_t Offset() const {
  390|     55|    static_assert(N < NumOffsets, "Index out of bounds");
  391|     55|    return adl_barrier::Align(
  392|     55|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|     55|        ElementAlignment<N>::value);
  394|     55|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm2ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|    203|  constexpr size_t Offset() const {
  390|    203|    static_assert(N < NumOffsets, "Index out of bounds");
  391|    203|    return adl_barrier::Align(
  392|    203|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|    203|        ElementAlignment<N>::value);
  394|    203|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm1ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|    203|  constexpr size_t Offset() const {
  390|    203|    static_assert(N < NumOffsets, "Index out of bounds");
  391|    203|    return adl_barrier::Align(
  392|    203|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|    203|        ElementAlignment<N>::value);
  394|    203|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm0ETnNS4_9enable_ifIXeqT_Li0EEiE4typeELi0EEEmv:
  384|    219|  constexpr size_t Offset() const {
  385|    219|    return 0;
  386|    219|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm0EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeESS_E4typeEPSP_:
  460|      6|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|      6|    using C = typename std::remove_const<Char>::type;
  462|      6|    static_assert(
  463|      6|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|      6|            std::is_same<C, signed char>(),
  465|      6|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|      6|    constexpr size_t alignment = Alignment();
  467|      6|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|      6|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|      6|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm2EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeESS_E4typeEPSP_:
  460|     36|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|     36|    using C = typename std::remove_const<Char>::type;
  462|     36|    static_assert(
  463|     36|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|     36|            std::is_same<C, signed char>(),
  465|     36|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|     36|    constexpr size_t alignment = Alignment();
  467|     36|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|     36|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|     36|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm3EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeESS_E4typeEPSP_:
  460|     41|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|     41|    using C = typename std::remove_const<Char>::type;
  462|     41|    static_assert(
  463|     41|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|     41|            std::is_same<C, signed char>(),
  465|     41|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|     41|    constexpr size_t alignment = Alignment();
  467|     41|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|     41|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|     41|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm3EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeEST_E4typeEPSQ_:
  460|      3|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|      3|    using C = typename std::remove_const<Char>::type;
  462|      3|    static_assert(
  463|      3|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|      3|            std::is_same<C, signed char>(),
  465|      3|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|      3|    constexpr size_t alignment = Alignment();
  467|      3|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|      3|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|      3|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm2EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeEST_E4typeEPSQ_:
  460|    112|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|    112|    using C = typename std::remove_const<Char>::type;
  462|    112|    static_assert(
  463|    112|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|    112|            std::is_same<C, signed char>(),
  465|    112|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|    112|    constexpr size_t alignment = Alignment();
  467|    112|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|    112|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|    112|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm0EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeEST_E4typeEPSQ_:
  460|     10|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|     10|    using C = typename std::remove_const<Char>::type;
  462|     10|    static_assert(
  463|     10|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|     10|            std::is_same<C, signed char>(),
  465|     10|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|     10|    constexpr size_t alignment = Alignment();
  467|     10|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|     10|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|     10|  }
_ZN4absl12lts_2024011618container_internal6LayoutIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEjhS9_SG_EEC2Emmmmm:
  721|     39|      : internal_layout::LayoutType<sizeof...(Ts), Ts...>(sizes...) {}
_ZN4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_EC2Emmmmm:
  367|     39|      : size_{sizes...} {}
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E9AllocSizeEv:
  582|      2|  constexpr size_t AllocSize() const {
  583|      2|    static_assert(NumTypes == NumSizes, "You must specify sizes of all fields");
  584|      2|    return Offset<NumTypes - 1>() +
  585|      2|        SizeOf<ElementType<NumTypes - 1>>::value * size_[NumTypes - 1];
  586|      2|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm4ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|      2|  constexpr size_t Offset() const {
  390|      2|    static_assert(N < NumOffsets, "Index out of bounds");
  391|      2|    return adl_barrier::Align(
  392|      2|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|      2|        ElementAlignment<N>::value);
  394|      2|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm3ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|      8|  constexpr size_t Offset() const {
  390|      8|    static_assert(N < NumOffsets, "Index out of bounds");
  391|      8|    return adl_barrier::Align(
  392|      8|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|      8|        ElementAlignment<N>::value);
  394|      8|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm2ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|     35|  constexpr size_t Offset() const {
  390|     35|    static_assert(N < NumOffsets, "Index out of bounds");
  391|     35|    return adl_barrier::Align(
  392|     35|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|     35|        ElementAlignment<N>::value);
  394|     35|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm1ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|     35|  constexpr size_t Offset() const {
  390|     35|    static_assert(N < NumOffsets, "Index out of bounds");
  391|     35|    return adl_barrier::Align(
  392|     35|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|     35|        ElementAlignment<N>::value);
  394|     35|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm0ETnNS4_9enable_ifIXeqT_Li0EEiE4typeELi0EEEmv:
  384|     39|  constexpr size_t Offset() const {
  385|     39|    return 0;
  386|     39|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm0EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeESS_E4typeEPSP_:
  460|      1|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|      1|    using C = typename std::remove_const<Char>::type;
  462|      1|    static_assert(
  463|      1|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|      1|            std::is_same<C, signed char>(),
  465|      1|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|      1|    constexpr size_t alignment = Alignment();
  467|      1|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|      1|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|      1|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm2EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeESS_E4typeEPSP_:
  460|      5|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|      5|    using C = typename std::remove_const<Char>::type;
  462|      5|    static_assert(
  463|      5|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|      5|            std::is_same<C, signed char>(),
  465|      5|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|      5|    constexpr size_t alignment = Alignment();
  467|      5|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|      5|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|      5|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm3EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeESS_E4typeEPSP_:
  460|      6|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|      6|    using C = typename std::remove_const<Char>::type;
  462|      6|    static_assert(
  463|      6|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|      6|            std::is_same<C, signed char>(),
  465|      6|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|      6|    constexpr size_t alignment = Alignment();
  467|      6|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|      6|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|      6|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm2EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeEST_E4typeEPSQ_:
  460|     22|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|     22|    using C = typename std::remove_const<Char>::type;
  462|     22|    static_assert(
  463|     22|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|     22|            std::is_same<C, signed char>(),
  465|     22|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|     22|    constexpr size_t alignment = Alignment();
  467|     22|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|     22|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|     22|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm0EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeEST_E4typeEPSQ_:
  460|      3|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|      3|    using C = typename std::remove_const<Char>::type;
  462|      3|    static_assert(
  463|      3|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|      3|            std::is_same<C, signed char>(),
  465|      3|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|      3|    constexpr size_t alignment = Alignment();
  467|      3|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|      3|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|      3|  }
_ZN4absl12lts_2024011618container_internal6LayoutIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEjhS9_SG_EEC2Emmmmm:
  721|  3.70k|      : internal_layout::LayoutType<sizeof...(Ts), Ts...>(sizes...) {}
_ZN4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_EC2Emmmmm:
  367|  3.70k|      : size_{sizes...} {}
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm2EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeEST_E4typeEPSQ_:
  460|  2.05k|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|  2.05k|    using C = typename std::remove_const<Char>::type;
  462|  2.05k|    static_assert(
  463|  2.05k|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|  2.05k|            std::is_same<C, signed char>(),
  465|  2.05k|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|  2.05k|    constexpr size_t alignment = Alignment();
  467|  2.05k|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|  2.05k|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|  2.05k|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm2ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|  3.40k|  constexpr size_t Offset() const {
  390|  3.40k|    static_assert(N < NumOffsets, "Index out of bounds");
  391|  3.40k|    return adl_barrier::Align(
  392|  3.40k|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|  3.40k|        ElementAlignment<N>::value);
  394|  3.40k|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm1ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|  3.40k|  constexpr size_t Offset() const {
  390|  3.40k|    static_assert(N < NumOffsets, "Index out of bounds");
  391|  3.40k|    return adl_barrier::Align(
  392|  3.40k|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|  3.40k|        ElementAlignment<N>::value);
  394|  3.40k|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm0ETnNS4_9enable_ifIXeqT_Li0EEiE4typeELi0EEEmv:
  384|  3.70k|  constexpr size_t Offset() const {
  385|  3.70k|    return 0;
  386|  3.70k|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm3EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeEST_E4typeEPSQ_:
  460|    459|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|    459|    using C = typename std::remove_const<Char>::type;
  462|    459|    static_assert(
  463|    459|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|    459|            std::is_same<C, signed char>(),
  465|    459|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|    459|    constexpr size_t alignment = Alignment();
  467|    459|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|    459|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|    459|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm3ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|  1.13k|  constexpr size_t Offset() const {
  390|  1.13k|    static_assert(N < NumOffsets, "Index out of bounds");
  391|  1.13k|    return adl_barrier::Align(
  392|  1.13k|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|  1.13k|        ElementAlignment<N>::value);
  394|  1.13k|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm4EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeEST_E4typeEPSQ_:
  460|     94|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|     94|    using C = typename std::remove_const<Char>::type;
  462|     94|    static_assert(
  463|     94|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|     94|            std::is_same<C, signed char>(),
  465|     94|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|     94|    constexpr size_t alignment = Alignment();
  467|     94|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|     94|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|     94|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm4ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|    163|  constexpr size_t Offset() const {
  390|    163|    static_assert(N < NumOffsets, "Index out of bounds");
  391|    163|    return adl_barrier::Align(
  392|    163|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|    163|        ElementAlignment<N>::value);
  394|    163|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm0EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeEST_E4typeEPSQ_:
  460|    282|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|    282|    using C = typename std::remove_const<Char>::type;
  462|    282|    static_assert(
  463|    282|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|    282|            std::is_same<C, signed char>(),
  465|    282|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|    282|    constexpr size_t alignment = Alignment();
  467|    282|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|    282|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|    282|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E9AllocSizeEv:
  582|     36|  constexpr size_t AllocSize() const {
  583|     36|    static_assert(NumTypes == NumSizes, "You must specify sizes of all fields");
  584|     36|    return Offset<NumTypes - 1>() +
  585|     36|        SizeOf<ElementType<NumTypes - 1>>::value * size_[NumTypes - 1];
  586|     36|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm0EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeESS_E4typeEPSP_:
  460|     22|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|     22|    using C = typename std::remove_const<Char>::type;
  462|     22|    static_assert(
  463|     22|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|     22|            std::is_same<C, signed char>(),
  465|     22|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|     22|    constexpr size_t alignment = Alignment();
  467|     22|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|     22|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|     22|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm2EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeESS_E4typeEPSP_:
  460|    216|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|    216|    using C = typename std::remove_const<Char>::type;
  462|    216|    static_assert(
  463|    216|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|    216|            std::is_same<C, signed char>(),
  465|    216|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|    216|    constexpr size_t alignment = Alignment();
  467|    216|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|    216|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|    216|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm3EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeESS_E4typeEPSP_:
  460|    510|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|    510|    using C = typename std::remove_const<Char>::type;
  462|    510|    static_assert(
  463|    510|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|    510|            std::is_same<C, signed char>(),
  465|    510|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|    510|    constexpr size_t alignment = Alignment();
  467|    510|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|    510|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|    510|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm4EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeESS_E4typeEPSP_:
  460|     33|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|     33|    using C = typename std::remove_const<Char>::type;
  462|     33|    static_assert(
  463|     33|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|     33|            std::is_same<C, signed char>(),
  465|     33|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|     33|    constexpr size_t alignment = Alignment();
  467|     33|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|     33|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|     33|  }

_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyIPKN6google8protobuf14FileDescriptorENSt3__16vectorINS5_14DescriptorPool18DeferredValidation13LifetimesInfoENS9_9allocatorISD_EEEEEENS1_6HashEqIS8_vE4HashENSJ_2EqENSE_INS9_4pairIKS8_SG_EEEEEC2Ev:
   64|      4|  raw_hash_map() {}
_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEEC2Ev:
   64|      2|  raw_hash_map() {}
_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEEC2Ev:
   64|      2|  raw_hash_map() {}
_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEPKN6google8protobuf23SourceCodeInfo_LocationEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SF_EEEEEC2Ev:
   64|      4|  raw_hash_map() {}
_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEEixISA_SI_TnPT_LPSA_0EEEDTclsrT0_5valueclL_ZNS4_9addressofB8nn220000ISN_EESS_RSR_EclL_ZNS4_7declvalB8nn220000IRSN_EEDTclsr3stdE9__declvalISR_ELi0EEEvEEEEEOSR_:
  179|    239|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  180|       |    // It is safe to use unchecked_deref here because try_emplace
  181|       |    // will always return an iterator pointing to a valid item in the table,
  182|       |    // since it inserts if nothing is found for the given key.
  183|    239|    return Policy::value(
  184|    239|        &this->unchecked_deref(try_emplace(std::forward<K>(key)).first));
  185|    239|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE11try_emplaceISA_JETnNS4_9enable_ifIXntsr3std14is_convertibleIT_NS1_12raw_hash_setISI_SJ_SK_SO_E14const_iteratorEEE5valueEiE4typeELi0ETnPSS_LPSA_0EEENSL_INSU_8iteratorEbEEOSS_DpOT0_:
  132|    239|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  133|    239|    return try_emplace_impl(std::forward<K>(k), std::forward<Args>(args)...);
  134|    239|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE16try_emplace_implISA_JEEENSL_INS1_12raw_hash_setISI_SJ_SK_SO_E8iteratorEbEEOT_DpOT0_:
  210|    239|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  211|    239|    auto res = this->find_or_prepare_insert(k);
  212|    239|    if (res.second)
  ------------------
  |  Branch (212:9): [True: 4, False: 235]
  ------------------
  213|      4|      this->emplace_at(res.first, std::piecewise_construct,
  214|      4|                       std::forward_as_tuple(std::forward<K>(k)),
  215|      4|                       std::forward_as_tuple(std::forward<Args>(args)...));
  216|    239|    return {this->iterator_at(res.first), res.second};
  217|    239|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEbEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_bEEEEEC2Ev:
   64|      2|  raw_hash_map() {}
_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_17DescriptorBuilder12MessageHintsEEENS1_6HashEqIS8_vE4HashENSD_2EqENSt3__19allocatorINSG_4pairIKS8_SA_EEEEEC2Ev:
   64|      4|  raw_hash_map() {}
_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEES8_EENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_S8_EEEEEC2Ev:
   64|      4|  raw_hash_map() {}
_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEEiEENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_iEEEEEC2Ev:
   64|      4|  raw_hash_map() {}
_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEEC2Ev:
   64|      6|  raw_hash_map() {}
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEEC2Ev:
   64|      2|  raw_hash_map() {}

_ZNK4absl12lts_2024011618container_internal19HashSetResizeHelper38GrowIntoSingleGroupShuffleControlBytesEPNS1_6ctrl_tEm:
  276|     38|    ctrl_t* new_ctrl, size_t new_capacity) const {
  277|     38|  assert(is_single_group(new_capacity));
  278|     38|  constexpr size_t kHalfWidth = Group::kWidth / 2;
  279|     38|  assert(old_capacity_ < kHalfWidth);
  280|       |
  281|     38|  const size_t half_old_capacity = old_capacity_ / 2;
  282|       |
  283|       |  // NOTE: operations are done with compile time known size = kHalfWidth.
  284|       |  // Compiler optimizes that into single ASM operation.
  285|       |
  286|       |  // Copy second half of bytes to the beginning.
  287|       |  // We potentially copy more bytes in order to have compile time known size.
  288|       |  // Mirrored bytes from the old_ctrl_ will also be copied.
  289|       |  // In case of old_capacity_ == 3, we will copy 1st element twice.
  290|       |  // Examples:
  291|       |  // old_ctrl = 0S0EEEEEEE...
  292|       |  // new_ctrl = S0EEEEEEEE...
  293|       |  //
  294|       |  // old_ctrl = 01S01EEEEE...
  295|       |  // new_ctrl = 1S01EEEEEE...
  296|       |  //
  297|       |  // old_ctrl = 0123456S0123456EE...
  298|       |  // new_ctrl = 456S0123?????????...
  299|     38|  std::memcpy(new_ctrl, old_ctrl_ + half_old_capacity + 1, kHalfWidth);
  300|       |  // Clean up copied kSentinel from old_ctrl.
  301|     38|  new_ctrl[half_old_capacity] = ctrl_t::kEmpty;
  302|       |
  303|       |  // Clean up damaged or uninitialized bytes.
  304|       |
  305|       |  // Clean bytes after the intended size of the copy.
  306|       |  // Example:
  307|       |  // new_ctrl = 1E01EEEEEEE????
  308|       |  // *new_ctrl= 1E0EEEEEEEE????
  309|       |  // position      /
  310|     38|  std::memset(new_ctrl + old_capacity_ + 1, static_cast<int8_t>(ctrl_t::kEmpty),
  311|     38|              kHalfWidth);
  312|       |  // Clean non-mirrored bytes that are not initialized.
  313|       |  // For small old_capacity that may be inside of mirrored bytes zone.
  314|       |  // Examples:
  315|       |  // new_ctrl = 1E0EEEEEEEE??????????....
  316|       |  // *new_ctrl= 1E0EEEEEEEEEEEEE?????....
  317|       |  // position           /
  318|       |  //
  319|       |  // new_ctrl = 456E0123???????????...
  320|       |  // *new_ctrl= 456E0123EEEEEEEE???...
  321|       |  // position           /
  322|     38|  std::memset(new_ctrl + kHalfWidth, static_cast<int8_t>(ctrl_t::kEmpty),
  323|     38|              kHalfWidth);
  324|       |  // Clean last mirrored bytes that are not initialized
  325|       |  // and will not be overwritten by mirroring.
  326|       |  // Examples:
  327|       |  // new_ctrl = 1E0EEEEEEEEEEEEE????????
  328|       |  // *new_ctrl= 1E0EEEEEEEEEEEEEEEEEEEEE
  329|       |  // position           S       /
  330|       |  //
  331|       |  // new_ctrl = 456E0123EEEEEEEE???????????????
  332|       |  // *new_ctrl= 456E0123EEEEEEEE???????EEEEEEEE
  333|       |  // position                  S       /
  334|     38|  std::memset(new_ctrl + new_capacity + kHalfWidth,
  335|     38|              static_cast<int8_t>(ctrl_t::kEmpty), kHalfWidth);
  336|       |
  337|       |  // Create mirrored bytes. old_capacity_ < kHalfWidth
  338|       |  // Example:
  339|       |  // new_ctrl = 456E0123EEEEEEEE???????EEEEEEEE
  340|       |  // *new_ctrl= 456E0123EEEEEEEE456E0123EEEEEEE
  341|       |  // position                  S/
  342|     38|  ctrl_t g[kHalfWidth];
  343|     38|  std::memcpy(g, new_ctrl, kHalfWidth);
  344|     38|  std::memcpy(new_ctrl + new_capacity + 1, g, kHalfWidth);
  345|       |
  346|       |  // Finally set sentinel to its place.
  347|     38|  new_ctrl[new_capacity] = ctrl_t::kSentinel;
  348|     38|}

_ZN4absl12lts_2024011618container_internal13GroupSse2ImplC2EPKNS1_6ctrl_tE:
  615|  6.02k|  explicit GroupSse2Impl(const ctrl_t* pos) {
  616|  6.02k|    ctrl = _mm_loadu_si128(reinterpret_cast<const __m128i*>(pos));
  617|  6.02k|  }
_ZNK4absl12lts_2024011618container_internal13GroupSse2Impl5MatchEh:
  620|  2.48k|  BitMask<uint16_t, kWidth> Match(h2_t hash) const {
  621|  2.48k|    auto match = _mm_set1_epi8(static_cast<char>(hash));
  622|  2.48k|    BitMask<uint16_t, kWidth> result = BitMask<uint16_t, kWidth>(0);
  623|  2.48k|    result = BitMask<uint16_t, kWidth>(
  624|  2.48k|        static_cast<uint16_t>(_mm_movemask_epi8(_mm_cmpeq_epi8(match, ctrl))));
  625|  2.48k|    return result;
  626|  2.48k|  }
_ZNK4absl12lts_2024011618container_internal13GroupSse2Impl9MaskEmptyEv:
  629|  2.12k|  NonIterableBitMask<uint16_t, kWidth> MaskEmpty() const {
  630|       |#ifdef ABSL_INTERNAL_HAVE_SSSE3
  631|       |    // This only works because ctrl_t::kEmpty is -128.
  632|       |    return NonIterableBitMask<uint16_t, kWidth>(
  633|       |        static_cast<uint16_t>(_mm_movemask_epi8(_mm_sign_epi8(ctrl, ctrl))));
  634|       |#else
  635|  2.12k|    auto match = _mm_set1_epi8(static_cast<char>(ctrl_t::kEmpty));
  636|  2.12k|    return NonIterableBitMask<uint16_t, kWidth>(
  637|  2.12k|        static_cast<uint16_t>(_mm_movemask_epi8(_mm_cmpeq_epi8(match, ctrl))));
  638|  2.12k|#endif
  639|  2.12k|  }
_ZNK4absl12lts_2024011618container_internal13GroupSse2Impl18MaskEmptyOrDeletedEv:
  650|  3.54k|  NonIterableBitMask<uint16_t, kWidth> MaskEmptyOrDeleted() const {
  651|  3.54k|    auto special = _mm_set1_epi8(static_cast<char>(ctrl_t::kSentinel));
  652|  3.54k|    return NonIterableBitMask<uint16_t, kWidth>(static_cast<uint16_t>(
  653|  3.54k|        _mm_movemask_epi8(_mm_cmpgt_epi8_fixed(special, ctrl))));
  654|  3.54k|  }
_ZNK4absl12lts_2024011618container_internal34CommonFieldsGenerationInfoDisabled41should_rehash_for_bug_detection_on_insertEPKNS1_6ctrl_tEm:
  926|  1.44k|  bool should_rehash_for_bug_detection_on_insert(const ctrl_t*, size_t) const {
  927|  1.44k|    return false;
  928|  1.44k|  }
_ZN4absl12lts_2024011618container_internal34CommonFieldsGenerationInfoDisabled36maybe_increment_generation_on_insertEv:
  932|  1.44k|  void maybe_increment_generation_on_insert() {}
_ZN4absl12lts_2024011618container_internal34CommonFieldsGenerationInfoDisabled19set_reserved_growthEm:
  936|     16|  void set_reserved_growth(size_t) {}
_ZN4absl12lts_2024011618container_internal34CommonFieldsGenerationInfoDisabled20set_reservation_sizeEm:
  938|     16|  void set_reservation_size(size_t) {}
_ZNK4absl12lts_2024011618container_internal34CommonFieldsGenerationInfoDisabled10generationEv:
  939|     83|  GenerationType generation() const { return 0; }
_ZN4absl12lts_2024011618container_internal34CommonFieldsGenerationInfoDisabled14set_generationEh:
  940|     83|  void set_generation(GenerationType) {}
_ZNK4absl12lts_2024011618container_internal34CommonFieldsGenerationInfoDisabled14generation_ptrEv:
  941|  3.11k|  GenerationType* generation_ptr() const { return nullptr; }
_ZN4absl12lts_2024011618container_internal34CommonFieldsGenerationInfoDisabled18set_generation_ptrEPh:
  942|     83|  void set_generation_ptr(GenerationType*) {}
_ZN4absl12lts_2024011618container_internal37HashSetIteratorGenerationInfoDisabledC2EPKh:
  965|  3.11k|  explicit HashSetIteratorGenerationInfoDisabled(const GenerationType*) {}
_ZNK4absl12lts_2024011618container_internal37HashSetIteratorGenerationInfoDisabled10generationEv:
  967|    692|  GenerationType generation() const { return 0; }
_ZNK4absl12lts_2024011618container_internal37HashSetIteratorGenerationInfoDisabled14generation_ptrEv:
  969|  1.26k|  const GenerationType* generation_ptr() const { return nullptr; }
_ZNK4absl12lts_2024011618container_internal12CommonFields7controlEv:
 1038|  27.2k|  ctrl_t* control() const { return control_; }
_ZN4absl12lts_2024011618container_internal12CommonFields11set_controlEPNS1_6ctrl_tE:
 1039|     83|  void set_control(ctrl_t* c) { control_ = c; }
_ZNK4absl12lts_2024011618container_internal12CommonFields19backing_array_startEv:
 1040|      3|  void* backing_array_start() const {
 1041|       |    // growth_left (and maybe infoz) is stored before control bytes.
 1042|       |    assert(reinterpret_cast<uintptr_t>(control()) % alignof(size_t) == 0);
 1043|      3|    return control() - ControlOffset(has_infoz());
 1044|      3|  }
_ZNK4absl12lts_2024011618container_internal12CommonFields10slot_arrayEv:
 1047|  8.19k|  void* slot_array() const { return slots_; }
_ZN4absl12lts_2024011618container_internal12CommonFields9set_slotsEPv:
 1048|     83|  void set_slots(void* s) { slots_ = s; }
_ZNK4absl12lts_2024011618container_internal12CommonFields4sizeEv:
 1051|    199|  size_t size() const { return size_ >> HasInfozShift(); }
_ZN4absl12lts_2024011618container_internal12CommonFields14increment_sizeEv:
 1055|  1.44k|  void increment_size() {
 1056|       |    assert(size() < capacity());
 1057|  1.44k|    size_ += size_t{1} << HasInfozShift();
 1058|  1.44k|  }
_ZNK4absl12lts_2024011618container_internal12CommonFields8capacityEv:
 1065|  11.9k|  size_t capacity() const { return capacity_; }
_ZN4absl12lts_2024011618container_internal12CommonFields12set_capacityEm:
 1066|     83|  void set_capacity(size_t c) {
 1067|       |    assert(c == 0 || IsValidCapacity(c));
 1068|     83|    capacity_ = c;
 1069|     83|  }
_ZNK4absl12lts_2024011618container_internal12CommonFields11growth_leftEv:
 1073|  2.89k|  size_t growth_left() const {
 1074|  2.89k|    const size_t* gl_ptr = reinterpret_cast<size_t*>(control()) - 1;
 1075|       |    assert(reinterpret_cast<uintptr_t>(gl_ptr) % alignof(size_t) == 0);
 1076|  2.89k|    return *gl_ptr;
 1077|  2.89k|  }
_ZN4absl12lts_2024011618container_internal12CommonFields15set_growth_leftEm:
 1078|  1.52k|  void set_growth_left(size_t gl) {
 1079|  1.52k|    size_t* gl_ptr = reinterpret_cast<size_t*>(control()) - 1;
 1080|       |    assert(reinterpret_cast<uintptr_t>(gl_ptr) % alignof(size_t) == 0);
 1081|  1.52k|    *gl_ptr = gl;
 1082|  1.52k|  }
_ZNK4absl12lts_2024011618container_internal12CommonFields9has_infozEv:
 1084|  1.62k|  bool has_infoz() const {
 1085|  1.62k|    return ABSL_PREDICT_FALSE((size_ & HasInfozMask()) != 0);
  ------------------
  |  |  178|  1.62k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:49): [Folded, False: 1.62k]
  |  |  |  Branch (178:58): [True: 0, False: 1.62k]
  |  |  ------------------
  ------------------
 1086|  1.62k|  }
_ZN4absl12lts_2024011618container_internal12CommonFields13set_has_infozEb:
 1087|     83|  void set_has_infoz(bool has_infoz) {
 1088|     83|    size_ = (size() << HasInfozShift()) | static_cast<size_t>(has_infoz);
 1089|     83|  }
_ZN4absl12lts_2024011618container_internal12CommonFields5infozEv:
 1091|  1.53k|  HashtablezInfoHandle infoz() {
 1092|  1.53k|    return has_infoz()
  ------------------
  |  Branch (1092:12): [True: 0, False: 1.53k]
  ------------------
 1093|  1.53k|               ? *reinterpret_cast<HashtablezInfoHandle*>(backing_array_start())
 1094|  1.53k|               : HashtablezInfoHandle();
 1095|  1.53k|  }
_ZNK4absl12lts_2024011618container_internal12CommonFields41should_rehash_for_bug_detection_on_insertEv:
 1101|  1.44k|  bool should_rehash_for_bug_detection_on_insert() const {
 1102|  1.44k|    return CommonFieldsGenerationInfo::
 1103|  1.44k|        should_rehash_for_bug_detection_on_insert(control(), capacity());
 1104|  1.44k|  }
_ZNK4absl12lts_2024011618container_internal12CommonFields10alloc_sizeEmm:
 1118|      3|  size_t alloc_size(size_t slot_size, size_t slot_align) const {
 1119|      3|    return AllocSize(capacity(), slot_size, slot_align, has_infoz());
 1120|      3|  }
_ZN4absl12lts_2024011618container_internal12CommonFields13HasInfozShiftEv:
 1130|  3.35k|  static constexpr size_t HasInfozShift() { return 1; }
_ZN4absl12lts_2024011618container_internal12CommonFields12HasInfozMaskEv:
 1131|  1.62k|  static constexpr size_t HasInfozMask() {
 1132|  1.62k|    return (size_t{1} << HasInfozShift()) - 1;
 1133|  1.62k|  }
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelperC2ERNS1_12CommonFieldsE:
 1525|     83|      : old_ctrl_(c.control()),
 1526|     83|        old_capacity_(c.capacity()),
 1527|     83|        had_infoz_(c.has_infoz()) {}
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper27FindFirstNonFullAfterResizeERKNS1_12CommonFieldsEmm:
 1537|     83|                                              size_t hash) {
 1538|     83|    if (!IsGrowingIntoSingleGroupApplicable(old_capacity, c.capacity())) {
  ------------------
  |  Branch (1538:9): [True: 25, False: 58]
  ------------------
 1539|     25|      return find_first_non_full(c, hash);
 1540|     25|    }
 1541|       |    // Find a location for the new element non-deterministically.
 1542|       |    // Note that any position is correct.
 1543|       |    // It will located at `half_old_capacity` or one of the other
 1544|       |    // empty slots with approximately 50% probability each.
 1545|     58|    size_t offset = probe(c, hash).offset();
 1546|       |
 1547|       |    // Note that we intentionally use unsigned int underflow.
 1548|     58|    if (offset - (old_capacity + 1) >= old_capacity) {
  ------------------
  |  Branch (1548:9): [True: 49, False: 9]
  ------------------
 1549|       |      // Offset fall on kSentinel or into the mostly occupied first half.
 1550|     49|      offset = old_capacity / 2;
 1551|     49|    }
 1552|       |    assert(IsEmpty(c.control()[offset]));
 1553|     58|    return FindInfo{offset, 0};
 1554|     83|  }
_ZNK4absl12lts_2024011618container_internal19HashSetResizeHelper8old_ctrlEv:
 1556|  2.24k|  ctrl_t* old_ctrl() const { return old_ctrl_; }
_ZNK4absl12lts_2024011618container_internal19HashSetResizeHelper12old_capacityEv:
 1557|  2.35k|  size_t old_capacity() const { return old_capacity_; }
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper34IsGrowingIntoSingleGroupApplicableEmm:
 1686|    166|                                                 size_t new_capacity) {
 1687|       |    // NOTE that `old_capacity < new_capacity` in order to have
 1688|       |    // `old_capacity < Group::kWidth / 2` to make faster copies of 8 bytes.
 1689|    166|    return is_single_group(new_capacity) && old_capacity < new_capacity;
  ------------------
  |  Branch (1689:12): [True: 116, False: 50]
  |  Branch (1689:45): [True: 116, False: 0]
  ------------------
 1690|    166|  }
_ZNK4absl12lts_2024011618container_internal19HashSetResizeHelper27PoisonSingleGroupEmptySlotsERNS1_12CommonFieldsEm:
 1753|     38|  void PoisonSingleGroupEmptySlots(CommonFields& c, size_t slot_size) const {
 1754|       |    // poison non full items
 1755|    324|    for (size_t i = 0; i < c.capacity(); ++i) {
  ------------------
  |  Branch (1755:24): [True: 286, False: 38]
  ------------------
 1756|    286|      if (!IsFull(c.control()[i])) {
  ------------------
  |  Branch (1756:11): [True: 162, False: 124]
  ------------------
 1757|    162|        SanitizerPoisonMemoryRegion(SlotAddress(c.slot_array(), i, slot_size),
 1758|    162|                                    slot_size);
 1759|    162|      }
 1760|    286|    }
 1761|     38|  }
_ZN4absl12lts_2024011618container_internal23SentinelEmptyGenerationEv:
  252|     83|constexpr GenerationType SentinelEmptyGeneration() { return 0; }
_ZN4absl12lts_2024011618container_internal14NextGenerationEh:
  254|     83|constexpr GenerationType NextGeneration(GenerationType generation) {
  255|     83|  return ++generation == SentinelEmptyGeneration() ? ++generation : generation;
  ------------------
  |  Branch (255:10): [True: 0, False: 83]
  ------------------
  256|     83|}
_ZN4absl12lts_2024011618container_internal18NumGenerationBytesEv:
  263|    232|constexpr size_t NumGenerationBytes() { return 0; }
_ZN4absl12lts_2024011618container_internal10EmptyGroupEv:
  521|    150|inline ctrl_t* EmptyGroup() {
  522|       |  // Const must be cast away here; no uses of this function will actually write
  523|       |  // to it, because it is only used for empty tables.
  524|    150|  return const_cast<ctrl_t*>(kEmptyGroup + 16);
  525|    150|}
_ZN4absl12lts_2024011618container_internal12PerTableSaltEPKNS1_6ctrl_tE:
  545|  5.91k|inline size_t PerTableSalt(const ctrl_t* ctrl) {
  546|       |  // The low bits of the pointer have little or no entropy because of
  547|       |  // alignment. We shift the pointer to try to use higher entropy bits. A
  548|       |  // good number seems to be 12 bits, because that aligns with page size.
  549|  5.91k|  return reinterpret_cast<uintptr_t>(ctrl) >> 12;
  550|  5.91k|}
_ZN4absl12lts_2024011618container_internal2H1EmPKNS1_6ctrl_tE:
  552|  5.91k|inline size_t H1(size_t hash, const ctrl_t* ctrl) {
  553|  5.91k|  return (hash >> 7) ^ PerTableSalt(ctrl);
  554|  5.91k|}
_ZN4absl12lts_2024011618container_internal2H2Em:
  559|  5.91k|inline h2_t H2(size_t hash) { return hash & 0x7F; }
_ZN4absl12lts_2024011618container_internal7IsEmptyENS1_6ctrl_tE:
  562|  1.44k|inline bool IsEmpty(ctrl_t c) { return c == ctrl_t::kEmpty; }
_ZN4absl12lts_2024011618container_internal6IsFullENS1_6ctrl_tE:
  563|  6.09k|inline bool IsFull(ctrl_t c) { return c >= static_cast<ctrl_t>(0); }
_ZN4absl12lts_2024011618container_internal9IsDeletedENS1_6ctrl_tE:
  564|     83|inline bool IsDeleted(ctrl_t c) { return c == ctrl_t::kDeleted; }
_ZN4absl12lts_2024011618container_internal16IsEmptyOrDeletedENS1_6ctrl_tE:
  565|      4|inline bool IsEmptyOrDeleted(ctrl_t c) { return c < ctrl_t::kSentinel; }
_ZN4absl12lts_2024011618container_internal20_mm_cmpgt_epi8_fixedEDv2_xS2_:
  601|  3.54k|inline __m128i _mm_cmpgt_epi8_fixed(__m128i a, __m128i b) {
  602|       |#if defined(__GNUC__) && !defined(__clang__)
  603|       |  if (std::is_unsigned<char>::value) {
  604|       |    const __m128i mask = _mm_set1_epi8(0x80);
  605|       |    const __m128i diff = _mm_subs_epi8(b, a);
  606|       |    return _mm_cmpeq_epi8(_mm_and_si128(diff, mask), mask);
  607|       |  }
  608|       |#endif
  609|  3.54k|  return _mm_cmpgt_epi8(a, b);
  610|  3.54k|}
_ZN4absl12lts_2024011618container_internal13ControlOffsetEb:
  988|    464|inline size_t ControlOffset(bool has_infoz) {
  989|    464|  return (has_infoz ? sizeof(HashtablezInfoHandle) : 0) + sizeof(size_t);
  ------------------
  |  Branch (989:11): [True: 0, False: 464]
  ------------------
  990|    464|}
_ZN4absl12lts_2024011618container_internal14NumClonedBytesEv:
  997|  7.22k|constexpr size_t NumClonedBytes() { return Group::kWidth - 1; }
_ZN4absl12lts_2024011618container_internal16GenerationOffsetEmb:
 1001|    315|inline size_t GenerationOffset(size_t capacity, bool has_infoz) {
 1002|       |  assert(IsValidCapacity(capacity));
 1003|    315|  const size_t num_control_bytes = capacity + 1 + NumClonedBytes();
 1004|    315|  return ControlOffset(has_infoz) + num_control_bytes;
 1005|    315|}
_ZN4absl12lts_2024011618container_internal10SlotOffsetEmmb:
 1009|    232|inline size_t SlotOffset(size_t capacity, size_t slot_align, bool has_infoz) {
 1010|       |  assert(IsValidCapacity(capacity));
 1011|    232|  return (GenerationOffset(capacity, has_infoz) + NumGenerationBytes() +
 1012|    232|          slot_align - 1) &
 1013|    232|         (~slot_align + 1);
 1014|    232|}
_ZN4absl12lts_2024011618container_internal9AllocSizeEmmmb:
 1019|    149|                        bool has_infoz) {
 1020|    149|  return SlotOffset(capacity, slot_align, has_infoz) + capacity * slot_size;
 1021|    149|}
_ZN4absl12lts_2024011618container_internal12NextCapacityEm:
 1167|     83|inline size_t NextCapacity(size_t n) {
 1168|       |  assert(IsValidCapacity(n) || n == 0);
 1169|     83|  return n * 2 + 1;
 1170|     83|}
_ZN4absl12lts_2024011618container_internal16CapacityToGrowthEm:
 1197|     83|inline size_t CapacityToGrowth(size_t capacity) {
 1198|     83|  assert(IsValidCapacity(capacity));
 1199|       |  // `capacity*7/8`
 1200|     83|  if (Group::kWidth == 8 && capacity == 7) {
  ------------------
  |  Branch (1200:7): [Folded, False: 83]
  |  Branch (1200:29): [True: 0, False: 0]
  ------------------
 1201|       |    // x-x/8 does not work when x==7.
 1202|      0|    return 6;
 1203|      0|  }
 1204|     83|  return capacity - capacity / 8;
 1205|     83|}
_ZN4absl12lts_2024011618container_internal12AssertIsFullEPKNS1_6ctrl_tEhPKhPKc:
 1248|    120|                         const char* operation) {
 1249|    120|  if (!SwisstableDebugEnabled()) return;
  ------------------
  |  Branch (1249:7): [True: 120, Folded]
  ------------------
 1250|       |  // `SwisstableDebugEnabled()` is also true for release builds with hardening
 1251|       |  // enabled. To minimize their impact in those builds:
 1252|       |  // - use `ABSL_PREDICT_FALSE()` to provide a compiler hint for code layout
 1253|       |  // - use `ABSL_RAW_LOG()` with a format string to reduce code size and improve
 1254|       |  //   the chances that the hot paths will be inlined.
 1255|      0|  if (ABSL_PREDICT_FALSE(ctrl == nullptr)) {
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1256|      0|    ABSL_RAW_LOG(FATAL, "%s called on end() iterator.", operation);
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1257|      0|  }
 1258|      0|  if (ABSL_PREDICT_FALSE(ctrl == EmptyGroup())) {
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1259|      0|    ABSL_RAW_LOG(FATAL, "%s called on default-constructed iterator.",
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1260|      0|                 operation);
 1261|      0|  }
 1262|      0|  if (SwisstableGenerationsEnabled()) {
  ------------------
  |  Branch (1262:7): [Folded, False: 0]
  ------------------
 1263|      0|    if (ABSL_PREDICT_FALSE(generation != *generation_ptr)) {
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1264|      0|      ABSL_RAW_LOG(FATAL,
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1265|      0|                   "%s called on invalid iterator. The table could have "
 1266|      0|                   "rehashed or moved since this iterator was initialized.",
 1267|      0|                   operation);
 1268|      0|    }
 1269|      0|    if (ABSL_PREDICT_FALSE(!IsFull(*ctrl))) {
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1270|      0|      ABSL_RAW_LOG(
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1271|      0|          FATAL,
 1272|      0|          "%s called on invalid iterator. The element was likely erased.",
 1273|      0|          operation);
 1274|      0|    }
 1275|      0|  } else {
 1276|      0|    if (ABSL_PREDICT_FALSE(!IsFull(*ctrl))) {
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1277|       |      ABSL_RAW_LOG(
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1278|      0|          FATAL,
 1279|      0|          "%s called on invalid iterator. The element might have been erased "
 1280|      0|          "or the table might have rehashed. Consider running with "
 1281|      0|          "--config=asan to diagnose rehashing issues.",
 1282|      0|          operation);
 1283|      0|    }
 1284|      0|  }
 1285|      0|}
_ZN4absl12lts_2024011618container_internal26AssertIsValidForComparisonEPKNS1_6ctrl_tEhPKh:
 1290|    572|                                       const GenerationType* generation_ptr) {
 1291|    572|  if (!SwisstableDebugEnabled()) return;
  ------------------
  |  Branch (1291:7): [True: 572, Folded]
  ------------------
 1292|      0|  const bool ctrl_is_valid_for_comparison =
 1293|      0|      ctrl == nullptr || ctrl == EmptyGroup() || IsFull(*ctrl);
  ------------------
  |  Branch (1293:7): [True: 0, False: 0]
  |  Branch (1293:26): [True: 0, False: 0]
  |  Branch (1293:50): [True: 0, False: 0]
  ------------------
 1294|      0|  if (SwisstableGenerationsEnabled()) {
  ------------------
  |  Branch (1294:7): [Folded, False: 0]
  ------------------
 1295|      0|    if (ABSL_PREDICT_FALSE(generation != *generation_ptr)) {
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1296|      0|      ABSL_RAW_LOG(FATAL,
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1297|      0|                   "Invalid iterator comparison. The table could have rehashed "
 1298|      0|                   "or moved since this iterator was initialized.");
 1299|      0|    }
 1300|      0|    if (ABSL_PREDICT_FALSE(!ctrl_is_valid_for_comparison)) {
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1301|      0|      ABSL_RAW_LOG(
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1302|      0|          FATAL, "Invalid iterator comparison. The element was likely erased.");
 1303|      0|    }
 1304|      0|  } else {
 1305|      0|    ABSL_HARDENING_ASSERT(
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1306|      0|        ctrl_is_valid_for_comparison &&
 1307|      0|        "Invalid iterator comparison. The element might have been erased or "
 1308|      0|        "the table might have rehashed. Consider running with --config=asan to "
 1309|      0|        "diagnose rehashing issues.");
 1310|      0|  }
 1311|      0|}
_ZN4absl12lts_2024011618container_internal19AssertSameContainerEPKNS1_6ctrl_tES4_RKPKvS8_PKhSA_:
 1339|    286|                                const GenerationType* generation_ptr_b) {
 1340|    286|  if (!SwisstableDebugEnabled()) return;
  ------------------
  |  Branch (1340:7): [True: 286, Folded]
  ------------------
 1341|       |  // `SwisstableDebugEnabled()` is also true for release builds with hardening
 1342|       |  // enabled. To minimize their impact in those builds:
 1343|       |  // - use `ABSL_PREDICT_FALSE()` to provide a compiler hint for code layout
 1344|       |  // - use `ABSL_RAW_LOG()` with a format string to reduce code size and improve
 1345|       |  //   the chances that the hot paths will be inlined.
 1346|      0|  const bool a_is_default = ctrl_a == EmptyGroup();
 1347|      0|  const bool b_is_default = ctrl_b == EmptyGroup();
 1348|      0|  if (ABSL_PREDICT_FALSE(a_is_default != b_is_default)) {
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1349|      0|    ABSL_RAW_LOG(
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1350|      0|        FATAL,
 1351|      0|        "Invalid iterator comparison. Comparing default-constructed iterator "
 1352|      0|        "with non-default-constructed iterator.");
 1353|      0|  }
 1354|      0|  if (a_is_default && b_is_default) return;
  ------------------
  |  Branch (1354:7): [True: 0, False: 0]
  |  Branch (1354:23): [True: 0, False: 0]
  ------------------
 1355|       |
 1356|      0|  if (SwisstableGenerationsEnabled()) {
  ------------------
  |  Branch (1356:7): [Folded, False: 0]
  ------------------
 1357|      0|    if (ABSL_PREDICT_TRUE(generation_ptr_a == generation_ptr_b)) return;
  ------------------
  |  |  179|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 0]
  |  |  |  Branch (179:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1358|      0|    const bool a_is_empty = IsEmptyGeneration(generation_ptr_a);
 1359|      0|    const bool b_is_empty = IsEmptyGeneration(generation_ptr_b);
 1360|      0|    if (a_is_empty != b_is_empty) {
  ------------------
  |  Branch (1360:9): [True: 0, False: 0]
  ------------------
 1361|      0|      ABSL_RAW_LOG(FATAL,
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1362|      0|                   "Invalid iterator comparison. Comparing iterator from a "
 1363|      0|                   "non-empty hashtable with an iterator from an empty "
 1364|      0|                   "hashtable.");
 1365|      0|    }
 1366|      0|    if (a_is_empty && b_is_empty) {
  ------------------
  |  Branch (1366:9): [True: 0, False: 0]
  |  Branch (1366:23): [True: 0, False: 0]
  ------------------
 1367|      0|      ABSL_RAW_LOG(FATAL,
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1368|      0|                   "Invalid iterator comparison. Comparing iterators from "
 1369|      0|                   "different empty hashtables.");
 1370|      0|    }
 1371|      0|    const bool a_is_end = ctrl_a == nullptr;
 1372|      0|    const bool b_is_end = ctrl_b == nullptr;
 1373|      0|    if (a_is_end || b_is_end) {
  ------------------
  |  Branch (1373:9): [True: 0, False: 0]
  |  Branch (1373:21): [True: 0, False: 0]
  ------------------
 1374|      0|      ABSL_RAW_LOG(FATAL,
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1375|      0|                   "Invalid iterator comparison. Comparing iterator with an "
 1376|      0|                   "end() iterator from a different hashtable.");
 1377|      0|    }
 1378|      0|    ABSL_RAW_LOG(FATAL,
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1379|      0|                 "Invalid iterator comparison. Comparing non-end() iterators "
 1380|      0|                 "from different hashtables.");
 1381|      0|  } else {
 1382|      0|    ABSL_HARDENING_ASSERT(
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1383|      0|        AreItersFromSameContainer(ctrl_a, ctrl_b, slot_a, slot_b) &&
 1384|      0|        "Invalid iterator comparison. The iterators may be from different "
 1385|      0|        "containers or the container might have rehashed or moved. Consider "
 1386|      0|        "running with --config=asan to diagnose issues.");
 1387|      0|  }
 1388|      0|}
_ZN4absl12lts_2024011618container_internal15is_single_groupEm:
 1411|    166|inline bool is_single_group(size_t capacity) {
 1412|    166|  return capacity <= Group::kWidth;
 1413|    166|}
_ZN4absl12lts_2024011618container_internal5probeEPKNS1_6ctrl_tEmm:
 1417|  5.91k|                                      size_t hash) {
 1418|  5.91k|  return probe_seq<Group::kWidth>(H1(hash, ctrl), capacity);
 1419|  5.91k|}
_ZN4absl12lts_2024011618container_internal5probeERKNS1_12CommonFieldsEm:
 1420|  5.91k|inline probe_seq<Group::kWidth> probe(const CommonFields& common, size_t hash) {
 1421|  5.91k|  return probe(common.control(), common.capacity(), hash);
 1422|  5.91k|}
_ZN4absl12lts_2024011618container_internal15ResetGrowthLeftERNS1_12CommonFieldsE:
 1464|     83|inline void ResetGrowthLeft(CommonFields& common) {
 1465|     83|  common.set_growth_left(CapacityToGrowth(common.capacity()) - common.size());
 1466|     83|}
_ZN4absl12lts_2024011618container_internal9ResetCtrlERNS1_12CommonFieldsEm:
 1470|     45|inline void ResetCtrl(CommonFields& common, size_t slot_size) {
 1471|     45|  const size_t capacity = common.capacity();
 1472|     45|  ctrl_t* ctrl = common.control();
 1473|     45|  std::memset(ctrl, static_cast<int8_t>(ctrl_t::kEmpty),
 1474|     45|              capacity + 1 + NumClonedBytes());
 1475|     45|  ctrl[capacity] = ctrl_t::kSentinel;
 1476|     45|  SanitizerPoisonMemoryRegion(common.slot_array(), slot_size * capacity);
 1477|     45|}
_ZN4absl12lts_2024011618container_internal7SetCtrlERKNS1_12CommonFieldsEmNS1_6ctrl_tEm:
 1484|  3.43k|                    size_t slot_size) {
 1485|  3.43k|  const size_t capacity = common.capacity();
 1486|  3.43k|  assert(i < capacity);
 1487|       |
 1488|  3.43k|  auto* slot_i = static_cast<const char*>(common.slot_array()) + i * slot_size;
 1489|  3.43k|  if (IsFull(h)) {
  ------------------
  |  Branch (1489:7): [True: 3.43k, False: 0]
  ------------------
 1490|  3.43k|    SanitizerUnpoisonMemoryRegion(slot_i, slot_size);
 1491|  3.43k|  } else {
 1492|      0|    SanitizerPoisonMemoryRegion(slot_i, slot_size);
 1493|      0|  }
 1494|       |
 1495|  3.43k|  ctrl_t* ctrl = common.control();
 1496|  3.43k|  ctrl[i] = h;
 1497|  3.43k|  ctrl[((i - NumClonedBytes()) & capacity) + (NumClonedBytes() & capacity)] = h;
 1498|  3.43k|}
_ZN4absl12lts_2024011618container_internal7SetCtrlERKNS1_12CommonFieldsEmhm:
 1502|  3.43k|                    size_t slot_size) {
 1503|  3.43k|  SetCtrl(common, i, static_cast<ctrl_t>(h), slot_size);
 1504|  3.43k|}
_ZN4absl12lts_2024011618container_internal11SlotAddressEPvmm:
 1513|    162|inline void* SlotAddress(void* slot_array, size_t slot, size_t slot_size) {
 1514|    162|  return reinterpret_cast<void*>(reinterpret_cast<char*>(slot_array) +
 1515|    162|                                 (slot * slot_size));
 1516|    162|}
_ZN4absl12lts_2024011618container_internal19find_first_non_fullIvEENS1_8FindInfoERKNS1_12CommonFieldsEm:
 1432|  3.45k|inline FindInfo find_first_non_full(const CommonFields& common, size_t hash) {
 1433|  3.45k|  auto seq = probe(common, hash);
 1434|  3.45k|  const ctrl_t* ctrl = common.control();
 1435|  3.54k|  while (true) {
  ------------------
  |  Branch (1435:10): [True: 3.54k, Folded]
  ------------------
 1436|  3.54k|    GroupEmptyOrDeleted g{ctrl + seq.offset()};
 1437|  3.54k|    auto mask = g.MaskEmptyOrDeleted();
 1438|  3.54k|    if (mask) {
  ------------------
  |  Branch (1438:9): [True: 3.45k, False: 86]
  ------------------
 1439|       |#if !defined(NDEBUG)
 1440|       |      // We want to add entropy even when ASLR is not enabled.
 1441|       |      // In debug build we will randomly insert in either the front or back of
 1442|       |      // the group.
 1443|       |      // TODO(kfm,sbenza): revisit after we do unconditional mixing
 1444|       |      if (!is_small(common.capacity()) && ShouldInsertBackwards(hash, ctrl)) {
 1445|       |        return {seq.offset(mask.HighestBitSet()), seq.index()};
 1446|       |      }
 1447|       |#endif
 1448|  3.45k|      return {seq.offset(mask.LowestBitSet()), seq.index()};
 1449|  3.45k|    }
 1450|     86|    seq.next();
 1451|       |    assert(seq.index() <= common.capacity() && "full table!");
 1452|     86|  }
 1453|  3.45k|}
_ZNK4absl12lts_2024011618container_internal18NonIterableBitMaskItLi16ELi0EEcvbEv:
  391|  5.67k|  explicit operator bool() const { return this->mask_ != 0; }
_ZNK4absl12lts_2024011618container_internal9probe_seqILm16EE6offsetEm:
  324|  4.29k|  size_t offset(size_t i) const { return (offset_ + i) & mask_; }
_ZNK4absl12lts_2024011618container_internal9probe_seqILm16EE5indexEv:
  332|  3.45k|  size_t index() const { return index_; }
_ZNK4absl12lts_2024011618container_internal18NonIterableBitMaskItLi16ELi0EE12LowestBitSetEv:
  394|  3.93k|  uint32_t LowestBitSet() const {
  395|  3.93k|    return container_internal::TrailingZeros(mask_) >> Shift;
  396|  3.93k|  }
_ZN4absl12lts_2024011618container_internal13TrailingZerosItEEjT_:
  372|  3.93k|uint32_t TrailingZeros(T x) {
  373|  3.93k|  ABSL_ASSUME(x != 0);
  ------------------
  |  |  259|  3.93k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
  374|  3.93k|  return static_cast<uint32_t>(countr_zero(x));
  375|  3.93k|}
_ZN4absl12lts_2024011618container_internal9probe_seqILm16EE4nextEv:
  326|    172|  void next() {
  327|    172|    index_ += Width;
  328|    172|    offset_ += index_;
  329|    172|    offset_ &= mask_;
  330|    172|  }
_ZNK4absl12lts_2024011618container_internal9probe_seqILm16EE6offsetEv:
  323|  6.08k|  size_t offset() const { return offset_; }
_ZNK4absl12lts_2024011618container_internal7BitMaskItLi16ELi0EE5beginEv:
  454|  2.48k|  BitMask begin() const { return *this; }
_ZNK4absl12lts_2024011618container_internal7BitMaskItLi16ELi0EE3endEv:
  455|  2.48k|  BitMask end() const { return BitMask(0); }
_ZN4absl12lts_2024011618container_internalneERKNS1_7BitMaskItLi16ELi0EEES5_:
  461|  2.60k|  friend bool operator!=(const BitMask& a, const BitMask& b) {
  462|  2.60k|    return a.mask_ != b.mask_;
  463|  2.60k|  }
_ZN4absl12lts_2024011618container_internal7BitMaskItLi16ELi0EEppEv:
  443|    125|  BitMask& operator++() {
  444|    125|    if (Shift == 3) {
  ------------------
  |  Branch (444:9): [Folded, False: 125]
  ------------------
  445|      0|      constexpr uint64_t msbs = 0x8080808080808080ULL;
  446|      0|      this->mask_ &= msbs;
  447|      0|    }
  448|    125|    this->mask_ &= (this->mask_ - 1);
  449|    125|    return *this;
  450|    125|  }
_ZNK4absl12lts_2024011618container_internal7BitMaskItLi16ELi0EEdeEv:
  452|    479|  uint32_t operator*() const { return Base::LowestBitSet(); }
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper13DeallocateOldILm8ENSt3__19allocatorIcEEEEvT0_mPv:
 1676|     63|  void DeallocateOld(CharAlloc alloc_ref, size_t slot_size, void* old_slots) {
 1677|     63|    SanitizerUnpoisonMemoryRegion(old_slots, slot_size * old_capacity_);
 1678|     63|    Deallocate<BackingArrayAlignment(AlignOfSlot)>(
 1679|     63|        &alloc_ref, old_ctrl_ - ControlOffset(had_infoz_),
 1680|     63|        AllocSize(old_capacity_, slot_size, AlignOfSlot, had_infoz_));
 1681|     63|  }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE4findINS9_16ExtensionInfoKeyEEENSF_14const_iteratorERKT_:
 2718|      8|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2719|      8|    prefetch_heap_block();
 2720|      8|    return find(key, hash_ref()(key));
 2721|      8|  }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE19prefetch_heap_blockEv:
 3187|      9|  void prefetch_heap_block() const {
 3188|      9|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|      9|    __builtin_prefetch(control(), 0, 1);
 3190|      9|#endif
 3191|      9|  }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE7controlEv:
 3196|     29|  ctrl_t* control() const { return common().control(); }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE6commonEv:
 3194|     60|  const CommonFields& common() const { return settings_.template get<0>(); }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE4findINS9_16ExtensionInfoKeyEEENSF_14const_iteratorERKT_m:
 2713|      8|                      size_t hash) const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2714|      8|    return const_cast<raw_hash_set*>(this)->find(key, hash);
 2715|      8|  }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE4findINS9_16ExtensionInfoKeyEEENSF_8iteratorERKT_m:
 2688|      8|                size_t hash) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2689|      8|    auto seq = probe(common(), hash);
 2690|      8|    slot_type* slot_ptr = slot_array();
 2691|      8|    const ctrl_t* ctrl = control();
 2692|      8|    while (true) {
  ------------------
  |  Branch (2692:12): [True: 8, Folded]
  ------------------
 2693|      8|      Group g{ctrl + seq.offset()};
 2694|      8|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (2694:23): [True: 8, False: 0]
  ------------------
 2695|      8|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      8|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 8, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 8]
  |  |  |  Branch (179:57): [True: 8, False: 0]
  |  |  ------------------
  ------------------
 2696|      8|                EqualElement<K>{key, eq_ref()},
 2697|      8|                PolicyTraits::element(slot_ptr + seq.offset(i)))))
 2698|      8|          return iterator_at(seq.offset(i));
 2699|      8|      }
 2700|      0|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
  ------------------
  |  |  179|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 0]
  |  |  |  Branch (179:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2701|      0|      seq.next();
 2702|       |      assert(seq.index() <= capacity() && "full table!");
 2703|      0|    }
 2704|      8|  }
_ZN4absl12lts_2024011618container_internal9probe_seqILm16EEC2Emm:
  316|  5.91k|  probe_seq(size_t hash, size_t mask) {
  317|       |    assert(((mask + 1) & mask) == 0 && "not a mask");
  318|  5.91k|    mask_ = mask;
  319|  5.91k|    offset_ = hash & mask_;
  320|  5.91k|  }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE6commonEv:
 3193|     29|  CommonFields& common() { return settings_.template get<0>(); }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE10slot_arrayEv:
 3197|     19|  slot_type* slot_array() const {
 3198|     19|    return static_cast<slot_type*>(common().slot_array());
 3199|     19|  }
_ZN4absl12lts_2024011618container_internal7BitMaskItLi16ELi0EEC2Et:
  437|  7.44k|  explicit BitMask(T mask) : Base(mask) {}
_ZN4absl12lts_2024011618container_internal18NonIterableBitMaskItLi16ELi0EEC2Et:
  389|  13.1k|  explicit NonIterableBitMask(T mask) : mask_(mask) {}
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE12EqualElementINS9_16ExtensionInfoKeyEEclIS7_JRS7_EEEbRKT_DpOT0_:
 2813|      8|    bool operator()(const K2& lhs, Args&&...) const {
 2814|      8|      return eq(lhs, rhs);
 2815|      8|    }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE6eq_refEv:
 3204|      8|  key_equal& eq_ref() { return settings_.template get<2>(); }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE11iterator_atEm:
 3159|      9|  iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3160|      9|    return {control() + i, slot_array() + i, common().generation_ptr()};
 3161|      9|  }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE8iteratorC2EPNS1_6ctrl_tEPS7_PKh:
 1984|      9|        : HashSetIteratorGenerationInfo(generation_ptr),
 1985|      9|          ctrl_(ctrl),
 1986|      9|          slot_(slot) {
 1987|       |      // This assumption helps the compiler know that any non-end iterator is
 1988|       |      // not equal to any end iterator.
 1989|      9|      ABSL_ASSUME(ctrl != nullptr);
  ------------------
  |  |  259|      9|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1990|      9|    }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE8iteratorC2EPKh:
 1993|      8|        : HashSetIteratorGenerationInfo(generation_ptr), ctrl_(nullptr) {}
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE14const_iteratorC2ENSF_8iteratorE:
 2047|     16|    const_iterator(iterator i) : inner_(std::move(i)) {}  // NOLINT
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE8hash_refEv:
 3203|      8|  const hasher& hash_ref() const { return settings_.template get<1>(); }
extension_set.cc:_ZN4absl12lts_2024011618container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE14const_iteratorESI_:
 2058|      8|    friend bool operator==(const const_iterator& a, const const_iterator& b) {
 2059|      8|      return a.inner_ == b.inner_;
 2060|      8|    }
extension_set.cc:_ZN4absl12lts_2024011618container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE8iteratorESI_:
 1970|      8|    friend bool operator==(const iterator& a, const iterator& b) {
 1971|      8|      AssertIsValidForComparison(a.ctrl_, a.generation(), a.generation_ptr());
 1972|      8|      AssertIsValidForComparison(b.ctrl_, b.generation(), b.generation_ptr());
 1973|      8|      AssertSameContainer(a.ctrl_, b.ctrl_, a.slot_, b.slot_,
 1974|      8|                          a.generation_ptr(), b.generation_ptr());
 1975|      8|      return a.ctrl_ == b.ctrl_;
 1976|      8|    }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE3endEv:
 2278|      8|  const_iterator end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2279|      8|    return iterator(common().generation_ptr());
 2280|      8|  }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE14const_iteratordeEv:
 2049|      8|    reference operator*() const { return *inner_; }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE8iteratordeEv:
 1944|      8|    reference operator*() const {
 1945|      8|      AssertIsFull(ctrl_, generation(), generation_ptr(), "operator*()");
 1946|      8|      return unchecked_deref();
 1947|      8|    }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE8iterator15unchecked_derefEv:
 2029|      8|    reference unchecked_deref() const { return PolicyTraits::element(slot_); }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE8capacityEv:
 2288|      2|  size_t capacity() const { return common().capacity(); }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE9alloc_refEv:
 3206|      2|  allocator_type& alloc_ref() { return settings_.template get<3>(); }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE5infozEv:
 3200|      1|  HashtablezInfoHandle infoz() { return common().infoz(); }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEEC2Ev:
 2088|      1|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12CommonFieldsC2Ev:
 1028|    150|  CommonFields() = default;
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE6insertIS7_TnNSC_9enable_ifIXsr4absl11disjunctionINSC_14is_convertibleIRKT_S7_EENSF_22SameAsElementReferenceISL_EEEE5valueEiE4typeELi0ETnNSH_IXsr14IsDecomposableISL_EE5valueEiE4typeELi0EEENSC_4pairINSF_8iteratorEbEESL_:
 2339|      1|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2340|      1|    return emplace(value);
 2341|      1|  }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE7emplaceIJRKS7_ETnNSC_9enable_ifIXsr14IsDecomposableIDpT_EE5valueEiE4typeELi0EEENSC_4pairINSF_8iteratorEbEEDpOSK_:
 2422|      1|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2423|      1|    return PolicyTraits::apply(EmplaceDecomposable{*this},
 2424|      1|                               std::forward<Args>(args)...);
 2425|      1|  }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE19EmplaceDecomposableclIS7_JRKS7_EEENSC_4pairINSF_8iteratorEbEERKT_DpOT0_:
 2822|      1|    std::pair<iterator, bool> operator()(const K& key, Args&&... args) const {
 2823|      1|      auto res = s.find_or_prepare_insert(key);
 2824|      1|      if (res.second) {
  ------------------
  |  Branch (2824:11): [True: 1, False: 0]
  ------------------
 2825|      1|        s.emplace_at(res.first, std::forward<Args>(args)...);
 2826|      1|      }
 2827|      1|      return {s.iterator_at(res.first), res.second};
 2828|      1|    }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE22find_or_prepare_insertIS7_EENSC_4pairImbEERKT_:
 3086|      1|  std::pair<size_t, bool> find_or_prepare_insert(const K& key) {
 3087|      1|    prefetch_heap_block();
 3088|      1|    auto hash = hash_ref()(key);
 3089|      1|    auto seq = probe(common(), hash);
 3090|      1|    const ctrl_t* ctrl = control();
 3091|      1|    while (true) {
  ------------------
  |  Branch (3091:12): [True: 1, Folded]
  ------------------
 3092|      1|      Group g{ctrl + seq.offset()};
 3093|      1|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (3093:23): [True: 0, False: 1]
  ------------------
 3094|      0|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 0]
  |  |  |  Branch (179:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3095|      0|                EqualElement<K>{key, eq_ref()},
 3096|      0|                PolicyTraits::element(slot_array() + seq.offset(i)))))
 3097|      0|          return {seq.offset(i), false};
 3098|      0|      }
 3099|      1|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) break;
  ------------------
  |  |  179|      1|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 1, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 1]
  |  |  |  Branch (179:57): [True: 1, False: 0]
  |  |  ------------------
  ------------------
 3100|      0|      seq.next();
 3101|      0|      assert(seq.index() <= capacity() && "full table!");
 3102|      0|    }
 3103|      1|    return {prepare_insert(hash), true};
 3104|      1|  }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE8hash_refEv:
 3202|      1|  hasher& hash_ref() { return settings_.template get<1>(); }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE14prepare_insertEm:
 3110|      1|  size_t prepare_insert(size_t hash) ABSL_ATTRIBUTE_NOINLINE {
 3111|      1|    const bool rehash_for_bug_detection =
 3112|      1|        common().should_rehash_for_bug_detection_on_insert();
 3113|      1|    if (rehash_for_bug_detection) {
  ------------------
  |  Branch (3113:9): [True: 0, False: 1]
  ------------------
 3114|       |      // Move to a different heap allocation in order to detect bugs.
 3115|      0|      const size_t cap = capacity();
 3116|      0|      resize(growth_left() > 0 ? cap : NextCapacity(cap));
  ------------------
  |  Branch (3116:14): [True: 0, False: 0]
  ------------------
 3117|      0|    }
 3118|      1|    auto target = find_first_non_full(common(), hash);
 3119|      1|    if (!rehash_for_bug_detection &&
  ------------------
  |  Branch (3119:9): [True: 1, False: 0]
  ------------------
 3120|      1|        ABSL_PREDICT_FALSE(growth_left() == 0 &&
  ------------------
  |  |  178|      2|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 1, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 1]
  |  |  |  Branch (178:59): [True: 1, False: 0]
  |  |  |  Branch (178:59): [True: 1, False: 0]
  |  |  ------------------
  ------------------
 3121|      1|                           !IsDeleted(control()[target.offset]))) {
 3122|      1|      size_t old_capacity = capacity();
 3123|      1|      rehash_and_grow_if_necessary();
 3124|       |      // NOTE: It is safe to use `FindFirstNonFullAfterResize`.
 3125|       |      // `FindFirstNonFullAfterResize` must be called right after resize.
 3126|       |      // `rehash_and_grow_if_necessary` may *not* call `resize`
 3127|       |      // and perform `drop_deletes_without_resize` instead. But this
 3128|       |      // could happen only on big tables.
 3129|       |      // For big tables `FindFirstNonFullAfterResize` will always
 3130|       |      // fallback to normal `find_first_non_full`, so it is safe to use it.
 3131|      1|      target = HashSetResizeHelper::FindFirstNonFullAfterResize(
 3132|      1|          common(), old_capacity, hash);
 3133|      1|    }
 3134|      1|    common().increment_size();
 3135|      1|    set_growth_left(growth_left() - IsEmpty(control()[target.offset]));
 3136|      1|    SetCtrl(common(), target.offset, H2(hash), sizeof(slot_type));
 3137|      1|    common().maybe_increment_generation_on_insert();
 3138|      1|    infoz().RecordInsert(hash, target.probe_length);
 3139|      1|    return target.offset;
 3140|      1|  }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE6resizeEm:
 2905|      1|  ABSL_ATTRIBUTE_NOINLINE void resize(size_t new_capacity) {
 2906|      1|    assert(IsValidCapacity(new_capacity));
 2907|      1|    HashSetResizeHelper resize_helper(common());
 2908|      1|    auto* old_slots = slot_array();
 2909|      1|    common().set_capacity(new_capacity);
 2910|       |    // Note that `InitializeSlots` does different number initialization steps
 2911|       |    // depending on the values of `transfer_uses_memcpy` and capacities.
 2912|       |    // Refer to the comment in `InitializeSlots` for more details.
 2913|      1|    const bool grow_single_group =
 2914|      1|        resize_helper.InitializeSlots<CharAlloc, sizeof(slot_type),
 2915|      1|                                      PolicyTraits::transfer_uses_memcpy(),
 2916|      1|                                      alignof(slot_type)>(
 2917|      1|            common(), const_cast<std::remove_const_t<slot_type>*>(old_slots),
 2918|      1|            CharAlloc(alloc_ref()));
 2919|       |
 2920|      1|    if (resize_helper.old_capacity() == 0) {
  ------------------
  |  Branch (2920:9): [True: 1, False: 0]
  ------------------
 2921|       |      // InitializeSlots did all the work including infoz().RecordRehash().
 2922|      1|      return;
 2923|      1|    }
 2924|       |
 2925|      0|    if (grow_single_group) {
  ------------------
  |  Branch (2925:9): [True: 0, False: 0]
  ------------------
 2926|      0|      if (PolicyTraits::transfer_uses_memcpy()) {
  ------------------
  |  Branch (2926:11): [Folded, False: 0]
  ------------------
 2927|       |        // InitializeSlots did all the work.
 2928|      0|        return;
 2929|      0|      }
 2930|       |      // We want GrowSizeIntoSingleGroup to be called here in order to make
 2931|       |      // InitializeSlots not depend on PolicyTraits.
 2932|      0|      resize_helper.GrowSizeIntoSingleGroup<PolicyTraits>(common(), alloc_ref(),
 2933|      0|                                                          old_slots);
 2934|      0|    } else {
 2935|       |      // InitializeSlots prepares control bytes to correspond to empty table.
 2936|      0|      auto* new_slots = slot_array();
 2937|      0|      size_t total_probe_length = 0;
 2938|      0|      for (size_t i = 0; i != resize_helper.old_capacity(); ++i) {
  ------------------
  |  Branch (2938:26): [True: 0, False: 0]
  ------------------
 2939|      0|        if (IsFull(resize_helper.old_ctrl()[i])) {
  ------------------
  |  Branch (2939:13): [True: 0, False: 0]
  ------------------
 2940|      0|          size_t hash = PolicyTraits::apply(
 2941|      0|              HashElement{hash_ref()}, PolicyTraits::element(old_slots + i));
 2942|      0|          auto target = find_first_non_full(common(), hash);
 2943|      0|          size_t new_i = target.offset;
 2944|      0|          total_probe_length += target.probe_length;
 2945|      0|          SetCtrl(common(), new_i, H2(hash), sizeof(slot_type));
 2946|      0|          transfer(new_slots + new_i, old_slots + i);
 2947|      0|        }
 2948|      0|      }
 2949|      0|      infoz().RecordRehash(total_probe_length);
 2950|      0|    }
 2951|      0|    resize_helper.DeallocateOld<alignof(slot_type)>(
 2952|      0|        CharAlloc(alloc_ref()), sizeof(slot_type),
 2953|      0|        const_cast<std::remove_const_t<slot_type>*>(old_slots));
 2954|      0|  }
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper15InitializeSlotsINSt3__19allocatorIcEELm48ELb0ELm8EEEbRNS1_12CommonFieldsEPvT_:
 1595|      1|                                               Alloc alloc) {
 1596|      1|    assert(c.capacity());
 1597|       |    // Folks with custom allocators often make unwarranted assumptions about the
 1598|       |    // behavior of their classes vis-a-vis trivial destructability and what
 1599|       |    // calls they will or won't make.  Avoid sampling for people with custom
 1600|       |    // allocators to get us out of this mess.  This is not a hard guarantee but
 1601|       |    // a workaround while we plan the exact guarantee we want to provide.
 1602|      1|    const size_t sample_size =
 1603|      1|        (std::is_same<Alloc, std::allocator<char>>::value &&
  ------------------
  |  Branch (1603:10): [True: 1, Folded]
  ------------------
 1604|      1|         c.slot_array() == nullptr)
  ------------------
  |  Branch (1604:10): [True: 1, False: 0]
  ------------------
 1605|      1|            ? SizeOfSlot
 1606|      1|            : 0;
 1607|      1|    HashtablezInfoHandle infoz =
 1608|      1|        sample_size > 0 ? Sample(sample_size) : c.infoz();
  ------------------
  |  Branch (1608:9): [True: 1, False: 0]
  ------------------
 1609|       |
 1610|      1|    const bool has_infoz = infoz.IsSampled();
 1611|      1|    const size_t cap = c.capacity();
 1612|      1|    const size_t alloc_size =
 1613|      1|        AllocSize(cap, SizeOfSlot, AlignOfSlot, has_infoz);
 1614|      1|    char* mem = static_cast<char*>(
 1615|      1|        Allocate<BackingArrayAlignment(AlignOfSlot)>(&alloc, alloc_size));
 1616|      1|    const GenerationType old_generation = c.generation();
 1617|      1|    c.set_generation_ptr(reinterpret_cast<GenerationType*>(
 1618|      1|        mem + GenerationOffset(cap, has_infoz)));
 1619|      1|    c.set_generation(NextGeneration(old_generation));
 1620|      1|    c.set_control(reinterpret_cast<ctrl_t*>(mem + ControlOffset(has_infoz)));
 1621|      1|    c.set_slots(mem + SlotOffset(cap, AlignOfSlot, has_infoz));
 1622|      1|    ResetGrowthLeft(c);
 1623|       |
 1624|      1|    const bool grow_single_group =
 1625|      1|        IsGrowingIntoSingleGroupApplicable(old_capacity_, c.capacity());
 1626|      1|    if (old_capacity_ != 0 && grow_single_group) {
  ------------------
  |  Branch (1626:9): [True: 0, False: 1]
  |  Branch (1626:31): [True: 0, False: 0]
  ------------------
 1627|      0|      if (TransferUsesMemcpy) {
  ------------------
  |  Branch (1627:11): [Folded, False: 0]
  ------------------
 1628|      0|        GrowSizeIntoSingleGroupTransferable(c, old_slots, SizeOfSlot);
 1629|      0|        DeallocateOld<AlignOfSlot>(alloc, SizeOfSlot, old_slots);
 1630|      0|      } else {
 1631|      0|        GrowIntoSingleGroupShuffleControlBytes(c.control(), c.capacity());
 1632|      0|      }
 1633|      1|    } else {
 1634|      1|      ResetCtrl(c, SizeOfSlot);
 1635|      1|    }
 1636|       |
 1637|      1|    c.set_has_infoz(has_infoz);
 1638|      1|    if (has_infoz) {
  ------------------
  |  Branch (1638:9): [True: 0, False: 1]
  ------------------
 1639|      0|      infoz.RecordStorageChanged(c.size(), cap);
 1640|      0|      if (grow_single_group || old_capacity_ == 0) {
  ------------------
  |  Branch (1640:11): [True: 0, False: 0]
  |  Branch (1640:32): [True: 0, False: 0]
  ------------------
 1641|      0|        infoz.RecordRehash(0);
 1642|      0|      }
 1643|      0|      c.set_infoz(infoz);
 1644|      0|    }
 1645|      1|    return grow_single_group;
 1646|      1|  }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE11growth_leftEv:
 3181|      2|  size_t growth_left() const { return common().growth_left(); }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE28rehash_and_grow_if_necessaryEv:
 2970|      1|  void rehash_and_grow_if_necessary() {
 2971|      1|    const size_t cap = capacity();
 2972|      1|    if (cap > Group::kWidth &&
  ------------------
  |  Branch (2972:9): [True: 0, False: 1]
  ------------------
 2973|       |        // Do these calculations in 64-bit to avoid overflow.
 2974|      0|        size() * uint64_t{32} <= cap * uint64_t{25}) {
  ------------------
  |  Branch (2974:9): [True: 0, False: 0]
  ------------------
 2975|       |      // Squash DELETED without growing if there is enough capacity.
 2976|       |      //
 2977|       |      // Rehash in place if the current size is <= 25/32 of capacity.
 2978|       |      // Rationale for such a high factor: 1) drop_deletes_without_resize() is
 2979|       |      // faster than resize, and 2) it takes quite a bit of work to add
 2980|       |      // tombstones.  In the worst case, seems to take approximately 4
 2981|       |      // insert/erase pairs to create a single tombstone and so if we are
 2982|       |      // rehashing because of tombstones, we can afford to rehash-in-place as
 2983|       |      // long as we are reclaiming at least 1/8 the capacity without doing more
 2984|       |      // than 2X the work.  (Where "work" is defined to be size() for rehashing
 2985|       |      // or rehashing in place, and 1 for an insert or erase.)  But rehashing in
 2986|       |      // place is faster per operation than inserting or even doubling the size
 2987|       |      // of the table, so we actually afford to reclaim even less space from a
 2988|       |      // resize-in-place.  The decision is to rehash in place if we can reclaim
 2989|       |      // at about 1/8th of the usable capacity (specifically 3/28 of the
 2990|       |      // capacity) which means that the total cost of rehashing will be a small
 2991|       |      // fraction of the total work.
 2992|       |      //
 2993|       |      // Here is output of an experiment using the BM_CacheInSteadyState
 2994|       |      // benchmark running the old case (where we rehash-in-place only if we can
 2995|       |      // reclaim at least 7/16*capacity) vs. this code (which rehashes in place
 2996|       |      // if we can recover 3/32*capacity).
 2997|       |      //
 2998|       |      // Note that although in the worst-case number of rehashes jumped up from
 2999|       |      // 15 to 190, but the number of operations per second is almost the same.
 3000|       |      //
 3001|       |      // Abridged output of running BM_CacheInSteadyState benchmark from
 3002|       |      // raw_hash_set_benchmark.   N is the number of insert/erase operations.
 3003|       |      //
 3004|       |      //      | OLD (recover >= 7/16        | NEW (recover >= 3/32)
 3005|       |      // size |    N/s LoadFactor NRehashes |    N/s LoadFactor NRehashes
 3006|       |      //  448 | 145284       0.44        18 | 140118       0.44        19
 3007|       |      //  493 | 152546       0.24        11 | 151417       0.48        28
 3008|       |      //  538 | 151439       0.26        11 | 151152       0.53        38
 3009|       |      //  583 | 151765       0.28        11 | 150572       0.57        50
 3010|       |      //  628 | 150241       0.31        11 | 150853       0.61        66
 3011|       |      //  672 | 149602       0.33        12 | 150110       0.66        90
 3012|       |      //  717 | 149998       0.35        12 | 149531       0.70       129
 3013|       |      //  762 | 149836       0.37        13 | 148559       0.74       190
 3014|       |      //  807 | 149736       0.39        14 | 151107       0.39        14
 3015|       |      //  852 | 150204       0.42        15 | 151019       0.42        15
 3016|      0|      drop_deletes_without_resize();
 3017|      1|    } else {
 3018|       |      // Otherwise grow the container.
 3019|      1|      resize(NextCapacity(cap));
 3020|      1|    }
 3021|      1|  }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE15set_growth_leftEm:
 3182|      1|  void set_growth_left(size_t gl) { return common().set_growth_left(gl); }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE10emplace_atIJRKS7_EEEvmDpOT_:
 3151|      1|  void emplace_at(size_t i, Args&&... args) {
 3152|      1|    construct(slot_array() + i, std::forward<Args>(args)...);
 3153|       |
 3154|       |    assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) ==
 3155|      1|               iterator_at(i) &&
 3156|      1|           "constructed value does not match the lookup key");
 3157|      1|  }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE9constructIJRKS7_EEEvPS7_DpOT_:
 2851|      1|  inline void construct(slot_type* slot, Args&&... args) {
 2852|      1|    PolicyTraits::construct(&alloc_ref(), slot, std::forward<Args>(args)...);
 2853|      1|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE8capacityEv:
 2288|      6|  size_t capacity() const { return common().capacity(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE6commonEv:
 3194|  1.21k|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE7controlEv:
 3196|    724|  ctrl_t* control() const { return common().control(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE10slot_arrayEv:
 3197|    481|  slot_type* slot_array() const {
 3198|    481|    return static_cast<slot_type*>(common().slot_array());
 3199|    481|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE9alloc_refEv:
 3206|     11|  allocator_type& alloc_ref() { return settings_.template get<3>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE5infozEv:
 3200|      4|  HashtablezInfoHandle infoz() { return common().infoz(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE6commonEv:
 3193|    520|  CommonFields& common() { return settings_.template get<0>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE8capacityEv:
 2288|      6|  size_t capacity() const { return common().capacity(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE6commonEv:
 3194|    106|  const CommonFields& common() const { return settings_.template get<0>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE7controlEv:
 3196|     50|  ctrl_t* control() const { return common().control(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE10slot_arrayEv:
 3197|     29|  slot_type* slot_array() const {
 3198|     29|    return static_cast<slot_type*>(common().slot_array());
 3199|     29|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE9alloc_refEv:
 3206|     11|  allocator_type& alloc_ref() { return settings_.template get<3>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE5infozEv:
 3200|      4|  HashtablezInfoHandle infoz() { return common().infoz(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE6commonEv:
 3193|     76|  CommonFields& common() { return settings_.template get<0>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE8capacityEv:
 2288|     20|  size_t capacity() const { return common().capacity(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE6commonEv:
 3194|  4.78k|  const CommonFields& common() const { return settings_.template get<0>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE7controlEv:
 3196|  2.35k|  ctrl_t* control() const { return common().control(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE10slot_arrayEv:
 3197|  1.29k|  slot_type* slot_array() const {
 3198|  1.29k|    return static_cast<slot_type*>(common().slot_array());
 3199|  1.29k|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE9alloc_refEv:
 3206|  1.40k|  allocator_type& alloc_ref() { return settings_.template get<3>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE5infozEv:
 3200|    510|  HashtablezInfoHandle infoz() { return common().infoz(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE6commonEv:
 3193|  6.57k|  CommonFields& common() { return settings_.template get<0>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE8capacityEv:
 2288|     20|  size_t capacity() const { return common().capacity(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE6commonEv:
 3194|    442|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE7controlEv:
 3196|    233|  ctrl_t* control() const { return common().control(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE10slot_arrayEv:
 3197|    125|  slot_type* slot_array() const {
 3198|    125|    return static_cast<slot_type*>(common().slot_array());
 3199|    125|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE9alloc_refEv:
 3206|     84|  allocator_type& alloc_ref() { return settings_.template get<3>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE5infozEv:
 3200|     34|  HashtablezInfoHandle infoz() { return common().infoz(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE6commonEv:
 3193|    533|  CommonFields& common() { return settings_.template get<0>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE8capacityEv:
 2288|      8|  size_t capacity() const { return common().capacity(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE6commonEv:
 3194|     40|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE7controlEv:
 3196|     16|  ctrl_t* control() const { return common().control(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE10slot_arrayEv:
 3197|      8|  slot_type* slot_array() const {
 3198|      8|    return static_cast<slot_type*>(common().slot_array());
 3199|      8|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE6commonEv:
 3193|     32|  CommonFields& common() { return settings_.template get<0>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE8capacityEv:
 2288|     24|  size_t capacity() const { return common().capacity(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE6commonEv:
 3194|    821|  const CommonFields& common() const { return settings_.template get<0>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE7controlEv:
 3196|    392|  ctrl_t* control() const { return common().control(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE10slot_arrayEv:
 3197|    213|  slot_type* slot_array() const {
 3198|    213|    return static_cast<slot_type*>(common().slot_array());
 3199|    213|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE9alloc_refEv:
 3206|    235|  allocator_type& alloc_ref() { return settings_.template get<3>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE5infozEv:
 3200|     99|  HashtablezInfoHandle infoz() { return common().infoz(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE6commonEv:
 3193|  1.13k|  CommonFields& common() { return settings_.template get<0>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE8capacityEv:
 2288|     24|  size_t capacity() const { return common().capacity(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE6commonEv:
 3194|    923|  const CommonFields& common() const { return settings_.template get<0>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE7controlEv:
 3196|    444|  ctrl_t* control() const { return common().control(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE10slot_arrayEv:
 3197|    237|  slot_type* slot_array() const {
 3198|    237|    return static_cast<slot_type*>(common().slot_array());
 3199|    237|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE9alloc_refEv:
 3206|    233|  allocator_type& alloc_ref() { return settings_.template get<3>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE5infozEv:
 3200|    111|  HashtablezInfoHandle infoz() { return common().infoz(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE6commonEv:
 3193|  1.22k|  CommonFields& common() { return settings_.template get<0>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE8capacityEv:
 2288|     48|  size_t capacity() const { return common().capacity(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE6commonEv:
 3194|  5.67k|  const CommonFields& common() const { return settings_.template get<0>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE7controlEv:
 3196|  2.77k|  ctrl_t* control() const { return common().control(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE10slot_arrayEv:
 3197|  1.46k|  slot_type* slot_array() const {
 3198|  1.46k|    return static_cast<slot_type*>(common().slot_array());
 3199|  1.46k|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE9alloc_refEv:
 3206|  1.61k|  allocator_type& alloc_ref() { return settings_.template get<3>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE5infozEv:
 3200|    698|  HashtablezInfoHandle infoz() { return common().infoz(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE6commonEv:
 3193|  8.04k|  CommonFields& common() { return settings_.template get<0>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf14FileDescriptorENSt3__16vectorINS5_14DescriptorPool18DeferredValidation13LifetimesInfoENS9_9allocatorISD_EEEEEENS1_6HashEqIS8_vE4HashENSJ_2EqENSE_INS9_4pairIKS8_SG_EEEEE6commonEv:
 3194|     12|  const CommonFields& common() const { return settings_.template get<0>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE4findINS8_13FullNameQueryEEENSE_14const_iteratorERKT_:
 2718|    111|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2719|    111|    prefetch_heap_block();
 2720|    111|    return find(key, hash_ref()(key));
 2721|    111|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE19prefetch_heap_blockEv:
 3187|    615|  void prefetch_heap_block() const {
 3188|    615|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|    615|    __builtin_prefetch(control(), 0, 1);
 3190|    615|#endif
 3191|    615|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE4findINS8_13FullNameQueryEEENSE_14const_iteratorERKT_m:
 2713|    111|                      size_t hash) const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2714|    111|    return const_cast<raw_hash_set*>(this)->find(key, hash);
 2715|    111|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE4findINS8_13FullNameQueryEEENSE_8iteratorERKT_m:
 2688|    111|                size_t hash) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2689|    111|    auto seq = probe(common(), hash);
 2690|    111|    slot_type* slot_ptr = slot_array();
 2691|    111|    const ctrl_t* ctrl = control();
 2692|    111|    while (true) {
  ------------------
  |  Branch (2692:12): [True: 111, Folded]
  ------------------
 2693|    111|      Group g{ctrl + seq.offset()};
 2694|    111|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (2694:23): [True: 106, False: 6]
  ------------------
 2695|    106|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|    106|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 105, False: 1]
  |  |  |  Branch (179:48): [Folded, False: 106]
  |  |  |  Branch (179:57): [True: 105, False: 1]
  |  |  ------------------
  ------------------
 2696|    106|                EqualElement<K>{key, eq_ref()},
 2697|    106|                PolicyTraits::element(slot_ptr + seq.offset(i)))))
 2698|    105|          return iterator_at(seq.offset(i));
 2699|    106|      }
 2700|      6|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
  ------------------
  |  |  179|      6|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 6, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 6]
  |  |  |  Branch (179:57): [True: 6, False: 0]
  |  |  ------------------
  ------------------
 2701|      0|      seq.next();
 2702|       |      assert(seq.index() <= capacity() && "full table!");
 2703|      0|    }
 2704|    111|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE12EqualElementINS8_13FullNameQueryEEclIS6_JRS6_EEEbRKT_DpOT0_:
 2813|    106|    bool operator()(const K2& lhs, Args&&...) const {
 2814|    106|      return eq(lhs, rhs);
 2815|    106|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE6eq_refEv:
 3204|    157|  key_equal& eq_ref() { return settings_.template get<2>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE11iterator_atEm:
 3159|    609|  iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3160|    609|    return {control() + i, slot_array() + i, common().generation_ptr()};
 3161|    609|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE8iteratorC2EPNS1_6ctrl_tEPS6_PKh:
 1984|    609|        : HashSetIteratorGenerationInfo(generation_ptr),
 1985|    609|          ctrl_(ctrl),
 1986|    609|          slot_(slot) {
 1987|       |      // This assumption helps the compiler know that any non-end iterator is
 1988|       |      // not equal to any end iterator.
 1989|    609|      ABSL_ASSUME(ctrl != nullptr);
  ------------------
  |  |  259|    609|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1990|    609|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE3endEv:
 2271|      6|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2272|      6|    return iterator(common().generation_ptr());
 2273|      6|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE8iteratorC2EPKh:
 1993|    117|        : HashSetIteratorGenerationInfo(generation_ptr), ctrl_(nullptr) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE14const_iteratorC2ENSE_8iteratorE:
 2047|    222|    const_iterator(iterator i) : inner_(std::move(i)) {}  // NOLINT
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE8hash_refEv:
 3203|    111|  const hasher& hash_ref() const { return settings_.template get<1>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE14const_iteratorESH_:
 2058|    111|    friend bool operator==(const const_iterator& a, const const_iterator& b) {
 2059|    111|      return a.inner_ == b.inner_;
 2060|    111|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE8iteratorESH_:
 1970|    111|    friend bool operator==(const iterator& a, const iterator& b) {
 1971|    111|      AssertIsValidForComparison(a.ctrl_, a.generation(), a.generation_ptr());
 1972|    111|      AssertIsValidForComparison(b.ctrl_, b.generation(), b.generation_ptr());
 1973|    111|      AssertSameContainer(a.ctrl_, b.ctrl_, a.slot_, b.slot_,
 1974|    111|                          a.generation_ptr(), b.generation_ptr());
 1975|    111|      return a.ctrl_ == b.ctrl_;
 1976|    111|    }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE3endEv:
 2278|    111|  const_iterator end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2279|    111|    return iterator(common().generation_ptr());
 2280|    111|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE14const_iteratordeEv:
 2049|    105|    reference operator*() const { return *inner_; }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE8iteratordeEv:
 1944|    105|    reference operator*() const {
 1945|    105|      AssertIsFull(ctrl_, generation(), generation_ptr(), "operator*()");
 1946|    105|      return unchecked_deref();
 1947|    105|    }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE8iterator15unchecked_derefEv:
 2029|    105|    reference unchecked_deref() const { return PolicyTraits::element(slot_); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf14FileDescriptorENSt3__16vectorINS5_14DescriptorPool18DeferredValidation13LifetimesInfoENS9_9allocatorISD_EEEEEENS1_6HashEqIS8_vE4HashENSJ_2EqENSE_INS9_4pairIKS8_SG_EEEEEC2Ev:
 2088|      4|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf14FileDescriptorENSt3__16vectorINS5_14DescriptorPool18DeferredValidation13LifetimesInfoENS9_9allocatorISD_EEEEEENS1_6HashEqIS8_vE4HashENSJ_2EqENSE_INS9_4pairIKS8_SG_EEEEE5emptyEv:
 2286|      8|  bool empty() const { return !size(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf14FileDescriptorENSt3__16vectorINS5_14DescriptorPool18DeferredValidation13LifetimesInfoENS9_9allocatorISD_EEEEEENS1_6HashEqIS8_vE4HashENSJ_2EqENSE_INS9_4pairIKS8_SG_EEEEE4sizeEv:
 2287|      8|  size_t size() const { return common().size(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf14FileDescriptorENSt3__16vectorINS5_14DescriptorPool18DeferredValidation13LifetimesInfoENS9_9allocatorISD_EEEEEENS1_6HashEqIS8_vE4HashENSJ_2EqENSE_INS9_4pairIKS8_SG_EEEEE8capacityEv:
 2288|      4|  size_t capacity() const { return common().capacity(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf14FileDescriptorENSt3__16vectorINS5_14DescriptorPool18DeferredValidation13LifetimesInfoENS9_9allocatorISD_EEEEEENS1_6HashEqIS8_vE4HashENSJ_2EqENSE_INS9_4pairIKS8_SG_EEEEED2Ev:
 2264|      4|  ~raw_hash_set() { destructor_impl(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf14FileDescriptorENSt3__16vectorINS5_14DescriptorPool18DeferredValidation13LifetimesInfoENS9_9allocatorISD_EEEEEENS1_6HashEqIS8_vE4HashENSJ_2EqENSE_INS9_4pairIKS8_SG_EEEEE15destructor_implEv:
 2882|      4|  inline void destructor_impl() {
 2883|      4|    if (capacity() == 0) return;
  ------------------
  |  Branch (2883:9): [True: 4, False: 0]
  ------------------
 2884|      0|    destroy_slots();
 2885|      0|    dealloc();
 2886|      0|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE19prefetch_heap_blockEv:
 3187|      8|  void prefetch_heap_block() const {
 3188|      8|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|      8|    __builtin_prefetch(control(), 0, 1);
 3190|      8|#endif
 3191|      8|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE4findINS0_11string_viewEEENSI_14const_iteratorERKT_:
 2718|     13|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2719|     13|    prefetch_heap_block();
 2720|     13|    return find(key, hash_ref()(key));
 2721|     13|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE19prefetch_heap_blockEv:
 3187|     17|  void prefetch_heap_block() const {
 3188|     17|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|     17|    __builtin_prefetch(control(), 0, 1);
 3190|     17|#endif
 3191|     17|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE4findINS0_11string_viewEEENSI_14const_iteratorERKT_m:
 2713|     13|                      size_t hash) const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2714|     13|    return const_cast<raw_hash_set*>(this)->find(key, hash);
 2715|     13|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE4findINS0_11string_viewEEENSI_8iteratorERKT_m:
 2688|     13|                size_t hash) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2689|     13|    auto seq = probe(common(), hash);
 2690|     13|    slot_type* slot_ptr = slot_array();
 2691|     13|    const ctrl_t* ctrl = control();
 2692|     13|    while (true) {
  ------------------
  |  Branch (2692:12): [True: 13, Folded]
  ------------------
 2693|     13|      Group g{ctrl + seq.offset()};
 2694|     13|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (2694:23): [True: 5, False: 8]
  ------------------
 2695|      5|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      5|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 5, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 5]
  |  |  |  Branch (179:57): [True: 5, False: 0]
  |  |  ------------------
  ------------------
 2696|      5|                EqualElement<K>{key, eq_ref()},
 2697|      5|                PolicyTraits::element(slot_ptr + seq.offset(i)))))
 2698|      5|          return iterator_at(seq.offset(i));
 2699|      5|      }
 2700|      8|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
  ------------------
  |  |  179|      8|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 8, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 8]
  |  |  |  Branch (179:57): [True: 8, False: 0]
  |  |  ------------------
  ------------------
 2701|      0|      seq.next();
 2702|       |      assert(seq.index() <= capacity() && "full table!");
 2703|      0|    }
 2704|     13|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE12EqualElementINS0_11string_viewEEclIS8_JRS8_EEEbRKT_DpOT0_:
 2813|      5|    bool operator()(const K2& lhs, Args&&...) const {
 2814|      5|      return eq(lhs, rhs);
 2815|      5|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE6eq_refEv:
 3204|      5|  key_equal& eq_ref() { return settings_.template get<2>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE11iterator_atEm:
 3159|      9|  iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3160|      9|    return {control() + i, slot_array() + i, common().generation_ptr()};
 3161|      9|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE8iteratorC2EPNS1_6ctrl_tEPS8_PKh:
 1984|      9|        : HashSetIteratorGenerationInfo(generation_ptr),
 1985|      9|          ctrl_(ctrl),
 1986|      9|          slot_(slot) {
 1987|       |      // This assumption helps the compiler know that any non-end iterator is
 1988|       |      // not equal to any end iterator.
 1989|      9|      ABSL_ASSUME(ctrl != nullptr);
  ------------------
  |  |  259|      9|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1990|      9|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE3endEv:
 2271|      8|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2272|      8|    return iterator(common().generation_ptr());
 2273|      8|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE8iteratorC2EPKh:
 1993|     21|        : HashSetIteratorGenerationInfo(generation_ptr), ctrl_(nullptr) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE14const_iteratorC2ENSI_8iteratorE:
 2047|     26|    const_iterator(iterator i) : inner_(std::move(i)) {}  // NOLINT
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE8hash_refEv:
 3203|     13|  const hasher& hash_ref() const { return settings_.template get<1>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE14const_iteratorESL_:
 2058|     13|    friend bool operator==(const const_iterator& a, const const_iterator& b) {
 2059|     13|      return a.inner_ == b.inner_;
 2060|     13|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE8iteratorESL_:
 1970|     13|    friend bool operator==(const iterator& a, const iterator& b) {
 1971|     13|      AssertIsValidForComparison(a.ctrl_, a.generation(), a.generation_ptr());
 1972|     13|      AssertIsValidForComparison(b.ctrl_, b.generation(), b.generation_ptr());
 1973|     13|      AssertSameContainer(a.ctrl_, b.ctrl_, a.slot_, b.slot_,
 1974|     13|                          a.generation_ptr(), b.generation_ptr());
 1975|     13|      return a.ctrl_ == b.ctrl_;
 1976|     13|    }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE3endEv:
 2278|     13|  const_iterator end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2279|     13|    return iterator(common().generation_ptr());
 2280|     13|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE14const_iteratordeEv:
 2049|      5|    reference operator*() const { return *inner_; }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE8iteratordeEv:
 1944|      5|    reference operator*() const {
 1945|      5|      AssertIsFull(ctrl_, generation(), generation_ptr(), "operator*()");
 1946|      5|      return unchecked_deref();
 1947|      5|    }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE8iterator15unchecked_derefEv:
 2029|      5|    reference unchecked_deref() const { return PolicyTraits::element(slot_); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE19prefetch_heap_blockEv:
 3187|    108|  void prefetch_heap_block() const {
 3188|    108|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|    108|    __builtin_prefetch(control(), 0, 1);
 3190|    108|#endif
 3191|    108|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE6eq_refEv:
 3204|      6|  key_equal& eq_ref() { return settings_.template get<2>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE11iterator_atEm:
 3159|    108|  iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3160|    108|    return {control() + i, slot_array() + i, common().generation_ptr()};
 3161|    108|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE8iteratorC2EPNS1_6ctrl_tEPS8_PKh:
 1984|    108|        : HashSetIteratorGenerationInfo(generation_ptr),
 1985|    108|          ctrl_(ctrl),
 1986|    108|          slot_(slot) {
 1987|       |      // This assumption helps the compiler know that any non-end iterator is
 1988|       |      // not equal to any end iterator.
 1989|    108|      ABSL_ASSUME(ctrl != nullptr);
  ------------------
  |  |  259|    108|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1990|    108|    }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE19prefetch_heap_blockEv:
 3187|    688|  void prefetch_heap_block() const {
 3188|    688|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|    688|    __builtin_prefetch(control(), 0, 1);
 3190|    688|#endif
 3191|    688|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE6eq_refEv:
 3204|     56|  key_equal& eq_ref() { return settings_.template get<2>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE11iterator_atEm:
 3159|    688|  iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3160|    688|    return {control() + i, slot_array() + i, common().generation_ptr()};
 3161|    688|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE8iteratorC2EPNS1_6ctrl_tEPS6_PKh:
 1984|    688|        : HashSetIteratorGenerationInfo(generation_ptr),
 1985|    688|          ctrl_(ctrl),
 1986|    688|          slot_(slot) {
 1987|       |      // This assumption helps the compiler know that any non-end iterator is
 1988|       |      // not equal to any end iterator.
 1989|    688|      ABSL_ASSUME(ctrl != nullptr);
  ------------------
  |  |  259|    688|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1990|    688|    }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE19prefetch_heap_blockEv:
 3187|     95|  void prefetch_heap_block() const {
 3188|     95|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|     95|    __builtin_prefetch(control(), 0, 1);
 3190|     95|#endif
 3191|     95|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE6eq_refEv:
 3204|      7|  key_equal& eq_ref() { return settings_.template get<2>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE11iterator_atEm:
 3159|     95|  iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3160|     95|    return {control() + i, slot_array() + i, common().generation_ptr()};
 3161|     95|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE8iteratorC2EPNS1_6ctrl_tEPS8_PKh:
 1984|     95|        : HashSetIteratorGenerationInfo(generation_ptr),
 1985|     95|          ctrl_(ctrl),
 1986|     95|          slot_(slot) {
 1987|       |      // This assumption helps the compiler know that any non-end iterator is
 1988|       |      // not equal to any end iterator.
 1989|     95|      ABSL_ASSUME(ctrl != nullptr);
  ------------------
  |  |  259|     95|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1990|     95|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE8hash_refEv:
 3202|    207|  hasher& hash_ref() { return settings_.template get<1>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIiEENS0_13hash_internal4HashIiEENSt3__18equal_toIiEENS8_9allocatorIiEEE6commonEv:
 3194|      4|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIiEENS0_13hash_internal4HashIiEENSt3__18equal_toIiEENS8_9allocatorIiEEE8capacityEv:
 2288|      4|  size_t capacity() const { return common().capacity(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIiEENS0_13hash_internal4HashIiEENSt3__18equal_toIiEENS8_9allocatorIiEEED2Ev:
 2264|      4|  ~raw_hash_set() { destructor_impl(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIiEENS0_13hash_internal4HashIiEENSt3__18equal_toIiEENS8_9allocatorIiEEE15destructor_implEv:
 2882|      4|  inline void destructor_impl() {
 2883|      4|    if (capacity() == 0) return;
  ------------------
  |  Branch (2883:9): [True: 4, False: 0]
  ------------------
 2884|      0|    destroy_slots();
 2885|      0|    dealloc();
 2886|      0|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEED2Ev:
 2264|      8|  ~raw_hash_set() { destructor_impl(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE15destructor_implEv:
 2882|      8|  inline void destructor_impl() {
 2883|      8|    if (capacity() == 0) return;
  ------------------
  |  Branch (2883:9): [True: 8, False: 0]
  ------------------
 2884|      0|    destroy_slots();
 2885|      0|    dealloc();
 2886|      0|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE8capacityEv:
 2288|     16|  size_t capacity() const { return common().capacity(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE6commonEv:
 3194|    333|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE7controlEv:
 3196|    208|  ctrl_t* control() const { return common().control(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE10slot_arrayEv:
 3197|    104|  slot_type* slot_array() const {
 3198|    104|    return static_cast<slot_type*>(common().slot_array());
 3199|    104|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE6commonEv:
 3193|    327|  CommonFields& common() { return settings_.template get<0>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_17DescriptorBuilder12MessageHintsEEENS1_6HashEqIS8_vE4HashENSD_2EqENSt3__19allocatorINSG_4pairIKS8_SA_EEEEED2Ev:
 2264|      4|  ~raw_hash_set() { destructor_impl(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_17DescriptorBuilder12MessageHintsEEENS1_6HashEqIS8_vE4HashENSD_2EqENSt3__19allocatorINSG_4pairIKS8_SA_EEEEE15destructor_implEv:
 2882|      4|  inline void destructor_impl() {
 2883|      4|    if (capacity() == 0) return;
  ------------------
  |  Branch (2883:9): [True: 4, False: 0]
  ------------------
 2884|      0|    destroy_slots();
 2885|      0|    dealloc();
 2886|      0|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_17DescriptorBuilder12MessageHintsEEENS1_6HashEqIS8_vE4HashENSD_2EqENSt3__19allocatorINSG_4pairIKS8_SA_EEEEE8capacityEv:
 2288|      4|  size_t capacity() const { return common().capacity(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_17DescriptorBuilder12MessageHintsEEENS1_6HashEqIS8_vE4HashENSD_2EqENSt3__19allocatorINSG_4pairIKS8_SA_EEEEE6commonEv:
 3194|      8|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEED2Ev:
 2264|     75|  ~raw_hash_set() { destructor_impl(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE15destructor_implEv:
 2882|     75|  inline void destructor_impl() {
 2883|     75|    if (capacity() == 0) return;
  ------------------
  |  Branch (2883:9): [True: 72, False: 3]
  ------------------
 2884|      3|    destroy_slots();
 2885|      3|    dealloc();
 2886|      3|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE8capacityEv:
 2288|     87|  size_t capacity() const { return common().capacity(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE6commonEv:
 3194|  1.82k|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE13destroy_slotsEv:
 2861|      3|  inline void destroy_slots() {
 2862|      3|    const size_t cap = capacity();
 2863|      3|    const ctrl_t* ctrl = control();
 2864|      3|    slot_type* slot = slot_array();
 2865|      6|    for (size_t i = 0; i != cap; ++i) {
  ------------------
  |  Branch (2865:24): [True: 3, False: 3]
  ------------------
 2866|      3|      if (IsFull(ctrl[i])) {
  ------------------
  |  Branch (2866:11): [True: 3, False: 0]
  ------------------
 2867|      3|        destroy(slot + i);
 2868|      3|      }
 2869|      3|    }
 2870|      3|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE7controlEv:
 3196|    866|  ctrl_t* control() const { return common().control(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE10slot_arrayEv:
 3197|    439|  slot_type* slot_array() const {
 3198|    439|    return static_cast<slot_type*>(common().slot_array());
 3199|    439|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE7destroyEPS4_:
 2854|      3|  inline void destroy(slot_type* slot) {
 2855|      3|    PolicyTraits::destroy(&alloc_ref(), slot);
 2856|      3|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE9alloc_refEv:
 3206|     12|  allocator_type& alloc_ref() { return settings_.template get<3>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE7deallocEv:
 2872|      3|  inline void dealloc() {
 2873|      3|    assert(capacity() != 0);
 2874|       |    // Unpoison before returning the memory to the allocator.
 2875|      3|    SanitizerUnpoisonMemoryRegion(slot_array(), sizeof(slot_type) * capacity());
 2876|      3|    infoz().Unregister();
 2877|      3|    Deallocate<BackingArrayAlignment(alignof(slot_type))>(
 2878|      3|        &alloc_ref(), common().backing_array_start(),
 2879|      3|        common().alloc_size(sizeof(slot_type), alignof(slot_type)));
 2880|      3|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE5infozEv:
 3200|      6|  HashtablezInfoHandle infoz() { return common().infoz(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE6commonEv:
 3193|    896|  CommonFields& common() { return settings_.template get<0>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE6resizeEm:
 2905|      3|  ABSL_ATTRIBUTE_NOINLINE void resize(size_t new_capacity) {
 2906|      3|    assert(IsValidCapacity(new_capacity));
 2907|      3|    HashSetResizeHelper resize_helper(common());
 2908|      3|    auto* old_slots = slot_array();
 2909|      3|    common().set_capacity(new_capacity);
 2910|       |    // Note that `InitializeSlots` does different number initialization steps
 2911|       |    // depending on the values of `transfer_uses_memcpy` and capacities.
 2912|       |    // Refer to the comment in `InitializeSlots` for more details.
 2913|      3|    const bool grow_single_group =
 2914|      3|        resize_helper.InitializeSlots<CharAlloc, sizeof(slot_type),
 2915|      3|                                      PolicyTraits::transfer_uses_memcpy(),
 2916|      3|                                      alignof(slot_type)>(
 2917|      3|            common(), const_cast<std::remove_const_t<slot_type>*>(old_slots),
 2918|      3|            CharAlloc(alloc_ref()));
 2919|       |
 2920|      3|    if (resize_helper.old_capacity() == 0) {
  ------------------
  |  Branch (2920:9): [True: 3, False: 0]
  ------------------
 2921|       |      // InitializeSlots did all the work including infoz().RecordRehash().
 2922|      3|      return;
 2923|      3|    }
 2924|       |
 2925|      0|    if (grow_single_group) {
  ------------------
  |  Branch (2925:9): [True: 0, False: 0]
  ------------------
 2926|      0|      if (PolicyTraits::transfer_uses_memcpy()) {
  ------------------
  |  Branch (2926:11): [Folded, False: 0]
  ------------------
 2927|       |        // InitializeSlots did all the work.
 2928|      0|        return;
 2929|      0|      }
 2930|       |      // We want GrowSizeIntoSingleGroup to be called here in order to make
 2931|       |      // InitializeSlots not depend on PolicyTraits.
 2932|      0|      resize_helper.GrowSizeIntoSingleGroup<PolicyTraits>(common(), alloc_ref(),
 2933|      0|                                                          old_slots);
 2934|      0|    } else {
 2935|       |      // InitializeSlots prepares control bytes to correspond to empty table.
 2936|      0|      auto* new_slots = slot_array();
 2937|      0|      size_t total_probe_length = 0;
 2938|      0|      for (size_t i = 0; i != resize_helper.old_capacity(); ++i) {
  ------------------
  |  Branch (2938:26): [True: 0, False: 0]
  ------------------
 2939|      0|        if (IsFull(resize_helper.old_ctrl()[i])) {
  ------------------
  |  Branch (2939:13): [True: 0, False: 0]
  ------------------
 2940|      0|          size_t hash = PolicyTraits::apply(
 2941|      0|              HashElement{hash_ref()}, PolicyTraits::element(old_slots + i));
 2942|      0|          auto target = find_first_non_full(common(), hash);
 2943|      0|          size_t new_i = target.offset;
 2944|      0|          total_probe_length += target.probe_length;
 2945|      0|          SetCtrl(common(), new_i, H2(hash), sizeof(slot_type));
 2946|      0|          transfer(new_slots + new_i, old_slots + i);
 2947|      0|        }
 2948|      0|      }
 2949|      0|      infoz().RecordRehash(total_probe_length);
 2950|      0|    }
 2951|      0|    resize_helper.DeallocateOld<alignof(slot_type)>(
 2952|      0|        CharAlloc(alloc_ref()), sizeof(slot_type),
 2953|      0|        const_cast<std::remove_const_t<slot_type>*>(old_slots));
 2954|      0|  }
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper15InitializeSlotsINSt3__19allocatorIcEELm16ELb0ELm8EEEbRNS1_12CommonFieldsEPvT_:
 1595|      3|                                               Alloc alloc) {
 1596|      3|    assert(c.capacity());
 1597|       |    // Folks with custom allocators often make unwarranted assumptions about the
 1598|       |    // behavior of their classes vis-a-vis trivial destructability and what
 1599|       |    // calls they will or won't make.  Avoid sampling for people with custom
 1600|       |    // allocators to get us out of this mess.  This is not a hard guarantee but
 1601|       |    // a workaround while we plan the exact guarantee we want to provide.
 1602|      3|    const size_t sample_size =
 1603|      3|        (std::is_same<Alloc, std::allocator<char>>::value &&
  ------------------
  |  Branch (1603:10): [True: 3, Folded]
  ------------------
 1604|      3|         c.slot_array() == nullptr)
  ------------------
  |  Branch (1604:10): [True: 3, False: 0]
  ------------------
 1605|      3|            ? SizeOfSlot
 1606|      3|            : 0;
 1607|      3|    HashtablezInfoHandle infoz =
 1608|      3|        sample_size > 0 ? Sample(sample_size) : c.infoz();
  ------------------
  |  Branch (1608:9): [True: 3, False: 0]
  ------------------
 1609|       |
 1610|      3|    const bool has_infoz = infoz.IsSampled();
 1611|      3|    const size_t cap = c.capacity();
 1612|      3|    const size_t alloc_size =
 1613|      3|        AllocSize(cap, SizeOfSlot, AlignOfSlot, has_infoz);
 1614|      3|    char* mem = static_cast<char*>(
 1615|      3|        Allocate<BackingArrayAlignment(AlignOfSlot)>(&alloc, alloc_size));
 1616|      3|    const GenerationType old_generation = c.generation();
 1617|      3|    c.set_generation_ptr(reinterpret_cast<GenerationType*>(
 1618|      3|        mem + GenerationOffset(cap, has_infoz)));
 1619|      3|    c.set_generation(NextGeneration(old_generation));
 1620|      3|    c.set_control(reinterpret_cast<ctrl_t*>(mem + ControlOffset(has_infoz)));
 1621|      3|    c.set_slots(mem + SlotOffset(cap, AlignOfSlot, has_infoz));
 1622|      3|    ResetGrowthLeft(c);
 1623|       |
 1624|      3|    const bool grow_single_group =
 1625|      3|        IsGrowingIntoSingleGroupApplicable(old_capacity_, c.capacity());
 1626|      3|    if (old_capacity_ != 0 && grow_single_group) {
  ------------------
  |  Branch (1626:9): [True: 0, False: 3]
  |  Branch (1626:31): [True: 0, False: 0]
  ------------------
 1627|      0|      if (TransferUsesMemcpy) {
  ------------------
  |  Branch (1627:11): [Folded, False: 0]
  ------------------
 1628|      0|        GrowSizeIntoSingleGroupTransferable(c, old_slots, SizeOfSlot);
 1629|      0|        DeallocateOld<AlignOfSlot>(alloc, SizeOfSlot, old_slots);
 1630|      0|      } else {
 1631|      0|        GrowIntoSingleGroupShuffleControlBytes(c.control(), c.capacity());
 1632|      0|      }
 1633|      3|    } else {
 1634|      3|      ResetCtrl(c, SizeOfSlot);
 1635|      3|    }
 1636|       |
 1637|      3|    c.set_has_infoz(has_infoz);
 1638|      3|    if (has_infoz) {
  ------------------
  |  Branch (1638:9): [True: 0, False: 3]
  ------------------
 1639|      0|      infoz.RecordStorageChanged(c.size(), cap);
 1640|      0|      if (grow_single_group || old_capacity_ == 0) {
  ------------------
  |  Branch (1640:11): [True: 0, False: 0]
  |  Branch (1640:32): [True: 0, False: 0]
  ------------------
 1641|      0|        infoz.RecordRehash(0);
 1642|      0|      }
 1643|      0|      c.set_infoz(infoz);
 1644|      0|    }
 1645|      3|    return grow_single_group;
 1646|      3|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE8hash_refEv:
 3202|      3|  hasher& hash_ref() { return settings_.template get<1>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE19prefetch_heap_blockEv:
 3187|    427|  void prefetch_heap_block() const {
 3188|    427|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|    427|    __builtin_prefetch(control(), 0, 1);
 3190|    427|#endif
 3191|    427|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE14prepare_insertEm:
 3110|      3|  size_t prepare_insert(size_t hash) ABSL_ATTRIBUTE_NOINLINE {
 3111|      3|    const bool rehash_for_bug_detection =
 3112|      3|        common().should_rehash_for_bug_detection_on_insert();
 3113|      3|    if (rehash_for_bug_detection) {
  ------------------
  |  Branch (3113:9): [True: 0, False: 3]
  ------------------
 3114|       |      // Move to a different heap allocation in order to detect bugs.
 3115|      0|      const size_t cap = capacity();
 3116|      0|      resize(growth_left() > 0 ? cap : NextCapacity(cap));
  ------------------
  |  Branch (3116:14): [True: 0, False: 0]
  ------------------
 3117|      0|    }
 3118|      3|    auto target = find_first_non_full(common(), hash);
 3119|      3|    if (!rehash_for_bug_detection &&
  ------------------
  |  Branch (3119:9): [True: 3, False: 0]
  ------------------
 3120|      3|        ABSL_PREDICT_FALSE(growth_left() == 0 &&
  ------------------
  |  |  178|      6|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 3, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 3]
  |  |  |  Branch (178:59): [True: 3, False: 0]
  |  |  |  Branch (178:59): [True: 3, False: 0]
  |  |  ------------------
  ------------------
 3121|      3|                           !IsDeleted(control()[target.offset]))) {
 3122|      3|      size_t old_capacity = capacity();
 3123|      3|      rehash_and_grow_if_necessary();
 3124|       |      // NOTE: It is safe to use `FindFirstNonFullAfterResize`.
 3125|       |      // `FindFirstNonFullAfterResize` must be called right after resize.
 3126|       |      // `rehash_and_grow_if_necessary` may *not* call `resize`
 3127|       |      // and perform `drop_deletes_without_resize` instead. But this
 3128|       |      // could happen only on big tables.
 3129|       |      // For big tables `FindFirstNonFullAfterResize` will always
 3130|       |      // fallback to normal `find_first_non_full`, so it is safe to use it.
 3131|      3|      target = HashSetResizeHelper::FindFirstNonFullAfterResize(
 3132|      3|          common(), old_capacity, hash);
 3133|      3|    }
 3134|      3|    common().increment_size();
 3135|      3|    set_growth_left(growth_left() - IsEmpty(control()[target.offset]));
 3136|      3|    SetCtrl(common(), target.offset, H2(hash), sizeof(slot_type));
 3137|      3|    common().maybe_increment_generation_on_insert();
 3138|      3|    infoz().RecordInsert(hash, target.probe_length);
 3139|      3|    return target.offset;
 3140|      3|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE11growth_leftEv:
 3181|      6|  size_t growth_left() const { return common().growth_left(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE28rehash_and_grow_if_necessaryEv:
 2970|      3|  void rehash_and_grow_if_necessary() {
 2971|      3|    const size_t cap = capacity();
 2972|      3|    if (cap > Group::kWidth &&
  ------------------
  |  Branch (2972:9): [True: 0, False: 3]
  ------------------
 2973|       |        // Do these calculations in 64-bit to avoid overflow.
 2974|      0|        size() * uint64_t{32} <= cap * uint64_t{25}) {
  ------------------
  |  Branch (2974:9): [True: 0, False: 0]
  ------------------
 2975|       |      // Squash DELETED without growing if there is enough capacity.
 2976|       |      //
 2977|       |      // Rehash in place if the current size is <= 25/32 of capacity.
 2978|       |      // Rationale for such a high factor: 1) drop_deletes_without_resize() is
 2979|       |      // faster than resize, and 2) it takes quite a bit of work to add
 2980|       |      // tombstones.  In the worst case, seems to take approximately 4
 2981|       |      // insert/erase pairs to create a single tombstone and so if we are
 2982|       |      // rehashing because of tombstones, we can afford to rehash-in-place as
 2983|       |      // long as we are reclaiming at least 1/8 the capacity without doing more
 2984|       |      // than 2X the work.  (Where "work" is defined to be size() for rehashing
 2985|       |      // or rehashing in place, and 1 for an insert or erase.)  But rehashing in
 2986|       |      // place is faster per operation than inserting or even doubling the size
 2987|       |      // of the table, so we actually afford to reclaim even less space from a
 2988|       |      // resize-in-place.  The decision is to rehash in place if we can reclaim
 2989|       |      // at about 1/8th of the usable capacity (specifically 3/28 of the
 2990|       |      // capacity) which means that the total cost of rehashing will be a small
 2991|       |      // fraction of the total work.
 2992|       |      //
 2993|       |      // Here is output of an experiment using the BM_CacheInSteadyState
 2994|       |      // benchmark running the old case (where we rehash-in-place only if we can
 2995|       |      // reclaim at least 7/16*capacity) vs. this code (which rehashes in place
 2996|       |      // if we can recover 3/32*capacity).
 2997|       |      //
 2998|       |      // Note that although in the worst-case number of rehashes jumped up from
 2999|       |      // 15 to 190, but the number of operations per second is almost the same.
 3000|       |      //
 3001|       |      // Abridged output of running BM_CacheInSteadyState benchmark from
 3002|       |      // raw_hash_set_benchmark.   N is the number of insert/erase operations.
 3003|       |      //
 3004|       |      //      | OLD (recover >= 7/16        | NEW (recover >= 3/32)
 3005|       |      // size |    N/s LoadFactor NRehashes |    N/s LoadFactor NRehashes
 3006|       |      //  448 | 145284       0.44        18 | 140118       0.44        19
 3007|       |      //  493 | 152546       0.24        11 | 151417       0.48        28
 3008|       |      //  538 | 151439       0.26        11 | 151152       0.53        38
 3009|       |      //  583 | 151765       0.28        11 | 150572       0.57        50
 3010|       |      //  628 | 150241       0.31        11 | 150853       0.61        66
 3011|       |      //  672 | 149602       0.33        12 | 150110       0.66        90
 3012|       |      //  717 | 149998       0.35        12 | 149531       0.70       129
 3013|       |      //  762 | 149836       0.37        13 | 148559       0.74       190
 3014|       |      //  807 | 149736       0.39        14 | 151107       0.39        14
 3015|       |      //  852 | 150204       0.42        15 | 151019       0.42        15
 3016|      0|      drop_deletes_without_resize();
 3017|      3|    } else {
 3018|       |      // Otherwise grow the container.
 3019|      3|      resize(NextCapacity(cap));
 3020|      3|    }
 3021|      3|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE15set_growth_leftEm:
 3182|      3|  void set_growth_left(size_t gl) { return common().set_growth_left(gl); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE11iterator_atEm:
 3159|      3|  iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3160|      3|    return {control() + i, slot_array() + i, common().generation_ptr()};
 3161|      3|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE8iteratorC2EPNS1_6ctrl_tEPS4_PKh:
 1984|      3|        : HashSetIteratorGenerationInfo(generation_ptr),
 1985|      3|          ctrl_(ctrl),
 1986|      3|          slot_(slot) {
 1987|       |      // This assumption helps the compiler know that any non-end iterator is
 1988|       |      // not equal to any end iterator.
 1989|      3|      ABSL_ASSUME(ctrl != nullptr);
  ------------------
  |  |  259|      3|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1990|      3|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE3endEv:
 2271|    424|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2272|    424|    return iterator(common().generation_ptr());
 2273|    424|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE8iteratorC2EPKh:
 1993|    848|        : HashSetIteratorGenerationInfo(generation_ptr), ctrl_(nullptr) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE14const_iteratorC2ENSB_8iteratorE:
 2047|    848|    const_iterator(iterator i) : inner_(std::move(i)) {}  // NOLINT
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE8hash_refEv:
 3203|    424|  const hasher& hash_ref() const { return settings_.template get<1>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE14const_iterator16unchecked_equalsERKSC_:
 2075|    424|    bool unchecked_equals(const const_iterator& b) {
 2076|    424|      return inner_.unchecked_equals(b.inner_);
 2077|    424|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE8iterator16unchecked_equalsERKSC_:
 2025|    424|    bool unchecked_equals(const iterator& b) { return ctrl_ == b.control(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE8iterator7controlEv:
 2009|    424|    ctrl_t* control() const { return ctrl_; }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE3endEv:
 2278|    424|  const_iterator end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2279|    424|    return iterator(common().generation_ptr());
 2280|    424|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE4findINS0_11string_viewEEENSF_8iteratorERKT_m:
 2688|      4|                size_t hash) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2689|      4|    auto seq = probe(common(), hash);
 2690|      4|    slot_type* slot_ptr = slot_array();
 2691|      4|    const ctrl_t* ctrl = control();
 2692|      4|    while (true) {
  ------------------
  |  Branch (2692:12): [True: 4, Folded]
  ------------------
 2693|      4|      Group g{ctrl + seq.offset()};
 2694|      4|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (2694:23): [True: 0, False: 4]
  ------------------
 2695|      0|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 0]
  |  |  |  Branch (179:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2696|      0|                EqualElement<K>{key, eq_ref()},
 2697|      0|                PolicyTraits::element(slot_ptr + seq.offset(i)))))
 2698|      0|          return iterator_at(seq.offset(i));
 2699|      0|      }
 2700|      4|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
  ------------------
  |  |  179|      4|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 4, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 4]
  |  |  |  Branch (179:57): [True: 4, False: 0]
  |  |  ------------------
  ------------------
 2701|      0|      seq.next();
 2702|       |      assert(seq.index() <= capacity() && "full table!");
 2703|      0|    }
 2704|      4|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE3endEv:
 2271|      8|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2272|      8|    return iterator(common().generation_ptr());
 2273|      8|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE8iteratorC2EPKh:
 1993|     16|        : HashSetIteratorGenerationInfo(generation_ptr), ctrl_(nullptr) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEEiEENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_iEEEEED2Ev:
 2264|      4|  ~raw_hash_set() { destructor_impl(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEEiEENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_iEEEEE15destructor_implEv:
 2882|      4|  inline void destructor_impl() {
 2883|      4|    if (capacity() == 0) return;
  ------------------
  |  Branch (2883:9): [True: 4, False: 0]
  ------------------
 2884|      0|    destroy_slots();
 2885|      0|    dealloc();
 2886|      0|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEEiEENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_iEEEEE8capacityEv:
 2288|      4|  size_t capacity() const { return common().capacity(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEEiEENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_iEEEEE6commonEv:
 3194|      4|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEES8_EENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_S8_EEEEED2Ev:
 2264|      4|  ~raw_hash_set() { destructor_impl(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEES8_EENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_S8_EEEEE15destructor_implEv:
 2882|      4|  inline void destructor_impl() {
 2883|      4|    if (capacity() == 0) return;
  ------------------
  |  Branch (2883:9): [True: 4, False: 0]
  ------------------
 2884|      0|    destroy_slots();
 2885|      0|    dealloc();
 2886|      0|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEES8_EENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_S8_EEEEE8capacityEv:
 2288|      4|  size_t capacity() const { return common().capacity(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEES8_EENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_S8_EEEEE6commonEv:
 3194|      4|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEEC2Ev:
 2088|      4|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf10DescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEEC2Ev:
 2088|      2|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEEC2Ev:
 2088|      2|      std::is_nothrow_default_constructible<allocator_type>::value) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEEC2Ev:
 2088|      2|      std::is_nothrow_default_constructible<allocator_type>::value) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEEC2Ev:
 2088|      2|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEEC2Ev:
 2088|      2|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE6insertESt16initializer_listINSI_ISA_SE_EEE:
 2385|      2|  void insert(std::initializer_list<init_type> ilist) {
 2386|      2|    insert(ilist.begin(), ilist.end());
 2387|      2|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE6insertIPKNSI_ISA_SE_EEEEvT_SR_:
 2376|      2|  void insert(InputIt first, InputIt last) {
 2377|     34|    for (; first != last; ++first) emplace(*first);
  ------------------
  |  Branch (2377:12): [True: 32, False: 2]
  ------------------
 2378|      2|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE7emplaceIJRKNSI_ISA_SE_EEETnNS4_9enable_ifIXsr14IsDecomposableIDpT_EE5valueEiE4typeELi0EEENSI_INSM_8iteratorEbEEDpOSS_:
 2422|     32|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2423|     32|    return PolicyTraits::apply(EmplaceDecomposable{*this},
 2424|     32|                               std::forward<Args>(args)...);
 2425|     32|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE19EmplaceDecomposableclISA_JRKNS4_21piecewise_construct_tENS4_5tupleIJRSJ_EEENSS_IJRKSE_EEEEEENSI_INSM_8iteratorEbEERKT_DpOT0_:
 2822|     32|    std::pair<iterator, bool> operator()(const K& key, Args&&... args) const {
 2823|     32|      auto res = s.find_or_prepare_insert(key);
 2824|     32|      if (res.second) {
  ------------------
  |  Branch (2824:11): [True: 32, False: 0]
  ------------------
 2825|     32|        s.emplace_at(res.first, std::forward<Args>(args)...);
 2826|     32|      }
 2827|     32|      return {s.iterator_at(res.first), res.second};
 2828|     32|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE22find_or_prepare_insertISA_EENSI_ImbEERKT_:
 3086|     32|  std::pair<size_t, bool> find_or_prepare_insert(const K& key) {
 3087|     32|    prefetch_heap_block();
 3088|     32|    auto hash = hash_ref()(key);
 3089|     32|    auto seq = probe(common(), hash);
 3090|     32|    const ctrl_t* ctrl = control();
 3091|     32|    while (true) {
  ------------------
  |  Branch (3091:12): [True: 32, Folded]
  ------------------
 3092|     32|      Group g{ctrl + seq.offset()};
 3093|     32|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (3093:23): [True: 1, False: 32]
  ------------------
 3094|      1|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      1|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 1]
  |  |  |  Branch (179:48): [Folded, False: 1]
  |  |  |  Branch (179:57): [True: 0, False: 1]
  |  |  ------------------
  ------------------
 3095|      1|                EqualElement<K>{key, eq_ref()},
 3096|      1|                PolicyTraits::element(slot_array() + seq.offset(i)))))
 3097|      0|          return {seq.offset(i), false};
 3098|      1|      }
 3099|     32|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) break;
  ------------------
  |  |  179|     32|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 32, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 32]
  |  |  |  Branch (179:57): [True: 32, False: 0]
  |  |  ------------------
  ------------------
 3100|      0|      seq.next();
 3101|      0|      assert(seq.index() <= capacity() && "full table!");
 3102|      0|    }
 3103|     32|    return {prepare_insert(hash), true};
 3104|     32|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE19prefetch_heap_blockEv:
 3187|     79|  void prefetch_heap_block() const {
 3188|     79|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|     79|    __builtin_prefetch(control(), 0, 1);
 3190|     79|#endif
 3191|     79|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE8hash_refEv:
 3202|    107|  hasher& hash_ref() { return settings_.template get<1>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE12EqualElementISA_EclISA_JRKNS4_21piecewise_construct_tENS4_5tupleIJRSJ_EEENST_IJRKSE_EEEEEEbRKT_DpOT0_:
 2813|      5|    bool operator()(const K2& lhs, Args&&...) const {
 2814|      5|      return eq(lhs, rhs);
 2815|      5|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE6eq_refEv:
 3204|      5|  key_equal& eq_ref() { return settings_.template get<2>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE14prepare_insertEm:
 3110|     32|  size_t prepare_insert(size_t hash) ABSL_ATTRIBUTE_NOINLINE {
 3111|     32|    const bool rehash_for_bug_detection =
 3112|     32|        common().should_rehash_for_bug_detection_on_insert();
 3113|     32|    if (rehash_for_bug_detection) {
  ------------------
  |  Branch (3113:9): [True: 0, False: 32]
  ------------------
 3114|       |      // Move to a different heap allocation in order to detect bugs.
 3115|      0|      const size_t cap = capacity();
 3116|      0|      resize(growth_left() > 0 ? cap : NextCapacity(cap));
  ------------------
  |  Branch (3116:14): [True: 0, False: 0]
  ------------------
 3117|      0|    }
 3118|     32|    auto target = find_first_non_full(common(), hash);
 3119|     32|    if (!rehash_for_bug_detection &&
  ------------------
  |  Branch (3119:9): [True: 32, False: 0]
  ------------------
 3120|     32|        ABSL_PREDICT_FALSE(growth_left() == 0 &&
  ------------------
  |  |  178|     42|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 10, False: 22]
  |  |  |  Branch (178:49): [Folded, False: 32]
  |  |  |  Branch (178:59): [True: 10, False: 22]
  |  |  |  Branch (178:59): [True: 10, False: 0]
  |  |  ------------------
  ------------------
 3121|     32|                           !IsDeleted(control()[target.offset]))) {
 3122|     10|      size_t old_capacity = capacity();
 3123|     10|      rehash_and_grow_if_necessary();
 3124|       |      // NOTE: It is safe to use `FindFirstNonFullAfterResize`.
 3125|       |      // `FindFirstNonFullAfterResize` must be called right after resize.
 3126|       |      // `rehash_and_grow_if_necessary` may *not* call `resize`
 3127|       |      // and perform `drop_deletes_without_resize` instead. But this
 3128|       |      // could happen only on big tables.
 3129|       |      // For big tables `FindFirstNonFullAfterResize` will always
 3130|       |      // fallback to normal `find_first_non_full`, so it is safe to use it.
 3131|     10|      target = HashSetResizeHelper::FindFirstNonFullAfterResize(
 3132|     10|          common(), old_capacity, hash);
 3133|     10|    }
 3134|     32|    common().increment_size();
 3135|     32|    set_growth_left(growth_left() - IsEmpty(control()[target.offset]));
 3136|     32|    SetCtrl(common(), target.offset, H2(hash), sizeof(slot_type));
 3137|     32|    common().maybe_increment_generation_on_insert();
 3138|     32|    infoz().RecordInsert(hash, target.probe_length);
 3139|     32|    return target.offset;
 3140|     32|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE6resizeEm:
 2905|     10|  ABSL_ATTRIBUTE_NOINLINE void resize(size_t new_capacity) {
 2906|     10|    assert(IsValidCapacity(new_capacity));
 2907|     10|    HashSetResizeHelper resize_helper(common());
 2908|     10|    auto* old_slots = slot_array();
 2909|     10|    common().set_capacity(new_capacity);
 2910|       |    // Note that `InitializeSlots` does different number initialization steps
 2911|       |    // depending on the values of `transfer_uses_memcpy` and capacities.
 2912|       |    // Refer to the comment in `InitializeSlots` for more details.
 2913|     10|    const bool grow_single_group =
 2914|     10|        resize_helper.InitializeSlots<CharAlloc, sizeof(slot_type),
 2915|     10|                                      PolicyTraits::transfer_uses_memcpy(),
 2916|     10|                                      alignof(slot_type)>(
 2917|     10|            common(), const_cast<std::remove_const_t<slot_type>*>(old_slots),
 2918|     10|            CharAlloc(alloc_ref()));
 2919|       |
 2920|     10|    if (resize_helper.old_capacity() == 0) {
  ------------------
  |  Branch (2920:9): [True: 2, False: 8]
  ------------------
 2921|       |      // InitializeSlots did all the work including infoz().RecordRehash().
 2922|      2|      return;
 2923|      2|    }
 2924|       |
 2925|      8|    if (grow_single_group) {
  ------------------
  |  Branch (2925:9): [True: 6, False: 2]
  ------------------
 2926|      6|      if (PolicyTraits::transfer_uses_memcpy()) {
  ------------------
  |  Branch (2926:11): [Folded, False: 6]
  ------------------
 2927|       |        // InitializeSlots did all the work.
 2928|      0|        return;
 2929|      0|      }
 2930|       |      // We want GrowSizeIntoSingleGroup to be called here in order to make
 2931|       |      // InitializeSlots not depend on PolicyTraits.
 2932|      6|      resize_helper.GrowSizeIntoSingleGroup<PolicyTraits>(common(), alloc_ref(),
 2933|      6|                                                          old_slots);
 2934|      6|    } else {
 2935|       |      // InitializeSlots prepares control bytes to correspond to empty table.
 2936|      2|      auto* new_slots = slot_array();
 2937|      2|      size_t total_probe_length = 0;
 2938|     32|      for (size_t i = 0; i != resize_helper.old_capacity(); ++i) {
  ------------------
  |  Branch (2938:26): [True: 30, False: 2]
  ------------------
 2939|     30|        if (IsFull(resize_helper.old_ctrl()[i])) {
  ------------------
  |  Branch (2939:13): [True: 28, False: 2]
  ------------------
 2940|     28|          size_t hash = PolicyTraits::apply(
 2941|     28|              HashElement{hash_ref()}, PolicyTraits::element(old_slots + i));
 2942|     28|          auto target = find_first_non_full(common(), hash);
 2943|     28|          size_t new_i = target.offset;
 2944|     28|          total_probe_length += target.probe_length;
 2945|     28|          SetCtrl(common(), new_i, H2(hash), sizeof(slot_type));
 2946|     28|          transfer(new_slots + new_i, old_slots + i);
 2947|     28|        }
 2948|     30|      }
 2949|      2|      infoz().RecordRehash(total_probe_length);
 2950|      2|    }
 2951|      8|    resize_helper.DeallocateOld<alignof(slot_type)>(
 2952|      8|        CharAlloc(alloc_ref()), sizeof(slot_type),
 2953|      8|        const_cast<std::remove_const_t<slot_type>*>(old_slots));
 2954|      8|  }
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper15InitializeSlotsINSt3__19allocatorIcEELm32ELb0ELm8EEEbRNS1_12CommonFieldsEPvT_:
 1595|     13|                                               Alloc alloc) {
 1596|     13|    assert(c.capacity());
 1597|       |    // Folks with custom allocators often make unwarranted assumptions about the
 1598|       |    // behavior of their classes vis-a-vis trivial destructability and what
 1599|       |    // calls they will or won't make.  Avoid sampling for people with custom
 1600|       |    // allocators to get us out of this mess.  This is not a hard guarantee but
 1601|       |    // a workaround while we plan the exact guarantee we want to provide.
 1602|     13|    const size_t sample_size =
 1603|     13|        (std::is_same<Alloc, std::allocator<char>>::value &&
  ------------------
  |  Branch (1603:10): [True: 13, Folded]
  ------------------
 1604|     13|         c.slot_array() == nullptr)
  ------------------
  |  Branch (1604:10): [True: 3, False: 10]
  ------------------
 1605|     13|            ? SizeOfSlot
 1606|     13|            : 0;
 1607|     13|    HashtablezInfoHandle infoz =
 1608|     13|        sample_size > 0 ? Sample(sample_size) : c.infoz();
  ------------------
  |  Branch (1608:9): [True: 3, False: 10]
  ------------------
 1609|       |
 1610|     13|    const bool has_infoz = infoz.IsSampled();
 1611|     13|    const size_t cap = c.capacity();
 1612|     13|    const size_t alloc_size =
 1613|     13|        AllocSize(cap, SizeOfSlot, AlignOfSlot, has_infoz);
 1614|     13|    char* mem = static_cast<char*>(
 1615|     13|        Allocate<BackingArrayAlignment(AlignOfSlot)>(&alloc, alloc_size));
 1616|     13|    const GenerationType old_generation = c.generation();
 1617|     13|    c.set_generation_ptr(reinterpret_cast<GenerationType*>(
 1618|     13|        mem + GenerationOffset(cap, has_infoz)));
 1619|     13|    c.set_generation(NextGeneration(old_generation));
 1620|     13|    c.set_control(reinterpret_cast<ctrl_t*>(mem + ControlOffset(has_infoz)));
 1621|     13|    c.set_slots(mem + SlotOffset(cap, AlignOfSlot, has_infoz));
 1622|     13|    ResetGrowthLeft(c);
 1623|       |
 1624|     13|    const bool grow_single_group =
 1625|     13|        IsGrowingIntoSingleGroupApplicable(old_capacity_, c.capacity());
 1626|     13|    if (old_capacity_ != 0 && grow_single_group) {
  ------------------
  |  Branch (1626:9): [True: 10, False: 3]
  |  Branch (1626:31): [True: 8, False: 2]
  ------------------
 1627|      8|      if (TransferUsesMemcpy) {
  ------------------
  |  Branch (1627:11): [Folded, False: 8]
  ------------------
 1628|      0|        GrowSizeIntoSingleGroupTransferable(c, old_slots, SizeOfSlot);
 1629|      0|        DeallocateOld<AlignOfSlot>(alloc, SizeOfSlot, old_slots);
 1630|      8|      } else {
 1631|      8|        GrowIntoSingleGroupShuffleControlBytes(c.control(), c.capacity());
 1632|      8|      }
 1633|      8|    } else {
 1634|      5|      ResetCtrl(c, SizeOfSlot);
 1635|      5|    }
 1636|       |
 1637|     13|    c.set_has_infoz(has_infoz);
 1638|     13|    if (has_infoz) {
  ------------------
  |  Branch (1638:9): [True: 0, False: 13]
  ------------------
 1639|      0|      infoz.RecordStorageChanged(c.size(), cap);
 1640|      0|      if (grow_single_group || old_capacity_ == 0) {
  ------------------
  |  Branch (1640:11): [True: 0, False: 0]
  |  Branch (1640:32): [True: 0, False: 0]
  ------------------
 1641|      0|        infoz.RecordRehash(0);
 1642|      0|      }
 1643|      0|      c.set_infoz(infoz);
 1644|      0|    }
 1645|     13|    return grow_single_group;
 1646|     13|  }
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper23GrowSizeIntoSingleGroupINS1_18hash_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEvEENSA_INS6_4pairIKSC_SG_EEEEEEvRNS1_12CommonFieldsERT0_PNT_9slot_typeE:
 1655|      6|                               typename PolicyTraits::slot_type* old_slots) {
 1656|      6|    assert(old_capacity_ < Group::kWidth / 2);
 1657|      6|    assert(IsGrowingIntoSingleGroupApplicable(old_capacity_, c.capacity()));
 1658|      6|    using slot_type = typename PolicyTraits::slot_type;
 1659|      6|    assert(is_single_group(c.capacity()));
 1660|       |
 1661|      6|    auto* new_slots = reinterpret_cast<slot_type*>(c.slot_array());
 1662|       |
 1663|      6|    size_t shuffle_bit = old_capacity_ / 2 + 1;
 1664|     28|    for (size_t i = 0; i < old_capacity_; ++i) {
  ------------------
  |  Branch (1664:24): [True: 22, False: 6]
  ------------------
 1665|     22|      if (IsFull(old_ctrl_[i])) {
  ------------------
  |  Branch (1665:11): [True: 22, False: 0]
  ------------------
 1666|     22|        size_t new_i = i ^ shuffle_bit;
 1667|     22|        SanitizerUnpoisonMemoryRegion(new_slots + new_i, sizeof(slot_type));
 1668|     22|        PolicyTraits::transfer(&alloc_ref, new_slots + new_i, old_slots + i);
 1669|     22|      }
 1670|     22|    }
 1671|      6|    PoisonSingleGroupEmptySlots(c, sizeof(slot_type));
 1672|      6|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE11HashElementclISA_JRKNS4_21piecewise_construct_tENS4_5tupleIJRSJ_EEENSS_IJRKSE_EEEEEEmRKT_DpOT0_:
 2804|     28|    size_t operator()(const K& key, Args&&...) const {
 2805|     28|      return h(key);
 2806|     28|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE8transferEPNS1_13map_slot_typeISA_SE_EESP_:
 2857|     28|  inline void transfer(slot_type* to, slot_type* from) {
 2858|     28|    PolicyTraits::transfer(&alloc_ref(), to, from);
 2859|     28|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE11growth_leftEv:
 3181|     64|  size_t growth_left() const { return common().growth_left(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE28rehash_and_grow_if_necessaryEv:
 2970|     10|  void rehash_and_grow_if_necessary() {
 2971|     10|    const size_t cap = capacity();
 2972|     10|    if (cap > Group::kWidth &&
  ------------------
  |  Branch (2972:9): [True: 0, False: 10]
  ------------------
 2973|       |        // Do these calculations in 64-bit to avoid overflow.
 2974|      0|        size() * uint64_t{32} <= cap * uint64_t{25}) {
  ------------------
  |  Branch (2974:9): [True: 0, False: 0]
  ------------------
 2975|       |      // Squash DELETED without growing if there is enough capacity.
 2976|       |      //
 2977|       |      // Rehash in place if the current size is <= 25/32 of capacity.
 2978|       |      // Rationale for such a high factor: 1) drop_deletes_without_resize() is
 2979|       |      // faster than resize, and 2) it takes quite a bit of work to add
 2980|       |      // tombstones.  In the worst case, seems to take approximately 4
 2981|       |      // insert/erase pairs to create a single tombstone and so if we are
 2982|       |      // rehashing because of tombstones, we can afford to rehash-in-place as
 2983|       |      // long as we are reclaiming at least 1/8 the capacity without doing more
 2984|       |      // than 2X the work.  (Where "work" is defined to be size() for rehashing
 2985|       |      // or rehashing in place, and 1 for an insert or erase.)  But rehashing in
 2986|       |      // place is faster per operation than inserting or even doubling the size
 2987|       |      // of the table, so we actually afford to reclaim even less space from a
 2988|       |      // resize-in-place.  The decision is to rehash in place if we can reclaim
 2989|       |      // at about 1/8th of the usable capacity (specifically 3/28 of the
 2990|       |      // capacity) which means that the total cost of rehashing will be a small
 2991|       |      // fraction of the total work.
 2992|       |      //
 2993|       |      // Here is output of an experiment using the BM_CacheInSteadyState
 2994|       |      // benchmark running the old case (where we rehash-in-place only if we can
 2995|       |      // reclaim at least 7/16*capacity) vs. this code (which rehashes in place
 2996|       |      // if we can recover 3/32*capacity).
 2997|       |      //
 2998|       |      // Note that although in the worst-case number of rehashes jumped up from
 2999|       |      // 15 to 190, but the number of operations per second is almost the same.
 3000|       |      //
 3001|       |      // Abridged output of running BM_CacheInSteadyState benchmark from
 3002|       |      // raw_hash_set_benchmark.   N is the number of insert/erase operations.
 3003|       |      //
 3004|       |      //      | OLD (recover >= 7/16        | NEW (recover >= 3/32)
 3005|       |      // size |    N/s LoadFactor NRehashes |    N/s LoadFactor NRehashes
 3006|       |      //  448 | 145284       0.44        18 | 140118       0.44        19
 3007|       |      //  493 | 152546       0.24        11 | 151417       0.48        28
 3008|       |      //  538 | 151439       0.26        11 | 151152       0.53        38
 3009|       |      //  583 | 151765       0.28        11 | 150572       0.57        50
 3010|       |      //  628 | 150241       0.31        11 | 150853       0.61        66
 3011|       |      //  672 | 149602       0.33        12 | 150110       0.66        90
 3012|       |      //  717 | 149998       0.35        12 | 149531       0.70       129
 3013|       |      //  762 | 149836       0.37        13 | 148559       0.74       190
 3014|       |      //  807 | 149736       0.39        14 | 151107       0.39        14
 3015|       |      //  852 | 150204       0.42        15 | 151019       0.42        15
 3016|      0|      drop_deletes_without_resize();
 3017|     10|    } else {
 3018|       |      // Otherwise grow the container.
 3019|     10|      resize(NextCapacity(cap));
 3020|     10|    }
 3021|     10|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE15set_growth_leftEm:
 3182|     32|  void set_growth_left(size_t gl) { return common().set_growth_left(gl); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE10emplace_atIJRKNS4_21piecewise_construct_tENS4_5tupleIJRSJ_EEENSR_IJRKSE_EEEEEEvmDpOT_:
 3151|     32|  void emplace_at(size_t i, Args&&... args) {
 3152|     32|    construct(slot_array() + i, std::forward<Args>(args)...);
 3153|       |
 3154|       |    assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) ==
 3155|     32|               iterator_at(i) &&
 3156|     32|           "constructed value does not match the lookup key");
 3157|     32|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE9constructIJRKNS4_21piecewise_construct_tENS4_5tupleIJRSJ_EEENSR_IJRKSE_EEEEEEvPNS1_13map_slot_typeISA_SE_EEDpOT_:
 2851|     32|  inline void construct(slot_type* slot, Args&&... args) {
 2852|     32|    PolicyTraits::construct(&alloc_ref(), slot, std::forward<Args>(args)...);
 2853|     32|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE11iterator_atEm:
 3159|     33|  iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3160|     33|    return {control() + i, slot_array() + i, common().generation_ptr()};
 3161|     33|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE8iteratorC2EPNS1_6ctrl_tEPNS1_13map_slot_typeISA_SE_EEPKh:
 1984|     33|        : HashSetIteratorGenerationInfo(generation_ptr),
 1985|     33|          ctrl_(ctrl),
 1986|     33|          slot_(slot) {
 1987|       |      // This assumption helps the compiler know that any non-end iterator is
 1988|       |      // not equal to any end iterator.
 1989|     33|      ABSL_ASSUME(ctrl != nullptr);
  ------------------
  |  |  259|     33|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1990|     33|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEEC2Ev:
 2088|      4|      std::is_nothrow_default_constructible<allocator_type>::value) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEEC2Ev:
 2088|      4|      std::is_nothrow_default_constructible<allocator_type>::value) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEEC2Ev:
 2088|      8|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEPKN6google8protobuf23SourceCodeInfo_LocationEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SF_EEEEEC2Ev:
 2088|      4|      std::is_nothrow_default_constructible<allocator_type>::value) {}
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE12EqualElementIS6_EclIS6_JRS6_EEEbRKT_DpOT0_:
 2813|     51|    bool operator()(const K2& lhs, Args&&...) const {
 2814|     51|      return eq(lhs, rhs);
 2815|     51|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE8hash_refEv:
 3202|  1.38k|  hasher& hash_ref() { return settings_.template get<1>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE8hash_refEv:
 3202|      4|  hasher& hash_ref() { return settings_.template get<1>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE5clearEv:
 2291|      8|  ABSL_ATTRIBUTE_REINITIALIZES void clear() {
 2292|       |    // Iterating over this container is O(bucket_count()). When bucket_count()
 2293|       |    // is much greater than size(), iteration becomes prohibitively expensive.
 2294|       |    // For clear() it is more important to reuse the allocated array when the
 2295|       |    // container is small because allocation takes comparatively long time
 2296|       |    // compared to destruction of the elements of the container. So we pick the
 2297|       |    // largest bucket_count() threshold for which iteration is still fast and
 2298|       |    // past that we simply deallocate the array.
 2299|      8|    const size_t cap = capacity();
 2300|      8|    if (cap == 0) {
  ------------------
  |  Branch (2300:9): [True: 8, False: 0]
  ------------------
 2301|       |      // Already guaranteed to be empty; so nothing to do.
 2302|      8|    } else {
 2303|      0|      destroy_slots();
 2304|      0|      ClearBackingArray(common(), GetPolicyFunctions(), /*reuse=*/cap < 128);
 2305|      0|    }
 2306|      8|    common().set_reserved_growth(0);
 2307|      8|    common().set_reservation_size(0);
 2308|      8|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE6insertIPS6_TnNSD_9enable_ifIXsr4absl11disjunctionINSD_14is_convertibleIRKT_S8_EENSG_22SameAsElementReferenceISN_EEEE5valueEiE4typeELi0ETnNSJ_IXsr14IsDecomposableISN_EE5valueEiE4typeELi0EEENSD_4pairINSG_8iteratorEbEESN_:
 2339|     95|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2340|     95|    return emplace(value);
 2341|     95|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE7emplaceIJRKPS6_ETnNSD_9enable_ifIXsr14IsDecomposableIDpT_EE5valueEiE4typeELi0EEENSD_4pairINSG_8iteratorEbEEDpOSM_:
 2422|     95|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2423|     95|    return PolicyTraits::apply(EmplaceDecomposable{*this},
 2424|     95|                               std::forward<Args>(args)...);
 2425|     95|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE19EmplaceDecomposableclIPS6_JRKSJ_EEENSD_4pairINSG_8iteratorEbEERKT_DpOT0_:
 2822|     95|    std::pair<iterator, bool> operator()(const K& key, Args&&... args) const {
 2823|     95|      auto res = s.find_or_prepare_insert(key);
 2824|     95|      if (res.second) {
  ------------------
  |  Branch (2824:11): [True: 95, False: 0]
  ------------------
 2825|     95|        s.emplace_at(res.first, std::forward<Args>(args)...);
 2826|     95|      }
 2827|     95|      return {s.iterator_at(res.first), res.second};
 2828|     95|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE22find_or_prepare_insertIPS6_EENSD_4pairImbEERKT_:
 3086|     95|  std::pair<size_t, bool> find_or_prepare_insert(const K& key) {
 3087|     95|    prefetch_heap_block();
 3088|     95|    auto hash = hash_ref()(key);
 3089|     95|    auto seq = probe(common(), hash);
 3090|     95|    const ctrl_t* ctrl = control();
 3091|     96|    while (true) {
  ------------------
  |  Branch (3091:12): [True: 96, Folded]
  ------------------
 3092|     96|      Group g{ctrl + seq.offset()};
 3093|     96|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (3093:23): [True: 7, False: 96]
  ------------------
 3094|      7|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      7|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 7]
  |  |  |  Branch (179:48): [Folded, False: 7]
  |  |  |  Branch (179:57): [True: 0, False: 7]
  |  |  ------------------
  ------------------
 3095|      7|                EqualElement<K>{key, eq_ref()},
 3096|      7|                PolicyTraits::element(slot_array() + seq.offset(i)))))
 3097|      0|          return {seq.offset(i), false};
 3098|      7|      }
 3099|     96|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) break;
  ------------------
  |  |  179|     96|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 95, False: 1]
  |  |  |  Branch (179:48): [Folded, False: 96]
  |  |  |  Branch (179:57): [True: 95, False: 1]
  |  |  ------------------
  ------------------
 3100|      1|      seq.next();
 3101|      1|      assert(seq.index() <= capacity() && "full table!");
 3102|      1|    }
 3103|     95|    return {prepare_insert(hash), true};
 3104|     95|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE12EqualElementIPS6_EclIS8_JRS8_EEEbRKT_DpOT0_:
 2813|      7|    bool operator()(const K2& lhs, Args&&...) const {
 2814|      7|      return eq(lhs, rhs);
 2815|      7|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE14prepare_insertEm:
 3110|     95|  size_t prepare_insert(size_t hash) ABSL_ATTRIBUTE_NOINLINE {
 3111|     95|    const bool rehash_for_bug_detection =
 3112|     95|        common().should_rehash_for_bug_detection_on_insert();
 3113|     95|    if (rehash_for_bug_detection) {
  ------------------
  |  Branch (3113:9): [True: 0, False: 95]
  ------------------
 3114|       |      // Move to a different heap allocation in order to detect bugs.
 3115|      0|      const size_t cap = capacity();
 3116|      0|      resize(growth_left() > 0 ? cap : NextCapacity(cap));
  ------------------
  |  Branch (3116:14): [True: 0, False: 0]
  ------------------
 3117|      0|    }
 3118|     95|    auto target = find_first_non_full(common(), hash);
 3119|     95|    if (!rehash_for_bug_detection &&
  ------------------
  |  Branch (3119:9): [True: 95, False: 0]
  ------------------
 3120|     95|        ABSL_PREDICT_FALSE(growth_left() == 0 &&
  ------------------
  |  |  178|    107|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 12, False: 83]
  |  |  |  Branch (178:49): [Folded, False: 95]
  |  |  |  Branch (178:59): [True: 12, False: 83]
  |  |  |  Branch (178:59): [True: 12, False: 0]
  |  |  ------------------
  ------------------
 3121|     95|                           !IsDeleted(control()[target.offset]))) {
 3122|     12|      size_t old_capacity = capacity();
 3123|     12|      rehash_and_grow_if_necessary();
 3124|       |      // NOTE: It is safe to use `FindFirstNonFullAfterResize`.
 3125|       |      // `FindFirstNonFullAfterResize` must be called right after resize.
 3126|       |      // `rehash_and_grow_if_necessary` may *not* call `resize`
 3127|       |      // and perform `drop_deletes_without_resize` instead. But this
 3128|       |      // could happen only on big tables.
 3129|       |      // For big tables `FindFirstNonFullAfterResize` will always
 3130|       |      // fallback to normal `find_first_non_full`, so it is safe to use it.
 3131|     12|      target = HashSetResizeHelper::FindFirstNonFullAfterResize(
 3132|     12|          common(), old_capacity, hash);
 3133|     12|    }
 3134|     95|    common().increment_size();
 3135|     95|    set_growth_left(growth_left() - IsEmpty(control()[target.offset]));
 3136|     95|    SetCtrl(common(), target.offset, H2(hash), sizeof(slot_type));
 3137|     95|    common().maybe_increment_generation_on_insert();
 3138|     95|    infoz().RecordInsert(hash, target.probe_length);
 3139|     95|    return target.offset;
 3140|     95|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE6resizeEm:
 2905|     12|  ABSL_ATTRIBUTE_NOINLINE void resize(size_t new_capacity) {
 2906|     12|    assert(IsValidCapacity(new_capacity));
 2907|     12|    HashSetResizeHelper resize_helper(common());
 2908|     12|    auto* old_slots = slot_array();
 2909|     12|    common().set_capacity(new_capacity);
 2910|       |    // Note that `InitializeSlots` does different number initialization steps
 2911|       |    // depending on the values of `transfer_uses_memcpy` and capacities.
 2912|       |    // Refer to the comment in `InitializeSlots` for more details.
 2913|     12|    const bool grow_single_group =
 2914|     12|        resize_helper.InitializeSlots<CharAlloc, sizeof(slot_type),
 2915|     12|                                      PolicyTraits::transfer_uses_memcpy(),
 2916|     12|                                      alignof(slot_type)>(
 2917|     12|            common(), const_cast<std::remove_const_t<slot_type>*>(old_slots),
 2918|     12|            CharAlloc(alloc_ref()));
 2919|       |
 2920|     12|    if (resize_helper.old_capacity() == 0) {
  ------------------
  |  Branch (2920:9): [True: 2, False: 10]
  ------------------
 2921|       |      // InitializeSlots did all the work including infoz().RecordRehash().
 2922|      2|      return;
 2923|      2|    }
 2924|       |
 2925|     10|    if (grow_single_group) {
  ------------------
  |  Branch (2925:9): [True: 6, False: 4]
  ------------------
 2926|      6|      if (PolicyTraits::transfer_uses_memcpy()) {
  ------------------
  |  Branch (2926:11): [Folded, False: 6]
  ------------------
 2927|       |        // InitializeSlots did all the work.
 2928|      0|        return;
 2929|      0|      }
 2930|       |      // We want GrowSizeIntoSingleGroup to be called here in order to make
 2931|       |      // InitializeSlots not depend on PolicyTraits.
 2932|      6|      resize_helper.GrowSizeIntoSingleGroup<PolicyTraits>(common(), alloc_ref(),
 2933|      6|                                                          old_slots);
 2934|      6|    } else {
 2935|       |      // InitializeSlots prepares control bytes to correspond to empty table.
 2936|      4|      auto* new_slots = slot_array();
 2937|      4|      size_t total_probe_length = 0;
 2938|    128|      for (size_t i = 0; i != resize_helper.old_capacity(); ++i) {
  ------------------
  |  Branch (2938:26): [True: 124, False: 4]
  ------------------
 2939|    124|        if (IsFull(resize_helper.old_ctrl()[i])) {
  ------------------
  |  Branch (2939:13): [True: 112, False: 12]
  ------------------
 2940|    112|          size_t hash = PolicyTraits::apply(
 2941|    112|              HashElement{hash_ref()}, PolicyTraits::element(old_slots + i));
 2942|    112|          auto target = find_first_non_full(common(), hash);
 2943|    112|          size_t new_i = target.offset;
 2944|    112|          total_probe_length += target.probe_length;
 2945|    112|          SetCtrl(common(), new_i, H2(hash), sizeof(slot_type));
 2946|    112|          transfer(new_slots + new_i, old_slots + i);
 2947|    112|        }
 2948|    124|      }
 2949|      4|      infoz().RecordRehash(total_probe_length);
 2950|      4|    }
 2951|     10|    resize_helper.DeallocateOld<alignof(slot_type)>(
 2952|     10|        CharAlloc(alloc_ref()), sizeof(slot_type),
 2953|     10|        const_cast<std::remove_const_t<slot_type>*>(old_slots));
 2954|     10|  }
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper15InitializeSlotsINSt3__19allocatorIcEELm8ELb0ELm8EEEbRNS1_12CommonFieldsEPvT_:
 1595|     66|                                               Alloc alloc) {
 1596|     66|    assert(c.capacity());
 1597|       |    // Folks with custom allocators often make unwarranted assumptions about the
 1598|       |    // behavior of their classes vis-a-vis trivial destructability and what
 1599|       |    // calls they will or won't make.  Avoid sampling for people with custom
 1600|       |    // allocators to get us out of this mess.  This is not a hard guarantee but
 1601|       |    // a workaround while we plan the exact guarantee we want to provide.
 1602|     66|    const size_t sample_size =
 1603|     66|        (std::is_same<Alloc, std::allocator<char>>::value &&
  ------------------
  |  Branch (1603:10): [True: 66, Folded]
  ------------------
 1604|     66|         c.slot_array() == nullptr)
  ------------------
  |  Branch (1604:10): [True: 13, False: 53]
  ------------------
 1605|     66|            ? SizeOfSlot
 1606|     66|            : 0;
 1607|     66|    HashtablezInfoHandle infoz =
 1608|     66|        sample_size > 0 ? Sample(sample_size) : c.infoz();
  ------------------
  |  Branch (1608:9): [True: 13, False: 53]
  ------------------
 1609|       |
 1610|     66|    const bool has_infoz = infoz.IsSampled();
 1611|     66|    const size_t cap = c.capacity();
 1612|     66|    const size_t alloc_size =
 1613|     66|        AllocSize(cap, SizeOfSlot, AlignOfSlot, has_infoz);
 1614|     66|    char* mem = static_cast<char*>(
 1615|     66|        Allocate<BackingArrayAlignment(AlignOfSlot)>(&alloc, alloc_size));
 1616|     66|    const GenerationType old_generation = c.generation();
 1617|     66|    c.set_generation_ptr(reinterpret_cast<GenerationType*>(
 1618|     66|        mem + GenerationOffset(cap, has_infoz)));
 1619|     66|    c.set_generation(NextGeneration(old_generation));
 1620|     66|    c.set_control(reinterpret_cast<ctrl_t*>(mem + ControlOffset(has_infoz)));
 1621|     66|    c.set_slots(mem + SlotOffset(cap, AlignOfSlot, has_infoz));
 1622|     66|    ResetGrowthLeft(c);
 1623|       |
 1624|     66|    const bool grow_single_group =
 1625|     66|        IsGrowingIntoSingleGroupApplicable(old_capacity_, c.capacity());
 1626|     66|    if (old_capacity_ != 0 && grow_single_group) {
  ------------------
  |  Branch (1626:9): [True: 53, False: 13]
  |  Branch (1626:31): [True: 30, False: 23]
  ------------------
 1627|     30|      if (TransferUsesMemcpy) {
  ------------------
  |  Branch (1627:11): [Folded, False: 30]
  ------------------
 1628|      0|        GrowSizeIntoSingleGroupTransferable(c, old_slots, SizeOfSlot);
 1629|      0|        DeallocateOld<AlignOfSlot>(alloc, SizeOfSlot, old_slots);
 1630|     30|      } else {
 1631|     30|        GrowIntoSingleGroupShuffleControlBytes(c.control(), c.capacity());
 1632|     30|      }
 1633|     36|    } else {
 1634|     36|      ResetCtrl(c, SizeOfSlot);
 1635|     36|    }
 1636|       |
 1637|     66|    c.set_has_infoz(has_infoz);
 1638|     66|    if (has_infoz) {
  ------------------
  |  Branch (1638:9): [True: 0, False: 66]
  ------------------
 1639|      0|      infoz.RecordStorageChanged(c.size(), cap);
 1640|      0|      if (grow_single_group || old_capacity_ == 0) {
  ------------------
  |  Branch (1640:11): [True: 0, False: 0]
  |  Branch (1640:32): [True: 0, False: 0]
  ------------------
 1641|      0|        infoz.RecordRehash(0);
 1642|      0|      }
 1643|      0|      c.set_infoz(infoz);
 1644|      0|    }
 1645|     66|    return grow_single_group;
 1646|     66|  }
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper23GrowSizeIntoSingleGroupINS1_18hash_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEEvEENSt3__19allocatorISA_EEEEvRNS1_12CommonFieldsERT0_PNT_9slot_typeE:
 1655|      6|                               typename PolicyTraits::slot_type* old_slots) {
 1656|      6|    assert(old_capacity_ < Group::kWidth / 2);
 1657|      6|    assert(IsGrowingIntoSingleGroupApplicable(old_capacity_, c.capacity()));
 1658|      6|    using slot_type = typename PolicyTraits::slot_type;
 1659|      6|    assert(is_single_group(c.capacity()));
 1660|       |
 1661|      6|    auto* new_slots = reinterpret_cast<slot_type*>(c.slot_array());
 1662|       |
 1663|      6|    size_t shuffle_bit = old_capacity_ / 2 + 1;
 1664|     28|    for (size_t i = 0; i < old_capacity_; ++i) {
  ------------------
  |  Branch (1664:24): [True: 22, False: 6]
  ------------------
 1665|     22|      if (IsFull(old_ctrl_[i])) {
  ------------------
  |  Branch (1665:11): [True: 22, False: 0]
  ------------------
 1666|     22|        size_t new_i = i ^ shuffle_bit;
 1667|     22|        SanitizerUnpoisonMemoryRegion(new_slots + new_i, sizeof(slot_type));
 1668|     22|        PolicyTraits::transfer(&alloc_ref, new_slots + new_i, old_slots + i);
 1669|     22|      }
 1670|     22|    }
 1671|      6|    PoisonSingleGroupEmptySlots(c, sizeof(slot_type));
 1672|      6|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE11HashElementclIS8_JRS8_EEEmRKT_DpOT0_:
 2804|    112|    size_t operator()(const K& key, Args&&...) const {
 2805|    112|      return h(key);
 2806|    112|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE8transferEPS8_SH_:
 2857|    112|  inline void transfer(slot_type* to, slot_type* from) {
 2858|    112|    PolicyTraits::transfer(&alloc_ref(), to, from);
 2859|    112|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE11growth_leftEv:
 3181|    190|  size_t growth_left() const { return common().growth_left(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE28rehash_and_grow_if_necessaryEv:
 2970|     12|  void rehash_and_grow_if_necessary() {
 2971|     12|    const size_t cap = capacity();
 2972|     12|    if (cap > Group::kWidth &&
  ------------------
  |  Branch (2972:9): [True: 2, False: 10]
  ------------------
 2973|       |        // Do these calculations in 64-bit to avoid overflow.
 2974|      2|        size() * uint64_t{32} <= cap * uint64_t{25}) {
  ------------------
  |  Branch (2974:9): [True: 0, False: 2]
  ------------------
 2975|       |      // Squash DELETED without growing if there is enough capacity.
 2976|       |      //
 2977|       |      // Rehash in place if the current size is <= 25/32 of capacity.
 2978|       |      // Rationale for such a high factor: 1) drop_deletes_without_resize() is
 2979|       |      // faster than resize, and 2) it takes quite a bit of work to add
 2980|       |      // tombstones.  In the worst case, seems to take approximately 4
 2981|       |      // insert/erase pairs to create a single tombstone and so if we are
 2982|       |      // rehashing because of tombstones, we can afford to rehash-in-place as
 2983|       |      // long as we are reclaiming at least 1/8 the capacity without doing more
 2984|       |      // than 2X the work.  (Where "work" is defined to be size() for rehashing
 2985|       |      // or rehashing in place, and 1 for an insert or erase.)  But rehashing in
 2986|       |      // place is faster per operation than inserting or even doubling the size
 2987|       |      // of the table, so we actually afford to reclaim even less space from a
 2988|       |      // resize-in-place.  The decision is to rehash in place if we can reclaim
 2989|       |      // at about 1/8th of the usable capacity (specifically 3/28 of the
 2990|       |      // capacity) which means that the total cost of rehashing will be a small
 2991|       |      // fraction of the total work.
 2992|       |      //
 2993|       |      // Here is output of an experiment using the BM_CacheInSteadyState
 2994|       |      // benchmark running the old case (where we rehash-in-place only if we can
 2995|       |      // reclaim at least 7/16*capacity) vs. this code (which rehashes in place
 2996|       |      // if we can recover 3/32*capacity).
 2997|       |      //
 2998|       |      // Note that although in the worst-case number of rehashes jumped up from
 2999|       |      // 15 to 190, but the number of operations per second is almost the same.
 3000|       |      //
 3001|       |      // Abridged output of running BM_CacheInSteadyState benchmark from
 3002|       |      // raw_hash_set_benchmark.   N is the number of insert/erase operations.
 3003|       |      //
 3004|       |      //      | OLD (recover >= 7/16        | NEW (recover >= 3/32)
 3005|       |      // size |    N/s LoadFactor NRehashes |    N/s LoadFactor NRehashes
 3006|       |      //  448 | 145284       0.44        18 | 140118       0.44        19
 3007|       |      //  493 | 152546       0.24        11 | 151417       0.48        28
 3008|       |      //  538 | 151439       0.26        11 | 151152       0.53        38
 3009|       |      //  583 | 151765       0.28        11 | 150572       0.57        50
 3010|       |      //  628 | 150241       0.31        11 | 150853       0.61        66
 3011|       |      //  672 | 149602       0.33        12 | 150110       0.66        90
 3012|       |      //  717 | 149998       0.35        12 | 149531       0.70       129
 3013|       |      //  762 | 149836       0.37        13 | 148559       0.74       190
 3014|       |      //  807 | 149736       0.39        14 | 151107       0.39        14
 3015|       |      //  852 | 150204       0.42        15 | 151019       0.42        15
 3016|      0|      drop_deletes_without_resize();
 3017|     12|    } else {
 3018|       |      // Otherwise grow the container.
 3019|     12|      resize(NextCapacity(cap));
 3020|     12|    }
 3021|     12|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE4sizeEv:
 2287|      2|  size_t size() const { return common().size(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE15set_growth_leftEm:
 3182|     95|  void set_growth_left(size_t gl) { return common().set_growth_left(gl); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE10emplace_atIJRKPS6_EEEvmDpOT_:
 3151|     95|  void emplace_at(size_t i, Args&&... args) {
 3152|     95|    construct(slot_array() + i, std::forward<Args>(args)...);
 3153|       |
 3154|       |    assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) ==
 3155|     95|               iterator_at(i) &&
 3156|     95|           "constructed value does not match the lookup key");
 3157|     95|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE9constructIJRKPS6_EEEvPS8_DpOT_:
 2851|     95|  inline void construct(slot_type* slot, Args&&... args) {
 2852|     95|    PolicyTraits::construct(&alloc_ref(), slot, std::forward<Args>(args)...);
 2853|     95|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE6insertIS6_TnNSB_9enable_ifIXsr4absl11disjunctionINSB_14is_convertibleIRKT_S6_EENSE_22SameAsElementReferenceISK_EEEE5valueEiE4typeELi0ETnNSG_IXsr14IsDecomposableISK_EE5valueEiE4typeELi0EEENSB_4pairINSE_8iteratorEbEESK_:
 2339|    504|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2340|    504|    return emplace(value);
 2341|    504|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE7emplaceIJRKS6_ETnNSB_9enable_ifIXsr14IsDecomposableIDpT_EE5valueEiE4typeELi0EEENSB_4pairINSE_8iteratorEbEEDpOSJ_:
 2422|    504|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2423|    504|    return PolicyTraits::apply(EmplaceDecomposable{*this},
 2424|    504|                               std::forward<Args>(args)...);
 2425|    504|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE19EmplaceDecomposableclIS6_JRKS6_EEENSB_4pairINSE_8iteratorEbEERKT_DpOT0_:
 2822|    504|    std::pair<iterator, bool> operator()(const K& key, Args&&... args) const {
 2823|    504|      auto res = s.find_or_prepare_insert(key);
 2824|    504|      if (res.second) {
  ------------------
  |  Branch (2824:11): [True: 504, False: 0]
  ------------------
 2825|    504|        s.emplace_at(res.first, std::forward<Args>(args)...);
 2826|    504|      }
 2827|    504|      return {s.iterator_at(res.first), res.second};
 2828|    504|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE22find_or_prepare_insertIS6_EENSB_4pairImbEERKT_:
 3086|    504|  std::pair<size_t, bool> find_or_prepare_insert(const K& key) {
 3087|    504|    prefetch_heap_block();
 3088|    504|    auto hash = hash_ref()(key);
 3089|    504|    auto seq = probe(common(), hash);
 3090|    504|    const ctrl_t* ctrl = control();
 3091|    546|    while (true) {
  ------------------
  |  Branch (3091:12): [True: 546, Folded]
  ------------------
 3092|    546|      Group g{ctrl + seq.offset()};
 3093|    546|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (3093:23): [True: 51, False: 546]
  ------------------
 3094|     51|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|     51|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 51]
  |  |  |  Branch (179:48): [Folded, False: 51]
  |  |  |  Branch (179:57): [True: 0, False: 51]
  |  |  ------------------
  ------------------
 3095|     51|                EqualElement<K>{key, eq_ref()},
 3096|     51|                PolicyTraits::element(slot_array() + seq.offset(i)))))
 3097|      0|          return {seq.offset(i), false};
 3098|     51|      }
 3099|    546|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) break;
  ------------------
  |  |  179|    546|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 504, False: 42]
  |  |  |  Branch (179:48): [Folded, False: 546]
  |  |  |  Branch (179:57): [True: 504, False: 42]
  |  |  ------------------
  ------------------
 3100|     42|      seq.next();
 3101|     42|      assert(seq.index() <= capacity() && "full table!");
 3102|     42|    }
 3103|    504|    return {prepare_insert(hash), true};
 3104|    504|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE14prepare_insertEm:
 3110|    504|  size_t prepare_insert(size_t hash) ABSL_ATTRIBUTE_NOINLINE {
 3111|    504|    const bool rehash_for_bug_detection =
 3112|    504|        common().should_rehash_for_bug_detection_on_insert();
 3113|    504|    if (rehash_for_bug_detection) {
  ------------------
  |  Branch (3113:9): [True: 0, False: 504]
  ------------------
 3114|       |      // Move to a different heap allocation in order to detect bugs.
 3115|      0|      const size_t cap = capacity();
 3116|      0|      resize(growth_left() > 0 ? cap : NextCapacity(cap));
  ------------------
  |  Branch (3116:14): [True: 0, False: 0]
  ------------------
 3117|      0|    }
 3118|    504|    auto target = find_first_non_full(common(), hash);
 3119|    504|    if (!rehash_for_bug_detection &&
  ------------------
  |  Branch (3119:9): [True: 504, False: 0]
  ------------------
 3120|    504|        ABSL_PREDICT_FALSE(growth_left() == 0 &&
  ------------------
  |  |  178|    514|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 10, False: 494]
  |  |  |  Branch (178:49): [Folded, False: 504]
  |  |  |  Branch (178:59): [True: 10, False: 494]
  |  |  |  Branch (178:59): [True: 10, False: 0]
  |  |  ------------------
  ------------------
 3121|    504|                           !IsDeleted(control()[target.offset]))) {
 3122|     10|      size_t old_capacity = capacity();
 3123|     10|      rehash_and_grow_if_necessary();
 3124|       |      // NOTE: It is safe to use `FindFirstNonFullAfterResize`.
 3125|       |      // `FindFirstNonFullAfterResize` must be called right after resize.
 3126|       |      // `rehash_and_grow_if_necessary` may *not* call `resize`
 3127|       |      // and perform `drop_deletes_without_resize` instead. But this
 3128|       |      // could happen only on big tables.
 3129|       |      // For big tables `FindFirstNonFullAfterResize` will always
 3130|       |      // fallback to normal `find_first_non_full`, so it is safe to use it.
 3131|     10|      target = HashSetResizeHelper::FindFirstNonFullAfterResize(
 3132|     10|          common(), old_capacity, hash);
 3133|     10|    }
 3134|    504|    common().increment_size();
 3135|    504|    set_growth_left(growth_left() - IsEmpty(control()[target.offset]));
 3136|    504|    SetCtrl(common(), target.offset, H2(hash), sizeof(slot_type));
 3137|    504|    common().maybe_increment_generation_on_insert();
 3138|    504|    infoz().RecordInsert(hash, target.probe_length);
 3139|    504|    return target.offset;
 3140|    504|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE6resizeEm:
 2905|     10|  ABSL_ATTRIBUTE_NOINLINE void resize(size_t new_capacity) {
 2906|     10|    assert(IsValidCapacity(new_capacity));
 2907|     10|    HashSetResizeHelper resize_helper(common());
 2908|     10|    auto* old_slots = slot_array();
 2909|     10|    common().set_capacity(new_capacity);
 2910|       |    // Note that `InitializeSlots` does different number initialization steps
 2911|       |    // depending on the values of `transfer_uses_memcpy` and capacities.
 2912|       |    // Refer to the comment in `InitializeSlots` for more details.
 2913|     10|    const bool grow_single_group =
 2914|     10|        resize_helper.InitializeSlots<CharAlloc, sizeof(slot_type),
 2915|     10|                                      PolicyTraits::transfer_uses_memcpy(),
 2916|     10|                                      alignof(slot_type)>(
 2917|     10|            common(), const_cast<std::remove_const_t<slot_type>*>(old_slots),
 2918|     10|            CharAlloc(alloc_ref()));
 2919|       |
 2920|     10|    if (resize_helper.old_capacity() == 0) {
  ------------------
  |  Branch (2920:9): [True: 1, False: 9]
  ------------------
 2921|       |      // InitializeSlots did all the work including infoz().RecordRehash().
 2922|      1|      return;
 2923|      1|    }
 2924|       |
 2925|      9|    if (grow_single_group) {
  ------------------
  |  Branch (2925:9): [True: 3, False: 6]
  ------------------
 2926|      3|      if (PolicyTraits::transfer_uses_memcpy()) {
  ------------------
  |  Branch (2926:11): [Folded, False: 3]
  ------------------
 2927|       |        // InitializeSlots did all the work.
 2928|      0|        return;
 2929|      0|      }
 2930|       |      // We want GrowSizeIntoSingleGroup to be called here in order to make
 2931|       |      // InitializeSlots not depend on PolicyTraits.
 2932|      3|      resize_helper.GrowSizeIntoSingleGroup<PolicyTraits>(common(), alloc_ref(),
 2933|      3|                                                          old_slots);
 2934|      6|    } else {
 2935|       |      // InitializeSlots prepares control bytes to correspond to empty table.
 2936|      6|      auto* new_slots = slot_array();
 2937|      6|      size_t total_probe_length = 0;
 2938|  1.00k|      for (size_t i = 0; i != resize_helper.old_capacity(); ++i) {
  ------------------
  |  Branch (2938:26): [True: 1.00k, False: 6]
  ------------------
 2939|  1.00k|        if (IsFull(resize_helper.old_ctrl()[i])) {
  ------------------
  |  Branch (2939:13): [True: 882, False: 120]
  ------------------
 2940|    882|          size_t hash = PolicyTraits::apply(
 2941|    882|              HashElement{hash_ref()}, PolicyTraits::element(old_slots + i));
 2942|    882|          auto target = find_first_non_full(common(), hash);
 2943|    882|          size_t new_i = target.offset;
 2944|    882|          total_probe_length += target.probe_length;
 2945|    882|          SetCtrl(common(), new_i, H2(hash), sizeof(slot_type));
 2946|    882|          transfer(new_slots + new_i, old_slots + i);
 2947|    882|        }
 2948|  1.00k|      }
 2949|      6|      infoz().RecordRehash(total_probe_length);
 2950|      6|    }
 2951|      9|    resize_helper.DeallocateOld<alignof(slot_type)>(
 2952|      9|        CharAlloc(alloc_ref()), sizeof(slot_type),
 2953|      9|        const_cast<std::remove_const_t<slot_type>*>(old_slots));
 2954|      9|  }
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper23GrowSizeIntoSingleGroupINS1_18hash_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvEENSt3__19allocatorIS8_EEEEvRNS1_12CommonFieldsERT0_PNT_9slot_typeE:
 1655|     13|                               typename PolicyTraits::slot_type* old_slots) {
 1656|     13|    assert(old_capacity_ < Group::kWidth / 2);
 1657|     13|    assert(IsGrowingIntoSingleGroupApplicable(old_capacity_, c.capacity()));
 1658|     13|    using slot_type = typename PolicyTraits::slot_type;
 1659|     13|    assert(is_single_group(c.capacity()));
 1660|       |
 1661|     13|    auto* new_slots = reinterpret_cast<slot_type*>(c.slot_array());
 1662|       |
 1663|     13|    size_t shuffle_bit = old_capacity_ / 2 + 1;
 1664|     58|    for (size_t i = 0; i < old_capacity_; ++i) {
  ------------------
  |  Branch (1664:24): [True: 45, False: 13]
  ------------------
 1665|     45|      if (IsFull(old_ctrl_[i])) {
  ------------------
  |  Branch (1665:11): [True: 45, False: 0]
  ------------------
 1666|     45|        size_t new_i = i ^ shuffle_bit;
 1667|     45|        SanitizerUnpoisonMemoryRegion(new_slots + new_i, sizeof(slot_type));
 1668|     45|        PolicyTraits::transfer(&alloc_ref, new_slots + new_i, old_slots + i);
 1669|     45|      }
 1670|     45|    }
 1671|     13|    PoisonSingleGroupEmptySlots(c, sizeof(slot_type));
 1672|     13|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE11HashElementclIS6_JRS6_EEEmRKT_DpOT0_:
 2804|    882|    size_t operator()(const K& key, Args&&...) const {
 2805|    882|      return h(key);
 2806|    882|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE8transferEPS6_SF_:
 2857|    882|  inline void transfer(slot_type* to, slot_type* from) {
 2858|    882|    PolicyTraits::transfer(&alloc_ref(), to, from);
 2859|    882|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE11growth_leftEv:
 3181|  1.00k|  size_t growth_left() const { return common().growth_left(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE28rehash_and_grow_if_necessaryEv:
 2970|     10|  void rehash_and_grow_if_necessary() {
 2971|     10|    const size_t cap = capacity();
 2972|     10|    if (cap > Group::kWidth &&
  ------------------
  |  Branch (2972:9): [True: 5, False: 5]
  ------------------
 2973|       |        // Do these calculations in 64-bit to avoid overflow.
 2974|      5|        size() * uint64_t{32} <= cap * uint64_t{25}) {
  ------------------
  |  Branch (2974:9): [True: 0, False: 5]
  ------------------
 2975|       |      // Squash DELETED without growing if there is enough capacity.
 2976|       |      //
 2977|       |      // Rehash in place if the current size is <= 25/32 of capacity.
 2978|       |      // Rationale for such a high factor: 1) drop_deletes_without_resize() is
 2979|       |      // faster than resize, and 2) it takes quite a bit of work to add
 2980|       |      // tombstones.  In the worst case, seems to take approximately 4
 2981|       |      // insert/erase pairs to create a single tombstone and so if we are
 2982|       |      // rehashing because of tombstones, we can afford to rehash-in-place as
 2983|       |      // long as we are reclaiming at least 1/8 the capacity without doing more
 2984|       |      // than 2X the work.  (Where "work" is defined to be size() for rehashing
 2985|       |      // or rehashing in place, and 1 for an insert or erase.)  But rehashing in
 2986|       |      // place is faster per operation than inserting or even doubling the size
 2987|       |      // of the table, so we actually afford to reclaim even less space from a
 2988|       |      // resize-in-place.  The decision is to rehash in place if we can reclaim
 2989|       |      // at about 1/8th of the usable capacity (specifically 3/28 of the
 2990|       |      // capacity) which means that the total cost of rehashing will be a small
 2991|       |      // fraction of the total work.
 2992|       |      //
 2993|       |      // Here is output of an experiment using the BM_CacheInSteadyState
 2994|       |      // benchmark running the old case (where we rehash-in-place only if we can
 2995|       |      // reclaim at least 7/16*capacity) vs. this code (which rehashes in place
 2996|       |      // if we can recover 3/32*capacity).
 2997|       |      //
 2998|       |      // Note that although in the worst-case number of rehashes jumped up from
 2999|       |      // 15 to 190, but the number of operations per second is almost the same.
 3000|       |      //
 3001|       |      // Abridged output of running BM_CacheInSteadyState benchmark from
 3002|       |      // raw_hash_set_benchmark.   N is the number of insert/erase operations.
 3003|       |      //
 3004|       |      //      | OLD (recover >= 7/16        | NEW (recover >= 3/32)
 3005|       |      // size |    N/s LoadFactor NRehashes |    N/s LoadFactor NRehashes
 3006|       |      //  448 | 145284       0.44        18 | 140118       0.44        19
 3007|       |      //  493 | 152546       0.24        11 | 151417       0.48        28
 3008|       |      //  538 | 151439       0.26        11 | 151152       0.53        38
 3009|       |      //  583 | 151765       0.28        11 | 150572       0.57        50
 3010|       |      //  628 | 150241       0.31        11 | 150853       0.61        66
 3011|       |      //  672 | 149602       0.33        12 | 150110       0.66        90
 3012|       |      //  717 | 149998       0.35        12 | 149531       0.70       129
 3013|       |      //  762 | 149836       0.37        13 | 148559       0.74       190
 3014|       |      //  807 | 149736       0.39        14 | 151107       0.39        14
 3015|       |      //  852 | 150204       0.42        15 | 151019       0.42        15
 3016|      0|      drop_deletes_without_resize();
 3017|     10|    } else {
 3018|       |      // Otherwise grow the container.
 3019|     10|      resize(NextCapacity(cap));
 3020|     10|    }
 3021|     10|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE4sizeEv:
 2287|      5|  size_t size() const { return common().size(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE15set_growth_leftEm:
 3182|    504|  void set_growth_left(size_t gl) { return common().set_growth_left(gl); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE10emplace_atIJRKS6_EEEvmDpOT_:
 3151|    504|  void emplace_at(size_t i, Args&&... args) {
 3152|    504|    construct(slot_array() + i, std::forward<Args>(args)...);
 3153|       |
 3154|       |    assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) ==
 3155|    504|               iterator_at(i) &&
 3156|    504|           "constructed value does not match the lookup key");
 3157|    504|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE9constructIJRKS6_EEEvPS6_DpOT_:
 2851|    504|  inline void construct(slot_type* slot, Args&&... args) {
 2852|    504|    PolicyTraits::construct(&alloc_ref(), slot, std::forward<Args>(args)...);
 2853|    504|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE6insertIS6_TnNSB_9enable_ifIXsr4absl11disjunctionINSB_14is_convertibleIRKT_S6_EENSE_22SameAsElementReferenceISK_EEEE5valueEiE4typeELi0ETnNSG_IXsr14IsDecomposableISK_EE5valueEiE4typeELi0EEENSB_4pairINSE_8iteratorEbEESK_:
 2339|    688|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2340|    688|    return emplace(value);
 2341|    688|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE7emplaceIJRKS6_ETnNSB_9enable_ifIXsr14IsDecomposableIDpT_EE5valueEiE4typeELi0EEENSB_4pairINSE_8iteratorEbEEDpOSJ_:
 2422|    688|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2423|    688|    return PolicyTraits::apply(EmplaceDecomposable{*this},
 2424|    688|                               std::forward<Args>(args)...);
 2425|    688|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE19EmplaceDecomposableclIS6_JRKS6_EEENSB_4pairINSE_8iteratorEbEERKT_DpOT0_:
 2822|    688|    std::pair<iterator, bool> operator()(const K& key, Args&&... args) const {
 2823|    688|      auto res = s.find_or_prepare_insert(key);
 2824|    688|      if (res.second) {
  ------------------
  |  Branch (2824:11): [True: 688, False: 0]
  ------------------
 2825|    688|        s.emplace_at(res.first, std::forward<Args>(args)...);
 2826|    688|      }
 2827|    688|      return {s.iterator_at(res.first), res.second};
 2828|    688|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE22find_or_prepare_insertIS6_EENSB_4pairImbEERKT_:
 3086|    688|  std::pair<size_t, bool> find_or_prepare_insert(const K& key) {
 3087|    688|    prefetch_heap_block();
 3088|    688|    auto hash = hash_ref()(key);
 3089|    688|    auto seq = probe(common(), hash);
 3090|    688|    const ctrl_t* ctrl = control();
 3091|    731|    while (true) {
  ------------------
  |  Branch (3091:12): [True: 731, Folded]
  ------------------
 3092|    731|      Group g{ctrl + seq.offset()};
 3093|    731|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (3093:23): [True: 56, False: 731]
  ------------------
 3094|     56|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|     56|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 56]
  |  |  |  Branch (179:48): [Folded, False: 56]
  |  |  |  Branch (179:57): [True: 0, False: 56]
  |  |  ------------------
  ------------------
 3095|     56|                EqualElement<K>{key, eq_ref()},
 3096|     56|                PolicyTraits::element(slot_array() + seq.offset(i)))))
 3097|      0|          return {seq.offset(i), false};
 3098|     56|      }
 3099|    731|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) break;
  ------------------
  |  |  179|    731|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 688, False: 43]
  |  |  |  Branch (179:48): [Folded, False: 731]
  |  |  |  Branch (179:57): [True: 688, False: 43]
  |  |  ------------------
  ------------------
 3100|     43|      seq.next();
 3101|     43|      assert(seq.index() <= capacity() && "full table!");
 3102|     43|    }
 3103|    688|    return {prepare_insert(hash), true};
 3104|    688|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE8hash_refEv:
 3202|  1.55k|  hasher& hash_ref() { return settings_.template get<1>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE12EqualElementIS6_EclIS6_JRS6_EEEbRKT_DpOT0_:
 2813|     56|    bool operator()(const K2& lhs, Args&&...) const {
 2814|     56|      return eq(lhs, rhs);
 2815|     56|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE14prepare_insertEm:
 3110|    688|  size_t prepare_insert(size_t hash) ABSL_ATTRIBUTE_NOINLINE {
 3111|    688|    const bool rehash_for_bug_detection =
 3112|    688|        common().should_rehash_for_bug_detection_on_insert();
 3113|    688|    if (rehash_for_bug_detection) {
  ------------------
  |  Branch (3113:9): [True: 0, False: 688]
  ------------------
 3114|       |      // Move to a different heap allocation in order to detect bugs.
 3115|      0|      const size_t cap = capacity();
 3116|      0|      resize(growth_left() > 0 ? cap : NextCapacity(cap));
  ------------------
  |  Branch (3116:14): [True: 0, False: 0]
  ------------------
 3117|      0|    }
 3118|    688|    auto target = find_first_non_full(common(), hash);
 3119|    688|    if (!rehash_for_bug_detection &&
  ------------------
  |  Branch (3119:9): [True: 688, False: 0]
  ------------------
 3120|    688|        ABSL_PREDICT_FALSE(growth_left() == 0 &&
  ------------------
  |  |  178|    712|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 24, False: 664]
  |  |  |  Branch (178:49): [Folded, False: 688]
  |  |  |  Branch (178:59): [True: 24, False: 664]
  |  |  |  Branch (178:59): [True: 24, False: 0]
  |  |  ------------------
  ------------------
 3121|    688|                           !IsDeleted(control()[target.offset]))) {
 3122|     24|      size_t old_capacity = capacity();
 3123|     24|      rehash_and_grow_if_necessary();
 3124|       |      // NOTE: It is safe to use `FindFirstNonFullAfterResize`.
 3125|       |      // `FindFirstNonFullAfterResize` must be called right after resize.
 3126|       |      // `rehash_and_grow_if_necessary` may *not* call `resize`
 3127|       |      // and perform `drop_deletes_without_resize` instead. But this
 3128|       |      // could happen only on big tables.
 3129|       |      // For big tables `FindFirstNonFullAfterResize` will always
 3130|       |      // fallback to normal `find_first_non_full`, so it is safe to use it.
 3131|     24|      target = HashSetResizeHelper::FindFirstNonFullAfterResize(
 3132|     24|          common(), old_capacity, hash);
 3133|     24|    }
 3134|    688|    common().increment_size();
 3135|    688|    set_growth_left(growth_left() - IsEmpty(control()[target.offset]));
 3136|    688|    SetCtrl(common(), target.offset, H2(hash), sizeof(slot_type));
 3137|    688|    common().maybe_increment_generation_on_insert();
 3138|    688|    infoz().RecordInsert(hash, target.probe_length);
 3139|    688|    return target.offset;
 3140|    688|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE6resizeEm:
 2905|     24|  ABSL_ATTRIBUTE_NOINLINE void resize(size_t new_capacity) {
 2906|     24|    assert(IsValidCapacity(new_capacity));
 2907|     24|    HashSetResizeHelper resize_helper(common());
 2908|     24|    auto* old_slots = slot_array();
 2909|     24|    common().set_capacity(new_capacity);
 2910|       |    // Note that `InitializeSlots` does different number initialization steps
 2911|       |    // depending on the values of `transfer_uses_memcpy` and capacities.
 2912|       |    // Refer to the comment in `InitializeSlots` for more details.
 2913|     24|    const bool grow_single_group =
 2914|     24|        resize_helper.InitializeSlots<CharAlloc, sizeof(slot_type),
 2915|     24|                                      PolicyTraits::transfer_uses_memcpy(),
 2916|     24|                                      alignof(slot_type)>(
 2917|     24|            common(), const_cast<std::remove_const_t<slot_type>*>(old_slots),
 2918|     24|            CharAlloc(alloc_ref()));
 2919|       |
 2920|     24|    if (resize_helper.old_capacity() == 0) {
  ------------------
  |  Branch (2920:9): [True: 4, False: 20]
  ------------------
 2921|       |      // InitializeSlots did all the work including infoz().RecordRehash().
 2922|      4|      return;
 2923|      4|    }
 2924|       |
 2925|     20|    if (grow_single_group) {
  ------------------
  |  Branch (2925:9): [True: 10, False: 10]
  ------------------
 2926|     10|      if (PolicyTraits::transfer_uses_memcpy()) {
  ------------------
  |  Branch (2926:11): [Folded, False: 10]
  ------------------
 2927|       |        // InitializeSlots did all the work.
 2928|      0|        return;
 2929|      0|      }
 2930|       |      // We want GrowSizeIntoSingleGroup to be called here in order to make
 2931|       |      // InitializeSlots not depend on PolicyTraits.
 2932|     10|      resize_helper.GrowSizeIntoSingleGroup<PolicyTraits>(common(), alloc_ref(),
 2933|     10|                                                          old_slots);
 2934|     10|    } else {
 2935|       |      // InitializeSlots prepares control bytes to correspond to empty table.
 2936|     10|      auto* new_slots = slot_array();
 2937|     10|      size_t total_probe_length = 0;
 2938|    992|      for (size_t i = 0; i != resize_helper.old_capacity(); ++i) {
  ------------------
  |  Branch (2938:26): [True: 982, False: 10]
  ------------------
 2939|    982|        if (IsFull(resize_helper.old_ctrl()[i])) {
  ------------------
  |  Branch (2939:13): [True: 868, False: 114]
  ------------------
 2940|    868|          size_t hash = PolicyTraits::apply(
 2941|    868|              HashElement{hash_ref()}, PolicyTraits::element(old_slots + i));
 2942|    868|          auto target = find_first_non_full(common(), hash);
 2943|    868|          size_t new_i = target.offset;
 2944|    868|          total_probe_length += target.probe_length;
 2945|    868|          SetCtrl(common(), new_i, H2(hash), sizeof(slot_type));
 2946|    868|          transfer(new_slots + new_i, old_slots + i);
 2947|    868|        }
 2948|    982|      }
 2949|     10|      infoz().RecordRehash(total_probe_length);
 2950|     10|    }
 2951|     20|    resize_helper.DeallocateOld<alignof(slot_type)>(
 2952|     20|        CharAlloc(alloc_ref()), sizeof(slot_type),
 2953|     20|        const_cast<std::remove_const_t<slot_type>*>(old_slots));
 2954|     20|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE11HashElementclIS6_JRS6_EEEmRKT_DpOT0_:
 2804|    868|    size_t operator()(const K& key, Args&&...) const {
 2805|    868|      return h(key);
 2806|    868|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE8transferEPS6_SF_:
 2857|    868|  inline void transfer(slot_type* to, slot_type* from) {
 2858|    868|    PolicyTraits::transfer(&alloc_ref(), to, from);
 2859|    868|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE11growth_leftEv:
 3181|  1.37k|  size_t growth_left() const { return common().growth_left(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE28rehash_and_grow_if_necessaryEv:
 2970|     24|  void rehash_and_grow_if_necessary() {
 2971|     24|    const size_t cap = capacity();
 2972|     24|    if (cap > Group::kWidth &&
  ------------------
  |  Branch (2972:9): [True: 8, False: 16]
  ------------------
 2973|       |        // Do these calculations in 64-bit to avoid overflow.
 2974|      8|        size() * uint64_t{32} <= cap * uint64_t{25}) {
  ------------------
  |  Branch (2974:9): [True: 0, False: 8]
  ------------------
 2975|       |      // Squash DELETED without growing if there is enough capacity.
 2976|       |      //
 2977|       |      // Rehash in place if the current size is <= 25/32 of capacity.
 2978|       |      // Rationale for such a high factor: 1) drop_deletes_without_resize() is
 2979|       |      // faster than resize, and 2) it takes quite a bit of work to add
 2980|       |      // tombstones.  In the worst case, seems to take approximately 4
 2981|       |      // insert/erase pairs to create a single tombstone and so if we are
 2982|       |      // rehashing because of tombstones, we can afford to rehash-in-place as
 2983|       |      // long as we are reclaiming at least 1/8 the capacity without doing more
 2984|       |      // than 2X the work.  (Where "work" is defined to be size() for rehashing
 2985|       |      // or rehashing in place, and 1 for an insert or erase.)  But rehashing in
 2986|       |      // place is faster per operation than inserting or even doubling the size
 2987|       |      // of the table, so we actually afford to reclaim even less space from a
 2988|       |      // resize-in-place.  The decision is to rehash in place if we can reclaim
 2989|       |      // at about 1/8th of the usable capacity (specifically 3/28 of the
 2990|       |      // capacity) which means that the total cost of rehashing will be a small
 2991|       |      // fraction of the total work.
 2992|       |      //
 2993|       |      // Here is output of an experiment using the BM_CacheInSteadyState
 2994|       |      // benchmark running the old case (where we rehash-in-place only if we can
 2995|       |      // reclaim at least 7/16*capacity) vs. this code (which rehashes in place
 2996|       |      // if we can recover 3/32*capacity).
 2997|       |      //
 2998|       |      // Note that although in the worst-case number of rehashes jumped up from
 2999|       |      // 15 to 190, but the number of operations per second is almost the same.
 3000|       |      //
 3001|       |      // Abridged output of running BM_CacheInSteadyState benchmark from
 3002|       |      // raw_hash_set_benchmark.   N is the number of insert/erase operations.
 3003|       |      //
 3004|       |      //      | OLD (recover >= 7/16        | NEW (recover >= 3/32)
 3005|       |      // size |    N/s LoadFactor NRehashes |    N/s LoadFactor NRehashes
 3006|       |      //  448 | 145284       0.44        18 | 140118       0.44        19
 3007|       |      //  493 | 152546       0.24        11 | 151417       0.48        28
 3008|       |      //  538 | 151439       0.26        11 | 151152       0.53        38
 3009|       |      //  583 | 151765       0.28        11 | 150572       0.57        50
 3010|       |      //  628 | 150241       0.31        11 | 150853       0.61        66
 3011|       |      //  672 | 149602       0.33        12 | 150110       0.66        90
 3012|       |      //  717 | 149998       0.35        12 | 149531       0.70       129
 3013|       |      //  762 | 149836       0.37        13 | 148559       0.74       190
 3014|       |      //  807 | 149736       0.39        14 | 151107       0.39        14
 3015|       |      //  852 | 150204       0.42        15 | 151019       0.42        15
 3016|      0|      drop_deletes_without_resize();
 3017|     24|    } else {
 3018|       |      // Otherwise grow the container.
 3019|     24|      resize(NextCapacity(cap));
 3020|     24|    }
 3021|     24|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE4sizeEv:
 2287|      8|  size_t size() const { return common().size(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE15set_growth_leftEm:
 3182|    688|  void set_growth_left(size_t gl) { return common().set_growth_left(gl); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE10emplace_atIJRKS6_EEEvmDpOT_:
 3151|    688|  void emplace_at(size_t i, Args&&... args) {
 3152|    688|    construct(slot_array() + i, std::forward<Args>(args)...);
 3153|       |
 3154|       |    assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) ==
 3155|    688|               iterator_at(i) &&
 3156|    688|           "constructed value does not match the lookup key");
 3157|    688|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE9constructIJRKS6_EEEvPS6_DpOT_:
 2851|    688|  inline void construct(slot_type* slot, Args&&... args) {
 2852|    688|    PolicyTraits::construct(&alloc_ref(), slot, std::forward<Args>(args)...);
 2853|    688|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE6insertIS8_TnNSF_9enable_ifIXsr4absl11disjunctionINSF_14is_convertibleIRKT_S8_EENSI_22SameAsElementReferenceISO_EEEE5valueEiE4typeELi0ETnNSK_IXsr14IsDecomposableISO_EE5valueEiE4typeELi0EEENSF_4pairINSI_8iteratorEbEESO_:
 2339|      4|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2340|      4|    return emplace(value);
 2341|      4|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE7emplaceIJRKS8_ETnNSF_9enable_ifIXsr14IsDecomposableIDpT_EE5valueEiE4typeELi0EEENSF_4pairINSI_8iteratorEbEEDpOSN_:
 2422|      4|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2423|      4|    return PolicyTraits::apply(EmplaceDecomposable{*this},
 2424|      4|                               std::forward<Args>(args)...);
 2425|      4|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE19EmplaceDecomposableclIS8_JRKS8_EEENSF_4pairINSI_8iteratorEbEERKT_DpOT0_:
 2822|      4|    std::pair<iterator, bool> operator()(const K& key, Args&&... args) const {
 2823|      4|      auto res = s.find_or_prepare_insert(key);
 2824|      4|      if (res.second) {
  ------------------
  |  Branch (2824:11): [True: 4, False: 0]
  ------------------
 2825|      4|        s.emplace_at(res.first, std::forward<Args>(args)...);
 2826|      4|      }
 2827|      4|      return {s.iterator_at(res.first), res.second};
 2828|      4|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE22find_or_prepare_insertIS8_EENSF_4pairImbEERKT_:
 3086|      4|  std::pair<size_t, bool> find_or_prepare_insert(const K& key) {
 3087|      4|    prefetch_heap_block();
 3088|      4|    auto hash = hash_ref()(key);
 3089|      4|    auto seq = probe(common(), hash);
 3090|      4|    const ctrl_t* ctrl = control();
 3091|      4|    while (true) {
  ------------------
  |  Branch (3091:12): [True: 4, Folded]
  ------------------
 3092|      4|      Group g{ctrl + seq.offset()};
 3093|      4|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (3093:23): [True: 0, False: 4]
  ------------------
 3094|      0|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 0]
  |  |  |  Branch (179:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3095|      0|                EqualElement<K>{key, eq_ref()},
 3096|      0|                PolicyTraits::element(slot_array() + seq.offset(i)))))
 3097|      0|          return {seq.offset(i), false};
 3098|      0|      }
 3099|      4|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) break;
  ------------------
  |  |  179|      4|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 4, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 4]
  |  |  |  Branch (179:57): [True: 4, False: 0]
  |  |  ------------------
  ------------------
 3100|      0|      seq.next();
 3101|      0|      assert(seq.index() <= capacity() && "full table!");
 3102|      0|    }
 3103|      4|    return {prepare_insert(hash), true};
 3104|      4|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE14prepare_insertEm:
 3110|      4|  size_t prepare_insert(size_t hash) ABSL_ATTRIBUTE_NOINLINE {
 3111|      4|    const bool rehash_for_bug_detection =
 3112|      4|        common().should_rehash_for_bug_detection_on_insert();
 3113|      4|    if (rehash_for_bug_detection) {
  ------------------
  |  Branch (3113:9): [True: 0, False: 4]
  ------------------
 3114|       |      // Move to a different heap allocation in order to detect bugs.
 3115|      0|      const size_t cap = capacity();
 3116|      0|      resize(growth_left() > 0 ? cap : NextCapacity(cap));
  ------------------
  |  Branch (3116:14): [True: 0, False: 0]
  ------------------
 3117|      0|    }
 3118|      4|    auto target = find_first_non_full(common(), hash);
 3119|      4|    if (!rehash_for_bug_detection &&
  ------------------
  |  Branch (3119:9): [True: 4, False: 0]
  ------------------
 3120|      4|        ABSL_PREDICT_FALSE(growth_left() == 0 &&
  ------------------
  |  |  178|      7|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 3, False: 1]
  |  |  |  Branch (178:49): [Folded, False: 4]
  |  |  |  Branch (178:59): [True: 3, False: 1]
  |  |  |  Branch (178:59): [True: 3, False: 0]
  |  |  ------------------
  ------------------
 3121|      4|                           !IsDeleted(control()[target.offset]))) {
 3122|      3|      size_t old_capacity = capacity();
 3123|      3|      rehash_and_grow_if_necessary();
 3124|       |      // NOTE: It is safe to use `FindFirstNonFullAfterResize`.
 3125|       |      // `FindFirstNonFullAfterResize` must be called right after resize.
 3126|       |      // `rehash_and_grow_if_necessary` may *not* call `resize`
 3127|       |      // and perform `drop_deletes_without_resize` instead. But this
 3128|       |      // could happen only on big tables.
 3129|       |      // For big tables `FindFirstNonFullAfterResize` will always
 3130|       |      // fallback to normal `find_first_non_full`, so it is safe to use it.
 3131|      3|      target = HashSetResizeHelper::FindFirstNonFullAfterResize(
 3132|      3|          common(), old_capacity, hash);
 3133|      3|    }
 3134|      4|    common().increment_size();
 3135|      4|    set_growth_left(growth_left() - IsEmpty(control()[target.offset]));
 3136|      4|    SetCtrl(common(), target.offset, H2(hash), sizeof(slot_type));
 3137|      4|    common().maybe_increment_generation_on_insert();
 3138|      4|    infoz().RecordInsert(hash, target.probe_length);
 3139|      4|    return target.offset;
 3140|      4|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE6resizeEm:
 2905|      3|  ABSL_ATTRIBUTE_NOINLINE void resize(size_t new_capacity) {
 2906|      3|    assert(IsValidCapacity(new_capacity));
 2907|      3|    HashSetResizeHelper resize_helper(common());
 2908|      3|    auto* old_slots = slot_array();
 2909|      3|    common().set_capacity(new_capacity);
 2910|       |    // Note that `InitializeSlots` does different number initialization steps
 2911|       |    // depending on the values of `transfer_uses_memcpy` and capacities.
 2912|       |    // Refer to the comment in `InitializeSlots` for more details.
 2913|      3|    const bool grow_single_group =
 2914|      3|        resize_helper.InitializeSlots<CharAlloc, sizeof(slot_type),
 2915|      3|                                      PolicyTraits::transfer_uses_memcpy(),
 2916|      3|                                      alignof(slot_type)>(
 2917|      3|            common(), const_cast<std::remove_const_t<slot_type>*>(old_slots),
 2918|      3|            CharAlloc(alloc_ref()));
 2919|       |
 2920|      3|    if (resize_helper.old_capacity() == 0) {
  ------------------
  |  Branch (2920:9): [True: 1, False: 2]
  ------------------
 2921|       |      // InitializeSlots did all the work including infoz().RecordRehash().
 2922|      1|      return;
 2923|      1|    }
 2924|       |
 2925|      2|    if (grow_single_group) {
  ------------------
  |  Branch (2925:9): [True: 2, False: 0]
  ------------------
 2926|      2|      if (PolicyTraits::transfer_uses_memcpy()) {
  ------------------
  |  Branch (2926:11): [Folded, False: 2]
  ------------------
 2927|       |        // InitializeSlots did all the work.
 2928|      0|        return;
 2929|      0|      }
 2930|       |      // We want GrowSizeIntoSingleGroup to be called here in order to make
 2931|       |      // InitializeSlots not depend on PolicyTraits.
 2932|      2|      resize_helper.GrowSizeIntoSingleGroup<PolicyTraits>(common(), alloc_ref(),
 2933|      2|                                                          old_slots);
 2934|      2|    } else {
 2935|       |      // InitializeSlots prepares control bytes to correspond to empty table.
 2936|      0|      auto* new_slots = slot_array();
 2937|      0|      size_t total_probe_length = 0;
 2938|      0|      for (size_t i = 0; i != resize_helper.old_capacity(); ++i) {
  ------------------
  |  Branch (2938:26): [True: 0, False: 0]
  ------------------
 2939|      0|        if (IsFull(resize_helper.old_ctrl()[i])) {
  ------------------
  |  Branch (2939:13): [True: 0, False: 0]
  ------------------
 2940|      0|          size_t hash = PolicyTraits::apply(
 2941|      0|              HashElement{hash_ref()}, PolicyTraits::element(old_slots + i));
 2942|      0|          auto target = find_first_non_full(common(), hash);
 2943|      0|          size_t new_i = target.offset;
 2944|      0|          total_probe_length += target.probe_length;
 2945|      0|          SetCtrl(common(), new_i, H2(hash), sizeof(slot_type));
 2946|      0|          transfer(new_slots + new_i, old_slots + i);
 2947|      0|        }
 2948|      0|      }
 2949|      0|      infoz().RecordRehash(total_probe_length);
 2950|      0|    }
 2951|      2|    resize_helper.DeallocateOld<alignof(slot_type)>(
 2952|      2|        CharAlloc(alloc_ref()), sizeof(slot_type),
 2953|      2|        const_cast<std::remove_const_t<slot_type>*>(old_slots));
 2954|      2|  }
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper23GrowSizeIntoSingleGroupINS1_18hash_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEEvEENSt3__19allocatorISA_EEEEvRNS1_12CommonFieldsERT0_PNT_9slot_typeE:
 1655|      2|                               typename PolicyTraits::slot_type* old_slots) {
 1656|      2|    assert(old_capacity_ < Group::kWidth / 2);
 1657|      2|    assert(IsGrowingIntoSingleGroupApplicable(old_capacity_, c.capacity()));
 1658|      2|    using slot_type = typename PolicyTraits::slot_type;
 1659|      2|    assert(is_single_group(c.capacity()));
 1660|       |
 1661|      2|    auto* new_slots = reinterpret_cast<slot_type*>(c.slot_array());
 1662|       |
 1663|      2|    size_t shuffle_bit = old_capacity_ / 2 + 1;
 1664|      6|    for (size_t i = 0; i < old_capacity_; ++i) {
  ------------------
  |  Branch (1664:24): [True: 4, False: 2]
  ------------------
 1665|      4|      if (IsFull(old_ctrl_[i])) {
  ------------------
  |  Branch (1665:11): [True: 4, False: 0]
  ------------------
 1666|      4|        size_t new_i = i ^ shuffle_bit;
 1667|      4|        SanitizerUnpoisonMemoryRegion(new_slots + new_i, sizeof(slot_type));
 1668|      4|        PolicyTraits::transfer(&alloc_ref, new_slots + new_i, old_slots + i);
 1669|      4|      }
 1670|      4|    }
 1671|      2|    PoisonSingleGroupEmptySlots(c, sizeof(slot_type));
 1672|      2|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE11growth_leftEv:
 3181|      8|  size_t growth_left() const { return common().growth_left(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE28rehash_and_grow_if_necessaryEv:
 2970|      3|  void rehash_and_grow_if_necessary() {
 2971|      3|    const size_t cap = capacity();
 2972|      3|    if (cap > Group::kWidth &&
  ------------------
  |  Branch (2972:9): [True: 0, False: 3]
  ------------------
 2973|       |        // Do these calculations in 64-bit to avoid overflow.
 2974|      0|        size() * uint64_t{32} <= cap * uint64_t{25}) {
  ------------------
  |  Branch (2974:9): [True: 0, False: 0]
  ------------------
 2975|       |      // Squash DELETED without growing if there is enough capacity.
 2976|       |      //
 2977|       |      // Rehash in place if the current size is <= 25/32 of capacity.
 2978|       |      // Rationale for such a high factor: 1) drop_deletes_without_resize() is
 2979|       |      // faster than resize, and 2) it takes quite a bit of work to add
 2980|       |      // tombstones.  In the worst case, seems to take approximately 4
 2981|       |      // insert/erase pairs to create a single tombstone and so if we are
 2982|       |      // rehashing because of tombstones, we can afford to rehash-in-place as
 2983|       |      // long as we are reclaiming at least 1/8 the capacity without doing more
 2984|       |      // than 2X the work.  (Where "work" is defined to be size() for rehashing
 2985|       |      // or rehashing in place, and 1 for an insert or erase.)  But rehashing in
 2986|       |      // place is faster per operation than inserting or even doubling the size
 2987|       |      // of the table, so we actually afford to reclaim even less space from a
 2988|       |      // resize-in-place.  The decision is to rehash in place if we can reclaim
 2989|       |      // at about 1/8th of the usable capacity (specifically 3/28 of the
 2990|       |      // capacity) which means that the total cost of rehashing will be a small
 2991|       |      // fraction of the total work.
 2992|       |      //
 2993|       |      // Here is output of an experiment using the BM_CacheInSteadyState
 2994|       |      // benchmark running the old case (where we rehash-in-place only if we can
 2995|       |      // reclaim at least 7/16*capacity) vs. this code (which rehashes in place
 2996|       |      // if we can recover 3/32*capacity).
 2997|       |      //
 2998|       |      // Note that although in the worst-case number of rehashes jumped up from
 2999|       |      // 15 to 190, but the number of operations per second is almost the same.
 3000|       |      //
 3001|       |      // Abridged output of running BM_CacheInSteadyState benchmark from
 3002|       |      // raw_hash_set_benchmark.   N is the number of insert/erase operations.
 3003|       |      //
 3004|       |      //      | OLD (recover >= 7/16        | NEW (recover >= 3/32)
 3005|       |      // size |    N/s LoadFactor NRehashes |    N/s LoadFactor NRehashes
 3006|       |      //  448 | 145284       0.44        18 | 140118       0.44        19
 3007|       |      //  493 | 152546       0.24        11 | 151417       0.48        28
 3008|       |      //  538 | 151439       0.26        11 | 151152       0.53        38
 3009|       |      //  583 | 151765       0.28        11 | 150572       0.57        50
 3010|       |      //  628 | 150241       0.31        11 | 150853       0.61        66
 3011|       |      //  672 | 149602       0.33        12 | 150110       0.66        90
 3012|       |      //  717 | 149998       0.35        12 | 149531       0.70       129
 3013|       |      //  762 | 149836       0.37        13 | 148559       0.74       190
 3014|       |      //  807 | 149736       0.39        14 | 151107       0.39        14
 3015|       |      //  852 | 150204       0.42        15 | 151019       0.42        15
 3016|      0|      drop_deletes_without_resize();
 3017|      3|    } else {
 3018|       |      // Otherwise grow the container.
 3019|      3|      resize(NextCapacity(cap));
 3020|      3|    }
 3021|      3|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE15set_growth_leftEm:
 3182|      4|  void set_growth_left(size_t gl) { return common().set_growth_left(gl); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE10emplace_atIJRKS8_EEEvmDpOT_:
 3151|      4|  void emplace_at(size_t i, Args&&... args) {
 3152|      4|    construct(slot_array() + i, std::forward<Args>(args)...);
 3153|       |
 3154|       |    assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) ==
 3155|      4|               iterator_at(i) &&
 3156|      4|           "constructed value does not match the lookup key");
 3157|      4|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE9constructIJRKS8_EEEvPS8_DpOT_:
 2851|      4|  inline void construct(slot_type* slot, Args&&... args) {
 2852|      4|    PolicyTraits::construct(&alloc_ref(), slot, std::forward<Args>(args)...);
 2853|      4|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE6insertIPS6_TnNSD_9enable_ifIXsr4absl11disjunctionINSD_14is_convertibleIRKT_S8_EENSG_22SameAsElementReferenceISN_EEEE5valueEiE4typeELi0ETnNSJ_IXsr14IsDecomposableISN_EE5valueEiE4typeELi0EEENSD_4pairINSG_8iteratorEbEESN_:
 2339|    108|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2340|    108|    return emplace(value);
 2341|    108|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE7emplaceIJRKPS6_ETnNSD_9enable_ifIXsr14IsDecomposableIDpT_EE5valueEiE4typeELi0EEENSD_4pairINSG_8iteratorEbEEDpOSM_:
 2422|    108|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2423|    108|    return PolicyTraits::apply(EmplaceDecomposable{*this},
 2424|    108|                               std::forward<Args>(args)...);
 2425|    108|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE19EmplaceDecomposableclIPS6_JRKSJ_EEENSD_4pairINSG_8iteratorEbEERKT_DpOT0_:
 2822|    108|    std::pair<iterator, bool> operator()(const K& key, Args&&... args) const {
 2823|    108|      auto res = s.find_or_prepare_insert(key);
 2824|    108|      if (res.second) {
  ------------------
  |  Branch (2824:11): [True: 108, False: 0]
  ------------------
 2825|    108|        s.emplace_at(res.first, std::forward<Args>(args)...);
 2826|    108|      }
 2827|    108|      return {s.iterator_at(res.first), res.second};
 2828|    108|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE22find_or_prepare_insertIPS6_EENSD_4pairImbEERKT_:
 3086|    108|  std::pair<size_t, bool> find_or_prepare_insert(const K& key) {
 3087|    108|    prefetch_heap_block();
 3088|    108|    auto hash = hash_ref()(key);
 3089|    108|    auto seq = probe(common(), hash);
 3090|    108|    const ctrl_t* ctrl = control();
 3091|    108|    while (true) {
  ------------------
  |  Branch (3091:12): [True: 108, Folded]
  ------------------
 3092|    108|      Group g{ctrl + seq.offset()};
 3093|    108|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (3093:23): [True: 6, False: 108]
  ------------------
 3094|      6|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      6|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 6]
  |  |  |  Branch (179:48): [Folded, False: 6]
  |  |  |  Branch (179:57): [True: 0, False: 6]
  |  |  ------------------
  ------------------
 3095|      6|                EqualElement<K>{key, eq_ref()},
 3096|      6|                PolicyTraits::element(slot_array() + seq.offset(i)))))
 3097|      0|          return {seq.offset(i), false};
 3098|      6|      }
 3099|    108|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) break;
  ------------------
  |  |  179|    108|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 108, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 108]
  |  |  |  Branch (179:57): [True: 108, False: 0]
  |  |  ------------------
  ------------------
 3100|      0|      seq.next();
 3101|      0|      assert(seq.index() <= capacity() && "full table!");
 3102|      0|    }
 3103|    108|    return {prepare_insert(hash), true};
 3104|    108|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE8hash_refEv:
 3202|    206|  hasher& hash_ref() { return settings_.template get<1>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE12EqualElementIPS6_EclIS8_JRS8_EEEbRKT_DpOT0_:
 2813|      6|    bool operator()(const K2& lhs, Args&&...) const {
 2814|      6|      return eq(lhs, rhs);
 2815|      6|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE14prepare_insertEm:
 3110|    108|  size_t prepare_insert(size_t hash) ABSL_ATTRIBUTE_NOINLINE {
 3111|    108|    const bool rehash_for_bug_detection =
 3112|    108|        common().should_rehash_for_bug_detection_on_insert();
 3113|    108|    if (rehash_for_bug_detection) {
  ------------------
  |  Branch (3113:9): [True: 0, False: 108]
  ------------------
 3114|       |      // Move to a different heap allocation in order to detect bugs.
 3115|      0|      const size_t cap = capacity();
 3116|      0|      resize(growth_left() > 0 ? cap : NextCapacity(cap));
  ------------------
  |  Branch (3116:14): [True: 0, False: 0]
  ------------------
 3117|      0|    }
 3118|    108|    auto target = find_first_non_full(common(), hash);
 3119|    108|    if (!rehash_for_bug_detection &&
  ------------------
  |  Branch (3119:9): [True: 108, False: 0]
  ------------------
 3120|    108|        ABSL_PREDICT_FALSE(growth_left() == 0 &&
  ------------------
  |  |  178|    120|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 12, False: 96]
  |  |  |  Branch (178:49): [Folded, False: 108]
  |  |  |  Branch (178:59): [True: 12, False: 96]
  |  |  |  Branch (178:59): [True: 12, False: 0]
  |  |  ------------------
  ------------------
 3121|    108|                           !IsDeleted(control()[target.offset]))) {
 3122|     12|      size_t old_capacity = capacity();
 3123|     12|      rehash_and_grow_if_necessary();
 3124|       |      // NOTE: It is safe to use `FindFirstNonFullAfterResize`.
 3125|       |      // `FindFirstNonFullAfterResize` must be called right after resize.
 3126|       |      // `rehash_and_grow_if_necessary` may *not* call `resize`
 3127|       |      // and perform `drop_deletes_without_resize` instead. But this
 3128|       |      // could happen only on big tables.
 3129|       |      // For big tables `FindFirstNonFullAfterResize` will always
 3130|       |      // fallback to normal `find_first_non_full`, so it is safe to use it.
 3131|     12|      target = HashSetResizeHelper::FindFirstNonFullAfterResize(
 3132|     12|          common(), old_capacity, hash);
 3133|     12|    }
 3134|    108|    common().increment_size();
 3135|    108|    set_growth_left(growth_left() - IsEmpty(control()[target.offset]));
 3136|    108|    SetCtrl(common(), target.offset, H2(hash), sizeof(slot_type));
 3137|    108|    common().maybe_increment_generation_on_insert();
 3138|    108|    infoz().RecordInsert(hash, target.probe_length);
 3139|    108|    return target.offset;
 3140|    108|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE6resizeEm:
 2905|     12|  ABSL_ATTRIBUTE_NOINLINE void resize(size_t new_capacity) {
 2906|     12|    assert(IsValidCapacity(new_capacity));
 2907|     12|    HashSetResizeHelper resize_helper(common());
 2908|     12|    auto* old_slots = slot_array();
 2909|     12|    common().set_capacity(new_capacity);
 2910|       |    // Note that `InitializeSlots` does different number initialization steps
 2911|       |    // depending on the values of `transfer_uses_memcpy` and capacities.
 2912|       |    // Refer to the comment in `InitializeSlots` for more details.
 2913|     12|    const bool grow_single_group =
 2914|     12|        resize_helper.InitializeSlots<CharAlloc, sizeof(slot_type),
 2915|     12|                                      PolicyTraits::transfer_uses_memcpy(),
 2916|     12|                                      alignof(slot_type)>(
 2917|     12|            common(), const_cast<std::remove_const_t<slot_type>*>(old_slots),
 2918|     12|            CharAlloc(alloc_ref()));
 2919|       |
 2920|     12|    if (resize_helper.old_capacity() == 0) {
  ------------------
  |  Branch (2920:9): [True: 3, False: 9]
  ------------------
 2921|       |      // InitializeSlots did all the work including infoz().RecordRehash().
 2922|      3|      return;
 2923|      3|    }
 2924|       |
 2925|      9|    if (grow_single_group) {
  ------------------
  |  Branch (2925:9): [True: 6, False: 3]
  ------------------
 2926|      6|      if (PolicyTraits::transfer_uses_memcpy()) {
  ------------------
  |  Branch (2926:11): [Folded, False: 6]
  ------------------
 2927|       |        // InitializeSlots did all the work.
 2928|      0|        return;
 2929|      0|      }
 2930|       |      // We want GrowSizeIntoSingleGroup to be called here in order to make
 2931|       |      // InitializeSlots not depend on PolicyTraits.
 2932|      6|      resize_helper.GrowSizeIntoSingleGroup<PolicyTraits>(common(), alloc_ref(),
 2933|      6|                                                          old_slots);
 2934|      6|    } else {
 2935|       |      // InitializeSlots prepares control bytes to correspond to empty table.
 2936|      3|      auto* new_slots = slot_array();
 2937|      3|      size_t total_probe_length = 0;
 2938|    112|      for (size_t i = 0; i != resize_helper.old_capacity(); ++i) {
  ------------------
  |  Branch (2938:26): [True: 109, False: 3]
  ------------------
 2939|    109|        if (IsFull(resize_helper.old_ctrl()[i])) {
  ------------------
  |  Branch (2939:13): [True: 98, False: 11]
  ------------------
 2940|     98|          size_t hash = PolicyTraits::apply(
 2941|     98|              HashElement{hash_ref()}, PolicyTraits::element(old_slots + i));
 2942|     98|          auto target = find_first_non_full(common(), hash);
 2943|     98|          size_t new_i = target.offset;
 2944|     98|          total_probe_length += target.probe_length;
 2945|     98|          SetCtrl(common(), new_i, H2(hash), sizeof(slot_type));
 2946|     98|          transfer(new_slots + new_i, old_slots + i);
 2947|     98|        }
 2948|    109|      }
 2949|      3|      infoz().RecordRehash(total_probe_length);
 2950|      3|    }
 2951|      9|    resize_helper.DeallocateOld<alignof(slot_type)>(
 2952|      9|        CharAlloc(alloc_ref()), sizeof(slot_type),
 2953|      9|        const_cast<std::remove_const_t<slot_type>*>(old_slots));
 2954|      9|  }
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper23GrowSizeIntoSingleGroupINS1_18hash_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEEvEENSt3__19allocatorISA_EEEEvRNS1_12CommonFieldsERT0_PNT_9slot_typeE:
 1655|      6|                               typename PolicyTraits::slot_type* old_slots) {
 1656|      6|    assert(old_capacity_ < Group::kWidth / 2);
 1657|      6|    assert(IsGrowingIntoSingleGroupApplicable(old_capacity_, c.capacity()));
 1658|      6|    using slot_type = typename PolicyTraits::slot_type;
 1659|      6|    assert(is_single_group(c.capacity()));
 1660|       |
 1661|      6|    auto* new_slots = reinterpret_cast<slot_type*>(c.slot_array());
 1662|       |
 1663|      6|    size_t shuffle_bit = old_capacity_ / 2 + 1;
 1664|     28|    for (size_t i = 0; i < old_capacity_; ++i) {
  ------------------
  |  Branch (1664:24): [True: 22, False: 6]
  ------------------
 1665|     22|      if (IsFull(old_ctrl_[i])) {
  ------------------
  |  Branch (1665:11): [True: 22, False: 0]
  ------------------
 1666|     22|        size_t new_i = i ^ shuffle_bit;
 1667|     22|        SanitizerUnpoisonMemoryRegion(new_slots + new_i, sizeof(slot_type));
 1668|     22|        PolicyTraits::transfer(&alloc_ref, new_slots + new_i, old_slots + i);
 1669|     22|      }
 1670|     22|    }
 1671|      6|    PoisonSingleGroupEmptySlots(c, sizeof(slot_type));
 1672|      6|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE11HashElementclIS8_JRS8_EEEmRKT_DpOT0_:
 2804|     98|    size_t operator()(const K& key, Args&&...) const {
 2805|     98|      return h(key);
 2806|     98|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE8transferEPS8_SH_:
 2857|     98|  inline void transfer(slot_type* to, slot_type* from) {
 2858|     98|    PolicyTraits::transfer(&alloc_ref(), to, from);
 2859|     98|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE11growth_leftEv:
 3181|    216|  size_t growth_left() const { return common().growth_left(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE28rehash_and_grow_if_necessaryEv:
 2970|     12|  void rehash_and_grow_if_necessary() {
 2971|     12|    const size_t cap = capacity();
 2972|     12|    if (cap > Group::kWidth &&
  ------------------
  |  Branch (2972:9): [True: 2, False: 10]
  ------------------
 2973|       |        // Do these calculations in 64-bit to avoid overflow.
 2974|      2|        size() * uint64_t{32} <= cap * uint64_t{25}) {
  ------------------
  |  Branch (2974:9): [True: 0, False: 2]
  ------------------
 2975|       |      // Squash DELETED without growing if there is enough capacity.
 2976|       |      //
 2977|       |      // Rehash in place if the current size is <= 25/32 of capacity.
 2978|       |      // Rationale for such a high factor: 1) drop_deletes_without_resize() is
 2979|       |      // faster than resize, and 2) it takes quite a bit of work to add
 2980|       |      // tombstones.  In the worst case, seems to take approximately 4
 2981|       |      // insert/erase pairs to create a single tombstone and so if we are
 2982|       |      // rehashing because of tombstones, we can afford to rehash-in-place as
 2983|       |      // long as we are reclaiming at least 1/8 the capacity without doing more
 2984|       |      // than 2X the work.  (Where "work" is defined to be size() for rehashing
 2985|       |      // or rehashing in place, and 1 for an insert or erase.)  But rehashing in
 2986|       |      // place is faster per operation than inserting or even doubling the size
 2987|       |      // of the table, so we actually afford to reclaim even less space from a
 2988|       |      // resize-in-place.  The decision is to rehash in place if we can reclaim
 2989|       |      // at about 1/8th of the usable capacity (specifically 3/28 of the
 2990|       |      // capacity) which means that the total cost of rehashing will be a small
 2991|       |      // fraction of the total work.
 2992|       |      //
 2993|       |      // Here is output of an experiment using the BM_CacheInSteadyState
 2994|       |      // benchmark running the old case (where we rehash-in-place only if we can
 2995|       |      // reclaim at least 7/16*capacity) vs. this code (which rehashes in place
 2996|       |      // if we can recover 3/32*capacity).
 2997|       |      //
 2998|       |      // Note that although in the worst-case number of rehashes jumped up from
 2999|       |      // 15 to 190, but the number of operations per second is almost the same.
 3000|       |      //
 3001|       |      // Abridged output of running BM_CacheInSteadyState benchmark from
 3002|       |      // raw_hash_set_benchmark.   N is the number of insert/erase operations.
 3003|       |      //
 3004|       |      //      | OLD (recover >= 7/16        | NEW (recover >= 3/32)
 3005|       |      // size |    N/s LoadFactor NRehashes |    N/s LoadFactor NRehashes
 3006|       |      //  448 | 145284       0.44        18 | 140118       0.44        19
 3007|       |      //  493 | 152546       0.24        11 | 151417       0.48        28
 3008|       |      //  538 | 151439       0.26        11 | 151152       0.53        38
 3009|       |      //  583 | 151765       0.28        11 | 150572       0.57        50
 3010|       |      //  628 | 150241       0.31        11 | 150853       0.61        66
 3011|       |      //  672 | 149602       0.33        12 | 150110       0.66        90
 3012|       |      //  717 | 149998       0.35        12 | 149531       0.70       129
 3013|       |      //  762 | 149836       0.37        13 | 148559       0.74       190
 3014|       |      //  807 | 149736       0.39        14 | 151107       0.39        14
 3015|       |      //  852 | 150204       0.42        15 | 151019       0.42        15
 3016|      0|      drop_deletes_without_resize();
 3017|     12|    } else {
 3018|       |      // Otherwise grow the container.
 3019|     12|      resize(NextCapacity(cap));
 3020|     12|    }
 3021|     12|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE4sizeEv:
 2287|      2|  size_t size() const { return common().size(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE15set_growth_leftEm:
 3182|    108|  void set_growth_left(size_t gl) { return common().set_growth_left(gl); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE10emplace_atIJRKPS6_EEEvmDpOT_:
 3151|    108|  void emplace_at(size_t i, Args&&... args) {
 3152|    108|    construct(slot_array() + i, std::forward<Args>(args)...);
 3153|       |
 3154|       |    assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) ==
 3155|    108|               iterator_at(i) &&
 3156|    108|           "constructed value does not match the lookup key");
 3157|    108|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE9constructIJRKPS6_EEEvPS8_DpOT_:
 2851|    108|  inline void construct(slot_type* slot, Args&&... args) {
 2852|    108|    PolicyTraits::construct(&alloc_ref(), slot, std::forward<Args>(args)...);
 2853|    108|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE15unchecked_derefENSP_8iteratorE:
 3166|    239|  reference unchecked_deref(iterator it) { return it.unchecked_deref(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE8iterator15unchecked_derefEv:
 2029|    239|    reference unchecked_deref() const { return PolicyTraits::element(slot_); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE22find_or_prepare_insertISA_EENSL_ImbEERKT_:
 3086|    239|  std::pair<size_t, bool> find_or_prepare_insert(const K& key) {
 3087|    239|    prefetch_heap_block();
 3088|    239|    auto hash = hash_ref()(key);
 3089|    239|    auto seq = probe(common(), hash);
 3090|    239|    const ctrl_t* ctrl = control();
 3091|    239|    while (true) {
  ------------------
  |  Branch (3091:12): [True: 239, Folded]
  ------------------
 3092|    239|      Group g{ctrl + seq.offset()};
 3093|    239|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (3093:23): [True: 235, False: 4]
  ------------------
 3094|    235|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|    235|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 235, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 235]
  |  |  |  Branch (179:57): [True: 235, False: 0]
  |  |  ------------------
  ------------------
 3095|    235|                EqualElement<K>{key, eq_ref()},
 3096|    235|                PolicyTraits::element(slot_array() + seq.offset(i)))))
 3097|    235|          return {seq.offset(i), false};
 3098|    235|      }
 3099|      4|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) break;
  ------------------
  |  |  179|      4|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 4, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 4]
  |  |  |  Branch (179:57): [True: 4, False: 0]
  |  |  ------------------
  ------------------
 3100|      0|      seq.next();
 3101|      0|      assert(seq.index() <= capacity() && "full table!");
 3102|      0|    }
 3103|      4|    return {prepare_insert(hash), true};
 3104|    239|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE19prefetch_heap_blockEv:
 3187|    239|  void prefetch_heap_block() const {
 3188|    239|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|    239|    __builtin_prefetch(control(), 0, 1);
 3190|    239|#endif
 3191|    239|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE8hash_refEv:
 3202|    239|  hasher& hash_ref() { return settings_.template get<1>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE12EqualElementISA_EclISA_JRKNS4_21piecewise_construct_tENS4_5tupleIJRSM_EEENSW_IJRKSH_EEEEEEbRKT_DpOT0_:
 2813|    235|    bool operator()(const K2& lhs, Args&&...) const {
 2814|    235|      return eq(lhs, rhs);
 2815|    235|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE6eq_refEv:
 3204|    235|  key_equal& eq_ref() { return settings_.template get<2>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE14prepare_insertEm:
 3110|      4|  size_t prepare_insert(size_t hash) ABSL_ATTRIBUTE_NOINLINE {
 3111|      4|    const bool rehash_for_bug_detection =
 3112|      4|        common().should_rehash_for_bug_detection_on_insert();
 3113|      4|    if (rehash_for_bug_detection) {
  ------------------
  |  Branch (3113:9): [True: 0, False: 4]
  ------------------
 3114|       |      // Move to a different heap allocation in order to detect bugs.
 3115|      0|      const size_t cap = capacity();
 3116|      0|      resize(growth_left() > 0 ? cap : NextCapacity(cap));
  ------------------
  |  Branch (3116:14): [True: 0, False: 0]
  ------------------
 3117|      0|    }
 3118|      4|    auto target = find_first_non_full(common(), hash);
 3119|      4|    if (!rehash_for_bug_detection &&
  ------------------
  |  Branch (3119:9): [True: 4, False: 0]
  ------------------
 3120|      4|        ABSL_PREDICT_FALSE(growth_left() == 0 &&
  ------------------
  |  |  178|      7|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 3, False: 1]
  |  |  |  Branch (178:49): [Folded, False: 4]
  |  |  |  Branch (178:59): [True: 3, False: 1]
  |  |  |  Branch (178:59): [True: 3, False: 0]
  |  |  ------------------
  ------------------
 3121|      4|                           !IsDeleted(control()[target.offset]))) {
 3122|      3|      size_t old_capacity = capacity();
 3123|      3|      rehash_and_grow_if_necessary();
 3124|       |      // NOTE: It is safe to use `FindFirstNonFullAfterResize`.
 3125|       |      // `FindFirstNonFullAfterResize` must be called right after resize.
 3126|       |      // `rehash_and_grow_if_necessary` may *not* call `resize`
 3127|       |      // and perform `drop_deletes_without_resize` instead. But this
 3128|       |      // could happen only on big tables.
 3129|       |      // For big tables `FindFirstNonFullAfterResize` will always
 3130|       |      // fallback to normal `find_first_non_full`, so it is safe to use it.
 3131|      3|      target = HashSetResizeHelper::FindFirstNonFullAfterResize(
 3132|      3|          common(), old_capacity, hash);
 3133|      3|    }
 3134|      4|    common().increment_size();
 3135|      4|    set_growth_left(growth_left() - IsEmpty(control()[target.offset]));
 3136|      4|    SetCtrl(common(), target.offset, H2(hash), sizeof(slot_type));
 3137|      4|    common().maybe_increment_generation_on_insert();
 3138|      4|    infoz().RecordInsert(hash, target.probe_length);
 3139|      4|    return target.offset;
 3140|      4|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE6resizeEm:
 2905|      3|  ABSL_ATTRIBUTE_NOINLINE void resize(size_t new_capacity) {
 2906|      3|    assert(IsValidCapacity(new_capacity));
 2907|      3|    HashSetResizeHelper resize_helper(common());
 2908|      3|    auto* old_slots = slot_array();
 2909|      3|    common().set_capacity(new_capacity);
 2910|       |    // Note that `InitializeSlots` does different number initialization steps
 2911|       |    // depending on the values of `transfer_uses_memcpy` and capacities.
 2912|       |    // Refer to the comment in `InitializeSlots` for more details.
 2913|      3|    const bool grow_single_group =
 2914|      3|        resize_helper.InitializeSlots<CharAlloc, sizeof(slot_type),
 2915|      3|                                      PolicyTraits::transfer_uses_memcpy(),
 2916|      3|                                      alignof(slot_type)>(
 2917|      3|            common(), const_cast<std::remove_const_t<slot_type>*>(old_slots),
 2918|      3|            CharAlloc(alloc_ref()));
 2919|       |
 2920|      3|    if (resize_helper.old_capacity() == 0) {
  ------------------
  |  Branch (2920:9): [True: 1, False: 2]
  ------------------
 2921|       |      // InitializeSlots did all the work including infoz().RecordRehash().
 2922|      1|      return;
 2923|      1|    }
 2924|       |
 2925|      2|    if (grow_single_group) {
  ------------------
  |  Branch (2925:9): [True: 2, False: 0]
  ------------------
 2926|      2|      if (PolicyTraits::transfer_uses_memcpy()) {
  ------------------
  |  Branch (2926:11): [Folded, False: 2]
  ------------------
 2927|       |        // InitializeSlots did all the work.
 2928|      0|        return;
 2929|      0|      }
 2930|       |      // We want GrowSizeIntoSingleGroup to be called here in order to make
 2931|       |      // InitializeSlots not depend on PolicyTraits.
 2932|      2|      resize_helper.GrowSizeIntoSingleGroup<PolicyTraits>(common(), alloc_ref(),
 2933|      2|                                                          old_slots);
 2934|      2|    } else {
 2935|       |      // InitializeSlots prepares control bytes to correspond to empty table.
 2936|      0|      auto* new_slots = slot_array();
 2937|      0|      size_t total_probe_length = 0;
 2938|      0|      for (size_t i = 0; i != resize_helper.old_capacity(); ++i) {
  ------------------
  |  Branch (2938:26): [True: 0, False: 0]
  ------------------
 2939|      0|        if (IsFull(resize_helper.old_ctrl()[i])) {
  ------------------
  |  Branch (2939:13): [True: 0, False: 0]
  ------------------
 2940|      0|          size_t hash = PolicyTraits::apply(
 2941|      0|              HashElement{hash_ref()}, PolicyTraits::element(old_slots + i));
 2942|      0|          auto target = find_first_non_full(common(), hash);
 2943|      0|          size_t new_i = target.offset;
 2944|      0|          total_probe_length += target.probe_length;
 2945|      0|          SetCtrl(common(), new_i, H2(hash), sizeof(slot_type));
 2946|      0|          transfer(new_slots + new_i, old_slots + i);
 2947|      0|        }
 2948|      0|      }
 2949|      0|      infoz().RecordRehash(total_probe_length);
 2950|      0|    }
 2951|      2|    resize_helper.DeallocateOld<alignof(slot_type)>(
 2952|      2|        CharAlloc(alloc_ref()), sizeof(slot_type),
 2953|      2|        const_cast<std::remove_const_t<slot_type>*>(old_slots));
 2954|      2|  }
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper23GrowSizeIntoSingleGroupINS1_18hash_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEENS6_10unique_ptrIN6google8protobuf10FeatureSetENS6_14default_deleteISG_EEEEEEvEENSA_INS6_4pairIKSC_SJ_EEEEEEvRNS1_12CommonFieldsERT0_PNT_9slot_typeE:
 1655|      2|                               typename PolicyTraits::slot_type* old_slots) {
 1656|      2|    assert(old_capacity_ < Group::kWidth / 2);
 1657|      2|    assert(IsGrowingIntoSingleGroupApplicable(old_capacity_, c.capacity()));
 1658|      2|    using slot_type = typename PolicyTraits::slot_type;
 1659|      2|    assert(is_single_group(c.capacity()));
 1660|       |
 1661|      2|    auto* new_slots = reinterpret_cast<slot_type*>(c.slot_array());
 1662|       |
 1663|      2|    size_t shuffle_bit = old_capacity_ / 2 + 1;
 1664|      6|    for (size_t i = 0; i < old_capacity_; ++i) {
  ------------------
  |  Branch (1664:24): [True: 4, False: 2]
  ------------------
 1665|      4|      if (IsFull(old_ctrl_[i])) {
  ------------------
  |  Branch (1665:11): [True: 4, False: 0]
  ------------------
 1666|      4|        size_t new_i = i ^ shuffle_bit;
 1667|      4|        SanitizerUnpoisonMemoryRegion(new_slots + new_i, sizeof(slot_type));
 1668|      4|        PolicyTraits::transfer(&alloc_ref, new_slots + new_i, old_slots + i);
 1669|      4|      }
 1670|      4|    }
 1671|      2|    PoisonSingleGroupEmptySlots(c, sizeof(slot_type));
 1672|      2|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE11growth_leftEv:
 3181|      8|  size_t growth_left() const { return common().growth_left(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE28rehash_and_grow_if_necessaryEv:
 2970|      3|  void rehash_and_grow_if_necessary() {
 2971|      3|    const size_t cap = capacity();
 2972|      3|    if (cap > Group::kWidth &&
  ------------------
  |  Branch (2972:9): [True: 0, False: 3]
  ------------------
 2973|       |        // Do these calculations in 64-bit to avoid overflow.
 2974|      0|        size() * uint64_t{32} <= cap * uint64_t{25}) {
  ------------------
  |  Branch (2974:9): [True: 0, False: 0]
  ------------------
 2975|       |      // Squash DELETED without growing if there is enough capacity.
 2976|       |      //
 2977|       |      // Rehash in place if the current size is <= 25/32 of capacity.
 2978|       |      // Rationale for such a high factor: 1) drop_deletes_without_resize() is
 2979|       |      // faster than resize, and 2) it takes quite a bit of work to add
 2980|       |      // tombstones.  In the worst case, seems to take approximately 4
 2981|       |      // insert/erase pairs to create a single tombstone and so if we are
 2982|       |      // rehashing because of tombstones, we can afford to rehash-in-place as
 2983|       |      // long as we are reclaiming at least 1/8 the capacity without doing more
 2984|       |      // than 2X the work.  (Where "work" is defined to be size() for rehashing
 2985|       |      // or rehashing in place, and 1 for an insert or erase.)  But rehashing in
 2986|       |      // place is faster per operation than inserting or even doubling the size
 2987|       |      // of the table, so we actually afford to reclaim even less space from a
 2988|       |      // resize-in-place.  The decision is to rehash in place if we can reclaim
 2989|       |      // at about 1/8th of the usable capacity (specifically 3/28 of the
 2990|       |      // capacity) which means that the total cost of rehashing will be a small
 2991|       |      // fraction of the total work.
 2992|       |      //
 2993|       |      // Here is output of an experiment using the BM_CacheInSteadyState
 2994|       |      // benchmark running the old case (where we rehash-in-place only if we can
 2995|       |      // reclaim at least 7/16*capacity) vs. this code (which rehashes in place
 2996|       |      // if we can recover 3/32*capacity).
 2997|       |      //
 2998|       |      // Note that although in the worst-case number of rehashes jumped up from
 2999|       |      // 15 to 190, but the number of operations per second is almost the same.
 3000|       |      //
 3001|       |      // Abridged output of running BM_CacheInSteadyState benchmark from
 3002|       |      // raw_hash_set_benchmark.   N is the number of insert/erase operations.
 3003|       |      //
 3004|       |      //      | OLD (recover >= 7/16        | NEW (recover >= 3/32)
 3005|       |      // size |    N/s LoadFactor NRehashes |    N/s LoadFactor NRehashes
 3006|       |      //  448 | 145284       0.44        18 | 140118       0.44        19
 3007|       |      //  493 | 152546       0.24        11 | 151417       0.48        28
 3008|       |      //  538 | 151439       0.26        11 | 151152       0.53        38
 3009|       |      //  583 | 151765       0.28        11 | 150572       0.57        50
 3010|       |      //  628 | 150241       0.31        11 | 150853       0.61        66
 3011|       |      //  672 | 149602       0.33        12 | 150110       0.66        90
 3012|       |      //  717 | 149998       0.35        12 | 149531       0.70       129
 3013|       |      //  762 | 149836       0.37        13 | 148559       0.74       190
 3014|       |      //  807 | 149736       0.39        14 | 151107       0.39        14
 3015|       |      //  852 | 150204       0.42        15 | 151019       0.42        15
 3016|      0|      drop_deletes_without_resize();
 3017|      3|    } else {
 3018|       |      // Otherwise grow the container.
 3019|      3|      resize(NextCapacity(cap));
 3020|      3|    }
 3021|      3|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE15set_growth_leftEm:
 3182|      4|  void set_growth_left(size_t gl) { return common().set_growth_left(gl); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE10emplace_atIJRKNS4_21piecewise_construct_tENS4_5tupleIJOSA_EEENSU_IJEEEEEEvmDpOT_:
 3151|      4|  void emplace_at(size_t i, Args&&... args) {
 3152|      4|    construct(slot_array() + i, std::forward<Args>(args)...);
 3153|       |
 3154|       |    assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) ==
 3155|      4|               iterator_at(i) &&
 3156|      4|           "constructed value does not match the lookup key");
 3157|      4|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE9constructIJRKNS4_21piecewise_construct_tENS4_5tupleIJOSA_EEENSU_IJEEEEEEvPNS1_13map_slot_typeISA_SH_EEDpOT_:
 2851|      4|  inline void construct(slot_type* slot, Args&&... args) {
 2852|      4|    PolicyTraits::construct(&alloc_ref(), slot, std::forward<Args>(args)...);
 2853|      4|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE11iterator_atEm:
 3159|    239|  iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3160|    239|    return {control() + i, slot_array() + i, common().generation_ptr()};
 3161|    239|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE8iteratorC2EPNS1_6ctrl_tEPNS1_13map_slot_typeISA_SH_EEPKh:
 1984|    239|        : HashSetIteratorGenerationInfo(generation_ptr),
 1985|    239|          ctrl_(ctrl),
 1986|    239|          slot_(slot) {
 1987|       |      // This assumption helps the compiler know that any non-end iterator is
 1988|       |      // not equal to any end iterator.
 1989|    239|      ABSL_ASSUME(ctrl != nullptr);
  ------------------
  |  |  259|    239|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1990|    239|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEbEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_bEEEEEC2Ev:
 2088|      2|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE8containsINS0_11string_viewEEEbRKT_:
 2724|      4|  bool contains(const key_arg<K>& key) const {
 2725|       |    // Here neither the iterator returned by `find()` nor `end()` can be invalid
 2726|       |    // outside of potential thread-safety issues.
 2727|       |    // `find()`'s return value is constructed, used, and then destructed
 2728|       |    // all in this context.
 2729|      4|    return !find(key).unchecked_equals(end());
 2730|      4|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE4findINS0_11string_viewEEENSF_14const_iteratorERKT_:
 2718|      4|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2719|      4|    prefetch_heap_block();
 2720|      4|    return find(key, hash_ref()(key));
 2721|      4|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE4findINS0_11string_viewEEENSF_14const_iteratorERKT_m:
 2713|      4|                      size_t hash) const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2714|      4|    return const_cast<raw_hash_set*>(this)->find(key, hash);
 2715|      4|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE14const_iteratorC2ENSF_8iteratorE:
 2047|     16|    const_iterator(iterator i) : inner_(std::move(i)) {}  // NOLINT
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE8hash_refEv:
 3203|      8|  const hasher& hash_ref() const { return settings_.template get<1>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE14const_iterator16unchecked_equalsERKSG_:
 2075|      8|    bool unchecked_equals(const const_iterator& b) {
 2076|      8|      return inner_.unchecked_equals(b.inner_);
 2077|      8|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE8iterator16unchecked_equalsERKSG_:
 2025|      8|    bool unchecked_equals(const iterator& b) { return ctrl_ == b.control(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE8iterator7controlEv:
 2009|      8|    ctrl_t* control() const { return ctrl_; }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE3endEv:
 2278|      8|  const_iterator end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2279|      8|    return iterator(common().generation_ptr());
 2280|      8|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE8containsISA_EEbRKT_:
 2724|      4|  bool contains(const key_arg<K>& key) const {
 2725|       |    // Here neither the iterator returned by `find()` nor `end()` can be invalid
 2726|       |    // outside of potential thread-safety issues.
 2727|       |    // `find()`'s return value is constructed, used, and then destructed
 2728|       |    // all in this context.
 2729|      4|    return !find(key).unchecked_equals(end());
 2730|      4|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE4findISA_EENSF_14const_iteratorERKT_:
 2718|      4|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2719|      4|    prefetch_heap_block();
 2720|      4|    return find(key, hash_ref()(key));
 2721|      4|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE4findISA_EENSF_14const_iteratorERKT_m:
 2713|      4|                      size_t hash) const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2714|      4|    return const_cast<raw_hash_set*>(this)->find(key, hash);
 2715|      4|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE4findISA_EENSF_8iteratorERKT_m:
 2688|      4|                size_t hash) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2689|      4|    auto seq = probe(common(), hash);
 2690|      4|    slot_type* slot_ptr = slot_array();
 2691|      4|    const ctrl_t* ctrl = control();
 2692|      4|    while (true) {
  ------------------
  |  Branch (2692:12): [True: 4, Folded]
  ------------------
 2693|      4|      Group g{ctrl + seq.offset()};
 2694|      4|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (2694:23): [True: 0, False: 4]
  ------------------
 2695|      0|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 0]
  |  |  |  Branch (179:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2696|      0|                EqualElement<K>{key, eq_ref()},
 2697|      0|                PolicyTraits::element(slot_ptr + seq.offset(i)))))
 2698|      0|          return iterator_at(seq.offset(i));
 2699|      0|      }
 2700|      4|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
  ------------------
  |  |  179|      4|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 4, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 4]
  |  |  |  Branch (179:57): [True: 4, False: 0]
  |  |  ------------------
  ------------------
 2701|      0|      seq.next();
 2702|       |      assert(seq.index() <= capacity() && "full table!");
 2703|      0|    }
 2704|      4|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEEC2Ev:
 2088|      8|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_17DescriptorBuilder12MessageHintsEEENS1_6HashEqIS8_vE4HashENSD_2EqENSt3__19allocatorINSG_4pairIKS8_SA_EEEEEC2Ev:
 2088|      4|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE19prefetch_heap_blockEv:
 3187|    104|  void prefetch_heap_block() const {
 3188|    104|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|    104|    __builtin_prefetch(control(), 0, 1);
 3190|    104|#endif
 3191|    104|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE8hash_refEv:
 3202|    103|  hasher& hash_ref() { return settings_.template get<1>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE4sizeEv:
 2287|      4|  size_t size() const { return common().size(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE8containsIS8_EEbRKT_:
 2724|      1|  bool contains(const key_arg<K>& key) const {
 2725|       |    // Here neither the iterator returned by `find()` nor `end()` can be invalid
 2726|       |    // outside of potential thread-safety issues.
 2727|       |    // `find()`'s return value is constructed, used, and then destructed
 2728|       |    // all in this context.
 2729|      1|    return !find(key).unchecked_equals(end());
 2730|      1|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE4findIS8_EENSH_14const_iteratorERKT_:
 2718|      1|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2719|      1|    prefetch_heap_block();
 2720|      1|    return find(key, hash_ref()(key));
 2721|      1|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE4findIS8_EENSH_14const_iteratorERKT_m:
 2713|      1|                      size_t hash) const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2714|      1|    return const_cast<raw_hash_set*>(this)->find(key, hash);
 2715|      1|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE4findIS8_EENSH_8iteratorERKT_m:
 2688|    104|                size_t hash) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2689|    104|    auto seq = probe(common(), hash);
 2690|    104|    slot_type* slot_ptr = slot_array();
 2691|    104|    const ctrl_t* ctrl = control();
 2692|    104|    while (true) {
  ------------------
  |  Branch (2692:12): [True: 104, Folded]
  ------------------
 2693|    104|      Group g{ctrl + seq.offset()};
 2694|    104|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (2694:23): [True: 0, False: 104]
  ------------------
 2695|      0|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 0]
  |  |  |  Branch (179:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2696|      0|                EqualElement<K>{key, eq_ref()},
 2697|      0|                PolicyTraits::element(slot_ptr + seq.offset(i)))))
 2698|      0|          return iterator_at(seq.offset(i));
 2699|      0|      }
 2700|    104|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
  ------------------
  |  |  179|    104|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 104, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 104]
  |  |  |  Branch (179:57): [True: 104, False: 0]
  |  |  ------------------
  ------------------
 2701|      0|      seq.next();
 2702|       |      assert(seq.index() <= capacity() && "full table!");
 2703|      0|    }
 2704|    104|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE14const_iteratorC2ENSH_8iteratorE:
 2047|      2|    const_iterator(iterator i) : inner_(std::move(i)) {}  // NOLINT
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE8hash_refEv:
 3203|      1|  const hasher& hash_ref() const { return settings_.template get<1>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE14const_iterator16unchecked_equalsERKSI_:
 2075|      1|    bool unchecked_equals(const const_iterator& b) {
 2076|      1|      return inner_.unchecked_equals(b.inner_);
 2077|      1|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE8iterator16unchecked_equalsERKSI_:
 2025|      1|    bool unchecked_equals(const iterator& b) { return ctrl_ == b.control(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE8iterator7controlEv:
 2009|      1|    ctrl_t* control() const { return ctrl_; }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE3endEv:
 2278|      1|  const_iterator end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2279|      1|    return iterator(common().generation_ptr());
 2280|      1|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE8iteratorC2EPKh:
 1993|    208|        : HashSetIteratorGenerationInfo(generation_ptr), ctrl_(nullptr) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE5eraseIS8_EEmRKT_:
 2516|    103|  size_type erase(const key_arg<K>& key) {
 2517|    103|    auto it = find(key);
 2518|    103|    if (it == end()) return 0;
  ------------------
  |  Branch (2518:9): [True: 103, False: 0]
  ------------------
 2519|      0|    erase(it);
 2520|      0|    return 1;
 2521|    103|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE4findIS8_EENSH_8iteratorERKT_:
 2706|    103|  iterator find(const key_arg<K>& key) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2707|    103|    prefetch_heap_block();
 2708|    103|    return find(key, hash_ref()(key));
 2709|    103|  }
_ZN4absl12lts_2024011618container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE8iteratorESK_:
 1970|    103|    friend bool operator==(const iterator& a, const iterator& b) {
 1971|    103|      AssertIsValidForComparison(a.ctrl_, a.generation(), a.generation_ptr());
 1972|    103|      AssertIsValidForComparison(b.ctrl_, b.generation(), b.generation_ptr());
 1973|    103|      AssertSameContainer(a.ctrl_, b.ctrl_, a.slot_, b.slot_,
 1974|    103|                          a.generation_ptr(), b.generation_ptr());
 1975|    103|      return a.ctrl_ == b.ctrl_;
 1976|    103|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE3endEv:
 2271|    207|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2272|    207|    return iterator(common().generation_ptr());
 2273|    207|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEEC2Ev:
 2088|     75|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE5clearEv:
 2291|      8|  ABSL_ATTRIBUTE_REINITIALIZES void clear() {
 2292|       |    // Iterating over this container is O(bucket_count()). When bucket_count()
 2293|       |    // is much greater than size(), iteration becomes prohibitively expensive.
 2294|       |    // For clear() it is more important to reuse the allocated array when the
 2295|       |    // container is small because allocation takes comparatively long time
 2296|       |    // compared to destruction of the elements of the container. So we pick the
 2297|       |    // largest bucket_count() threshold for which iteration is still fast and
 2298|       |    // past that we simply deallocate the array.
 2299|      8|    const size_t cap = capacity();
 2300|      8|    if (cap == 0) {
  ------------------
  |  Branch (2300:9): [True: 8, False: 0]
  ------------------
 2301|       |      // Already guaranteed to be empty; so nothing to do.
 2302|      8|    } else {
 2303|      0|      destroy_slots();
 2304|      0|      ClearBackingArray(common(), GetPolicyFunctions(), /*reuse=*/cap < 128);
 2305|      0|    }
 2306|      8|    common().set_reserved_growth(0);
 2307|      8|    common().set_reservation_size(0);
 2308|      8|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIiEENS0_13hash_internal4HashIiEENSt3__18equal_toIiEENS8_9allocatorIiEEEC2Ev:
 2088|      4|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE6insertINS8_12basic_stringIcNS8_11char_traitsIcEENS9_IcEEEETnNS8_9enable_ifIXsr4absl11disjunctionINS8_14is_convertibleIRKT_S4_EENSB_22SameAsElementReferenceISM_EEEE5valueEiE4typeELi0ETnNSI_IXsr14IsDecomposableISM_EE5valueEiE4typeELi0EEENS8_4pairINSB_8iteratorEbEESM_:
 2339|      3|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2340|      3|    return emplace(value);
 2341|      3|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE7emplaceIJRKNS8_12basic_stringIcNS8_11char_traitsIcEENS9_IcEEEEETnNS8_9enable_ifIXsr14IsDecomposableIDpT_EE5valueEiE4typeELi0EEENS8_4pairINSB_8iteratorEbEEDpOSL_:
 2422|      3|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2423|      3|    return PolicyTraits::apply(EmplaceDecomposable{*this},
 2424|      3|                               std::forward<Args>(args)...);
 2425|      3|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE19EmplaceDecomposableclINS8_12basic_stringIcNS8_11char_traitsIcEENS9_IcEEEEJRKSI_EEENS8_4pairINSB_8iteratorEbEERKT_DpOT0_:
 2822|      3|    std::pair<iterator, bool> operator()(const K& key, Args&&... args) const {
 2823|      3|      auto res = s.find_or_prepare_insert(key);
 2824|      3|      if (res.second) {
  ------------------
  |  Branch (2824:11): [True: 3, False: 0]
  ------------------
 2825|      3|        s.emplace_at(res.first, std::forward<Args>(args)...);
 2826|      3|      }
 2827|      3|      return {s.iterator_at(res.first), res.second};
 2828|      3|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE22find_or_prepare_insertINS8_12basic_stringIcNS8_11char_traitsIcEENS9_IcEEEEEENS8_4pairImbEERKT_:
 3086|      3|  std::pair<size_t, bool> find_or_prepare_insert(const K& key) {
 3087|      3|    prefetch_heap_block();
 3088|      3|    auto hash = hash_ref()(key);
 3089|      3|    auto seq = probe(common(), hash);
 3090|      3|    const ctrl_t* ctrl = control();
 3091|      3|    while (true) {
  ------------------
  |  Branch (3091:12): [True: 3, Folded]
  ------------------
 3092|      3|      Group g{ctrl + seq.offset()};
 3093|      3|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (3093:23): [True: 0, False: 3]
  ------------------
 3094|      0|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 0]
  |  |  |  Branch (179:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3095|      0|                EqualElement<K>{key, eq_ref()},
 3096|      0|                PolicyTraits::element(slot_array() + seq.offset(i)))))
 3097|      0|          return {seq.offset(i), false};
 3098|      0|      }
 3099|      3|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) break;
  ------------------
  |  |  179|      3|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 3, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 3]
  |  |  |  Branch (179:57): [True: 3, False: 0]
  |  |  ------------------
  ------------------
 3100|      0|      seq.next();
 3101|      0|      assert(seq.index() <= capacity() && "full table!");
 3102|      0|    }
 3103|      3|    return {prepare_insert(hash), true};
 3104|      3|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE10emplace_atIJRKNS8_12basic_stringIcNS8_11char_traitsIcEENS9_IcEEEEEEEvmDpOT_:
 3151|      3|  void emplace_at(size_t i, Args&&... args) {
 3152|      3|    construct(slot_array() + i, std::forward<Args>(args)...);
 3153|       |
 3154|       |    assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) ==
 3155|      3|               iterator_at(i) &&
 3156|      3|           "constructed value does not match the lookup key");
 3157|      3|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE9constructIJRKNS8_12basic_stringIcNS8_11char_traitsIcEENS9_IcEEEEEEEvPS4_DpOT_:
 2851|      3|  inline void construct(slot_type* slot, Args&&... args) {
 2852|      3|    PolicyTraits::construct(&alloc_ref(), slot, std::forward<Args>(args)...);
 2853|      3|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_17DescriptorBuilder12MessageHintsEEENS1_6HashEqIS8_vE4HashENSD_2EqENSt3__19allocatorINSG_4pairIKS8_SA_EEEEE5emptyEv:
 2286|      4|  bool empty() const { return !size(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_17DescriptorBuilder12MessageHintsEEENS1_6HashEqIS8_vE4HashENSD_2EqENSt3__19allocatorINSG_4pairIKS8_SA_EEEEE4sizeEv:
 2287|      4|  size_t size() const { return common().size(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE5emptyEv:
 2286|      4|  bool empty() const { return !size(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE4findISA_EENSM_8iteratorERKT_:
 2706|     47|  iterator find(const key_arg<K>& key) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2707|     47|    prefetch_heap_block();
 2708|     47|    return find(key, hash_ref()(key));
 2709|     47|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE4findISA_EENSM_8iteratorERKT_m:
 2688|     47|                size_t hash) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2689|     47|    auto seq = probe(common(), hash);
 2690|     47|    slot_type* slot_ptr = slot_array();
 2691|     47|    const ctrl_t* ctrl = control();
 2692|     47|    while (true) {
  ------------------
  |  Branch (2692:12): [True: 47, Folded]
  ------------------
 2693|     47|      Group g{ctrl + seq.offset()};
 2694|     47|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (2694:23): [True: 4, False: 46]
  ------------------
 2695|      4|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      4|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 1, False: 3]
  |  |  |  Branch (179:48): [Folded, False: 4]
  |  |  |  Branch (179:57): [True: 1, False: 3]
  |  |  ------------------
  ------------------
 2696|      4|                EqualElement<K>{key, eq_ref()},
 2697|      4|                PolicyTraits::element(slot_ptr + seq.offset(i)))))
 2698|      1|          return iterator_at(seq.offset(i));
 2699|      4|      }
 2700|     46|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
  ------------------
  |  |  179|     46|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 46, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 46]
  |  |  |  Branch (179:57): [True: 46, False: 0]
  |  |  ------------------
  ------------------
 2701|      0|      seq.next();
 2702|       |      assert(seq.index() <= capacity() && "full table!");
 2703|      0|    }
 2704|     47|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE3endEv:
 2271|     93|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2272|     93|    return iterator(common().generation_ptr());
 2273|     93|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE8iteratorC2EPKh:
 1993|     93|        : HashSetIteratorGenerationInfo(generation_ptr), ctrl_(nullptr) {}
_ZN4absl12lts_2024011618container_internalneERKNS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE8iteratorESP_:
 1977|     47|    friend bool operator!=(const iterator& a, const iterator& b) {
 1978|     47|      return !(a == b);
 1979|     47|    }
_ZN4absl12lts_2024011618container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE8iteratorESP_:
 1970|     47|    friend bool operator==(const iterator& a, const iterator& b) {
 1971|     47|      AssertIsValidForComparison(a.ctrl_, a.generation(), a.generation_ptr());
 1972|     47|      AssertIsValidForComparison(b.ctrl_, b.generation(), b.generation_ptr());
 1973|     47|      AssertSameContainer(a.ctrl_, b.ctrl_, a.slot_, b.slot_,
 1974|     47|                          a.generation_ptr(), b.generation_ptr());
 1975|     47|      return a.ctrl_ == b.ctrl_;
 1976|     47|    }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE8iteratorptEv:
 1950|      1|    pointer operator->() const {
 1951|      1|      AssertIsFull(ctrl_, generation(), generation_ptr(), "operator->");
 1952|      1|      return &operator*();
 1953|      1|    }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE8iteratordeEv:
 1944|      1|    reference operator*() const {
 1945|      1|      AssertIsFull(ctrl_, generation(), generation_ptr(), "operator*()");
 1946|      1|      return unchecked_deref();
 1947|      1|    }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE8iterator15unchecked_derefEv:
 2029|      1|    reference unchecked_deref() const { return PolicyTraits::element(slot_); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE8containsINS8_12basic_stringIcNS8_11char_traitsIcEENS9_IcEEEEEEbRKT_:
 2724|    424|  bool contains(const key_arg<K>& key) const {
 2725|       |    // Here neither the iterator returned by `find()` nor `end()` can be invalid
 2726|       |    // outside of potential thread-safety issues.
 2727|       |    // `find()`'s return value is constructed, used, and then destructed
 2728|       |    // all in this context.
 2729|    424|    return !find(key).unchecked_equals(end());
 2730|    424|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE4findINS8_12basic_stringIcNS8_11char_traitsIcEENS9_IcEEEEEENSB_14const_iteratorERKT_:
 2718|    424|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2719|    424|    prefetch_heap_block();
 2720|    424|    return find(key, hash_ref()(key));
 2721|    424|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE4findINS8_12basic_stringIcNS8_11char_traitsIcEENS9_IcEEEEEENSB_14const_iteratorERKT_m:
 2713|    424|                      size_t hash) const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2714|    424|    return const_cast<raw_hash_set*>(this)->find(key, hash);
 2715|    424|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINS0_11string_viewEEENS1_10StringHashENS1_8StringEqENSt3__19allocatorIS4_EEE4findINS8_12basic_stringIcNS8_11char_traitsIcEENS9_IcEEEEEENSB_8iteratorERKT_m:
 2688|    424|                size_t hash) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2689|    424|    auto seq = probe(common(), hash);
 2690|    424|    slot_type* slot_ptr = slot_array();
 2691|    424|    const ctrl_t* ctrl = control();
 2692|    424|    while (true) {
  ------------------
  |  Branch (2692:12): [True: 424, Folded]
  ------------------
 2693|    424|      Group g{ctrl + seq.offset()};
 2694|    424|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (2694:23): [True: 0, False: 424]
  ------------------
 2695|      0|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 0]
  |  |  |  Branch (179:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2696|      0|                EqualElement<K>{key, eq_ref()},
 2697|      0|                PolicyTraits::element(slot_ptr + seq.offset(i)))))
 2698|      0|          return iterator_at(seq.offset(i));
 2699|      0|      }
 2700|    424|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
  ------------------
  |  |  179|    424|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 424, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 424]
  |  |  |  Branch (179:57): [True: 424, False: 0]
  |  |  ------------------
  ------------------
 2701|      0|      seq.next();
 2702|       |      assert(seq.index() <= capacity() && "full table!");
 2703|      0|    }
 2704|    424|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEES8_EENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_S8_EEEEEC2Ev:
 2088|      4|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEEiEENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_iEEEEEC2Ev:
 2088|      4|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEED2Ev:
 2264|      4|  ~raw_hash_set() { destructor_impl(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE15destructor_implEv:
 2882|      4|  inline void destructor_impl() {
 2883|      4|    if (capacity() == 0) return;
  ------------------
  |  Branch (2883:9): [True: 4, False: 0]
  ------------------
 2884|      0|    destroy_slots();
 2885|      0|    dealloc();
 2886|      0|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE8capacityEv:
 2288|      4|  size_t capacity() const { return common().capacity(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE6commonEv:
 3194|     12|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE7controlEv:
 3196|      4|  ctrl_t* control() const { return common().control(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE10slot_arrayEv:
 3197|      4|  slot_type* slot_array() const {
 3198|      4|    return static_cast<slot_type*>(common().slot_array());
 3199|      4|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE6commonEv:
 3193|      8|  CommonFields& common() { return settings_.template get<0>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEEC2Ev:
 2088|      6|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE5beginEv:
 2266|      4|  iterator begin() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2267|      4|    auto it = iterator_at(0);
 2268|      4|    it.skip_empty_or_deleted();
 2269|      4|    return it;
 2270|      4|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE11iterator_atEm:
 3159|      4|  iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3160|      4|    return {control() + i, slot_array() + i, common().generation_ptr()};
 3161|      4|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE8iteratorC2EPNS1_6ctrl_tEPNS1_13map_slot_typeIS8_SC_EEPKh:
 1984|      4|        : HashSetIteratorGenerationInfo(generation_ptr),
 1985|      4|          ctrl_(ctrl),
 1986|      4|          slot_(slot) {
 1987|       |      // This assumption helps the compiler know that any non-end iterator is
 1988|       |      // not equal to any end iterator.
 1989|      4|      ABSL_ASSUME(ctrl != nullptr);
  ------------------
  |  |  259|      4|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1990|      4|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE8iterator21skip_empty_or_deletedEv:
 1999|      4|    void skip_empty_or_deleted() {
 2000|      4|      while (IsEmptyOrDeleted(*ctrl_)) {
  ------------------
  |  Branch (2000:14): [True: 0, False: 4]
  ------------------
 2001|      0|        uint32_t shift =
 2002|      0|            GroupEmptyOrDeleted{ctrl_}.CountLeadingEmptyOrDeleted();
 2003|      0|        ctrl_ += shift;
 2004|      0|        slot_ += shift;
 2005|      0|      }
 2006|      4|      if (ABSL_PREDICT_FALSE(*ctrl_ == ctrl_t::kSentinel)) ctrl_ = nullptr;
  ------------------
  |  |  178|      4|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 4, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 4]
  |  |  |  Branch (178:58): [True: 4, False: 0]
  |  |  ------------------
  ------------------
 2007|      4|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE3endEv:
 2271|      4|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2272|      4|    return iterator(common().generation_ptr());
 2273|      4|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE8iteratorC2EPKh:
 1993|      4|        : HashSetIteratorGenerationInfo(generation_ptr), ctrl_(nullptr) {}
_ZN4absl12lts_2024011618container_internalneERKNS1_12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE8iteratorESR_:
 1977|      4|    friend bool operator!=(const iterator& a, const iterator& b) {
 1978|      4|      return !(a == b);
 1979|      4|    }
_ZN4absl12lts_2024011618container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE8iteratorESR_:
 1970|      4|    friend bool operator==(const iterator& a, const iterator& b) {
 1971|      4|      AssertIsValidForComparison(a.ctrl_, a.generation(), a.generation_ptr());
 1972|      4|      AssertIsValidForComparison(b.ctrl_, b.generation(), b.generation_ptr());
 1973|      4|      AssertSameContainer(a.ctrl_, b.ctrl_, a.slot_, b.slot_,
 1974|      4|                          a.generation_ptr(), b.generation_ptr());
 1975|      4|      return a.ctrl_ == b.ctrl_;
 1976|      4|    }
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE8capacityEv:
 2288|     10|  size_t capacity() const { return common().capacity(); }
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE6commonEv:
 3194|     68|  const CommonFields& common() const { return settings_.template get<0>(); }
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE7controlEv:
 3196|     29|  ctrl_t* control() const { return common().control(); }
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE10slot_arrayEv:
 3197|     17|  slot_type* slot_array() const {
 3198|     17|    return static_cast<slot_type*>(common().slot_array());
 3199|     17|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE9alloc_refEv:
 3206|     17|  allocator_type& alloc_ref() { return settings_.template get<3>(); }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE5infozEv:
 3200|      6|  HashtablezInfoHandle infoz() { return common().infoz(); }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE6commonEv:
 3193|     77|  CommonFields& common() { return settings_.template get<0>(); }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEEC2Ev:
 2088|      2|      std::is_nothrow_default_constructible<allocator_type>::value) {}
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEEC2Ev:
 2088|      2|      std::is_nothrow_default_constructible<allocator_type>::value) {}
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE19prefetch_heap_blockEv:
 3187|      6|  void prefetch_heap_block() const {
 3188|      6|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|      6|    __builtin_prefetch(control(), 0, 1);
 3190|      6|#endif
 3191|      6|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE11iterator_atEm:
 3159|      6|  iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3160|      6|    return {control() + i, slot_array() + i, common().generation_ptr()};
 3161|      6|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE8iteratorC2EPNS1_6ctrl_tEPS9_PKh:
 1984|      6|        : HashSetIteratorGenerationInfo(generation_ptr),
 1985|      6|          ctrl_(ctrl),
 1986|      6|          slot_(slot) {
 1987|       |      // This assumption helps the compiler know that any non-end iterator is
 1988|       |      // not equal to any end iterator.
 1989|      6|      ABSL_ASSUME(ctrl != nullptr);
  ------------------
  |  |  259|      6|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1990|      6|    }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE8hash_refEv:
 3202|      6|  hasher& hash_ref() { return settings_.template get<1>(); }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE6insertIS9_TnNSF_9enable_ifIXsr4absl11disjunctionINSF_14is_convertibleIRKT_S9_EENSI_22SameAsElementReferenceISO_EEEE5valueEiE4typeELi0ETnNSK_IXsr14IsDecomposableISO_EE5valueEiE4typeELi0EEENSF_4pairINSI_8iteratorEbEESO_:
 2339|      6|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2340|      6|    return emplace(value);
 2341|      6|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE7emplaceIJRKS9_ETnNSF_9enable_ifIXsr14IsDecomposableIDpT_EE5valueEiE4typeELi0EEENSF_4pairINSI_8iteratorEbEEDpOSN_:
 2422|      6|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2423|      6|    return PolicyTraits::apply(EmplaceDecomposable{*this},
 2424|      6|                               std::forward<Args>(args)...);
 2425|      6|  }
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE19EmplaceDecomposableclIS9_JRKS9_EEENSF_4pairINSI_8iteratorEbEERKT_DpOT0_:
 2822|      6|    std::pair<iterator, bool> operator()(const K& key, Args&&... args) const {
 2823|      6|      auto res = s.find_or_prepare_insert(key);
 2824|      6|      if (res.second) {
  ------------------
  |  Branch (2824:11): [True: 6, False: 0]
  ------------------
 2825|      6|        s.emplace_at(res.first, std::forward<Args>(args)...);
 2826|      6|      }
 2827|      6|      return {s.iterator_at(res.first), res.second};
 2828|      6|    }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE22find_or_prepare_insertIS9_EENSF_4pairImbEERKT_:
 3086|      6|  std::pair<size_t, bool> find_or_prepare_insert(const K& key) {
 3087|      6|    prefetch_heap_block();
 3088|      6|    auto hash = hash_ref()(key);
 3089|      6|    auto seq = probe(common(), hash);
 3090|      6|    const ctrl_t* ctrl = control();
 3091|      6|    while (true) {
  ------------------
  |  Branch (3091:12): [True: 6, Folded]
  ------------------
 3092|      6|      Group g{ctrl + seq.offset()};
 3093|      6|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (3093:23): [True: 0, False: 6]
  ------------------
 3094|      0|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 0]
  |  |  |  Branch (179:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3095|      0|                EqualElement<K>{key, eq_ref()},
 3096|      0|                PolicyTraits::element(slot_array() + seq.offset(i)))))
 3097|      0|          return {seq.offset(i), false};
 3098|      0|      }
 3099|      6|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) break;
  ------------------
  |  |  179|      6|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 6, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 6]
  |  |  |  Branch (179:57): [True: 6, False: 0]
  |  |  ------------------
  ------------------
 3100|      0|      seq.next();
 3101|      0|      assert(seq.index() <= capacity() && "full table!");
 3102|      0|    }
 3103|      6|    return {prepare_insert(hash), true};
 3104|      6|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE14prepare_insertEm:
 3110|      6|  size_t prepare_insert(size_t hash) ABSL_ATTRIBUTE_NOINLINE {
 3111|      6|    const bool rehash_for_bug_detection =
 3112|      6|        common().should_rehash_for_bug_detection_on_insert();
 3113|      6|    if (rehash_for_bug_detection) {
  ------------------
  |  Branch (3113:9): [True: 0, False: 6]
  ------------------
 3114|       |      // Move to a different heap allocation in order to detect bugs.
 3115|      0|      const size_t cap = capacity();
 3116|      0|      resize(growth_left() > 0 ? cap : NextCapacity(cap));
  ------------------
  |  Branch (3116:14): [True: 0, False: 0]
  ------------------
 3117|      0|    }
 3118|      6|    auto target = find_first_non_full(common(), hash);
 3119|      6|    if (!rehash_for_bug_detection &&
  ------------------
  |  Branch (3119:9): [True: 6, False: 0]
  ------------------
 3120|      6|        ABSL_PREDICT_FALSE(growth_left() == 0 &&
  ------------------
  |  |  178|     11|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 5, False: 1]
  |  |  |  Branch (178:49): [Folded, False: 6]
  |  |  |  Branch (178:59): [True: 5, False: 1]
  |  |  |  Branch (178:59): [True: 5, False: 0]
  |  |  ------------------
  ------------------
 3121|      6|                           !IsDeleted(control()[target.offset]))) {
 3122|      5|      size_t old_capacity = capacity();
 3123|      5|      rehash_and_grow_if_necessary();
 3124|       |      // NOTE: It is safe to use `FindFirstNonFullAfterResize`.
 3125|       |      // `FindFirstNonFullAfterResize` must be called right after resize.
 3126|       |      // `rehash_and_grow_if_necessary` may *not* call `resize`
 3127|       |      // and perform `drop_deletes_without_resize` instead. But this
 3128|       |      // could happen only on big tables.
 3129|       |      // For big tables `FindFirstNonFullAfterResize` will always
 3130|       |      // fallback to normal `find_first_non_full`, so it is safe to use it.
 3131|      5|      target = HashSetResizeHelper::FindFirstNonFullAfterResize(
 3132|      5|          common(), old_capacity, hash);
 3133|      5|    }
 3134|      6|    common().increment_size();
 3135|      6|    set_growth_left(growth_left() - IsEmpty(control()[target.offset]));
 3136|      6|    SetCtrl(common(), target.offset, H2(hash), sizeof(slot_type));
 3137|      6|    common().maybe_increment_generation_on_insert();
 3138|      6|    infoz().RecordInsert(hash, target.probe_length);
 3139|      6|    return target.offset;
 3140|      6|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE6resizeEm:
 2905|      5|  ABSL_ATTRIBUTE_NOINLINE void resize(size_t new_capacity) {
 2906|      5|    assert(IsValidCapacity(new_capacity));
 2907|      5|    HashSetResizeHelper resize_helper(common());
 2908|      5|    auto* old_slots = slot_array();
 2909|      5|    common().set_capacity(new_capacity);
 2910|       |    // Note that `InitializeSlots` does different number initialization steps
 2911|       |    // depending on the values of `transfer_uses_memcpy` and capacities.
 2912|       |    // Refer to the comment in `InitializeSlots` for more details.
 2913|      5|    const bool grow_single_group =
 2914|      5|        resize_helper.InitializeSlots<CharAlloc, sizeof(slot_type),
 2915|      5|                                      PolicyTraits::transfer_uses_memcpy(),
 2916|      5|                                      alignof(slot_type)>(
 2917|      5|            common(), const_cast<std::remove_const_t<slot_type>*>(old_slots),
 2918|      5|            CharAlloc(alloc_ref()));
 2919|       |
 2920|      5|    if (resize_helper.old_capacity() == 0) {
  ------------------
  |  Branch (2920:9): [True: 2, False: 3]
  ------------------
 2921|       |      // InitializeSlots did all the work including infoz().RecordRehash().
 2922|      2|      return;
 2923|      2|    }
 2924|       |
 2925|      3|    if (grow_single_group) {
  ------------------
  |  Branch (2925:9): [True: 3, False: 0]
  ------------------
 2926|      3|      if (PolicyTraits::transfer_uses_memcpy()) {
  ------------------
  |  Branch (2926:11): [Folded, False: 3]
  ------------------
 2927|       |        // InitializeSlots did all the work.
 2928|      0|        return;
 2929|      0|      }
 2930|       |      // We want GrowSizeIntoSingleGroup to be called here in order to make
 2931|       |      // InitializeSlots not depend on PolicyTraits.
 2932|      3|      resize_helper.GrowSizeIntoSingleGroup<PolicyTraits>(common(), alloc_ref(),
 2933|      3|                                                          old_slots);
 2934|      3|    } else {
 2935|       |      // InitializeSlots prepares control bytes to correspond to empty table.
 2936|      0|      auto* new_slots = slot_array();
 2937|      0|      size_t total_probe_length = 0;
 2938|      0|      for (size_t i = 0; i != resize_helper.old_capacity(); ++i) {
  ------------------
  |  Branch (2938:26): [True: 0, False: 0]
  ------------------
 2939|      0|        if (IsFull(resize_helper.old_ctrl()[i])) {
  ------------------
  |  Branch (2939:13): [True: 0, False: 0]
  ------------------
 2940|      0|          size_t hash = PolicyTraits::apply(
 2941|      0|              HashElement{hash_ref()}, PolicyTraits::element(old_slots + i));
 2942|      0|          auto target = find_first_non_full(common(), hash);
 2943|      0|          size_t new_i = target.offset;
 2944|      0|          total_probe_length += target.probe_length;
 2945|      0|          SetCtrl(common(), new_i, H2(hash), sizeof(slot_type));
 2946|      0|          transfer(new_slots + new_i, old_slots + i);
 2947|      0|        }
 2948|      0|      }
 2949|      0|      infoz().RecordRehash(total_probe_length);
 2950|      0|    }
 2951|      3|    resize_helper.DeallocateOld<alignof(slot_type)>(
 2952|      3|        CharAlloc(alloc_ref()), sizeof(slot_type),
 2953|      3|        const_cast<std::remove_const_t<slot_type>*>(old_slots));
 2954|      3|  }
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper23GrowSizeIntoSingleGroupINS1_18hash_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEEvEENSt3__19allocatorISB_EEEEvRNS1_12CommonFieldsERT0_PNT_9slot_typeE:
 1655|      3|                               typename PolicyTraits::slot_type* old_slots) {
 1656|      3|    assert(old_capacity_ < Group::kWidth / 2);
 1657|      3|    assert(IsGrowingIntoSingleGroupApplicable(old_capacity_, c.capacity()));
 1658|      3|    using slot_type = typename PolicyTraits::slot_type;
 1659|      3|    assert(is_single_group(c.capacity()));
 1660|       |
 1661|      3|    auto* new_slots = reinterpret_cast<slot_type*>(c.slot_array());
 1662|       |
 1663|      3|    size_t shuffle_bit = old_capacity_ / 2 + 1;
 1664|      8|    for (size_t i = 0; i < old_capacity_; ++i) {
  ------------------
  |  Branch (1664:24): [True: 5, False: 3]
  ------------------
 1665|      5|      if (IsFull(old_ctrl_[i])) {
  ------------------
  |  Branch (1665:11): [True: 5, False: 0]
  ------------------
 1666|      5|        size_t new_i = i ^ shuffle_bit;
 1667|      5|        SanitizerUnpoisonMemoryRegion(new_slots + new_i, sizeof(slot_type));
 1668|      5|        PolicyTraits::transfer(&alloc_ref, new_slots + new_i, old_slots + i);
 1669|      5|      }
 1670|      5|    }
 1671|      3|    PoisonSingleGroupEmptySlots(c, sizeof(slot_type));
 1672|      3|  }
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE11growth_leftEv:
 3181|     12|  size_t growth_left() const { return common().growth_left(); }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE28rehash_and_grow_if_necessaryEv:
 2970|      5|  void rehash_and_grow_if_necessary() {
 2971|      5|    const size_t cap = capacity();
 2972|      5|    if (cap > Group::kWidth &&
  ------------------
  |  Branch (2972:9): [True: 0, False: 5]
  ------------------
 2973|       |        // Do these calculations in 64-bit to avoid overflow.
 2974|      0|        size() * uint64_t{32} <= cap * uint64_t{25}) {
  ------------------
  |  Branch (2974:9): [True: 0, False: 0]
  ------------------
 2975|       |      // Squash DELETED without growing if there is enough capacity.
 2976|       |      //
 2977|       |      // Rehash in place if the current size is <= 25/32 of capacity.
 2978|       |      // Rationale for such a high factor: 1) drop_deletes_without_resize() is
 2979|       |      // faster than resize, and 2) it takes quite a bit of work to add
 2980|       |      // tombstones.  In the worst case, seems to take approximately 4
 2981|       |      // insert/erase pairs to create a single tombstone and so if we are
 2982|       |      // rehashing because of tombstones, we can afford to rehash-in-place as
 2983|       |      // long as we are reclaiming at least 1/8 the capacity without doing more
 2984|       |      // than 2X the work.  (Where "work" is defined to be size() for rehashing
 2985|       |      // or rehashing in place, and 1 for an insert or erase.)  But rehashing in
 2986|       |      // place is faster per operation than inserting or even doubling the size
 2987|       |      // of the table, so we actually afford to reclaim even less space from a
 2988|       |      // resize-in-place.  The decision is to rehash in place if we can reclaim
 2989|       |      // at about 1/8th of the usable capacity (specifically 3/28 of the
 2990|       |      // capacity) which means that the total cost of rehashing will be a small
 2991|       |      // fraction of the total work.
 2992|       |      //
 2993|       |      // Here is output of an experiment using the BM_CacheInSteadyState
 2994|       |      // benchmark running the old case (where we rehash-in-place only if we can
 2995|       |      // reclaim at least 7/16*capacity) vs. this code (which rehashes in place
 2996|       |      // if we can recover 3/32*capacity).
 2997|       |      //
 2998|       |      // Note that although in the worst-case number of rehashes jumped up from
 2999|       |      // 15 to 190, but the number of operations per second is almost the same.
 3000|       |      //
 3001|       |      // Abridged output of running BM_CacheInSteadyState benchmark from
 3002|       |      // raw_hash_set_benchmark.   N is the number of insert/erase operations.
 3003|       |      //
 3004|       |      //      | OLD (recover >= 7/16        | NEW (recover >= 3/32)
 3005|       |      // size |    N/s LoadFactor NRehashes |    N/s LoadFactor NRehashes
 3006|       |      //  448 | 145284       0.44        18 | 140118       0.44        19
 3007|       |      //  493 | 152546       0.24        11 | 151417       0.48        28
 3008|       |      //  538 | 151439       0.26        11 | 151152       0.53        38
 3009|       |      //  583 | 151765       0.28        11 | 150572       0.57        50
 3010|       |      //  628 | 150241       0.31        11 | 150853       0.61        66
 3011|       |      //  672 | 149602       0.33        12 | 150110       0.66        90
 3012|       |      //  717 | 149998       0.35        12 | 149531       0.70       129
 3013|       |      //  762 | 149836       0.37        13 | 148559       0.74       190
 3014|       |      //  807 | 149736       0.39        14 | 151107       0.39        14
 3015|       |      //  852 | 150204       0.42        15 | 151019       0.42        15
 3016|      0|      drop_deletes_without_resize();
 3017|      5|    } else {
 3018|       |      // Otherwise grow the container.
 3019|      5|      resize(NextCapacity(cap));
 3020|      5|    }
 3021|      5|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE15set_growth_leftEm:
 3182|      6|  void set_growth_left(size_t gl) { return common().set_growth_left(gl); }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE10emplace_atIJRKS9_EEEvmDpOT_:
 3151|      6|  void emplace_at(size_t i, Args&&... args) {
 3152|      6|    construct(slot_array() + i, std::forward<Args>(args)...);
 3153|       |
 3154|       |    assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) ==
 3155|      6|               iterator_at(i) &&
 3156|      6|           "constructed value does not match the lookup key");
 3157|      6|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE9constructIJRKS9_EEEvPS9_DpOT_:
 2851|      6|  inline void construct(slot_type* slot, Args&&... args) {
 2852|      6|    PolicyTraits::construct(&alloc_ref(), slot, std::forward<Args>(args)...);
 2853|      6|  }

_ZN4absl12lts_202401166HashOfITpTnRiJEJPKN6google8protobuf11MessageLiteEiEEEmDpRKT0_:
  267|      9|size_t HashOf(const Types&... values) {
  268|      9|  auto tuple = std::tie(values...);
  269|      9|  return absl::Hash<decltype(tuple)>{}(tuple);
  270|      9|}
_ZN4absl12lts_202401166HashOfITpTnRiJEJNS0_11string_viewEEEEmDpRKT0_:
  267|  1.51k|size_t HashOf(const Types&... values) {
  268|  1.51k|  auto tuple = std::tie(values...);
  269|  1.51k|  return absl::Hash<decltype(tuple)>{}(tuple);
  270|  1.51k|}
_ZN4absl12lts_202401166HashOfITpTnRiJEJNSt3__14pairIPKviEEEEEmDpRKT0_:
  267|    413|size_t HashOf(const Types&... values) {
  268|    413|  auto tuple = std::tie(values...);
  269|    413|  return absl::Hash<decltype(tuple)>{}(tuple);
  270|    413|}
_ZN4absl12lts_202401166HashOfITpTnRiJEJNSt3__14pairIPKvNS0_11string_viewEEEEEEmDpRKT0_:
  267|  1.55k|size_t HashOf(const Types&... values) {
  268|  1.55k|  auto tuple = std::tie(values...);
  269|  1.55k|  return absl::Hash<decltype(tuple)>{}(tuple);
  270|  1.55k|}
_ZN4absl12lts_202401166HashOfITpTnRiJEJNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEEEmDpRKT0_:
  267|      4|size_t HashOf(const Types&... values) {
  268|      4|  auto tuple = std::tie(values...);
  269|      4|  return absl::Hash<decltype(tuple)>{}(tuple);
  270|      4|}

_ZN4absl12lts_2024011613hash_internal15MixingHashState16LowLevelHashImplEPKhm:
   63|  2.45k|                                           size_t len) {
   64|  2.45k|  return LowLevelHash(data, len, Seed(), kHashSalt);
   65|  2.45k|}

_ZN4absl12lts_2024011613hash_internal15MixingHashState18combine_contiguousES2_PKhm:
 1023|  12.3k|                                            size_t size) {
 1024|  12.3k|    return MixingHashState(
 1025|  12.3k|        CombineContiguousImpl(hash_state.state_, first, size,
 1026|  12.3k|                              std::integral_constant<int, sizeof(size_t)>{}));
 1027|  12.3k|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashStateC2Ev:
 1052|  4.38k|  MixingHashState() : state_(Seed()) {}
_ZN4absl12lts_2024011613hash_internal15MixingHashStateC2Em:
 1085|  12.3k|  explicit MixingHashState(uint64_t state) : state_(state) {}
_ZN4absl12lts_2024011613hash_internal15MixingHashState9Read9To16EPKhm:
 1114|    874|                                                 size_t len) {
 1115|    874|    uint64_t low_mem = absl::base_internal::UnalignedLoad64(p);
 1116|    874|    uint64_t high_mem = absl::base_internal::UnalignedLoad64(p + len - 8);
 1117|    874|#ifdef ABSL_IS_LITTLE_ENDIAN
 1118|    874|    uint64_t most_significant = high_mem;
 1119|    874|    uint64_t least_significant = low_mem;
 1120|       |#else
 1121|       |    uint64_t most_significant = low_mem;
 1122|       |    uint64_t least_significant = high_mem;
 1123|       |#endif
 1124|    874|    return {least_significant, most_significant};
 1125|    874|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState8Read4To8EPKhm:
 1128|  8.94k|  static uint64_t Read4To8(const unsigned char* p, size_t len) {
 1129|  8.94k|    uint32_t low_mem = absl::base_internal::UnalignedLoad32(p);
 1130|  8.94k|    uint32_t high_mem = absl::base_internal::UnalignedLoad32(p + len - 4);
 1131|  8.94k|#ifdef ABSL_IS_LITTLE_ENDIAN
 1132|  8.94k|    uint32_t most_significant = high_mem;
 1133|  8.94k|    uint32_t least_significant = low_mem;
 1134|       |#else
 1135|       |    uint32_t most_significant = low_mem;
 1136|       |    uint32_t least_significant = high_mem;
 1137|       |#endif
 1138|  8.94k|    return (static_cast<uint64_t>(most_significant) << (len - 4) * 8) |
 1139|  8.94k|           least_significant;
 1140|  8.94k|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState8Read1To3EPKhm:
 1143|     28|  static uint32_t Read1To3(const unsigned char* p, size_t len) {
 1144|       |    // The trick used by this implementation is to avoid branches if possible.
 1145|     28|    unsigned char mem0 = p[0];
 1146|     28|    unsigned char mem1 = p[len / 2];
 1147|     28|    unsigned char mem2 = p[len - 1];
 1148|     28|#ifdef ABSL_IS_LITTLE_ENDIAN
 1149|     28|    unsigned char significant2 = mem2;
 1150|     28|    unsigned char significant1 = mem1;
 1151|     28|    unsigned char significant0 = mem0;
 1152|       |#else
 1153|       |    unsigned char significant2 = mem0;
 1154|       |    unsigned char significant1 = len == 2 ? mem0 : mem1;
 1155|       |    unsigned char significant0 = mem2;
 1156|       |#endif
 1157|     28|    return static_cast<uint32_t>(significant0 |                     //
 1158|     28|                                 (significant1 << (len / 2 * 8)) |  //
 1159|     28|                                 (significant2 << ((len - 1) * 8)));
 1160|     28|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState3MixEmm:
 1162|  11.4k|  ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t Mix(uint64_t state, uint64_t v) {
 1163|       |    // Though the 128-bit product on AArch64 needs two instructions, it is
 1164|       |    // still a good balance between speed and hash quality.
 1165|  11.4k|    using MultType =
 1166|  11.4k|        absl::conditional_t<sizeof(size_t) == 4, uint64_t, uint128>;
 1167|       |    // We do the addition in 64-bit space to make sure the 128-bit
 1168|       |    // multiplication is fast. If we were to do it as MultType the compiler has
 1169|       |    // to assume that the high word is non-zero and needs to perform 2
 1170|       |    // multiplications instead of one.
 1171|  11.4k|    MultType m = state + v;
 1172|  11.4k|    m *= kMul;
 1173|  11.4k|    return static_cast<uint64_t>(m ^ (m >> (sizeof(m) * 8 / 2)));
 1174|  11.4k|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState6Hash64EPKhm:
 1181|  2.45k|                                                      size_t len) {
 1182|  2.45k|#ifdef ABSL_HAVE_INTRINSIC_INT128
 1183|  2.45k|    return LowLevelHashImpl(data, len);
 1184|       |#else
 1185|       |    return hash_internal::CityHash64(reinterpret_cast<const char*>(data), len);
 1186|       |#endif
 1187|  2.45k|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState4SeedEv:
 1205|  6.83k|  ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t Seed() {
 1206|  6.83k|#if (!defined(__clang__) || __clang_major__ > 11) && \
 1207|  6.83k|    (!defined(__apple_build_version__) ||            \
 1208|  6.83k|     __apple_build_version__ >= 19558921)  // Xcode 12
 1209|  6.83k|    return static_cast<uint64_t>(reinterpret_cast<uintptr_t>(&kSeed));
 1210|       |#else
 1211|       |    // Workaround the absence of
 1212|       |    // https://github.com/llvm/llvm-project/commit/bc15bf66dcca76cc06fe71fca35b74dc4d521021.
 1213|       |    return static_cast<uint64_t>(reinterpret_cast<uintptr_t>(kSeed));
 1214|       |#endif
 1215|  6.83k|  }
_ZN4absl12lts_2024011613hash_internal18PiecewiseChunkSizeEv:
   82|  2.45k|constexpr size_t PiecewiseChunkSize() { return 1024; }
_ZN4absl12lts_2024011613hash_internal15MixingHashState21CombineContiguousImplEmPKhmNSt3__117integral_constantIiLi8EEE:
 1247|  12.3k|    std::integral_constant<int, 8> /* sizeof_size_t */) {
 1248|       |  // For large values we use LowLevelHash or CityHash depending on the platform,
 1249|       |  // for small ones we just use a multiplicative hash.
 1250|  12.3k|  uint64_t v;
 1251|  12.3k|  if (len > 16) {
  ------------------
  |  Branch (1251:7): [True: 2.45k, False: 9.84k]
  ------------------
 1252|  2.45k|    if (ABSL_PREDICT_FALSE(len > PiecewiseChunkSize())) {
  ------------------
  |  |  178|  2.45k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 2.45k]
  |  |  |  Branch (178:49): [Folded, False: 2.45k]
  |  |  |  Branch (178:58): [True: 0, False: 2.45k]
  |  |  ------------------
  ------------------
 1253|      0|      return CombineLargeContiguousImpl64(state, first, len);
 1254|      0|    }
 1255|  2.45k|    v = Hash64(first, len);
 1256|  9.84k|  } else if (len > 8) {
  ------------------
  |  Branch (1256:14): [True: 874, False: 8.97k]
  ------------------
 1257|       |    // This hash function was constructed by the ML-driven algorithm discovery
 1258|       |    // using reinforcement learning. We fed the agent lots of inputs from
 1259|       |    // microbenchmarks, SMHasher, low hamming distance from generated inputs and
 1260|       |    // picked up the one that was good on micro and macrobenchmarks.
 1261|    874|    auto p = Read9To16(first, len);
 1262|    874|    uint64_t lo = p.first;
 1263|    874|    uint64_t hi = p.second;
 1264|       |    // Rotation by 53 was found to be most often useful when discovering these
 1265|       |    // hashing algorithms with ML techniques.
 1266|    874|    lo = absl::rotr(lo, 53);
 1267|    874|    state += kMul;
 1268|    874|    lo += state;
 1269|    874|    state ^= hi;
 1270|    874|    uint128 m = state;
 1271|    874|    m *= lo;
 1272|    874|    return static_cast<uint64_t>(m ^ (m >> 64));
 1273|  8.97k|  } else if (len >= 4) {
  ------------------
  |  Branch (1273:14): [True: 8.94k, False: 28]
  ------------------
 1274|  8.94k|    v = Read4To8(first, len);
 1275|  8.94k|  } else if (len > 0) {
  ------------------
  |  Branch (1275:14): [True: 28, False: 0]
  ------------------
 1276|     28|    v = Read1To3(first, len);
 1277|     28|  } else {
 1278|       |    // Empty ranges have no effect.
 1279|      0|    return state;
 1280|      0|  }
 1281|  11.4k|  return Mix(state, v);
 1282|  12.3k|}
_ZNK4absl12lts_2024011613hash_internal8HashImplINS0_11string_viewEEclERKS3_:
 1299|    781|  size_t operator()(const T& value) const {
 1300|    781|    return MixingHashState::hash(value);
 1301|    781|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState4hashINS0_11string_viewETnNSt3__19enable_ifIXntsr16IntegralFastPathIT_EE5valueEiE4typeELi0EEEmRKS7_:
 1045|    781|  static size_t hash(const T& value) {
 1046|    781|    return static_cast<size_t>(combine(MixingHashState{}, value).state_);
 1047|    781|  }
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineINS0_11string_viewEJEEES3_S3_RKT_DpRKT0_:
 1310|  3.85k|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|  3.85k|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|  3.85k|                        std::move(state), value),
 1313|  3.85k|                    values...);
 1314|  3.85k|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateENS0_11string_viewEEENSt3__19enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueES9_E4typeES9_RKT0_:
  937|  3.85k|        H> {
  938|  3.85k|      return AbslHashValue(std::move(state), value);
  939|  3.85k|    }
_ZN4absl12lts_2024011613hash_internal13AbslHashValueINS1_15MixingHashStateEEET_S4_NS0_11string_viewE:
  557|  3.85k|H AbslHashValue(H hash_state, absl::string_view str) {
  558|  3.85k|  return H::combine(
  559|  3.85k|      H::combine_contiguous(std::move(hash_state), str.data(), str.size()),
  560|  3.85k|      str.size());
  561|  3.85k|}
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE18combine_contiguousIcEES3_S3_PKT_m:
 1319|  3.85k|H HashStateBase<H>::combine_contiguous(H state, const T* data, size_t size) {
 1320|  3.85k|  return hash_internal::hash_range_or_bytes(std::move(state), data, size);
 1321|  3.85k|}
_ZN4absl12lts_2024011613hash_internal19hash_range_or_bytesINS1_15MixingHashStateEcEENSt3__19enable_ifIXsr23is_uniquely_representedIT0_EE5valueET_E4typeES7_PKS6_m:
  885|  3.85k|hash_range_or_bytes(H hash_state, const T* data, size_t size) {
  886|  3.85k|  const auto* bytes = reinterpret_cast<const unsigned char*>(data);
  887|  3.85k|  return H::combine_contiguous(std::move(hash_state), bytes, sizeof(T) * size);
  888|  3.85k|}
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineImJEEES3_S3_RKT_DpRKT0_:
 1310|  5.93k|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|  5.93k|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|  5.93k|                        std::move(state), value),
 1313|  5.93k|                    values...);
 1314|  5.93k|}
_ZN4absl12lts_2024011613hash_internal10HashSelect24UniquelyRepresentedProbe6InvokeINS1_15MixingHashStateEmEENSt3__19enable_ifIXsr23is_uniquely_representedIT0_EE5valueET_E4typeES9_RKS8_:
  927|  8.02k|        -> absl::enable_if_t<is_uniquely_represented<T>::value, H> {
  928|  8.02k|      return hash_internal::hash_bytes(std::move(state), value);
  929|  8.02k|    }
_ZN4absl12lts_2024011613hash_internal10hash_bytesINS1_15MixingHashStateEmEET_S4_RKT0_:
  340|  8.02k|H hash_bytes(H hash_state, const T& value) {
  341|  8.02k|  const unsigned char* start = reinterpret_cast<const unsigned char*>(&value);
  342|  8.02k|  return H::combine_contiguous(std::move(hash_state), start, sizeof(value));
  343|  8.02k|}
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineES3_:
  234|  15.7k|  static H combine(H state) { return state; }
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineImJmEEES3_S3_RKT_DpRKT0_:
 1310|  2.08k|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|  2.08k|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|  2.08k|                        std::move(state), value),
 1313|  2.08k|                    values...);
 1314|  2.08k|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateEPKvEENSt3__19enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESA_E4typeESA_RKT0_:
  937|  1.96k|        H> {
  938|  1.96k|      return AbslHashValue(std::move(state), value);
  939|  1.96k|    }
_ZN4absl12lts_2024011613hash_internal13AbslHashValueINS1_15MixingHashStateEPKvEENSt3__19enable_ifIXsr3std10is_pointerIT0_EE5valueET_E4typeES9_S8_:
  438|  1.96k|                                                             T ptr) {
  439|  1.96k|  auto v = reinterpret_cast<uintptr_t>(ptr);
  440|       |  // Due to alignment, pointers tend to have low bits as zero, and the next few
  441|       |  // bits follow a pattern since they are also multiples of some base value.
  442|       |  // Mixing the pointer twice helps prevent stuck low bits for certain alignment
  443|       |  // values.
  444|  1.96k|  return H::combine(std::move(hash_state), v, v);
  445|  1.96k|}
_ZNK4absl12lts_2024011613hash_internal8HashImplINSt3__15tupleIJRKPKN6google8protobuf11MessageLiteERKiEEEEclERKSE_:
 1299|      9|  size_t operator()(const T& value) const {
 1300|      9|    return MixingHashState::hash(value);
 1301|      9|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState4hashINSt3__15tupleIJRKPKN6google8protobuf11MessageLiteERKiEEETnNS4_9enable_ifIXntsr16IntegralFastPathIT_EE5valueEiE4typeELi0EEEmRKSH_:
 1045|      9|  static size_t hash(const T& value) {
 1046|      9|    return static_cast<size_t>(combine(MixingHashState{}, value).state_);
 1047|      9|  }
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineINSt3__15tupleIJRKPKN6google8protobuf11MessageLiteERKiEEEJEEES3_S3_RKT_DpRKT0_:
 1310|      9|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|      9|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|      9|                        std::move(state), value),
 1313|      9|                    values...);
 1314|      9|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateENSt3__15tupleIJRKPKN6google8protobuf11MessageLiteERKiEEEEENS6_9enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESJ_E4typeESJ_RKT0_:
  937|      9|        H> {
  938|      9|      return AbslHashValue(std::move(state), value);
  939|      9|    }
_ZN4absl12lts_2024011613hash_internal13AbslHashValueINS1_15MixingHashStateEJRKPKN6google8protobuf11MessageLiteERKiEEENSt3__19enable_ifIXsr4absl11conjunctionIDpNS1_11is_hashableIT0_EEEE5valueET_E4typeESJ_RKNSD_5tupleIJDpSG_EEE:
  516|      9|AbslHashValue(H hash_state, const std::tuple<Ts...>& t) {
  517|      9|  return hash_internal::hash_tuple(std::move(hash_state), t,
  518|      9|                                   absl::make_index_sequence<sizeof...(Ts)>());
  519|      9|}
_ZN4absl12lts_2024011613hash_internal10hash_tupleINS1_15MixingHashStateENSt3__15tupleIJRKPKN6google8protobuf11MessageLiteERKiEEEJLm0ELm1EEEET_SG_RKT0_NS4_16integer_sequenceImJXspT1_EEEE:
  503|      9|H hash_tuple(H hash_state, const Tuple& t, absl::index_sequence<Is...>) {
  504|      9|  return H::combine(std::move(hash_state), std::get<Is>(t)...);
  505|      9|}
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineIPKN6google8protobuf11MessageLiteEJiEEES3_S3_RKT_DpRKT0_:
 1310|      9|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|      9|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|      9|                        std::move(state), value),
 1313|      9|                    values...);
 1314|      9|}
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineIiJEEES3_S3_RKT_DpRKT0_:
 1310|    422|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|    422|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|    422|                        std::move(state), value),
 1313|    422|                    values...);
 1314|    422|}
_ZN4absl12lts_2024011613hash_internal10HashSelect24UniquelyRepresentedProbe6InvokeINS1_15MixingHashStateEiEENSt3__19enable_ifIXsr23is_uniquely_representedIT0_EE5valueET_E4typeES9_RKS8_:
  927|    422|        -> absl::enable_if_t<is_uniquely_represented<T>::value, H> {
  928|    422|      return hash_internal::hash_bytes(std::move(state), value);
  929|    422|    }
_ZN4absl12lts_2024011613hash_internal10hash_bytesINS1_15MixingHashStateEiEET_S4_RKT0_:
  340|    422|H hash_bytes(H hash_state, const T& value) {
  341|    422|  const unsigned char* start = reinterpret_cast<const unsigned char*>(&value);
  342|    422|  return H::combine_contiguous(std::move(hash_state), start, sizeof(value));
  343|    422|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateEPKN6google8protobuf11MessageLiteEEENSt3__19enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESD_E4typeESD_RKT0_:
  937|      9|        H> {
  938|      9|      return AbslHashValue(std::move(state), value);
  939|      9|    }
_ZN4absl12lts_2024011613hash_internal13AbslHashValueINS1_15MixingHashStateEPKN6google8protobuf11MessageLiteEEENSt3__19enable_ifIXsr3std10is_pointerIT0_EE5valueET_E4typeESC_SB_:
  438|      9|                                                             T ptr) {
  439|      9|  auto v = reinterpret_cast<uintptr_t>(ptr);
  440|       |  // Due to alignment, pointers tend to have low bits as zero, and the next few
  441|       |  // bits follow a pattern since they are also multiples of some base value.
  442|       |  // Mixing the pointer twice helps prevent stuck low bits for certain alignment
  443|       |  // values.
  444|      9|  return H::combine(std::move(hash_state), v, v);
  445|      9|}
_ZNK4absl12lts_2024011613hash_internal8HashImplIPKN6google8protobuf14FileDescriptorEEclERKS7_:
 1299|    104|  size_t operator()(const T& value) const {
 1300|    104|    return MixingHashState::hash(value);
 1301|    104|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState4hashIPKN6google8protobuf14FileDescriptorETnNSt3__19enable_ifIXntsr16IntegralFastPathIT_EE5valueEiE4typeELi0EEEmRKSB_:
 1045|    104|  static size_t hash(const T& value) {
 1046|    104|    return static_cast<size_t>(combine(MixingHashState{}, value).state_);
 1047|    104|  }
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineIPKN6google8protobuf14FileDescriptorEJEEES3_S3_RKT_DpRKT0_:
 1310|    104|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|    104|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|    104|                        std::move(state), value),
 1313|    104|                    values...);
 1314|    104|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateEPKN6google8protobuf14FileDescriptorEEENSt3__19enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESD_E4typeESD_RKT0_:
  937|    104|        H> {
  938|    104|      return AbslHashValue(std::move(state), value);
  939|    104|    }
_ZN4absl12lts_2024011613hash_internal13AbslHashValueINS1_15MixingHashStateEPKN6google8protobuf14FileDescriptorEEENSt3__19enable_ifIXsr3std10is_pointerIT0_EE5valueET_E4typeESC_SB_:
  438|    104|                                                             T ptr) {
  439|    104|  auto v = reinterpret_cast<uintptr_t>(ptr);
  440|       |  // Due to alignment, pointers tend to have low bits as zero, and the next few
  441|       |  // bits follow a pattern since they are also multiples of some base value.
  442|       |  // Mixing the pointer twice helps prevent stuck low bits for certain alignment
  443|       |  // values.
  444|    104|  return H::combine(std::move(hash_state), v, v);
  445|    104|}
_ZNK4absl12lts_2024011613hash_internal8HashImplINSt3__15tupleIJRKNS0_11string_viewEEEEEclERKS8_:
 1299|  1.51k|  size_t operator()(const T& value) const {
 1300|  1.51k|    return MixingHashState::hash(value);
 1301|  1.51k|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState4hashINSt3__15tupleIJRKNS0_11string_viewEEEETnNS4_9enable_ifIXntsr16IntegralFastPathIT_EE5valueEiE4typeELi0EEEmRKSB_:
 1045|  1.51k|  static size_t hash(const T& value) {
 1046|  1.51k|    return static_cast<size_t>(combine(MixingHashState{}, value).state_);
 1047|  1.51k|  }
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineINSt3__15tupleIJRKNS0_11string_viewEEEEJEEES3_S3_RKT_DpRKT0_:
 1310|  1.51k|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|  1.51k|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|  1.51k|                        std::move(state), value),
 1313|  1.51k|                    values...);
 1314|  1.51k|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateENSt3__15tupleIJRKNS0_11string_viewEEEEEENS6_9enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESD_E4typeESD_RKT0_:
  937|  1.51k|        H> {
  938|  1.51k|      return AbslHashValue(std::move(state), value);
  939|  1.51k|    }
_ZN4absl12lts_2024011613hash_internal13AbslHashValueINS1_15MixingHashStateEJRKNS0_11string_viewEEEENSt3__19enable_ifIXsr4absl11conjunctionIDpNS1_11is_hashableIT0_EEEE5valueET_E4typeESD_RKNS7_5tupleIJDpSA_EEE:
  516|  1.51k|AbslHashValue(H hash_state, const std::tuple<Ts...>& t) {
  517|  1.51k|  return hash_internal::hash_tuple(std::move(hash_state), t,
  518|  1.51k|                                   absl::make_index_sequence<sizeof...(Ts)>());
  519|  1.51k|}
_ZN4absl12lts_2024011613hash_internal10hash_tupleINS1_15MixingHashStateENSt3__15tupleIJRKNS0_11string_viewEEEEJLm0EEEET_SA_RKT0_NS4_16integer_sequenceImJXspT1_EEEE:
  503|  1.51k|H hash_tuple(H hash_state, const Tuple& t, absl::index_sequence<Is...>) {
  504|  1.51k|  return H::combine(std::move(hash_state), std::get<Is>(t)...);
  505|  1.51k|}
_ZNK4absl12lts_2024011613hash_internal8HashImplINSt3__15tupleIJRKNS3_4pairIPKviEEEEEEclERKSB_:
 1299|    413|  size_t operator()(const T& value) const {
 1300|    413|    return MixingHashState::hash(value);
 1301|    413|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState4hashINSt3__15tupleIJRKNS4_4pairIPKviEEEEETnNS4_9enable_ifIXntsr16IntegralFastPathIT_EE5valueEiE4typeELi0EEEmRKSE_:
 1045|    413|  static size_t hash(const T& value) {
 1046|    413|    return static_cast<size_t>(combine(MixingHashState{}, value).state_);
 1047|    413|  }
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineINSt3__15tupleIJRKNS6_4pairIPKviEEEEEJEEES3_S3_RKT_DpRKT0_:
 1310|    413|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|    413|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|    413|                        std::move(state), value),
 1313|    413|                    values...);
 1314|    413|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateENSt3__15tupleIJRKNS6_4pairIPKviEEEEEEENS6_9enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESG_E4typeESG_RKT0_:
  937|    413|        H> {
  938|    413|      return AbslHashValue(std::move(state), value);
  939|    413|    }
_ZN4absl12lts_2024011613hash_internal13AbslHashValueINS1_15MixingHashStateEJRKNSt3__14pairIPKviEEEEENS4_9enable_ifIXsr4absl11conjunctionIDpNS1_11is_hashableIT0_EEEE5valueET_E4typeESG_RKNS4_5tupleIJDpSD_EEE:
  516|    413|AbslHashValue(H hash_state, const std::tuple<Ts...>& t) {
  517|    413|  return hash_internal::hash_tuple(std::move(hash_state), t,
  518|    413|                                   absl::make_index_sequence<sizeof...(Ts)>());
  519|    413|}
_ZN4absl12lts_2024011613hash_internal10hash_tupleINS1_15MixingHashStateENSt3__15tupleIJRKNS4_4pairIPKviEEEEEJLm0EEEET_SD_RKT0_NS4_16integer_sequenceImJXspT1_EEEE:
  503|    413|H hash_tuple(H hash_state, const Tuple& t, absl::index_sequence<Is...>) {
  504|    413|  return H::combine(std::move(hash_state), std::get<Is>(t)...);
  505|    413|}
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineINSt3__14pairIPKviEEJEEES3_S3_RKT_DpRKT0_:
 1310|    413|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|    413|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|    413|                        std::move(state), value),
 1313|    413|                    values...);
 1314|    413|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateENSt3__14pairIPKviEEEENS6_9enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESC_E4typeESC_RKT0_:
  937|    413|        H> {
  938|    413|      return AbslHashValue(std::move(state), value);
  939|    413|    }
_ZN4absl12lts_2024011613hash_internal13AbslHashValueINS1_15MixingHashStateEPKviEENSt3__19enable_ifIXaasr11is_hashableIT0_EE5valuesr11is_hashableIT1_EE5valueET_E4typeESA_RKNS6_4pairIS8_S9_EE:
  494|    413|AbslHashValue(H hash_state, const std::pair<T1, T2>& p) {
  495|    413|  return H::combine(std::move(hash_state), p.first, p.second);
  496|    413|}
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineIPKvJiEEES3_S3_RKT_DpRKT0_:
 1310|    413|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|    413|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|    413|                        std::move(state), value),
 1313|    413|                    values...);
 1314|    413|}
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineINSt3__14pairIPKvNS0_11string_viewEEEJEEES3_S3_RKT_DpRKT0_:
 1310|  1.55k|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|  1.55k|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|  1.55k|                        std::move(state), value),
 1313|  1.55k|                    values...);
 1314|  1.55k|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateENSt3__14pairIPKvNS0_11string_viewEEEEENS6_9enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESD_E4typeESD_RKT0_:
  937|  1.55k|        H> {
  938|  1.55k|      return AbslHashValue(std::move(state), value);
  939|  1.55k|    }
_ZN4absl12lts_2024011613hash_internal13AbslHashValueINS1_15MixingHashStateEPKvNS0_11string_viewEEENSt3__19enable_ifIXaasr11is_hashableIT0_EE5valuesr11is_hashableIT1_EE5valueET_E4typeESB_RKNS7_4pairIS9_SA_EE:
  494|  1.55k|AbslHashValue(H hash_state, const std::pair<T1, T2>& p) {
  495|  1.55k|  return H::combine(std::move(hash_state), p.first, p.second);
  496|  1.55k|}
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineIPKvJNS0_11string_viewEEEES3_S3_RKT_DpRKT0_:
 1310|  1.55k|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|  1.55k|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|  1.55k|                        std::move(state), value),
 1313|  1.55k|                    values...);
 1314|  1.55k|}
_ZNK4absl12lts_2024011613hash_internal8HashImplINSt3__15tupleIJRKNS3_4pairIPKvNS0_11string_viewEEEEEEEclERKSC_:
 1299|  1.55k|  size_t operator()(const T& value) const {
 1300|  1.55k|    return MixingHashState::hash(value);
 1301|  1.55k|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState4hashINSt3__15tupleIJRKNS4_4pairIPKvNS0_11string_viewEEEEEETnNS4_9enable_ifIXntsr16IntegralFastPathIT_EE5valueEiE4typeELi0EEEmRKSF_:
 1045|  1.55k|  static size_t hash(const T& value) {
 1046|  1.55k|    return static_cast<size_t>(combine(MixingHashState{}, value).state_);
 1047|  1.55k|  }
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineINSt3__15tupleIJRKNS6_4pairIPKvNS0_11string_viewEEEEEEJEEES3_S3_RKT_DpRKT0_:
 1310|  1.55k|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|  1.55k|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|  1.55k|                        std::move(state), value),
 1313|  1.55k|                    values...);
 1314|  1.55k|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateENSt3__15tupleIJRKNS6_4pairIPKvNS0_11string_viewEEEEEEEENS6_9enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESH_E4typeESH_RKT0_:
  937|  1.55k|        H> {
  938|  1.55k|      return AbslHashValue(std::move(state), value);
  939|  1.55k|    }
_ZN4absl12lts_2024011613hash_internal13AbslHashValueINS1_15MixingHashStateEJRKNSt3__14pairIPKvNS0_11string_viewEEEEEENS4_9enable_ifIXsr4absl11conjunctionIDpNS1_11is_hashableIT0_EEEE5valueET_E4typeESH_RKNS4_5tupleIJDpSE_EEE:
  516|  1.55k|AbslHashValue(H hash_state, const std::tuple<Ts...>& t) {
  517|  1.55k|  return hash_internal::hash_tuple(std::move(hash_state), t,
  518|  1.55k|                                   absl::make_index_sequence<sizeof...(Ts)>());
  519|  1.55k|}
_ZN4absl12lts_2024011613hash_internal10hash_tupleINS1_15MixingHashStateENSt3__15tupleIJRKNS4_4pairIPKvNS0_11string_viewEEEEEEJLm0EEEET_SE_RKT0_NS4_16integer_sequenceImJXspT1_EEEE:
  503|  1.55k|H hash_tuple(H hash_state, const Tuple& t, absl::index_sequence<Is...>) {
  504|  1.55k|  return H::combine(std::move(hash_state), std::get<Is>(t)...);
  505|  1.55k|}
_ZNK4absl12lts_2024011613hash_internal8HashImplINSt3__15tupleIJRKNS3_12basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEEEEclERKSD_:
 1299|      4|  size_t operator()(const T& value) const {
 1300|      4|    return MixingHashState::hash(value);
 1301|      4|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState4hashINSt3__15tupleIJRKNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEETnNS4_9enable_ifIXntsr16IntegralFastPathIT_EE5valueEiE4typeELi0EEEmRKSG_:
 1045|      4|  static size_t hash(const T& value) {
 1046|      4|    return static_cast<size_t>(combine(MixingHashState{}, value).state_);
 1047|      4|  }
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineINSt3__15tupleIJRKNS6_12basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEEEEJEEES3_S3_RKT_DpRKT0_:
 1310|      4|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|      4|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|      4|                        std::move(state), value),
 1313|      4|                    values...);
 1314|      4|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateENSt3__15tupleIJRKNS6_12basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEEEEEENS6_9enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESI_E4typeESI_RKT0_:
  937|      4|        H> {
  938|      4|      return AbslHashValue(std::move(state), value);
  939|      4|    }
_ZN4absl12lts_2024011613hash_internal13AbslHashValueINS1_15MixingHashStateEJRKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEENS4_9enable_ifIXsr4absl11conjunctionIDpNS1_11is_hashableIT0_EEEE5valueET_E4typeESI_RKNS4_5tupleIJDpSF_EEE:
  516|      4|AbslHashValue(H hash_state, const std::tuple<Ts...>& t) {
  517|      4|  return hash_internal::hash_tuple(std::move(hash_state), t,
  518|      4|                                   absl::make_index_sequence<sizeof...(Ts)>());
  519|      4|}
_ZN4absl12lts_2024011613hash_internal10hash_tupleINS1_15MixingHashStateENSt3__15tupleIJRKNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEEJLm0EEEET_SF_RKT0_NS4_16integer_sequenceImJXspT1_EEEE:
  503|      4|H hash_tuple(H hash_state, const Tuple& t, absl::index_sequence<Is...>) {
  504|      4|  return H::combine(std::move(hash_state), std::get<Is>(t)...);
  505|      4|}
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineINSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEJEEES3_S3_RKT_DpRKT0_:
 1310|      4|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|      4|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|      4|                        std::move(state), value),
 1313|      4|                    values...);
 1314|      4|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateENSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEEENS6_9enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESE_E4typeESE_RKT0_:
  937|      4|        H> {
  938|      4|      return AbslHashValue(std::move(state), value);
  939|      4|    }

_ZN4absl12lts_2024011613hash_internal12LowLevelHashEPKvmmPKm:
   32|  2.45k|                      const uint64_t salt[5]) {
   33|       |  // Prefetch the cacheline that data resides in.
   34|  2.45k|  PrefetchToLocalCache(data);
   35|  2.45k|  const uint8_t* ptr = static_cast<const uint8_t*>(data);
   36|  2.45k|  uint64_t starting_length = static_cast<uint64_t>(len);
   37|  2.45k|  uint64_t current_state = seed ^ salt[0];
   38|       |
   39|  2.45k|  if (len > 64) {
  ------------------
  |  Branch (39:7): [True: 14, False: 2.43k]
  ------------------
   40|       |    // If we have more than 64 bytes, we're going to handle chunks of 64
   41|       |    // bytes at a time. We're going to build up two separate hash states
   42|       |    // which we will then hash together.
   43|     14|    uint64_t duplicated_state = current_state;
   44|       |
   45|     14|    do {
   46|       |      // Always prefetch the next cacheline.
   47|     14|      PrefetchToLocalCache(ptr + ABSL_CACHELINE_SIZE);
  ------------------
  |  |   77|     14|#define ABSL_CACHELINE_SIZE 64
  ------------------
   48|       |
   49|     14|      uint64_t a = absl::base_internal::UnalignedLoad64(ptr);
   50|     14|      uint64_t b = absl::base_internal::UnalignedLoad64(ptr + 8);
   51|     14|      uint64_t c = absl::base_internal::UnalignedLoad64(ptr + 16);
   52|     14|      uint64_t d = absl::base_internal::UnalignedLoad64(ptr + 24);
   53|     14|      uint64_t e = absl::base_internal::UnalignedLoad64(ptr + 32);
   54|     14|      uint64_t f = absl::base_internal::UnalignedLoad64(ptr + 40);
   55|     14|      uint64_t g = absl::base_internal::UnalignedLoad64(ptr + 48);
   56|     14|      uint64_t h = absl::base_internal::UnalignedLoad64(ptr + 56);
   57|       |
   58|     14|      uint64_t cs0 = Mix(a ^ salt[1], b ^ current_state);
   59|     14|      uint64_t cs1 = Mix(c ^ salt[2], d ^ current_state);
   60|     14|      current_state = (cs0 ^ cs1);
   61|       |
   62|     14|      uint64_t ds0 = Mix(e ^ salt[3], f ^ duplicated_state);
   63|     14|      uint64_t ds1 = Mix(g ^ salt[4], h ^ duplicated_state);
   64|     14|      duplicated_state = (ds0 ^ ds1);
   65|       |
   66|     14|      ptr += 64;
   67|     14|      len -= 64;
   68|     14|    } while (len > 64);
  ------------------
  |  Branch (68:14): [True: 0, False: 14]
  ------------------
   69|       |
   70|     14|    current_state = current_state ^ duplicated_state;
   71|     14|  }
   72|       |
   73|       |  // We now have a data `ptr` with at most 64 bytes and the current state
   74|       |  // of the hashing state machine stored in current_state.
   75|  6.49k|  while (len > 16) {
  ------------------
  |  Branch (75:10): [True: 4.04k, False: 2.45k]
  ------------------
   76|  4.04k|    uint64_t a = absl::base_internal::UnalignedLoad64(ptr);
   77|  4.04k|    uint64_t b = absl::base_internal::UnalignedLoad64(ptr + 8);
   78|       |
   79|  4.04k|    current_state = Mix(a ^ salt[1], b ^ current_state);
   80|       |
   81|  4.04k|    ptr += 16;
   82|  4.04k|    len -= 16;
   83|  4.04k|  }
   84|       |
   85|       |  // We now have a data `ptr` with at most 16 bytes.
   86|  2.45k|  uint64_t a = 0;
   87|  2.45k|  uint64_t b = 0;
   88|  2.45k|  if (len > 8) {
  ------------------
  |  Branch (88:7): [True: 914, False: 1.53k]
  ------------------
   89|       |    // When we have at least 9 and at most 16 bytes, set A to the first 64
   90|       |    // bits of the input and B to the last 64 bits of the input. Yes, they will
   91|       |    // overlap in the middle if we are working with less than the full 16
   92|       |    // bytes.
   93|    914|    a = absl::base_internal::UnalignedLoad64(ptr);
   94|    914|    b = absl::base_internal::UnalignedLoad64(ptr + len - 8);
   95|  1.53k|  } else if (len > 3) {
  ------------------
  |  Branch (95:14): [True: 947, False: 592]
  ------------------
   96|       |    // If we have at least 4 and at most 8 bytes, set A to the first 32
   97|       |    // bits and B to the last 32 bits.
   98|    947|    a = absl::base_internal::UnalignedLoad32(ptr);
   99|    947|    b = absl::base_internal::UnalignedLoad32(ptr + len - 4);
  100|    947|  } else if (len > 0) {
  ------------------
  |  Branch (100:14): [True: 592, False: 0]
  ------------------
  101|       |    // If we have at least 1 and at most 3 bytes, read all of the provided
  102|       |    // bits into A, with some adjustments.
  103|    592|    a = static_cast<uint64_t>((ptr[0] << 16) | (ptr[len >> 1] << 8) |
  104|    592|                              ptr[len - 1]);
  105|    592|    b = 0;
  106|    592|  } else {
  107|      0|    a = 0;
  108|      0|    b = 0;
  109|      0|  }
  110|       |
  111|  2.45k|  uint64_t w = Mix(a ^ salt[1], b ^ current_state);
  112|  2.45k|  uint64_t z = salt[1] ^ starting_length;
  113|  2.45k|  return Mix(w, z);
  114|  2.45k|}
low_level_hash.cc:_ZN4absl12lts_2024011613hash_internalL3MixEmm:
   25|  9.00k|static uint64_t Mix(uint64_t v0, uint64_t v1) {
   26|  9.00k|  absl::uint128 p = v0;
   27|  9.00k|  p *= v1;
   28|  9.00k|  return absl::Uint128Low64(p) ^ absl::Uint128High64(p);
   29|  9.00k|}

_ZN4absl12lts_2024011612log_internal21GetReferenceableValueIN6google8protobuf8internal18EpsCopyInputStreamUt0_EEERKT_SA_:
  386|      1|inline constexpr const T& GetReferenceableValue(const T& t) {
  387|      1|  return t;
  388|      1|}
_ZN4absl12lts_2024011612log_internal12Check_LEImplIiN6google8protobuf8internal18EpsCopyInputStreamUt0_EEEPNSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEERKT_RKT0_PKc:
  348|      1|                                             const char* exprtext) {     \
  349|      1|    using U1 = CheckOpStreamType<T1>;                                    \
  350|      1|    using U2 = CheckOpStreamType<T2>;                                    \
  351|      1|    return ABSL_PREDICT_TRUE(v1 op v2)                                   \
  ------------------
  |  |  179|      1|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 1, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 1]
  |  |  |  Branch (179:57): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  352|      1|               ? nullptr                                                 \
  353|      1|               : ABSL_LOG_INTERNAL_CHECK_OP_IMPL_RESULT(U1, U2, v1, v2,  \
  ------------------
  |  |  338|      0|  MakeCheckOpString<U1, U2>(v1, v2, exprtext)
  ------------------
  354|      1|                                                        exprtext);       \
  355|      1|  }                                                                      \
_ZN4absl12lts_2024011612log_internal12Check_EQImplIPKN6google8protobuf8internal9ClassDataES8_EEPNSt3__112basic_stringIcNS9_11char_traitsIcEENS9_9allocatorIcEEEERKT_RKT0_PKc:
  348|    749|                                             const char* exprtext) {     \
  349|    749|    using U1 = CheckOpStreamType<T1>;                                    \
  350|    749|    using U2 = CheckOpStreamType<T2>;                                    \
  351|    749|    return ABSL_PREDICT_TRUE(v1 op v2)                                   \
  ------------------
  |  |  179|    749|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 749, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 749]
  |  |  |  Branch (179:57): [True: 749, False: 0]
  |  |  ------------------
  ------------------
  352|    749|               ? nullptr                                                 \
  353|    749|               : ABSL_LOG_INTERNAL_CHECK_OP_IMPL_RESULT(U1, U2, v1, v2,  \
  ------------------
  |  |  338|      0|  MakeCheckOpString<U1, U2>(v1, v2, exprtext)
  ------------------
  354|    749|                                                        exprtext);       \
  355|    749|  }                                                                      \
_ZN4absl12lts_2024011612log_internal21GetReferenceableValueIPKN6google8protobuf8internal9ClassDataEEERKT_SB_:
  386|  1.49k|inline constexpr const T& GetReferenceableValue(const T& t) {
  387|  1.49k|  return t;
  388|  1.49k|}
_ZN4absl12lts_2024011612log_internal12Check_EQImplIPKN6google8protobuf15FieldDescriptorES7_EEPNSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEERKT_RKT0_PKc:
  348|      5|                                             const char* exprtext) {     \
  349|      5|    using U1 = CheckOpStreamType<T1>;                                    \
  350|      5|    using U2 = CheckOpStreamType<T2>;                                    \
  351|      5|    return ABSL_PREDICT_TRUE(v1 op v2)                                   \
  ------------------
  |  |  179|      5|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 5, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 5]
  |  |  |  Branch (179:57): [True: 5, False: 0]
  |  |  ------------------
  ------------------
  352|      5|               ? nullptr                                                 \
  353|      5|               : ABSL_LOG_INTERNAL_CHECK_OP_IMPL_RESULT(U1, U2, v1, v2,  \
  ------------------
  |  |  338|      0|  MakeCheckOpString<U1, U2>(v1, v2, exprtext)
  ------------------
  354|      5|                                                        exprtext);       \
  355|      5|  }                                                                      \
_ZN4absl12lts_2024011612log_internal21GetReferenceableValueIPKN6google8protobuf15FieldDescriptorEEERKT_SA_:
  386|     10|inline constexpr const T& GetReferenceableValue(const T& t) {
  387|     10|  return t;
  388|     10|}

_ZN4absl12lts_2024011611countr_zeroImEENSt3__19enable_ifIXsr3std11is_unsignedIT_EE5valueEiE4typeES4_:
  118|    520|    countr_zero(T x) noexcept {
  119|    520|  return numeric_internal::CountTrailingZeroes(x);
  120|    520|}
_ZN4absl12lts_202401164rotrImEENSt3__19enable_ifIXsr3std11is_unsignedIT_EE5valueES4_E4typeES4_i:
   75|    874|    rotr(T x, int s) noexcept {
   76|    874|  return numeric_internal::RotateRight(x, s);
   77|    874|}
_ZN4absl12lts_2024011611countr_zeroItEENSt3__19enable_ifIXsr3std11is_unsignedIT_EE5valueEiE4typeES4_:
  118|  3.93k|    countr_zero(T x) noexcept {
  119|  3.93k|  return numeric_internal::CountTrailingZeroes(x);
  120|  3.93k|}
_ZN4absl12lts_202401168popcountIjEENSt3__19enable_ifIXsr3std11is_unsignedIT_EE5valueEiE4typeES4_:
  133|  1.23k|    popcount(T x) noexcept {
  134|  1.23k|  return numeric_internal::Popcount(x);
  135|  1.23k|}

_ZN4absl12lts_202401167uint128mLES1_:
  628|  9.00k|inline uint128& uint128::operator*=(uint128 other) {
  629|  9.00k|  *this = *this * other;
  630|  9.00k|  return *this;
  631|  9.00k|}
_ZN4absl12lts_2024011612Uint128Low64ENS0_7uint128E:
  643|  9.00k|constexpr uint64_t Uint128Low64(uint128 v) { return v.lo_; }
_ZN4absl12lts_2024011613Uint128High64ENS0_7uint128E:
  645|  9.00k|constexpr uint64_t Uint128High64(uint128 v) { return v.hi_; }
_ZNK4absl12lts_202401167uint128cvoEv:
  776|  18.0k|constexpr uint128::operator unsigned __int128() const {
  777|  18.0k|  return (static_cast<unsigned __int128>(hi_) << 64) + lo_;
  778|  18.0k|}
_ZN4absl12lts_20240116mlENS0_7uint128ES1_:
  982|  9.00k|inline uint128 operator*(uint128 lhs, uint128 rhs) {
  983|  9.00k|#if defined(ABSL_HAVE_INTRINSIC_INT128)
  984|       |  // TODO(strel) Remove once alignment issues are resolved and unsigned __int128
  985|       |  // can be used for uint128 storage.
  986|  9.00k|  return static_cast<unsigned __int128>(lhs) *
  987|  9.00k|         static_cast<unsigned __int128>(rhs);
  988|       |#elif defined(_MSC_VER) && defined(_M_X64) && !defined(_M_ARM64EC)
  989|       |  uint64_t carry;
  990|       |  uint64_t low = _umul128(Uint128Low64(lhs), Uint128Low64(rhs), &carry);
  991|       |  return MakeUint128(Uint128Low64(lhs) * Uint128High64(rhs) +
  992|       |                         Uint128High64(lhs) * Uint128Low64(rhs) + carry,
  993|       |                     low);
  994|       |#else   // ABSL_HAVE_INTRINSIC128
  995|       |  uint64_t a32 = Uint128Low64(lhs) >> 32;
  996|       |  uint64_t a00 = Uint128Low64(lhs) & 0xffffffff;
  997|       |  uint64_t b32 = Uint128Low64(rhs) >> 32;
  998|       |  uint64_t b00 = Uint128Low64(rhs) & 0xffffffff;
  999|       |  uint128 result =
 1000|       |      MakeUint128(Uint128High64(lhs) * Uint128Low64(rhs) +
 1001|       |                      Uint128Low64(lhs) * Uint128High64(rhs) + a32 * b32,
 1002|       |                  a00 * b00);
 1003|       |  result += uint128(a32 * b00) << 32;
 1004|       |  result += uint128(a00 * b32) << 32;
 1005|       |  return result;
 1006|       |#endif  // ABSL_HAVE_INTRINSIC128
 1007|  9.00k|}
_ZN4absl12lts_202401167uint128C2Eo:
  674|  9.00k|    : lo_{static_cast<uint64_t>(v & ~uint64_t{0})},
  675|  9.00k|      hi_{static_cast<uint64_t>(v >> 64)} {}
_ZN4absl12lts_202401167uint128C2Em:
  665|  18.0k|constexpr uint128::uint128(unsigned long v) : lo_{v}, hi_{0} {}

_ZN4absl12lts_2024011616numeric_internal10Popcount32Ej:
   96|  1.23k|Popcount32(uint32_t x) noexcept {
   97|  1.23k|#if ABSL_NUMERIC_INTERNAL_HAVE_BUILTIN_OR_GCC(__builtin_popcount)
   98|  1.23k|  static_assert(sizeof(unsigned int) == sizeof(x),
   99|  1.23k|                "__builtin_popcount does not take 32-bit arg");
  100|  1.23k|  return __builtin_popcount(x);
  101|       |#else
  102|       |  x -= ((x >> 1) & 0x55555555);
  103|       |  x = ((x >> 2) & 0x33333333) + (x & 0x33333333);
  104|       |  return static_cast<int>((((x + (x >> 4)) & 0xF0F0F0F) * 0x1010101) >> 24);
  105|       |#endif
  106|  1.23k|}
_ZN4absl12lts_2024011616numeric_internal28CountTrailingZeroesNonzero64Em:
  273|    520|CountTrailingZeroesNonzero64(uint64_t x) {
  274|    520|#if ABSL_NUMERIC_INTERNAL_HAVE_BUILTIN_OR_GCC(__builtin_ctzll)
  275|    520|  static_assert(sizeof(unsigned long long) == sizeof(x),  // NOLINT(runtime/int)
  276|    520|                "__builtin_ctzll does not take 64-bit arg");
  277|    520|  return __builtin_ctzll(x);
  278|       |#elif defined(_MSC_VER) && !defined(__clang__) && \
  279|       |    (defined(_M_X64) || defined(_M_ARM64))
  280|       |  unsigned long result = 0;  // NOLINT(runtime/int)
  281|       |  _BitScanForward64(&result, x);
  282|       |  return result;
  283|       |#elif defined(_MSC_VER) && !defined(__clang__)
  284|       |  unsigned long result = 0;  // NOLINT(runtime/int)
  285|       |  if (static_cast<uint32_t>(x) == 0) {
  286|       |    _BitScanForward(&result, static_cast<unsigned long>(x >> 32));
  287|       |    return result + 32;
  288|       |  }
  289|       |  _BitScanForward(&result, static_cast<unsigned long>(x));
  290|       |  return result;
  291|       |#else
  292|       |  int c = 63;
  293|       |  x &= ~x + 1;
  294|       |  if (x & 0x00000000FFFFFFFF) c -= 32;
  295|       |  if (x & 0x0000FFFF0000FFFF) c -= 16;
  296|       |  if (x & 0x00FF00FF00FF00FF) c -= 8;
  297|       |  if (x & 0x0F0F0F0F0F0F0F0F) c -= 4;
  298|       |  if (x & 0x3333333333333333) c -= 2;
  299|       |  if (x & 0x5555555555555555) c -= 1;
  300|       |  return c;
  301|       |#endif
  302|    520|}
_ZN4absl12lts_2024011616numeric_internal28CountTrailingZeroesNonzero16Et:
  305|  3.93k|CountTrailingZeroesNonzero16(uint16_t x) {
  306|  3.93k|#if ABSL_HAVE_BUILTIN(__builtin_ctzs)
  307|  3.93k|  static_assert(sizeof(unsigned short) == sizeof(x),  // NOLINT(runtime/int)
  308|  3.93k|                "__builtin_ctzs does not take 16-bit arg");
  309|  3.93k|  return __builtin_ctzs(x);
  310|       |#else
  311|       |  return CountTrailingZeroesNonzero32(x);
  312|       |#endif
  313|  3.93k|}
_ZN4absl12lts_2024011616numeric_internal19CountTrailingZeroesImEEiT_:
  317|    520|CountTrailingZeroes(T x) noexcept {
  318|    520|  static_assert(std::is_unsigned<T>::value, "T must be unsigned");
  319|    520|  static_assert(IsPowerOf2(std::numeric_limits<T>::digits),
  320|    520|                "T must have a power-of-2 size");
  321|    520|  static_assert(sizeof(T) <= sizeof(uint64_t), "T too large");
  322|    520|  return x == 0 ? std::numeric_limits<T>::digits
  ------------------
  |  Branch (322:10): [True: 0, False: 520]
  ------------------
  323|    520|                : (sizeof(T) <= sizeof(uint16_t)
  ------------------
  |  Branch (323:20): [Folded, False: 520]
  ------------------
  324|    520|                       ? CountTrailingZeroesNonzero16(static_cast<uint16_t>(x))
  325|    520|                       : (sizeof(T) <= sizeof(uint32_t)
  ------------------
  |  Branch (325:27): [Folded, False: 520]
  ------------------
  326|    520|                              ? CountTrailingZeroesNonzero32(
  327|      0|                                    static_cast<uint32_t>(x))
  328|    520|                              : CountTrailingZeroesNonzero64(x)));
  329|    520|}
_ZN4absl12lts_2024011616numeric_internal11RotateRightImEET_S3_i:
   75|    874|    T x, int s) noexcept {
   76|    874|  static_assert(std::is_unsigned<T>::value, "T must be unsigned");
   77|    874|  static_assert(IsPowerOf2(std::numeric_limits<T>::digits),
   78|    874|                "T must have a power-of-2 size");
   79|       |
   80|    874|  return static_cast<T>(x >> (s & (std::numeric_limits<T>::digits - 1))) |
   81|    874|         static_cast<T>(x << ((-s) & (std::numeric_limits<T>::digits - 1)));
   82|    874|}
_ZN4absl12lts_2024011616numeric_internal19CountTrailingZeroesItEEiT_:
  317|  3.93k|CountTrailingZeroes(T x) noexcept {
  318|  3.93k|  static_assert(std::is_unsigned<T>::value, "T must be unsigned");
  319|  3.93k|  static_assert(IsPowerOf2(std::numeric_limits<T>::digits),
  320|  3.93k|                "T must have a power-of-2 size");
  321|  3.93k|  static_assert(sizeof(T) <= sizeof(uint64_t), "T too large");
  322|  3.93k|  return x == 0 ? std::numeric_limits<T>::digits
  ------------------
  |  Branch (322:10): [True: 0, False: 3.93k]
  ------------------
  323|  3.93k|                : (sizeof(T) <= sizeof(uint16_t)
  ------------------
  |  Branch (323:20): [True: 3.93k, Folded]
  ------------------
  324|  3.93k|                       ? CountTrailingZeroesNonzero16(static_cast<uint16_t>(x))
  325|  3.93k|                       : (sizeof(T) <= sizeof(uint32_t)
  ------------------
  |  Branch (325:27): [True: 0, Folded]
  ------------------
  326|      0|                              ? CountTrailingZeroesNonzero32(
  327|      0|                                    static_cast<uint32_t>(x))
  328|      0|                              : CountTrailingZeroesNonzero64(x)));
  329|  3.93k|}
_ZN4absl12lts_2024011616numeric_internal8PopcountIjEEiT_:
  124|  1.23k|Popcount(T x) noexcept {
  125|  1.23k|  static_assert(std::is_unsigned<T>::value, "T must be unsigned");
  126|  1.23k|  static_assert(IsPowerOf2(std::numeric_limits<T>::digits),
  127|  1.23k|                "T must have a power-of-2 size");
  128|  1.23k|  static_assert(sizeof(x) <= sizeof(uint64_t), "T is too large");
  129|  1.23k|  return sizeof(x) <= sizeof(uint32_t) ? Popcount32(x) : Popcount64(x);
  ------------------
  |  Branch (129:10): [True: 1.23k, Folded]
  ------------------
  130|  1.23k|}

_ZN4absl12lts_2024011617internal_statusor12StatusOrDataIN6google8protobuf15FeatureResolverEED2Ev:
  229|      4|  ~StatusOrData() {
  230|      4|    if (ok()) {
  ------------------
  |  Branch (230:9): [True: 4, False: 0]
  ------------------
  231|      4|      status_.~Status();
  232|      4|      data_.~T();
  233|      4|    } else {
  234|      0|      status_.~Status();
  235|      0|    }
  236|      4|  }
_ZNK4absl12lts_2024011617internal_statusor12StatusOrDataIN6google8protobuf15FeatureResolverEE2okEv:
  255|      4|  bool ok() const { return status_.ok(); }
_ZNK4absl12lts_2024011617internal_statusor12StatusOrDataIN6google8protobuf10FeatureSetEE8EnsureOkEv:
  280|    239|  void EnsureOk() const {
  281|    239|    if (ABSL_PREDICT_FALSE(!ok())) Helper::Crash(status_);
  ------------------
  |  |  178|    239|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 239]
  |  |  |  Branch (178:49): [Folded, False: 239]
  |  |  |  Branch (178:58): [True: 0, False: 239]
  |  |  ------------------
  ------------------
  282|    239|  }
_ZNK4absl12lts_2024011617internal_statusor12StatusOrDataIN6google8protobuf10FeatureSetEE2okEv:
  255|    478|  bool ok() const { return status_.ok(); }
_ZN4absl12lts_2024011617internal_statusor12StatusOrDataIN6google8protobuf10FeatureSetEED2Ev:
  229|    239|  ~StatusOrData() {
  230|    239|    if (ok()) {
  ------------------
  |  Branch (230:9): [True: 239, False: 0]
  ------------------
  231|    239|      status_.~Status();
  232|    239|      data_.~T();
  233|    239|    } else {
  234|      0|      status_.~Status();
  235|      0|    }
  236|    239|  }
_ZN4absl12lts_2024011617internal_statusor12StatusOrDataIN6google8protobuf10FeatureSetEE10MakeStatusIJEEEvDpOT_:
  298|    239|  void MakeStatus(Args&&... args) {
  299|    239|    internal_statusor::PlacementNew<Status>(&status_,
  300|    239|                                            std::forward<Args>(args)...);
  301|    239|  }
_ZN4absl12lts_2024011617internal_statusor12PlacementNewINS0_6StatusEJEEEvPvDpOT0_:
  138|    243|void PlacementNew(absl::Nonnull<void*> p, Args&&... args) {
  139|    243|  new (p) T(std::forward<Args>(args)...);
  140|    243|}
_ZN4absl12lts_2024011617internal_statusor12StatusOrDataIN6google8protobuf15FeatureResolverEE10MakeStatusIJEEEvDpOT_:
  298|      4|  void MakeStatus(Args&&... args) {
  299|      4|    internal_statusor::PlacementNew<Status>(&status_,
  300|      4|                                            std::forward<Args>(args)...);
  301|      4|  }
_ZN4absl12lts_2024011617internal_statusor12StatusOrDataIN6google8protobuf15FeatureResolverEEC2IJS5_EEENS0_10in_place_tEDpOT_:
  193|      4|      : data_(std::forward<Args>(args)...) {
  194|      4|    MakeStatus();
  195|      4|  }
_ZN4absl12lts_2024011617internal_statusor12StatusOrDataIN6google8protobuf10FeatureSetEEC2IJS5_EEENS0_10in_place_tEDpOT_:
  193|    239|      : data_(std::forward<Args>(args)...) {
  194|    239|    MakeStatus();
  195|    239|  }

_ZN4absl12lts_202401168OkStatusEv:
  924|    255|inline Status OkStatus() { return Status(); }
_ZN4absl12lts_202401166StatusC2Ev:
  772|    498|inline Status::Status() : Status(absl::StatusCode::kOk) {}
_ZN4absl12lts_202401166StatusC2ENS0_10StatusCodeE:
  774|    498|inline Status::Status(absl::StatusCode code) : Status(CodeToInlinedRep(code)) {}
_ZN4absl12lts_202401166Status16CodeToInlinedRepENS0_10StatusCodeE:
  892|  1.48k|constexpr uintptr_t Status::CodeToInlinedRep(absl::StatusCode code) {
  893|  1.48k|  return (static_cast<uintptr_t>(code) << 2) + 1;
  894|  1.48k|}
_ZN4absl12lts_202401166StatusC2Em:
  619|    498|  explicit Status(uintptr_t rep) : rep_(rep) {}
_ZNK4absl12lts_202401166Status2okEv:
  816|    984|inline bool Status::ok() const {
  817|    984|  return rep_ == CodeToInlinedRep(absl::StatusCode::kOk);
  818|    984|}
_ZN4absl12lts_202401166StatusD2Ev:
  814|    498|inline Status::~Status() { Unref(rep_); }
_ZN4absl12lts_202401166Status5UnrefEm:
  920|    498|inline void Status::Unref(uintptr_t rep) {
  921|    498|  if (!IsInlined(rep)) RepToPointer(rep)->Unref();
  ------------------
  |  Branch (921:7): [True: 0, False: 498]
  ------------------
  922|    498|}
_ZN4absl12lts_202401166Status9IsInlinedEm:
  888|    498|constexpr bool Status::IsInlined(uintptr_t rep) { return (rep & 1) != 0; }

_ZNK4absl12lts_202401168StatusOrIN6google8protobuf10FeatureSetEE2okEv:
  494|    239|  ABSL_MUST_USE_RESULT bool ok() const { return this->status_.ok(); }
_ZNO4absl12lts_202401168StatusOrIN6google8protobuf10FeatureSetEEdeEv:
  787|    239|T&& StatusOr<T>::operator*() && {
  788|    239|  this->EnsureOk();
  789|    239|  return std::move(this->data_);
  790|    239|}
_ZNK4absl12lts_202401168StatusOrIN6google8protobuf15FeatureResolverEE2okEv:
  494|      8|  ABSL_MUST_USE_RESULT bool ok() const { return this->status_.ok(); }
_ZNO4absl12lts_202401168StatusOrIN6google8protobuf15FeatureResolverEE5valueEv:
  761|      4|T&& StatusOr<T>::value() && {
  762|      4|  if (!this->ok()) {
  ------------------
  |  Branch (762:7): [True: 0, False: 4]
  ------------------
  763|      0|    internal_statusor::ThrowBadStatusOrAccess(std::move(this->status_));
  764|      0|  }
  765|      4|  return std::move(this->data_);
  766|      4|}
_ZN4absl12lts_202401168StatusOrIN6google8protobuf15FeatureResolverEEC2IS4_TnNSt3__19enable_ifIXsr4absl11conjunctionINS0_11disjunctionIJNS7_7is_sameIS4_NS0_12remove_cvrefIOT_E4typeEEENS0_8negationINS9_IJNSA_IS5_SF_EENSA_INS0_6StatusESF_EENSA_INS0_10in_place_tESF_EENS0_17internal_statusor31IsDirectInitializationAmbiguousIS4_SD_EEEEEEEEEENS7_16is_constructibleIS4_JSD_EEENS7_14is_convertibleISD_S4_EENS9_IJNSA_INSB_ISC_E4typeES4_EENS0_11conjunctionIJNSH_INSV_ISD_SJ_EEEENSH_INSN_31HasConversionOperatorToStatusOrIS4_SD_vEEEEEEEEEEEE5valueEiE4typeELi0EEESD_:
  460|      4|      : StatusOr(absl::in_place, std::forward<U>(u)) {}
_ZN4absl12lts_202401168StatusOrIN6google8protobuf15FeatureResolverEEC2IJS4_EEENS0_10in_place_tEDpOT_:
  723|      4|    : Base(absl::in_place, std::forward<Args>(args)...) {}
_ZN4absl12lts_202401168StatusOrIN6google8protobuf10FeatureSetEEC2IS4_TnNSt3__19enable_ifIXsr4absl11conjunctionINS0_11disjunctionIJNS7_7is_sameIS4_NS0_12remove_cvrefIOT_E4typeEEENS0_8negationINS9_IJNSA_IS5_SF_EENSA_INS0_6StatusESF_EENSA_INS0_10in_place_tESF_EENS0_17internal_statusor31IsDirectInitializationAmbiguousIS4_SD_EEEEEEEEEENS7_16is_constructibleIS4_JSD_EEENS7_14is_convertibleISD_S4_EENS9_IJNSA_INSB_ISC_E4typeES4_EENS0_11conjunctionIJNSH_INSV_ISD_SJ_EEEENSH_INSN_31HasConversionOperatorToStatusOrIS4_SD_vEEEEEEEEEEEE5valueEiE4typeELi0EEESD_:
  460|    239|      : StatusOr(absl::in_place, std::forward<U>(u)) {}
_ZN4absl12lts_202401168StatusOrIN6google8protobuf10FeatureSetEEC2IJS4_EEENS0_10in_place_tEDpOT_:
  723|    239|    : Base(absl::in_place, std::forward<Args>(args)...) {}

_ZN4absl12lts_2024011613ascii_tolowerEh:
  165|    125|inline char ascii_tolower(unsigned char c) {
  166|    125|  return ascii_internal::kToLower[c];
  167|    125|}
_ZN4absl12lts_2024011613ascii_toupperEh:
  183|    161|inline char ascii_toupper(unsigned char c) {
  184|    161|  return ascii_internal::kToUpper[c];
  185|    161|}

_ZN4absl12lts_2024011616strings_internal28STLStringResizeUninitializedINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEvEEvPT_m:
   67|  8.70k|inline void STLStringResizeUninitialized(string_type* s, size_t new_size) {
   68|  8.70k|  ResizeUninitializedTraits<string_type>::Resize(s, new_size);
   69|  8.70k|}
_ZN4absl12lts_2024011616strings_internal25ResizeUninitializedTraitsINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEvE6ResizeEPS9_m:
   47|  8.70k|  static void Resize(string_type* s, size_t new_size) {
   48|  8.70k|    s->__resize_default_init(new_size);
   49|  8.70k|  }
_ZN4absl12lts_2024011616strings_internal25AppendUninitializedTraitsINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEvE6AppendEPS9_m:
   96|    263|  static void Append(string_type* s, size_t n) {
   97|    263|    s->__append_default_init(n);
   98|    263|  }
_ZN4absl12lts_2024011616strings_internal37STLStringResizeUninitializedAmortizedINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEEvPT_m:
  106|    258|void STLStringResizeUninitializedAmortized(string_type* s, size_t new_size) {
  107|    258|  const size_t size = s->size();
  108|    258|  if (new_size > size) {
  ------------------
  |  Branch (108:7): [True: 258, False: 0]
  ------------------
  109|    258|    AppendUninitializedTraits<string_type>::Append(s, new_size - size);
  110|    258|  } else {
  111|      0|    s->erase(new_size);
  112|      0|  }
  113|    258|}

_ZN4absl12lts_2024011611StrContainsENS0_11string_viewEc:
   51|    509|inline bool StrContains(absl::string_view haystack, char needle) noexcept {
   52|    509|  return haystack.find(needle) != haystack.npos;
   53|    509|}
_ZN4absl12lts_2024011610StartsWithENS0_11string_viewES1_:
   59|    110|                       absl::string_view prefix) noexcept {
   60|    110|  return prefix.empty() ||
  ------------------
  |  Branch (60:10): [True: 0, False: 110]
  ------------------
   61|    110|         (text.size() >= prefix.size() &&
  ------------------
  |  Branch (61:11): [True: 73, False: 37]
  ------------------
   62|     73|          memcmp(text.data(), prefix.data(), prefix.size()) == 0);
  ------------------
  |  Branch (62:11): [True: 1, False: 72]
  ------------------
   63|    110|}

_ZN4absl12lts_202401166StrCatERKNS0_8AlphaNumES3_:
   58|      4|std::string StrCat(const AlphaNum& a, const AlphaNum& b) {
   59|      4|  std::string result;
   60|      4|  absl::strings_internal::STLStringResizeUninitialized(&result,
   61|      4|                                                       a.size() + b.size());
   62|      4|  char* const begin = &result[0];
   63|      4|  char* out = begin;
   64|      4|  out = Append(out, a);
   65|      4|  out = Append(out, b);
   66|       |  assert(out == begin + result.size());
   67|      4|  return result;
   68|      4|}
_ZN4absl12lts_202401166StrCatERKNS0_8AlphaNumES3_S3_:
   70|    482|std::string StrCat(const AlphaNum& a, const AlphaNum& b, const AlphaNum& c) {
   71|    482|  std::string result;
   72|    482|  strings_internal::STLStringResizeUninitialized(
   73|    482|      &result, a.size() + b.size() + c.size());
   74|    482|  char* const begin = &result[0];
   75|    482|  char* out = begin;
   76|    482|  out = Append(out, a);
   77|    482|  out = Append(out, b);
   78|    482|  out = Append(out, c);
   79|       |  assert(out == begin + result.size());
   80|    482|  return result;
   81|    482|}
_ZN4absl12lts_2024011616strings_internal37STLStringAppendUninitializedAmortizedEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEm:
  102|      5|                                           size_t to_append) {
  103|      5|  strings_internal::AppendUninitializedTraits<std::string>::Append(dest,
  104|      5|                                                                   to_append);
  105|      5|}
_ZN4absl12lts_202401169StrAppendEPNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERKNS0_8AlphaNumESB_:
  288|      5|               const AlphaNum& b) {
  289|      5|  ASSERT_NO_OVERLAP(*dest, a);
  ------------------
  |  |  250|      5|  assert(((src).size() == 0) ||      \
  |  |  251|      5|         (uintptr_t((src).data() - (dest).data()) > uintptr_t((dest).size())))
  ------------------
  290|      5|  ASSERT_NO_OVERLAP(*dest, b);
  ------------------
  |  |  250|      5|  assert(((src).size() == 0) ||      \
  |  |  251|      5|         (uintptr_t((src).data() - (dest).data()) > uintptr_t((dest).size())))
  ------------------
  291|      5|  std::string::size_type old_size = dest->size();
  292|      5|  strings_internal::STLStringAppendUninitializedAmortized(dest,
  293|      5|                                                          a.size() + b.size());
  294|      5|  char* const begin = &(*dest)[0];
  295|      5|  char* out = begin + old_size;
  296|      5|  out = Append(out, a);
  297|      5|  out = Append(out, b);
  298|       |  assert(out == begin + dest->size());
  299|      5|}
str_cat.cc:_ZN4absl12lts_2024011612_GLOBAL__N_16AppendEPcRKNS0_8AlphaNumE:
   46|  1.46k|absl::Nonnull<char*> Append(absl::Nonnull<char*> out, const AlphaNum& x) {
   47|       |  // memcpy is allowed to overwrite arbitrary memory, so doing this after the
   48|       |  // call would force an extra fetch of x.size().
   49|  1.46k|  char* after = out + x.size();
   50|  1.46k|  if (x.size() != 0) {
  ------------------
  |  Branch (50:7): [True: 1.46k, False: 0]
  ------------------
   51|  1.46k|    memcpy(out, x.data(), x.size());
   52|  1.46k|  }
   53|  1.46k|  return after;
   54|  1.46k|}

_ZN4absl12lts_202401168AlphaNumC2EPKc:
  353|    491|      : piece_(NullSafeStringView(c_str)) {}
_ZN4absl12lts_202401168AlphaNumC2ENS0_11string_viewE:
  356|    969|      : piece_(pc) {}
_ZNK4absl12lts_202401168AlphaNum4sizeEv:
  377|  5.85k|  absl::string_view::size_type size() const { return piece_.size(); }
_ZNK4absl12lts_202401168AlphaNum4dataEv:
  378|  1.46k|  absl::Nullable<const char*> data() const { return piece_.data(); }
_ZN4absl12lts_202401168AlphaNumC2INSt3__19allocatorIcEEEERKNS3_12basic_stringIcNS3_11char_traitsIcEET_EE:
  369|      4|      : piece_(str) {}

_ZNK4absl12lts_2024011611string_view4findEcm:
  118|    514|string_view::size_type string_view::find(char c, size_type pos) const noexcept {
  119|    514|  if (empty() || pos >= length_) {
  ------------------
  |  Branch (119:7): [True: 0, False: 514]
  |  Branch (119:18): [True: 0, False: 514]
  ------------------
  120|      0|    return npos;
  121|      0|  }
  122|    514|  const char* result =
  123|    514|      static_cast<const char*>(memchr(ptr_ + pos, c, length_ - pos));
  124|    514|  return result != nullptr ? static_cast<size_type>(result - ptr_) : npos;
  ------------------
  |  Branch (124:10): [True: 0, False: 514]
  ------------------
  125|    514|}
_ZNK4absl12lts_2024011611string_view5rfindEcm:
  138|      6|                                          size_type pos) const noexcept {
  139|       |  // Note: memrchr() is not available on Windows.
  140|      6|  if (empty()) return npos;
  ------------------
  |  Branch (140:7): [True: 0, False: 6]
  ------------------
  141|     34|  for (size_type i = std::min(pos, length_ - 1);; --i) {
  142|     34|    if (ptr_[i] == c) {
  ------------------
  |  Branch (142:9): [True: 3, False: 31]
  ------------------
  143|      3|      return i;
  144|      3|    }
  145|     31|    if (i == 0) break;
  ------------------
  |  Branch (145:9): [True: 3, False: 28]
  ------------------
  146|     31|  }
  147|      3|  return npos;
  148|      6|}

_ZN4absl12lts_2024011611string_viewC2Ev:
  180|      5|  constexpr string_view() noexcept : ptr_(nullptr), length_(0) {}
_ZN4absl12lts_2024011611string_viewC2EPKcm:
  204|    935|      : ptr_(data), length_(CheckLengthInternal(len)) {}
_ZNK4absl12lts_2024011611string_view5beginEv:
  216|  1.16k|  constexpr const_iterator begin() const noexcept { return ptr_; }
_ZNK4absl12lts_2024011611string_view3endEv:
  223|  1.16k|  constexpr const_iterator end() const noexcept { return ptr_ + length_; }
_ZNK4absl12lts_2024011611string_view4sizeEv:
  273|  23.0k|  constexpr size_type size() const noexcept { return length_; }
_ZNK4absl12lts_2024011611string_view5emptyEv:
  288|  3.92k|  constexpr bool empty() const noexcept { return length_ == 0; }
_ZNK4absl12lts_2024011611string_viewixEm:
  294|    575|  constexpr const_reference operator[](size_type i) const {
  295|    575|    return ABSL_HARDENING_ASSERT(i < size()), ptr_[i];
  ------------------
  |  |  128|    575|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|    575|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 575]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  296|    575|  }
_ZNK4absl12lts_2024011611string_view4dataEv:
  332|  11.6k|  constexpr const_pointer data() const noexcept { return ptr_; }
_ZNK4absl12lts_2024011611string_view6substrEmm:
  395|    924|  constexpr string_view substr(size_type pos = 0, size_type n = npos) const {
  396|    924|    return ABSL_PREDICT_FALSE(pos > length_)
  ------------------
  |  |  178|    924|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 924]
  |  |  |  Branch (178:49): [Folded, False: 924]
  |  |  |  Branch (178:58): [True: 0, False: 924]
  |  |  ------------------
  ------------------
  397|    924|               ? (base_internal::ThrowStdOutOfRange(
  398|      0|                      "absl::string_view::substr"),
  399|      0|                  string_view())
  400|    924|               : string_view(ptr_ + pos, Min(n, length_ - pos));
  401|    924|  }
_ZNK4absl12lts_2024011611string_view7compareES1_:
  409|    752|  constexpr int compare(string_view x) const noexcept {
  410|    752|    return CompareImpl(length_, x.length_,
  411|    752|                       Min(length_, x.length_) == 0
  ------------------
  |  Branch (411:24): [True: 0, False: 752]
  ------------------
  412|    752|                           ? 0
  413|    752|                           : ABSL_INTERNAL_STRING_VIEW_MEMCMP(
  ------------------
  |  |   62|    752|#define ABSL_INTERNAL_STRING_VIEW_MEMCMP __builtin_memcmp
  ------------------
  414|    752|                                 ptr_, x.ptr_, Min(length_, x.length_)));
  415|    752|  }
_ZNK4absl12lts_2024011611string_view13find_first_ofEcm:
  509|      5|  size_type find_first_of(char c, size_type pos = 0) const noexcept {
  510|      5|    return find(c, pos);
  511|      5|  }
_ZNK4absl12lts_2024011611string_view12find_last_ofEcm:
  536|      6|  size_type find_last_of(char c, size_type pos = npos) const noexcept {
  537|      6|    return rfind(c, pos);
  538|      6|  }
_ZN4absl12lts_2024011611string_view19CheckLengthInternalEm:
  668|    935|  static constexpr size_type CheckLengthInternal(size_type len) {
  669|    935|    return ABSL_HARDENING_ASSERT(len <= kMaxSize), len;
  ------------------
  |  |  128|    935|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|    935|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 935]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  670|    935|  }
_ZN4absl12lts_2024011611string_view3MinEmm:
  690|  2.42k|  static constexpr size_t Min(size_type length_a, size_type length_b) {
  691|  2.42k|    return length_a < length_b ? length_a : length_b;
  ------------------
  |  Branch (691:12): [True: 409, False: 2.01k]
  ------------------
  692|  2.42k|  }
_ZN4absl12lts_2024011611string_view11CompareImplEmmi:
  695|    752|                                   int compare_result) {
  696|    752|    return compare_result == 0 ? static_cast<int>(length_a > length_b) -
  ------------------
  |  Branch (696:12): [True: 335, False: 417]
  ------------------
  697|    335|                                     static_cast<int>(length_a < length_b)
  698|    752|                               : (compare_result < 0 ? -1 : 1);
  ------------------
  |  Branch (698:35): [True: 258, False: 159]
  ------------------
  699|    752|  }
_ZN4absl12lts_20240116eqENS0_11string_viewES1_:
  708|    540|constexpr bool operator==(string_view x, string_view y) noexcept {
  709|    540|  return x.size() == y.size() &&
  ------------------
  |  Branch (709:10): [True: 366, False: 174]
  ------------------
  710|    366|         (x.empty() ||
  ------------------
  |  Branch (710:11): [True: 0, False: 366]
  ------------------
  711|    366|          ABSL_INTERNAL_STRING_VIEW_MEMCMP(x.data(), y.data(), x.size()) == 0);
  ------------------
  |  |   62|    366|#define ABSL_INTERNAL_STRING_VIEW_MEMCMP __builtin_memcmp
  ------------------
  |  Branch (711:11): [True: 352, False: 14]
  ------------------
  712|    540|}
_ZN4absl12lts_20240116neENS0_11string_viewES1_:
  714|      4|constexpr bool operator!=(string_view x, string_view y) noexcept {
  715|      4|  return !(x == y);
  716|      4|}
_ZN4absl12lts_20240116ltENS0_11string_viewES1_:
  718|    348|constexpr bool operator<(string_view x, string_view y) noexcept {
  719|    348|  return x.compare(y) < 0;
  720|    348|}
_ZN4absl12lts_2024011618NullSafeStringViewEPKc:
  762|    491|constexpr string_view NullSafeStringView(absl::Nullable<const char*> p) {
  763|    491|  return p ? string_view(p) : string_view();
  ------------------
  |  Branch (763:10): [True: 491, False: 0]
  ------------------
  764|    491|}
_ZNK4absl12lts_2024011611string_viewcvNSt3__112basic_stringIcNS2_11char_traitsIcEET_EEINS2_9allocatorIcEEEEv:
  368|    394|  explicit operator std::basic_string<char, traits_type, A>() const {
  369|    394|    if (!data()) return {};
  ------------------
  |  Branch (369:9): [True: 0, False: 394]
  ------------------
  370|    394|    return std::basic_string<char, traits_type, A>(data(), size());
  371|    394|  }

_ZN4absl12lts_2024011624synchronization_internal14InvalidGraphIdEv:
   58|     71|inline GraphId InvalidGraphId() {
   59|     71|  return GraphId{0};
   60|     71|}

_ZN4absl12lts_202401165Mutex4LockEv:
 1524|     71|void Mutex::Lock() {
 1525|     71|  ABSL_TSAN_MUTEX_PRE_LOCK(this, 0);
 1526|     71|  GraphId id = DebugOnlyDeadlockCheck(this);
 1527|     71|  intptr_t v = mu_.load(std::memory_order_relaxed);
 1528|       |  // try fast acquire, then spin loop
 1529|     71|  if (ABSL_PREDICT_FALSE((v & (kMuWriter | kMuReader | kMuEvent)) != 0) ||
  ------------------
  |  |  178|    142|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 71]
  |  |  |  Branch (178:49): [Folded, False: 71]
  |  |  |  Branch (178:58): [True: 0, False: 71]
  |  |  ------------------
  ------------------
 1530|     71|      ABSL_PREDICT_FALSE(!mu_.compare_exchange_strong(
  ------------------
  |  |  178|     71|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 71]
  |  |  |  Branch (178:49): [Folded, False: 71]
  |  |  |  Branch (178:58): [True: 0, False: 71]
  |  |  ------------------
  ------------------
 1531|     71|          v, kMuWriter | v, std::memory_order_acquire,
 1532|     71|          std::memory_order_relaxed))) {
 1533|       |    // try spin acquire, then slow loop
 1534|      0|    if (ABSL_PREDICT_FALSE(!TryAcquireWithSpinning(&this->mu_))) {
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1535|      0|      this->LockSlow(kExclusive, nullptr, 0);
 1536|      0|    }
 1537|      0|  }
 1538|     71|  DebugOnlyLockEnter(this, id);
 1539|     71|  ABSL_TSAN_MUTEX_POST_LOCK(this, 0, 0);
 1540|     71|}
_ZN4absl12lts_202401165Mutex6UnlockEv:
 1702|     71|void Mutex::Unlock() {
 1703|     71|  ABSL_TSAN_MUTEX_PRE_UNLOCK(this, 0);
 1704|     71|  DebugOnlyLockLeave(this);
 1705|     71|  intptr_t v = mu_.load(std::memory_order_relaxed);
 1706|       |
 1707|     71|  if (kDebugMode && ((v & (kMuWriter | kMuReader)) != kMuWriter)) {
  ------------------
  |  Branch (1707:7): [Folded, False: 71]
  |  Branch (1707:21): [True: 0, False: 0]
  ------------------
 1708|      0|    ABSL_RAW_LOG(FATAL, "Mutex unlocked when destroyed or not locked: v=0x%x",
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1709|      0|                 static_cast<unsigned>(v));
 1710|      0|  }
 1711|       |
 1712|       |  // should_try_cas is whether we'll try a compare-and-swap immediately.
 1713|       |  // NOTE: optimized out when kDebugMode is false.
 1714|     71|  bool should_try_cas = ((v & (kMuEvent | kMuWriter)) == kMuWriter &&
  ------------------
  |  Branch (1714:26): [True: 71, False: 0]
  ------------------
 1715|     71|                         (v & (kMuWait | kMuDesig)) != kMuWait);
  ------------------
  |  Branch (1715:26): [True: 71, False: 0]
  ------------------
 1716|       |  // But, we can use an alternate computation of it, that compilers
 1717|       |  // currently don't find on their own.  When that changes, this function
 1718|       |  // can be simplified.
 1719|     71|  intptr_t x = (v ^ (kMuWriter | kMuWait)) & (kMuWriter | kMuEvent);
 1720|     71|  intptr_t y = (v ^ (kMuWriter | kMuWait)) & (kMuWait | kMuDesig);
 1721|       |  // Claim: "x == 0 && y > 0" is equal to should_try_cas.
 1722|       |  // Also, because kMuWriter and kMuEvent exceed kMuDesig and kMuWait,
 1723|       |  // all possible non-zero values for x exceed all possible values for y.
 1724|       |  // Therefore, (x == 0 && y > 0) == (x < y).
 1725|     71|  if (kDebugMode && should_try_cas != (x < y)) {
  ------------------
  |  Branch (1725:7): [Folded, False: 71]
  |  Branch (1725:21): [True: 0, False: 0]
  ------------------
 1726|       |    // We would usually use PRIdPTR here, but is not correctly implemented
 1727|       |    // within the android toolchain.
 1728|      0|    ABSL_RAW_LOG(FATAL, "internal logic error %llx %llx %llx\n",
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1729|      0|                 static_cast<long long>(v), static_cast<long long>(x),
 1730|      0|                 static_cast<long long>(y));
 1731|      0|  }
 1732|     71|  if (x < y && mu_.compare_exchange_strong(v, v & ~(kMuWrWait | kMuWriter),
  ------------------
  |  Branch (1732:7): [True: 71, False: 0]
  |  Branch (1732:16): [True: 71, False: 0]
  ------------------
 1733|     71|                                           std::memory_order_release,
 1734|     71|                                           std::memory_order_relaxed)) {
 1735|       |    // fast writer release (writer with no waiters or with designated waker)
 1736|     71|  } else {
 1737|      0|    this->UnlockSlow(nullptr /*no waitp*/);  // take slow path
 1738|      0|  }
 1739|     71|  ABSL_TSAN_MUTEX_POST_UNLOCK(this, 0);
 1740|     71|}
_ZNK4absl12lts_202401165Mutex10AssertHeldEv:
 2470|      4|void Mutex::AssertHeld() const {
 2471|      4|  if ((mu_.load(std::memory_order_relaxed) & kMuWriter) == 0) {
  ------------------
  |  Branch (2471:7): [True: 0, False: 4]
  ------------------
 2472|      0|    SynchEvent* e = GetSynchEvent(this);
 2473|       |    ABSL_RAW_LOG(FATAL, "thread should hold write lock on Mutex %p %s",
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |  ------------------
  |  |  |  Branch (50:38): [True: 0, False: 0]
  |  |  ------------------
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2474|      0|                 static_cast<const void*>(this), (e == nullptr ? "" : e->name));
 2475|      0|  }
 2476|      4|}
mutex.cc:_ZN4absl12lts_20240116L22DebugOnlyDeadlockCheckEPNS0_5MutexE:
 1466|     71|static inline GraphId DebugOnlyDeadlockCheck(Mutex* mu) {
 1467|     71|  if (kDebugMode && synch_deadlock_detection.load(std::memory_order_acquire) !=
  ------------------
  |  Branch (1467:7): [Folded, False: 71]
  |  Branch (1467:21): [True: 0, False: 0]
  ------------------
 1468|      0|                        OnDeadlockCycle::kIgnore) {
 1469|      0|    return DeadlockCheck(mu);
 1470|     71|  } else {
 1471|     71|    return InvalidGraphId();
 1472|     71|  }
 1473|     71|}
mutex.cc:_ZN4absl12lts_20240116L18DebugOnlyLockEnterEPNS0_5MutexENS0_24synchronization_internal7GraphIdE:
 1298|     71|static inline void DebugOnlyLockEnter(Mutex* mu, GraphId id) {
 1299|     71|  if (kDebugMode) {
  ------------------
  |  Branch (1299:7): [Folded, False: 71]
  ------------------
 1300|      0|    if (synch_deadlock_detection.load(std::memory_order_acquire) !=
  ------------------
  |  Branch (1300:9): [True: 0, False: 0]
  ------------------
 1301|      0|        OnDeadlockCycle::kIgnore) {
 1302|      0|      LockEnter(mu, id, Synch_GetAllLocks());
 1303|      0|    }
 1304|      0|  }
 1305|     71|}
mutex.cc:_ZN4absl12lts_20240116L18DebugOnlyLockLeaveEPNS0_5MutexE:
 1308|     71|static inline void DebugOnlyLockLeave(Mutex* mu) {
 1309|     71|  if (kDebugMode) {
  ------------------
  |  Branch (1309:7): [Folded, False: 71]
  ------------------
 1310|      0|    if (synch_deadlock_detection.load(std::memory_order_acquire) !=
  ------------------
  |  Branch (1310:9): [True: 0, False: 0]
  ------------------
 1311|      0|        OnDeadlockCycle::kIgnore) {
 1312|      0|      LockLeave(mu, GetGraphId(mu), Synch_GetAllLocks());
 1313|      0|    }
 1314|      0|  }
 1315|     71|}

_ZN4absl12lts_202401169MutexLockC2EPNS0_5MutexE:
  583|     57|  explicit MutexLock(Mutex* mu) ABSL_EXCLUSIVE_LOCK_FUNCTION(mu) : mu_(mu) {
  584|     57|    this->mu_->Lock();
  585|     57|  }
_ZN4absl12lts_202401169MutexLockD2Ev:
  601|     57|  ~MutexLock() ABSL_UNLOCK_FUNCTION() { this->mu_->Unlock(); }
_ZN4absl12lts_2024011614MutexLockMaybeC2EPNS0_5MutexE:
 1000|    114|      : mu_(mu) {
 1001|    114|    if (this->mu_ != nullptr) {
  ------------------
  |  Branch (1001:9): [True: 10, False: 104]
  ------------------
 1002|     10|      this->mu_->Lock();
 1003|     10|    }
 1004|    114|  }
_ZN4absl12lts_2024011614MutexLockMaybeD2Ev:
 1014|    114|  ~MutexLockMaybe() ABSL_UNLOCK_FUNCTION() {
 1015|    114|    if (this->mu_ != nullptr) {
  ------------------
  |  Branch (1015:9): [True: 10, False: 104]
  ------------------
 1016|     10|      this->mu_->Unlock();
 1017|     10|    }
 1018|    114|  }
_ZN4absl12lts_202401165Mutex4DtorEv:
 1079|      9|inline void Mutex::Dtor() {}
_ZN4absl12lts_202401165MutexC2Ev:
 1061|     20|inline Mutex::Mutex() : mu_(0) {
 1062|     20|  ABSL_TSAN_MUTEX_CREATE(this, __tsan_mutex_not_static);
 1063|     20|}
_ZN4absl12lts_202401165MutexD2Ev:
 1069|      9|inline Mutex::~Mutex() { Dtor(); }

_ZN4absl12lts_2024011616compare_internal27compare_result_as_less_thanIbTnNSt3__19enable_ifIXsr3std7is_sameIbT_EE5valueEiE4typeELi0EEEbS5_:
  454|    341|constexpr bool compare_result_as_less_than(const BoolT r) { return r; }

_ZN4absl12lts_2024011617optional_internal13optional_dataIN6google8protobuf15FeatureResolverELb0EEC2Ev:
  163|      4|  optional_data() = default;
_ZN4absl12lts_2024011617optional_internal23optional_data_dtor_baseIN6google8protobuf15FeatureResolverELb0EEC2Ev:
   80|      4|  constexpr optional_data_dtor_base() noexcept : engaged_(false), dummy_{{}} {}
_ZN4absl12lts_2024011617optional_internal23optional_data_dtor_baseIN6google8protobuf15FeatureResolverELb0EED2Ev:
   86|      4|  ~optional_data_dtor_base() { destruct(); }
_ZN4absl12lts_2024011617optional_internal23optional_data_dtor_baseIN6google8protobuf15FeatureResolverELb0EE8destructEv:
   64|      8|  void destruct() noexcept {
   65|      8|    if (engaged_) {
  ------------------
  |  Branch (65:9): [True: 4, False: 4]
  ------------------
   66|       |      // `data_` must be initialized if `engaged_` is true.
   67|       |#if ABSL_INTERNAL_HAVE_MIN_GNUC_VERSION(12, 0)
   68|       |#pragma GCC diagnostic push
   69|       |#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
   70|       |#endif
   71|      4|      data_.~T();
   72|       |#if ABSL_INTERNAL_HAVE_MIN_GNUC_VERSION(12, 0)
   73|       |#pragma GCC diagnostic pop
   74|       |#endif
   75|      4|      engaged_ = false;
   76|      4|    }
   77|      8|  }
_ZN4absl12lts_2024011617optional_internal18optional_data_baseIN6google8protobuf15FeatureResolverEE9constructIJS5_EEEvDpOT_:
  123|      4|  void construct(Args&&... args) {
  124|       |    // Use dummy_'s address to work around casting cv-qualified T* to void*.
  125|      4|    ::new (static_cast<void*>(&this->dummy_)) T(std::forward<Args>(args)...);
  126|      4|    this->engaged_ = true;
  127|      4|  }

_ZN4absl12lts_2024011613span_internal7GetDataIKNSt3__16vectorIiNS3_9allocatorIiEEEEEEDTcl11GetDataImplfp_Li0EEERT_:
   50|    516|    -> decltype(GetDataImpl(c, 0)) {
   51|    516|  return GetDataImpl(c, 0);
   52|    516|}
_ZN4absl12lts_2024011613span_internal11GetDataImplIKNSt3__16vectorIiNS3_9allocatorIiEEEEEEDTcldtfp_4dataEERT_c:
   38|    516|    -> decltype(c.data()) {
   39|    516|  return c.data();
   40|    516|}

_ZN4absl12lts_202401168optionalIN6google8protobuf15FeatureResolverEEC2ENS0_9nullopt_tE:
  137|      4|  constexpr optional(nullopt_t) noexcept {}  // NOLINT(runtime/explicit)
_ZNK4absl12lts_202401168optionalIN6google8protobuf15FeatureResolverEE9has_valueEv:
  463|    516|  constexpr bool has_value() const noexcept { return this->engaged_; }
_ZN4absl12lts_202401168optionalIN6google8protobuf15FeatureResolverEEptEv:
  423|    239|  absl::Nonnull<T*> operator->() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  424|    239|    ABSL_HARDENING_ASSERT(this->engaged_);
  ------------------
  |  |  128|    239|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|    239|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 239]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  425|    239|    return std::addressof(this->data_);
  426|    239|  }
_ZN4absl12lts_202401168optionalIN6google8protobuf15FeatureResolverEE7emplaceIJS4_EvEERS4_DpOT_:
  361|      4|  T& emplace(Args&&... args) ABSL_ATTRIBUTE_LIFETIME_BOUND {
  362|      4|    this->destruct();
  363|      4|    this->construct(std::forward<Args>(args)...);
  364|      4|    return reference();
  365|      4|  }
_ZN4absl12lts_202401168optionalIN6google8protobuf15FeatureResolverEE9referenceEv:
  531|      4|  T& reference() { return this->data_; }

_ZN4absl12lts_202401164SpanIKiEC2INSt3__16vectorIiNS5_9allocatorIiEEEEvS9_iEERKT_:
  217|    516|      : Span(span_internal::GetData(v), v.size()) {}
_ZN4absl12lts_202401164SpanIKiEC2EPS2_m:
  193|    516|      : ptr_(array), len_(length) {}

_ZN4absl12lts_2024011616utility_internal15IfConstexprElseILb0EZN6google8protobuf5Arena6CreateINSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEJEEEPT_PS5_DpOT0_EUlDpOT_E_ZNS6_ISD_JEEESF_SG_SJ_EUlSM_E0_JEEEDaOT0_OT1_DpOT2_:
   53|  4.46k|                     Args&&... args) {
   54|  4.46k|  return std::get<condition>(std::forward_as_tuple(
   55|  4.46k|      std::forward<FalseFunc>(false_func), std::forward<TrueFunc>(true_func)))(
   56|  4.46k|      std::forward<Args>(args)...);
   57|  4.46k|}
_ZN4absl12lts_2024011616utility_internal15IfConstexprElseILb1EZN6google8protobuf5Arena6CreateINS4_19FileDescriptorProtoEJEEEPT_PS5_DpOT0_EUlDpOT_E_ZNS6_IS7_JEEES9_SA_SD_EUlSG_E0_JEEEDaOT0_OT1_DpOT2_:
   53|      4|                     Args&&... args) {
   54|      4|  return std::get<condition>(std::forward_as_tuple(
   55|      4|      std::forward<FalseFunc>(false_func), std::forward<TrueFunc>(true_func)))(
   56|      4|      std::forward<Args>(args)...);
   57|      4|}

_ZN4absl12lts_202401167forwardINS0_18container_internal12CommonFieldsEEEOT_RNSt3__116remove_referenceIS4_E4typeE:
  149|    450|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|    450|  return static_cast<T&&>(t);
  151|    450|}
extension_set.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherEEEOT_RNSt3__116remove_referenceIS7_E4typeE:
  149|      3|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      3|  return static_cast<T&&>(t);
  151|      3|}
extension_set.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf8internal12_GLOBAL__N_111ExtensionEqEEEOT_RNSt3__116remove_referenceIS7_E4typeE:
  149|      3|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      3|  return static_cast<T&&>(t);
  151|      3|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorIN6google8protobuf8internal13ExtensionInfoEEEEEOT_RNS2_16remove_referenceIS9_E4typeE:
  149|      3|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      3|  return static_cast<T&&>(t);
  151|      3|}
_ZN4absl12lts_202401167forwardINS0_18container_internal6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashEEEOT_RNSt3__116remove_referenceISB_E4typeE:
  149|     36|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     36|  return static_cast<T&&>(t);
  151|     36|}
_ZN4absl12lts_202401167forwardINS0_18container_internal6HashEqIPKN6google8protobuf14FileDescriptorEvE2EqEEEOT_RNSt3__116remove_referenceISB_E4typeE:
  149|     36|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     36|  return static_cast<T&&>(t);
  151|     36|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorINS2_4pairIKPKN6google8protobuf14FileDescriptorENS2_6vectorINS6_14DescriptorPool18DeferredValidation13LifetimesInfoENS3_ISE_EEEEEEEEEEOT_RNS2_16remove_referenceISJ_E4typeE:
  149|     12|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     12|  return static_cast<T&&>(t);
  151|     12|}
_ZN4absl12lts_202401167forwardINS0_18container_internal10StringHashEEEOT_RNSt3__116remove_referenceIS4_E4typeE:
  149|    267|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|    267|  return static_cast<T&&>(t);
  151|    267|}
_ZN4absl12lts_202401167forwardINS0_18container_internal8StringEqEEEOT_RNSt3__116remove_referenceIS4_E4typeE:
  149|    267|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|    267|  return static_cast<T&&>(t);
  151|    267|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorINS2_12basic_stringIcNS2_11char_traitsIcEENS3_IcEEEEEEEEOT_RNS2_16remove_referenceISA_E4typeE:
  149|     12|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     12|  return static_cast<T&&>(t);
  151|     12|}
_ZN4absl12lts_202401167forwardINS0_18container_internal6HashEqIPKN6google8protobuf10DescriptorEvE4HashEEEOT_RNSt3__116remove_referenceISB_E4typeE:
  149|     42|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     42|  return static_cast<T&&>(t);
  151|     42|}
_ZN4absl12lts_202401167forwardINS0_18container_internal6HashEqIPKN6google8protobuf10DescriptorEvE2EqEEEOT_RNSt3__116remove_referenceISB_E4typeE:
  149|     42|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     42|  return static_cast<T&&>(t);
  151|     42|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorIPKN6google8protobuf10DescriptorEEEEEOT_RNS2_16remove_referenceISA_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorINS2_4pairIKNS2_12basic_stringIcNS2_11char_traitsIcEENS3_IcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEEEEEOT_RNS2_16remove_referenceISH_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
descriptor.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashEEEOT_RNSt3__116remove_referenceIS6_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
descriptor.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf12_GLOBAL__N_118SymbolByFullNameEqEEEOT_RNSt3__116remove_referenceIS6_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorIN6google8protobuf6SymbolEEEEEOT_RNS2_16remove_referenceIS8_E4typeE:
  149|     18|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     18|  return static_cast<T&&>(t);
  151|     18|}
descriptor.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS3_14FileDescriptorEEEEEOT_RNSt3__116remove_referenceIS8_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
descriptor.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf12_GLOBAL__N_119DescriptorsByNameEqINS3_14FileDescriptorEEEEEOT_RNSt3__116remove_referenceIS8_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorIPKN6google8protobuf14FileDescriptorEEEEEOT_RNS2_16remove_referenceISA_E4typeE:
  149|     30|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     30|  return static_cast<T&&>(t);
  151|     30|}
_ZN4absl12lts_202401167forwardIRKNS0_18container_internal19key_compare_adapterINSt3__14lessINS4_4pairIPKN6google8protobuf10DescriptorEiEEEESC_E15checked_compareEEEOT_RNS4_16remove_referenceISI_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardIRKNSt3__19allocatorINS2_4pairIKNS4_IPKN6google8protobuf10DescriptorEiEEPKNS6_15FieldDescriptorEEEEEEEOT_RNS2_16remove_referenceISJ_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardIPNS0_18container_internal10btree_nodeINS2_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorENS5_4lessISC_EENS5_9allocatorINS6_IKSC_SF_EEEELi256ELb0EEEEEEEOT_RNS5_16remove_referenceISP_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorINS2_4pairIKNS2_12basic_stringIcNS2_11char_traitsIcEENS3_IcEEEENS2_10unique_ptrIN6google8protobuf10FeatureSetENS2_14default_deleteISE_EEEEEEEEEEOT_RNS2_16remove_referenceISK_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
descriptor.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf12_GLOBAL__N_118SymbolByParentHashEEEOT_RNSt3__116remove_referenceIS6_E4typeE:
  149|     12|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     12|  return static_cast<T&&>(t);
  151|     12|}
descriptor.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf12_GLOBAL__N_116SymbolByParentEqEEEOT_RNSt3__116remove_referenceIS6_E4typeE:
  149|     12|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     12|  return static_cast<T&&>(t);
  151|     12|}
descriptor.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf12_GLOBAL__N_116ParentNumberHashEEEOT_RNSt3__116remove_referenceIS6_E4typeE:
  149|     36|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     36|  return static_cast<T&&>(t);
  151|     36|}
descriptor.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf12_GLOBAL__N_114ParentNumberEqEEEOT_RNSt3__116remove_referenceIS6_E4typeE:
  149|     36|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     36|  return static_cast<T&&>(t);
  151|     36|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorIPKN6google8protobuf15FieldDescriptorEEEEEOT_RNS2_16remove_referenceISA_E4typeE:
  149|     12|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     12|  return static_cast<T&&>(t);
  151|     12|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorIPKN6google8protobuf19EnumValueDescriptorEEEEEOT_RNS2_16remove_referenceISA_E4typeE:
  149|     24|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     24|  return static_cast<T&&>(t);
  151|     24|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorINS2_4pairIKNS2_12basic_stringIcNS2_11char_traitsIcEENS3_IcEEEEPKN6google8protobuf23SourceCodeInfo_LocationEEEEEEEOT_RNS2_16remove_referenceISI_E4typeE:
  149|     12|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     12|  return static_cast<T&&>(t);
  151|     12|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorINS2_4pairIKNS2_12basic_stringIcNS2_11char_traitsIcEENS3_IcEEEEbEEEEEEOT_RNS2_16remove_referenceISD_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorINS2_4pairIKPKN6google8protobuf10DescriptorENS6_17DescriptorBuilder12MessageHintsEEEEEEEOT_RNS2_16remove_referenceISF_E4typeE:
  149|     12|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     12|  return static_cast<T&&>(t);
  151|     12|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorINS0_11string_viewEEEEEOT_RNS2_16remove_referenceIS6_E4typeE:
  149|    225|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|    225|  return static_cast<T&&>(t);
  151|    225|}
_ZN4absl12lts_202401167forwardINS0_13hash_internal4HashIiEEEEOT_RNSt3__116remove_referenceIS5_E4typeE:
  149|     12|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     12|  return static_cast<T&&>(t);
  151|     12|}
_ZN4absl12lts_202401167forwardINSt3__18equal_toIiEEEEOT_RNS2_16remove_referenceIS5_E4typeE:
  149|     12|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     12|  return static_cast<T&&>(t);
  151|     12|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorIiEEEEOT_RNS2_16remove_referenceIS5_E4typeE:
  149|     12|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     12|  return static_cast<T&&>(t);
  151|     12|}
_ZN4absl12lts_202401167forwardINS0_13hash_internal4HashINSt3__16vectorIiNS4_9allocatorIiEEEEEEEEOT_RNS4_16remove_referenceISA_E4typeE:
  149|     24|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     24|  return static_cast<T&&>(t);
  151|     24|}
_ZN4absl12lts_202401167forwardINSt3__18equal_toINS2_6vectorIiNS2_9allocatorIiEEEEEEEEOT_RNS2_16remove_referenceIS9_E4typeE:
  149|     24|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     24|  return static_cast<T&&>(t);
  151|     24|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorINS2_4pairIKNS2_6vectorIiNS3_IiEEEES7_EEEEEEOT_RNS2_16remove_referenceISB_E4typeE:
  149|     12|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     12|  return static_cast<T&&>(t);
  151|     12|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorINS2_4pairIKNS2_6vectorIiNS3_IiEEEEiEEEEEEOT_RNS2_16remove_referenceISB_E4typeE:
  149|     12|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     12|  return static_cast<T&&>(t);
  151|     12|}
_ZN4absl12lts_202401167forwardIRKNS0_18container_internal19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareENS7_9FileEntryEE15checked_compareEEEOT_RNSt3__116remove_referenceISE_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardIRKNSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEEEEOT_RNS2_16remove_referenceISC_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardIPNS0_18container_internal10btree_nodeINS2_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEEEOT_RNSB_16remove_referenceISH_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardIRKNS0_18container_internal19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS7_11SymbolEntryEE15checked_compareEEEOT_RNSt3__116remove_referenceISE_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardIRKNSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEEEOT_RNS2_16remove_referenceISC_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardIPNS0_18container_internal10btree_nodeINS2_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEEEOT_RNSB_16remove_referenceISH_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardIRKNS0_18container_internal19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex16ExtensionCompareENS7_14ExtensionEntryEE15checked_compareEEEOT_RNSt3__116remove_referenceISE_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardIRKNSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEEEEEOT_RNS2_16remove_referenceISC_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardIPNS0_18container_internal10btree_nodeINS2_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEEEOT_RNSB_16remove_referenceISH_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorINS2_4pairIKPKN6google8protobuf10DescriptorEPKNS6_21DynamicMessageFactory8TypeInfoEEEEEEEOT_RNS2_16remove_referenceISH_E4typeE:
  149|     18|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     18|  return static_cast<T&&>(t);
  151|     18|}
message.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashEEEOT_RNSt3__116remove_referenceIS7_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
message.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory18DescriptorByNameEqEEEOT_RNSt3__116remove_referenceIS7_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorIPKN6google8protobuf8internal15DescriptorTableEEEEEOT_RNS2_16remove_referenceISB_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
message.cc:_ZN4absl12lts_202401167forwardINSt3__19allocatorINS2_4pairIKPKN6google8protobuf10DescriptorENS6_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEEEEEEOT_RNS2_16remove_referenceISG_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}

_ZN16protobuf_mutator18ParseBinaryMessageEPKhmPN6google8protobuf7MessageE:
   21|  2.57k|bool ParseBinaryMessage(const uint8_t* data, size_t size, Message* output) {
   22|  2.57k|  return ParseBinaryMessage({reinterpret_cast<const char*>(data), size},
   23|  2.57k|                            output);
   24|  2.57k|}
_ZN16protobuf_mutator18ParseBinaryMessageERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEPN6google8protobuf7MessageE:
   26|  2.57k|bool ParseBinaryMessage(const std::string& data, protobuf::Message* output) {
   27|  2.57k|  output->Clear();
   28|  2.57k|  if (!output->ParsePartialFromString(data)) {
  ------------------
  |  Branch (28:7): [True: 0, False: 2.57k]
  ------------------
   29|      0|    output->Clear();
   30|      0|    return false;
   31|      0|  }
   32|  2.57k|  return true;
   33|  2.57k|}

_ZN16protobuf_mutator7Mutator4SeedEj:
  622|  2.57k|void Mutator::Seed(uint32_t value) { random_.seed(value); }
_ZN16protobuf_mutator7Mutator3FixEPN6google8protobuf7MessageE:
  624|  2.57k|void Mutator::Fix(Message* message) {
  625|  2.57k|  UnpackedAny any;
  626|  2.57k|  UnpackAny(*message, &any);
  627|       |
  628|  2.57k|  PostProcessing(keep_initialized_, post_processors_, any, &random_)
  629|  2.57k|      .Run(message, kMaxInitializeDepth);
  630|       |  assert(IsInitialized(*message));
  631|  2.57k|}
_ZN16protobuf_mutator7Mutator21RegisterPostProcessorEPKN6google8protobuf10DescriptorENSt3__18functionIFvPNS2_7MessageEjEEE:
  680|      1|                                    PostProcess callback) {
  681|      1|  post_processors_.emplace(desc, callback);
  682|      1|}
mutator.cc:_ZN16protobuf_mutator12_GLOBAL__N_19UnpackAnyERKN6google8protobuf7MessageEPNSt3__113unordered_mapIPS4_NS6_10unique_ptrIS3_NS6_14default_deleteIS3_EEEENS6_4hashIS8_EENS6_8equal_toIS8_EENS6_9allocatorINS6_4pairIKS8_SC_EEEEEE:
  399|  6.52k|void UnpackAny(const Message& message, UnpackedAny* result) {
  400|  6.52k|  if (std::unique_ptr<Message> any = UnpackIfAny(message)) {
  ------------------
  |  Branch (400:32): [True: 0, False: 6.52k]
  ------------------
  401|      0|    UnpackAny(*any, result);
  402|      0|    result->emplace(&message, std::move(any));
  403|      0|    return;
  404|      0|  }
  405|       |
  406|  6.52k|  const Descriptor* descriptor = message.GetDescriptor();
  407|  6.52k|  const Reflection* reflection = message.GetReflection();
  408|       |
  409|  50.6k|  for (int i = 0; i < descriptor->field_count(); ++i) {
  ------------------
  |  Branch (409:19): [True: 44.0k, False: 6.52k]
  ------------------
  410|  44.0k|    const FieldDescriptor* field = descriptor->field(i);
  411|  44.0k|    if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) {
  ------------------
  |  Branch (411:9): [True: 23.1k, False: 20.9k]
  ------------------
  412|  23.1k|      if (field->is_repeated()) {
  ------------------
  |  Branch (412:11): [True: 7.71k, False: 15.4k]
  ------------------
  413|  7.71k|        const int field_size = reflection->FieldSize(message, field);
  414|  8.84k|        for (int j = 0; j < field_size; ++j) {
  ------------------
  |  Branch (414:25): [True: 1.13k, False: 7.71k]
  ------------------
  415|  1.13k|          UnpackAny(reflection->GetRepeatedMessage(message, field, j), result);
  416|  1.13k|        }
  417|  15.4k|      } else if (reflection->HasField(message, field)) {
  ------------------
  |  Branch (417:18): [True: 2.81k, False: 12.6k]
  ------------------
  418|  2.81k|        UnpackAny(reflection->GetMessage(message, field), result);
  419|  2.81k|      }
  420|  23.1k|    }
  421|  44.0k|  }
  422|  6.52k|}
mutator.cc:_ZN16protobuf_mutator12_GLOBAL__N_111UnpackIfAnyERKN6google8protobuf7MessageE:
  394|  6.52k|std::unique_ptr<Message> UnpackIfAny(const Message& message) {
  395|  6.52k|  if (const Any* any = CastToAny(&message)) return UnpackAny(*any);
  ------------------
  |  Branch (395:18): [True: 0, False: 6.52k]
  ------------------
  396|  6.52k|  return {};
  397|  6.52k|}
mutator.cc:_ZN16protobuf_mutator12_GLOBAL__N_19CastToAnyEPKN6google8protobuf7MessageE:
  382|  6.52k|const Any* CastToAny(const Message* message) {
  383|  6.52k|  return Any::descriptor() == message->GetDescriptor()
  ------------------
  |  Branch (383:10): [True: 0, False: 6.52k]
  ------------------
  384|  6.52k|             ? protobuf::DownCastMessage<Any>(message)
  385|  6.52k|             : nullptr;
  386|  6.52k|}
mutator.cc:_ZN16protobuf_mutator12_GLOBAL__N_114PostProcessingC2EbRKNSt3__118unordered_multimapIPKN6google8protobuf10DescriptorENS2_8functionIFvPNS5_7MessageEjEEENS2_4hashIS8_EENS2_8equal_toIS8_EENS2_9allocatorINS2_4pairIKS8_SD_EEEEEERKNS2_13unordered_mapIPKSA_NS2_10unique_ptrISA_NS2_14default_deleteISA_EEEENSE_ISS_EENSG_ISS_EENSI_INSJ_IKSS_SW_EEEEEEPNS2_26linear_congruential_engineImLm48271ELm0ELm2147483647EEE:
  431|  2.57k|      : keep_initialized_(keep_initialized),
  432|  2.57k|        post_processors_(post_processors),
  433|  2.57k|        any_(any),
  434|  2.57k|        random_(random) {}
mutator.cc:_ZN16protobuf_mutator12_GLOBAL__N_114PostProcessing3RunEPN6google8protobuf7MessageEi:
  436|  6.52k|  void Run(Message* message, int max_depth) {
  437|  6.52k|    --max_depth;
  438|  6.52k|    const Descriptor* descriptor = message->GetDescriptor();
  439|       |
  440|       |    // Apply custom mutators in nested messages before packing any.
  441|  6.52k|    const Reflection* reflection = message->GetReflection();
  442|  50.6k|    for (int i = 0; i < descriptor->field_count(); i++) {
  ------------------
  |  Branch (442:21): [True: 44.0k, False: 6.52k]
  ------------------
  443|  44.0k|      const FieldDescriptor* field = descriptor->field(i);
  444|  44.0k|      if (keep_initialized_ &&
  ------------------
  |  Branch (444:11): [True: 44.0k, False: 0]
  ------------------
  445|  44.0k|          (field->is_required() || descriptor->options().map_entry()) &&
  ------------------
  |  Branch (445:12): [True: 0, False: 44.0k]
  |  Branch (445:36): [True: 0, False: 44.0k]
  ------------------
  446|      0|          !reflection->HasField(*message, field)) {
  ------------------
  |  Branch (446:11): [True: 0, False: 0]
  ------------------
  447|      0|        CreateDefaultField()(FieldInstance(message, field));
  448|      0|      }
  449|       |
  450|  44.0k|      if (field->cpp_type() != FieldDescriptor::CPPTYPE_MESSAGE) continue;
  ------------------
  |  Branch (450:11): [True: 20.9k, False: 23.1k]
  ------------------
  451|       |
  452|  23.1k|      if (max_depth < 0 && !field->is_required()) {
  ------------------
  |  Branch (452:11): [True: 0, False: 23.1k]
  |  Branch (452:28): [True: 0, False: 0]
  ------------------
  453|       |        // Clear deep optional fields to avoid stack overflow.
  454|      0|        reflection->ClearField(message, field);
  455|      0|        if (field->is_repeated())
  ------------------
  |  Branch (455:13): [True: 0, False: 0]
  ------------------
  456|      0|          assert(!reflection->FieldSize(*message, field));
  457|      0|        else
  458|      0|          assert(!reflection->HasField(*message, field));
  459|      0|        continue;
  460|      0|      }
  461|       |
  462|  23.1k|      if (field->is_repeated()) {
  ------------------
  |  Branch (462:11): [True: 7.71k, False: 15.4k]
  ------------------
  463|  7.71k|        const int field_size = reflection->FieldSize(*message, field);
  464|  8.84k|        for (int j = 0; j < field_size; ++j) {
  ------------------
  |  Branch (464:25): [True: 1.13k, False: 7.71k]
  ------------------
  465|  1.13k|          Message* nested_message =
  466|  1.13k|              reflection->MutableRepeatedMessage(message, field, j);
  467|  1.13k|          Run(nested_message, max_depth);
  468|  1.13k|        }
  469|  15.4k|      } else if (reflection->HasField(*message, field)) {
  ------------------
  |  Branch (469:18): [True: 2.81k, False: 12.6k]
  ------------------
  470|  2.81k|        Message* nested_message = reflection->MutableMessage(message, field);
  471|  2.81k|        Run(nested_message, max_depth);
  472|  2.81k|      }
  473|  23.1k|    }
  474|       |
  475|  6.52k|    if (Any* any = CastToAny(message)) {
  ------------------
  |  Branch (475:14): [True: 0, False: 6.52k]
  ------------------
  476|      0|      if (max_depth < 0) {
  ------------------
  |  Branch (476:11): [True: 0, False: 0]
  ------------------
  477|       |        // Clear deep Any fields to avoid stack overflow.
  478|      0|        any->Clear();
  479|      0|      } else {
  480|      0|        auto It = any_.find(message);
  481|      0|        if (It != any_.end()) {
  ------------------
  |  Branch (481:13): [True: 0, False: 0]
  ------------------
  482|      0|          Run(It->second.get(), max_depth);
  483|      0|          std::string value;
  484|      0|          It->second->SerializePartialToString(&value);
  485|      0|          *any->mutable_value() = std::move(value);
  486|      0|        }
  487|      0|      }
  488|      0|    }
  489|       |
  490|       |    // Call user callback after message trimmed, initialized and packed.
  491|  6.52k|    auto range = post_processors_.equal_range(descriptor);
  492|  9.09k|    for (auto it = range.first; it != range.second; ++it)
  ------------------
  |  Branch (492:33): [True: 2.57k, False: 6.52k]
  ------------------
  493|  2.57k|      it->second(message, (*random_)());
  494|  6.52k|  }
mutator.cc:_ZN16protobuf_mutator12_GLOBAL__N_19CastToAnyEPN6google8protobuf7MessageE:
  388|  6.52k|Any* CastToAny(Message* message) {
  389|  6.52k|  return Any::descriptor() == message->GetDescriptor()
  ------------------
  |  Branch (389:10): [True: 0, False: 6.52k]
  ------------------
  390|  6.52k|             ? protobuf::DownCastMessage<Any>(message)
  391|  6.52k|             : nullptr;
  392|  6.52k|}

_ZN16protobuf_mutator7MutatorC2Ev:
   48|      1|  Mutator() = default;
_ZN16protobuf_mutator7MutatorD2Ev:
   49|      1|  virtual ~Mutator() = default;

CRYPTO_calloc:
   29|     32|{
   30|     32|    size_t bytes;
   31|       |
   32|     32|    if (ossl_unlikely(!ossl_size_mul(num, size, &bytes, file, line)))
  ------------------
  |  |   23|     32|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 32]
  |  |  ------------------
  ------------------
   33|      0|        return NULL;
   34|       |
   35|     32|    return CRYPTO_zalloc(bytes, file, line);
   36|     32|}
CRYPTO_aligned_alloc_array:
   40|      2|{
   41|      2|    size_t bytes;
   42|       |
   43|      2|    if (ossl_unlikely(!ossl_size_mul(num, size, &bytes, file, line))) {
  ------------------
  |  |   23|      2|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 2]
  |  |  ------------------
  ------------------
   44|      0|        *freeptr = NULL;
   45|       |
   46|      0|        return NULL;
   47|      0|    }
   48|       |
   49|      2|    return CRYPTO_aligned_alloc(bytes, align, freeptr, file, line);
   50|      2|}
CRYPTO_realloc_array:
   54|     20|{
   55|     20|    size_t bytes;
   56|       |
   57|     20|    if (ossl_unlikely(!ossl_size_mul(num, size, &bytes, file, line)))
  ------------------
  |  |   23|     20|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 20]
  |  |  ------------------
  ------------------
   58|      0|        return NULL;
   59|       |
   60|     20|    return CRYPTO_realloc(addr, bytes, file, line);
   61|     20|}

ossl_err_load_ASN1_strings:
  210|      2|{
  211|      2|#ifndef OPENSSL_NO_ERR
  212|      2|    if (ERR_reason_error_string(ASN1_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (212:9): [True: 2, False: 0]
  ------------------
  213|      2|        ERR_load_strings_const(ASN1_str_reasons);
  214|      2|#endif
  215|      2|    return 1;
  216|      2|}

ossl_err_load_ASYNC_strings:
   31|      2|{
   32|      2|#ifndef OPENSSL_NO_ERR
   33|      2|    if (ERR_reason_error_string(ASYNC_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (33:9): [True: 2, False: 0]
  ------------------
   34|      2|        ERR_load_strings_const(ASYNC_str_reasons);
   35|      2|#endif
   36|      2|    return 1;
   37|      2|}

ossl_err_load_BIO_strings:
   93|      2|{
   94|      2|#ifndef OPENSSL_NO_ERR
   95|      2|    if (ERR_reason_error_string(BIO_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (95:9): [True: 2, False: 0]
  ------------------
   96|      2|        ERR_load_strings_const(BIO_str_reasons);
   97|      2|#endif
   98|      2|    return 1;
   99|      2|}

BIO_snprintf:
  244|      2|{
  245|      2|    va_list args;
  246|      2|    int ret;
  247|       |
  248|      2|    va_start(args, format);
  249|      2|    ret = BIO_vsnprintf(buf, n, format, args);
  250|      2|    va_end(args);
  251|       |
  252|      2|    return ret;
  253|      2|}
BIO_vsnprintf:
  256|      4|{
  257|       |#if defined(_MSC_VER) && _MSC_VER < 1900
  258|       |    char *fmt_alloc;
  259|       |    const char *fmt;
  260|       |#endif
  261|      4|    int ret;
  262|       |
  263|       |#if defined(_MSC_VER) && _MSC_VER < 1900
  264|       |    if (!msvc_translate_printf_format(format, &fmt, &fmt_alloc))
  265|       |        return -1;
  266|       |    ret = _vsnprintf_s(buf, n, _TRUNCATE, fmt, args);
  267|       |    OPENSSL_free(fmt_alloc);
  268|       |#else
  269|      4|    ret = vsnprintf(buf, n, format, args);
  270|      4|    if ((size_t)ret >= n)
  ------------------
  |  Branch (270:9): [True: 0, False: 4]
  ------------------
  271|      0|        ret = -1;
  272|      4|#endif
  273|      4|    return ret;
  274|      4|}

ossl_bio_core_globals_new:
   31|      2|{
   32|      2|    return OPENSSL_zalloc(sizeof(BIO_CORE_GLOBALS));
  ------------------
  |  |  109|      2|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   33|      2|}

BIO_new_file:
   58|      2|{
   59|      2|    BIO *ret;
   60|      2|    FILE *file;
   61|      2|    int fp_flags = BIO_CLOSE;
  ------------------
  |  |   85|      2|#define BIO_CLOSE 0x01
  ------------------
   62|       |
   63|      2|    if (strchr(mode, 'b') == NULL)
  ------------------
  |  Branch (63:9): [True: 0, False: 2]
  ------------------
   64|      0|        fp_flags |= BIO_FP_TEXT;
  ------------------
  |  |  220|      0|#define BIO_FP_TEXT 0x10
  ------------------
   65|       |
   66|      2|    if (filename == NULL) {
  ------------------
  |  Branch (66:9): [True: 0, False: 2]
  ------------------
   67|      0|        ERR_raise(ERR_LIB_CRYPTO, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   68|      0|        return NULL;
   69|      0|    }
   70|       |
   71|      2|    file = openssl_fopen(filename, mode);
   72|      2|    if (file == NULL) {
  ------------------
  |  Branch (72:9): [True: 2, False: 0]
  ------------------
   73|      2|        ERR_raise_data(ERR_LIB_SYS, get_last_sys_error(),
  ------------------
  |  |  359|      2|    (ERR_new(),                                                  \
  |  |  360|      2|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      2|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      2|        ERR_set_error)
  ------------------
                      ERR_raise_data(ERR_LIB_SYS, get_last_sys_error(),
  ------------------
  |  |   55|      2|#define ERR_LIB_SYS 2
  ------------------
                      ERR_raise_data(ERR_LIB_SYS, get_last_sys_error(),
  ------------------
  |  |   30|      2|#define get_last_sys_error() errno
  ------------------
   74|      2|            "calling fopen(%s, %s)",
   75|      2|            filename, mode);
   76|      2|        if (errno == ENOENT
  ------------------
  |  Branch (76:13): [True: 2, False: 0]
  ------------------
   77|      0|#ifdef ENXIO
   78|      2|            || errno == ENXIO
  ------------------
  |  Branch (78:16): [True: 0, False: 0]
  ------------------
   79|      2|#endif
   80|      2|        )
   81|      2|            ERR_raise(ERR_LIB_BIO, BIO_R_NO_SUCH_FILE);
  ------------------
  |  |  357|      2|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      2|    (ERR_new(),                                                  \
  |  |  |  |  360|      2|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      2|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      2|        ERR_set_error)
  |  |  ------------------
  ------------------
   82|      0|        else
   83|      2|            ERR_raise(ERR_LIB_BIO, ERR_R_SYS_LIB);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   84|      2|        return NULL;
   85|      2|    }
   86|      0|    if ((ret = BIO_new(BIO_s_file())) == NULL) {
  ------------------
  |  Branch (86:9): [True: 0, False: 0]
  ------------------
   87|      0|        fclose(file);
   88|      0|        return NULL;
   89|      0|    }
   90|       |
   91|       |    /* we did fopen -> we disengage UPLINK */
   92|      0|    BIO_clear_flags(ret, BIO_FLAGS_UPLINK_INTERNAL);
  ------------------
  |  |   18|      0|#define BIO_FLAGS_UPLINK_INTERNAL 0
  ------------------
   93|      0|    BIO_set_fp(ret, file, fp_flags);
  ------------------
  |  |  578|      0|#define BIO_set_fp(b, fp, c) BIO_ctrl(b, BIO_C_SET_FILE_PTR, c, (char *)(fp))
  |  |  ------------------
  |  |  |  |  449|      0|#define BIO_C_SET_FILE_PTR 106
  |  |  ------------------
  ------------------
   94|      0|    return ret;
   95|      0|}

ossl_err_load_BN_strings:
   50|      2|{
   51|      2|#ifndef OPENSSL_NO_ERR
   52|      2|    if (ERR_reason_error_string(BN_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (52:9): [True: 2, False: 0]
  ------------------
   53|      2|        ERR_load_strings_const(BN_str_reasons);
   54|      2|#endif
   55|      2|    return 1;
   56|      2|}

ossl_err_load_BUF_strings:
   24|      2|{
   25|      2|#ifndef OPENSSL_NO_ERR
   26|      2|    if (ERR_reason_error_string(BUF_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (26:9): [True: 2, False: 0]
  ------------------
   27|      2|        ERR_load_strings_const(BUF_str_reasons);
   28|      2|#endif
   29|      2|    return 1;
   30|      2|}

ossl_err_load_CMP_strings:
  199|      2|{
  200|      2|#ifndef OPENSSL_NO_ERR
  201|      2|    if (ERR_reason_error_string(CMP_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (201:9): [True: 2, False: 0]
  ------------------
  202|      2|        ERR_load_strings_const(CMP_str_reasons);
  203|      2|#endif
  204|      2|    return 1;
  205|      2|}

ossl_err_load_CMS_strings:
  182|      2|{
  183|      2|#ifndef OPENSSL_NO_ERR
  184|      2|    if (ERR_reason_error_string(CMS_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (184:9): [True: 2, False: 0]
  ------------------
  185|      2|        ERR_load_strings_const(CMS_str_reasons);
  186|      2|#endif
  187|      2|    return 1;
  188|      2|}

COMP_zlib:
  310|      2|{
  311|      2|    COMP_METHOD *meth = NULL;
  312|       |
  313|       |#ifndef OPENSSL_NO_ZLIB
  314|       |    if (RUN_ONCE(&zlib_once, ossl_comp_zlib_init))
  315|       |        meth = &zlib_stateful_method;
  316|       |#endif
  317|       |
  318|      2|    return meth;
  319|      2|}

ossl_err_load_COMP_strings:
   45|      2|{
   46|      2|#ifndef OPENSSL_NO_ERR
   47|      2|    if (ERR_reason_error_string(COMP_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (47:9): [True: 2, False: 0]
  ------------------
   48|      2|        ERR_load_strings_const(COMP_str_reasons);
   49|      2|#endif
   50|      2|    return 1;
   51|      2|}

COMP_get_type:
   41|      2|{
   42|      2|    if (meth == NULL)
  ------------------
  |  Branch (42:9): [True: 2, False: 0]
  ------------------
   43|      2|        return NID_undef;
  ------------------
  |  |   18|      2|#define NID_undef                       0
  ------------------
   44|      0|    return meth->type;
   45|      2|}

ossl_load_builtin_compressions:
   29|      2|{
   30|      2|    STACK_OF(SSL_COMP) *comp_methods = NULL;
  ------------------
  |  |   33|      2|#define STACK_OF(type) struct stack_st_##type
  ------------------
   31|      2|#ifndef OPENSSL_NO_COMP
   32|      2|    SSL_COMP *comp = NULL;
   33|      2|    COMP_METHOD *method = COMP_zlib();
   34|       |
   35|      2|    comp_methods = sk_SSL_COMP_new(sk_comp_cmp);
  ------------------
  |  |   72|      2|#define sk_SSL_COMP_new(cmp) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_SSL_COMP_compfunc_type(cmp)), sk_SSL_COMP_cmpfunc_thunk))
  ------------------
   36|       |
   37|      2|    if (COMP_get_type(method) != NID_undef && comp_methods != NULL) {
  ------------------
  |  |   18|      4|#define NID_undef                       0
  ------------------
  |  Branch (37:9): [True: 0, False: 2]
  |  Branch (37:47): [True: 0, False: 0]
  ------------------
   38|      0|        comp = OPENSSL_malloc(sizeof(*comp));
  ------------------
  |  |  107|      0|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   39|      0|        if (comp != NULL) {
  ------------------
  |  Branch (39:13): [True: 0, False: 0]
  ------------------
   40|      0|            comp->method = method;
   41|      0|            comp->id = SSL_COMP_ZLIB_IDX;
  ------------------
  |  |   18|      0|#define SSL_COMP_ZLIB_IDX 1
  ------------------
   42|      0|            comp->name = COMP_get_name(method);
   43|      0|            if (!sk_SSL_COMP_push(comp_methods, comp))
  ------------------
  |  |   80|      0|#define sk_SSL_COMP_push(sk, ptr) OPENSSL_sk_push(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr))
  ------------------
  |  Branch (43:17): [True: 0, False: 0]
  ------------------
   44|      0|                OPENSSL_free(comp);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   45|      0|        }
   46|      0|    }
   47|      2|#endif
   48|      2|    return comp_methods;
   49|      2|}

_CONF_free_data:
  137|      2|{
  138|      2|    if (conf == NULL)
  ------------------
  |  Branch (138:9): [True: 0, False: 2]
  ------------------
  139|      0|        return;
  140|       |
  141|      2|    OPENSSL_free(conf->includedir);
  ------------------
  |  |  132|      2|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  142|      2|    if (conf->data == NULL)
  ------------------
  |  Branch (142:9): [True: 2, False: 0]
  ------------------
  143|      2|        return;
  144|       |
  145|       |    /* evil thing to make sure the 'OPENSSL_free()' works as expected */
  146|      0|    lh_CONF_VALUE_set_down_load(conf->data, 0);
  ------------------
  |  |   86|      0|#define lh_CONF_VALUE_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_CONF_VALUE_lh_type(lh), dl)
  ------------------
  147|      0|    lh_CONF_VALUE_doall_LH_CONF_VALUE(conf->data, value_free_hash, conf->data);
  148|       |
  149|       |    /*
  150|       |     * We now have only 'section' entries in the hash table. Due to problems
  151|       |     * with
  152|       |     */
  153|       |
  154|      0|    lh_CONF_VALUE_doall(conf->data, value_free_stack_doall);
  ------------------
  |  |   87|      0|#define lh_CONF_VALUE_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_CONF_VALUE_lh_doallfunc_type(dfn))
  ------------------
  155|      0|    lh_CONF_VALUE_free(conf->data);
  ------------------
  |  |   75|      0|#define lh_CONF_VALUE_free(lh) OPENSSL_LH_free(ossl_check_CONF_VALUE_lh_type(lh))
  ------------------
  156|      0|}

NCONF_default:
   87|      2|{
   88|      2|    return &default_method;
   89|      2|}
conf_def.c:def_create:
  112|      2|{
  113|      2|    CONF *ret;
  114|       |
  115|      2|    ret = OPENSSL_malloc(sizeof(*ret));
  ------------------
  |  |  107|      2|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  116|      2|    if (ret != NULL)
  ------------------
  |  Branch (116:9): [True: 2, False: 0]
  ------------------
  117|      2|        if (meth->init(ret) == 0) {
  ------------------
  |  Branch (117:13): [True: 0, False: 2]
  ------------------
  118|      0|            OPENSSL_free(ret);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  119|       |            ret = NULL;
  120|      0|        }
  121|      2|    return ret;
  122|      2|}
conf_def.c:def_init_default:
  125|      2|{
  126|      2|    if (conf == NULL)
  ------------------
  |  Branch (126:9): [True: 0, False: 2]
  ------------------
  127|      0|        return 0;
  128|       |
  129|      2|    memset(conf, 0, sizeof(*conf));
  130|      2|    conf->meth = &default_method;
  131|      2|    conf->meth_data = (void *)CONF_type_default;
  132|       |
  133|      2|    return 1;
  134|      2|}
conf_def.c:def_destroy:
  151|      2|{
  152|      2|    if (def_destroy_data(conf)) {
  ------------------
  |  Branch (152:9): [True: 2, False: 0]
  ------------------
  153|      2|        OPENSSL_free(conf);
  ------------------
  |  |  132|      2|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  154|      2|        return 1;
  155|      2|    }
  156|      0|    return 0;
  157|      2|}
conf_def.c:def_destroy_data:
  160|      2|{
  161|      2|    if (conf == NULL)
  ------------------
  |  Branch (161:9): [True: 0, False: 2]
  ------------------
  162|      0|        return 0;
  163|      2|    _CONF_free_data(conf);
  164|      2|    return 1;
  165|      2|}
conf_def.c:def_load:
  168|      2|{
  169|      2|    int ret;
  170|      2|    BIO *in = NULL;
  171|       |
  172|       |#ifdef OPENSSL_SYS_VMS
  173|       |    in = BIO_new_file(name, "r");
  174|       |#else
  175|      2|    in = BIO_new_file(name, "rb");
  176|      2|#endif
  177|      2|    if (in == NULL) {
  ------------------
  |  Branch (177:9): [True: 2, False: 0]
  ------------------
  178|      2|        if (ERR_GET_REASON(ERR_peek_last_error()) == BIO_R_NO_SUCH_FILE)
  ------------------
  |  |   46|      2|#define BIO_R_NO_SUCH_FILE 128
  ------------------
  |  Branch (178:13): [True: 2, False: 0]
  ------------------
  179|      2|            ERR_raise(ERR_LIB_CONF, CONF_R_NO_SUCH_FILE);
  ------------------
  |  |  357|      2|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      2|    (ERR_new(),                                                  \
  |  |  |  |  360|      2|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      2|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      2|        ERR_set_error)
  |  |  ------------------
  ------------------
  180|      0|        else
  181|      2|            ERR_raise(ERR_LIB_CONF, ERR_R_SYS_LIB);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  182|      2|        return 0;
  183|      2|    }
  184|       |
  185|      0|    ret = def_load_bio(conf, in, line);
  186|      0|    BIO_free(in);
  187|       |
  188|      0|    return ret;
  189|      2|}

ossl_err_load_CONF_strings:
   68|      2|{
   69|      2|#ifndef OPENSSL_NO_ERR
   70|      2|    if (ERR_reason_error_string(CONF_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (70:9): [True: 2, False: 0]
  ------------------
   71|      2|        ERR_load_strings_const(CONF_str_reasons);
   72|      2|#endif
   73|      2|    return 1;
   74|      2|}

NCONF_new_ex:
  183|      2|{
  184|      2|    CONF *ret;
  185|       |
  186|      2|    if (meth == NULL)
  ------------------
  |  Branch (186:9): [True: 2, False: 0]
  ------------------
  187|      2|        meth = NCONF_default();
  188|       |
  189|      2|    ret = meth->create(meth);
  190|      2|    if (ret == NULL) {
  ------------------
  |  Branch (190:9): [True: 0, False: 2]
  ------------------
  191|      0|        ERR_raise(ERR_LIB_CONF, ERR_R_CONF_LIB);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  192|      0|        return NULL;
  193|      0|    }
  194|      2|    ret->libctx = libctx;
  195|       |
  196|      2|    return ret;
  197|      2|}
NCONF_free:
  205|      2|{
  206|      2|    if (conf == NULL)
  ------------------
  |  Branch (206:9): [True: 0, False: 2]
  ------------------
  207|      0|        return;
  208|      2|    conf->meth->destroy(conf);
  209|      2|}
NCONF_load:
  252|      2|{
  253|      2|    if (conf == NULL) {
  ------------------
  |  Branch (253:9): [True: 0, False: 2]
  ------------------
  254|      0|        ERR_raise(ERR_LIB_CONF, CONF_R_NO_CONF);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  255|      0|        return 0;
  256|      0|    }
  257|       |
  258|      2|    return conf->meth->load(conf, file, eline);
  259|      2|}

CONF_modules_load_file_ex:
  156|      2|{
  157|      2|    char *file = NULL;
  158|      2|    CONF *conf = NULL;
  159|      2|    int ret = 0, diagnostics = OSSL_LIB_CTX_get_conf_diagnostics(libctx);
  160|       |
  161|      2|    ERR_set_mark();
  162|       |
  163|      2|    if (filename == NULL) {
  ------------------
  |  Branch (163:9): [True: 2, False: 0]
  ------------------
  164|      2|        file = CONF_get1_default_config_file();
  165|      2|        if (file == NULL)
  ------------------
  |  Branch (165:13): [True: 0, False: 2]
  ------------------
  166|      0|            goto err;
  167|      2|        if (*file == '\0') {
  ------------------
  |  Branch (167:13): [True: 0, False: 2]
  ------------------
  168|       |            /* Do not try to load an empty file name but do not error out */
  169|      0|            ret = 1;
  170|      0|            goto err;
  171|      0|        }
  172|      2|    } else {
  173|      0|        file = (char *)filename;
  174|      0|    }
  175|       |
  176|      2|    conf = NCONF_new_ex(libctx, NULL);
  177|      2|    if (conf == NULL)
  ------------------
  |  Branch (177:9): [True: 0, False: 2]
  ------------------
  178|      0|        goto err;
  179|       |
  180|      2|    if (NCONF_load(conf, file, NULL) <= 0) {
  ------------------
  |  Branch (180:9): [True: 2, False: 0]
  ------------------
  181|      2|        if ((flags & CONF_MFLAGS_IGNORE_MISSING_FILE) && (ERR_GET_REASON(ERR_peek_last_error()) == CONF_R_NO_SUCH_FILE)) {
  ------------------
  |  |  114|      2|#define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10
  ------------------
                      if ((flags & CONF_MFLAGS_IGNORE_MISSING_FILE) && (ERR_GET_REASON(ERR_peek_last_error()) == CONF_R_NO_SUCH_FILE)) {
  ------------------
  |  |   34|      2|#define CONF_R_NO_SUCH_FILE 114
  ------------------
  |  Branch (181:13): [True: 2, False: 0]
  |  Branch (181:58): [True: 2, False: 0]
  ------------------
  182|      2|            ret = 1;
  183|      2|        }
  184|      2|        goto err;
  185|      2|    }
  186|       |
  187|      0|    ret = CONF_modules_load(conf, appname, flags);
  188|       |    /* CONF_modules_load() might change the diagnostics setting, reread it. */
  189|      0|    diagnostics = OSSL_LIB_CTX_get_conf_diagnostics(libctx);
  190|       |
  191|      2|err:
  192|      2|    if (filename == NULL)
  ------------------
  |  Branch (192:9): [True: 2, False: 0]
  ------------------
  193|      2|        OPENSSL_free(file);
  ------------------
  |  |  132|      2|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  194|      2|    NCONF_free(conf);
  195|       |
  196|      2|    if ((flags & CONF_MFLAGS_IGNORE_RETURN_CODES) != 0 && !diagnostics)
  ------------------
  |  |  111|      2|#define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2
  ------------------
  |  Branch (196:9): [True: 2, False: 0]
  |  Branch (196:59): [True: 2, False: 0]
  ------------------
  197|      2|        ret = 1;
  198|       |
  199|      2|    if (ret > 0)
  ------------------
  |  Branch (199:9): [True: 2, False: 0]
  ------------------
  200|      2|        ERR_pop_to_mark();
  201|      0|    else
  202|      0|        ERR_clear_last_mark();
  203|       |
  204|      2|    return ret;
  205|      0|}
CONF_get1_default_config_file:
  646|      2|{
  647|      2|    const char *t;
  648|      2|    char *file, *sep = "";
  649|      2|    size_t size;
  650|       |
  651|      2|    if ((file = ossl_safe_getenv("OPENSSL_CONF")) != NULL)
  ------------------
  |  Branch (651:9): [True: 0, False: 2]
  ------------------
  652|      0|        return OPENSSL_strdup(file);
  ------------------
  |  |  136|      0|    CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  653|       |
  654|      2|    t = X509_get_default_cert_area();
  655|       |    /*
  656|       |     * On windows systems with -DOSSL_WINCTX set, if the needed registry
  657|       |     * keys are not yet set, openssl applets will return, due to an inability
  658|       |     * to locate various directories, like the default cert area.  In that
  659|       |     * event, clone an empty string here, so that commands like openssl version
  660|       |     * continue to operate properly without needing to set OPENSSL_CONF.
  661|       |     * Applets like cms will fail gracefully later when they try to parse an
  662|       |     * empty config file
  663|       |     */
  664|      2|    if (t == NULL)
  ------------------
  |  Branch (664:9): [True: 0, False: 2]
  ------------------
  665|      0|        return OPENSSL_strdup("");
  ------------------
  |  |  136|      0|    CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  666|       |
  667|      2|#ifndef OPENSSL_SYS_VMS
  668|      2|    sep = "/";
  669|      2|#endif
  670|      2|    size = strlen(t) + strlen(sep) + strlen(OPENSSL_CONF) + 1;
  ------------------
  |  |   80|      2|#define OPENSSL_CONF "openssl.cnf"
  ------------------
  671|      2|    file = OPENSSL_malloc(size);
  ------------------
  |  |  107|      2|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  672|       |
  673|      2|    if (file == NULL)
  ------------------
  |  Branch (673:9): [True: 0, False: 2]
  ------------------
  674|      0|        return NULL;
  675|      2|    BIO_snprintf(file, size, "%s%s%s", t, sep, OPENSSL_CONF);
  ------------------
  |  |   80|      2|#define OPENSSL_CONF "openssl.cnf"
  ------------------
  676|       |
  677|      2|    return file;
  678|      2|}

ossl_config_int:
   46|      2|{
   47|      2|    int ret = 0;
   48|      2|#if defined(OPENSSL_INIT_DEBUG) || !defined(OPENSSL_SYS_UEFI)
   49|      2|    const char *filename;
   50|      2|    const char *appname;
   51|      2|    unsigned long flags;
   52|      2|#endif
   53|       |
   54|      2|    if (openssl_configured)
  ------------------
  |  Branch (54:9): [True: 0, False: 2]
  ------------------
   55|      0|        return 1;
   56|       |
   57|      2|#if defined(OPENSSL_INIT_DEBUG) || !defined(OPENSSL_SYS_UEFI)
   58|      2|    filename = settings ? settings->filename : NULL;
  ------------------
  |  Branch (58:16): [True: 0, False: 2]
  ------------------
   59|      2|    appname = settings ? settings->appname : NULL;
  ------------------
  |  Branch (59:15): [True: 0, False: 2]
  ------------------
   60|      2|    flags = settings ? settings->flags : DEFAULT_CONF_MFLAGS;
  ------------------
  |  |   20|      4|    (CONF_MFLAGS_DEFAULT_SECTION | CONF_MFLAGS_IGNORE_MISSING_FILE | CONF_MFLAGS_IGNORE_RETURN_CODES)
  |  |  ------------------
  |  |  |  |  115|      2|#define CONF_MFLAGS_DEFAULT_SECTION 0x20
  |  |  ------------------
  |  |                   (CONF_MFLAGS_DEFAULT_SECTION | CONF_MFLAGS_IGNORE_MISSING_FILE | CONF_MFLAGS_IGNORE_RETURN_CODES)
  |  |  ------------------
  |  |  |  |  114|      2|#define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10
  |  |  ------------------
  |  |                   (CONF_MFLAGS_DEFAULT_SECTION | CONF_MFLAGS_IGNORE_MISSING_FILE | CONF_MFLAGS_IGNORE_RETURN_CODES)
  |  |  ------------------
  |  |  |  |  111|      2|#define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2
  |  |  ------------------
  ------------------
  |  Branch (60:13): [True: 0, False: 2]
  ------------------
   61|      2|#endif
   62|       |
   63|       |#ifdef OPENSSL_INIT_DEBUG
   64|       |    fprintf(stderr, "OPENSSL_INIT: ossl_config_int(%s, %s, %lu)\n",
   65|       |        filename, appname, flags);
   66|       |#endif
   67|       |
   68|      2|#ifndef OPENSSL_SYS_UEFI
   69|      2|    ret = CONF_modules_load_file_ex(OSSL_LIB_CTX_get0_global_default(),
   70|      2|        filename, appname, flags);
   71|       |#else
   72|       |    ret = 1;
   73|       |#endif
   74|      2|    openssl_configured = 1;
   75|      2|    return ret;
   76|      2|}

OSSL_LIB_CTX_free:
  536|  5.07k|{
  537|  5.07k|    if (ctx == NULL || ossl_lib_ctx_is_default_nocreate(ctx))
  ------------------
  |  Branch (537:9): [True: 5.07k, False: 0]
  |  Branch (537:24): [True: 0, False: 0]
  ------------------
  538|  5.07k|        return;
  539|       |
  540|      0|#ifndef FIPS_MODULE
  541|      0|    if (ctx->ischild)
  ------------------
  |  Branch (541:9): [True: 0, False: 0]
  ------------------
  542|      0|        ossl_provider_deinit_child(ctx);
  543|      0|#endif
  544|      0|    context_deinit(ctx);
  545|      0|    OPENSSL_free(ctx);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  546|      0|}
OSSL_LIB_CTX_get0_global_default:
  550|      2|{
  551|      2|    if (!RUN_ONCE(&default_context_thread_key_init, default_context_do_thread_key_init))
  ------------------
  |  |  130|      2|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (551:9): [True: 0, False: 2]
  ------------------
  552|      0|        return NULL;
  553|       |
  554|      2|    if (!RUN_ONCE(&default_context_init, default_context_do_init))
  ------------------
  |  |  130|      2|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (554:9): [True: 0, False: 2]
  ------------------
  555|      0|        return NULL;
  556|       |
  557|      2|    return &default_context_int;
  558|      2|}
ossl_lib_ctx_get_concrete:
  584|     24|{
  585|     24|#ifndef FIPS_MODULE
  586|     24|    if (ctx == NULL)
  ------------------
  |  Branch (586:9): [True: 2, False: 22]
  ------------------
  587|      2|        return get_default_context();
  588|     22|#endif
  589|     22|    return ctx;
  590|     24|}
ossl_lib_ctx_get_data:
  620|     18|{
  621|     18|    ctx = ossl_lib_ctx_get_concrete(ctx);
  622|     18|    if (ctx == NULL)
  ------------------
  |  Branch (622:9): [True: 0, False: 18]
  ------------------
  623|      0|        return NULL;
  624|       |
  625|     18|    switch (index) {
  626|     16|    case OSSL_LIB_CTX_PROPERTY_STRING_INDEX:
  ------------------
  |  |   98|     16|#define OSSL_LIB_CTX_PROPERTY_STRING_INDEX 3
  ------------------
  |  Branch (626:5): [True: 16, False: 2]
  ------------------
  627|     16|        return ctx->property_string_data;
  628|      0|    case OSSL_LIB_CTX_EVP_METHOD_STORE_INDEX:
  ------------------
  |  |   95|      0|#define OSSL_LIB_CTX_EVP_METHOD_STORE_INDEX 0
  ------------------
  |  Branch (628:5): [True: 0, False: 18]
  ------------------
  629|      0|        return ctx->evp_method_store;
  630|      0|    case OSSL_LIB_CTX_PROVIDER_STORE_INDEX:
  ------------------
  |  |   96|      0|#define OSSL_LIB_CTX_PROVIDER_STORE_INDEX 1
  ------------------
  |  Branch (630:5): [True: 0, False: 18]
  ------------------
  631|      0|        return ctx->provider_store;
  632|      0|    case OSSL_LIB_CTX_NAMEMAP_INDEX:
  ------------------
  |  |   99|      0|#define OSSL_LIB_CTX_NAMEMAP_INDEX 4
  ------------------
  |  Branch (632:5): [True: 0, False: 18]
  ------------------
  633|      0|        return ctx->namemap;
  634|      0|    case OSSL_LIB_CTX_PROPERTY_DEFN_INDEX:
  ------------------
  |  |   97|      0|#define OSSL_LIB_CTX_PROPERTY_DEFN_INDEX 2
  ------------------
  |  Branch (634:5): [True: 0, False: 18]
  ------------------
  635|      0|        return ctx->property_defns;
  636|      0|    case OSSL_LIB_CTX_GLOBAL_PROPERTIES:
  ------------------
  |  |  111|      0|#define OSSL_LIB_CTX_GLOBAL_PROPERTIES 14
  ------------------
  |  Branch (636:5): [True: 0, False: 18]
  ------------------
  637|      0|        return ctx->global_properties;
  638|      0|    case OSSL_LIB_CTX_DRBG_INDEX:
  ------------------
  |  |  100|      0|#define OSSL_LIB_CTX_DRBG_INDEX 5
  ------------------
  |  Branch (638:5): [True: 0, False: 18]
  ------------------
  639|      0|        return ctx->drbg;
  640|      0|    case OSSL_LIB_CTX_DRBG_NONCE_INDEX:
  ------------------
  |  |  101|      0|#define OSSL_LIB_CTX_DRBG_NONCE_INDEX 6
  ------------------
  |  Branch (640:5): [True: 0, False: 18]
  ------------------
  641|      0|        return ctx->drbg_nonce;
  642|      0|#ifndef FIPS_MODULE
  643|      0|    case OSSL_LIB_CTX_PROVIDER_CONF_INDEX:
  ------------------
  |  |  113|      0|#define OSSL_LIB_CTX_PROVIDER_CONF_INDEX 16
  ------------------
  |  Branch (643:5): [True: 0, False: 18]
  ------------------
  644|      0|        return ctx->provider_conf;
  645|      0|    case OSSL_LIB_CTX_BIO_CORE_INDEX:
  ------------------
  |  |  114|      0|#define OSSL_LIB_CTX_BIO_CORE_INDEX 17
  ------------------
  |  Branch (645:5): [True: 0, False: 18]
  ------------------
  646|      0|        return ctx->bio_core;
  647|      0|    case OSSL_LIB_CTX_CHILD_PROVIDER_INDEX:
  ------------------
  |  |  115|      0|#define OSSL_LIB_CTX_CHILD_PROVIDER_INDEX 18
  ------------------
  |  Branch (647:5): [True: 0, False: 18]
  ------------------
  648|      0|        return ctx->child_provider;
  649|      0|    case OSSL_LIB_CTX_DECODER_STORE_INDEX:
  ------------------
  |  |  108|      0|#define OSSL_LIB_CTX_DECODER_STORE_INDEX 11
  ------------------
  |  Branch (649:5): [True: 0, False: 18]
  ------------------
  650|      0|        return ctx->decoder_store;
  651|      0|    case OSSL_LIB_CTX_DECODER_CACHE_INDEX:
  ------------------
  |  |  117|      0|#define OSSL_LIB_CTX_DECODER_CACHE_INDEX 20
  ------------------
  |  Branch (651:5): [True: 0, False: 18]
  ------------------
  652|      0|        return ctx->decoder_cache;
  653|      0|    case OSSL_LIB_CTX_ENCODER_STORE_INDEX:
  ------------------
  |  |  107|      0|#define OSSL_LIB_CTX_ENCODER_STORE_INDEX 10
  ------------------
  |  Branch (653:5): [True: 0, False: 18]
  ------------------
  654|      0|        return ctx->encoder_store;
  655|      0|    case OSSL_LIB_CTX_STORE_LOADER_STORE_INDEX:
  ------------------
  |  |  112|      0|#define OSSL_LIB_CTX_STORE_LOADER_STORE_INDEX 15
  ------------------
  |  Branch (655:5): [True: 0, False: 18]
  ------------------
  656|      0|        return ctx->store_loader_store;
  657|      0|    case OSSL_LIB_CTX_SELF_TEST_CB_INDEX:
  ------------------
  |  |  109|      0|#define OSSL_LIB_CTX_SELF_TEST_CB_INDEX 12
  ------------------
  |  Branch (657:5): [True: 0, False: 18]
  ------------------
  658|      0|        return ctx->self_test_cb;
  659|      0|    case OSSL_LIB_CTX_INDICATOR_CB_INDEX:
  ------------------
  |  |  119|      0|#define OSSL_LIB_CTX_INDICATOR_CB_INDEX 22
  ------------------
  |  Branch (659:5): [True: 0, False: 18]
  ------------------
  660|      0|        return ctx->indicator_cb;
  661|      0|#endif
  662|      0|#ifndef OPENSSL_NO_THREAD_POOL
  663|      0|    case OSSL_LIB_CTX_THREAD_INDEX:
  ------------------
  |  |  116|      0|#define OSSL_LIB_CTX_THREAD_INDEX 19
  ------------------
  |  Branch (663:5): [True: 0, False: 18]
  ------------------
  664|      0|        return ctx->threads;
  665|      0|#endif
  666|       |
  667|       |#ifdef FIPS_MODULE
  668|       |    case OSSL_LIB_CTX_FIPS_PROV_INDEX:
  669|       |        return ctx->fips_prov;
  670|       |#endif
  671|       |
  672|      2|    case OSSL_LIB_CTX_COMP_METHODS:
  ------------------
  |  |  118|      2|#define OSSL_LIB_CTX_COMP_METHODS 21
  ------------------
  |  Branch (672:5): [True: 2, False: 16]
  ------------------
  673|      2|        return (void *)&ctx->comp_methods;
  674|       |
  675|      0|    case OSSL_LIB_CTX_SSL_CONF_IMODULE:
  ------------------
  |  |  120|      0|#define OSSL_LIB_CTX_SSL_CONF_IMODULE 23
  ------------------
  |  Branch (675:5): [True: 0, False: 18]
  ------------------
  676|      0|        return (void *)ctx->ssl_imod;
  677|       |
  678|      0|    default:
  ------------------
  |  Branch (678:5): [True: 0, False: 18]
  ------------------
  679|       |        return NULL;
  680|     18|    }
  681|     18|}
OSSL_LIB_CTX_get_data:
  684|      2|{
  685|      2|    return ossl_lib_ctx_get_data(ctx, index);
  686|      2|}
ossl_lib_ctx_get_ex_data_global:
  689|      2|{
  690|      2|    ctx = ossl_lib_ctx_get_concrete(ctx);
  691|      2|    if (ctx == NULL)
  ------------------
  |  Branch (691:9): [True: 0, False: 2]
  ------------------
  692|      0|        return NULL;
  693|      2|    return &ctx->global;
  694|      2|}
OSSL_LIB_CTX_get_conf_diagnostics:
  710|      2|{
  711|      2|    libctx = ossl_lib_ctx_get_concrete(libctx);
  712|      2|    if (libctx == NULL)
  ------------------
  |  Branch (712:9): [True: 0, False: 2]
  ------------------
  713|      0|        return 0;
  714|      2|    return libctx->conf_diagnostics;
  715|      2|}
context.c:context_init:
  119|      2|{
  120|      2|    int exdata_done = 0;
  121|       |
  122|      2|    ctx->lock = CRYPTO_THREAD_lock_new();
  123|      2|    if (ctx->lock == NULL)
  ------------------
  |  Branch (123:9): [True: 0, False: 2]
  ------------------
  124|      0|        goto err;
  125|       |
  126|       |    /* Initialize ex_data. */
  127|      2|    if (!ossl_do_ex_data_init(ctx))
  ------------------
  |  Branch (127:9): [True: 0, False: 2]
  ------------------
  128|      0|        goto err;
  129|      2|    exdata_done = 1;
  130|       |
  131|       |    /* P2. We want evp_method_store to be cleaned up before the provider store */
  132|      2|    ctx->evp_method_store = ossl_method_store_new(ctx);
  133|      2|    if (ctx->evp_method_store == NULL)
  ------------------
  |  Branch (133:9): [True: 0, False: 2]
  ------------------
  134|      0|        goto err;
  135|      2|    OSSL_TRACE1(QUERY, "context_init: allocating store %p\n", ctx->evp_method_store);
  ------------------
  |  |  291|      2|    OSSL_TRACEV(category, (trc_out, format, arg1))
  |  |  ------------------
  |  |  |  |  283|      2|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
  136|       |
  137|      2|#ifndef FIPS_MODULE
  138|       |    /* P2. Must be freed before the provider store is freed */
  139|      2|    ctx->provider_conf = ossl_prov_conf_ctx_new(ctx);
  140|      2|    if (ctx->provider_conf == NULL)
  ------------------
  |  Branch (140:9): [True: 0, False: 2]
  ------------------
  141|      0|        goto err;
  142|      2|#endif
  143|       |
  144|       |    /* P2. */
  145|      2|    ctx->drbg = ossl_rand_ctx_new(ctx);
  146|      2|    if (ctx->drbg == NULL)
  ------------------
  |  Branch (146:9): [True: 0, False: 2]
  ------------------
  147|      0|        goto err;
  148|       |
  149|      2|#ifndef FIPS_MODULE
  150|       |    /*
  151|       |     * P2. We want decoder_store/decoder_cache to be cleaned up before the
  152|       |     * provider store
  153|       |     */
  154|      2|    ctx->decoder_store = ossl_method_store_new(ctx);
  155|      2|    if (ctx->decoder_store == NULL)
  ------------------
  |  Branch (155:9): [True: 0, False: 2]
  ------------------
  156|      0|        goto err;
  157|      2|    ctx->decoder_cache = ossl_decoder_cache_new(ctx);
  158|      2|    if (ctx->decoder_cache == NULL)
  ------------------
  |  Branch (158:9): [True: 0, False: 2]
  ------------------
  159|      0|        goto err;
  160|       |
  161|       |    /* P2. We want encoder_store to be cleaned up before the provider store */
  162|      2|    ctx->encoder_store = ossl_method_store_new(ctx);
  163|      2|    if (ctx->encoder_store == NULL)
  ------------------
  |  Branch (163:9): [True: 0, False: 2]
  ------------------
  164|      0|        goto err;
  165|       |
  166|       |    /* P2. We want loader_store to be cleaned up before the provider store */
  167|      2|    ctx->store_loader_store = ossl_method_store_new(ctx);
  168|      2|    if (ctx->store_loader_store == NULL)
  ------------------
  |  Branch (168:9): [True: 0, False: 2]
  ------------------
  169|      0|        goto err;
  170|      2|#endif
  171|       |
  172|       |    /* P1. Needs to be freed before the child provider data is freed */
  173|      2|    ctx->provider_store = ossl_provider_store_new(ctx);
  174|      2|    if (ctx->provider_store == NULL)
  ------------------
  |  Branch (174:9): [True: 0, False: 2]
  ------------------
  175|      0|        goto err;
  176|       |
  177|       |    /* Default priority. */
  178|      2|    ctx->property_string_data = ossl_property_string_data_new(ctx);
  179|      2|    if (ctx->property_string_data == NULL)
  ------------------
  |  Branch (179:9): [True: 0, False: 2]
  ------------------
  180|      0|        goto err;
  181|       |
  182|      2|    ctx->namemap = ossl_stored_namemap_new(ctx);
  183|      2|    if (ctx->namemap == NULL)
  ------------------
  |  Branch (183:9): [True: 0, False: 2]
  ------------------
  184|      0|        goto err;
  185|       |
  186|      2|    ctx->property_defns = ossl_property_defns_new(ctx);
  187|      2|    if (ctx->property_defns == NULL)
  ------------------
  |  Branch (187:9): [True: 0, False: 2]
  ------------------
  188|      0|        goto err;
  189|       |
  190|      2|    ctx->global_properties = ossl_ctx_global_properties_new(ctx);
  191|      2|    if (ctx->global_properties == NULL)
  ------------------
  |  Branch (191:9): [True: 0, False: 2]
  ------------------
  192|      0|        goto err;
  193|       |
  194|      2|#ifndef FIPS_MODULE
  195|      2|    ctx->bio_core = ossl_bio_core_globals_new(ctx);
  196|      2|    if (ctx->bio_core == NULL)
  ------------------
  |  Branch (196:9): [True: 0, False: 2]
  ------------------
  197|      0|        goto err;
  198|      2|#endif
  199|       |
  200|      2|    ctx->drbg_nonce = ossl_prov_drbg_nonce_ctx_new(ctx);
  201|      2|    if (ctx->drbg_nonce == NULL)
  ------------------
  |  Branch (201:9): [True: 0, False: 2]
  ------------------
  202|      0|        goto err;
  203|       |
  204|      2|#ifndef FIPS_MODULE
  205|      2|    ctx->self_test_cb = ossl_self_test_set_callback_new(ctx);
  206|      2|    if (ctx->self_test_cb == NULL)
  ------------------
  |  Branch (206:9): [True: 0, False: 2]
  ------------------
  207|      0|        goto err;
  208|      2|    ctx->indicator_cb = ossl_indicator_set_callback_new(ctx);
  209|      2|    if (ctx->indicator_cb == NULL)
  ------------------
  |  Branch (209:9): [True: 0, False: 2]
  ------------------
  210|      0|        goto err;
  211|      2|#endif
  212|       |
  213|       |#ifdef FIPS_MODULE
  214|       |    if (!ossl_thread_event_ctx_new(ctx))
  215|       |        goto err;
  216|       |
  217|       |    ctx->fips_prov = ossl_fips_prov_ossl_ctx_new(ctx);
  218|       |    if (ctx->fips_prov == NULL)
  219|       |        goto err;
  220|       |#endif
  221|       |
  222|      2|#ifndef OPENSSL_NO_THREAD_POOL
  223|      2|    ctx->threads = ossl_threads_ctx_new(ctx);
  224|      2|    if (ctx->threads == NULL)
  ------------------
  |  Branch (224:9): [True: 0, False: 2]
  ------------------
  225|      0|        goto err;
  226|      2|#endif
  227|       |
  228|       |    /* Low priority. */
  229|      2|#ifndef FIPS_MODULE
  230|      2|    ctx->child_provider = ossl_child_prov_ctx_new(ctx);
  231|      2|    if (ctx->child_provider == NULL)
  ------------------
  |  Branch (231:9): [True: 0, False: 2]
  ------------------
  232|      0|        goto err;
  233|      2|#endif
  234|       |
  235|       |    /* Everything depends on properties, so we also pre-initialise that */
  236|      2|    if (!ossl_property_parse_init(ctx))
  ------------------
  |  Branch (236:9): [True: 0, False: 2]
  ------------------
  237|      0|        goto err;
  238|       |
  239|      2|#ifndef FIPS_MODULE
  240|      2|    ctx->comp_methods = ossl_load_builtin_compressions();
  241|      2|#endif
  242|       |
  243|      2|    return 1;
  244|       |
  245|      0|err:
  246|      0|    context_deinit_objs(ctx);
  247|       |
  248|      0|    if (exdata_done)
  ------------------
  |  Branch (248:9): [True: 0, False: 0]
  ------------------
  249|      0|        ossl_crypto_cleanup_all_ex_data_int(ctx);
  250|       |
  251|      0|    CRYPTO_THREAD_lock_free(ctx->lock);
  252|      0|    memset(ctx, '\0', sizeof(*ctx));
  253|      0|    return 0;
  254|      2|}
context.c:default_context_do_thread_key_init:
  414|      2|{
  415|      2|    if (!CRYPTO_THREAD_init_local(&default_context_thread_local, NULL))
  ------------------
  |  Branch (415:9): [True: 0, False: 2]
  ------------------
  416|      0|        return 0;
  417|      2|    return 1;
  418|      2|}
context.c:default_context_do_init:
  421|      2|{
  422|      2|    if (!context_init(&default_context_int))
  ------------------
  |  Branch (422:9): [True: 0, False: 2]
  ------------------
  423|      0|        return 0;
  424|       |
  425|      2|    default_context_inited = 1;
  426|      2|    return 1;
  427|      2|}
context.c:get_default_context:
  458|      2|{
  459|      2|    OSSL_LIB_CTX *current_defctx = get_thread_default_context();
  460|       |
  461|      2|    if (current_defctx == NULL && default_context_inited)
  ------------------
  |  Branch (461:9): [True: 2, False: 0]
  |  Branch (461:35): [True: 2, False: 0]
  ------------------
  462|      2|        current_defctx = &default_context_int;
  463|      2|    return current_defctx;
  464|      2|}
context.c:get_thread_default_context:
  439|      2|{
  440|      2|    if (!RUN_ONCE(&default_context_thread_key_init, default_context_do_thread_key_init))
  ------------------
  |  |  130|      2|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (440:9): [True: 0, False: 2]
  ------------------
  441|      0|        return NULL;
  442|       |
  443|      2|    if (!RUN_ONCE(&default_context_init, default_context_do_init))
  ------------------
  |  |  130|      2|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (443:9): [True: 0, False: 2]
  ------------------
  444|      0|        return NULL;
  445|       |
  446|      2|    return CRYPTO_THREAD_get_local(&default_context_thread_local);
  447|      2|}

ossl_stored_namemap_new:
   58|      2|{
   59|      2|    OSSL_NAMEMAP *namemap = ossl_namemap_new(libctx);
   60|       |
   61|      2|    if (namemap != NULL)
  ------------------
  |  Branch (61:9): [True: 2, False: 0]
  ------------------
   62|      2|        namemap->stored = 1;
   63|       |
   64|      2|    return namemap;
   65|      2|}
ossl_namemap_new:
  548|      2|{
  549|      2|    OSSL_NAMEMAP *namemap;
  550|      2|    HT_CONFIG htconf = { NULL, NULL, NULL, NAMEMAP_HT_BUCKETS, 1, 1, 0 };
  ------------------
  |  |   17|      2|#define NAMEMAP_HT_BUCKETS 512
  ------------------
  551|       |
  552|      2|    htconf.ctx = libctx;
  553|       |
  554|      2|    if ((namemap = OPENSSL_zalloc(sizeof(*namemap))) == NULL)
  ------------------
  |  |  109|      2|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (554:9): [True: 0, False: 2]
  ------------------
  555|      0|        goto err;
  556|       |
  557|      2|    if ((namemap->lock = CRYPTO_THREAD_lock_new()) == NULL)
  ------------------
  |  Branch (557:9): [True: 0, False: 2]
  ------------------
  558|      0|        goto err;
  559|       |
  560|      2|    if ((namemap->namenum_ht = ossl_ht_new(&htconf)) == NULL)
  ------------------
  |  Branch (560:9): [True: 0, False: 2]
  ------------------
  561|      0|        goto err;
  562|       |
  563|      2|    if ((namemap->numnames = sk_NAMES_new_null()) == NULL)
  ------------------
  |  Branch (563:9): [True: 0, False: 2]
  ------------------
  564|      0|        goto err;
  565|       |
  566|      2|    return namemap;
  567|       |
  568|      0|err:
  569|      0|    ossl_namemap_free(namemap);
  570|       |    return NULL;
  571|      2|}

ossl_err_load_CRYPTO_strings:
   83|      2|{
   84|      2|#ifndef OPENSSL_NO_ERR
   85|      2|    if (ERR_reason_error_string(CRYPTO_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (85:9): [True: 2, False: 0]
  ------------------
   86|      2|        ERR_load_strings_const(CRYPTO_str_reasons);
   87|      2|#endif
   88|      2|    return 1;
   89|      2|}

OPENSSL_cpuid_setup:
   95|      4|{
   96|      4|    static int trigger = 0;
   97|      4|    IA32CAP OPENSSL_ia32_cpuid(unsigned int *);
   98|      4|    IA32CAP vec;
   99|      4|    const variant_char *env;
  100|      4|    int index = 2;
  101|       |
  102|      4|    if (trigger)
  ------------------
  |  Branch (102:9): [True: 2, False: 2]
  ------------------
  103|      2|        return;
  104|       |
  105|      2|    trigger = 1;
  106|      2|    if ((env = ossl_getenv("OPENSSL_ia32cap")) != NULL) {
  ------------------
  |  |   45|      2|#define ossl_getenv getenv
  ------------------
  |  Branch (106:9): [True: 0, False: 2]
  ------------------
  107|      0|        int off = (env[0] == '~') ? 1 : 0;
  ------------------
  |  Branch (107:19): [True: 0, False: 0]
  ------------------
  108|       |
  109|      0|        vec = ossl_strtouint64(env + off);
  110|       |
  111|      0|        if (off) {
  ------------------
  |  Branch (111:13): [True: 0, False: 0]
  ------------------
  112|      0|            IA32CAP mask = vec;
  113|      0|            vec = OPENSSL_ia32_cpuid(OPENSSL_ia32cap_P) & ~mask;
  114|      0|            if (mask & (1 << 24)) {
  ------------------
  |  Branch (114:17): [True: 0, False: 0]
  ------------------
  115|       |                /*
  116|       |                 * User disables FXSR bit, mask even other capabilities
  117|       |                 * that operate exclusively on XMM, so we don't have to
  118|       |                 * double-check all the time. We mask PCLMULQDQ, AMD XOP,
  119|       |                 * AES-NI and AVX. Formally speaking we don't have to
  120|       |                 * do it in x86_64 case, but we can safely assume that
  121|       |                 * x86_64 users won't actually flip this flag.
  122|       |                 */
  123|      0|                vec &= ~((IA32CAP)(1 << 1 | 1 << 11 | 1 << 25 | 1 << 28) << 32);
  124|      0|            }
  125|      0|        } else if (env[0] == ':') {
  ------------------
  |  Branch (125:20): [True: 0, False: 0]
  ------------------
  126|      0|            vec = OPENSSL_ia32_cpuid(OPENSSL_ia32cap_P);
  127|      0|        }
  128|       |
  129|       |        /* Processed indexes 0, 1 */
  130|      0|        if ((env = ossl_strchr(env, ':')) != NULL)
  ------------------
  |  Branch (130:13): [True: 0, False: 0]
  ------------------
  131|      0|            env++;
  132|      0|        for (; index < OPENSSL_IA32CAP_P_MAX_INDEXES; index += 2) {
  ------------------
  |  |   37|      0|#define OPENSSL_IA32CAP_P_MAX_INDEXES 10
  ------------------
  |  Branch (132:16): [True: 0, False: 0]
  ------------------
  133|      0|            if ((env != NULL) && (env[0] != '\0')) {
  ------------------
  |  Branch (133:17): [True: 0, False: 0]
  |  Branch (133:34): [True: 0, False: 0]
  ------------------
  134|       |                /* if env[0] == ':' current index is skipped */
  135|      0|                if (env[0] != ':') {
  ------------------
  |  Branch (135:21): [True: 0, False: 0]
  ------------------
  136|      0|                    IA32CAP vecx;
  137|       |
  138|      0|                    off = (env[0] == '~') ? 1 : 0;
  ------------------
  |  Branch (138:27): [True: 0, False: 0]
  ------------------
  139|      0|                    vecx = ossl_strtouint64(env + off);
  140|      0|                    if (off) {
  ------------------
  |  Branch (140:25): [True: 0, False: 0]
  ------------------
  141|      0|                        OPENSSL_ia32cap_P[index] &= ~(unsigned int)vecx;
  142|      0|                        OPENSSL_ia32cap_P[index + 1] &= ~(unsigned int)(vecx >> 32);
  143|      0|                    } else {
  144|      0|                        OPENSSL_ia32cap_P[index] = (unsigned int)vecx;
  145|      0|                        OPENSSL_ia32cap_P[index + 1] = (unsigned int)(vecx >> 32);
  146|      0|                    }
  147|      0|                }
  148|       |                /* skip delimiter */
  149|      0|                if ((env = ossl_strchr(env, ':')) != NULL)
  ------------------
  |  Branch (149:21): [True: 0, False: 0]
  ------------------
  150|      0|                    env++;
  151|      0|            } else { /* zeroize the next two indexes */
  152|      0|                OPENSSL_ia32cap_P[index] = 0;
  153|      0|                OPENSSL_ia32cap_P[index + 1] = 0;
  154|      0|            }
  155|      0|        }
  156|       |
  157|       |        /* If AVX10 is disabled, zero out its detailed cap bits */
  158|      0|        if (!(OPENSSL_ia32cap_P[6] & (1 << 19)))
  ------------------
  |  Branch (158:13): [True: 0, False: 0]
  ------------------
  159|      0|            OPENSSL_ia32cap_P[9] = 0;
  160|      2|    } else {
  161|      2|        vec = OPENSSL_ia32_cpuid(OPENSSL_ia32cap_P);
  162|      2|    }
  163|       |
  164|       |    /*
  165|       |     * |(1<<10) sets a reserved bit to signal that variable
  166|       |     * was initialized already... This is to avoid interference
  167|       |     * with cpuid snippets in ELF .init segment.
  168|       |     */
  169|      2|    OPENSSL_ia32cap_P[0] = (unsigned int)vec | (1 << 10);
  170|      2|    OPENSSL_ia32cap_P[1] = (unsigned int)(vec >> 32);
  171|      2|}

ossl_err_load_CRMF_strings:
   80|      2|{
   81|      2|#ifndef OPENSSL_NO_ERR
   82|      2|    if (ERR_reason_error_string(CRMF_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (82:9): [True: 2, False: 0]
  ------------------
   83|      2|        ERR_load_strings_const(CRMF_str_reasons);
   84|      2|#endif
   85|      2|    return 1;
   86|      2|}

ossl_err_load_CT_strings:
   52|      2|{
   53|      2|#ifndef OPENSSL_NO_ERR
   54|      2|    if (ERR_reason_error_string(CT_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (54:9): [True: 2, False: 0]
  ------------------
   55|      2|        ERR_load_strings_const(CT_str_reasons);
   56|      2|#endif
   57|      2|    return 1;
   58|      2|}

ossl_tolower:
  297|  8.35k|{
  298|  8.35k|    int a = ossl_toascii(c);
  ------------------
  |  |   56|  8.35k|#define ossl_toascii(c) (c)
  ------------------
  299|       |
  300|  8.35k|    return ASCII_IS_UPPER(a) ? c ^ case_change : c;
  ------------------
  |  |  266|  8.35k|#define ASCII_IS_UPPER(c) (c >= 0x41 && c <= 0x5A)
  |  |  ------------------
  |  |  |  Branch (266:28): [True: 4.91k, False: 3.44k]
  |  |  |  Branch (266:41): [True: 2.26k, False: 2.65k]
  |  |  ------------------
  ------------------
  301|  8.35k|}

ossl_err_load_DH_strings:
   68|      2|{
   69|      2|#ifndef OPENSSL_NO_ERR
   70|      2|    if (ERR_reason_error_string(DH_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (70:9): [True: 2, False: 0]
  ------------------
   71|      2|        ERR_load_strings_const(DH_str_reasons);
   72|      2|#endif
   73|      2|    return 1;
   74|      2|}

ossl_err_load_DSA_strings:
   46|      2|{
   47|      2|#ifndef OPENSSL_NO_ERR
   48|      2|    if (ERR_reason_error_string(DSA_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (48:9): [True: 2, False: 0]
  ------------------
   49|      2|        ERR_load_strings_const(DSA_str_reasons);
   50|      2|#endif
   51|      2|    return 1;
   52|      2|}

ossl_err_load_DSO_strings:
   50|      2|{
   51|      2|#ifndef OPENSSL_NO_ERR
   52|      2|    if (ERR_reason_error_string(DSO_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (52:9): [True: 2, False: 0]
  ------------------
   53|      2|        ERR_load_strings_const(DSO_str_reasons);
   54|      2|#endif
   55|      2|    return 1;
   56|      2|}

ossl_err_load_EC_strings:
  127|      2|{
  128|      2|#ifndef OPENSSL_NO_ERR
  129|      2|    if (ERR_reason_error_string(EC_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (129:9): [True: 2, False: 0]
  ------------------
  130|      2|        ERR_load_strings_const(EC_str_reasons);
  131|      2|#endif
  132|      2|    return 1;
  133|      2|}

ossl_decoder_cache_new:
  774|      2|{
  775|      2|    DECODER_CACHE *cache = OPENSSL_malloc(sizeof(*cache));
  ------------------
  |  |  107|      2|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  776|       |
  777|      2|    if (cache == NULL)
  ------------------
  |  Branch (777:9): [True: 0, False: 2]
  ------------------
  778|      0|        return NULL;
  779|       |
  780|      2|    cache->lock = CRYPTO_THREAD_lock_new();
  781|      2|    if (cache->lock == NULL) {
  ------------------
  |  Branch (781:9): [True: 0, False: 2]
  ------------------
  782|      0|        OPENSSL_free(cache);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  783|      0|        return NULL;
  784|      0|    }
  785|      2|    cache->hashtable = lh_DECODER_CACHE_ENTRY_new(decoder_cache_entry_hash,
  786|      2|        decoder_cache_entry_cmp);
  787|      2|    if (cache->hashtable == NULL) {
  ------------------
  |  Branch (787:9): [True: 0, False: 2]
  ------------------
  788|      0|        CRYPTO_THREAD_lock_free(cache->lock);
  789|      0|        OPENSSL_free(cache);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  790|      0|        return NULL;
  791|      0|    }
  792|       |
  793|      2|    return cache;
  794|      2|}

ossl_err_load_ERR_strings:
  267|     70|{
  268|     70|#ifndef OPENSSL_NO_ERR
  269|     70|    if (!RUN_ONCE(&err_string_init, do_err_strings_init))
  ------------------
  |  |  130|     70|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 70, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (269:9): [True: 0, False: 70]
  ------------------
  270|      0|        return 0;
  271|       |
  272|     70|    err_load_strings(ERR_str_libraries);
  273|     70|    err_load_strings(ERR_str_reasons);
  274|     70|#endif
  275|     70|    return 1;
  276|     70|}
ERR_load_strings_const:
  292|     68|{
  293|     68|#ifndef OPENSSL_NO_ERR
  294|     68|    if (ossl_err_load_ERR_strings() == 0)
  ------------------
  |  Branch (294:9): [True: 0, False: 68]
  ------------------
  295|      0|        return 0;
  296|     68|    err_load_strings(str);
  297|     68|#endif
  298|       |
  299|     68|    return 1;
  300|     68|}
ERR_peek_last_error:
  405|      4|{
  406|      4|    return get_error_values(EV_PEEK_LAST, NULL, NULL, NULL, NULL, NULL);
  407|      4|}
ERR_reason_error_string:
  607|     68|{
  608|     68|#ifndef OPENSSL_NO_ERR
  609|     68|    ERR_STRING_DATA d, *p = NULL;
  610|     68|    unsigned long l, r;
  611|       |
  612|     68|    if (!RUN_ONCE(&err_string_init, do_err_strings_init)) {
  ------------------
  |  |  130|     68|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 68, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (612:9): [True: 0, False: 68]
  ------------------
  613|      0|        return NULL;
  614|      0|    }
  615|       |
  616|       |    /*
  617|       |     * ERR_reason_error_string() can't safely return system error strings,
  618|       |     * since openssl_strerror_r() needs a buffer for thread safety, and we
  619|       |     * haven't got one that would serve any sensible purpose.
  620|       |     */
  621|     68|    if (ERR_SYSTEM_ERROR(e))
  ------------------
  |  |  222|     68|#define ERR_SYSTEM_ERROR(errcode) (((errcode) & ERR_SYSTEM_FLAG) != 0)
  |  |  ------------------
  |  |  |  |  201|     68|#define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1)
  |  |  ------------------
  |  |  |  Branch (222:35): [True: 0, False: 68]
  |  |  ------------------
  ------------------
  622|      0|        return NULL;
  623|       |
  624|     68|    l = ERR_GET_LIB(e);
  625|     68|    r = ERR_GET_REASON(e);
  626|     68|    d.error = ERR_PACK(l, 0, r);
  ------------------
  |  |  262|     68|    ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  210|     68|#define ERR_LIB_MASK 0xFF
  |  |  ------------------
  |  |                   ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  209|     68|#define ERR_LIB_OFFSET 23L
  |  |  ------------------
  |  |                   ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  213|     68|#define ERR_REASON_MASK 0X7FFFFF
  |  |  ------------------
  ------------------
  627|     68|    p = int_err_get_item(&d);
  628|     68|    if (p == NULL) {
  ------------------
  |  Branch (628:9): [True: 68, False: 0]
  ------------------
  629|     68|        d.error = ERR_PACK(0, 0, r);
  ------------------
  |  |  262|     68|    ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  210|     68|#define ERR_LIB_MASK 0xFF
  |  |  ------------------
  |  |                   ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  209|     68|#define ERR_LIB_OFFSET 23L
  |  |  ------------------
  |  |                   ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  213|     68|#define ERR_REASON_MASK 0X7FFFFF
  |  |  ------------------
  ------------------
  630|     68|        p = int_err_get_item(&d);
  631|     68|    }
  632|     68|    return ((p == NULL) ? NULL : p->string);
  ------------------
  |  Branch (632:13): [True: 68, False: 0]
  ------------------
  633|       |#else
  634|       |    return NULL;
  635|       |#endif
  636|     68|}
ossl_err_get_state_int:
  652|     26|{
  653|     26|    ERR_STATE *state;
  654|     26|    int saveerrno = get_last_sys_error();
  ------------------
  |  |   30|     26|#define get_last_sys_error() errno
  ------------------
  655|       |
  656|     26|    if (!OPENSSL_init_crypto(OPENSSL_INIT_BASE_ONLY, NULL))
  ------------------
  |  |   31|     26|#define OPENSSL_INIT_BASE_ONLY 0x00040000L
  ------------------
  |  Branch (656:9): [True: 0, False: 26]
  ------------------
  657|      0|        return NULL;
  658|       |
  659|     26|    state = CRYPTO_THREAD_get_local_ex(CRYPTO_THREAD_LOCAL_ERR_KEY,
  660|     26|        CRYPTO_THREAD_NO_CONTEXT);
  ------------------
  |  |   42|     26|#define CRYPTO_THREAD_NO_CONTEXT (void *)1
  ------------------
  661|     26|    if (state == (ERR_STATE *)-1)
  ------------------
  |  Branch (661:9): [True: 0, False: 26]
  ------------------
  662|      0|        return NULL;
  663|       |
  664|     26|    if (state == NULL) {
  ------------------
  |  Branch (664:9): [True: 2, False: 24]
  ------------------
  665|      2|        if (!CRYPTO_THREAD_set_local_ex(CRYPTO_THREAD_LOCAL_ERR_KEY,
  ------------------
  |  Branch (665:13): [True: 0, False: 2]
  ------------------
  666|      2|                CRYPTO_THREAD_NO_CONTEXT, (ERR_STATE *)-1))
  ------------------
  |  |   42|      2|#define CRYPTO_THREAD_NO_CONTEXT (void *)1
  ------------------
  667|      0|            return NULL;
  668|       |
  669|      2|        state = OSSL_ERR_STATE_new();
  670|      2|        if (state == NULL) {
  ------------------
  |  Branch (670:13): [True: 0, False: 2]
  ------------------
  671|      0|            CRYPTO_THREAD_set_local_ex(CRYPTO_THREAD_LOCAL_ERR_KEY,
  672|      0|                CRYPTO_THREAD_NO_CONTEXT, NULL);
  ------------------
  |  |   42|      0|#define CRYPTO_THREAD_NO_CONTEXT (void *)1
  ------------------
  673|      0|            return NULL;
  674|      0|        }
  675|       |
  676|      2|        if (!ossl_init_thread_start(NULL, NULL, err_delete_thread_state)
  ------------------
  |  Branch (676:13): [True: 0, False: 2]
  ------------------
  677|      2|            || !CRYPTO_THREAD_set_local_ex(CRYPTO_THREAD_LOCAL_ERR_KEY,
  ------------------
  |  Branch (677:16): [True: 0, False: 2]
  ------------------
  678|      2|                CRYPTO_THREAD_NO_CONTEXT, state)) {
  ------------------
  |  |   42|      2|#define CRYPTO_THREAD_NO_CONTEXT (void *)1
  ------------------
  679|      0|            OSSL_ERR_STATE_free(state);
  680|      0|            CRYPTO_THREAD_set_local_ex(CRYPTO_THREAD_LOCAL_ERR_KEY,
  681|      0|                CRYPTO_THREAD_NO_CONTEXT, NULL);
  ------------------
  |  |   42|      0|#define CRYPTO_THREAD_NO_CONTEXT (void *)1
  ------------------
  682|      0|            return NULL;
  683|      0|        }
  684|       |
  685|       |        /* Ignore failures from these */
  686|      2|        OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL);
  ------------------
  |  |  506|      2|#define OPENSSL_INIT_LOAD_CRYPTO_STRINGS 0x00000002L
  ------------------
  687|      2|    }
  688|       |
  689|     26|    set_sys_error(saveerrno);
  ------------------
  |  |   32|     26|#define set_sys_error(e) errno = (e)
  ------------------
  690|     26|    return state;
  691|     26|}
err_shelve_state:
  698|      2|{
  699|      2|    int saveerrno = get_last_sys_error();
  ------------------
  |  |   30|      2|#define get_last_sys_error() errno
  ------------------
  700|       |
  701|       |    /*
  702|       |     * Note, at present our only caller is OPENSSL_init_crypto(), indirectly
  703|       |     * via ossl_init_load_crypto_nodelete(), by which point the requested
  704|       |     * "base" initialization has already been performed, so the below call is a
  705|       |     * NOOP, that re-enters OPENSSL_init_crypto() only to quickly return.
  706|       |     *
  707|       |     * If are no other valid callers of this function, the call below can be
  708|       |     * removed, avoiding the re-entry into OPENSSL_init_crypto().  If there are
  709|       |     * potential uses that are not from inside OPENSSL_init_crypto(), then this
  710|       |     * call is needed, but some care is required to make sure that the re-entry
  711|       |     * remains a NOOP.
  712|       |     */
  713|      2|    if (!OPENSSL_init_crypto(OPENSSL_INIT_BASE_ONLY, NULL))
  ------------------
  |  |   31|      2|#define OPENSSL_INIT_BASE_ONLY 0x00040000L
  ------------------
  |  Branch (713:9): [True: 0, False: 2]
  ------------------
  714|      0|        return 0;
  715|       |
  716|      2|    *state = CRYPTO_THREAD_get_local_ex(CRYPTO_THREAD_LOCAL_ERR_KEY,
  717|      2|        CRYPTO_THREAD_NO_CONTEXT);
  ------------------
  |  |   42|      2|#define CRYPTO_THREAD_NO_CONTEXT (void *)1
  ------------------
  718|      2|    if (!CRYPTO_THREAD_set_local_ex(CRYPTO_THREAD_LOCAL_ERR_KEY,
  ------------------
  |  Branch (718:9): [True: 0, False: 2]
  ------------------
  719|      2|            CRYPTO_THREAD_NO_CONTEXT, (ERR_STATE *)-1))
  ------------------
  |  |   42|      2|#define CRYPTO_THREAD_NO_CONTEXT (void *)1
  ------------------
  720|      0|        return 0;
  721|       |
  722|      2|    set_sys_error(saveerrno);
  ------------------
  |  |   32|      2|#define set_sys_error(e) errno = (e)
  ------------------
  723|      2|    return 1;
  724|      2|}
err_unshelve_state:
  731|      2|{
  732|      2|    if (state != (void *)-1)
  ------------------
  |  Branch (732:9): [True: 2, False: 0]
  ------------------
  733|      2|        CRYPTO_THREAD_set_local_ex(CRYPTO_THREAD_LOCAL_ERR_KEY,
  734|      2|            CRYPTO_THREAD_NO_CONTEXT, (ERR_STATE *)state);
  ------------------
  |  |   42|      2|#define CRYPTO_THREAD_NO_CONTEXT (void *)1
  ------------------
  735|      2|}
err.c:do_err_strings_init:
  211|      2|{
  212|      2|    if (!OPENSSL_init_crypto(OPENSSL_INIT_BASE_ONLY, NULL))
  ------------------
  |  |   31|      2|#define OPENSSL_INIT_BASE_ONLY 0x00040000L
  ------------------
  |  Branch (212:9): [True: 0, False: 2]
  ------------------
  213|      0|        return 0;
  214|      2|    err_string_lock = CRYPTO_THREAD_lock_new();
  215|      2|    if (err_string_lock == NULL)
  ------------------
  |  Branch (215:9): [True: 0, False: 2]
  ------------------
  216|      0|        return 0;
  217|      2|#ifndef OPENSSL_NO_ERR
  218|      2|    int_error_hash = lh_ERR_STRING_DATA_new(err_string_data_hash,
  ------------------
  |  |  330|      2|#define lh_ERR_STRING_DATA_new(hfn, cmp) ((LHASH_OF(ERR_STRING_DATA) *)OPENSSL_LH_set_thunks(OPENSSL_LH_new(ossl_check_ERR_STRING_DATA_lh_hashfunc_type(hfn), ossl_check_ERR_STRING_DATA_lh_compfunc_type(cmp)), lh_ERR_STRING_DATA_hash_thunk, lh_ERR_STRING_DATA_comp_thunk, lh_ERR_STRING_DATA_doall_thunk, lh_ERR_STRING_DATA_doall_arg_thunk))
  ------------------
  219|      2|        err_string_data_cmp);
  220|      2|    if (int_error_hash == NULL) {
  ------------------
  |  Branch (220:9): [True: 0, False: 2]
  ------------------
  221|      0|        CRYPTO_THREAD_lock_free(err_string_lock);
  222|      0|        err_string_lock = NULL;
  223|      0|        return 0;
  224|      0|    }
  225|      2|#endif
  226|      2|    return 1;
  227|      2|}
err.c:err_string_data_hash:
  169|  8.75k|{
  170|  8.75k|    unsigned long ret, l;
  171|       |
  172|  8.75k|    l = a->error;
  173|  8.75k|    ret = l ^ ERR_GET_LIB(l);
  174|  8.75k|    return (ret ^ ret % 19 * 13);
  175|  8.75k|}
err.c:err_string_data_cmp:
  179|  5.89k|{
  180|  5.89k|    if (a->error == b->error)
  ------------------
  |  Branch (180:9): [True: 5.57k, False: 312]
  ------------------
  181|  5.57k|        return 0;
  182|    312|    return a->error > b->error ? 1 : -1;
  ------------------
  |  Branch (182:12): [True: 164, False: 148]
  ------------------
  183|  5.89k|}
err.c:err_load_strings:
  255|    208|{
  256|    208|    if (!CRYPTO_THREAD_write_lock(err_string_lock))
  ------------------
  |  Branch (256:9): [True: 0, False: 208]
  ------------------
  257|      0|        return 0;
  258|  8.82k|    for (; str->error; str++)
  ------------------
  |  Branch (258:12): [True: 8.62k, False: 208]
  ------------------
  259|  8.62k|        (void)lh_ERR_STRING_DATA_insert(int_error_hash,
  ------------------
  |  |  333|  8.82k|#define lh_ERR_STRING_DATA_insert(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_insert(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_ERR_STRING_DATA_lh_plain_type(ptr)))
  ------------------
  260|    208|            (ERR_STRING_DATA *)str);
  261|    208|    CRYPTO_THREAD_unlock(err_string_lock);
  262|    208|    return 1;
  263|    208|}
err.c:get_error_values:
  443|      4|{
  444|      4|    int i = 0;
  445|      4|    ERR_STATE *es;
  446|      4|    unsigned long ret;
  447|       |
  448|      4|    es = ossl_err_get_state_int();
  449|      4|    if (es == NULL)
  ------------------
  |  Branch (449:9): [True: 0, False: 4]
  ------------------
  450|      0|        return 0;
  451|       |
  452|       |    /*
  453|       |     * Clear anything that should have been cleared earlier. We do this
  454|       |     * here because this doesn't have constant-time issues.
  455|       |     */
  456|      4|    while (es->bottom != es->top) {
  ------------------
  |  Branch (456:12): [True: 4, False: 0]
  ------------------
  457|      4|        if (es->err_flags[es->top] & ERR_FLAG_CLEAR) {
  ------------------
  |  |   16|      4|#define ERR_FLAG_CLEAR 0x02
  ------------------
  |  Branch (457:13): [True: 0, False: 4]
  ------------------
  458|      0|            err_clear(es, es->top, 0);
  459|      0|            es->top = es->top > 0 ? es->top - 1 : ERR_NUM_ERRORS - 1;
  ------------------
  |  |   14|      0|#define ERR_NUM_ERRORS 16
  ------------------
  |  Branch (459:23): [True: 0, False: 0]
  ------------------
  460|      0|            continue;
  461|      0|        }
  462|      4|        i = (es->bottom + 1) % ERR_NUM_ERRORS;
  ------------------
  |  |   14|      4|#define ERR_NUM_ERRORS 16
  ------------------
  463|      4|        if (es->err_flags[i] & ERR_FLAG_CLEAR) {
  ------------------
  |  |   16|      4|#define ERR_FLAG_CLEAR 0x02
  ------------------
  |  Branch (463:13): [True: 0, False: 4]
  ------------------
  464|      0|            es->bottom = i;
  465|      0|            err_clear(es, es->bottom, 0);
  466|      0|            continue;
  467|      0|        }
  468|      4|        break;
  469|      4|    }
  470|       |
  471|       |    /* If everything has been cleared, the stack is empty. */
  472|      4|    if (es->bottom == es->top)
  ------------------
  |  Branch (472:9): [True: 0, False: 4]
  ------------------
  473|      0|        return 0;
  474|       |
  475|       |    /* Which error, the top of stack (latest one) or the first one? */
  476|      4|    if (g == EV_PEEK_LAST)
  ------------------
  |  Branch (476:9): [True: 4, False: 0]
  ------------------
  477|      4|        i = es->top;
  478|      0|    else
  479|      0|        i = (es->bottom + 1) % ERR_NUM_ERRORS;
  ------------------
  |  |   14|      0|#define ERR_NUM_ERRORS 16
  ------------------
  480|       |
  481|      4|    ret = es->err_buffer[i];
  482|      4|    if (g == EV_POP) {
  ------------------
  |  Branch (482:9): [True: 0, False: 4]
  ------------------
  483|      0|        es->bottom = i;
  484|      0|        es->err_buffer[i] = 0;
  485|      0|    }
  486|       |
  487|      4|    if (file != NULL) {
  ------------------
  |  Branch (487:9): [True: 0, False: 4]
  ------------------
  488|      0|        *file = es->err_file[i];
  489|      0|        if (*file == NULL)
  ------------------
  |  Branch (489:13): [True: 0, False: 0]
  ------------------
  490|      0|            *file = "";
  491|      0|    }
  492|      4|    if (line != NULL)
  ------------------
  |  Branch (492:9): [True: 0, False: 4]
  ------------------
  493|      0|        *line = es->err_line[i];
  494|      4|    if (func != NULL) {
  ------------------
  |  Branch (494:9): [True: 0, False: 4]
  ------------------
  495|      0|        *func = es->err_func[i];
  496|      0|        if (*func == NULL)
  ------------------
  |  Branch (496:13): [True: 0, False: 0]
  ------------------
  497|      0|            *func = "";
  498|      0|    }
  499|      4|    if (flags != NULL)
  ------------------
  |  Branch (499:9): [True: 0, False: 4]
  ------------------
  500|      0|        *flags = es->err_data_flags[i];
  501|      4|    if (data == NULL) {
  ------------------
  |  Branch (501:9): [True: 4, False: 0]
  ------------------
  502|      4|        if (g == EV_POP) {
  ------------------
  |  Branch (502:13): [True: 0, False: 4]
  ------------------
  503|      0|            err_clear_data(es, i, 0);
  504|      0|        }
  505|      4|    } else {
  506|      0|        *data = es->err_data[i];
  507|      0|        if (*data == NULL) {
  ------------------
  |  Branch (507:13): [True: 0, False: 0]
  ------------------
  508|      0|            *data = "";
  509|      0|            if (flags != NULL)
  ------------------
  |  Branch (509:17): [True: 0, False: 0]
  ------------------
  510|      0|                *flags = 0;
  511|      0|        }
  512|      0|    }
  513|      4|    return ret;
  514|      4|}
err.c:int_err_get_item:
  186|    136|{
  187|    136|    ERR_STRING_DATA *p = NULL;
  188|       |
  189|    136|    if (!CRYPTO_THREAD_read_lock(err_string_lock))
  ------------------
  |  Branch (189:9): [True: 0, False: 136]
  ------------------
  190|      0|        return NULL;
  191|    136|    p = lh_ERR_STRING_DATA_retrieve(int_error_hash, d);
  ------------------
  |  |  335|    136|#define lh_ERR_STRING_DATA_retrieve(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_retrieve(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_const_ERR_STRING_DATA_lh_plain_type(ptr)))
  ------------------
  192|    136|    CRYPTO_THREAD_unlock(err_string_lock);
  193|       |
  194|    136|    return p;
  195|    136|}

ossl_err_load_crypto_strings:
   49|      2|{
   50|      2|    if (0
  ------------------
  |  Branch (50:9): [Folded, False: 2]
  ------------------
   51|      2|#ifndef OPENSSL_NO_ERR
   52|      2|        || ossl_err_load_ERR_strings() == 0 /* include error strings for SYSerr */
  ------------------
  |  Branch (52:12): [True: 0, False: 2]
  ------------------
   53|      2|        || ossl_err_load_BN_strings() == 0
  ------------------
  |  Branch (53:12): [True: 0, False: 2]
  ------------------
   54|      2|        || ossl_err_load_RSA_strings() == 0
  ------------------
  |  Branch (54:12): [True: 0, False: 2]
  ------------------
   55|      2|#ifndef OPENSSL_NO_DH
   56|      2|        || ossl_err_load_DH_strings() == 0
  ------------------
  |  Branch (56:12): [True: 0, False: 2]
  ------------------
   57|      2|#endif
   58|      2|        || ossl_err_load_EVP_strings() == 0
  ------------------
  |  Branch (58:12): [True: 0, False: 2]
  ------------------
   59|      2|        || ossl_err_load_BUF_strings() == 0
  ------------------
  |  Branch (59:12): [True: 0, False: 2]
  ------------------
   60|      2|        || ossl_err_load_OBJ_strings() == 0
  ------------------
  |  Branch (60:12): [True: 0, False: 2]
  ------------------
   61|      2|        || ossl_err_load_PEM_strings() == 0
  ------------------
  |  Branch (61:12): [True: 0, False: 2]
  ------------------
   62|      2|#ifndef OPENSSL_NO_DSA
   63|      2|        || ossl_err_load_DSA_strings() == 0
  ------------------
  |  Branch (63:12): [True: 0, False: 2]
  ------------------
   64|      2|#endif
   65|      2|        || ossl_err_load_X509_strings() == 0
  ------------------
  |  Branch (65:12): [True: 0, False: 2]
  ------------------
   66|      2|        || ossl_err_load_ASN1_strings() == 0
  ------------------
  |  Branch (66:12): [True: 0, False: 2]
  ------------------
   67|      2|        || ossl_err_load_CONF_strings() == 0
  ------------------
  |  Branch (67:12): [True: 0, False: 2]
  ------------------
   68|      2|        || ossl_err_load_CRYPTO_strings() == 0
  ------------------
  |  Branch (68:12): [True: 0, False: 2]
  ------------------
   69|      2|#ifndef OPENSSL_NO_COMP
   70|      2|        || ossl_err_load_COMP_strings() == 0
  ------------------
  |  Branch (70:12): [True: 0, False: 2]
  ------------------
   71|      2|#endif
   72|      2|#ifndef OPENSSL_NO_EC
   73|      2|        || ossl_err_load_EC_strings() == 0
  ------------------
  |  Branch (73:12): [True: 0, False: 2]
  ------------------
   74|      2|#endif
   75|       |        /* skip ossl_err_load_SSL_strings() because it is not in this library */
   76|      2|        || ossl_err_load_BIO_strings() == 0
  ------------------
  |  Branch (76:12): [True: 0, False: 2]
  ------------------
   77|      2|        || ossl_err_load_PKCS7_strings() == 0
  ------------------
  |  Branch (77:12): [True: 0, False: 2]
  ------------------
   78|      2|        || ossl_err_load_X509V3_strings() == 0
  ------------------
  |  Branch (78:12): [True: 0, False: 2]
  ------------------
   79|      2|        || ossl_err_load_PKCS12_strings() == 0
  ------------------
  |  Branch (79:12): [True: 0, False: 2]
  ------------------
   80|      2|        || ossl_err_load_RAND_strings() == 0
  ------------------
  |  Branch (80:12): [True: 0, False: 2]
  ------------------
   81|      2|        || ossl_err_load_DSO_strings() == 0
  ------------------
  |  Branch (81:12): [True: 0, False: 2]
  ------------------
   82|      2|#ifndef OPENSSL_NO_TS
   83|      2|        || ossl_err_load_TS_strings() == 0
  ------------------
  |  Branch (83:12): [True: 0, False: 2]
  ------------------
   84|      2|#endif
   85|      2|#ifndef OPENSSL_NO_HTTP
   86|      2|        || ossl_err_load_HTTP_strings() == 0
  ------------------
  |  Branch (86:12): [True: 0, False: 2]
  ------------------
   87|      2|#endif
   88|      2|#ifndef OPENSSL_NO_OCSP
   89|      2|        || ossl_err_load_OCSP_strings() == 0
  ------------------
  |  Branch (89:12): [True: 0, False: 2]
  ------------------
   90|      2|#endif
   91|      2|        || ossl_err_load_UI_strings() == 0
  ------------------
  |  Branch (91:12): [True: 0, False: 2]
  ------------------
   92|      2|#ifndef OPENSSL_NO_CMS
   93|      2|        || ossl_err_load_CMS_strings() == 0
  ------------------
  |  Branch (93:12): [True: 0, False: 2]
  ------------------
   94|      2|#endif
   95|      2|#ifndef OPENSSL_NO_CRMF
   96|      2|        || ossl_err_load_CRMF_strings() == 0
  ------------------
  |  Branch (96:12): [True: 0, False: 2]
  ------------------
   97|      2|        || ossl_err_load_CMP_strings() == 0
  ------------------
  |  Branch (97:12): [True: 0, False: 2]
  ------------------
   98|      2|#endif
   99|      2|#ifndef OPENSSL_NO_CT
  100|      2|        || ossl_err_load_CT_strings() == 0
  ------------------
  |  Branch (100:12): [True: 0, False: 2]
  ------------------
  101|      2|#endif
  102|      2|        || ossl_err_load_ESS_strings() == 0
  ------------------
  |  Branch (102:12): [True: 0, False: 2]
  ------------------
  103|      2|        || ossl_err_load_ASYNC_strings() == 0
  ------------------
  |  Branch (103:12): [True: 0, False: 2]
  ------------------
  104|      2|#ifndef OPENSSL_NO_SM2
  105|      2|        || ossl_err_load_SM2_strings() == 0
  ------------------
  |  Branch (105:12): [True: 0, False: 2]
  ------------------
  106|      2|#endif
  107|      2|        || ossl_err_load_OSSL_STORE_strings() == 0
  ------------------
  |  Branch (107:12): [True: 0, False: 2]
  ------------------
  108|      2|        || ossl_err_load_PROP_strings() == 0
  ------------------
  |  Branch (108:12): [True: 0, False: 2]
  ------------------
  109|      2|        || ossl_err_load_PROV_strings() == 0
  ------------------
  |  Branch (109:12): [True: 0, False: 2]
  ------------------
  110|      2|#endif
  111|      2|    )
  112|      0|        return 0;
  113|       |
  114|      2|    return 1;
  115|      2|}

ERR_new:
   15|      6|{
   16|      6|    ERR_STATE *es;
   17|       |
   18|      6|    es = ossl_err_get_state_int();
   19|      6|    if (es == NULL)
  ------------------
  |  Branch (19:9): [True: 0, False: 6]
  ------------------
   20|      0|        return;
   21|       |
   22|       |    /* Allocate a slot */
   23|      6|    err_get_slot(es);
   24|      6|    err_clear(es, es->top, 0);
   25|      6|}
ERR_set_debug:
   28|      6|{
   29|      6|    ERR_STATE *es;
   30|       |
   31|      6|    es = ossl_err_get_state_int();
   32|      6|    if (es == NULL)
  ------------------
  |  Branch (32:9): [True: 0, False: 6]
  ------------------
   33|      0|        return;
   34|       |
   35|      6|    err_set_debug(es, es->top, file, line, func);
   36|      6|}
ERR_set_error:
   39|      6|{
   40|      6|    va_list args;
   41|       |
   42|      6|    va_start(args, fmt);
   43|      6|    ERR_vset_error(lib, reason, fmt, args);
   44|       |    va_end(args);
   45|      6|}
ERR_vset_error:
   48|      6|{
   49|      6|    ERR_STATE *es;
   50|      6|    char *buf = NULL;
   51|      6|    size_t buf_size = 0;
   52|      6|    unsigned long flags = 0;
   53|      6|    size_t i;
   54|       |
   55|      6|    es = ossl_err_get_state_int();
   56|      6|    if (es == NULL)
  ------------------
  |  Branch (56:9): [True: 0, False: 6]
  ------------------
   57|      0|        return;
   58|      6|    i = es->top;
   59|       |
   60|      6|    if (fmt != NULL) {
  ------------------
  |  Branch (60:9): [True: 2, False: 4]
  ------------------
   61|      2|        int printed_len = 0;
   62|      2|        char *rbuf = NULL;
   63|       |
   64|      2|        buf = es->err_data[i];
   65|      2|        buf_size = es->err_data_size[i];
   66|       |
   67|       |        /*
   68|       |         * To protect the string we just grabbed from tampering by other
   69|       |         * functions we may call, or to protect them from freeing a pointer
   70|       |         * that may no longer be valid at that point, we clear away the
   71|       |         * data pointer and the flags.  We will set them again at the end
   72|       |         * of this function.
   73|       |         */
   74|      2|        es->err_data[i] = NULL;
   75|      2|        es->err_data_flags[i] = 0;
   76|       |
   77|       |        /*
   78|       |         * Try to maximize the space available.  If that fails, we use what
   79|       |         * we have.
   80|       |         */
   81|      2|        if (buf_size < ERR_MAX_DATA_SIZE
  ------------------
  |  |  348|      4|#define ERR_MAX_DATA_SIZE 1024
  ------------------
  |  Branch (81:13): [True: 2, False: 0]
  ------------------
   82|      2|            && (rbuf = OPENSSL_realloc(buf, ERR_MAX_DATA_SIZE)) != NULL) {
  ------------------
  |  |  121|      2|    CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (82:16): [True: 2, False: 0]
  ------------------
   83|      2|            buf = rbuf;
   84|      2|            buf_size = ERR_MAX_DATA_SIZE;
  ------------------
  |  |  348|      2|#define ERR_MAX_DATA_SIZE 1024
  ------------------
   85|      2|        }
   86|       |
   87|      2|        if (buf != NULL) {
  ------------------
  |  Branch (87:13): [True: 2, False: 0]
  ------------------
   88|      2|            printed_len = BIO_vsnprintf(buf, buf_size, fmt, args);
   89|      2|        }
   90|      2|        if (printed_len < 0)
  ------------------
  |  Branch (90:13): [True: 0, False: 2]
  ------------------
   91|      0|            printed_len = 0;
   92|      2|        if (buf != NULL)
  ------------------
  |  Branch (92:13): [True: 2, False: 0]
  ------------------
   93|      2|            buf[printed_len] = '\0';
   94|       |
   95|       |        /*
   96|       |         * Try to reduce the size, but only if we maximized above.  If that
   97|       |         * fails, we keep what we have.
   98|       |         * (According to documentation, realloc leaves the old buffer untouched
   99|       |         * if it fails)
  100|       |         */
  101|      2|        if ((rbuf = OPENSSL_realloc(buf, printed_len + 1)) != NULL) {
  ------------------
  |  |  121|      2|    CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (101:13): [True: 2, False: 0]
  ------------------
  102|      2|            buf = rbuf;
  103|      2|            buf_size = printed_len + 1;
  104|      2|            buf[printed_len] = '\0';
  105|      2|        }
  106|       |
  107|      2|        if (buf != NULL)
  ------------------
  |  Branch (107:13): [True: 2, False: 0]
  ------------------
  108|      2|            flags = ERR_TXT_MALLOCED | ERR_TXT_STRING;
  ------------------
  |  |   50|      2|#define ERR_TXT_MALLOCED 0x01
  ------------------
                          flags = ERR_TXT_MALLOCED | ERR_TXT_STRING;
  ------------------
  |  |   51|      2|#define ERR_TXT_STRING 0x02
  ------------------
  109|      2|    }
  110|       |
  111|      6|    err_clear_data(es, es->top, 0);
  112|      6|    err_set_error(es, es->top, lib, reason);
  113|      6|    if (fmt != NULL)
  ------------------
  |  Branch (113:9): [True: 2, False: 4]
  ------------------
  114|      2|        err_set_data(es, es->top, buf, buf_size, flags);
  115|      6|}

err_blocks.c:err_get_slot:
   32|      6|{
   33|      6|    es->top = (es->top + 1) % ERR_NUM_ERRORS;
  ------------------
  |  |   14|      6|#define ERR_NUM_ERRORS 16
  ------------------
   34|      6|    if (es->top == es->bottom)
  ------------------
  |  Branch (34:9): [True: 0, False: 6]
  ------------------
   35|      0|        es->bottom = (es->bottom + 1) % ERR_NUM_ERRORS;
  ------------------
  |  |   14|      0|#define ERR_NUM_ERRORS 16
  ------------------
   36|      6|}
err_blocks.c:err_clear:
  103|      6|{
  104|      6|    err_clear_data(es, i, (deall));
  105|      6|    es->err_marks[i] = 0;
  106|      6|    es->err_flags[i] = 0;
  107|      6|    es->err_buffer[i] = 0;
  108|      6|    es->err_line[i] = -1;
  109|      6|    OPENSSL_free(es->err_file[i]);
  ------------------
  |  |  132|      6|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  110|      6|    es->err_file[i] = NULL;
  111|      6|    OPENSSL_free(es->err_func[i]);
  ------------------
  |  |  132|      6|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  112|       |    es->err_func[i] = NULL;
  113|      6|}
err_blocks.c:err_set_debug:
   68|      6|{
   69|       |    /*
   70|       |     * We dup the file and fn strings because they may be provider owned. If the
   71|       |     * provider gets unloaded, they may not be valid anymore.
   72|       |     */
   73|      6|    OPENSSL_free(es->err_file[i]);
  ------------------
  |  |  132|      6|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   74|      6|    if (file == NULL || file[0] == '\0')
  ------------------
  |  Branch (74:9): [True: 0, False: 6]
  |  Branch (74:25): [True: 0, False: 6]
  ------------------
   75|      0|        es->err_file[i] = NULL;
   76|      6|    else if ((es->err_file[i] = CRYPTO_malloc(strlen(file) + 1,
  ------------------
  |  Branch (76:14): [True: 6, False: 0]
  ------------------
   77|      6|                  NULL, 0))
   78|      6|        != NULL)
   79|       |        /* We cannot use OPENSSL_strdup due to possible recursion */
   80|      6|        strcpy(es->err_file[i], file);
   81|       |
   82|      6|    es->err_line[i] = line;
   83|      6|    OPENSSL_free(es->err_func[i]);
  ------------------
  |  |  132|      6|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   84|      6|    if (fn == NULL || fn[0] == '\0')
  ------------------
  |  Branch (84:9): [True: 0, False: 6]
  |  Branch (84:23): [True: 0, False: 6]
  ------------------
   85|      0|        es->err_func[i] = NULL;
   86|      6|    else if ((es->err_func[i] = CRYPTO_malloc(strlen(fn) + 1,
  ------------------
  |  Branch (86:14): [True: 6, False: 0]
  ------------------
   87|      6|                  NULL, 0))
   88|      6|        != NULL)
   89|      6|        strcpy(es->err_func[i], fn);
   90|      6|}
err_blocks.c:err_clear_data:
   39|     12|{
   40|     12|    if (es->err_data_flags[i] & ERR_TXT_MALLOCED) {
  ------------------
  |  |   50|     12|#define ERR_TXT_MALLOCED 0x01
  ------------------
  |  Branch (40:9): [True: 0, False: 12]
  ------------------
   41|      0|        if (deall) {
  ------------------
  |  Branch (41:13): [True: 0, False: 0]
  ------------------
   42|      0|            OPENSSL_free(es->err_data[i]);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   43|      0|            es->err_data[i] = NULL;
   44|      0|            es->err_data_size[i] = 0;
   45|      0|            es->err_data_flags[i] = 0;
   46|      0|        } else if (es->err_data[i] != NULL) {
  ------------------
  |  Branch (46:20): [True: 0, False: 0]
  ------------------
   47|      0|            es->err_data[i][0] = '\0';
   48|      0|            es->err_data_flags[i] = ERR_TXT_MALLOCED;
  ------------------
  |  |   50|      0|#define ERR_TXT_MALLOCED 0x01
  ------------------
   49|      0|        }
   50|     12|    } else {
   51|       |        es->err_data[i] = NULL;
   52|     12|        es->err_data_size[i] = 0;
   53|     12|        es->err_data_flags[i] = 0;
   54|     12|    }
   55|     12|}
err_blocks.c:err_set_error:
   59|      6|{
   60|      6|    es->err_buffer[i] = lib == ERR_LIB_SYS
  ------------------
  |  |   55|      6|#define ERR_LIB_SYS 2
  ------------------
  |  Branch (60:25): [True: 2, False: 4]
  ------------------
   61|      6|        ? (unsigned int)(ERR_SYSTEM_FLAG | reason)
  ------------------
  |  |  201|      2|#define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1)
  ------------------
   62|      6|        : ERR_PACK(lib, 0, reason);
  ------------------
  |  |  262|     10|    ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  210|      4|#define ERR_LIB_MASK 0xFF
  |  |  ------------------
  |  |                   ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  209|      4|#define ERR_LIB_OFFSET 23L
  |  |  ------------------
  |  |                   ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  213|      4|#define ERR_REASON_MASK 0X7FFFFF
  |  |  ------------------
  ------------------
   63|      6|}
err_blocks.c:err_set_data:
   94|      2|{
   95|      2|    if ((es->err_data_flags[i] & ERR_TXT_MALLOCED) != 0)
  ------------------
  |  |   50|      2|#define ERR_TXT_MALLOCED 0x01
  ------------------
  |  Branch (95:9): [True: 0, False: 2]
  ------------------
   96|      0|        OPENSSL_free(es->err_data[i]);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   97|      2|    es->err_data[i] = data;
   98|      2|    es->err_data_size[i] = datasz;
   99|      2|    es->err_data_flags[i] = flags;
  100|      2|}
err_mark.c:err_clear:
  103|      6|{
  104|      6|    err_clear_data(es, i, (deall));
  105|      6|    es->err_marks[i] = 0;
  106|      6|    es->err_flags[i] = 0;
  107|      6|    es->err_buffer[i] = 0;
  108|      6|    es->err_line[i] = -1;
  109|      6|    OPENSSL_free(es->err_file[i]);
  ------------------
  |  |  132|      6|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  110|      6|    es->err_file[i] = NULL;
  111|      6|    OPENSSL_free(es->err_func[i]);
  ------------------
  |  |  132|      6|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  112|       |    es->err_func[i] = NULL;
  113|      6|}
err_mark.c:err_clear_data:
   39|      6|{
   40|      6|    if (es->err_data_flags[i] & ERR_TXT_MALLOCED) {
  ------------------
  |  |   50|      6|#define ERR_TXT_MALLOCED 0x01
  ------------------
  |  Branch (40:9): [True: 2, False: 4]
  ------------------
   41|      2|        if (deall) {
  ------------------
  |  Branch (41:13): [True: 0, False: 2]
  ------------------
   42|      0|            OPENSSL_free(es->err_data[i]);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   43|      0|            es->err_data[i] = NULL;
   44|      0|            es->err_data_size[i] = 0;
   45|      0|            es->err_data_flags[i] = 0;
   46|      2|        } else if (es->err_data[i] != NULL) {
  ------------------
  |  Branch (46:20): [True: 2, False: 0]
  ------------------
   47|      2|            es->err_data[i][0] = '\0';
   48|      2|            es->err_data_flags[i] = ERR_TXT_MALLOCED;
  ------------------
  |  |   50|      2|#define ERR_TXT_MALLOCED 0x01
  ------------------
   49|      2|        }
   50|      4|    } else {
   51|       |        es->err_data[i] = NULL;
   52|      4|        es->err_data_size[i] = 0;
   53|      4|        es->err_data_flags[i] = 0;
   54|      4|    }
   55|      6|}

ERR_set_mark:
   14|      2|{
   15|      2|    ERR_STATE *es;
   16|       |
   17|      2|    es = ossl_err_get_state_int();
   18|      2|    if (es == NULL)
  ------------------
  |  Branch (18:9): [True: 0, False: 2]
  ------------------
   19|      0|        return 0;
   20|       |
   21|      2|    if (es->bottom == es->top)
  ------------------
  |  Branch (21:9): [True: 2, False: 0]
  ------------------
   22|      2|        return 0;
   23|      0|    es->err_marks[es->top]++;
   24|      0|    return 1;
   25|      2|}
ERR_pop_to_mark:
   41|      2|{
   42|      2|    ERR_STATE *es;
   43|       |
   44|      2|    es = ossl_err_get_state_int();
   45|      2|    if (es == NULL)
  ------------------
  |  Branch (45:9): [True: 0, False: 2]
  ------------------
   46|      0|        return 0;
   47|       |
   48|      8|    while (es->bottom != es->top
  ------------------
  |  Branch (48:12): [True: 6, False: 2]
  ------------------
   49|      6|        && es->err_marks[es->top] == 0) {
  ------------------
  |  Branch (49:12): [True: 6, False: 0]
  ------------------
   50|      6|        err_clear(es, es->top, 0);
   51|      6|        es->top = es->top > 0 ? es->top - 1 : ERR_NUM_ERRORS - 1;
  ------------------
  |  |   14|      0|#define ERR_NUM_ERRORS 16
  ------------------
  |  Branch (51:19): [True: 6, False: 0]
  ------------------
   52|      6|    }
   53|       |
   54|      2|    if (es->bottom == es->top)
  ------------------
  |  Branch (54:9): [True: 2, False: 0]
  ------------------
   55|      2|        return 0;
   56|      0|    es->err_marks[es->top]--;
   57|      0|    return 1;
   58|      2|}

OSSL_ERR_STATE_new:
   20|      2|{
   21|       |    return CRYPTO_zalloc(sizeof(ERR_STATE), NULL, 0);
   22|      2|}

ossl_err_load_ESS_strings:
   42|      2|{
   43|      2|#ifndef OPENSSL_NO_ERR
   44|      2|    if (ERR_reason_error_string(ESS_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (44:9): [True: 2, False: 0]
  ------------------
   45|      2|        ERR_load_strings_const(ESS_str_reasons);
   46|      2|#endif
   47|      2|    return 1;
   48|      2|}

openssl_add_all_ciphers_int:
   18|      2|{
   19|       |
   20|      2|#ifndef OPENSSL_NO_DES
   21|      2|    EVP_add_cipher(EVP_des_cfb());
  ------------------
  |  |  901|      2|#define EVP_des_cfb EVP_des_cfb64
  ------------------
   22|      2|    EVP_add_cipher(EVP_des_cfb1());
   23|      2|    EVP_add_cipher(EVP_des_cfb8());
   24|      2|    EVP_add_cipher(EVP_des_ede_cfb());
  ------------------
  |  |  905|      2|#define EVP_des_ede_cfb EVP_des_ede_cfb64
  ------------------
   25|      2|    EVP_add_cipher(EVP_des_ede3_cfb());
  ------------------
  |  |  907|      2|#define EVP_des_ede3_cfb EVP_des_ede3_cfb64
  ------------------
   26|      2|    EVP_add_cipher(EVP_des_ede3_cfb1());
   27|      2|    EVP_add_cipher(EVP_des_ede3_cfb8());
   28|       |
   29|      2|    EVP_add_cipher(EVP_des_ofb());
   30|      2|    EVP_add_cipher(EVP_des_ede_ofb());
   31|      2|    EVP_add_cipher(EVP_des_ede3_ofb());
   32|       |
   33|      2|    EVP_add_cipher(EVP_desx_cbc());
   34|      2|    EVP_add_cipher_alias(SN_desx_cbc, "DESX");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   35|      2|    EVP_add_cipher_alias(SN_desx_cbc, "desx");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   36|       |
   37|      2|    EVP_add_cipher(EVP_des_cbc());
   38|      2|    EVP_add_cipher_alias(SN_des_cbc, "DES");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   39|      2|    EVP_add_cipher_alias(SN_des_cbc, "des");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   40|      2|    EVP_add_cipher(EVP_des_ede_cbc());
   41|      2|    EVP_add_cipher(EVP_des_ede3_cbc());
   42|      2|    EVP_add_cipher_alias(SN_des_ede3_cbc, "DES3");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   43|      2|    EVP_add_cipher_alias(SN_des_ede3_cbc, "des3");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   44|       |
   45|      2|    EVP_add_cipher(EVP_des_ecb());
   46|      2|    EVP_add_cipher(EVP_des_ede());
   47|      2|    EVP_add_cipher_alias(SN_des_ede_ecb, "DES-EDE-ECB");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   48|      2|    EVP_add_cipher_alias(SN_des_ede_ecb, "des-ede-ecb");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   49|      2|    EVP_add_cipher(EVP_des_ede3());
   50|      2|    EVP_add_cipher_alias(SN_des_ede3_ecb, "DES-EDE3-ECB");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   51|      2|    EVP_add_cipher_alias(SN_des_ede3_ecb, "des-ede3-ecb");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   52|      2|    EVP_add_cipher(EVP_des_ede3_wrap());
   53|      2|    EVP_add_cipher_alias(SN_id_smime_alg_CMS3DESwrap, "des3-wrap");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   54|      2|#endif
   55|       |
   56|      2|#ifndef OPENSSL_NO_RC4
   57|      2|    EVP_add_cipher(EVP_rc4());
   58|      2|    EVP_add_cipher(EVP_rc4_40());
   59|      2|#ifndef OPENSSL_NO_MD5
   60|      2|    EVP_add_cipher(EVP_rc4_hmac_md5());
   61|      2|#endif
   62|      2|#endif
   63|       |
   64|      2|#ifndef OPENSSL_NO_IDEA
   65|      2|    EVP_add_cipher(EVP_idea_ecb());
   66|      2|    EVP_add_cipher(EVP_idea_cfb());
  ------------------
  |  |  934|      2|#define EVP_idea_cfb EVP_idea_cfb64
  ------------------
   67|      2|    EVP_add_cipher(EVP_idea_ofb());
   68|      2|    EVP_add_cipher(EVP_idea_cbc());
   69|      2|    EVP_add_cipher_alias(SN_idea_cbc, "IDEA");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   70|      2|    EVP_add_cipher_alias(SN_idea_cbc, "idea");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   71|      2|#endif
   72|       |
   73|      2|#ifndef OPENSSL_NO_SEED
   74|      2|    EVP_add_cipher(EVP_seed_ecb());
   75|      2|    EVP_add_cipher(EVP_seed_cfb());
  ------------------
  |  | 1088|      2|#define EVP_seed_cfb EVP_seed_cfb128
  ------------------
   76|      2|    EVP_add_cipher(EVP_seed_ofb());
   77|      2|    EVP_add_cipher(EVP_seed_cbc());
   78|      2|    EVP_add_cipher_alias(SN_seed_cbc, "SEED");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   79|      2|    EVP_add_cipher_alias(SN_seed_cbc, "seed");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   80|      2|#endif
   81|       |
   82|      2|#ifndef OPENSSL_NO_SM4
   83|      2|    EVP_add_cipher(EVP_sm4_ecb());
   84|      2|    EVP_add_cipher(EVP_sm4_cbc());
   85|      2|    EVP_add_cipher(EVP_sm4_cfb());
  ------------------
  |  | 1096|      2|#define EVP_sm4_cfb EVP_sm4_cfb128
  ------------------
   86|      2|    EVP_add_cipher(EVP_sm4_ofb());
   87|      2|    EVP_add_cipher(EVP_sm4_ctr());
   88|      2|    EVP_add_cipher_alias(SN_sm4_cbc, "SM4");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   89|      2|    EVP_add_cipher_alias(SN_sm4_cbc, "sm4");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   90|      2|#endif
   91|       |
   92|      2|#ifndef OPENSSL_NO_RC2
   93|      2|    EVP_add_cipher(EVP_rc2_ecb());
   94|      2|    EVP_add_cipher(EVP_rc2_cfb());
  ------------------
  |  |  944|      2|#define EVP_rc2_cfb EVP_rc2_cfb64
  ------------------
   95|      2|    EVP_add_cipher(EVP_rc2_ofb());
   96|      2|    EVP_add_cipher(EVP_rc2_cbc());
   97|      2|    EVP_add_cipher(EVP_rc2_40_cbc());
   98|      2|    EVP_add_cipher(EVP_rc2_64_cbc());
   99|      2|    EVP_add_cipher_alias(SN_rc2_cbc, "RC2");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  100|      2|    EVP_add_cipher_alias(SN_rc2_cbc, "rc2");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  101|      2|    EVP_add_cipher_alias(SN_rc2_cbc, "rc2-128");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  102|      2|    EVP_add_cipher_alias(SN_rc2_64_cbc, "rc2-64");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  103|      2|    EVP_add_cipher_alias(SN_rc2_40_cbc, "rc2-40");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  104|      2|#endif
  105|       |
  106|      2|#ifndef OPENSSL_NO_BF
  107|      2|    EVP_add_cipher(EVP_bf_ecb());
  108|      2|    EVP_add_cipher(EVP_bf_cfb());
  ------------------
  |  |  951|      2|#define EVP_bf_cfb EVP_bf_cfb64
  ------------------
  109|      2|    EVP_add_cipher(EVP_bf_ofb());
  110|      2|    EVP_add_cipher(EVP_bf_cbc());
  111|      2|    EVP_add_cipher_alias(SN_bf_cbc, "BF");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  112|      2|    EVP_add_cipher_alias(SN_bf_cbc, "bf");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  113|      2|    EVP_add_cipher_alias(SN_bf_cbc, "blowfish");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  114|      2|#endif
  115|       |
  116|      2|#ifndef OPENSSL_NO_CAST
  117|      2|    EVP_add_cipher(EVP_cast5_ecb());
  118|      2|    EVP_add_cipher(EVP_cast5_cfb());
  ------------------
  |  |  958|      2|#define EVP_cast5_cfb EVP_cast5_cfb64
  ------------------
  119|      2|    EVP_add_cipher(EVP_cast5_ofb());
  120|      2|    EVP_add_cipher(EVP_cast5_cbc());
  121|      2|    EVP_add_cipher_alias(SN_cast5_cbc, "CAST");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  122|      2|    EVP_add_cipher_alias(SN_cast5_cbc, "cast");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  123|      2|    EVP_add_cipher_alias(SN_cast5_cbc, "CAST-cbc");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  124|      2|    EVP_add_cipher_alias(SN_cast5_cbc, "cast-cbc");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  125|      2|#endif
  126|       |
  127|      2|#ifndef OPENSSL_NO_RC5
  128|      2|    EVP_add_cipher(EVP_rc5_32_12_16_ecb());
  129|      2|    EVP_add_cipher(EVP_rc5_32_12_16_cfb());
  ------------------
  |  |  965|      2|#define EVP_rc5_32_12_16_cfb EVP_rc5_32_12_16_cfb64
  ------------------
  130|      2|    EVP_add_cipher(EVP_rc5_32_12_16_ofb());
  131|      2|    EVP_add_cipher(EVP_rc5_32_12_16_cbc());
  132|      2|    EVP_add_cipher_alias(SN_rc5_cbc, "rc5");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  133|      2|    EVP_add_cipher_alias(SN_rc5_cbc, "RC5");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  134|      2|#endif
  135|       |
  136|      2|    EVP_add_cipher(EVP_aes_128_ecb());
  137|      2|    EVP_add_cipher(EVP_aes_128_cbc());
  138|      2|    EVP_add_cipher(EVP_aes_128_cfb());
  ------------------
  |  |  973|      2|#define EVP_aes_128_cfb EVP_aes_128_cfb128
  ------------------
  139|      2|    EVP_add_cipher(EVP_aes_128_cfb1());
  140|      2|    EVP_add_cipher(EVP_aes_128_cfb8());
  141|      2|    EVP_add_cipher(EVP_aes_128_ofb());
  142|      2|    EVP_add_cipher(EVP_aes_128_ctr());
  143|      2|    EVP_add_cipher(EVP_aes_128_gcm());
  144|      2|#ifndef OPENSSL_NO_OCB
  145|      2|    EVP_add_cipher(EVP_aes_128_ocb());
  146|      2|#endif
  147|      2|    EVP_add_cipher(EVP_aes_128_xts());
  148|      2|    EVP_add_cipher(EVP_aes_128_ccm());
  149|      2|    EVP_add_cipher(EVP_aes_128_wrap());
  150|      2|    EVP_add_cipher_alias(SN_id_aes128_wrap, "aes128-wrap");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  151|      2|    EVP_add_cipher(EVP_aes_128_wrap_pad());
  152|      2|    EVP_add_cipher_alias(SN_id_aes128_wrap_pad, "aes128-wrap-pad");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  153|      2|    EVP_add_cipher_alias(SN_aes_128_cbc, "AES128");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  154|      2|    EVP_add_cipher_alias(SN_aes_128_cbc, "aes128");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  155|      2|    EVP_add_cipher(EVP_aes_192_ecb());
  156|      2|    EVP_add_cipher(EVP_aes_192_cbc());
  157|      2|    EVP_add_cipher(EVP_aes_192_cfb());
  ------------------
  |  |  989|      2|#define EVP_aes_192_cfb EVP_aes_192_cfb128
  ------------------
  158|      2|    EVP_add_cipher(EVP_aes_192_cfb1());
  159|      2|    EVP_add_cipher(EVP_aes_192_cfb8());
  160|      2|    EVP_add_cipher(EVP_aes_192_ofb());
  161|      2|    EVP_add_cipher(EVP_aes_192_ctr());
  162|      2|    EVP_add_cipher(EVP_aes_192_gcm());
  163|      2|#ifndef OPENSSL_NO_OCB
  164|      2|    EVP_add_cipher(EVP_aes_192_ocb());
  165|      2|#endif
  166|      2|    EVP_add_cipher(EVP_aes_192_ccm());
  167|      2|    EVP_add_cipher(EVP_aes_192_wrap());
  168|      2|    EVP_add_cipher_alias(SN_id_aes192_wrap, "aes192-wrap");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  169|      2|    EVP_add_cipher(EVP_aes_192_wrap_pad());
  170|      2|    EVP_add_cipher_alias(SN_id_aes192_wrap_pad, "aes192-wrap-pad");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  171|      2|    EVP_add_cipher_alias(SN_aes_192_cbc, "AES192");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  172|      2|    EVP_add_cipher_alias(SN_aes_192_cbc, "aes192");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  173|      2|    EVP_add_cipher(EVP_aes_256_ecb());
  174|      2|    EVP_add_cipher(EVP_aes_256_cbc());
  175|      2|    EVP_add_cipher(EVP_aes_256_cfb());
  ------------------
  |  | 1004|      2|#define EVP_aes_256_cfb EVP_aes_256_cfb128
  ------------------
  176|      2|    EVP_add_cipher(EVP_aes_256_cfb1());
  177|      2|    EVP_add_cipher(EVP_aes_256_cfb8());
  178|      2|    EVP_add_cipher(EVP_aes_256_ofb());
  179|      2|    EVP_add_cipher(EVP_aes_256_ctr());
  180|      2|    EVP_add_cipher(EVP_aes_256_gcm());
  181|      2|#ifndef OPENSSL_NO_OCB
  182|      2|    EVP_add_cipher(EVP_aes_256_ocb());
  183|      2|#endif
  184|      2|    EVP_add_cipher(EVP_aes_256_xts());
  185|      2|    EVP_add_cipher(EVP_aes_256_ccm());
  186|      2|    EVP_add_cipher(EVP_aes_256_wrap());
  187|      2|    EVP_add_cipher_alias(SN_id_aes256_wrap, "aes256-wrap");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  188|      2|    EVP_add_cipher(EVP_aes_256_wrap_pad());
  189|      2|    EVP_add_cipher_alias(SN_id_aes256_wrap_pad, "aes256-wrap-pad");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  190|      2|    EVP_add_cipher_alias(SN_aes_256_cbc, "AES256");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  191|      2|    EVP_add_cipher_alias(SN_aes_256_cbc, "aes256");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  192|      2|    EVP_add_cipher(EVP_aes_128_cbc_hmac_sha1());
  193|      2|    EVP_add_cipher(EVP_aes_256_cbc_hmac_sha1());
  194|      2|    EVP_add_cipher(EVP_aes_128_cbc_hmac_sha256());
  195|      2|    EVP_add_cipher(EVP_aes_256_cbc_hmac_sha256());
  196|      2|#ifndef OPENSSL_NO_ARIA
  197|      2|    EVP_add_cipher(EVP_aria_128_ecb());
  198|      2|    EVP_add_cipher(EVP_aria_128_cbc());
  199|      2|    EVP_add_cipher(EVP_aria_128_cfb());
  ------------------
  |  | 1025|      2|#define EVP_aria_128_cfb EVP_aria_128_cfb128
  ------------------
  200|      2|    EVP_add_cipher(EVP_aria_128_cfb1());
  201|      2|    EVP_add_cipher(EVP_aria_128_cfb8());
  202|      2|    EVP_add_cipher(EVP_aria_128_ctr());
  203|      2|    EVP_add_cipher(EVP_aria_128_ofb());
  204|      2|    EVP_add_cipher(EVP_aria_128_gcm());
  205|      2|    EVP_add_cipher(EVP_aria_128_ccm());
  206|      2|    EVP_add_cipher_alias(SN_aria_128_cbc, "ARIA128");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  207|      2|    EVP_add_cipher_alias(SN_aria_128_cbc, "aria128");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  208|      2|    EVP_add_cipher(EVP_aria_192_ecb());
  209|      2|    EVP_add_cipher(EVP_aria_192_cbc());
  210|      2|    EVP_add_cipher(EVP_aria_192_cfb());
  ------------------
  |  | 1035|      2|#define EVP_aria_192_cfb EVP_aria_192_cfb128
  ------------------
  211|      2|    EVP_add_cipher(EVP_aria_192_cfb1());
  212|      2|    EVP_add_cipher(EVP_aria_192_cfb8());
  213|      2|    EVP_add_cipher(EVP_aria_192_ctr());
  214|      2|    EVP_add_cipher(EVP_aria_192_ofb());
  215|      2|    EVP_add_cipher(EVP_aria_192_gcm());
  216|      2|    EVP_add_cipher(EVP_aria_192_ccm());
  217|      2|    EVP_add_cipher_alias(SN_aria_192_cbc, "ARIA192");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  218|      2|    EVP_add_cipher_alias(SN_aria_192_cbc, "aria192");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  219|      2|    EVP_add_cipher(EVP_aria_256_ecb());
  220|      2|    EVP_add_cipher(EVP_aria_256_cbc());
  221|      2|    EVP_add_cipher(EVP_aria_256_cfb());
  ------------------
  |  | 1045|      2|#define EVP_aria_256_cfb EVP_aria_256_cfb128
  ------------------
  222|      2|    EVP_add_cipher(EVP_aria_256_cfb1());
  223|      2|    EVP_add_cipher(EVP_aria_256_cfb8());
  224|      2|    EVP_add_cipher(EVP_aria_256_ctr());
  225|      2|    EVP_add_cipher(EVP_aria_256_ofb());
  226|      2|    EVP_add_cipher(EVP_aria_256_gcm());
  227|      2|    EVP_add_cipher(EVP_aria_256_ccm());
  228|      2|    EVP_add_cipher_alias(SN_aria_256_cbc, "ARIA256");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  229|      2|    EVP_add_cipher_alias(SN_aria_256_cbc, "aria256");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  230|      2|#endif
  231|       |
  232|      2|#ifndef OPENSSL_NO_CAMELLIA
  233|      2|    EVP_add_cipher(EVP_camellia_128_ecb());
  234|      2|    EVP_add_cipher(EVP_camellia_128_cbc());
  235|      2|    EVP_add_cipher(EVP_camellia_128_cfb());
  ------------------
  |  | 1057|      2|#define EVP_camellia_128_cfb EVP_camellia_128_cfb128
  ------------------
  236|      2|    EVP_add_cipher(EVP_camellia_128_cfb1());
  237|      2|    EVP_add_cipher(EVP_camellia_128_cfb8());
  238|      2|    EVP_add_cipher(EVP_camellia_128_ofb());
  239|      2|    EVP_add_cipher_alias(SN_camellia_128_cbc, "CAMELLIA128");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  240|      2|    EVP_add_cipher_alias(SN_camellia_128_cbc, "camellia128");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  241|      2|    EVP_add_cipher(EVP_camellia_192_ecb());
  242|      2|    EVP_add_cipher(EVP_camellia_192_cbc());
  243|      2|    EVP_add_cipher(EVP_camellia_192_cfb());
  ------------------
  |  | 1065|      2|#define EVP_camellia_192_cfb EVP_camellia_192_cfb128
  ------------------
  244|      2|    EVP_add_cipher(EVP_camellia_192_cfb1());
  245|      2|    EVP_add_cipher(EVP_camellia_192_cfb8());
  246|      2|    EVP_add_cipher(EVP_camellia_192_ofb());
  247|      2|    EVP_add_cipher_alias(SN_camellia_192_cbc, "CAMELLIA192");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  248|      2|    EVP_add_cipher_alias(SN_camellia_192_cbc, "camellia192");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  249|      2|    EVP_add_cipher(EVP_camellia_256_ecb());
  250|      2|    EVP_add_cipher(EVP_camellia_256_cbc());
  251|      2|    EVP_add_cipher(EVP_camellia_256_cfb());
  ------------------
  |  | 1073|      2|#define EVP_camellia_256_cfb EVP_camellia_256_cfb128
  ------------------
  252|      2|    EVP_add_cipher(EVP_camellia_256_cfb1());
  253|      2|    EVP_add_cipher(EVP_camellia_256_cfb8());
  254|      2|    EVP_add_cipher(EVP_camellia_256_ofb());
  255|      2|    EVP_add_cipher_alias(SN_camellia_256_cbc, "CAMELLIA256");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  256|      2|    EVP_add_cipher_alias(SN_camellia_256_cbc, "camellia256");
  ------------------
  |  |  601|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      2|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  257|      2|    EVP_add_cipher(EVP_camellia_128_ctr());
  258|      2|    EVP_add_cipher(EVP_camellia_192_ctr());
  259|      2|    EVP_add_cipher(EVP_camellia_256_ctr());
  260|      2|#endif
  261|       |
  262|      2|#ifndef OPENSSL_NO_CHACHA
  263|      2|    EVP_add_cipher(EVP_chacha20());
  264|      2|#ifndef OPENSSL_NO_POLY1305
  265|      2|    EVP_add_cipher(EVP_chacha20_poly1305());
  266|      2|#endif
  267|      2|#endif
  268|      2|}

openssl_add_all_digests_int:
   18|      2|{
   19|      2|#ifndef OPENSSL_NO_MD4
   20|      2|    EVP_add_digest(EVP_md4());
   21|      2|#endif
   22|      2|#ifndef OPENSSL_NO_MD5
   23|      2|    EVP_add_digest(EVP_md5());
   24|      2|    EVP_add_digest_alias(SN_md5, "ssl3-md5");
  ------------------
  |  |  603|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   25|      2|#define OBJ_NAME_TYPE_MD_METH 0x01
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   25|      2|    EVP_add_digest(EVP_md5_sha1());
   26|      2|#endif
   27|      2|    EVP_add_digest(EVP_sha1());
   28|      2|    EVP_add_digest_alias(SN_sha1, "ssl3-sha1");
  ------------------
  |  |  603|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   25|      2|#define OBJ_NAME_TYPE_MD_METH 0x01
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   29|      2|    EVP_add_digest_alias(SN_sha1WithRSAEncryption, SN_sha1WithRSA);
  ------------------
  |  |  603|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   25|      2|#define OBJ_NAME_TYPE_MD_METH 0x01
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   30|      2|#if !defined(OPENSSL_NO_MDC2) && !defined(OPENSSL_NO_DES)
   31|      2|    EVP_add_digest(EVP_mdc2());
   32|      2|#endif
   33|      2|#ifndef OPENSSL_NO_RMD160
   34|      2|    EVP_add_digest(EVP_ripemd160());
   35|      2|    EVP_add_digest_alias(SN_ripemd160, "ripemd");
  ------------------
  |  |  603|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   25|      2|#define OBJ_NAME_TYPE_MD_METH 0x01
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   36|      2|    EVP_add_digest_alias(SN_ripemd160, "rmd160");
  ------------------
  |  |  603|      2|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   25|      2|#define OBJ_NAME_TYPE_MD_METH 0x01
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      2|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   37|      2|#endif
   38|      2|    EVP_add_digest(EVP_sha224());
   39|      2|    EVP_add_digest(EVP_sha256());
   40|      2|    EVP_add_digest(EVP_sha384());
   41|      2|    EVP_add_digest(EVP_sha512());
   42|      2|    EVP_add_digest(EVP_sha512_224());
   43|      2|    EVP_add_digest(EVP_sha512_256());
   44|      2|#ifndef OPENSSL_NO_WHIRLPOOL
   45|      2|    EVP_add_digest(EVP_whirlpool());
   46|      2|#endif
   47|      2|#ifndef OPENSSL_NO_SM3
   48|      2|    EVP_add_digest(EVP_sm3());
   49|      2|#endif
   50|      2|#ifndef OPENSSL_NO_BLAKE2
   51|      2|    EVP_add_digest(EVP_blake2b512());
   52|      2|    EVP_add_digest(EVP_blake2s256());
   53|      2|#endif
   54|      2|    EVP_add_digest(EVP_sha3_224());
   55|      2|    EVP_add_digest(EVP_sha3_256());
   56|      2|    EVP_add_digest(EVP_sha3_384());
   57|      2|    EVP_add_digest(EVP_sha3_512());
   58|      2|    EVP_add_digest(EVP_shake128());
   59|      2|    EVP_add_digest(EVP_shake256());
   60|      2|}

EVP_aes_128_cbc:
   22|      2|    {                                                                                 \
   23|      2|        return &aes_##keylen##_##mode;                                                \
   24|      2|    }
EVP_aes_128_ecb:
   22|      2|    {                                                                                 \
   23|      2|        return &aes_##keylen##_##mode;                                                \
   24|      2|    }
EVP_aes_128_ofb:
   22|      2|    {                                                                                 \
   23|      2|        return &aes_##keylen##_##mode;                                                \
   24|      2|    }
EVP_aes_128_cfb128:
   22|      2|    {                                                                                 \
   23|      2|        return &aes_##keylen##_##mode;                                                \
   24|      2|    }
EVP_aes_128_cfb1:
   22|      2|    {                                                                                 \
   23|      2|        return &aes_##keylen##_##mode;                                                \
   24|      2|    }
EVP_aes_128_cfb8:
   22|      2|    {                                                                                 \
   23|      2|        return &aes_##keylen##_##mode;                                                \
   24|      2|    }
EVP_aes_128_ctr:
   22|      2|    {                                                                                 \
   23|      2|        return &aes_##keylen##_##mode;                                                \
   24|      2|    }
EVP_aes_192_cbc:
   22|      2|    {                                                                                 \
   23|      2|        return &aes_##keylen##_##mode;                                                \
   24|      2|    }
EVP_aes_192_ecb:
   22|      2|    {                                                                                 \
   23|      2|        return &aes_##keylen##_##mode;                                                \
   24|      2|    }
EVP_aes_192_ofb:
   22|      2|    {                                                                                 \
   23|      2|        return &aes_##keylen##_##mode;                                                \
   24|      2|    }
EVP_aes_192_cfb128:
   22|      2|    {                                                                                 \
   23|      2|        return &aes_##keylen##_##mode;                                                \
   24|      2|    }
EVP_aes_192_cfb1:
   22|      2|    {                                                                                 \
   23|      2|        return &aes_##keylen##_##mode;                                                \
   24|      2|    }
EVP_aes_192_cfb8:
   22|      2|    {                                                                                 \
   23|      2|        return &aes_##keylen##_##mode;                                                \
   24|      2|    }
EVP_aes_192_ctr:
   22|      2|    {                                                                                 \
   23|      2|        return &aes_##keylen##_##mode;                                                \
   24|      2|    }
EVP_aes_256_cbc:
   22|      2|    {                                                                                 \
   23|      2|        return &aes_##keylen##_##mode;                                                \
   24|      2|    }
EVP_aes_256_ecb:
   22|      2|    {                                                                                 \
   23|      2|        return &aes_##keylen##_##mode;                                                \
   24|      2|    }
EVP_aes_256_ofb:
   22|      2|    {                                                                                 \
   23|      2|        return &aes_##keylen##_##mode;                                                \
   24|      2|    }
EVP_aes_256_cfb128:
   22|      2|    {                                                                                 \
   23|      2|        return &aes_##keylen##_##mode;                                                \
   24|      2|    }
EVP_aes_256_cfb1:
   22|      2|    {                                                                                 \
   23|      2|        return &aes_##keylen##_##mode;                                                \
   24|      2|    }
EVP_aes_256_cfb8:
   22|      2|    {                                                                                 \
   23|      2|        return &aes_##keylen##_##mode;                                                \
   24|      2|    }
EVP_aes_256_ctr:
   22|      2|    {                                                                                 \
   23|      2|        return &aes_##keylen##_##mode;                                                \
   24|      2|    }
EVP_aes_128_gcm:
   36|      2|    {                                                                                                                      \
   37|      2|        return &aes_##keylen##_##mode;                                                                                     \
   38|      2|    }
EVP_aes_192_gcm:
   36|      2|    {                                                                                                                      \
   37|      2|        return &aes_##keylen##_##mode;                                                                                     \
   38|      2|    }
EVP_aes_256_gcm:
   36|      2|    {                                                                                                                      \
   37|      2|        return &aes_##keylen##_##mode;                                                                                     \
   38|      2|    }
EVP_aes_128_xts:
   36|      2|    {                                                                                                                      \
   37|      2|        return &aes_##keylen##_##mode;                                                                                     \
   38|      2|    }
EVP_aes_256_xts:
   36|      2|    {                                                                                                                      \
   37|      2|        return &aes_##keylen##_##mode;                                                                                     \
   38|      2|    }
EVP_aes_128_ccm:
   36|      2|    {                                                                                                                      \
   37|      2|        return &aes_##keylen##_##mode;                                                                                     \
   38|      2|    }
EVP_aes_192_ccm:
   36|      2|    {                                                                                                                      \
   37|      2|        return &aes_##keylen##_##mode;                                                                                     \
   38|      2|    }
EVP_aes_256_ccm:
   36|      2|    {                                                                                                                      \
   37|      2|        return &aes_##keylen##_##mode;                                                                                     \
   38|      2|    }
EVP_aes_128_wrap:
   89|      2|{
   90|      2|    return &aes_128_wrap;
   91|      2|}
EVP_aes_192_wrap:
   99|      2|{
  100|      2|    return &aes_192_wrap;
  101|      2|}
EVP_aes_256_wrap:
  109|      2|{
  110|      2|    return &aes_256_wrap;
  111|      2|}
EVP_aes_128_wrap_pad:
  119|      2|{
  120|      2|    return &aes_128_wrap_pad;
  121|      2|}
EVP_aes_192_wrap_pad:
  129|      2|{
  130|      2|    return &aes_192_wrap_pad;
  131|      2|}
EVP_aes_256_wrap_pad:
  139|      2|{
  140|      2|    return &aes_256_wrap_pad;
  141|      2|}
EVP_aes_128_ocb:
   36|      2|    {                                                                                                                      \
   37|      2|        return &aes_##keylen##_##mode;                                                                                     \
   38|      2|    }
EVP_aes_192_ocb:
   36|      2|    {                                                                                                                      \
   37|      2|        return &aes_##keylen##_##mode;                                                                                     \
   38|      2|    }
EVP_aes_256_ocb:
   36|      2|    {                                                                                                                      \
   37|      2|        return &aes_##keylen##_##mode;                                                                                     \
   38|      2|    }

EVP_aes_128_cbc_hmac_sha1:
   41|      2|{
   42|      2|    return (OPENSSL_ia32cap_P[1] & AESNI_CAPABLE ? &aesni_128_cbc_hmac_sha1_cipher : NULL);
  ------------------
  |  |   16|      2|#define AESNI_CAPABLE (1 << (57 - 32))
  ------------------
  |  Branch (42:13): [True: 2, False: 0]
  ------------------
   43|      2|}
EVP_aes_256_cbc_hmac_sha1:
   46|      2|{
   47|      2|    return (OPENSSL_ia32cap_P[1] & AESNI_CAPABLE ? &aesni_256_cbc_hmac_sha1_cipher : NULL);
  ------------------
  |  |   16|      2|#define AESNI_CAPABLE (1 << (57 - 32))
  ------------------
  |  Branch (47:13): [True: 2, False: 0]
  ------------------
   48|      2|}

EVP_aes_128_cbc_hmac_sha256:
   53|      2|{
   54|      2|    return ((OPENSSL_ia32cap_P[1] & AESNI_CAPABLE) && aesni_cbc_sha256_enc(NULL, NULL, 0, NULL, NULL, NULL, NULL) ? &aesni_128_cbc_hmac_sha256_cipher : NULL);
  ------------------
  |  |   24|      2|#define AESNI_CAPABLE (1 << (57 - 32))
  ------------------
  |  Branch (54:13): [True: 2, False: 0]
  |  Branch (54:55): [True: 2, False: 0]
  ------------------
   55|      2|}
EVP_aes_256_cbc_hmac_sha256:
   58|      2|{
   59|      2|    return ((OPENSSL_ia32cap_P[1] & AESNI_CAPABLE) && aesni_cbc_sha256_enc(NULL, NULL, 0, NULL, NULL, NULL, NULL) ? &aesni_256_cbc_hmac_sha256_cipher : NULL);
  ------------------
  |  |   24|      2|#define AESNI_CAPABLE (1 << (57 - 32))
  ------------------
  |  Branch (59:13): [True: 2, False: 0]
  |  Branch (59:55): [True: 2, False: 0]
  ------------------
   60|      2|}

EVP_aria_128_ctr:
   42|      2|    {                                                                                 \
   43|      2|        return &aria_##keylen##_##mode;                                               \
   44|      2|    }
EVP_aria_192_ctr:
   42|      2|    {                                                                                 \
   43|      2|        return &aria_##keylen##_##mode;                                               \
   44|      2|    }
EVP_aria_256_ctr:
   42|      2|    {                                                                                 \
   43|      2|        return &aria_##keylen##_##mode;                                               \
   44|      2|    }
EVP_aria_128_gcm:
   64|      2|    {                                                  \
   65|      2|        return (EVP_CIPHER *)&aria_##keylen##_##mode;  \
   66|      2|    }
EVP_aria_192_gcm:
   64|      2|    {                                                  \
   65|      2|        return (EVP_CIPHER *)&aria_##keylen##_##mode;  \
   66|      2|    }
EVP_aria_256_gcm:
   64|      2|    {                                                  \
   65|      2|        return (EVP_CIPHER *)&aria_##keylen##_##mode;  \
   66|      2|    }
EVP_aria_128_ccm:
   64|      2|    {                                                  \
   65|      2|        return (EVP_CIPHER *)&aria_##keylen##_##mode;  \
   66|      2|    }
EVP_aria_192_ccm:
   64|      2|    {                                                  \
   65|      2|        return (EVP_CIPHER *)&aria_##keylen##_##mode;  \
   66|      2|    }
EVP_aria_256_ccm:
   64|      2|    {                                                  \
   65|      2|        return (EVP_CIPHER *)&aria_##keylen##_##mode;  \
   66|      2|    }

EVP_camellia_128_cbc:
   22|      2|    {                                                                                 \
   23|      2|        return &camellia_##keylen##_##mode;                                           \
   24|      2|    }
EVP_camellia_128_ecb:
   22|      2|    {                                                                                 \
   23|      2|        return &camellia_##keylen##_##mode;                                           \
   24|      2|    }
EVP_camellia_128_ofb:
   22|      2|    {                                                                                 \
   23|      2|        return &camellia_##keylen##_##mode;                                           \
   24|      2|    }
EVP_camellia_128_cfb128:
   22|      2|    {                                                                                 \
   23|      2|        return &camellia_##keylen##_##mode;                                           \
   24|      2|    }
EVP_camellia_128_cfb1:
   22|      2|    {                                                                                 \
   23|      2|        return &camellia_##keylen##_##mode;                                           \
   24|      2|    }
EVP_camellia_128_cfb8:
   22|      2|    {                                                                                 \
   23|      2|        return &camellia_##keylen##_##mode;                                           \
   24|      2|    }
EVP_camellia_128_ctr:
   22|      2|    {                                                                                 \
   23|      2|        return &camellia_##keylen##_##mode;                                           \
   24|      2|    }
EVP_camellia_192_cbc:
   22|      2|    {                                                                                 \
   23|      2|        return &camellia_##keylen##_##mode;                                           \
   24|      2|    }
EVP_camellia_192_ecb:
   22|      2|    {                                                                                 \
   23|      2|        return &camellia_##keylen##_##mode;                                           \
   24|      2|    }
EVP_camellia_192_ofb:
   22|      2|    {                                                                                 \
   23|      2|        return &camellia_##keylen##_##mode;                                           \
   24|      2|    }
EVP_camellia_192_cfb128:
   22|      2|    {                                                                                 \
   23|      2|        return &camellia_##keylen##_##mode;                                           \
   24|      2|    }
EVP_camellia_192_cfb1:
   22|      2|    {                                                                                 \
   23|      2|        return &camellia_##keylen##_##mode;                                           \
   24|      2|    }
EVP_camellia_192_cfb8:
   22|      2|    {                                                                                 \
   23|      2|        return &camellia_##keylen##_##mode;                                           \
   24|      2|    }
EVP_camellia_192_ctr:
   22|      2|    {                                                                                 \
   23|      2|        return &camellia_##keylen##_##mode;                                           \
   24|      2|    }
EVP_camellia_256_cbc:
   22|      2|    {                                                                                 \
   23|      2|        return &camellia_##keylen##_##mode;                                           \
   24|      2|    }
EVP_camellia_256_ecb:
   22|      2|    {                                                                                 \
   23|      2|        return &camellia_##keylen##_##mode;                                           \
   24|      2|    }
EVP_camellia_256_ofb:
   22|      2|    {                                                                                 \
   23|      2|        return &camellia_##keylen##_##mode;                                           \
   24|      2|    }
EVP_camellia_256_cfb128:
   22|      2|    {                                                                                 \
   23|      2|        return &camellia_##keylen##_##mode;                                           \
   24|      2|    }
EVP_camellia_256_cfb1:
   22|      2|    {                                                                                 \
   23|      2|        return &camellia_##keylen##_##mode;                                           \
   24|      2|    }
EVP_camellia_256_cfb8:
   22|      2|    {                                                                                 \
   23|      2|        return &camellia_##keylen##_##mode;                                           \
   24|      2|    }
EVP_camellia_256_ctr:
   22|      2|    {                                                                                 \
   23|      2|        return &camellia_##keylen##_##mode;                                           \
   24|      2|    }

EVP_chacha20:
   27|      2|{
   28|      2|    return &chacha20;
   29|      2|}
EVP_chacha20_poly1305:
   43|      2|{
   44|      2|    return (&chacha20_poly1305);
   45|      2|}

EVP_des_ede:
   28|      2|{
   29|      2|    return &des_ede_ecb;
   30|      2|}
EVP_des_ede3:
   33|      2|{
   34|      2|    return &des_ede3_ecb;
   35|      2|}
EVP_des_ede3_wrap:
   46|      2|{
   47|      2|    return &des3_wrap;
   48|      2|}

EVP_rc2_64_cbc:
   35|      2|{
   36|      2|    return &r2_64_cbc_cipher;
   37|      2|}
EVP_rc2_40_cbc:
   40|      2|{
   41|      2|    return &r2_40_cbc_cipher;
   42|      2|}

EVP_rc4:
   30|      2|{
   31|      2|    return &r4_cipher;
   32|      2|}
EVP_rc4_40:
   35|      2|{
   36|      2|    return &r4_40_cipher;
   37|      2|}

EVP_rc4_hmac_md5:
   27|      2|{
   28|      2|    return &r4_hmac_md5_cipher;
   29|      2|}

EVP_sm4_cbc:
   24|      2|    {                                                                         \
   25|      2|        return &sm4_##mode;                                                   \
   26|      2|    }
EVP_sm4_ecb:
   24|      2|    {                                                                         \
   25|      2|        return &sm4_##mode;                                                   \
   26|      2|    }
EVP_sm4_ofb:
   24|      2|    {                                                                         \
   25|      2|        return &sm4_##mode;                                                   \
   26|      2|    }
EVP_sm4_cfb128:
   24|      2|    {                                                                         \
   25|      2|        return &sm4_##mode;                                                   \
   26|      2|    }
EVP_sm4_ctr:
   24|      2|    {                                                                         \
   25|      2|        return &sm4_##mode;                                                   \
   26|      2|    }

EVP_desx_cbc:
   23|      2|{
   24|      2|    return &d_xcbc_cipher;
   25|      2|}

ossl_err_load_EVP_strings:
  230|      2|{
  231|      2|#ifndef OPENSSL_NO_ERR
  232|      2|    if (ERR_reason_error_string(EVP_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (232:9): [True: 2, False: 0]
  ------------------
  233|      2|        ERR_load_strings_const(EVP_str_reasons);
  234|      2|#endif
  235|      2|    return 1;
  236|      2|}

EVP_blake2b512:
   23|      2|{
   24|      2|    return &blake2b_md;
   25|      2|}
EVP_blake2s256:
   37|      2|{
   38|      2|    return &blake2s_md;
   39|      2|}

EVP_md4:
   29|      2|{
   30|      2|    return &md4_md;
   31|      2|}

EVP_md5:
   29|      2|{
   30|      2|    return &md5_md;
   31|      2|}

EVP_md5_sha1:
   30|      2|{
   31|      2|    return &md5_sha1_md;
   32|      2|}

EVP_mdc2:
   29|      2|{
   30|      2|    return &mdc2_md;
   31|      2|}

EVP_ripemd160:
   29|      2|{
   30|      2|    return &ripemd160_md;
   31|      2|}

EVP_sha1:
   30|      2|{
   31|      2|    return &sha1_md;
   32|      2|}
EVP_sha224:
   44|      2|{
   45|      2|    return &sha224_md;
   46|      2|}
EVP_sha256:
   58|      2|{
   59|      2|    return &sha256_md;
   60|      2|}
EVP_sha512_224:
   72|      2|{
   73|      2|    return &sha512_224_md;
   74|      2|}
EVP_sha512_256:
   86|      2|{
   87|      2|    return &sha512_256_md;
   88|      2|}
EVP_sha384:
  100|      2|{
  101|      2|    return &sha384_md;
  102|      2|}
EVP_sha512:
  114|      2|{
  115|      2|    return &sha512_md;
  116|      2|}
EVP_sha3_224:
  120|      2|    {                                              \
  121|      2|        static const EVP_MD sha3_##bitlen##_md = { \
  122|      2|            NID_sha3_##bitlen,                     \
  ------------------
  |  | 3321|      2|#define NID_sha3_224            1096
  ------------------
  123|      2|            NID_RSA_SHA3_##bitlen,                 \
  ------------------
  |  | 3443|      2|#define NID_RSA_SHA3_224                1116
  ------------------
  124|      2|            bitlen / 8,                            \
  125|      2|            EVP_MD_FLAG_DIGALGID_ABSENT,           \
  ------------------
  |  |  147|      2|#define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008
  ------------------
  126|      2|            EVP_ORIG_GLOBAL,                       \
  ------------------
  |  |  187|      2|#define EVP_ORIG_GLOBAL 1
  ------------------
  127|      2|            (KECCAK1600_WIDTH - bitlen * 2) / 8    \
  ------------------
  |  |   18|      2|#define KECCAK1600_WIDTH 1600
  ------------------
  128|      2|        };                                         \
  129|      2|        return &sha3_##bitlen##_md;                \
  130|      2|    }
EVP_sha3_256:
  120|      2|    {                                              \
  121|      2|        static const EVP_MD sha3_##bitlen##_md = { \
  122|      2|            NID_sha3_##bitlen,                     \
  ------------------
  |  | 3326|      2|#define NID_sha3_256            1097
  ------------------
  123|      2|            NID_RSA_SHA3_##bitlen,                 \
  ------------------
  |  | 3448|      2|#define NID_RSA_SHA3_256                1117
  ------------------
  124|      2|            bitlen / 8,                            \
  125|      2|            EVP_MD_FLAG_DIGALGID_ABSENT,           \
  ------------------
  |  |  147|      2|#define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008
  ------------------
  126|      2|            EVP_ORIG_GLOBAL,                       \
  ------------------
  |  |  187|      2|#define EVP_ORIG_GLOBAL 1
  ------------------
  127|      2|            (KECCAK1600_WIDTH - bitlen * 2) / 8    \
  ------------------
  |  |   18|      2|#define KECCAK1600_WIDTH 1600
  ------------------
  128|      2|        };                                         \
  129|      2|        return &sha3_##bitlen##_md;                \
  130|      2|    }
EVP_sha3_384:
  120|      2|    {                                              \
  121|      2|        static const EVP_MD sha3_##bitlen##_md = { \
  122|      2|            NID_sha3_##bitlen,                     \
  ------------------
  |  | 3331|      2|#define NID_sha3_384            1098
  ------------------
  123|      2|            NID_RSA_SHA3_##bitlen,                 \
  ------------------
  |  | 3453|      2|#define NID_RSA_SHA3_384                1118
  ------------------
  124|      2|            bitlen / 8,                            \
  125|      2|            EVP_MD_FLAG_DIGALGID_ABSENT,           \
  ------------------
  |  |  147|      2|#define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008
  ------------------
  126|      2|            EVP_ORIG_GLOBAL,                       \
  ------------------
  |  |  187|      2|#define EVP_ORIG_GLOBAL 1
  ------------------
  127|      2|            (KECCAK1600_WIDTH - bitlen * 2) / 8    \
  ------------------
  |  |   18|      2|#define KECCAK1600_WIDTH 1600
  ------------------
  128|      2|        };                                         \
  129|      2|        return &sha3_##bitlen##_md;                \
  130|      2|    }
EVP_sha3_512:
  120|      2|    {                                              \
  121|      2|        static const EVP_MD sha3_##bitlen##_md = { \
  122|      2|            NID_sha3_##bitlen,                     \
  ------------------
  |  | 3336|      2|#define NID_sha3_512            1099
  ------------------
  123|      2|            NID_RSA_SHA3_##bitlen,                 \
  ------------------
  |  | 3458|      2|#define NID_RSA_SHA3_512                1119
  ------------------
  124|      2|            bitlen / 8,                            \
  125|      2|            EVP_MD_FLAG_DIGALGID_ABSENT,           \
  ------------------
  |  |  147|      2|#define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008
  ------------------
  126|      2|            EVP_ORIG_GLOBAL,                       \
  ------------------
  |  |  187|      2|#define EVP_ORIG_GLOBAL 1
  ------------------
  127|      2|            (KECCAK1600_WIDTH - bitlen * 2) / 8    \
  ------------------
  |  |   18|      2|#define KECCAK1600_WIDTH 1600
  ------------------
  128|      2|        };                                         \
  129|      2|        return &sha3_##bitlen##_md;                \
  130|      2|    }
EVP_shake128:
  133|      2|    {                                                      \
  134|      2|        static const EVP_MD shake##bitlen##_md = {         \
  135|      2|            NID_shake##bitlen,                             \
  ------------------
  |  | 3341|      2|#define NID_shake128            1100
  ------------------
  136|      2|            0,                                             \
  137|      2|            bitlen / 8,                                    \
  138|      2|            EVP_MD_FLAG_XOF | EVP_MD_FLAG_DIGALGID_ABSENT, \
  ------------------
  |  |  135|      2|#define EVP_MD_FLAG_XOF 0x0002
  ------------------
                          EVP_MD_FLAG_XOF | EVP_MD_FLAG_DIGALGID_ABSENT, \
  ------------------
  |  |  147|      2|#define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008
  ------------------
  139|      2|            EVP_ORIG_GLOBAL,                               \
  ------------------
  |  |  187|      2|#define EVP_ORIG_GLOBAL 1
  ------------------
  140|      2|            (KECCAK1600_WIDTH - bitlen * 2) / 8            \
  ------------------
  |  |   18|      2|#define KECCAK1600_WIDTH 1600
  ------------------
  141|      2|        };                                                 \
  142|      2|        return &shake##bitlen##_md;                        \
  143|      2|    }
EVP_shake256:
  133|      2|    {                                                      \
  134|      2|        static const EVP_MD shake##bitlen##_md = {         \
  135|      2|            NID_shake##bitlen,                             \
  ------------------
  |  | 3346|      2|#define NID_shake256            1101
  ------------------
  136|      2|            0,                                             \
  137|      2|            bitlen / 8,                                    \
  138|      2|            EVP_MD_FLAG_XOF | EVP_MD_FLAG_DIGALGID_ABSENT, \
  ------------------
  |  |  135|      2|#define EVP_MD_FLAG_XOF 0x0002
  ------------------
                          EVP_MD_FLAG_XOF | EVP_MD_FLAG_DIGALGID_ABSENT, \
  ------------------
  |  |  147|      2|#define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008
  ------------------
  139|      2|            EVP_ORIG_GLOBAL,                               \
  ------------------
  |  |  187|      2|#define EVP_ORIG_GLOBAL 1
  ------------------
  140|      2|            (KECCAK1600_WIDTH - bitlen * 2) / 8            \
  ------------------
  |  |   18|      2|#define KECCAK1600_WIDTH 1600
  ------------------
  141|      2|        };                                                 \
  142|      2|        return &shake##bitlen##_md;                        \
  143|      2|    }

EVP_whirlpool:
   29|      2|{
   30|      2|    return &whirlpool_md;
   31|      2|}

EVP_add_cipher:
   20|    288|{
   21|    288|    int r;
   22|       |
   23|    288|    if (c == NULL)
  ------------------
  |  Branch (23:9): [True: 0, False: 288]
  ------------------
   24|      0|        return 0;
   25|       |
   26|    288|    r = OBJ_NAME_add(OBJ_nid2sn(c->nid), OBJ_NAME_TYPE_CIPHER_METH,
  ------------------
  |  |   26|    288|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  ------------------
   27|    288|        (const char *)c);
   28|    288|    if (r == 0)
  ------------------
  |  Branch (28:9): [True: 0, False: 288]
  ------------------
   29|      0|        return 0;
   30|    288|    r = OBJ_NAME_add(OBJ_nid2ln(c->nid), OBJ_NAME_TYPE_CIPHER_METH,
  ------------------
  |  |   26|    288|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  ------------------
   31|    288|        (const char *)c);
   32|    288|    return r;
   33|    288|}
EVP_add_digest:
   36|     44|{
   37|     44|    int r;
   38|     44|    const char *name;
   39|       |
   40|     44|    name = OBJ_nid2sn(md->type);
   41|     44|    r = OBJ_NAME_add(name, OBJ_NAME_TYPE_MD_METH, (const char *)md);
  ------------------
  |  |   25|     44|#define OBJ_NAME_TYPE_MD_METH 0x01
  ------------------
   42|     44|    if (r == 0)
  ------------------
  |  Branch (42:9): [True: 0, False: 44]
  ------------------
   43|      0|        return 0;
   44|     44|    r = OBJ_NAME_add(OBJ_nid2ln(md->type), OBJ_NAME_TYPE_MD_METH,
  ------------------
  |  |   25|     44|#define OBJ_NAME_TYPE_MD_METH 0x01
  ------------------
   45|     44|        (const char *)md);
   46|     44|    if (r == 0)
  ------------------
  |  Branch (46:9): [True: 0, False: 44]
  ------------------
   47|      0|        return 0;
   48|       |
   49|     44|    if (md->pkey_type && md->type != md->pkey_type) {
  ------------------
  |  Branch (49:9): [True: 34, False: 10]
  |  Branch (49:26): [True: 32, False: 2]
  ------------------
   50|     32|        r = OBJ_NAME_add(OBJ_nid2sn(md->pkey_type),
   51|     32|            OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, name);
  ------------------
  |  |   25|     32|#define OBJ_NAME_TYPE_MD_METH 0x01
  ------------------
                          OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, name);
  ------------------
  |  |   33|     32|#define OBJ_NAME_ALIAS 0x8000
  ------------------
   52|     32|        if (r == 0)
  ------------------
  |  Branch (52:13): [True: 0, False: 32]
  ------------------
   53|      0|            return 0;
   54|     32|        r = OBJ_NAME_add(OBJ_nid2ln(md->pkey_type),
   55|     32|            OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, name);
  ------------------
  |  |   25|     32|#define OBJ_NAME_TYPE_MD_METH 0x01
  ------------------
                          OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, name);
  ------------------
  |  |   33|     32|#define OBJ_NAME_ALIAS 0x8000
  ------------------
   56|     32|    }
   57|     44|    return r;
   58|     44|}

ossl_do_ex_data_init:
   15|      2|{
   16|      2|    OSSL_EX_DATA_GLOBAL *global = ossl_lib_ctx_get_ex_data_global(ctx);
   17|       |
   18|      2|    if (global == NULL)
  ------------------
  |  Branch (18:9): [True: 0, False: 2]
  ------------------
   19|      0|        return 0;
   20|       |
   21|      2|    global->ex_data_lock = CRYPTO_THREAD_lock_new();
   22|       |    return global->ex_data_lock != NULL;
   23|      2|}

ossl_safe_getenv:
   19|      2|{
   20|       |#if defined(_WIN32) && defined(CP_UTF8) && !defined(_WIN32_WCE)
   21|       |    if (GetEnvironmentVariableW(L"OPENSSL_WIN32_UTF8", NULL, 0) != 0) {
   22|       |        char *val = NULL;
   23|       |        int vallen = 0;
   24|       |        WCHAR *namew = NULL;
   25|       |        WCHAR *valw = NULL;
   26|       |        DWORD envlen = 0;
   27|       |        DWORD dwFlags = MB_ERR_INVALID_CHARS;
   28|       |        int rsize, fsize;
   29|       |        UINT curacp;
   30|       |
   31|       |        curacp = GetACP();
   32|       |
   33|       |        /*
   34|       |         * For the code pages listed below, dwFlags must be set to 0.
   35|       |         * Otherwise, the function fails with ERROR_INVALID_FLAGS.
   36|       |         */
   37|       |        if (curacp == 50220 || curacp == 50221 || curacp == 50222 || curacp == 50225 || curacp == 50227 || curacp == 50229 || (57002 <= curacp && curacp <= 57011) || curacp == 65000 || curacp == 42)
   38|       |            dwFlags = 0;
   39|       |
   40|       |        /* query for buffer len */
   41|       |        rsize = MultiByteToWideChar(curacp, dwFlags, name, -1, NULL, 0);
   42|       |        /* if name is valid string and can be converted to wide string */
   43|       |        if (rsize > 0)
   44|       |            namew = _malloca(rsize * sizeof(WCHAR));
   45|       |
   46|       |        if (NULL != namew) {
   47|       |            /* convert name to wide string */
   48|       |            fsize = MultiByteToWideChar(curacp, dwFlags, name, -1, namew, rsize);
   49|       |            /* if conversion is ok, then determine value string size in wchars */
   50|       |            if (fsize > 0)
   51|       |                envlen = GetEnvironmentVariableW(namew, NULL, 0);
   52|       |        }
   53|       |
   54|       |        if (envlen > 0)
   55|       |            valw = _malloca(envlen * sizeof(WCHAR));
   56|       |
   57|       |        if (NULL != valw) {
   58|       |            /* if can get env value as wide string */
   59|       |            if (GetEnvironmentVariableW(namew, valw, envlen) < envlen) {
   60|       |                /* determine value string size in utf-8 */
   61|       |                vallen = WideCharToMultiByte(CP_UTF8, 0, valw, -1, NULL, 0,
   62|       |                    NULL, NULL);
   63|       |            }
   64|       |        }
   65|       |
   66|       |        if (vallen > 0)
   67|       |            val = OPENSSL_malloc(vallen);
   68|       |
   69|       |        if (NULL != val) {
   70|       |            /* convert value string from wide to utf-8 */
   71|       |            if (WideCharToMultiByte(CP_UTF8, 0, valw, -1, val, vallen,
   72|       |                    NULL, NULL)
   73|       |                == 0) {
   74|       |                OPENSSL_free(val);
   75|       |                val = NULL;
   76|       |            }
   77|       |        }
   78|       |
   79|       |        if (NULL != namew)
   80|       |            _freea(namew);
   81|       |
   82|       |        if (NULL != valw)
   83|       |            _freea(valw);
   84|       |
   85|       |        return val;
   86|       |    }
   87|       |#endif
   88|       |
   89|      2|#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
   90|      2|#if __GLIBC_PREREQ(2, 17)
   91|      2|#define SECURE_GETENV
   92|      2|    return secure_getenv(name);
   93|      2|#endif
   94|      2|#endif
   95|       |
   96|       |#ifndef SECURE_GETENV
   97|       |    if (OPENSSL_issetugid())
   98|       |        return NULL;
   99|       |    return getenv(name);
  100|       |#endif
  101|      2|}

ossl_ht_new:
  185|      2|{
  186|      2|    HT *new = OPENSSL_zalloc(sizeof(*new));
  ------------------
  |  |  109|      2|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  187|       |
  188|      2|    if (new == NULL)
  ------------------
  |  Branch (188:9): [True: 0, False: 2]
  ------------------
  189|      0|        return NULL;
  190|       |
  191|      2|    if (conf->lockless_reads && conf->no_rcu)
  ------------------
  |  Branch (191:9): [True: 2, False: 0]
  |  Branch (191:33): [True: 0, False: 2]
  ------------------
  192|      0|        goto err;
  193|       |
  194|      2|    if (!conf->no_rcu) {
  ------------------
  |  Branch (194:9): [True: 2, False: 0]
  ------------------
  195|      2|        new->atomic_lock = CRYPTO_THREAD_lock_new();
  196|      2|        if (new->atomic_lock == NULL)
  ------------------
  |  Branch (196:13): [True: 0, False: 2]
  ------------------
  197|      0|            goto err;
  198|      2|    }
  199|      2|    memcpy(&new->config, conf, sizeof(*conf));
  200|       |
  201|      2|    if (new->config.init_neighborhoods != 0) {
  ------------------
  |  Branch (201:9): [True: 2, False: 0]
  ------------------
  202|      2|        new->wpd.neighborhood_len = new->config.init_neighborhoods;
  203|       |        /* round up to the next power of 2 */
  204|      2|        new->wpd.neighborhood_len--;
  205|      2|        new->wpd.neighborhood_len |= new->wpd.neighborhood_len >> 1;
  206|      2|        new->wpd.neighborhood_len |= new->wpd.neighborhood_len >> 2;
  207|      2|        new->wpd.neighborhood_len |= new->wpd.neighborhood_len >> 4;
  208|      2|        new->wpd.neighborhood_len |= new->wpd.neighborhood_len >> 8;
  209|      2|        new->wpd.neighborhood_len |= new->wpd.neighborhood_len >> 16;
  210|      2|        new->wpd.neighborhood_len++;
  211|      2|    } else {
  212|      0|        new->wpd.neighborhood_len = DEFAULT_NEIGH_LEN;
  ------------------
  |  |   96|      0|#define DEFAULT_NEIGH_LEN (1 << DEFAULT_NEIGH_LEN_LOG)
  |  |  ------------------
  |  |  |  |   95|      0|#define DEFAULT_NEIGH_LEN_LOG 4
  |  |  ------------------
  ------------------
  213|      0|    }
  214|       |
  215|      2|    if (new->config.ht_free_fn == NULL)
  ------------------
  |  Branch (215:9): [True: 2, False: 0]
  ------------------
  216|      2|        new->config.ht_free_fn = internal_free_nop;
  217|       |
  218|      2|    new->md = OPENSSL_zalloc(sizeof(*new->md));
  ------------------
  |  |  109|      2|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  219|      2|    if (new->md == NULL)
  ------------------
  |  Branch (219:9): [True: 0, False: 2]
  ------------------
  220|      0|        goto err;
  221|       |
  222|      2|    new->md->neighborhoods = alloc_new_neighborhood_list(new->wpd.neighborhood_len,
  223|      2|        &new->md->neighborhood_ptr_to_free);
  224|      2|    if (new->md->neighborhoods == NULL)
  ------------------
  |  Branch (224:9): [True: 0, False: 2]
  ------------------
  225|      0|        goto err;
  226|      2|    new->md->neighborhood_mask = new->wpd.neighborhood_len - 1;
  227|       |
  228|      2|    if (!conf->no_rcu) {
  ------------------
  |  Branch (228:9): [True: 2, False: 0]
  ------------------
  229|      2|        new->lock = ossl_rcu_lock_new(1, conf->ctx);
  230|      2|        if (new->lock == NULL)
  ------------------
  |  Branch (230:13): [True: 0, False: 2]
  ------------------
  231|      0|            goto err;
  232|      2|    }
  233|      2|    if (new->config.ht_hash_fn == NULL)
  ------------------
  |  Branch (233:9): [True: 2, False: 0]
  ------------------
  234|      2|        new->config.ht_hash_fn = internal_ht_hash_fn;
  235|       |
  236|      2|    return new;
  237|       |
  238|      0|err:
  239|      0|    if (!conf->no_rcu) {
  ------------------
  |  Branch (239:9): [True: 0, False: 0]
  ------------------
  240|      0|        CRYPTO_THREAD_lock_free(new->atomic_lock);
  241|      0|        ossl_rcu_lock_free(new->lock);
  242|      0|    }
  243|      0|    if (new->md != NULL)
  ------------------
  |  Branch (243:9): [True: 0, False: 0]
  ------------------
  244|      0|        OPENSSL_free(new->md->neighborhood_ptr_to_free);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  245|      0|    OPENSSL_free(new->md);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  246|      0|    OPENSSL_free(new);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  247|       |    return NULL;
  248|      2|}
hashtable.c:alloc_new_neighborhood_list:
  155|      2|{
  156|      2|    struct ht_neighborhood_st *ret;
  157|       |
  158|      2|#if !defined(OPENSSL_SMALL_FOOTPRINT)
  159|      2|    ret = OPENSSL_aligned_alloc_array(len, sizeof(struct ht_neighborhood_st),
  ------------------
  |  |  118|      2|    CRYPTO_aligned_alloc_array(num, size, alignment, freeptr,      \
  |  |  119|      2|        OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  160|      2|        CACHE_LINE_BYTES, freeptr);
  161|       |
  162|       |    /* fall back to regular malloc */
  163|      2|    if (ret == NULL)
  ------------------
  |  Branch (163:9): [True: 0, False: 2]
  ------------------
  164|      0|#endif
  165|      0|    {
  166|      0|        ret = *freeptr = OPENSSL_malloc_array(len, sizeof(struct ht_neighborhood_st));
  ------------------
  |  |  111|      0|    CRYPTO_malloc_array(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc_array(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  167|      0|        if (ret == NULL)
  ------------------
  |  Branch (167:13): [True: 0, False: 0]
  ------------------
  168|      0|            return NULL;
  169|      0|    }
  170|      2|    memset(ret, 0, sizeof(struct ht_neighborhood_st) * len);
  171|      2|    return ret;
  172|      2|}

ossl_err_load_HTTP_strings:
   82|      2|{
   83|      2|#ifndef OPENSSL_NO_ERR
   84|      2|    if (ERR_reason_error_string(HTTP_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (84:9): [True: 2, False: 0]
  ------------------
   85|      2|        ERR_load_strings_const(HTTP_str_reasons);
   86|      2|#endif
   87|      2|    return 1;
   88|      2|}

ossl_indicator_set_callback_new:
   21|      2|{
   22|      2|    INDICATOR_CB *cb;
   23|       |
   24|      2|    cb = OPENSSL_zalloc(sizeof(*cb));
  ------------------
  |  |  109|      2|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   25|      2|    return cb;
   26|      2|}

OPENSSL_init_crypto:
  349|     36|{
  350|     36|    uint64_t tmp;
  351|     36|    int aloaddone = 0;
  352|       |
  353|       |    /* Applications depend on 0 being returned when cleanup was already done */
  354|     36|    if (ossl_unlikely(stopped)) {
  ------------------
  |  |   23|     36|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 36]
  |  |  ------------------
  ------------------
  355|      0|        if (!(opts & OPENSSL_INIT_BASE_ONLY))
  ------------------
  |  |   31|      0|#define OPENSSL_INIT_BASE_ONLY 0x00040000L
  ------------------
  |  Branch (355:13): [True: 0, False: 0]
  ------------------
  356|      0|            ERR_raise(ERR_LIB_CRYPTO, ERR_R_INIT_FAIL);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  357|      0|        return 0;
  358|      0|    }
  359|       |
  360|       |    /*
  361|       |     * We ignore failures from this function. It is probably because we are
  362|       |     * on a platform that doesn't support lockless atomic loads (we may not
  363|       |     * have created optsdone_lock yet so we can't use it). This is just an
  364|       |     * optimisation to skip the full checks in this function if we don't need
  365|       |     * to, so we carry on regardless in the event of failure.
  366|       |     *
  367|       |     * There could be a race here with other threads, so that optsdone has not
  368|       |     * been updated yet, even though the options have in fact been initialised.
  369|       |     * This doesn't matter - it just means we will run the full function
  370|       |     * unnecessarily - but all the critical code is contained in RUN_ONCE
  371|       |     * functions anyway so we are safe.
  372|       |     */
  373|     36|    if (ossl_likely(CRYPTO_atomic_load(&optsdone, &tmp, NULL))) {
  ------------------
  |  |   22|     36|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 36, False: 0]
  |  |  ------------------
  ------------------
  374|     36|        if ((tmp & opts) == opts)
  ------------------
  |  Branch (374:13): [True: 0, False: 36]
  ------------------
  375|      0|            return 1;
  376|     36|        aloaddone = 1;
  377|     36|    }
  378|       |
  379|       |    /*
  380|       |     * At some point we should look at this function with a view to moving
  381|       |     * most/all of this into OSSL_LIB_CTX.
  382|       |     *
  383|       |     * When the caller specifies OPENSSL_INIT_BASE_ONLY, that should be the
  384|       |     * *only* option specified.  With that option we return immediately after
  385|       |     * doing the requested limited initialization.
  386|       |     *
  387|       |     * If we remain the only caller of err_shelve_state() the recursion should
  388|       |     * perhaps be removed, but if in doubt, it can be left in place.
  389|       |     */
  390|     36|    if (ossl_unlikely(!RUN_ONCE(&base, ossl_init_base)))
  ------------------
  |  |   23|     72|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 36]
  |  |  |  Branch (23:46): [True: 36, False: 0]
  |  |  ------------------
  ------------------
  391|      0|        return 0;
  392|       |
  393|     36|    if (opts & OPENSSL_INIT_BASE_ONLY)
  ------------------
  |  |   31|     36|#define OPENSSL_INIT_BASE_ONLY 0x00040000L
  ------------------
  |  Branch (393:9): [True: 32, False: 4]
  ------------------
  394|     32|        return 1;
  395|       |
  396|       |    /*
  397|       |     * optsdone_lock should definitely be set up now, so we can now repeat the
  398|       |     * same check from above but be sure that it will work even on platforms
  399|       |     * without lockless CRYPTO_atomic_load
  400|       |     */
  401|      4|    if (!aloaddone) {
  ------------------
  |  Branch (401:9): [True: 0, False: 4]
  ------------------
  402|      0|        if (!CRYPTO_atomic_load(&optsdone, &tmp, optsdone_lock))
  ------------------
  |  Branch (402:13): [True: 0, False: 0]
  ------------------
  403|      0|            return 0;
  404|      0|        if ((tmp & opts) == opts)
  ------------------
  |  Branch (404:13): [True: 0, False: 0]
  ------------------
  405|      0|            return 1;
  406|      0|    }
  407|       |
  408|      4|    if ((opts & OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS)
  ------------------
  |  |  505|      4|#define OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS 0x00000001L
  ------------------
  |  Branch (408:9): [True: 0, False: 4]
  ------------------
  409|      0|        && !RUN_ONCE_ALT(&load_crypto_strings,
  ------------------
  |  |  148|      0|    (CRYPTO_THREAD_run_once(once, initalt##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (148:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (409:12): [True: 0, False: 0]
  ------------------
  410|      4|            ossl_init_no_load_crypto_strings,
  411|      4|            ossl_init_load_crypto_strings))
  412|      0|        return 0;
  413|       |
  414|      4|    if ((opts & OPENSSL_INIT_LOAD_CRYPTO_STRINGS)
  ------------------
  |  |  506|      4|#define OPENSSL_INIT_LOAD_CRYPTO_STRINGS 0x00000002L
  ------------------
  |  Branch (414:9): [True: 2, False: 2]
  ------------------
  415|      2|        && !RUN_ONCE(&load_crypto_strings, ossl_init_load_crypto_strings))
  ------------------
  |  |  130|      2|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (415:12): [True: 0, False: 2]
  ------------------
  416|      0|        return 0;
  417|       |
  418|      4|    if ((opts & OPENSSL_INIT_NO_LOAD_SSL_STRINGS)
  ------------------
  |  | 2817|      4|#define OPENSSL_INIT_NO_LOAD_SSL_STRINGS 0x00100000L
  ------------------
  |  Branch (418:9): [True: 0, False: 4]
  ------------------
  419|      0|        && !RUN_ONCE_ALT(&ssl_strings, ossl_init_no_load_ssl_strings,
  ------------------
  |  |  148|      0|    (CRYPTO_THREAD_run_once(once, initalt##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (148:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (419:12): [True: 0, False: 0]
  ------------------
  420|      4|            ossl_init_load_ssl_strings))
  421|      0|        return 0;
  422|       |
  423|      4|    if ((opts & OPENSSL_INIT_LOAD_SSL_STRINGS)
  ------------------
  |  | 2818|      4|#define OPENSSL_INIT_LOAD_SSL_STRINGS 0x00200000L
  ------------------
  |  Branch (423:9): [True: 0, False: 4]
  ------------------
  424|      0|        && !RUN_ONCE(&ssl_strings, ossl_init_load_ssl_strings))
  ------------------
  |  |  130|      0|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (424:12): [True: 0, False: 0]
  ------------------
  425|      0|        return 0;
  426|       |
  427|      4|    if ((opts & OPENSSL_INIT_NO_ADD_ALL_CIPHERS)
  ------------------
  |  |  509|      4|#define OPENSSL_INIT_NO_ADD_ALL_CIPHERS 0x00000010L
  ------------------
  |  Branch (427:9): [True: 0, False: 4]
  ------------------
  428|      0|        && !RUN_ONCE_ALT(&add_all_ciphers, ossl_init_no_add_all_ciphers,
  ------------------
  |  |  148|      0|    (CRYPTO_THREAD_run_once(once, initalt##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (148:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (428:12): [True: 0, False: 0]
  ------------------
  429|      4|            ossl_init_add_all_ciphers))
  430|      0|        return 0;
  431|       |
  432|      4|    if ((opts & OPENSSL_INIT_ADD_ALL_CIPHERS)
  ------------------
  |  |  507|      4|#define OPENSSL_INIT_ADD_ALL_CIPHERS 0x00000004L
  ------------------
  |  Branch (432:9): [True: 2, False: 2]
  ------------------
  433|      2|        && !RUN_ONCE(&add_all_ciphers, ossl_init_add_all_ciphers))
  ------------------
  |  |  130|      2|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (433:12): [True: 0, False: 2]
  ------------------
  434|      0|        return 0;
  435|       |
  436|      4|    if ((opts & OPENSSL_INIT_NO_ADD_ALL_DIGESTS)
  ------------------
  |  |  510|      4|#define OPENSSL_INIT_NO_ADD_ALL_DIGESTS 0x00000020L
  ------------------
  |  Branch (436:9): [True: 0, False: 4]
  ------------------
  437|      0|        && !RUN_ONCE_ALT(&add_all_digests, ossl_init_no_add_all_digests,
  ------------------
  |  |  148|      0|    (CRYPTO_THREAD_run_once(once, initalt##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (148:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (437:12): [True: 0, False: 0]
  ------------------
  438|      4|            ossl_init_add_all_digests))
  439|      0|        return 0;
  440|       |
  441|      4|    if ((opts & OPENSSL_INIT_ADD_ALL_DIGESTS)
  ------------------
  |  |  508|      4|#define OPENSSL_INIT_ADD_ALL_DIGESTS 0x00000008L
  ------------------
  |  Branch (441:9): [True: 2, False: 2]
  ------------------
  442|      2|        && !RUN_ONCE(&add_all_digests, ossl_init_add_all_digests))
  ------------------
  |  |  130|      2|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (442:12): [True: 0, False: 2]
  ------------------
  443|      0|        return 0;
  444|       |
  445|      4|    if ((opts & OPENSSL_INIT_ATFORK)
  ------------------
  |  |  515|      4|#define OPENSSL_INIT_ATFORK 0x00020000L
  ------------------
  |  Branch (445:9): [True: 0, False: 4]
  ------------------
  446|      0|        && !openssl_init_fork_handlers())
  ------------------
  |  Branch (446:12): [True: 0, False: 0]
  ------------------
  447|      0|        return 0;
  448|       |
  449|      4|    if ((opts & OPENSSL_INIT_NO_LOAD_CONFIG)
  ------------------
  |  |  512|      4|#define OPENSSL_INIT_NO_LOAD_CONFIG 0x00000080L
  ------------------
  |  Branch (449:9): [True: 0, False: 4]
  ------------------
  450|      0|        && !RUN_ONCE_ALT(&config, ossl_init_no_config, ossl_init_config))
  ------------------
  |  |  148|      0|    (CRYPTO_THREAD_run_once(once, initalt##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (148:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (450:12): [True: 0, False: 0]
  ------------------
  451|      0|        return 0;
  452|       |
  453|      4|    if (opts & OPENSSL_INIT_LOAD_CONFIG) {
  ------------------
  |  |  511|      4|#define OPENSSL_INIT_LOAD_CONFIG 0x00000040L
  ------------------
  |  Branch (453:9): [True: 2, False: 2]
  ------------------
  454|      2|        int loading = CRYPTO_THREAD_get_local(&in_init_config_local) != NULL;
  455|       |
  456|       |        /* If called recursively from OBJ_ calls, just skip it. */
  457|      2|        if (!loading) {
  ------------------
  |  Branch (457:13): [True: 2, False: 0]
  ------------------
  458|      2|            int ret;
  459|       |
  460|      2|            if (!CRYPTO_THREAD_set_local(&in_init_config_local, (void *)-1))
  ------------------
  |  Branch (460:17): [True: 0, False: 2]
  ------------------
  461|      0|                return 0;
  462|      2|            if (settings == NULL) {
  ------------------
  |  Branch (462:17): [True: 2, False: 0]
  ------------------
  463|      2|                ret = RUN_ONCE(&config, ossl_init_config);
  ------------------
  |  |  130|      2|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  464|      2|            } else {
  465|      0|                if (!CRYPTO_THREAD_write_lock(init_lock))
  ------------------
  |  Branch (465:21): [True: 0, False: 0]
  ------------------
  466|      0|                    return 0;
  467|      0|                conf_settings = settings;
  468|      0|                ret = RUN_ONCE_ALT(&config, ossl_init_config_settings,
  ------------------
  |  |  148|      0|    (CRYPTO_THREAD_run_once(once, initalt##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (148:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  469|      0|                    ossl_init_config);
  470|      0|                conf_settings = NULL;
  471|      0|                CRYPTO_THREAD_unlock(init_lock);
  472|      0|            }
  473|       |
  474|      2|            if (ret <= 0)
  ------------------
  |  Branch (474:17): [True: 0, False: 2]
  ------------------
  475|      0|                return 0;
  476|      2|        }
  477|      2|    }
  478|       |
  479|      4|    if ((opts & OPENSSL_INIT_ASYNC)
  ------------------
  |  |  513|      4|#define OPENSSL_INIT_ASYNC 0x00000100L
  ------------------
  |  Branch (479:9): [True: 0, False: 4]
  ------------------
  480|      0|        && !RUN_ONCE(&async, ossl_init_async))
  ------------------
  |  |  130|      0|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (480:12): [True: 0, False: 0]
  ------------------
  481|      0|        return 0;
  482|       |
  483|      4|    if (!CRYPTO_atomic_or(&optsdone, opts, &tmp, optsdone_lock))
  ------------------
  |  Branch (483:9): [True: 0, False: 4]
  ------------------
  484|      0|        return 0;
  485|       |
  486|      4|    return 1;
  487|      4|}
init.c:ossl_init_base:
   53|      2|{
   54|       |    /* no need to init trace */
   55|       |
   56|      2|    OSSL_TRACE(INIT, "ossl_init_base: setting up stop handlers\n");
  ------------------
  |  |  288|      2|    OSSL_TRACEV(category, (trc_out, "%s", text))
  |  |  ------------------
  |  |  |  |  283|      2|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
   57|       |#ifndef OPENSSL_NO_CRYPTO_MDEBUG
   58|       |    ossl_malloc_setup_failures();
   59|       |#endif
   60|       |
   61|      2|    if ((optsdone_lock = CRYPTO_THREAD_lock_new()) == NULL
  ------------------
  |  Branch (61:9): [True: 0, False: 2]
  ------------------
   62|      2|        || (init_lock = CRYPTO_THREAD_lock_new()) == NULL)
  ------------------
  |  Branch (62:12): [True: 0, False: 2]
  ------------------
   63|      0|        goto err;
   64|       |
   65|      2|    OPENSSL_cpuid_setup();
   66|       |
   67|      2|    if (!ossl_init_thread())
  ------------------
  |  Branch (67:9): [True: 0, False: 2]
  ------------------
   68|      0|        goto err;
   69|       |
   70|      2|    if (!CRYPTO_THREAD_init_local(&in_init_config_local, NULL))
  ------------------
  |  Branch (70:9): [True: 0, False: 2]
  ------------------
   71|      0|        goto err;
   72|       |
   73|      2|    base_inited = 1;
   74|      2|    return 1;
   75|       |
   76|      0|err:
   77|      0|    OSSL_TRACE(INIT, "ossl_init_base failed!\n");
  ------------------
  |  |  288|      0|    OSSL_TRACEV(category, (trc_out, "%s", text))
  |  |  ------------------
  |  |  |  |  283|      0|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
   78|      0|    CRYPTO_THREAD_lock_free(optsdone_lock);
   79|      0|    optsdone_lock = NULL;
   80|      0|    CRYPTO_THREAD_lock_free(init_lock);
   81|      0|    init_lock = NULL;
   82|       |
   83|      0|    return 0;
   84|      2|}
init.c:ossl_init_load_crypto_strings:
   89|      2|{
   90|      2|    int ret = 1;
   91|       |    /*
   92|       |     * OPENSSL_NO_AUTOERRINIT is provided here to prevent at compile time
   93|       |     * pulling in all the error strings during static linking
   94|       |     */
   95|      2|#if !defined(OPENSSL_NO_ERR) && !defined(OPENSSL_NO_AUTOERRINIT)
   96|      2|    void *err;
   97|       |
   98|      2|    if (!err_shelve_state(&err))
  ------------------
  |  Branch (98:9): [True: 0, False: 2]
  ------------------
   99|      0|        return 0;
  100|       |
  101|      2|    OSSL_TRACE(INIT, "ossl_err_load_crypto_strings()\n");
  ------------------
  |  |  288|      2|    OSSL_TRACEV(category, (trc_out, "%s", text))
  |  |  ------------------
  |  |  |  |  283|      2|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
  102|      2|    ret = ossl_err_load_crypto_strings();
  103|       |
  104|      2|    err_unshelve_state(err);
  105|      2|#endif
  106|      2|    return ret;
  107|      2|}
init.c:ossl_init_add_all_ciphers:
  140|      2|{
  141|       |    /*
  142|       |     * OPENSSL_NO_AUTOALGINIT is provided here to prevent at compile time
  143|       |     * pulling in all the ciphers during static linking
  144|       |     */
  145|      2|#ifndef OPENSSL_NO_AUTOALGINIT
  146|      2|    OSSL_TRACE(INIT, "openssl_add_all_ciphers_int()\n");
  ------------------
  |  |  288|      2|    OSSL_TRACEV(category, (trc_out, "%s", text))
  |  |  ------------------
  |  |  |  |  283|      2|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
  147|      2|    openssl_add_all_ciphers_int();
  148|      2|#endif
  149|      2|    return 1;
  150|      2|}
init.c:ossl_init_add_all_digests:
  161|      2|{
  162|       |    /*
  163|       |     * OPENSSL_NO_AUTOALGINIT is provided here to prevent at compile time
  164|       |     * pulling in all the ciphers during static linking
  165|       |     */
  166|      2|#ifndef OPENSSL_NO_AUTOALGINIT
  167|      2|    OSSL_TRACE(INIT, "openssl_add_all_digests()\n");
  ------------------
  |  |  288|      2|    OSSL_TRACEV(category, (trc_out, "%s", text))
  |  |  ------------------
  |  |  |  |  283|      2|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
  168|      2|    openssl_add_all_digests_int();
  169|      2|#endif
  170|      2|    return 1;
  171|      2|}
init.c:ossl_init_config:
  183|      2|{
  184|      2|    int ret = ossl_config_int(NULL);
  185|       |
  186|      2|    return ret;
  187|      2|}

ossl_init_thread:
  240|      2|{
  241|      2|    if (!CRYPTO_THREAD_init_local(&destructor_key.value,
  ------------------
  |  Branch (241:9): [True: 0, False: 2]
  ------------------
  242|      2|            init_thread_destructor))
  243|      0|        return 0;
  244|       |
  245|      2|    return 1;
  246|      2|}
ossl_init_thread_start:
  392|      2|{
  393|      2|    THREAD_EVENT_HANDLER **hands;
  394|      2|    THREAD_EVENT_HANDLER *hand;
  395|      2|    OSSL_LIB_CTX *ctx = NULL;
  396|       |#ifdef FIPS_MODULE
  397|       |    /*
  398|       |     * In FIPS mode the list of THREAD_EVENT_HANDLERs is unique per combination
  399|       |     * of OSSL_LIB_CTX and thread. This is because in FIPS mode each
  400|       |     * OSSL_LIB_CTX gets informed about thread stop events individually.
  401|       |     */
  402|       |
  403|       |    ctx = arg;
  404|       |#endif
  405|       |
  406|      2|    hands = alloc_thread_local(ctx);
  407|       |
  408|      2|    if (hands == NULL)
  ------------------
  |  Branch (408:9): [True: 0, False: 2]
  ------------------
  409|      0|        return 0;
  410|       |
  411|       |#ifdef FIPS_MODULE
  412|       |    if (*hands == NULL) {
  413|       |        /*
  414|       |         * We've not yet registered any handlers for this thread. We need to get
  415|       |         * libcrypto to tell us about later thread stop events. c_thread_start
  416|       |         * is a callback to libcrypto defined in fipsprov.c
  417|       |         */
  418|       |        if (!ossl_thread_register_fips(ctx))
  419|       |            return 0;
  420|       |    }
  421|       |#endif
  422|       |
  423|      2|    hand = OPENSSL_malloc(sizeof(*hand));
  ------------------
  |  |  107|      2|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  424|      2|    if (hand == NULL)
  ------------------
  |  Branch (424:9): [True: 0, False: 2]
  ------------------
  425|      0|        return 0;
  426|       |
  427|      2|    hand->handfn = handfn;
  428|      2|    hand->arg = arg;
  429|      2|#ifndef FIPS_MODULE
  430|      2|    hand->index = index;
  431|      2|#endif
  432|      2|    hand->next = *hands;
  433|      2|    *hands = hand;
  434|       |
  435|      2|    return 1;
  436|      2|}
initthread.c:manage_thread_local:
  137|      2|{
  138|      2|    THREAD_EVENT_HANDLER **hands = get_thread_event_handler(ctx);
  139|       |
  140|      2|    if (alloc) {
  ------------------
  |  Branch (140:9): [True: 2, False: 0]
  ------------------
  141|      2|        if (hands == NULL) {
  ------------------
  |  Branch (141:13): [True: 2, False: 0]
  ------------------
  142|       |
  143|      2|            if ((hands = OPENSSL_zalloc(sizeof(*hands))) == NULL)
  ------------------
  |  |  109|      2|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (143:17): [True: 0, False: 2]
  ------------------
  144|      0|                return NULL;
  145|       |
  146|      2|            if (!set_thread_event_handler(ctx, hands)) {
  ------------------
  |  Branch (146:17): [True: 0, False: 2]
  ------------------
  147|      0|                OPENSSL_free(hands);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  148|      0|                return NULL;
  149|      0|            }
  150|      2|#ifndef FIPS_MODULE
  151|      2|            if (!init_thread_push_handlers(hands)) {
  ------------------
  |  Branch (151:17): [True: 0, False: 2]
  ------------------
  152|      0|                set_thread_event_handler(ctx, NULL);
  153|      0|                OPENSSL_free(hands);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  154|      0|                return NULL;
  155|      0|            }
  156|      2|#endif
  157|      2|        }
  158|      2|    } else if (!keep) {
  ------------------
  |  Branch (158:16): [True: 0, False: 0]
  ------------------
  159|      0|        set_thread_event_handler(ctx, NULL);
  160|      0|    }
  161|       |
  162|      2|    return hands;
  163|      2|}
initthread.c:get_thread_event_handler:
  114|      2|{
  115|       |#ifdef FIPS_MODULE
  116|       |    return CRYPTO_THREAD_get_local_ex(CRYPTO_THREAD_LOCAL_TEVENT_KEY, ctx);
  117|       |#else
  118|      2|    if (destructor_key.sane != -1)
  ------------------
  |  Branch (118:9): [True: 2, False: 0]
  ------------------
  119|      2|        return CRYPTO_THREAD_get_local(&destructor_key.value);
  120|      0|    return NULL;
  121|      2|#endif
  122|      2|}
initthread.c:set_thread_event_handler:
  125|      2|{
  126|       |#ifdef FIPS_MODULE
  127|       |    return CRYPTO_THREAD_set_local_ex(CRYPTO_THREAD_LOCAL_TEVENT_KEY, ctx, hands);
  128|       |#else
  129|      2|    if (destructor_key.sane != -1)
  ------------------
  |  Branch (129:9): [True: 2, False: 0]
  ------------------
  130|      2|        return CRYPTO_THREAD_set_local(&destructor_key.value, hands);
  131|      0|    return 0;
  132|      2|#endif
  133|      2|}
initthread.c:init_thread_push_handlers:
  192|      2|{
  193|      2|    int ret;
  194|      2|    GLOBAL_TEVENT_REGISTER *gtr;
  195|       |
  196|      2|    gtr = get_global_tevent_register();
  197|      2|    if (gtr == NULL)
  ------------------
  |  Branch (197:9): [True: 0, False: 2]
  ------------------
  198|      0|        return 0;
  199|       |
  200|      2|    if (!CRYPTO_THREAD_write_lock(gtr->lock))
  ------------------
  |  Branch (200:9): [True: 0, False: 2]
  ------------------
  201|      0|        return 0;
  202|      2|    ret = (sk_THREAD_EVENT_HANDLER_PTR_push(gtr->skhands, hands) != 0);
  203|      2|    CRYPTO_THREAD_unlock(gtr->lock);
  204|       |
  205|      2|    return ret;
  206|      2|}
initthread.c:get_global_tevent_register:
   79|      2|{
   80|      2|    if (!RUN_ONCE(&tevent_register_runonce, create_global_tevent_register))
  ------------------
  |  |  130|      2|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (80:9): [True: 0, False: 2]
  ------------------
   81|      0|        return NULL;
   82|      2|    return glob_tevent_reg;
   83|      2|}
initthread.c:create_global_tevent_register:
   60|      2|{
   61|      2|    glob_tevent_reg = OPENSSL_zalloc(sizeof(*glob_tevent_reg));
  ------------------
  |  |  109|      2|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   62|      2|    if (glob_tevent_reg == NULL)
  ------------------
  |  Branch (62:9): [True: 0, False: 2]
  ------------------
   63|      0|        return 0;
   64|       |
   65|      2|    glob_tevent_reg->skhands = sk_THREAD_EVENT_HANDLER_PTR_new_null();
   66|      2|    glob_tevent_reg->lock = CRYPTO_THREAD_lock_new();
   67|      2|    if (glob_tevent_reg->skhands == NULL || glob_tevent_reg->lock == NULL) {
  ------------------
  |  Branch (67:9): [True: 0, False: 2]
  |  Branch (67:45): [True: 0, False: 2]
  ------------------
   68|      0|        sk_THREAD_EVENT_HANDLER_PTR_free(glob_tevent_reg->skhands);
   69|      0|        CRYPTO_THREAD_lock_free(glob_tevent_reg->lock);
   70|      0|        OPENSSL_free(glob_tevent_reg);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   71|      0|        glob_tevent_reg = NULL;
   72|      0|        return 0;
   73|      0|    }
   74|       |
   75|      2|    return 1;
   76|      2|}
initthread.c:alloc_thread_local:
  176|      2|{
  177|      2|    return manage_thread_local(ctx, 1, 0);
  178|      2|}

OPENSSL_LH_set_thunks:
   52|     12|{
   53|       |
   54|     12|    if (lh == NULL)
  ------------------
  |  Branch (54:9): [True: 0, False: 12]
  ------------------
   55|      0|        return NULL;
   56|     12|    lh->compw = cw;
   57|     12|    lh->hashw = hw;
   58|     12|    lh->daw = daw;
   59|     12|    lh->daaw = daaw;
   60|     12|    return lh;
   61|     12|}
OPENSSL_LH_new:
   64|     12|{
   65|     12|    OPENSSL_LHASH *ret;
   66|       |
   67|     12|    if ((ret = OPENSSL_zalloc(sizeof(*ret))) == NULL)
  ------------------
  |  |  109|     12|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (67:9): [True: 0, False: 12]
  ------------------
   68|      0|        return NULL;
   69|     12|    if ((ret->b = OPENSSL_calloc(MIN_NODES, sizeof(*ret->b))) == NULL)
  ------------------
  |  |  113|     12|    CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (69:9): [True: 0, False: 12]
  ------------------
   70|      0|        goto err;
   71|     12|    ret->comp = ((c == NULL) ? (OPENSSL_LH_COMPFUNC)strcmp : c);
  ------------------
  |  Branch (71:18): [True: 0, False: 12]
  ------------------
   72|     12|    ret->hash = ((h == NULL) ? (OPENSSL_LH_HASHFUNC)OPENSSL_LH_strhash : h);
  ------------------
  |  Branch (72:18): [True: 0, False: 12]
  ------------------
   73|     12|    ret->num_nodes = MIN_NODES / 2;
  ------------------
  |  |   39|     12|#define MIN_NODES 16
  ------------------
   74|     12|    ret->num_alloc_nodes = MIN_NODES;
  ------------------
  |  |   39|     12|#define MIN_NODES 16
  ------------------
   75|     12|    ret->pmax = MIN_NODES / 2;
  ------------------
  |  |   39|     12|#define MIN_NODES 16
  ------------------
   76|     12|    ret->up_load = UP_LOAD;
  ------------------
  |  |   40|     12|#define UP_LOAD (2 * LH_LOAD_MULT) /* load times 256 (default 2) */
  |  |  ------------------
  |  |  |  |   92|     12|#define LH_LOAD_MULT 256
  |  |  ------------------
  ------------------
   77|     12|    ret->down_load = DOWN_LOAD;
  ------------------
  |  |   41|     12|#define DOWN_LOAD (LH_LOAD_MULT) /* load times 256 (default 1) */
  |  |  ------------------
  |  |  |  |   92|     12|#define LH_LOAD_MULT 256
  |  |  ------------------
  ------------------
   78|     12|    return ret;
   79|       |
   80|      0|err:
   81|      0|    OPENSSL_free(ret->b);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   82|      0|    OPENSSL_free(ret);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   83|       |    return NULL;
   84|     12|}
OPENSSL_LH_insert:
  118|  9.48k|{
  119|  9.48k|    unsigned long hash;
  120|  9.48k|    OPENSSL_LH_NODE *nn, **rn;
  121|  9.48k|    void *ret;
  122|       |
  123|  9.48k|    lh->error = 0;
  124|  9.48k|    if ((lh->up_load <= (lh->num_items * LH_LOAD_MULT / lh->num_nodes)) && !expand(lh))
  ------------------
  |  |   92|  9.48k|#define LH_LOAD_MULT 256
  ------------------
  |  Branch (124:9): [True: 1.73k, False: 7.75k]
  |  Branch (124:76): [True: 0, False: 1.73k]
  ------------------
  125|      0|        return NULL; /* 'lh->error++' already done in 'expand' */
  126|       |
  127|  9.48k|    rn = getrn(lh, data, &hash);
  128|       |
  129|  9.48k|    if (*rn == NULL) {
  ------------------
  |  Branch (129:9): [True: 3.54k, False: 5.94k]
  ------------------
  130|  3.54k|        if ((nn = OPENSSL_malloc(sizeof(*nn))) == NULL) {
  ------------------
  |  |  107|  3.54k|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (130:13): [True: 0, False: 3.54k]
  ------------------
  131|      0|            lh->error++;
  132|      0|            return NULL;
  133|      0|        }
  134|  3.54k|        nn->data = data;
  135|  3.54k|        nn->next = NULL;
  136|  3.54k|        nn->hash = hash;
  137|  3.54k|        *rn = nn;
  138|  3.54k|        ret = NULL;
  139|  3.54k|        lh->num_items++;
  140|  5.94k|    } else { /* replace same key */
  141|  5.94k|        ret = (*rn)->data;
  142|  5.94k|        (*rn)->data = data;
  143|  5.94k|    }
  144|  9.48k|    return ret;
  145|  9.48k|}
OPENSSL_LH_retrieve:
  173|    168|{
  174|    168|    unsigned long hash;
  175|    168|    OPENSSL_LH_NODE **rn;
  176|       |
  177|    168|    if (lh->error != 0)
  ------------------
  |  Branch (177:9): [True: 0, False: 168]
  ------------------
  178|      0|        lh->error = 0;
  179|       |
  180|    168|    rn = getrn(lh, data, &hash);
  181|       |
  182|    168|    return *rn == NULL ? NULL : (*rn)->data;
  ------------------
  |  Branch (182:12): [True: 168, False: 0]
  ------------------
  183|    168|}
OPENSSL_LH_strhash:
  360|     48|{
  361|     48|    unsigned long ret = 0;
  362|     48|    long n;
  363|     48|    unsigned long v;
  364|     48|    int r;
  365|       |
  366|     48|    if ((c == NULL) || (*c == '\0'))
  ------------------
  |  Branch (366:9): [True: 0, False: 48]
  |  Branch (366:24): [True: 0, False: 48]
  ------------------
  367|      0|        return ret;
  368|       |
  369|     48|    n = 0x100;
  370|    312|    while (*c) {
  ------------------
  |  Branch (370:12): [True: 264, False: 48]
  ------------------
  371|    264|        v = n | (*c);
  372|    264|        n += 0x100;
  373|    264|        r = (int)((v >> 2) ^ v) & 0x0f;
  374|       |        /* cast to uint64_t to avoid 32 bit shift of 32 bit value */
  375|    264|        ret = (ret << r) | (unsigned long)((uint64_t)ret >> (32 - r));
  376|    264|        ret &= 0xFFFFFFFFL;
  377|    264|        ret ^= v * v;
  378|    264|        c++;
  379|    264|    }
  380|     48|    return (ret >> 16) ^ ret;
  381|     48|}
ossl_lh_strcasehash:
  398|    848|{
  399|    848|    unsigned long ret = 0;
  400|    848|    long n;
  401|    848|    unsigned long v;
  402|    848|    int r;
  403|       |#if defined(CHARSET_EBCDIC) && !defined(CHARSET_EBCDIC_TEST)
  404|       |    const long int case_adjust = ~0x40;
  405|       |#else
  406|    848|    const long int case_adjust = ~0x20;
  407|    848|#endif
  408|       |
  409|    848|    if (c == NULL || *c == '\0')
  ------------------
  |  Branch (409:9): [True: 0, False: 848]
  |  Branch (409:22): [True: 0, False: 848]
  ------------------
  410|      0|        return ret;
  411|       |
  412|  10.1k|    for (n = 0x100; *c != '\0'; n += 0x100) {
  ------------------
  |  Branch (412:21): [True: 9.33k, False: 848]
  ------------------
  413|  9.33k|        v = n | (case_adjust & *c);
  414|  9.33k|        r = (int)((v >> 2) ^ v) & 0x0f;
  415|       |        /* cast to uint64_t to avoid 32 bit shift of 32 bit value */
  416|  9.33k|        ret = (ret << r) | (unsigned long)((uint64_t)ret >> (32 - r));
  417|  9.33k|        ret &= 0xFFFFFFFFL;
  418|  9.33k|        ret ^= v * v;
  419|  9.33k|        c++;
  420|  9.33k|    }
  421|    848|    return (ret >> 16) ^ ret;
  422|    848|}
OPENSSL_LH_error:
  440|    500|{
  441|    500|    return lh->error;
  442|    500|}
lhash.c:expand:
  243|  1.73k|{
  244|  1.73k|    OPENSSL_LH_NODE **n, **n1, **n2, *np;
  245|  1.73k|    unsigned int p, pmax, nni, j;
  246|  1.73k|    unsigned long hash;
  247|       |
  248|  1.73k|    nni = lh->num_alloc_nodes;
  249|  1.73k|    p = lh->p;
  250|  1.73k|    pmax = lh->pmax;
  251|  1.73k|    if (p + 1 >= pmax) {
  ------------------
  |  Branch (251:9): [True: 18, False: 1.71k]
  ------------------
  252|     18|        j = nni * 2;
  253|     18|        n = OPENSSL_realloc_array(lh->b, j, sizeof(OPENSSL_LH_NODE *));
  ------------------
  |  |  125|     18|    CRYPTO_realloc_array(addr, num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_realloc_array(addr, num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  254|     18|        if (n == NULL) {
  ------------------
  |  Branch (254:13): [True: 0, False: 18]
  ------------------
  255|      0|            lh->error++;
  256|      0|            return 0;
  257|      0|        }
  258|     18|        lh->b = n;
  259|     18|        memset(n + nni, 0, sizeof(*n) * (j - nni));
  260|     18|        lh->pmax = nni;
  261|     18|        lh->num_alloc_nodes = j;
  262|     18|        lh->p = 0;
  263|  1.71k|    } else {
  264|  1.71k|        lh->p++;
  265|  1.71k|    }
  266|       |
  267|  1.73k|    lh->num_nodes++;
  268|  1.73k|    n1 = &(lh->b[p]);
  269|  1.73k|    n2 = &(lh->b[p + pmax]);
  270|  1.73k|    *n2 = NULL;
  271|       |
  272|  7.87k|    for (np = *n1; np != NULL;) {
  ------------------
  |  Branch (272:20): [True: 6.14k, False: 1.73k]
  ------------------
  273|  6.14k|        hash = np->hash;
  274|  6.14k|        if ((hash % nni) != p) { /* move it */
  ------------------
  |  Branch (274:13): [True: 1.10k, False: 5.04k]
  ------------------
  275|  1.10k|            *n1 = (*n1)->next;
  276|  1.10k|            np->next = *n2;
  277|  1.10k|            *n2 = np;
  278|  1.10k|        } else
  279|  5.04k|            n1 = &((*n1)->next);
  280|  6.14k|        np = *n1;
  281|  6.14k|    }
  282|       |
  283|  1.73k|    return 1;
  284|  1.73k|}
lhash.c:getrn:
  320|  9.65k|{
  321|  9.65k|    OPENSSL_LH_NODE **ret, *n1;
  322|  9.65k|    unsigned long hash, nn;
  323|       |
  324|  9.65k|    if (lh->hashw != NULL)
  ------------------
  |  Branch (324:9): [True: 9.65k, False: 0]
  ------------------
  325|  9.65k|        hash = lh->hashw(data, lh->hash);
  326|      0|    else
  327|      0|        hash = lh->hash(data);
  328|       |
  329|  9.65k|    *rhash = hash;
  330|       |
  331|  9.65k|    nn = hash % lh->pmax;
  332|  9.65k|    if (nn < lh->p)
  ------------------
  |  Branch (332:9): [True: 4.47k, False: 5.18k]
  ------------------
  333|  4.47k|        nn = hash % lh->num_alloc_nodes;
  334|       |
  335|  9.65k|    ret = &(lh->b[(int)nn]);
  336|  24.9k|    for (n1 = *ret; n1 != NULL; n1 = n1->next) {
  ------------------
  |  Branch (336:21): [True: 21.2k, False: 3.71k]
  ------------------
  337|  21.2k|        if (n1->hash != hash) {
  ------------------
  |  Branch (337:13): [True: 14.9k, False: 6.25k]
  ------------------
  338|  14.9k|            ret = &(n1->next);
  339|  14.9k|            continue;
  340|  14.9k|        }
  341|       |
  342|  6.25k|        if (lh->compw != NULL) {
  ------------------
  |  Branch (342:13): [True: 6.25k, False: 0]
  ------------------
  343|  6.25k|            if (lh->compw(n1->data, data, lh->comp) == 0)
  ------------------
  |  Branch (343:17): [True: 5.94k, False: 312]
  ------------------
  344|  5.94k|                break;
  345|  6.25k|        } else {
  346|      0|            if (lh->comp(n1->data, data) == 0)
  ------------------
  |  Branch (346:17): [True: 0, False: 0]
  ------------------
  347|      0|                break;
  348|      0|        }
  349|    312|        ret = &(n1->next);
  350|    312|    }
  351|  9.65k|    return ret;
  352|  9.65k|}

CRYPTO_malloc:
  190|  4.64k|{
  191|  4.64k|    void *ptr;
  192|       |
  193|  4.64k|    INCREMENT(malloc_count);
  194|  4.64k|    if (malloc_impl != CRYPTO_malloc) {
  ------------------
  |  Branch (194:9): [True: 0, False: 4.64k]
  ------------------
  195|      0|        ptr = malloc_impl(num, file, line);
  196|      0|        if (ptr != NULL || num == 0)
  ------------------
  |  Branch (196:13): [True: 0, False: 0]
  |  Branch (196:28): [True: 0, False: 0]
  ------------------
  197|      0|            return ptr;
  198|      0|        goto err;
  199|      0|    }
  200|       |
  201|  4.64k|    if (ossl_unlikely(num == 0))
  ------------------
  |  |   23|  4.64k|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 4.64k]
  |  |  ------------------
  ------------------
  202|      0|        return NULL;
  203|       |
  204|  4.64k|    FAILTEST();
  205|  4.64k|    if (allow_customize) {
  ------------------
  |  Branch (205:9): [True: 2, False: 4.64k]
  ------------------
  206|       |        /*
  207|       |         * Disallow customization after the first allocation. We only set this
  208|       |         * if necessary to avoid a store to the same cache line on every
  209|       |         * allocation.
  210|       |         */
  211|      2|        allow_customize = 0;
  212|      2|    }
  213|       |
  214|  4.64k|    ptr = malloc(num);
  215|  4.64k|    if (ossl_likely(ptr != NULL))
  ------------------
  |  |   22|  4.64k|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 4.64k, False: 0]
  |  |  ------------------
  ------------------
  216|  4.64k|        return ptr;
  217|      0|err:
  218|      0|    ossl_report_alloc_err(file, line);
  219|       |    return NULL;
  220|  4.64k|}
CRYPTO_zalloc:
  223|    212|{
  224|    212|    void *ret;
  225|       |
  226|    212|    ret = CRYPTO_malloc(num, file, line);
  227|    212|    if (ret != NULL)
  ------------------
  |  Branch (227:9): [True: 212, False: 0]
  ------------------
  228|    212|        memset(ret, 0, num);
  229|       |
  230|    212|    return ret;
  231|    212|}
CRYPTO_aligned_alloc:
  235|      2|{
  236|      2|    *freeptr = NULL;
  237|       |
  238|       |    /* Ensure that alignment is a power of two no larger than 65536 */
  239|      2|    if (alignment == 0 || (alignment & (alignment - 1)) != 0
  ------------------
  |  Branch (239:9): [True: 0, False: 2]
  |  Branch (239:27): [True: 0, False: 2]
  ------------------
  240|      2|        || alignment > 65536) {
  ------------------
  |  Branch (240:12): [True: 0, False: 2]
  ------------------
  241|      0|        ossl_report_alloc_err_inv(file, line);
  242|      0|        return NULL;
  243|      0|    }
  244|       |
  245|       |    /* Allow non-malloc() allocations as long as no malloc_impl is provided. */
  246|      2|    if (malloc_impl == CRYPTO_malloc) {
  ------------------
  |  Branch (246:9): [True: 2, False: 0]
  ------------------
  247|      2|#if defined(_BSD_SOURCE) || (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112L)
  248|      2|        void *ret;
  249|       |
  250|       |        /* posix_memalign() requires alignment to be at least sizeof(void *) */
  251|      2|        if (alignment < sizeof(void *))
  ------------------
  |  Branch (251:13): [True: 0, False: 2]
  ------------------
  252|      0|            alignment = sizeof(void *);
  253|       |
  254|      2|        if (posix_memalign(&ret, alignment, num) == 0) {
  ------------------
  |  Branch (254:13): [True: 2, False: 0]
  ------------------
  255|      2|            *freeptr = ret;
  256|      2|            return ret;
  257|      2|        }
  258|      2|#endif
  259|      2|    }
  260|       |
  261|      0|    return ossl_malloc_align(num, alignment, freeptr, file, line);
  262|      2|}
CRYPTO_realloc:
  265|     24|{
  266|     24|    void *ret;
  267|       |
  268|     24|    INCREMENT(realloc_count);
  269|     24|    if (realloc_impl != CRYPTO_realloc) {
  ------------------
  |  Branch (269:9): [True: 0, False: 24]
  ------------------
  270|      0|        ret = realloc_impl(str, num, file, line);
  271|       |
  272|      0|        if (num == 0 || ret != NULL)
  ------------------
  |  Branch (272:13): [True: 0, False: 0]
  |  Branch (272:25): [True: 0, False: 0]
  ------------------
  273|      0|            return ret;
  274|       |
  275|      0|        goto err;
  276|      0|    }
  277|       |
  278|     24|    if (str == NULL)
  ------------------
  |  Branch (278:9): [True: 2, False: 22]
  ------------------
  279|      2|        return CRYPTO_malloc(num, file, line);
  280|       |
  281|     22|    if (num == 0) {
  ------------------
  |  Branch (281:9): [True: 0, False: 22]
  ------------------
  282|      0|        CRYPTO_free(str, file, line);
  283|      0|        return NULL;
  284|      0|    }
  285|       |
  286|     22|    FAILTEST();
  287|     22|    ret = realloc(str, num);
  288|       |
  289|     22|err:
  290|     22|    if (num != 0 && ret == NULL)
  ------------------
  |  Branch (290:9): [True: 22, False: 0]
  |  Branch (290:21): [True: 0, False: 22]
  ------------------
  291|      0|        ossl_report_alloc_err(file, line);
  292|       |
  293|     22|    return ret;
  294|     22|}
CRYPTO_free:
  324|    406|{
  325|    406|    INCREMENT(free_count);
  326|    406|    if (free_impl != CRYPTO_free) {
  ------------------
  |  Branch (326:9): [True: 0, False: 406]
  ------------------
  327|      0|        free_impl(str, file, line);
  328|      0|        return;
  329|      0|    }
  330|       |
  331|    406|    free(str);
  332|    406|}

openssl_fopen:
   39|      2|{
   40|      2|    FILE *file = NULL;
   41|       |#if defined(_WIN32) && defined(CP_UTF8)
   42|       |    int sz, len_0;
   43|       |    DWORD flags;
   44|       |#endif
   45|       |
   46|      2|    if (filename == NULL)
  ------------------
  |  Branch (46:9): [True: 0, False: 2]
  ------------------
   47|      0|        return NULL;
   48|       |#if defined(_WIN32) && defined(CP_UTF8)
   49|       |    len_0 = (int)strlen(filename) + 1;
   50|       |
   51|       |    /*
   52|       |     * Basically there are three cases to cover: a) filename is
   53|       |     * pure ASCII string; b) actual UTF-8 encoded string and
   54|       |     * c) locale-ized string, i.e. one containing 8-bit
   55|       |     * characters that are meaningful in current system locale.
   56|       |     * If filename is pure ASCII or real UTF-8 encoded string,
   57|       |     * MultiByteToWideChar succeeds and _wfopen works. If
   58|       |     * filename is locale-ized string, chances are that
   59|       |     * MultiByteToWideChar fails reporting
   60|       |     * ERROR_NO_UNICODE_TRANSLATION, in which case we fall
   61|       |     * back to fopen...
   62|       |     */
   63|       |    if ((sz = MultiByteToWideChar(CP_UTF8, (flags = MB_ERR_INVALID_CHARS),
   64|       |             filename, len_0, NULL, 0))
   65|       |            > 0
   66|       |        || (GetLastError() == ERROR_INVALID_FLAGS && (sz = MultiByteToWideChar(CP_UTF8, (flags = 0), filename, len_0, NULL, 0)) > 0)) {
   67|       |        WCHAR wmode[8];
   68|       |        WCHAR *wfilename = _alloca(sz * sizeof(WCHAR));
   69|       |
   70|       |        if (MultiByteToWideChar(CP_UTF8, flags,
   71|       |                filename, len_0, wfilename, sz)
   72|       |            && MultiByteToWideChar(CP_UTF8, 0, mode, (int)(strlen(mode) + 1),
   73|       |                wmode, OSSL_NELEM(wmode))
   74|       |            && (file = _wfopen(wfilename, wmode)) == NULL && (errno == ENOENT || errno == EBADF)) {
   75|       |            /*
   76|       |             * UTF-8 decode succeeded, but no file, filename
   77|       |             * could still have been locale-ized...
   78|       |             */
   79|       |            file = fopen(filename, mode);
   80|       |        }
   81|       |    } else if (GetLastError() == ERROR_NO_UNICODE_TRANSLATION) {
   82|       |        file = fopen(filename, mode);
   83|       |    }
   84|       |#elif defined(__DJGPP__)
   85|       |    {
   86|       |        char *newname = NULL;
   87|       |
   88|       |        if (pathconf(filename, _PC_NAME_MAX) <= 12) { /* 8.3 file system? */
   89|       |            char *iterator;
   90|       |            char lastchar;
   91|       |
   92|       |            if ((newname = OPENSSL_malloc(strlen(filename) + 1)) == NULL)
   93|       |                return NULL;
   94|       |
   95|       |            for (iterator = newname, lastchar = '\0';
   96|       |                *filename; filename++, iterator++) {
   97|       |                if (lastchar == '/' && filename[0] == '.'
   98|       |                    && filename[1] != '.' && filename[1] != '/') {
   99|       |                    /* Leading dots are not permitted in plain DOS. */
  100|       |                    *iterator = '_';
  101|       |                } else {
  102|       |                    *iterator = *filename;
  103|       |                }
  104|       |                lastchar = *filename;
  105|       |            }
  106|       |            *iterator = '\0';
  107|       |            filename = newname;
  108|       |        }
  109|       |        file = fopen(filename, mode);
  110|       |
  111|       |        OPENSSL_free(newname);
  112|       |    }
  113|       |#else
  114|      2|    file = fopen(filename, mode);
  115|      2|#endif
  116|      2|    return file;
  117|      2|}

CRYPTO_strdup:
   23|      2|{
   24|      2|    char *ret;
   25|      2|    size_t len;
   26|       |
   27|      2|    if (str == NULL)
  ------------------
  |  Branch (27:9): [True: 0, False: 2]
  ------------------
   28|      0|        return NULL;
   29|       |
   30|      2|    len = strlen(str) + 1;
   31|      2|    ret = CRYPTO_malloc(len, file, line);
   32|      2|    if (ret != NULL)
  ------------------
  |  Branch (32:9): [True: 2, False: 0]
  ------------------
   33|      2|        memcpy(ret, str, len);
   34|      2|    return ret;
   35|      2|}
OPENSSL_strcasecmp:
  426|    364|{
  427|    364|    int t;
  428|       |
  429|  4.17k|    while ((t = ossl_tolower(*s1) - ossl_tolower(*s2++)) == 0)
  ------------------
  |  Branch (429:12): [True: 4.17k, False: 0]
  ------------------
  430|  4.17k|        if (*s1++ == '\0')
  ------------------
  |  Branch (430:13): [True: 364, False: 3.81k]
  ------------------
  431|    364|            return 0;
  432|      0|    return t;
  433|    364|}

OBJ_NAME_init:
   64|    848|{
   65|    848|    return RUN_ONCE(&init, o_names_init);
  ------------------
  |  |  130|    848|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 848, False: 0]
  |  |  ------------------
  ------------------
   66|    848|}
OBJ_NAME_add:
  190|    848|{
  191|    848|    OBJ_NAME *onp, *ret;
  192|    848|    int alias, ok = 0;
  193|       |
  194|    848|    if (!OBJ_NAME_init())
  ------------------
  |  Branch (194:9): [True: 0, False: 848]
  ------------------
  195|      0|        return 0;
  196|       |
  197|    848|    alias = type & OBJ_NAME_ALIAS;
  ------------------
  |  |   33|    848|#define OBJ_NAME_ALIAS 0x8000
  ------------------
  198|    848|    type &= ~OBJ_NAME_ALIAS;
  ------------------
  |  |   33|    848|#define OBJ_NAME_ALIAS 0x8000
  ------------------
  199|       |
  200|    848|    onp = OPENSSL_malloc(sizeof(*onp));
  ------------------
  |  |  107|    848|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  201|    848|    if (onp == NULL)
  ------------------
  |  Branch (201:9): [True: 0, False: 848]
  ------------------
  202|      0|        return 0;
  203|       |
  204|    848|    onp->name = name;
  205|    848|    onp->alias = alias;
  206|    848|    onp->type = type;
  207|    848|    onp->data = data;
  208|       |
  209|    848|    if (!CRYPTO_THREAD_write_lock(obj_lock)) {
  ------------------
  |  Branch (209:9): [True: 0, False: 848]
  ------------------
  210|      0|        OPENSSL_free(onp);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  211|      0|        return 0;
  212|      0|    }
  213|       |
  214|    848|    ret = lh_OBJ_NAME_insert(names_lh, onp);
  215|    848|    if (ret != NULL) {
  ------------------
  |  Branch (215:9): [True: 364, False: 484]
  ------------------
  216|       |        /* free things */
  217|    364|        if ((name_funcs_stack != NULL)
  ------------------
  |  Branch (217:13): [True: 0, False: 364]
  ------------------
  218|      0|            && (sk_NAME_FUNCS_num(name_funcs_stack) > ret->type)) {
  ------------------
  |  Branch (218:16): [True: 0, False: 0]
  ------------------
  219|       |            /*
  220|       |             * XXX: I'm not sure I understand why the free function should
  221|       |             * get three arguments... -- Richard Levitte
  222|       |             */
  223|      0|            sk_NAME_FUNCS_value(name_funcs_stack,
  224|      0|                ret->type)
  225|      0|                ->free_func(ret->name, ret->type,
  226|      0|                    ret->data);
  227|      0|        }
  228|    364|        OPENSSL_free(ret);
  ------------------
  |  |  132|    364|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  229|    484|    } else {
  230|    484|        if (lh_OBJ_NAME_error(names_lh)) {
  ------------------
  |  Branch (230:13): [True: 0, False: 484]
  ------------------
  231|       |            /* ERROR */
  232|      0|            OPENSSL_free(onp);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  233|      0|            goto unlock;
  234|      0|        }
  235|    484|    }
  236|       |
  237|    848|    ok = 1;
  238|       |
  239|    848|unlock:
  240|    848|    CRYPTO_THREAD_unlock(obj_lock);
  241|    848|    return ok;
  242|    848|}
o_names.c:o_names_init:
   51|      2|{
   52|      2|    names_lh = NULL;
   53|      2|    obj_lock = CRYPTO_THREAD_lock_new();
   54|      2|    if (obj_lock != NULL)
  ------------------
  |  Branch (54:9): [True: 2, False: 0]
  ------------------
   55|      2|        names_lh = lh_OBJ_NAME_new(obj_name_hash, obj_name_cmp);
   56|      2|    if (names_lh == NULL) {
  ------------------
  |  Branch (56:9): [True: 0, False: 2]
  ------------------
   57|      0|        CRYPTO_THREAD_lock_free(obj_lock);
   58|      0|        obj_lock = NULL;
   59|      0|    }
   60|      2|    return names_lh != NULL && obj_lock != NULL;
  ------------------
  |  Branch (60:12): [True: 2, False: 0]
  |  Branch (60:32): [True: 2, False: 0]
  ------------------
   61|      2|}
o_names.c:obj_name_hash:
  137|    848|{
  138|    848|    unsigned long ret;
  139|       |
  140|    848|    if ((name_funcs_stack != NULL)
  ------------------
  |  Branch (140:9): [True: 0, False: 848]
  ------------------
  141|      0|        && (sk_NAME_FUNCS_num(name_funcs_stack) > a->type)) {
  ------------------
  |  Branch (141:12): [True: 0, False: 0]
  ------------------
  142|      0|        ret = sk_NAME_FUNCS_value(name_funcs_stack,
  143|      0|            a->type)
  144|      0|                  ->hash_func(a->name);
  145|    848|    } else {
  146|    848|        ret = ossl_lh_strcasehash(a->name);
  147|    848|    }
  148|    848|    ret ^= a->type;
  149|    848|    return ret;
  150|    848|}
o_names.c:obj_name_cmp:
  120|    364|{
  121|    364|    int ret;
  122|       |
  123|    364|    ret = a->type - b->type;
  124|    364|    if (ret == 0) {
  ------------------
  |  Branch (124:9): [True: 364, False: 0]
  ------------------
  125|    364|        if ((name_funcs_stack != NULL)
  ------------------
  |  Branch (125:13): [True: 0, False: 364]
  ------------------
  126|      0|            && (sk_NAME_FUNCS_num(name_funcs_stack) > a->type)) {
  ------------------
  |  Branch (126:16): [True: 0, False: 0]
  ------------------
  127|      0|            ret = sk_NAME_FUNCS_value(name_funcs_stack,
  128|      0|                a->type)
  129|      0|                      ->cmp_func(a->name, b->name);
  130|      0|        } else
  131|    364|            ret = OPENSSL_strcasecmp(a->name, b->name);
  132|    364|    }
  133|    364|    return ret;
  134|    364|}

OBJ_nid2obj:
  259|    728|{
  260|    728|    ADDED_OBJ ad, *adp = NULL;
  261|    728|    ASN1_OBJECT ob;
  262|       |
  263|    728|    if (n == NID_undef
  ------------------
  |  |   18|  1.45k|#define NID_undef                       0
  ------------------
  |  Branch (263:9): [True: 0, False: 728]
  ------------------
  264|    728|        || (n > 0 && n < NUM_NID && nid_objs[n].nid != NID_undef))
  ------------------
  |  | 1359|  1.45k|#define NUM_NID 1502
  ------------------
                      || (n > 0 && n < NUM_NID && nid_objs[n].nid != NID_undef))
  ------------------
  |  |   18|    728|#define NID_undef                       0
  ------------------
  |  Branch (264:13): [True: 728, False: 0]
  |  Branch (264:22): [True: 728, False: 0]
  |  Branch (264:37): [True: 728, False: 0]
  ------------------
  265|    728|        return (ASN1_OBJECT *)&(nid_objs[n]);
  266|       |
  267|      0|    ad.type = ADDED_NID;
  ------------------
  |  |   34|      0|#define ADDED_NID 3
  ------------------
  268|      0|    ad.obj = &ob;
  269|      0|    ob.nid = n;
  270|      0|    if (!ossl_obj_read_lock()) {
  ------------------
  |  Branch (270:9): [True: 0, False: 0]
  ------------------
  271|      0|        ERR_raise(ERR_LIB_OBJ, ERR_R_UNABLE_TO_GET_READ_LOCK);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  272|      0|        return NULL;
  273|      0|    }
  274|      0|    adp = lh_ADDED_OBJ_retrieve(added, &ad);
  275|      0|    ossl_obj_unlock();
  276|      0|    if (adp != NULL)
  ------------------
  |  Branch (276:9): [True: 0, False: 0]
  ------------------
  277|      0|        return adp->obj;
  278|       |
  279|      0|    ERR_raise(ERR_LIB_OBJ, OBJ_R_UNKNOWN_NID);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  280|       |    return NULL;
  281|      0|}
OBJ_nid2sn:
  284|    364|{
  285|    364|    ASN1_OBJECT *ob = OBJ_nid2obj(n);
  286|       |
  287|    364|    return ob == NULL ? NULL : ob->sn;
  ------------------
  |  Branch (287:12): [True: 0, False: 364]
  ------------------
  288|    364|}
OBJ_nid2ln:
  291|    364|{
  292|    364|    ASN1_OBJECT *ob = OBJ_nid2obj(n);
  293|       |
  294|    364|    return ob == NULL ? NULL : ob->ln;
  ------------------
  |  Branch (294:12): [True: 0, False: 364]
  ------------------
  295|    364|}

ossl_err_load_OBJ_strings:
   28|      2|{
   29|      2|#ifndef OPENSSL_NO_ERR
   30|      2|    if (ERR_reason_error_string(OBJ_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (30:9): [True: 2, False: 0]
  ------------------
   31|      2|        ERR_load_strings_const(OBJ_str_reasons);
   32|      2|#endif
   33|      2|    return 1;
   34|      2|}

ossl_err_load_OCSP_strings:
   66|      2|{
   67|      2|#ifndef OPENSSL_NO_ERR
   68|      2|    if (ERR_reason_error_string(OCSP_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (68:9): [True: 2, False: 0]
  ------------------
   69|      2|        ERR_load_strings_const(OCSP_str_reasons);
   70|      2|#endif
   71|      2|    return 1;
   72|      2|}

ossl_err_load_PEM_strings:
   70|      2|{
   71|      2|#ifndef OPENSSL_NO_ERR
   72|      2|    if (ERR_reason_error_string(PEM_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (72:9): [True: 2, False: 0]
  ------------------
   73|      2|        ERR_load_strings_const(PEM_str_reasons);
   74|      2|#endif
   75|      2|    return 1;
   76|      2|}

ossl_err_load_PKCS12_strings:
   58|      2|{
   59|      2|#ifndef OPENSSL_NO_ERR
   60|      2|    if (ERR_reason_error_string(PKCS12_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (60:9): [True: 2, False: 0]
  ------------------
   61|      2|        ERR_load_strings_const(PKCS12_str_reasons);
   62|      2|#endif
   63|      2|    return 1;
   64|      2|}

ossl_err_load_PKCS7_strings:
   92|      2|{
   93|      2|#ifndef OPENSSL_NO_ERR
   94|      2|    if (ERR_reason_error_string(PKCS7_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (94:9): [True: 2, False: 0]
  ------------------
   95|      2|        ERR_load_strings_const(PKCS7_str_reasons);
   96|      2|#endif
   97|      2|    return 1;
   98|      2|}

ossl_property_defns_new:
   63|      2|{
   64|      2|    return lh_PROPERTY_DEFN_ELEM_new(&property_defn_hash, &property_defn_cmp);
   65|      2|}

ossl_ctx_global_properties_new:
  142|      2|{
  143|      2|    return OPENSSL_zalloc(sizeof(OSSL_GLOBAL_PROPERTIES));
  ------------------
  |  |  109|      2|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  144|      2|}
ossl_method_store_new:
  301|      8|{
  302|      8|    OSSL_METHOD_STORE *res;
  303|       |
  304|      8|    res = OPENSSL_zalloc(sizeof(*res));
  ------------------
  |  |  109|      8|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  305|      8|    if (res != NULL) {
  ------------------
  |  Branch (305:9): [True: 8, False: 0]
  ------------------
  306|      8|        res->ctx = ctx;
  307|      8|        if ((res->algs = stored_algs_new()) == NULL
  ------------------
  |  Branch (307:13): [True: 0, False: 8]
  ------------------
  308|      8|            || (res->biglock = CRYPTO_THREAD_lock_new()) == NULL) {
  ------------------
  |  Branch (308:16): [True: 0, False: 8]
  ------------------
  309|      0|            ossl_method_store_free(res);
  310|      0|            return NULL;
  311|      0|        }
  312|      8|    }
  313|      8|    return res;
  314|      8|}
property.c:stored_algs_new:
  271|      8|{
  272|      8|    STORED_ALGORITHMS *ret;
  273|       |
  274|      8|    ret = OPENSSL_calloc(NUM_SHARDS, sizeof(STORED_ALGORITHMS));
  ------------------
  |  |  113|      8|    CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  275|      8|    if (ret == NULL)
  ------------------
  |  Branch (275:9): [True: 0, False: 8]
  ------------------
  276|      0|        return NULL;
  277|       |
  278|     40|    for (int i = 0; i < NUM_SHARDS; ++i) {
  ------------------
  |  |   32|     40|#define NUM_SHARDS 4
  ------------------
  |  Branch (278:21): [True: 32, False: 8]
  ------------------
  279|     32|        ret[i].algs = ossl_sa_ALGORITHM_new();
  280|     32|        if (ret[i].algs == NULL)
  ------------------
  |  Branch (280:13): [True: 0, False: 32]
  ------------------
  281|      0|            goto err;
  282|       |
  283|     32|        ret[i].lock = CRYPTO_THREAD_lock_new();
  284|     32|        if (ret[i].lock == NULL)
  ------------------
  |  Branch (284:13): [True: 0, False: 32]
  ------------------
  285|      0|            goto err;
  286|     32|    }
  287|       |
  288|      8|    return ret;
  289|       |
  290|      0|err:
  291|      0|    stored_algs_free(ret);
  292|       |
  293|       |    return NULL;
  294|      8|}

ossl_err_load_PROP_strings:
   40|      2|{
   41|      2|#ifndef OPENSSL_NO_ERR
   42|      2|    if (ERR_reason_error_string(PROP_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (42:9): [True: 2, False: 0]
  ------------------
   43|      2|        ERR_load_strings_const(PROP_str_reasons);
   44|      2|#endif
   45|      2|    return 1;
   46|      2|}

ossl_property_parse_init:
  575|      2|{
  576|      2|    static const char *const predefined_names[] = {
  577|      2|        "provider", /* Name of provider (default, legacy, fips) */
  578|      2|        "version", /* Version number of this provider */
  579|      2|        "fips", /* FIPS validated or FIPS supporting algorithm */
  580|      2|        "output", /* Output type for encoders */
  581|      2|        "input", /* Input type for decoders */
  582|      2|        "structure", /* Structure name for encoders and decoders */
  583|      2|    };
  584|      2|    size_t i;
  585|       |
  586|     14|    for (i = 0; i < OSSL_NELEM(predefined_names); i++)
  ------------------
  |  |   14|     14|#define OSSL_NELEM(x) (sizeof(x) / sizeof((x)[0]))
  ------------------
  |  Branch (586:17): [True: 12, False: 2]
  ------------------
  587|     12|        if (ossl_property_name(ctx, predefined_names[i], 1) == 0)
  ------------------
  |  Branch (587:13): [True: 0, False: 12]
  ------------------
  588|      0|            goto err;
  589|       |
  590|       |    /*
  591|       |     * Pre-populate the two Boolean values. We must do them before any other
  592|       |     * values and in this order so that we get the same index as the global
  593|       |     * OSSL_PROPERTY_TRUE and OSSL_PROPERTY_FALSE values
  594|       |     */
  595|      2|    if ((ossl_property_value(ctx, "yes", 1) != OSSL_PROPERTY_TRUE)
  ------------------
  |  |   39|      2|#define OSSL_PROPERTY_TRUE 1
  ------------------
  |  Branch (595:9): [True: 0, False: 2]
  ------------------
  596|      2|        || (ossl_property_value(ctx, "no", 1) != OSSL_PROPERTY_FALSE))
  ------------------
  |  |   40|      2|#define OSSL_PROPERTY_FALSE 2
  ------------------
  |  Branch (596:12): [True: 0, False: 2]
  ------------------
  597|      0|        goto err;
  598|       |
  599|      2|    return 1;
  600|      0|err:
  601|      0|    return 0;
  602|      2|}

ossl_property_string_data_new:
   97|      2|{
   98|      2|    PROPERTY_STRING_DATA *propdata = OPENSSL_zalloc(sizeof(*propdata));
  ------------------
  |  |  109|      2|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   99|       |
  100|      2|    if (propdata == NULL)
  ------------------
  |  Branch (100:9): [True: 0, False: 2]
  ------------------
  101|      0|        return NULL;
  102|       |
  103|      2|    propdata->lock = CRYPTO_THREAD_lock_new();
  104|      2|    propdata->prop_names = lh_PROPERTY_STRING_new(&property_hash,
  105|      2|        &property_cmp);
  106|      2|    propdata->prop_values = lh_PROPERTY_STRING_new(&property_hash,
  107|      2|        &property_cmp);
  108|      2|#ifndef OPENSSL_SMALL_FOOTPRINT
  109|      2|    propdata->prop_namelist = sk_OPENSSL_CSTRING_new_null();
  ------------------
  |  |  285|      2|#define sk_OPENSSL_CSTRING_new_null() ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OPENSSL_CSTRING_freefunc_thunk))
  ------------------
  110|      2|    propdata->prop_valuelist = sk_OPENSSL_CSTRING_new_null();
  ------------------
  |  |  285|      2|#define sk_OPENSSL_CSTRING_new_null() ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OPENSSL_CSTRING_freefunc_thunk))
  ------------------
  111|      2|#endif
  112|      2|    if (propdata->lock == NULL
  ------------------
  |  Branch (112:9): [True: 0, False: 2]
  ------------------
  113|      2|#ifndef OPENSSL_SMALL_FOOTPRINT
  114|      2|        || propdata->prop_namelist == NULL
  ------------------
  |  Branch (114:12): [True: 0, False: 2]
  ------------------
  115|      2|        || propdata->prop_valuelist == NULL
  ------------------
  |  Branch (115:12): [True: 0, False: 2]
  ------------------
  116|      2|#endif
  117|      2|        || propdata->prop_names == NULL
  ------------------
  |  Branch (117:12): [True: 0, False: 2]
  ------------------
  118|      2|        || propdata->prop_values == NULL) {
  ------------------
  |  Branch (118:12): [True: 0, False: 2]
  ------------------
  119|      0|        ossl_property_string_data_free(propdata);
  120|      0|        return NULL;
  121|      0|    }
  122|      2|    return propdata;
  123|      2|}
ossl_property_name:
  255|     12|{
  256|     12|    return ossl_property_string(ctx, 1, create, s);
  257|     12|}
ossl_property_value:
  266|      4|{
  267|      4|    return ossl_property_string(ctx, 0, create, s);
  268|      4|}
property_string.c:property_hash:
   51|     48|{
   52|     48|    return OPENSSL_LH_strhash(a->s);
   53|     48|}
property_string.c:ossl_property_string:
  145|     16|{
  146|     16|    PROPERTY_STRING p, *ps, *ps_new;
  147|     16|    PROP_TABLE *t;
  148|     16|    OSSL_PROPERTY_IDX *pidx;
  149|     16|    PROPERTY_STRING_DATA *propdata
  150|     16|        = ossl_lib_ctx_get_data(ctx, OSSL_LIB_CTX_PROPERTY_STRING_INDEX);
  ------------------
  |  |   98|     16|#define OSSL_LIB_CTX_PROPERTY_STRING_INDEX 3
  ------------------
  151|       |
  152|     16|    if (propdata == NULL)
  ------------------
  |  Branch (152:9): [True: 0, False: 16]
  ------------------
  153|      0|        return 0;
  154|       |
  155|     16|    t = name ? propdata->prop_names : propdata->prop_values;
  ------------------
  |  Branch (155:9): [True: 12, False: 4]
  ------------------
  156|     16|    p.s = s;
  157|     16|    if (!CRYPTO_THREAD_read_lock(propdata->lock)) {
  ------------------
  |  Branch (157:9): [True: 0, False: 16]
  ------------------
  158|      0|        ERR_raise(ERR_LIB_CRYPTO, ERR_R_UNABLE_TO_GET_READ_LOCK);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  159|      0|        return 0;
  160|      0|    }
  161|     16|    ps = lh_PROPERTY_STRING_retrieve(t, &p);
  162|     16|    if (ps == NULL && create) {
  ------------------
  |  Branch (162:9): [True: 16, False: 0]
  |  Branch (162:23): [True: 16, False: 0]
  ------------------
  163|     16|        CRYPTO_THREAD_unlock(propdata->lock);
  164|     16|        if (!CRYPTO_THREAD_write_lock(propdata->lock)) {
  ------------------
  |  Branch (164:13): [True: 0, False: 16]
  ------------------
  165|      0|            ERR_raise(ERR_LIB_CRYPTO, ERR_R_UNABLE_TO_GET_WRITE_LOCK);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  166|      0|            return 0;
  167|      0|        }
  168|     16|        pidx = name ? &propdata->prop_name_idx : &propdata->prop_value_idx;
  ------------------
  |  Branch (168:16): [True: 12, False: 4]
  ------------------
  169|     16|        ps = lh_PROPERTY_STRING_retrieve(t, &p);
  170|     16|        if (ps == NULL && (ps_new = new_property_string(s, pidx)) != NULL) {
  ------------------
  |  Branch (170:13): [True: 16, False: 0]
  |  Branch (170:27): [True: 16, False: 0]
  ------------------
  171|     16|#ifndef OPENSSL_SMALL_FOOTPRINT
  172|     16|            STACK_OF(OPENSSL_CSTRING) *slist;
  ------------------
  |  |   33|     16|#define STACK_OF(type) struct stack_st_##type
  ------------------
  173|       |
  174|     16|            slist = name ? propdata->prop_namelist : propdata->prop_valuelist;
  ------------------
  |  Branch (174:21): [True: 12, False: 4]
  ------------------
  175|     16|            if (sk_OPENSSL_CSTRING_push(slist, ps_new->s) <= 0) {
  ------------------
  |  |  292|     16|#define sk_OPENSSL_CSTRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr))
  ------------------
  |  Branch (175:17): [True: 0, False: 16]
  ------------------
  176|      0|                property_free(ps_new);
  177|      0|                CRYPTO_THREAD_unlock(propdata->lock);
  178|      0|                return 0;
  179|      0|            }
  180|     16|#endif
  181|     16|            lh_PROPERTY_STRING_insert(t, ps_new);
  182|     16|            if (lh_PROPERTY_STRING_error(t)) {
  ------------------
  |  Branch (182:17): [True: 0, False: 16]
  ------------------
  183|       |                /*-
  184|       |                 * Undo the previous push which means also decrementing the
  185|       |                 * index and freeing the allocated storage.
  186|       |                 */
  187|      0|#ifndef OPENSSL_SMALL_FOOTPRINT
  188|      0|                sk_OPENSSL_CSTRING_pop(slist);
  ------------------
  |  |  294|      0|#define sk_OPENSSL_CSTRING_pop(sk) ((const char *)OPENSSL_sk_pop(ossl_check_OPENSSL_CSTRING_sk_type(sk)))
  ------------------
  189|      0|#endif
  190|      0|                property_free(ps_new);
  191|      0|                --*pidx;
  192|      0|                CRYPTO_THREAD_unlock(propdata->lock);
  193|      0|                return 0;
  194|      0|            }
  195|     16|            ps = ps_new;
  196|     16|        }
  197|     16|    }
  198|     16|    CRYPTO_THREAD_unlock(propdata->lock);
  199|     16|    return ps != NULL ? ps->idx : 0;
  ------------------
  |  Branch (199:12): [True: 16, False: 0]
  ------------------
  200|     16|}
property_string.c:new_property_string:
  127|     16|{
  128|     16|    const size_t l = strlen(s);
  129|     16|    PROPERTY_STRING *ps = OPENSSL_malloc(sizeof(*ps) + l);
  ------------------
  |  |  107|     16|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  130|       |
  131|     16|    if (ps != NULL) {
  ------------------
  |  Branch (131:9): [True: 16, False: 0]
  ------------------
  132|     16|        memcpy(ps->body, s, l + 1);
  133|     16|        ps->s = ps->body;
  134|     16|        ps->idx = ++*pidx;
  135|     16|        if (ps->idx == 0) {
  ------------------
  |  Branch (135:13): [True: 0, False: 16]
  ------------------
  136|      0|            OPENSSL_free(ps);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  137|      0|            return NULL;
  138|      0|        }
  139|     16|    }
  140|     16|    return ps;
  141|     16|}

ossl_child_prov_ctx_new:
   38|      2|{
   39|      2|    return OPENSSL_zalloc(sizeof(struct child_prov_globals));
  ------------------
  |  |  109|      2|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   40|      2|}

ossl_prov_conf_ctx_new:
   31|      2|{
   32|      2|    PROVIDER_CONF_GLOBAL *pcgbl = OPENSSL_zalloc(sizeof(*pcgbl));
  ------------------
  |  |  109|      2|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   33|       |
   34|      2|    if (pcgbl == NULL)
  ------------------
  |  Branch (34:9): [True: 0, False: 2]
  ------------------
   35|      0|        return NULL;
   36|       |
   37|      2|    pcgbl->lock = CRYPTO_THREAD_lock_new();
   38|      2|    if (pcgbl->lock == NULL) {
  ------------------
  |  Branch (38:9): [True: 0, False: 2]
  ------------------
   39|      0|        OPENSSL_free(pcgbl);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   40|      0|        return NULL;
   41|      0|    }
   42|       |
   43|      2|    return pcgbl;
   44|      2|}

ossl_provider_store_new:
  310|      2|{
  311|      2|    struct provider_store_st *store = OPENSSL_zalloc(sizeof(*store));
  ------------------
  |  |  109|      2|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  312|       |
  313|      2|    if (store == NULL
  ------------------
  |  Branch (313:9): [True: 0, False: 2]
  ------------------
  314|      2|        || (store->providers = sk_OSSL_PROVIDER_new(ossl_provider_cmp)) == NULL
  ------------------
  |  Branch (314:12): [True: 0, False: 2]
  ------------------
  315|      2|        || (store->default_path_lock = CRYPTO_THREAD_lock_new()) == NULL
  ------------------
  |  Branch (315:12): [True: 0, False: 2]
  ------------------
  316|      2|#ifndef FIPS_MODULE
  317|      2|        || (store->child_cbs = sk_OSSL_PROVIDER_CHILD_CB_new_null()) == NULL
  ------------------
  |  Branch (317:12): [True: 0, False: 2]
  ------------------
  318|      2|#endif
  319|      2|        || (store->lock = CRYPTO_THREAD_lock_new()) == NULL) {
  ------------------
  |  Branch (319:12): [True: 0, False: 2]
  ------------------
  320|      0|        ossl_provider_store_free(store);
  321|      0|        return NULL;
  322|      0|    }
  323|      2|    store->libctx = ctx;
  324|      2|    store->use_fallbacks = 1;
  325|       |
  326|      2|    return store;
  327|      2|}

ossl_err_load_RAND_strings:
  105|      2|{
  106|      2|#ifndef OPENSSL_NO_ERR
  107|      2|    if (ERR_reason_error_string(RAND_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (107:9): [True: 2, False: 0]
  ------------------
  108|      2|        ERR_load_strings_const(RAND_str_reasons);
  109|      2|#endif
  110|      2|    return 1;
  111|      2|}

ossl_rand_ctx_new:
  447|      2|{
  448|      2|    RAND_GLOBAL *dgbl = OPENSSL_zalloc(sizeof(*dgbl));
  ------------------
  |  |  109|      2|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  449|       |
  450|      2|    if (dgbl == NULL)
  ------------------
  |  Branch (450:9): [True: 0, False: 2]
  ------------------
  451|      0|        return NULL;
  452|       |
  453|      2|#ifndef FIPS_MODULE
  454|       |    /*
  455|       |     * We need to ensure that base libcrypto thread handling has been
  456|       |     * initialised.
  457|       |     */
  458|      2|    OPENSSL_init_crypto(OPENSSL_INIT_BASE_ONLY, NULL);
  ------------------
  |  |   31|      2|#define OPENSSL_INIT_BASE_ONLY 0x00040000L
  ------------------
  459|       |
  460|       |    /* Prepopulate the random provider name */
  461|      2|    dgbl->random_provider_name = OPENSSL_strdup(random_provider_fips_name);
  ------------------
  |  |  136|      2|    CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  462|      2|    if (dgbl->random_provider_name == NULL)
  ------------------
  |  Branch (462:9): [True: 0, False: 2]
  ------------------
  463|      0|        goto err0;
  464|      2|#endif
  465|       |
  466|      2|    dgbl->lock = CRYPTO_THREAD_lock_new();
  467|      2|    if (dgbl->lock == NULL)
  ------------------
  |  Branch (467:9): [True: 0, False: 2]
  ------------------
  468|      0|        goto err1;
  469|       |
  470|      2|    return dgbl;
  471|       |
  472|      0|err1:
  473|      0|    CRYPTO_THREAD_lock_free(dgbl->lock);
  474|      0|#ifndef FIPS_MODULE
  475|      0|err0:
  476|      0|    OPENSSL_free(dgbl->random_provider_name);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  477|      0|#endif
  478|      0|    OPENSSL_free(dgbl);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  479|       |    return NULL;
  480|      0|}

ossl_err_load_RSA_strings:
  158|      2|{
  159|      2|#ifndef OPENSSL_NO_ERR
  160|      2|    if (ERR_reason_error_string(RSA_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (160:9): [True: 2, False: 0]
  ------------------
  161|      2|        ERR_load_strings_const(RSA_str_reasons);
  162|      2|#endif
  163|      2|    return 1;
  164|      2|}

ossl_self_test_set_callback_new:
   35|      2|{
   36|      2|    SELF_TEST_CB *stcb;
   37|       |
   38|      2|    stcb = OPENSSL_zalloc(sizeof(*stcb));
  ------------------
  |  |  109|      2|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   39|      2|    return stcb;
   40|      2|}

ossl_err_load_SM2_strings:
   41|      2|{
   42|      2|#ifndef OPENSSL_NO_ERR
   43|      2|    if (ERR_reason_error_string(SM2_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (43:9): [True: 2, False: 0]
  ------------------
   44|      2|        ERR_load_strings_const(SM2_str_reasons);
   45|      2|#endif
   46|      2|    return 1;
   47|      2|}

EVP_sm3:
   24|      2|{
   25|      2|    return &sm3_md;
   26|      2|}

ossl_sa_new:
   59|     34|{
   60|     34|    OPENSSL_SA *res = OPENSSL_zalloc(sizeof(*res));
  ------------------
  |  |  109|     34|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   61|       |
   62|     34|    return res;
   63|     34|}
ossl_sa_get:
  157|     26|{
  158|     26|    int level;
  159|     26|    void **p, *r = NULL;
  160|       |
  161|     26|    if (sa == NULL || sa->nelem == 0)
  ------------------
  |  Branch (161:9): [True: 0, False: 26]
  |  Branch (161:23): [True: 0, False: 26]
  ------------------
  162|      0|        return NULL;
  163|       |
  164|     26|    if (n <= sa->top) {
  ------------------
  |  Branch (164:9): [True: 26, False: 0]
  ------------------
  165|     26|        p = sa->nodes;
  166|     26|        for (level = sa->levels - 1; p != NULL && level > 0; level--)
  ------------------
  |  Branch (166:38): [True: 26, False: 0]
  |  Branch (166:51): [True: 0, False: 26]
  ------------------
  167|      0|            p = (void **)p[(n >> (OPENSSL_SA_BLOCK_BITS * level))
  ------------------
  |  |   34|      0|#define OPENSSL_SA_BLOCK_BITS 4
  ------------------
  168|      0|                & SA_BLOCK_MASK];
  ------------------
  |  |   46|      0|#define SA_BLOCK_MASK (SA_BLOCK_MAX - 1)
  |  |  ------------------
  |  |  |  |   45|      0|#define SA_BLOCK_MAX (1 << OPENSSL_SA_BLOCK_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#define OPENSSL_SA_BLOCK_BITS 4
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  169|     26|        r = p == NULL ? NULL : p[n & SA_BLOCK_MASK];
  ------------------
  |  |   46|     26|#define SA_BLOCK_MASK (SA_BLOCK_MAX - 1)
  |  |  ------------------
  |  |  |  |   45|     26|#define SA_BLOCK_MAX (1 << OPENSSL_SA_BLOCK_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|     26|#define OPENSSL_SA_BLOCK_BITS 4
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (169:13): [True: 0, False: 26]
  ------------------
  170|     26|    }
  171|     26|    return r;
  172|     26|}
ossl_sa_set:
  180|      8|{
  181|      8|    int i, level = 1;
  182|      8|    ossl_uintmax_t n = posn;
  183|      8|    void **p;
  184|       |
  185|      8|    if (sa == NULL)
  ------------------
  |  Branch (185:9): [True: 0, False: 8]
  ------------------
  186|      0|        return 0;
  187|       |
  188|      8|    for (level = 1; level < SA_BLOCK_MAX_LEVELS; level++)
  ------------------
  |  |   47|      8|#define SA_BLOCK_MAX_LEVELS (((int)sizeof(ossl_uintmax_t) * 8 \
  |  |   48|      8|                                 + OPENSSL_SA_BLOCK_BITS - 1) \
  |  |  ------------------
  |  |  |  |   34|      8|#define OPENSSL_SA_BLOCK_BITS 4
  |  |  ------------------
  |  |   49|      8|    / OPENSSL_SA_BLOCK_BITS)
  |  |  ------------------
  |  |  |  |   34|      8|#define OPENSSL_SA_BLOCK_BITS 4
  |  |  ------------------
  ------------------
  |  Branch (188:21): [True: 8, False: 0]
  ------------------
  189|      8|        if ((n >>= OPENSSL_SA_BLOCK_BITS) == 0)
  ------------------
  |  |   34|      8|#define OPENSSL_SA_BLOCK_BITS 4
  ------------------
  |  Branch (189:13): [True: 8, False: 0]
  ------------------
  190|      8|            break;
  191|       |
  192|     10|    for (; sa->levels < level; sa->levels++) {
  ------------------
  |  Branch (192:12): [True: 2, False: 8]
  ------------------
  193|      2|        p = alloc_node();
  194|      2|        if (p == NULL)
  ------------------
  |  Branch (194:13): [True: 0, False: 2]
  ------------------
  195|      0|            return 0;
  196|      2|        p[0] = sa->nodes;
  197|      2|        sa->nodes = p;
  198|      2|    }
  199|      8|    if (sa->top < posn)
  ------------------
  |  Branch (199:9): [True: 0, False: 8]
  ------------------
  200|      0|        sa->top = posn;
  201|       |
  202|      8|    p = sa->nodes;
  203|      8|    for (level = sa->levels - 1; level > 0; level--) {
  ------------------
  |  Branch (203:34): [True: 0, False: 8]
  ------------------
  204|      0|        i = (posn >> (OPENSSL_SA_BLOCK_BITS * level)) & SA_BLOCK_MASK;
  ------------------
  |  |   34|      0|#define OPENSSL_SA_BLOCK_BITS 4
  ------------------
                      i = (posn >> (OPENSSL_SA_BLOCK_BITS * level)) & SA_BLOCK_MASK;
  ------------------
  |  |   46|      0|#define SA_BLOCK_MASK (SA_BLOCK_MAX - 1)
  |  |  ------------------
  |  |  |  |   45|      0|#define SA_BLOCK_MAX (1 << OPENSSL_SA_BLOCK_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#define OPENSSL_SA_BLOCK_BITS 4
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|      0|        if (p[i] == NULL && (p[i] = alloc_node()) == NULL)
  ------------------
  |  Branch (205:13): [True: 0, False: 0]
  |  Branch (205:29): [True: 0, False: 0]
  ------------------
  206|      0|            return 0;
  207|      0|        p = p[i];
  208|      0|    }
  209|      8|    p += posn & SA_BLOCK_MASK;
  ------------------
  |  |   46|      8|#define SA_BLOCK_MASK (SA_BLOCK_MAX - 1)
  |  |  ------------------
  |  |  |  |   45|      8|#define SA_BLOCK_MAX (1 << OPENSSL_SA_BLOCK_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      8|#define OPENSSL_SA_BLOCK_BITS 4
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  210|      8|    if (val == NULL && *p != NULL)
  ------------------
  |  Branch (210:9): [True: 0, False: 8]
  |  Branch (210:24): [True: 0, False: 0]
  ------------------
  211|      0|        sa->nelem--;
  212|      8|    else if (val != NULL && *p == NULL)
  ------------------
  |  Branch (212:14): [True: 8, False: 0]
  |  Branch (212:29): [True: 2, False: 6]
  ------------------
  213|      2|        sa->nelem++;
  214|      8|    *p = val;
  215|      8|    return 1;
  216|      8|}
sparse_array.c:alloc_node:
  175|      2|{
  176|      2|    return OPENSSL_calloc(SA_BLOCK_MAX, sizeof(void *));
  ------------------
  |  |  113|      2|    CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  177|      2|}

OPENSSL_sk_new_null:
  111|     10|{
  112|       |    return OPENSSL_sk_new_reserve(NULL, 0);
  113|     10|}
OPENSSL_sk_new:
  116|      4|{
  117|      4|    return OPENSSL_sk_new_reserve(c, 0);
  118|      4|}
OPENSSL_sk_new_reserve:
  212|     14|{
  213|     14|    OPENSSL_STACK *st = OPENSSL_zalloc(sizeof(OPENSSL_STACK));
  ------------------
  |  |  109|     14|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  214|       |
  215|     14|    if (st == NULL)
  ------------------
  |  Branch (215:9): [True: 0, False: 14]
  ------------------
  216|      0|        return NULL;
  217|       |
  218|     14|    st->comp = c;
  219|     14|    st->sorted = 1; /* empty or single-element stack is considered sorted */
  220|       |
  221|     14|    if (n <= 0)
  ------------------
  |  Branch (221:9): [True: 14, False: 0]
  ------------------
  222|     14|        return st;
  223|       |
  224|      0|    if (!sk_reserve(st, n, 1)) {
  ------------------
  |  Branch (224:9): [True: 0, False: 0]
  ------------------
  225|      0|        OPENSSL_sk_free(st);
  226|      0|        return NULL;
  227|      0|    }
  228|       |
  229|      0|    return st;
  230|      0|}
OPENSSL_sk_set_thunks:
  245|     12|{
  246|     12|    if (st != NULL)
  ------------------
  |  Branch (246:9): [True: 12, False: 0]
  ------------------
  247|     12|        st->free_thunk = f_thunk;
  248|       |
  249|     12|    return st;
  250|     12|}
OPENSSL_sk_set_cmp_thunks:
  253|      4|{
  254|      4|    if (st != NULL)
  ------------------
  |  Branch (254:9): [True: 4, False: 0]
  ------------------
  255|      4|        st->cmp_thunk = c_thunk;
  256|       |
  257|      4|    return st;
  258|      4|}
OPENSSL_sk_insert:
  261|     18|{
  262|     18|    int cmp_ret;
  263|       |
  264|     18|    if (st == NULL) {
  ------------------
  |  Branch (264:9): [True: 0, False: 18]
  ------------------
  265|      0|        ERR_raise(ERR_LIB_CRYPTO, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  266|      0|        return 0;
  267|      0|    }
  268|     18|    if (st->num == max_nodes) {
  ------------------
  |  Branch (268:9): [True: 0, False: 18]
  ------------------
  269|      0|        ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_TOO_MANY_RECORDS);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  270|      0|        return 0;
  271|      0|    }
  272|       |
  273|     18|    if (!sk_reserve(st, 1, 0))
  ------------------
  |  Branch (273:9): [True: 0, False: 18]
  ------------------
  274|      0|        return 0;
  275|       |
  276|     18|    if ((loc >= st->num) || (loc < 0)) {
  ------------------
  |  Branch (276:9): [True: 18, False: 0]
  |  Branch (276:29): [True: 0, False: 0]
  ------------------
  277|     18|        loc = st->num;
  278|     18|        st->data[loc] = data;
  279|     18|    } else {
  280|      0|        memmove(&st->data[loc + 1], &st->data[loc],
  281|      0|            sizeof(st->data[0]) * (st->num - loc));
  282|      0|        st->data[loc] = data;
  283|      0|    }
  284|     18|    st->num++;
  285|     18|    if (st->sorted && st->num > 1) {
  ------------------
  |  Branch (285:9): [True: 10, False: 8]
  |  Branch (285:23): [True: 4, False: 6]
  ------------------
  286|      4|        if (st->comp != NULL) {
  ------------------
  |  Branch (286:13): [True: 0, False: 4]
  ------------------
  287|      0|            if (loc > 0) {
  ------------------
  |  Branch (287:17): [True: 0, False: 0]
  ------------------
  288|      0|                cmp_ret = cmp_with_thunk(st, &st->data[loc - 1], &st->data[loc]);
  289|      0|                if (cmp_ret > 0)
  ------------------
  |  Branch (289:21): [True: 0, False: 0]
  ------------------
  290|      0|                    st->sorted = 0;
  291|      0|            }
  292|      0|            if (loc < st->num - 1) {
  ------------------
  |  Branch (292:17): [True: 0, False: 0]
  ------------------
  293|      0|                cmp_ret = cmp_with_thunk(st, &st->data[loc + 1], &st->data[loc]);
  294|      0|                if (cmp_ret < 0)
  ------------------
  |  Branch (294:21): [True: 0, False: 0]
  ------------------
  295|      0|                    st->sorted = 0;
  296|      0|            }
  297|      4|        } else {
  298|      4|            st->sorted = 0;
  299|      4|        }
  300|      4|    }
  301|     18|    return st->num;
  302|     18|}
OPENSSL_sk_push:
  423|     18|{
  424|     18|    if (st == NULL)
  ------------------
  |  Branch (424:9): [True: 0, False: 18]
  ------------------
  425|      0|        return 0;
  426|     18|    return OPENSSL_sk_insert(st, data, st->num);
  427|     18|}
stack.c:sk_reserve:
  158|     18|{
  159|     18|    const void **tmpdata;
  160|     18|    int num_alloc;
  161|       |
  162|       |    /* Check to see the reservation isn't exceeding the hard limit */
  163|     18|    if (n > max_nodes - st->num) {
  ------------------
  |  Branch (163:9): [True: 0, False: 18]
  ------------------
  164|      0|        ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_TOO_MANY_RECORDS);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  165|      0|        return 0;
  166|      0|    }
  167|       |
  168|       |    /* Figure out the new size */
  169|     18|    num_alloc = st->num + n;
  170|     18|    if (num_alloc < min_nodes)
  ------------------
  |  Branch (170:9): [True: 12, False: 6]
  ------------------
  171|     12|        num_alloc = min_nodes;
  172|       |
  173|       |    /* If |st->data| allocation was postponed */
  174|     18|    if (st->data == NULL) {
  ------------------
  |  Branch (174:9): [True: 6, False: 12]
  ------------------
  175|       |        /*
  176|       |         * At this point, |st->num_alloc| and |st->num| are 0;
  177|       |         * so |num_alloc| value is |n| or |min_nodes| if greater than |n|.
  178|       |         */
  179|      6|        if ((st->data = OPENSSL_calloc(num_alloc, sizeof(void *))) == NULL)
  ------------------
  |  |  113|      6|    CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (179:13): [True: 0, False: 6]
  ------------------
  180|      0|            return 0;
  181|      6|        st->num_alloc = num_alloc;
  182|      6|        return 1;
  183|      6|    }
  184|       |
  185|     12|    if (!exact) {
  ------------------
  |  Branch (185:9): [True: 12, False: 0]
  ------------------
  186|     12|        if (num_alloc <= st->num_alloc)
  ------------------
  |  Branch (186:13): [True: 10, False: 2]
  ------------------
  187|     10|            return 1;
  188|      2|        num_alloc = compute_growth(num_alloc, st->num_alloc);
  189|      2|        if (num_alloc == 0) {
  ------------------
  |  Branch (189:13): [True: 0, False: 2]
  ------------------
  190|      0|            ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_TOO_MANY_RECORDS);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  191|      0|            return 0;
  192|      0|        }
  193|      2|    } else if (num_alloc == st->num_alloc) {
  ------------------
  |  Branch (193:16): [True: 0, False: 0]
  ------------------
  194|      0|        return 1;
  195|      0|    }
  196|       |
  197|      2|    tmpdata = OPENSSL_realloc_array((void *)st->data, num_alloc, sizeof(void *));
  ------------------
  |  |  125|      2|    CRYPTO_realloc_array(addr, num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_realloc_array(addr, num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  198|      2|    if (tmpdata == NULL)
  ------------------
  |  Branch (198:9): [True: 0, False: 2]
  ------------------
  199|      0|        return 0;
  200|       |
  201|      2|    st->data = tmpdata;
  202|      2|    st->num_alloc = num_alloc;
  203|      2|    return 1;
  204|      2|}
stack.c:compute_growth:
  140|      2|{
  141|      2|    int err = 0;
  142|       |
  143|      4|    while (current < target) {
  ------------------
  |  Branch (143:12): [True: 2, False: 2]
  ------------------
  144|      2|        if (current >= max_nodes)
  ------------------
  |  Branch (144:13): [True: 0, False: 2]
  ------------------
  145|      0|            return 0;
  146|       |
  147|      2|        current = safe_muldiv_int(current, 8, 5, &err);
  148|      2|        if (err != 0)
  ------------------
  |  Branch (148:13): [True: 0, False: 2]
  ------------------
  149|      0|            return 0;
  150|      2|        if (current >= max_nodes)
  ------------------
  |  Branch (150:13): [True: 0, False: 2]
  ------------------
  151|      0|            current = max_nodes;
  152|      2|    }
  153|      2|    return current;
  154|      2|}

ossl_err_load_OSSL_STORE_strings:
   71|      2|{
   72|      2|#ifndef OPENSSL_NO_ERR
   73|      2|    if (ERR_reason_error_string(OSSL_STORE_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (73:9): [True: 2, False: 0]
  ------------------
   74|      2|        ERR_load_strings_const(OSSL_STORE_str_reasons);
   75|      2|#endif
   76|      2|    return 1;
   77|      2|}

ossl_crypto_mutex_new:
   97|      2|{
   98|      2|    pthread_mutex_t *mutex;
   99|       |
  100|      2|    if ((mutex = OPENSSL_zalloc(sizeof(*mutex))) == NULL)
  ------------------
  |  |  109|      2|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (100:9): [True: 0, False: 2]
  ------------------
  101|      0|        return NULL;
  102|      2|    if (pthread_mutex_init(mutex, NULL) != 0) {
  ------------------
  |  Branch (102:9): [True: 0, False: 2]
  ------------------
  103|      0|        OPENSSL_free(mutex);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  104|      0|        return NULL;
  105|      0|    }
  106|      2|    return (CRYPTO_MUTEX *)mutex;
  107|      2|}
ossl_crypto_condvar_new:
  156|      2|{
  157|      2|    pthread_cond_t *cv_p;
  158|       |
  159|      2|    if ((cv_p = OPENSSL_zalloc(sizeof(*cv_p))) == NULL)
  ------------------
  |  |  109|      2|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (159:9): [True: 0, False: 2]
  ------------------
  160|      0|        return NULL;
  161|      2|    if (pthread_cond_init(cv_p, NULL) != 0) {
  ------------------
  |  Branch (161:9): [True: 0, False: 2]
  ------------------
  162|      0|        OPENSSL_free(cv_p);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  163|      0|        return NULL;
  164|      0|    }
  165|      2|    return (CRYPTO_CONDVAR *)cv_p;
  166|      2|}

ossl_threads_ctx_new:
  128|      2|{
  129|      2|    struct openssl_threads_st *t = OPENSSL_zalloc(sizeof(*t));
  ------------------
  |  |  109|      2|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  130|       |
  131|      2|    if (t == NULL)
  ------------------
  |  Branch (131:9): [True: 0, False: 2]
  ------------------
  132|      0|        return NULL;
  133|       |
  134|      2|    t->lock = ossl_crypto_mutex_new();
  135|      2|    t->cond_finished = ossl_crypto_condvar_new();
  136|       |
  137|      2|    if (t->lock == NULL || t->cond_finished == NULL)
  ------------------
  |  Branch (137:9): [True: 0, False: 2]
  |  Branch (137:28): [True: 0, False: 2]
  ------------------
  138|      0|        goto fail;
  139|       |
  140|      2|    return t;
  141|       |
  142|      0|fail:
  143|      0|    ossl_threads_ctx_free((void *)t);
  144|       |    return NULL;
  145|      2|}

CRYPTO_THREAD_get_local_ex:
  259|     28|{
  260|     28|    MASTER_KEY_ENTRY *mkey;
  261|     28|    CTX_TABLE_ENTRY ctxd;
  262|       |
  263|     28|    ctx = (ctx == CRYPTO_THREAD_NO_CONTEXT) ? NULL : ossl_lib_ctx_get_concrete(ctx);
  ------------------
  |  |   42|     28|#define CRYPTO_THREAD_NO_CONTEXT (void *)1
  ------------------
  |  Branch (263:11): [True: 28, False: 0]
  ------------------
  264|       |    /*
  265|       |     * Make sure the master key has been initialized
  266|       |     * NOTE: We use CRYPTO_THREAD_run_once here, rather than the
  267|       |     * RUN_ONCE macros.  We do this because this code is included both in
  268|       |     * libcrypto, and in fips.[dll|dylib|so].  FIPS attempts to avoid doing
  269|       |     * one time initialization of global data, and so suppresses the definition
  270|       |     * of RUN_ONCE, etc, meaning the build breaks if we were to use that with
  271|       |     * fips-enabled.  However, this is a special case in which we want/need
  272|       |     * this one bit of global data to be initialized in both the fips provider
  273|       |     * and in libcrypto, so we use CRYPTO_THREAD_run_one directly, which is
  274|       |     * always defined.
  275|       |     */
  276|     28|    if (!CRYPTO_THREAD_run_once(&master_once, init_master_key))
  ------------------
  |  Branch (276:9): [True: 0, False: 28]
  ------------------
  277|      0|        return NULL;
  278|       |
  279|     28|    if (!ossl_assert(id < CRYPTO_THREAD_LOCAL_KEY_MAX))
  ------------------
  |  |   52|     28|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|     28|    __FILE__, __LINE__)
  ------------------
  |  Branch (279:9): [True: 0, False: 28]
  ------------------
  280|      0|        return NULL;
  281|       |
  282|       |    /*
  283|       |     * Get our master table sparse array, indexed by key id
  284|       |     */
  285|     28|    mkey = CRYPTO_THREAD_get_local(&master_key);
  286|     28|    if (mkey == NULL)
  ------------------
  |  Branch (286:9): [True: 2, False: 26]
  ------------------
  287|      2|        return NULL;
  288|       |
  289|       |    /*
  290|       |     * Get the specific data entry in the master key
  291|       |     * table for the key id we are searching for
  292|       |     */
  293|     26|    if (mkey[id].ctx_table == NULL)
  ------------------
  |  Branch (293:9): [True: 0, False: 26]
  ------------------
  294|      0|        return NULL;
  295|       |
  296|       |    /*
  297|       |     * If we find an entry above, that will be a sparse array,
  298|       |     * indexed by OSSL_LIB_CTX.
  299|       |     * Note: Because we're using sparse arrays here, we can do an easy
  300|       |     * trick, since we know all OSSL_LIB_CTX pointers are unique.  By casting
  301|       |     * the pointer to a unitptr_t, we can use that as an ordinal index into
  302|       |     * the sparse array.
  303|       |     */
  304|     26|    ctxd = ossl_sa_CTX_TABLE_ENTRY_get(mkey[id].ctx_table, (uintptr_t)ctx);
  305|       |
  306|       |    /*
  307|       |     * If we find an entry for the passed in context, return its data pointer
  308|       |     */
  309|     26|    return ctxd;
  310|     26|}
CRYPTO_THREAD_set_local_ex:
  338|      8|{
  339|      8|    MASTER_KEY_ENTRY *mkey;
  340|       |
  341|      8|    ctx = (ctx == CRYPTO_THREAD_NO_CONTEXT) ? NULL : ossl_lib_ctx_get_concrete(ctx);
  ------------------
  |  |   42|      8|#define CRYPTO_THREAD_NO_CONTEXT (void *)1
  ------------------
  |  Branch (341:11): [True: 8, False: 0]
  ------------------
  342|       |    /*
  343|       |     * Make sure our master key is initialized
  344|       |     * See notes above on the use of CRYPTO_THREAD_run_once here
  345|       |     */
  346|      8|    if (!CRYPTO_THREAD_run_once(&master_once, init_master_key))
  ------------------
  |  Branch (346:9): [True: 0, False: 8]
  ------------------
  347|      0|        return 0;
  348|       |
  349|      8|    if (!ossl_assert(id < CRYPTO_THREAD_LOCAL_KEY_MAX))
  ------------------
  |  |   52|      8|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|      8|    __FILE__, __LINE__)
  ------------------
  |  Branch (349:9): [True: 0, False: 8]
  ------------------
  350|      0|        return 0;
  351|       |
  352|       |    /*
  353|       |     * Get our local master key data, which will be
  354|       |     * a sparse array indexed by the id parameter
  355|       |     */
  356|      8|    mkey = CRYPTO_THREAD_get_local(&master_key);
  357|      8|    if (mkey == NULL) {
  ------------------
  |  Branch (357:9): [True: 2, False: 6]
  ------------------
  358|       |        /*
  359|       |         * we didn't find one, but that's ok, just initialize it now
  360|       |         */
  361|      2|        mkey = OPENSSL_calloc(CRYPTO_THREAD_LOCAL_KEY_MAX,
  ------------------
  |  |  113|      2|    CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  362|      2|            sizeof(MASTER_KEY_ENTRY));
  363|      2|        if (mkey == NULL)
  ------------------
  |  Branch (363:13): [True: 0, False: 2]
  ------------------
  364|      0|            return 0;
  365|       |        /*
  366|       |         * make sure to assign it to our master key thread-local storage
  367|       |         */
  368|      2|        if (!CRYPTO_THREAD_set_local(&master_key, mkey)) {
  ------------------
  |  Branch (368:13): [True: 0, False: 2]
  ------------------
  369|      0|            OPENSSL_free(mkey);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  370|      0|            return 0;
  371|      0|        }
  372|      2|    }
  373|       |
  374|       |    /*
  375|       |     * Find the entry that we are looking for using our id index
  376|       |     */
  377|      8|    if (mkey[id].ctx_table == NULL) {
  ------------------
  |  Branch (377:9): [True: 2, False: 6]
  ------------------
  378|       |
  379|       |        /*
  380|       |         * Didn't find it, that's ok, just add it now
  381|       |         */
  382|      2|        mkey[id].ctx_table = ossl_sa_CTX_TABLE_ENTRY_new();
  383|      2|        if (mkey[id].ctx_table == NULL)
  ------------------
  |  Branch (383:13): [True: 0, False: 2]
  ------------------
  384|      0|            return 0;
  385|      2|    }
  386|       |
  387|       |    /*
  388|       |     * Now go look up our per context entry, using the OSSL_LIB_CTX pointer
  389|       |     * that we've been provided.  Note we cast the pointer to a uintptr_t so
  390|       |     * as to use it as an index in the sparse array
  391|       |     *
  392|       |     * Assign to the entry in the table so that we can find it later
  393|       |     */
  394|      8|    return ossl_sa_CTX_TABLE_ENTRY_set(mkey[id].ctx_table,
  395|      8|        (uintptr_t)ctx, data);
  396|      8|}
threads_common.c:init_master_key:
  216|      2|{
  217|       |    /*
  218|       |     * Note: We assign a cleanup function here, which is atypical for
  219|       |     * uses of CRYPTO_THREAD_init_local.  This is because, nominally
  220|       |     * we expect that the use of ossl_init_thread_start will be used
  221|       |     * to notify openssl of exiting threads.  However, in this case
  222|       |     * we want the metadata for this interface (the sparse arrays) to
  223|       |     * stay valid until the thread actually exits, which is what the
  224|       |     * clean_master_key function does.  Data held in the sparse arrays
  225|       |     * (that is assigned via CRYPTO_THREAD_set_local_ex), are still expected
  226|       |     * to be cleaned via the ossl_init_thread_start/stop api.
  227|       |     */
  228|      2|    if (!CRYPTO_THREAD_init_local(&master_key, clean_master_key))
  ------------------
  |  Branch (228:9): [True: 0, False: 2]
  ------------------
  229|      0|        return;
  230|       |
  231|       |    /*
  232|       |     * Indicate that the key has been set up.
  233|       |     */
  234|      2|    master_key_init = 1;
  235|      2|}

ossl_rcu_lock_new:
  567|      2|{
  568|      2|    struct rcu_lock_st *new;
  569|      2|    pthread_mutex_t *mutexes[3] = { NULL };
  570|      2|    pthread_cond_t *conds[2] = { NULL };
  571|      2|    int i;
  572|       |
  573|       |    /*
  574|       |     * We need a minimum of 2 qp's
  575|       |     */
  576|      2|    if (num_writers < 2)
  ------------------
  |  Branch (576:9): [True: 2, False: 0]
  ------------------
  577|      2|        num_writers = 2;
  578|       |
  579|      2|    ctx = ossl_lib_ctx_get_concrete(ctx);
  580|      2|    if (ctx == NULL)
  ------------------
  |  Branch (580:9): [True: 0, False: 2]
  ------------------
  581|      0|        return 0;
  582|       |
  583|      2|    new = OPENSSL_zalloc(sizeof(*new));
  ------------------
  |  |  109|      2|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  584|      2|    if (new == NULL)
  ------------------
  |  Branch (584:9): [True: 0, False: 2]
  ------------------
  585|      0|        return NULL;
  586|       |
  587|      2|    new->ctx = ctx;
  588|      2|    i = 0;
  589|      2|    mutexes[i] = pthread_mutex_init(&new->write_lock, NULL) == 0 ? &new->write_lock : NULL;
  ------------------
  |  Branch (589:18): [True: 2, False: 0]
  ------------------
  590|      2|    if (mutexes[i++] == NULL)
  ------------------
  |  Branch (590:9): [True: 0, False: 2]
  ------------------
  591|      0|        goto err;
  592|      2|    mutexes[i] = pthread_mutex_init(&new->prior_lock, NULL) == 0 ? &new->prior_lock : NULL;
  ------------------
  |  Branch (592:18): [True: 2, False: 0]
  ------------------
  593|      2|    if (mutexes[i++] == NULL)
  ------------------
  |  Branch (593:9): [True: 0, False: 2]
  ------------------
  594|      0|        goto err;
  595|      2|    mutexes[i] = pthread_mutex_init(&new->alloc_lock, NULL) == 0 ? &new->alloc_lock : NULL;
  ------------------
  |  Branch (595:18): [True: 2, False: 0]
  ------------------
  596|      2|    if (mutexes[i++] == NULL)
  ------------------
  |  Branch (596:9): [True: 0, False: 2]
  ------------------
  597|      0|        goto err;
  598|      2|    conds[i - 3] = pthread_cond_init(&new->prior_signal, NULL) == 0 ? &new->prior_signal : NULL;
  ------------------
  |  Branch (598:20): [True: 2, False: 0]
  ------------------
  599|      2|    if (conds[i - 3] == NULL)
  ------------------
  |  Branch (599:9): [True: 0, False: 2]
  ------------------
  600|      0|        goto err;
  601|      2|    i++;
  602|      2|    conds[i - 3] = pthread_cond_init(&new->alloc_signal, NULL) == 0 ? &new->alloc_signal : NULL;
  ------------------
  |  Branch (602:20): [True: 2, False: 0]
  ------------------
  603|      2|    if (conds[i - 3] == NULL)
  ------------------
  |  Branch (603:9): [True: 0, False: 2]
  ------------------
  604|      0|        goto err;
  605|      2|    i++;
  606|      2|    new->qp_group = allocate_new_qp_group(new, num_writers);
  607|      2|    if (new->qp_group == NULL)
  ------------------
  |  Branch (607:9): [True: 0, False: 2]
  ------------------
  608|      0|        goto err;
  609|       |
  610|      2|    return new;
  611|       |
  612|      0|err:
  613|      0|    for (i = 0; i < 3; i++)
  ------------------
  |  Branch (613:17): [True: 0, False: 0]
  ------------------
  614|      0|        if (mutexes[i] != NULL)
  ------------------
  |  Branch (614:13): [True: 0, False: 0]
  ------------------
  615|      0|            pthread_mutex_destroy(mutexes[i]);
  616|      0|    for (i = 0; i < 2; i++)
  ------------------
  |  Branch (616:17): [True: 0, False: 0]
  ------------------
  617|      0|        if (conds[i] != NULL)
  ------------------
  |  Branch (617:13): [True: 0, False: 0]
  ------------------
  618|      0|            pthread_cond_destroy(conds[i]);
  619|      0|    OPENSSL_free(new->qp_group);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  620|      0|    OPENSSL_free(new);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  621|       |    return NULL;
  622|      2|}
CRYPTO_THREAD_lock_new:
  909|     72|{
  910|     72|#ifdef USE_RWLOCK
  911|     72|    CRYPTO_RWLOCK *lock;
  912|       |
  913|     72|    ossl_init_rwlock_contention_data();
  914|       |
  915|     72|    if ((lock = OPENSSL_zalloc(sizeof(pthread_rwlock_t))) == NULL)
  ------------------
  |  |  109|     72|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (915:9): [True: 0, False: 72]
  ------------------
  916|       |        /* Don't set error, to avoid recursion blowup. */
  917|      0|        return NULL;
  918|       |
  919|     72|    if (pthread_rwlock_init(lock, NULL) != 0) {
  ------------------
  |  Branch (919:9): [True: 0, False: 72]
  ------------------
  920|      0|        OPENSSL_free(lock);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  921|      0|        return NULL;
  922|      0|    }
  923|       |#else
  924|       |    pthread_mutexattr_t attr;
  925|       |    CRYPTO_RWLOCK *lock;
  926|       |
  927|       |    if ((lock = OPENSSL_zalloc(sizeof(pthread_mutex_t))) == NULL)
  928|       |        /* Don't set error, to avoid recursion blowup. */
  929|       |        return NULL;
  930|       |
  931|       |    /*
  932|       |     * We don't use recursive mutexes, but try to catch errors if we do.
  933|       |     */
  934|       |    pthread_mutexattr_init(&attr);
  935|       |#if !defined(__TANDEM) && !defined(_SPT_MODEL_)
  936|       |#if !defined(NDEBUG) && !defined(OPENSSL_NO_MUTEX_ERRORCHECK)
  937|       |    pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK);
  938|       |#endif
  939|       |#else
  940|       |    /* The SPT Thread Library does not define MUTEX attributes. */
  941|       |#endif
  942|       |
  943|       |    if (pthread_mutex_init(lock, &attr) != 0) {
  944|       |        pthread_mutexattr_destroy(&attr);
  945|       |        OPENSSL_free(lock);
  946|       |        return NULL;
  947|       |    }
  948|       |
  949|       |    pthread_mutexattr_destroy(&attr);
  950|       |#endif
  951|       |
  952|     72|    return lock;
  953|     72|}
CRYPTO_THREAD_read_lock:
  956|    152|{
  957|    152|#ifdef USE_RWLOCK
  958|    152|    if (!ossl_assert(ossl_rwlock_rdlock(lock) == 0))
  ------------------
  |  |   52|    152|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|    152|    __FILE__, __LINE__)
  ------------------
  |  Branch (958:9): [True: 0, False: 152]
  ------------------
  959|      0|        return 0;
  960|       |#else
  961|       |    if (pthread_mutex_lock(lock) != 0) {
  962|       |        assert(errno != EDEADLK && errno != EBUSY);
  963|       |        return 0;
  964|       |    }
  965|       |#endif
  966|       |
  967|    152|    return 1;
  968|    152|}
CRYPTO_THREAD_write_lock:
  971|  1.07k|{
  972|  1.07k|#ifdef USE_RWLOCK
  973|  1.07k|    if (!ossl_assert(ossl_rwlock_wrlock(lock) == 0))
  ------------------
  |  |   52|  1.07k|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|  1.07k|    __FILE__, __LINE__)
  ------------------
  |  Branch (973:9): [True: 0, False: 1.07k]
  ------------------
  974|      0|        return 0;
  975|       |#else
  976|       |    if (pthread_mutex_lock(lock) != 0) {
  977|       |        assert(errno != EDEADLK && errno != EBUSY);
  978|       |        return 0;
  979|       |    }
  980|       |#endif
  981|       |
  982|  1.07k|    return 1;
  983|  1.07k|}
CRYPTO_THREAD_unlock:
  986|  1.22k|{
  987|  1.22k|#ifdef USE_RWLOCK
  988|  1.22k|    if (ossl_rwlock_unlock(lock) != 0)
  ------------------
  |  Branch (988:9): [True: 0, False: 1.22k]
  ------------------
  989|      0|        return 0;
  990|       |#else
  991|       |    if (pthread_mutex_unlock(lock) != 0) {
  992|       |        assert(errno != EPERM);
  993|       |        return 0;
  994|       |    }
  995|       |#endif
  996|       |
  997|  1.22k|    return 1;
  998|  1.22k|}
CRYPTO_THREAD_run_once:
 1016|  1.07k|{
 1017|  1.07k|    if (ossl_unlikely(pthread_once(once, init) != 0))
  ------------------
  |  |   23|  1.07k|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 1.07k]
  |  |  ------------------
  ------------------
 1018|      0|        return 0;
 1019|       |
 1020|  1.07k|    return 1;
 1021|  1.07k|}
CRYPTO_THREAD_init_local:
 1024|      8|{
 1025|      8|    if (pthread_key_create(key, cleanup) != 0)
  ------------------
  |  Branch (1025:9): [True: 0, False: 8]
  ------------------
 1026|      0|        return 0;
 1027|       |
 1028|      8|    return 1;
 1029|      8|}
CRYPTO_THREAD_get_local:
 1032|     42|{
 1033|     42|    return pthread_getspecific(*key);
 1034|     42|}
CRYPTO_THREAD_set_local:
 1037|      6|{
 1038|      6|    if (pthread_setspecific(*key, val) != 0)
  ------------------
  |  Branch (1038:9): [True: 0, False: 6]
  ------------------
 1039|      0|        return 0;
 1040|       |
 1041|      6|    return 1;
 1042|      6|}
CRYPTO_atomic_or:
 1142|      4|{
 1143|      4|#if defined(__GNUC__) && defined(__ATOMIC_ACQ_REL) && !defined(BROKEN_CLANG_ATOMICS)
 1144|      4|    if (__atomic_is_lock_free(sizeof(*val), val)) {
  ------------------
  |  Branch (1144:9): [True: 4, Folded]
  ------------------
 1145|      4|        *ret = __atomic_or_fetch(val, op, __ATOMIC_ACQ_REL);
 1146|      4|        return 1;
 1147|      4|    }
 1148|       |#elif defined(__sun) && (defined(__SunOS_5_10) || defined(__SunOS_5_11))
 1149|       |    /* This will work for all future Solaris versions. */
 1150|       |    if (ret != NULL) {
 1151|       |        *ret = atomic_or_64_nv(val, op);
 1152|       |        return 1;
 1153|       |    }
 1154|       |#endif
 1155|      0|    if (lock == NULL || !CRYPTO_THREAD_write_lock(lock))
  ------------------
  |  Branch (1155:9): [True: 0, False: 0]
  |  Branch (1155:25): [True: 0, False: 0]
  ------------------
 1156|      0|        return 0;
 1157|      0|    *val |= op;
 1158|      0|    *ret = *val;
 1159|       |
 1160|      0|    if (!CRYPTO_THREAD_unlock(lock))
  ------------------
  |  Branch (1160:9): [True: 0, False: 0]
  ------------------
 1161|      0|        return 0;
 1162|       |
 1163|      0|    return 1;
 1164|      0|}
CRYPTO_atomic_load:
 1167|     36|{
 1168|     36|#if defined(__GNUC__) && defined(__ATOMIC_ACQ_REL) && !defined(BROKEN_CLANG_ATOMICS)
 1169|     36|    if (__atomic_is_lock_free(sizeof(*val), val)) {
  ------------------
  |  Branch (1169:9): [True: 36, Folded]
  ------------------
 1170|     36|        __atomic_load(val, ret, __ATOMIC_ACQUIRE);
 1171|     36|        return 1;
 1172|     36|    }
 1173|       |#elif defined(__sun) && (defined(__SunOS_5_10) || defined(__SunOS_5_11))
 1174|       |    /* This will work for all future Solaris versions. */
 1175|       |    if (ret != NULL) {
 1176|       |        *ret = atomic_or_64_nv(val, 0);
 1177|       |        return 1;
 1178|       |    }
 1179|       |#endif
 1180|      0|    if (lock == NULL || !CRYPTO_THREAD_read_lock(lock))
  ------------------
  |  Branch (1180:9): [True: 0, False: 0]
  |  Branch (1180:25): [True: 0, False: 0]
  ------------------
 1181|      0|        return 0;
 1182|      0|    *ret = *val;
 1183|      0|    if (!CRYPTO_THREAD_unlock(lock))
  ------------------
  |  Branch (1183:9): [True: 0, False: 0]
  ------------------
 1184|      0|        return 0;
 1185|       |
 1186|      0|    return 1;
 1187|      0|}
threads_pthread.c:allocate_new_qp_group:
  467|      2|{
  468|      2|    struct rcu_qp *new = OPENSSL_calloc(count, sizeof(*new));
  ------------------
  |  |  113|      2|    CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  469|       |
  470|      2|    lock->group_count = count;
  471|      2|    return new;
  472|      2|}
threads_pthread.c:ossl_init_rwlock_contention_data:
  888|     72|{
  889|     72|}
threads_pthread.c:ossl_rwlock_rdlock:
  892|    152|{
  893|    152|    return pthread_rwlock_rdlock(rwlock);
  894|    152|}
threads_pthread.c:ossl_rwlock_wrlock:
  897|  1.07k|{
  898|  1.07k|    return pthread_rwlock_wrlock(rwlock);
  899|  1.07k|}
threads_pthread.c:ossl_rwlock_unlock:
  902|  1.22k|{
  903|  1.22k|    return pthread_rwlock_unlock(rwlock);
  904|  1.22k|}

ossl_err_load_TS_strings:
   82|      2|{
   83|      2|#ifndef OPENSSL_NO_ERR
   84|      2|    if (ERR_reason_error_string(TS_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (84:9): [True: 2, False: 0]
  ------------------
   85|      2|        ERR_load_strings_const(TS_str_reasons);
   86|      2|#endif
   87|      2|    return 1;
   88|      2|}

ossl_err_load_UI_strings:
   41|      2|{
   42|      2|#ifndef OPENSSL_NO_ERR
   43|      2|    if (ERR_reason_error_string(UI_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (43:9): [True: 2, False: 0]
  ------------------
   44|      2|        ERR_load_strings_const(UI_str_reasons);
   45|      2|#endif
   46|      2|    return 1;
   47|      2|}

ossl_err_load_X509V3_strings:
  146|      2|{
  147|      2|#ifndef OPENSSL_NO_ERR
  148|      2|    if (ERR_reason_error_string(X509V3_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (148:9): [True: 2, False: 0]
  ------------------
  149|      2|        ERR_load_strings_const(X509V3_str_reasons);
  150|      2|#endif
  151|      2|    return 1;
  152|      2|}

X509_get_default_cert_area:
   79|      2|{
   80|       |#if defined(_WIN32)
   81|       |    RUN_ONCE(&openssldir_setup_init, do_openssldir_setup);
   82|       |    return x509_cert_areaptr;
   83|       |#else
   84|      2|    return X509_CERT_AREA;
  ------------------
  |  |   83|      2|#define X509_CERT_AREA OPENSSLDIR
  ------------------
   85|      2|#endif
   86|      2|}

ossl_err_load_X509_strings:
   95|      2|{
   96|      2|#ifndef OPENSSL_NO_ERR
   97|      2|    if (ERR_reason_error_string(X509_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (97:9): [True: 2, False: 0]
  ------------------
   98|      2|        ERR_load_strings_const(X509_str_reasons);
   99|      2|#endif
  100|      2|    return 1;
  101|      2|}

EVP_aria_128_cbc:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_128_cfb128:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_128_ofb:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_128_ecb:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_192_cbc:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_192_cfb128:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_192_ofb:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_192_ecb:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_256_cbc:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_256_cfb128:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_256_ofb:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_256_ecb:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_128_cfb1:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_192_cfb1:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_256_cfb1:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_128_cfb8:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_192_cfb8:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_256_cfb8:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_bf_cbc:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_bf_cfb64:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_bf_ofb:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_bf_ecb:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_cast5_cbc:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_cast5_cfb64:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_cast5_ofb:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_cast5_ecb:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_cbc:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_cfb64:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ofb:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ecb:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_cfb1:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_cfb8:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede_cbc:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede_cfb64:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede_ofb:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede3_cbc:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede3_cfb64:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede3_ofb:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede3_cfb1:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede3_cfb8:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_idea_cbc:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_idea_cfb64:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_idea_ofb:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_idea_ecb:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_rc2_cbc:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_rc2_cfb64:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_rc2_ofb:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_rc2_ecb:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_rc5_32_12_16_cbc:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_rc5_32_12_16_cfb64:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_rc5_32_12_16_ofb:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_rc5_32_12_16_ecb:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_seed_cbc:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_seed_cfb128:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_seed_ofb:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_seed_ecb:
  272|      2|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }

threads_common.c:ossl_sa_CTX_TABLE_ENTRY_get:
   60|     26|    {                                                                                                              \
   61|     26|        return (type *)ossl_sa_get((OPENSSL_SA *)sa, n);                                                           \
   62|     26|    }                                                                                                              \
threads_common.c:ossl_sa_CTX_TABLE_ENTRY_new:
   26|      2|    {                                                                                                              \
   27|      2|        return (SPARSE_ARRAY_OF(type) *)ossl_sa_new();                                                             \
   28|      2|    }                                                                                                              \
threads_common.c:ossl_sa_CTX_TABLE_ENTRY_set:
   66|      8|    {                                                                                                              \
   67|      8|        return ossl_sa_set((OPENSSL_SA *)sa, n, (void *)val);                                                      \
   68|      8|    }                                                                                                              \
property.c:ossl_sa_ALGORITHM_new:
   26|     32|    {                                                                                                              \
   27|     32|        return (SPARSE_ARRAY_OF(type) *)ossl_sa_new();                                                             \
   28|     32|    }                                                                                                              \

threads_common.c:ossl_assert_int:
   45|     36|{
   46|     36|    if (!expr)
  ------------------
  |  Branch (46:9): [True: 0, False: 36]
  ------------------
   47|      0|        OPENSSL_die(exprstr, file, line);
   48|       |
   49|     36|    return expr;
   50|     36|}
threads_pthread.c:ossl_assert_int:
   45|  1.22k|{
   46|  1.22k|    if (!expr)
  ------------------
  |  Branch (46:9): [True: 0, False: 1.22k]
  ------------------
   47|      0|        OPENSSL_die(exprstr, file, line);
   48|       |
   49|  1.22k|    return expr;
   50|  1.22k|}

array_alloc.c:ossl_size_mul:
   88|     54|{
   89|     54|    int err = 0;
   90|     54|    *bytes = safe_mul_size_t(num, size, &err);
   91|       |
   92|     54|    if (ossl_unlikely(err != 0)) {
  ------------------
  |  |   23|     54|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 54]
  |  |  ------------------
  ------------------
   93|      0|        ossl_report_alloc_err_of(file, line);
   94|       |
   95|      0|        return false;
   96|      0|    }
   97|       |
   98|     54|    return true;
   99|     54|}

array_alloc.c:safe_mul_size_t:
  151|     54|    {                                                                \
  152|     54|        type r;                                                      \
  153|     54|                                                                     \
  154|     54|        if (!__builtin_mul_overflow(a, b, &r))                       \
  ------------------
  |  Branch (154:13): [True: 54, False: 0]
  ------------------
  155|     54|            return r;                                                \
  156|     54|        *err |= 1;                                                   \
  157|      0|        return a * b;                                                \
  158|     54|    }
stack.c:safe_muldiv_int:
  324|      2|    {                                                                   \
  325|      2|        int e2 = 0;                                                     \
  326|      2|        type q, r, x, y;                                                \
  327|      2|                                                                        \
  328|      2|        if (c == 0) {                                                   \
  ------------------
  |  Branch (328:13): [True: 0, False: 2]
  ------------------
  329|      0|            *err |= 1;                                                  \
  330|      0|            return a == 0 || b == 0 ? 0 : max;                          \
  ------------------
  |  Branch (330:20): [True: 0, False: 0]
  |  Branch (330:30): [True: 0, False: 0]
  ------------------
  331|      0|        }                                                               \
  332|      2|        x = safe_mul_##type_name(a, b, &e2);                            \
  333|      2|        if (!e2)                                                        \
  ------------------
  |  Branch (333:13): [True: 2, False: 0]
  ------------------
  334|      2|            return safe_div_##type_name(x, c, err);                     \
  335|      2|        if (b > a) {                                                    \
  ------------------
  |  Branch (335:13): [True: 0, False: 0]
  ------------------
  336|      0|            x = b;                                                      \
  337|      0|            b = a;                                                      \
  338|      0|            a = x;                                                      \
  339|      0|        }                                                               \
  340|      0|        q = safe_div_##type_name(a, c, err);                            \
  341|      0|        r = safe_mod_##type_name(a, c, err);                            \
  342|      0|        x = safe_mul_##type_name(r, b, err);                            \
  343|      0|        y = safe_mul_##type_name(q, b, err);                            \
  344|      0|        q = safe_div_##type_name(x, c, err);                            \
  345|      0|        return safe_add_##type_name(y, q, err);                         \
  346|      2|    }
stack.c:safe_mul_int:
  138|      2|    {                                                                \
  139|      2|        type r;                                                      \
  140|      2|                                                                     \
  141|      2|        if (!__builtin_mul_overflow(a, b, &r))                       \
  ------------------
  |  Branch (141:13): [True: 2, False: 0]
  ------------------
  142|      2|            return r;                                                \
  143|      2|        *err |= 1;                                                   \
  144|      0|        return (a < 0) ^ (b < 0) ? min : max;                        \
  ------------------
  |  Branch (144:16): [True: 0, False: 0]
  ------------------
  145|      2|    }
stack.c:safe_div_int:
  201|      2|    {                                                                \
  202|      2|        if (b == 0) {                                                \
  ------------------
  |  Branch (202:13): [True: 0, False: 2]
  ------------------
  203|      0|            *err |= 1;                                               \
  204|      0|            return a < 0 ? min : max;                                \
  ------------------
  |  Branch (204:20): [True: 0, False: 0]
  ------------------
  205|      0|        }                                                            \
  206|      2|        if (b == -1 && a == min) {                                   \
  ------------------
  |  Branch (206:13): [True: 0, False: 2]
  |  Branch (206:24): [True: 0, False: 0]
  ------------------
  207|      0|            *err |= 1;                                               \
  208|      0|            return max;                                              \
  209|      0|        }                                                            \
  210|      2|        return a / b;                                                \
  211|      2|    }

ssl_init.c:ossl_init_ssl_base_ossl_:
   73|      2|    {                                \
   74|      2|        init##_ossl_ret_ = init();   \
   75|      2|    }                                \
err.c:do_err_strings_init_ossl_:
   73|      2|    {                                \
   74|      2|        init##_ossl_ret_ = init();   \
   75|      2|    }                                \
context.c:default_context_do_thread_key_init_ossl_:
   73|      2|    {                                \
   74|      2|        init##_ossl_ret_ = init();   \
   75|      2|    }                                \
context.c:default_context_do_init_ossl_:
   73|      2|    {                                \
   74|      2|        init##_ossl_ret_ = init();   \
   75|      2|    }                                \
init.c:ossl_init_base_ossl_:
   73|      2|    {                                \
   74|      2|        init##_ossl_ret_ = init();   \
   75|      2|    }                                \
init.c:ossl_init_load_crypto_strings_ossl_:
   73|      2|    {                                \
   74|      2|        init##_ossl_ret_ = init();   \
   75|      2|    }                                \
init.c:ossl_init_add_all_ciphers_ossl_:
   73|      2|    {                                \
   74|      2|        init##_ossl_ret_ = init();   \
   75|      2|    }                                \
init.c:ossl_init_add_all_digests_ossl_:
   73|      2|    {                                \
   74|      2|        init##_ossl_ret_ = init();   \
   75|      2|    }                                \
init.c:ossl_init_config_ossl_:
   73|      2|    {                                \
   74|      2|        init##_ossl_ret_ = init();   \
   75|      2|    }                                \
initthread.c:create_global_tevent_register_ossl_:
   73|      2|    {                                \
   74|      2|        init##_ossl_ret_ = init();   \
   75|      2|    }                                \
o_names.c:o_names_init_ossl_:
   73|      2|    {                                \
   74|      2|        init##_ossl_ret_ = init();   \
   75|      2|    }                                \

conf_mod.c:ERR_GET_REASON:
  239|      2|{
  240|      2|    if (ERR_SYSTEM_ERROR(errcode))
  ------------------
  |  |  222|      2|#define ERR_SYSTEM_ERROR(errcode) (((errcode) & ERR_SYSTEM_FLAG) != 0)
  |  |  ------------------
  |  |  |  |  201|      2|#define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1)
  |  |  ------------------
  |  |  |  Branch (222:35): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  241|      0|        return errcode & ERR_SYSTEM_MASK;
  ------------------
  |  |  202|      0|#define ERR_SYSTEM_MASK ((unsigned int)INT_MAX)
  ------------------
  242|      2|    return errcode & ERR_REASON_MASK;
  ------------------
  |  |  213|      2|#define ERR_REASON_MASK 0X7FFFFF
  ------------------
  243|      2|}
err.c:ERR_GET_LIB:
  225|  8.82k|{
  226|  8.82k|    if (ERR_SYSTEM_ERROR(errcode))
  ------------------
  |  |  222|  8.82k|#define ERR_SYSTEM_ERROR(errcode) (((errcode) & ERR_SYSTEM_FLAG) != 0)
  |  |  ------------------
  |  |  |  |  201|  8.82k|#define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1)
  |  |  ------------------
  |  |  |  Branch (222:35): [True: 0, False: 8.82k]
  |  |  ------------------
  ------------------
  227|      0|        return ERR_LIB_SYS;
  ------------------
  |  |   55|      0|#define ERR_LIB_SYS 2
  ------------------
  228|  8.82k|    return (errcode >> ERR_LIB_OFFSET) & ERR_LIB_MASK;
  ------------------
  |  |  209|  8.82k|#define ERR_LIB_OFFSET 23L
  ------------------
                  return (errcode >> ERR_LIB_OFFSET) & ERR_LIB_MASK;
  ------------------
  |  |  210|  8.82k|#define ERR_LIB_MASK 0xFF
  ------------------
  229|  8.82k|}
err.c:ERR_GET_REASON:
  239|     68|{
  240|     68|    if (ERR_SYSTEM_ERROR(errcode))
  ------------------
  |  |  222|     68|#define ERR_SYSTEM_ERROR(errcode) (((errcode) & ERR_SYSTEM_FLAG) != 0)
  |  |  ------------------
  |  |  |  |  201|     68|#define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1)
  |  |  ------------------
  |  |  |  Branch (222:35): [True: 0, False: 68]
  |  |  ------------------
  ------------------
  241|      0|        return errcode & ERR_SYSTEM_MASK;
  ------------------
  |  |  202|      0|#define ERR_SYSTEM_MASK ((unsigned int)INT_MAX)
  ------------------
  242|     68|    return errcode & ERR_REASON_MASK;
  ------------------
  |  |  213|     68|#define ERR_REASON_MASK 0X7FFFFF
  ------------------
  243|     68|}
conf_def.c:ERR_GET_REASON:
  239|      2|{
  240|      2|    if (ERR_SYSTEM_ERROR(errcode))
  ------------------
  |  |  222|      2|#define ERR_SYSTEM_ERROR(errcode) (((errcode) & ERR_SYSTEM_FLAG) != 0)
  |  |  ------------------
  |  |  |  |  201|      2|#define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1)
  |  |  ------------------
  |  |  |  Branch (222:35): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  241|      0|        return errcode & ERR_SYSTEM_MASK;
  ------------------
  |  |  202|      0|#define ERR_SYSTEM_MASK ((unsigned int)INT_MAX)
  ------------------
  242|      2|    return errcode & ERR_REASON_MASK;
  ------------------
  |  |  213|      2|#define ERR_REASON_MASK 0X7FFFFF
  ------------------
  243|      2|}

decoder_pkey.c:lh_DECODER_CACHE_ENTRY_new:
  334|      2|    {                                                                                                                      \
  335|      2|        return (LHASH_OF(type) *)OPENSSL_LH_set_thunks(OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn), \
  336|      2|            lh_##type##_hfn_thunk, lh_##type##_cfn_thunk,                                                                  \
  337|      2|            lh_##type##_doall_thunk,                                                                                       \
  338|      2|            lh_##type##_doall_arg_thunk);                                                                                  \
  339|      2|    }                                                                                                                      \
err.c:ossl_check_ERR_STRING_DATA_lh_type:
  208|  8.75k|    {                                                                                                          \
  209|  8.75k|        return (OPENSSL_LHASH *)lh;                                                                            \
  210|  8.75k|    }                                                                                                          \
err.c:ossl_check_ERR_STRING_DATA_lh_hashfunc_type:
  218|      2|    {                                                                                                          \
  219|      2|        return (OPENSSL_LH_HASHFUNC)hfn;                                                                       \
  220|      2|    }                                                                                                          \
err.c:ossl_check_ERR_STRING_DATA_lh_compfunc_type:
  213|      2|    {                                                                                                          \
  214|      2|        return (OPENSSL_LH_COMPFUNC)cmp;                                                                       \
  215|      2|    }                                                                                                          \
err.c:lh_ERR_STRING_DATA_hash_thunk:
  172|  8.75k|    {                                                                                                          \
  173|  8.75k|        unsigned long (*hfn_conv)(const type *) = (unsigned long (*)(const type *))hfn;                        \
  174|  8.75k|        return hfn_conv((const type *)data);                                                                   \
  175|  8.75k|    }                                                                                                          \
err.c:lh_ERR_STRING_DATA_comp_thunk:
  177|  5.89k|    {                                                                                                          \
  178|  5.89k|        int (*cfn_conv)(const type *, const type *) = (int (*)(const type *, const type *))cfn;                \
  179|  5.89k|        return cfn_conv((const type *)da, (const type *)db);                                                   \
  180|  5.89k|    }                                                                                                          \
err.c:ossl_check_ERR_STRING_DATA_lh_plain_type:
  193|  8.62k|    {                                                                                                          \
  194|  8.62k|        return ptr;                                                                                            \
  195|  8.62k|    }                                                                                                          \
err.c:ossl_check_const_ERR_STRING_DATA_lh_plain_type:
  198|    136|    {                                                                                                          \
  199|    136|        return ptr;                                                                                            \
  200|    136|    }                                                                                                          \
o_names.c:lh_OBJ_NAME_new:
  334|      2|    {                                                                                                                      \
  335|      2|        return (LHASH_OF(type) *)OPENSSL_LH_set_thunks(OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn), \
  336|      2|            lh_##type##_hfn_thunk, lh_##type##_cfn_thunk,                                                                  \
  337|      2|            lh_##type##_doall_thunk,                                                                                       \
  338|      2|            lh_##type##_doall_arg_thunk);                                                                                  \
  339|      2|    }                                                                                                                      \
o_names.c:lh_OBJ_NAME_hfn_thunk:
  260|    848|    {                                                                                                                      \
  261|    848|        unsigned long (*hfn_conv)(const type *) = (unsigned long (*)(const type *))hfn;                                    \
  262|    848|        return hfn_conv((const type *)data);                                                                               \
  263|    848|    }                                                                                                                      \
o_names.c:lh_OBJ_NAME_cfn_thunk:
  265|    364|    {                                                                                                                      \
  266|    364|        int (*cfn_conv)(const type *, const type *) = (int (*)(const type *, const type *))cfn;                            \
  267|    364|        return cfn_conv((const type *)da, (const type *)db);                                                               \
  268|    364|    }                                                                                                                      \
o_names.c:lh_OBJ_NAME_insert:
  281|    848|    {                                                                                                                      \
  282|    848|        return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d);                                                          \
  283|    848|    }                                                                                                                      \
o_names.c:lh_OBJ_NAME_error:
  296|    484|    {                                                                                                                      \
  297|    484|        return OPENSSL_LH_error((OPENSSL_LHASH *)lh);                                                                      \
  298|    484|    }                                                                                                                      \
defn_cache.c:lh_PROPERTY_DEFN_ELEM_new:
  334|      2|    {                                                                                                                      \
  335|      2|        return (LHASH_OF(type) *)OPENSSL_LH_set_thunks(OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn), \
  336|      2|            lh_##type##_hfn_thunk, lh_##type##_cfn_thunk,                                                                  \
  337|      2|            lh_##type##_doall_thunk,                                                                                       \
  338|      2|            lh_##type##_doall_arg_thunk);                                                                                  \
  339|      2|    }                                                                                                                      \
property_string.c:lh_PROPERTY_STRING_new:
  334|      4|    {                                                                                                                      \
  335|      4|        return (LHASH_OF(type) *)OPENSSL_LH_set_thunks(OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn), \
  336|      4|            lh_##type##_hfn_thunk, lh_##type##_cfn_thunk,                                                                  \
  337|      4|            lh_##type##_doall_thunk,                                                                                       \
  338|      4|            lh_##type##_doall_arg_thunk);                                                                                  \
  339|      4|    }                                                                                                                      \
property_string.c:lh_PROPERTY_STRING_hfn_thunk:
  260|     48|    {                                                                                                                      \
  261|     48|        unsigned long (*hfn_conv)(const type *) = (unsigned long (*)(const type *))hfn;                                    \
  262|     48|        return hfn_conv((const type *)data);                                                                               \
  263|     48|    }                                                                                                                      \
property_string.c:lh_PROPERTY_STRING_retrieve:
  291|     32|    {                                                                                                                      \
  292|     32|        return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d);                                                        \
  293|     32|    }                                                                                                                      \
property_string.c:lh_PROPERTY_STRING_insert:
  281|     16|    {                                                                                                                      \
  282|     16|        return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d);                                                          \
  283|     16|    }                                                                                                                      \
property_string.c:lh_PROPERTY_STRING_error:
  296|     16|    {                                                                                                                      \
  297|     16|        return OPENSSL_LH_error((OPENSSL_LHASH *)lh);                                                                      \
  298|     16|    }                                                                                                                      \

core_namemap.c:sk_NAMES_new_null:
  115|      2|    {                                                                                                                      \
  116|      2|        OPENSSL_STACK *ret = OPENSSL_sk_new_null();                                                                        \
  117|      2|        OPENSSL_sk_freefunc_thunk f_thunk;                                                                                 \
  118|      2|                                                                                                                           \
  119|      2|        f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk;                                                     \
  120|      2|                                                                                                                           \
  121|      2|        return (STACK_OF(t1) *)OPENSSL_sk_set_thunks(ret, f_thunk);                                                        \
  122|      2|    }                                                                                                                      \
initthread.c:sk_THREAD_EVENT_HANDLER_PTR_new_null:
  115|      2|    {                                                                                                                      \
  116|      2|        OPENSSL_STACK *ret = OPENSSL_sk_new_null();                                                                        \
  117|      2|        OPENSSL_sk_freefunc_thunk f_thunk;                                                                                 \
  118|      2|                                                                                                                           \
  119|      2|        f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk;                                                     \
  120|      2|                                                                                                                           \
  121|      2|        return (STACK_OF(t1) *)OPENSSL_sk_set_thunks(ret, f_thunk);                                                        \
  122|      2|    }                                                                                                                      \
initthread.c:sk_THREAD_EVENT_HANDLER_PTR_push:
  154|      2|    {                                                                                                                      \
  155|      2|        return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr);                                                    \
  156|      2|    }                                                                                                                      \
provider_core.c:sk_OSSL_PROVIDER_new:
  106|      2|    {                                                                                                                      \
  107|      2|        OPENSSL_STACK *ret = OPENSSL_sk_new((OPENSSL_sk_compfunc)compare);                                                 \
  108|      2|        OPENSSL_sk_freefunc_thunk f_thunk;                                                                                 \
  109|      2|                                                                                                                           \
  110|      2|        f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk;                                                     \
  111|      2|        OPENSSL_sk_set_cmp_thunks(ret, sk_##t1##_cmpfunc_thunk);                                                           \
  112|      2|        return (STACK_OF(t1) *)OPENSSL_sk_set_thunks(ret, f_thunk);                                                        \
  113|      2|    }                                                                                                                      \
provider_core.c:sk_OSSL_PROVIDER_CHILD_CB_new_null:
  115|      2|    {                                                                                                                      \
  116|      2|        OPENSSL_STACK *ret = OPENSSL_sk_new_null();                                                                        \
  117|      2|        OPENSSL_sk_freefunc_thunk f_thunk;                                                                                 \
  118|      2|                                                                                                                           \
  119|      2|        f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk;                                                     \
  120|      2|                                                                                                                           \
  121|      2|        return (STACK_OF(t1) *)OPENSSL_sk_set_thunks(ret, f_thunk);                                                        \
  122|      2|    }                                                                                                                      \
property_string.c:ossl_check_OPENSSL_CSTRING_sk_type:
   63|     16|    {                                                                                                                    \
   64|     16|        return (OPENSSL_STACK *)sk;                                                                                      \
   65|     16|    }                                                                                                                    \
property_string.c:ossl_check_OPENSSL_CSTRING_type:
   55|     16|    {                                                                                                                    \
   56|     16|        return ptr;                                                                                                      \
   57|     16|    }                                                                                                                    \
comp_methods.c:ossl_check_SSL_COMP_compfunc_type:
   67|      2|    {                                                                                                                    \
   68|      2|        return (OPENSSL_sk_compfunc)cmp;                                                                                 \
   69|      2|    }                                                                                                                    \

ossl_err_load_PROV_strings:
  273|      2|{
  274|      2|#ifndef OPENSSL_NO_ERR
  275|      2|    if (ERR_reason_error_string(PROV_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (275:9): [True: 2, False: 0]
  ------------------
  276|      2|        ERR_load_strings_const(PROV_str_reasons);
  277|      2|#endif
  278|      2|    return 1;
  279|      2|}

ossl_prov_drbg_nonce_ctx_new:
  272|      2|{
  273|      2|    PROV_DRBG_NONCE_GLOBAL *dngbl = OPENSSL_zalloc(sizeof(*dngbl));
  ------------------
  |  |  109|      2|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  274|       |
  275|      2|    if (dngbl == NULL)
  ------------------
  |  Branch (275:9): [True: 0, False: 2]
  ------------------
  276|      0|        return NULL;
  277|       |
  278|      2|    dngbl->rand_nonce_lock = CRYPTO_THREAD_lock_new();
  279|      2|    if (dngbl->rand_nonce_lock == NULL) {
  ------------------
  |  Branch (279:9): [True: 0, False: 2]
  ------------------
  280|      0|        OPENSSL_free(dngbl);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  281|      0|        return NULL;
  282|      0|    }
  283|       |
  284|      2|    return dngbl;
  285|      2|}

ssl_sort_cipher_list:
 3766|      2|{
 3767|      2|    qsort(tls13_ciphers, TLS13_NUM_CIPHERS, sizeof(tls13_ciphers[0]),
  ------------------
  |  |   27|      2|#define TLS13_NUM_CIPHERS OSSL_NELEM(tls13_ciphers)
  |  |  ------------------
  |  |  |  |   14|      2|#define OSSL_NELEM(x) (sizeof(x) / sizeof((x)[0]))
  |  |  ------------------
  ------------------
 3768|      2|        cipher_compare);
 3769|      2|    qsort(ssl3_ciphers, SSL3_NUM_CIPHERS, sizeof(ssl3_ciphers[0]),
  ------------------
  |  |   28|      2|#define SSL3_NUM_CIPHERS OSSL_NELEM(ssl3_ciphers)
  |  |  ------------------
  |  |  |  |   14|      2|#define OSSL_NELEM(x) (sizeof(x) / sizeof((x)[0]))
  |  |  ------------------
  ------------------
 3770|      2|        cipher_compare);
 3771|      2|    qsort(ssl3_scsvs, SSL3_NUM_SCSVS, sizeof(ssl3_scsvs[0]), cipher_compare);
  ------------------
  |  |   29|      2|#define SSL3_NUM_SCSVS OSSL_NELEM(ssl3_scsvs)
  |  |  ------------------
  |  |  |  |   14|      2|#define OSSL_NELEM(x) (sizeof(x) / sizeof((x)[0]))
  |  |  ------------------
  ------------------
 3772|      2|}
s3_lib.c:cipher_compare:
 3756|  1.96k|{
 3757|  1.96k|    const SSL_CIPHER *ap = (const SSL_CIPHER *)a;
 3758|  1.96k|    const SSL_CIPHER *bp = (const SSL_CIPHER *)b;
 3759|       |
 3760|  1.96k|    if (ap->id == bp->id)
  ------------------
  |  Branch (3760:9): [True: 0, False: 1.96k]
  ------------------
 3761|      0|        return 0;
 3762|  1.96k|    return ap->id < bp->id ? -1 : 1;
  ------------------
  |  Branch (3762:12): [True: 1.25k, False: 706]
  ------------------
 3763|  1.96k|}

SSL_COMP_get_compression_methods:
 1951|      2|{
 1952|      2|    STACK_OF(SSL_COMP) **rv;
  ------------------
  |  |   33|      2|#define STACK_OF(type) struct stack_st_##type
  ------------------
 1953|       |
 1954|      2|    rv = (STACK_OF(SSL_COMP) **)OSSL_LIB_CTX_get_data(NULL,
 1955|      2|        OSSL_LIB_CTX_COMP_METHODS);
  ------------------
  |  |  118|      2|#define OSSL_LIB_CTX_COMP_METHODS 21
  ------------------
 1956|      2|    if (rv != NULL)
  ------------------
  |  Branch (1956:9): [True: 2, False: 0]
  ------------------
 1957|      2|        return *rv;
 1958|      0|    else
 1959|      0|        return NULL;
 1960|      2|}

OPENSSL_init_ssl:
   47|      2|{
   48|      2|    static int stoperrset = 0;
   49|       |
   50|      2|    if (stopped) {
  ------------------
  |  Branch (50:9): [True: 0, False: 2]
  ------------------
   51|      0|        if (!stoperrset) {
  ------------------
  |  Branch (51:13): [True: 0, False: 0]
  ------------------
   52|       |            /*
   53|       |             * We only ever set this once to avoid getting into an infinite
   54|       |             * loop where the error system keeps trying to init and fails so
   55|       |             * sets an error etc
   56|       |             */
   57|      0|            stoperrset = 1;
   58|      0|            ERR_raise(ERR_LIB_SSL, ERR_R_INIT_FAIL);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   59|      0|        }
   60|      0|        return 0;
   61|      0|    }
   62|       |
   63|      2|    opts |= OPENSSL_INIT_ADD_ALL_CIPHERS
  ------------------
  |  |  507|      2|#define OPENSSL_INIT_ADD_ALL_CIPHERS 0x00000004L
  ------------------
   64|      2|        | OPENSSL_INIT_ADD_ALL_DIGESTS;
  ------------------
  |  |  508|      2|#define OPENSSL_INIT_ADD_ALL_DIGESTS 0x00000008L
  ------------------
   65|      2|#ifndef OPENSSL_NO_AUTOLOAD_CONFIG
   66|      2|    if ((opts & OPENSSL_INIT_NO_LOAD_CONFIG) == 0)
  ------------------
  |  |  512|      2|#define OPENSSL_INIT_NO_LOAD_CONFIG 0x00000080L
  ------------------
  |  Branch (66:9): [True: 2, False: 0]
  ------------------
   67|      2|        opts |= OPENSSL_INIT_LOAD_CONFIG;
  ------------------
  |  |  511|      2|#define OPENSSL_INIT_LOAD_CONFIG 0x00000040L
  ------------------
   68|      2|#endif
   69|       |
   70|      2|    if (!OPENSSL_init_crypto(opts, settings))
  ------------------
  |  Branch (70:9): [True: 0, False: 2]
  ------------------
   71|      0|        return 0;
   72|       |
   73|      2|    if (!RUN_ONCE(&ssl_base, ossl_init_ssl_base))
  ------------------
  |  |  130|      2|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (73:9): [True: 0, False: 2]
  ------------------
   74|      0|        return 0;
   75|       |
   76|      2|    return 1;
   77|      2|}
ssl_init.c:ossl_init_ssl_base:
   25|      2|{
   26|      2|#ifndef OPENSSL_NO_COMP
   27|      2|    OSSL_TRACE(INIT, "ossl_init_ssl_base: "
  ------------------
  |  |  288|      2|    OSSL_TRACEV(category, (trc_out, "%s", text))
  |  |  ------------------
  |  |  |  |  283|      2|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
   28|      2|                     "SSL_COMP_get_compression_methods()\n");
   29|       |    /*
   30|       |     * This will initialise the built-in compression algorithms. The value
   31|       |     * returned is a STACK_OF(SSL_COMP), but that can be discarded safely
   32|       |     */
   33|      2|    SSL_COMP_get_compression_methods();
   34|      2|#endif
   35|      2|    ssl_sort_cipher_list();
   36|      2|    OSSL_TRACE(INIT, "ossl_init_ssl_base: SSL_add_ssl_module()\n");
  ------------------
  |  |  288|      2|    OSSL_TRACEV(category, (trc_out, "%s", text))
  |  |  ------------------
  |  |  |  |  283|      2|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
   37|      2|    ssl_base_inited = 1;
   38|      2|    return 1;
   39|      2|}

LLVMFuzzerTestOneInput:
   38|  2.57k|                                      std::size_t size) {
   39|  2.57k|  return Fuzzer::TestOneInput(data, size);
   40|  2.57k|}

_ZN12proto_fuzzer23ProtoFuzzerTestOneInputENS_13TargetProfileEPKhm:
   92|  2.57k|int ProtoFuzzerTestOneInput(TargetProfile profile, const std::uint8_t* data, std::size_t size) {
   93|  2.57k|  EnsureTargetPostProcessor(profile);
   94|  2.57k|  curl::fuzzer::proto::Scenario scenario;
   95|  2.57k|  if (protobuf_mutator::libfuzzer::LoadProtoInput(kUseBinaryFormat, data, size, &scenario)) {
  ------------------
  |  Branch (95:7): [True: 2.57k, False: 0]
  ------------------
   96|  2.57k|    ScenarioRunner().Run(scenario, RunModeFor(profile));
   97|  2.57k|  }
   98|  2.57k|  return 0;
   99|  2.57k|}
fuzzer_main.cc:_ZN12_GLOBAL__N_119CurlGlobalBootstrapC2Ev:
   60|      2|  CurlGlobalBootstrap() {
   61|       |    // Keep parity with the legacy harness. libcurl normally suppresses
   62|       |    // SIGPIPE for its own writes, but fuzzed connection lifecycles also race
   63|       |    // mock-peer teardown; those failures should be reported as socket errors,
   64|       |    // not mistaken for process crashes.
   65|      2|    std::signal(SIGPIPE, SIG_IGN);
   66|      2|    curl_global_init(CURL_GLOBAL_ALL);
  ------------------
  |  | 3046|      2|#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL | CURL_GLOBAL_WIN32)
  |  |  ------------------
  |  |  |  | 3044|      2|#define CURL_GLOBAL_SSL (1 << 0) /* no purpose since 7.57.0 */
  |  |  ------------------
  |  |               #define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL | CURL_GLOBAL_WIN32)
  |  |  ------------------
  |  |  |  | 3045|      2|#define CURL_GLOBAL_WIN32 (1 << 1)
  |  |  ------------------
  ------------------
   67|      2|  }
fuzzer_main.cc:_ZN12_GLOBAL__N_125EnsureTargetPostProcessorEN12proto_fuzzer13TargetProfileE:
   38|  2.57k|void EnsureTargetPostProcessor(proto_fuzzer::TargetProfile profile) {
   39|  2.57k|  if (profile == proto_fuzzer::TargetProfile::kCompatibility) {
  ------------------
  |  Branch (39:7): [True: 0, False: 2.57k]
  ------------------
   40|      0|    return;
   41|      0|  }
   42|       |
   43|  2.57k|  static const proto_fuzzer::TargetProfile registered_profile = profile;
   44|  2.57k|  static const protobuf_mutator::libfuzzer::PostProcessorRegistration<curl::fuzzer::proto::Scenario>
   45|  2.57k|      policy_registration([](curl::fuzzer::proto::Scenario* scenario, unsigned int /*seed*/) {
   46|  2.57k|        proto_fuzzer::ApplyTargetPolicy(scenario, registered_profile);
   47|  2.57k|        proto_fuzzer::CanonicalizeOptionValueCases(scenario);
   48|  2.57k|      });
   49|       |
   50|       |  // A second profile in one process would cause LPM's global registry to
   51|       |  // enforce the wrong lane. Real fuzz binaries cannot do this; keep the
   52|       |  // assertion to make misuse by future in-process callers immediately clear.
   53|  2.57k|  assert(profile == registered_profile);
  ------------------
  |  Branch (53:3): [True: 2.57k, False: 0]
  ------------------
   54|  2.57k|  (void)policy_registration;
   55|  2.57k|}
fuzzer_main.cc:_ZZN12_GLOBAL__N_125EnsureTargetPostProcessorEN12proto_fuzzer13TargetProfileEENK3$_0clEPN4curl6fuzzer5proto8ScenarioEj:
   45|  2.57k|      policy_registration([](curl::fuzzer::proto::Scenario* scenario, unsigned int /*seed*/) {
   46|  2.57k|        proto_fuzzer::ApplyTargetPolicy(scenario, registered_profile);
   47|  2.57k|        proto_fuzzer::CanonicalizeOptionValueCases(scenario);
   48|  2.57k|      });

_ZN12proto_fuzzer21ProtoFuzzerEntrypointILNS_13TargetProfileE6EE12TestOneInputEPKhm:
   67|  2.57k|  static int TestOneInput(const std::uint8_t* data, std::size_t size) {
   68|  2.57k|    return ProtoFuzzerTestOneInput(Profile, data, size);
   69|  2.57k|  }

_ZN12proto_fuzzer14MockConnectionC2Ev:
   46|  2.03k|MockConnection::MockConnection() : server_fd_(-1), client_fd_(-1), drain_limit_(0) {
   47|  2.03k|  int fds[2];
   48|       |
   49|  2.03k|  if (socketpair(AF_UNIX, SOCK_STREAM, 0, fds) != 0) {
  ------------------
  |  Branch (49:7): [True: 0, False: 2.03k]
  ------------------
   50|      0|    return;
   51|      0|  }
   52|       |
   53|       |  // The fds must be small enough to fit in an fd_set for select(). If not, close them and fail the constructor.
   54|  2.03k|  if (!FdFitsInFdSet(fds[0]) || !FdFitsInFdSet(fds[1])) {
  ------------------
  |  Branch (54:7): [True: 0, False: 2.03k]
  |  Branch (54:33): [True: 0, False: 2.03k]
  ------------------
   55|      0|    close(fds[0]);
   56|      0|    close(fds[1]);
   57|      0|    return;
   58|      0|  }
   59|       |
   60|       |  // Set the server-side fd non-blocking so we can write to it without risk of hanging the fuzzer.
   61|  2.03k|  int flags = fcntl(fds[0], F_GETFL, 0);
   62|  2.03k|  if (flags < 0 || fcntl(fds[0], F_SETFL, flags | O_NONBLOCK) < 0) {
  ------------------
  |  Branch (62:7): [True: 0, False: 2.03k]
  |  Branch (62:20): [True: 0, False: 2.03k]
  ------------------
   63|      0|    close(fds[0]);
   64|      0|    close(fds[1]);
   65|      0|    return;
   66|      0|  }
   67|       |
   68|       |  // Success: store the file descriptors.
   69|  2.03k|  server_fd_ = fds[0];
   70|  2.03k|  client_fd_ = fds[1];
   71|  2.03k|}
_ZN12proto_fuzzer14MockConnectionD2Ev:
   74|  2.03k|MockConnection::~MockConnection() {
   75|  2.03k|  if (server_fd_ >= 0) {
  ------------------
  |  Branch (75:7): [True: 2.03k, False: 0]
  ------------------
   76|  2.03k|    close(server_fd_);
   77|  2.03k|  }
   78|  2.03k|  if (client_fd_ >= 0) {
  ------------------
  |  Branch (78:7): [True: 0, False: 2.03k]
  ------------------
   79|      0|    close(client_fd_);
   80|      0|  }
   81|  2.03k|}
_ZNK12proto_fuzzer14MockConnection2okEv:
   84|  2.03k|bool MockConnection::ok() const { return server_fd_ >= 0; }
_ZNK12proto_fuzzer14MockConnection23client_send_buffer_sizeEv:
   92|  2.03k|std::size_t MockConnection::client_send_buffer_size() const {
   93|  2.03k|  if (client_fd_ < 0) {
  ------------------
  |  Branch (93:7): [True: 0, False: 2.03k]
  ------------------
   94|      0|    return 0;
   95|      0|  }
   96|  2.03k|  int size = 0;
   97|  2.03k|  socklen_t length = sizeof(size);
   98|  2.03k|  if (getsockopt(client_fd_, SOL_SOCKET, SO_SNDBUF, &size, &length) != 0 || size <= 0) {
  ------------------
  |  Branch (98:7): [True: 0, False: 2.03k]
  |  Branch (98:77): [True: 0, False: 2.03k]
  ------------------
   99|      0|    return 0;
  100|      0|  }
  101|  2.03k|  return static_cast<std::size_t>(size);
  102|  2.03k|}
_ZN12proto_fuzzer14MockConnection26EnsureClientSendBufferSizeEm:
  107|  2.03k|bool MockConnection::EnsureClientSendBufferSize(std::size_t minimum) {
  108|  2.03k|  if (client_send_buffer_size() >= minimum) {
  ------------------
  |  Branch (108:7): [True: 2.03k, False: 0]
  ------------------
  109|  2.03k|    return true;
  110|  2.03k|  }
  111|      0|  if (client_fd_ < 0 || minimum > static_cast<std::size_t>(std::numeric_limits<int>::max())) {
  ------------------
  |  Branch (111:7): [True: 0, False: 0]
  |  Branch (111:25): [True: 0, False: 0]
  ------------------
  112|      0|    return false;
  113|      0|  }
  114|      0|  const int requested = static_cast<int>(minimum);
  115|      0|  if (setsockopt(client_fd_, SOL_SOCKET, SO_SNDBUF, &requested, sizeof(requested)) != 0) {
  ------------------
  |  Branch (115:7): [True: 0, False: 0]
  ------------------
  116|      0|    return false;
  117|      0|  }
  118|      0|  return client_send_buffer_size() >= minimum;
  119|      0|}
_ZN12proto_fuzzer14MockConnection14take_client_fdEv:
  124|  2.03k|curl_socket_t MockConnection::take_client_fd() {
  125|  2.03k|  int fd = client_fd_;
  126|  2.03k|  client_fd_ = -1;
  127|  2.03k|  return static_cast<curl_socket_t>(fd);
  128|  2.03k|}
_ZN12proto_fuzzer14MockConnection8WriteAllEPKhm:
  138|  2.07k|bool MockConnection::WriteAll(const unsigned char* data, std::size_t size) {
  139|  2.07k|  if (server_fd_ < 0) {
  ------------------
  |  Branch (139:7): [True: 0, False: 2.07k]
  ------------------
  140|      0|    return false;
  141|      0|  }
  142|  2.07k|  std::size_t written = 0;
  143|  4.14k|  while (written < size) {
  ------------------
  |  Branch (143:10): [True: 2.07k, False: 2.07k]
  ------------------
  144|  2.07k|    ssize_t n = ::send(server_fd_, data + written, size - written, MSG_NOSIGNAL);
  145|  2.07k|    if (n <= 0) {
  ------------------
  |  Branch (145:9): [True: 0, False: 2.07k]
  ------------------
  146|      0|      return false;
  147|      0|    }
  148|  2.07k|    written += static_cast<std::size_t>(n);
  149|  2.07k|  }
  150|  2.07k|  return true;
  151|  2.07k|}
_ZN12proto_fuzzer14MockConnection13DrainIncomingEv:
  158|  2.98k|std::size_t MockConnection::DrainIncoming() {
  159|  2.98k|  if (server_fd_ < 0) {
  ------------------
  |  Branch (159:7): [True: 0, False: 2.98k]
  ------------------
  160|      0|    return 0;
  161|      0|  }
  162|  2.98k|  unsigned char scratch[4096];
  163|  2.98k|  std::size_t drained = 0;
  164|  3.62k|  while (drain_limit_ == 0 || drained < drain_limit_) {
  ------------------
  |  Branch (164:10): [True: 3.62k, False: 0]
  |  Branch (164:31): [True: 0, False: 0]
  ------------------
  165|  3.62k|    std::size_t want = sizeof(scratch);
  166|  3.62k|    if (drain_limit_ != 0) {
  ------------------
  |  Branch (166:9): [True: 0, False: 3.62k]
  ------------------
  167|      0|      const std::size_t remaining = drain_limit_ - drained;
  168|      0|      if (remaining < want) {
  ------------------
  |  Branch (168:11): [True: 0, False: 0]
  ------------------
  169|      0|        want = remaining;
  170|      0|      }
  171|      0|    }
  172|  3.62k|    ssize_t n = ::read(server_fd_, scratch, want);
  173|  3.62k|    if (n <= 0) {
  ------------------
  |  Branch (173:9): [True: 2.98k, False: 647]
  ------------------
  174|  2.98k|      break;
  175|  2.98k|    }
  176|    647|    drained += static_cast<std::size_t>(n);
  177|    647|  }
  178|  2.98k|  return drained;
  179|  2.98k|}
_ZN12proto_fuzzer14MockConnection13ShutdownWriteEv:
  219|  2.03k|void MockConnection::ShutdownWrite() {
  220|  2.03k|  if (server_fd_ < 0) {
  ------------------
  |  Branch (220:7): [True: 0, False: 2.03k]
  ------------------
  221|      0|    return;
  222|      0|  }
  223|  2.03k|  ::shutdown(server_fd_, SHUT_WR);
  224|  2.03k|}
mock_server.cc:_ZN12proto_fuzzer12_GLOBAL__N_113FdFitsInFdSetEi:
   36|  4.07k|bool FdFitsInFdSet(int fd) { return fd >= 0 && fd < FD_SETSIZE; }
  ------------------
  |  Branch (36:37): [True: 4.07k, False: 0]
  |  Branch (36:48): [True: 4.07k, False: 0]
  ------------------

_ZN12proto_fuzzer34MockServerBaseOpenSocketTrampolineEPv12curlsocktypeP13curl_sockaddr:
   53|  2.03k|curl_socket_t MockServerBaseOpenSocketTrampoline(void* clientp, curlsocktype purpose, struct curl_sockaddr* address) {
   54|  2.03k|  return static_cast<MockServerBase*>(clientp)->HandleOpenSocket(purpose, address);
   55|  2.03k|}
_ZN12proto_fuzzer14MockServerBaseC2Ev:
   59|  2.53k|    : connection_(nullptr), pending_recv_buf_bytes_(0), pending_drain_limit_(0), multi_socket_driver_(nullptr) {}
_ZN12proto_fuzzer14MockServerBaseD2Ev:
   64|  2.53k|MockServerBase::~MockServerBase() = default;
_ZN12proto_fuzzer14MockServerBase7InstallEPv:
   71|  2.53k|void MockServerBase::Install(CURL* easy) {
   72|  2.53k|  curl_easy_setopt(easy, CURLOPT_OPENSOCKETFUNCTION, &MockServerBaseOpenSocketTrampoline);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
   73|  2.53k|  curl_easy_setopt(easy, CURLOPT_OPENSOCKETDATA, this);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
   74|  2.53k|  curl_easy_setopt(easy, CURLOPT_SOCKOPTFUNCTION, &SockOptTrampoline);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
   75|  2.53k|}
_ZN12proto_fuzzer14MockServerBase13DriveScenarioEPvRKN4curl6fuzzer5proto8ScenarioEbb:
   86|  2.53k|                                       bool wake_multi) {
   87|       |  // Cache backpressure knobs so HandleOpenSocket can apply them the moment
   88|       |  // connection_ exists. Both default to 0, which matches the legacy "drain
   89|       |  // greedily, kernel-default buffers" behaviour exactly.
   90|  2.53k|  const auto& bp = scenario.connection().backpressure();
   91|  2.53k|  pending_recv_buf_bytes_ = static_cast<int>(bp.recv_buf_bytes());
   92|  2.53k|  pending_drain_limit_ = static_cast<std::size_t>(bp.drain_limit());
   93|       |
   94|  2.53k|  CURLM* multi = curl_multi_init();
   95|  2.53k|  if (multi == nullptr) {
  ------------------
  |  Branch (95:7): [True: 0, False: 2.53k]
  ------------------
   96|      0|    return CURLE_FAILED_INIT;
   97|      0|  }
   98|       |
   99|  2.53k|  CURLcode transfer_result = CURLE_FAILED_INIT;
  100|       |
  101|       |  // Callback data must survive both remove_handle and multi_cleanup, since
  102|       |  // either may emit CURL_POLL_REMOVE. Keeping it in this outer scope provides
  103|       |  // that lifetime without allocating per-watch state.
  104|  2.53k|  MultiSocketDriver socket_driver;
  105|  2.53k|  if (use_multi_socket && socket_driver.Install(multi)) {
  ------------------
  |  Branch (105:7): [True: 0, False: 2.53k]
  |  Branch (105:27): [True: 0, False: 0]
  ------------------
  106|      0|    multi_socket_driver_ = &socket_driver;
  107|      0|  }
  108|  2.53k|  if (curl_multi_add_handle(multi, easy) == CURLM_OK) {
  ------------------
  |  Branch (108:7): [True: 2.53k, False: 0]
  ------------------
  109|  2.53k|    if (wake_multi) {
  ------------------
  |  Branch (109:9): [True: 0, False: 2.53k]
  ------------------
  110|      0|      if (multi_socket_driver_ != nullptr) {
  ------------------
  |  Branch (110:11): [True: 0, False: 0]
  ------------------
  111|      0|        multi_socket_driver_->ProbeControlApis();
  112|      0|      } else {
  113|      0|        long timeout_ms = -1;
  114|      0|        (void)curl_multi_timeout(multi, &timeout_ms);
  115|      0|        (void)curl_multi_wakeup(multi);
  116|      0|      }
  117|      0|    }
  118|  2.53k|    RunLoop(multi, easy, scenario);
  119|       |
  120|       |    // Completion messages are the multi API's only durable record of the
  121|       |    // transfer result. Consume them while the easy handle is still attached:
  122|       |    // otherwise every scenario systematically skips curl_multi_info_read's
  123|       |    // result path and removal discards the opportunity. With one easy handle
  124|       |    // attached, this drain has at most one completion message regardless of
  125|       |    // fuzzed response size or redirect count.
  126|  2.53k|    int messages_remaining = 0;
  127|  2.53k|    CURLMsg* message = nullptr;
  128|  5.07k|    while ((message = curl_multi_info_read(multi, &messages_remaining)) != nullptr) {
  ------------------
  |  Branch (128:12): [True: 2.53k, False: 2.53k]
  ------------------
  129|  2.53k|      if (message->msg == CURLMSG_DONE && message->easy_handle == easy) {
  ------------------
  |  Branch (129:11): [True: 2.53k, False: 0]
  |  Branch (129:43): [True: 2.53k, False: 0]
  ------------------
  130|  2.53k|        transfer_result = message->data.result;
  131|  2.53k|      }
  132|  2.53k|    }
  133|       |
  134|  2.53k|    curl_multi_remove_handle(multi, easy);
  135|  2.53k|  }
  136|  2.53k|  curl_multi_cleanup(multi);
  137|  2.53k|  multi_socket_driver_ = nullptr;
  138|  2.53k|  return transfer_result;
  139|  2.53k|}
mock_server_base.cc:_ZN12proto_fuzzer12_GLOBAL__N_117SockOptTrampolineEPvi12curlsocktype:
   32|  2.03k|int SockOptTrampoline(void* /*clientp*/, curl_socket_t curlfd, curlsocktype purpose) {
   33|  2.03k|  if (purpose == CURLSOCKTYPE_ACCEPT) {
  ------------------
  |  Branch (33:7): [True: 0, False: 2.03k]
  ------------------
   34|      0|    return CURL_SOCKOPT_OK;
  ------------------
  |  |  420|      0|#define CURL_SOCKOPT_OK 0
  ------------------
   35|      0|  }
   36|       |
   37|  2.03k|  int socket_type = 0;
   38|  2.03k|  socklen_t socket_type_size = sizeof(socket_type);
   39|  2.03k|  if (getsockopt(curlfd, SOL_SOCKET, SO_TYPE, &socket_type, &socket_type_size) != 0) {
  ------------------
  |  Branch (39:7): [True: 0, False: 2.03k]
  ------------------
   40|      0|    return CURL_SOCKOPT_ERROR;
  ------------------
  |  |  421|      0|#define CURL_SOCKOPT_ERROR 1 /* causes libcurl to abort and return
  ------------------
   41|      0|  }
   42|  2.03k|  return socket_type == SOCK_DGRAM ? CURL_SOCKOPT_OK : CURL_SOCKOPT_ALREADY_CONNECTED;
  ------------------
  |  |  420|      0|#define CURL_SOCKOPT_OK 0
  ------------------
                return socket_type == SOCK_DGRAM ? CURL_SOCKOPT_OK : CURL_SOCKOPT_ALREADY_CONNECTED;
  ------------------
  |  |  423|  2.03k|#define CURL_SOCKOPT_ALREADY_CONNECTED 2
  ------------------
  |  Branch (42:10): [True: 0, False: 2.03k]
  ------------------
   43|  2.03k|}

_ZN12proto_fuzzer17MultiSocketDriverC2Ev:
   54|  2.53k|MultiSocketDriver::MultiSocketDriver() : multi_(nullptr), timeout_ms_(-1), timer_pending_(false), generation_(0) {}
_ZN12proto_fuzzer17MultiSocketDriverD2Ev:
   58|  2.53k|MultiSocketDriver::~MultiSocketDriver() = default;

_ZN12proto_fuzzer28CanonicalizeOptionValueCasesEPN4curl6fuzzer5proto8ScenarioE:
  152|  2.57k|void CanonicalizeOptionValueCases(curl::fuzzer::proto::Scenario* scenario) {
  153|  2.57k|  if (scenario == nullptr) {
  ------------------
  |  Branch (153:7): [True: 0, False: 2.57k]
  ------------------
  154|      0|    return;
  155|      0|  }
  156|  2.57k|  for (auto& option : *scenario->mutable_options()) {
  ------------------
  |  Branch (156:21): [True: 1.13k, False: 2.57k]
  ------------------
  157|  1.13k|    const OptionDescriptor* desc = LookupOptionDescriptor(option.option_id());
  158|  1.13k|    if (desc == nullptr) {
  ------------------
  |  Branch (158:9): [True: 0, False: 1.13k]
  ------------------
  159|      0|      continue;
  160|      0|    }
  161|       |
  162|  1.13k|    switch (desc->kind) {
  ------------------
  |  Branch (162:13): [True: 1.13k, False: 0]
  ------------------
  163|    718|      case OptionValueKind::kString:
  ------------------
  |  Branch (163:7): [True: 718, False: 417]
  ------------------
  164|    718|        if (option.value_case() != curl::fuzzer::proto::SetOption::kStringValue) {
  ------------------
  |  Branch (164:13): [True: 0, False: 718]
  ------------------
  165|      0|          option.set_string_value("");
  166|      0|        }
  167|    718|        if (desc->curlopt == CURLOPT_PINNEDPUBLICKEY) {
  ------------------
  |  Branch (167:13): [True: 0, False: 718]
  ------------------
  168|      0|          ConstrainPinnedPublicKeyValue(option.mutable_string_value());
  169|      0|        }
  170|    718|        break;
  171|    339|      case OptionValueKind::kUint:
  ------------------
  |  Branch (171:7): [True: 339, False: 796]
  ------------------
  172|    339|        if (option.value_case() != curl::fuzzer::proto::SetOption::kUintValue) {
  ------------------
  |  Branch (172:13): [True: 0, False: 339]
  ------------------
  173|      0|          option.set_uint_value(DecodeIntegralValue(*desc, option));
  174|      0|        }
  175|    339|        break;
  176|     78|      case OptionValueKind::kBool:
  ------------------
  |  Branch (176:7): [True: 78, False: 1.05k]
  ------------------
  177|     78|        if (option.value_case() != curl::fuzzer::proto::SetOption::kBoolValue) {
  ------------------
  |  Branch (177:13): [True: 0, False: 78]
  ------------------
  178|      0|          option.set_bool_value(DecodeIntegralValue(*desc, option) != 0);
  179|      0|        }
  180|     78|        break;
  181|  1.13k|    }
  182|  1.13k|  }
  183|  2.57k|}
_ZN12proto_fuzzer20ApplyBaselineOptionsEPvN4curl6fuzzer5proto6SchemeE:
  192|  2.53k|struct curl_slist* ApplyBaselineOptions(CURL* easy, curl::fuzzer::proto::Scheme scheme) {
  193|  2.53k|  EnableDebugHttpTransportMetadata();
  194|       |
  195|  2.53k|  curl_easy_setopt(easy, CURLOPT_WRITEFUNCTION, &SilentWriteCallback);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  196|  2.53k|  curl_easy_setopt(easy, CURLOPT_HEADERFUNCTION, &SilentWriteCallback);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  197|       |
  198|  2.53k|  const bool user_requested_verbose = std::getenv(kVerboseEnvVar) != nullptr;
  199|  2.53k|  if (scheme == curl::fuzzer::proto::SCHEME_TELNET && !user_requested_verbose) {
  ------------------
  |  Branch (199:7): [True: 2.53k, False: 0]
  |  Branch (199:55): [True: 2.53k, False: 0]
  ------------------
  200|       |    // printoption() and printsub() contain a substantial part of curl's TELNET
  201|       |    // parser diagnostics but run only in verbose mode. Keep those paths in the
  202|       |    // ordinary TELNET coverage lane while suppressing their high-volume text.
  203|       |    // An explicit FUZZ_VERBOSE still skips the sink so reproductions remain
  204|       |    // inspectable from the terminal.
  205|  2.53k|    curl_easy_setopt(easy, CURLOPT_DEBUGFUNCTION, &SilentDebugCallback);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  206|  2.53k|    curl_easy_setopt(easy, CURLOPT_VERBOSE, 1L);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  207|  2.53k|  }
  208|       |
  209|       |  // Each non-HTTP protocol must use its dedicated peer invariants. Keep them
  210|       |  // out of the redirect allowlist so an HTTP response cannot switch a stream
  211|       |  // mock into synchronous TELNET, two-channel FTP, or datagram TFTP semantics.
  212|       |  // CURLOPT_PROTOCOLS_STR arrived in 7.85.0.
  213|  2.53k|  const char* direct_protocols = kEventDrivenProtocolsAllowed;
  214|  2.53k|  switch (scheme) {
  215|  2.53k|    case curl::fuzzer::proto::SCHEME_TELNET:
  ------------------
  |  Branch (215:5): [True: 2.53k, False: 0]
  ------------------
  216|  2.53k|      direct_protocols = kTelnetProtocolAllowed;
  217|  2.53k|      break;
  218|      0|    case curl::fuzzer::proto::SCHEME_FTP:
  ------------------
  |  Branch (218:5): [True: 0, False: 2.53k]
  ------------------
  219|      0|      direct_protocols = kFtpProtocolAllowed;
  220|      0|      break;
  221|      0|    case curl::fuzzer::proto::SCHEME_TFTP:
  ------------------
  |  Branch (221:5): [True: 0, False: 2.53k]
  ------------------
  222|      0|      direct_protocols = kTftpProtocolAllowed;
  223|      0|      break;
  224|      0|    case curl::fuzzer::proto::SCHEME_HTTP:
  ------------------
  |  Branch (224:5): [True: 0, False: 2.53k]
  ------------------
  225|      0|    case curl::fuzzer::proto::SCHEME_HTTPS:
  ------------------
  |  Branch (225:5): [True: 0, False: 2.53k]
  ------------------
  226|      0|    case curl::fuzzer::proto::SCHEME_WS:
  ------------------
  |  Branch (226:5): [True: 0, False: 2.53k]
  ------------------
  227|      0|    case curl::fuzzer::proto::SCHEME_WSS:
  ------------------
  |  Branch (227:5): [True: 0, False: 2.53k]
  ------------------
  228|      0|    case curl::fuzzer::proto::SCHEME_UNSPECIFIED:
  ------------------
  |  Branch (228:5): [True: 0, False: 2.53k]
  ------------------
  229|      0|    default:
  ------------------
  |  Branch (229:5): [True: 0, False: 2.53k]
  ------------------
  230|      0|      break;
  231|  2.53k|  }
  232|  2.53k|  curl_easy_setopt(easy, CURLOPT_PROTOCOLS_STR, direct_protocols);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  233|  2.53k|  curl_easy_setopt(easy, CURLOPT_REDIR_PROTOCOLS_STR, kEventDrivenProtocolsAllowed);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  234|       |
  235|       |  // CONNECT_TO confines direct connections, but an ambient http_proxy or
  236|       |  // ALL_PROXY can select a proxy before curl asks the harness for a socket.
  237|       |  // An explicit empty proxy keeps every transfer inside the socketpair and
  238|       |  // makes replay independent of the machine running the fuzzer.
  239|  2.53k|  curl_easy_setopt(easy, CURLOPT_PROXY, "");
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  240|       |
  241|       |  // Keep raw secure-scheme inputs independent of the host trust store,
  242|       |  // matching the legacy harness. The dedicated TLS mock installs its own
  243|       |  // in-memory trust anchor after this baseline; scenario options still run
  244|       |  // last and can deliberately select verification failures.
  245|  2.53k|  curl_easy_setopt(easy, CURLOPT_SSL_VERIFYPEER, 0L);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  246|       |
  247|       |  // Force every name lookup to the fuzzer's in-process mock peer. The caller
  248|       |  // owns the returned slist and must free it after curl_easy_cleanup.
  249|  2.53k|  struct curl_slist* connect_to = curl_slist_append(nullptr, kConnectToOverride);
  250|  2.53k|  curl_easy_setopt(easy, CURLOPT_CONNECT_TO, connect_to);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  251|       |
  252|       |  // Short bounds: fuzzing should never sit waiting on real I/O. Response
  253|       |  // volume is already bounded by libFuzzer's input-size limit, so do not rate
  254|       |  // limit receive traffic here: a global bytes-per-second throttle turns every
  255|       |  // otherwise-complete large response into wall-clock sleep.
  256|  2.53k|  curl_easy_setopt(easy, CURLOPT_CONNECTTIMEOUT_MS, kConnectTimeoutMs);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  257|  2.53k|  curl_easy_setopt(easy, CURLOPT_TIMEOUT_MS, kTimeoutMs);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  258|       |
  259|       |  // Keep every persistence/read path deterministic and prevent scenarios from
  260|       |  // leaking state onto the filesystem. COOKIEFILE also makes the in-memory
  261|       |  // engine's RELOAD command traverse its loader against a harmless empty
  262|       |  // source. These path options deliberately remain absent from the generated
  263|       |  // mutation manifest, so a proto cannot replace /dev/null.
  264|  2.53k|  curl_easy_setopt(easy, CURLOPT_COOKIEJAR, kDevNull);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  265|  2.53k|  curl_easy_setopt(easy, CURLOPT_COOKIEFILE, kDevNull);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  266|  2.53k|  curl_easy_setopt(easy, CURLOPT_ALTSVC, kDevNull);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  267|  2.53k|  curl_easy_setopt(easy, CURLOPT_HSTS, kDevNull);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  268|  2.53k|  curl_easy_setopt(easy, CURLOPT_NETRC_FILE, kDevNull);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  269|       |  // Do not set CRLFILE merely to mirror the legacy harness. An empty CRL is
  270|       |  // not a harmless sink: when a scenario restores certificate verification,
  271|       |  // OpenSSL rejects /dev/null before it can exercise useful handshake and
  272|       |  // verification paths. The option is absent from the mutation manifest, so
  273|       |  // leaving it unset introduces neither filesystem writes nor external input.
  274|       |
  275|       |  // Match the legacy TLV fuzzer: FUZZ_VERBOSE in the environment flips curl's
  276|       |  // own verbose logging on. Useful when reproducing a crashing corpus entry.
  277|  2.53k|  if (user_requested_verbose) {
  ------------------
  |  Branch (277:7): [True: 0, False: 2.53k]
  ------------------
  278|      0|    curl_easy_setopt(easy, CURLOPT_VERBOSE, 1L);
  ------------------
  |  | 3363|      0|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|      0|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  279|      0|  }
  280|  2.53k|  return connect_to;
  281|  2.53k|}
_ZN12proto_fuzzer14ApplySetOptionEPvRKN4curl6fuzzer5proto9SetOptionE:
  293|  1.10k|CURLcode ApplySetOption(CURL* easy, const curl::fuzzer::proto::SetOption& option) {
  294|  1.10k|  const OptionDescriptor* desc = LookupOptionDescriptor(option.option_id());
  295|  1.10k|  if (desc == nullptr) {
  ------------------
  |  Branch (295:7): [True: 0, False: 1.10k]
  ------------------
  296|      0|    return CURLE_UNKNOWN_OPTION;
  297|      0|  }
  298|       |
  299|  1.10k|  switch (desc->kind) {
  ------------------
  |  Branch (299:11): [True: 1.10k, False: 0]
  ------------------
  300|    698|    case OptionValueKind::kString: {
  ------------------
  |  Branch (300:5): [True: 698, False: 405]
  ------------------
  301|    698|      const std::string& value = option.string_value();
  302|       |
  303|       |      // POSTFIELDS borrows its pointer and accepts embedded NULs only when its
  304|       |      // size is explicit. Apply the size first so curl never observes the
  305|       |      // protobuf bytes with strlen semantics, even transiently.
  306|    698|      if (desc->curlopt == CURLOPT_POSTFIELDS) {
  ------------------
  |  Branch (306:11): [True: 0, False: 698]
  ------------------
  307|      0|        CURLcode result = curl_easy_setopt(easy, CURLOPT_POSTFIELDSIZE_LARGE, static_cast<curl_off_t>(value.size()));
  ------------------
  |  | 3363|      0|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|      0|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  308|      0|        if (result != CURLE_OK) {
  ------------------
  |  Branch (308:13): [True: 0, False: 0]
  ------------------
  309|      0|          return result;
  310|      0|        }
  311|      0|      }
  312|       |
  313|       |      // Curl otherwise treats this option as a filename during the TLS
  314|       |      // handshake. Fixed-policy inputs normally arrive pre-constrained by the
  315|       |      // postprocessor; this runtime check also protects compatibility inputs,
  316|       |      // which intentionally bypass it. Curl copies this option in setopt, so
  317|       |      // the temporary remains valid for the call's full ownership contract.
  318|    698|      if (desc->curlopt == CURLOPT_PINNEDPUBLICKEY && !UsesInMemoryPublicKeyPin(value)) {
  ------------------
  |  Branch (318:11): [True: 0, False: 698]
  |  Branch (318:55): [True: 0, False: 0]
  ------------------
  319|      0|        std::string constrained = value;
  320|      0|        ConstrainPinnedPublicKeyValue(&constrained);
  321|      0|        return curl_easy_setopt(easy, desc->curlopt, constrained.c_str());
  ------------------
  |  | 3363|      0|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|      0|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  322|      0|      }
  323|       |
  324|    698|      return curl_easy_setopt(easy, desc->curlopt, value.c_str());
  ------------------
  |  | 3363|    698|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|    698|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  325|    698|    }
  326|       |
  327|       |    // Decode the uint_value and pass it as either a long or a curl_off_t depending on the option.
  328|    333|    case OptionValueKind::kUint: {
  ------------------
  |  Branch (328:5): [True: 333, False: 770]
  ------------------
  329|    333|      const std::uint64_t raw = DecodeIntegralValue(*desc, option);
  330|       |      // CURLOPTTYPE_OFF_T options start at 30000. Everything below takes a
  331|       |      // long; everything at/above takes a curl_off_t.
  332|    333|      if (static_cast<int>(desc->curlopt) >= 30000) {
  ------------------
  |  Branch (332:11): [True: 333, False: 0]
  ------------------
  333|    333|        return curl_easy_setopt(easy, desc->curlopt, static_cast<curl_off_t>(raw));
  ------------------
  |  | 3363|    333|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|    333|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  334|    333|      }
  335|      0|      return curl_easy_setopt(easy, desc->curlopt, static_cast<long>(raw));
  ------------------
  |  | 3363|      0|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|      0|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  336|    333|    }
  337|       |
  338|       |    // Decode the bool_value and pass it as a long flag (0 or 1).
  339|     72|    case OptionValueKind::kBool: {
  ------------------
  |  Branch (339:5): [True: 72, False: 1.03k]
  ------------------
  340|     72|      const long flag = static_cast<long>(DecodeIntegralValue(*desc, option));
  341|     72|      return curl_easy_setopt(easy, desc->curlopt, flag);
  ------------------
  |  | 3363|     72|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|     72|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  342|    333|    }
  343|  1.10k|  }
  344|      0|  return CURLE_UNKNOWN_OPTION;
  345|  1.10k|}
_ZN12proto_fuzzer18RuntimeOptionCountERKN4curl6fuzzer5proto8ScenarioE:
  349|  2.53k|std::size_t RuntimeOptionCount(const curl::fuzzer::proto::Scenario& scenario) {
  350|  2.53k|  return std::min<std::size_t>(static_cast<std::size_t>(scenario.options_size()), scenario_limits::kMaxOptions);
  351|  2.53k|}
_ZN12proto_fuzzer20ApplyScenarioOptionsEPvRKN4curl6fuzzer5proto8ScenarioE:
  356|  2.53k|std::size_t ApplyScenarioOptions(CURL* easy, const curl::fuzzer::proto::Scenario& scenario) {
  357|  2.53k|  const std::size_t option_count = RuntimeOptionCount(scenario);
  358|  3.64k|  for (std::size_t index = 0; index < option_count; ++index) {
  ------------------
  |  Branch (358:31): [True: 1.10k, False: 2.53k]
  ------------------
  359|  1.10k|    (void)ApplySetOption(easy, scenario.options(static_cast<int>(index)));
  360|  1.10k|  }
  361|  2.53k|  return option_count;
  362|  2.53k|}
option_apply.cc:_ZN12proto_fuzzer12_GLOBAL__N_119DecodeIntegralValueERKNS_16OptionDescriptorERKN4curl6fuzzer5proto9SetOptionE:
  115|    405|std::uint64_t DecodeIntegralValue(const OptionDescriptor& descriptor, const curl::fuzzer::proto::SetOption& option) {
  116|    405|  if (descriptor.kind == OptionValueKind::kString) {
  ------------------
  |  Branch (116:7): [True: 0, False: 405]
  ------------------
  117|      0|    return 0;
  118|      0|  }
  119|    405|  switch (option.value_case()) {
  ------------------
  |  Branch (119:11): [True: 405, False: 0]
  ------------------
  120|     72|    case curl::fuzzer::proto::SetOption::kBoolValue:
  ------------------
  |  Branch (120:5): [True: 72, False: 333]
  ------------------
  121|     72|      return option.bool_value() ? 1U : 0U;
  ------------------
  |  Branch (121:14): [True: 3, False: 69]
  ------------------
  122|    333|    case curl::fuzzer::proto::SetOption::kUintValue:
  ------------------
  |  Branch (122:5): [True: 333, False: 72]
  ------------------
  123|    333|      if (descriptor.kind == OptionValueKind::kBool) {
  ------------------
  |  Branch (123:11): [True: 0, False: 333]
  ------------------
  124|      0|        return option.uint_value() != 0 ? 1U : 0U;
  ------------------
  |  Branch (124:16): [True: 0, False: 0]
  ------------------
  125|      0|      }
  126|    333|      return option.uint_value();
  127|      0|    case curl::fuzzer::proto::SetOption::kStringValue:
  ------------------
  |  Branch (127:5): [True: 0, False: 405]
  ------------------
  128|      0|    case curl::fuzzer::proto::SetOption::VALUE_NOT_SET:
  ------------------
  |  Branch (128:5): [True: 0, False: 405]
  ------------------
  129|      0|      return 0;
  130|    405|  }
  131|      0|  return 0;
  132|    405|}
option_apply.cc:_ZN12proto_fuzzer12_GLOBAL__N_132EnableDebugHttpTransportMetadataEv:
   95|  2.53k|void EnableDebugHttpTransportMetadata() {
   96|  2.53k|  static const bool configured = [] {
   97|       |    // CMake builds the fuzzing copy of curl with ENABLE_DEBUG specifically so
   98|       |    // these curl-provided test hooks are available. Do not overwrite values a
   99|       |    // reproducer deliberately supplied in its environment.
  100|  2.53k|    (void)setenv(kAltSvcHttpEnvVar, "1", 0);
  101|  2.53k|    (void)setenv(kHstsHttpEnvVar, "1", 0);
  102|  2.53k|    return true;
  103|  2.53k|  }();
  104|  2.53k|  (void)configured;
  105|  2.53k|}
option_apply.cc:_ZZN12proto_fuzzer12_GLOBAL__N_132EnableDebugHttpTransportMetadataEvENK3$_0clEv:
   96|      1|  static const bool configured = [] {
   97|       |    // CMake builds the fuzzing copy of curl with ENABLE_DEBUG specifically so
   98|       |    // these curl-provided test hooks are available. Do not overwrite values a
   99|       |    // reproducer deliberately supplied in its environment.
  100|      1|    (void)setenv(kAltSvcHttpEnvVar, "1", 0);
  101|      1|    (void)setenv(kHstsHttpEnvVar, "1", 0);
  102|      1|    return true;
  103|      1|  }();
option_apply.cc:_ZN12proto_fuzzer12_GLOBAL__N_119SilentWriteCallbackEPvmmS1_:
   81|  2.36k|size_t SilentWriteCallback(void* /*contents*/, size_t size, size_t nmemb, void* /*userdata*/) { return size * nmemb; }
option_apply.cc:_ZN12proto_fuzzer12_GLOBAL__N_119SilentDebugCallbackEPv13curl_infotypePcmS1_:
   87|   289k|int SilentDebugCallback(CURL* /*handle*/, curl_infotype /*type*/, char* /*data*/, size_t /*size*/, void* /*userdata*/) {
   88|   289k|  return 0;
   89|   289k|}

_ZN12proto_fuzzer17UploadScriptStateC2ERKN4curl6fuzzer5proto8ScenarioE:
  225|  2.53k|    : data_(),
  226|  2.53k|      read_step_count_(0),
  227|  2.53k|      total_size_(scenario.scheme() == curl::fuzzer::proto::SCHEME_TELNET ? 0 : scenario_limits::kMaxUploadBytes),
  ------------------
  |  Branch (227:19): [True: 2.53k, False: 0]
  ------------------
  228|  2.53k|      max_read_size_(scenario.scheme() == curl::fuzzer::proto::SCHEME_TELNET ? scenario_limits::kMaxTelnetUploadReadSize
  ------------------
  |  Branch (228:22): [True: 2.53k, False: 0]
  ------------------
  229|  2.53k|                                                                             : scenario_limits::kMaxUploadReadSize),
  230|  2.53k|      offset_(0),
  231|  2.53k|      next_read_size_(0),
  232|  2.53k|      terminal_(curl::fuzzer::proto::UPLOAD_TERMINAL_EOF),
  233|  2.53k|      seek_result_(curl::fuzzer::proto::UPLOAD_SEEK_CANTSEEK),
  234|  2.53k|      before_read_callback_(nullptr),
  235|  2.53k|      before_read_userdata_(nullptr),
  236|  2.53k|      scripted_(scenario.has_upload()) {
  237|  2.53k|  if (!scripted_) {
  ------------------
  |  Branch (237:7): [True: 2.29k, False: 241]
  ------------------
  238|  2.29k|    return;
  239|  2.29k|  }
  240|       |
  241|    241|  const auto& upload = scenario.upload();
  242|    241|  const std::size_t data_limit = scenario.scheme() == curl::fuzzer::proto::SCHEME_TELNET
  ------------------
  |  Branch (242:34): [True: 241, False: 0]
  ------------------
  243|    241|                                     ? scenario_limits::kMaxTelnetUploadBytes
  244|    241|                                     : scenario_limits::kMaxUploadBytes;
  245|    241|  const std::size_t data_size = std::min(upload.data().size(), data_limit);
  246|    241|  data_ = std::string_view(upload.data().data(), data_size);
  247|    241|  total_size_ = data_.size();
  248|    241|  terminal_ = upload.terminal();
  249|    241|  if (scenario.scheme() != curl::fuzzer::proto::SCHEME_TELNET &&
  ------------------
  |  Branch (249:7): [True: 0, False: 241]
  ------------------
  250|      0|      terminal_ == curl::fuzzer::proto::UPLOAD_TERMINAL_PAUSE) {
  ------------------
  |  Branch (250:7): [True: 0, False: 0]
  ------------------
  251|       |    // Event-driven protocols need an external resume source. Interpret this
  252|       |    // TELNET-specific outcome as EOF before curl can retain a paused transfer.
  253|      0|    terminal_ = curl::fuzzer::proto::UPLOAD_TERMINAL_EOF;
  254|      0|  }
  255|    241|  seek_result_ = upload.seek_result();
  256|       |
  257|    241|  const std::size_t read_step_limit = scenario.scheme() == curl::fuzzer::proto::SCHEME_TELNET
  ------------------
  |  Branch (257:39): [True: 241, False: 0]
  ------------------
  258|    241|                                          ? scenario_limits::kMaxTelnetUploadReadSteps
  259|    241|                                          : scenario_limits::kMaxUploadReadSteps;
  260|    241|  read_step_count_ = std::min<std::size_t>(upload.read_sizes_size(), read_step_limit);
  261|    360|  for (std::size_t i = 0; i < read_step_count_; ++i) {
  ------------------
  |  Branch (261:27): [True: 119, False: 241]
  ------------------
  262|    119|    const std::size_t requested = upload.read_sizes(static_cast<int>(i));
  263|       |    // Zero-as-one ensures every retained step makes progress; see the schema
  264|       |    // comment for why zero is not treated as an early EOF sentinel.
  265|    119|    read_sizes_[i] = std::max<std::size_t>(1, std::min(requested, max_read_size_));
  266|    119|  }
  267|    241|}
_ZN12proto_fuzzer17UploadScriptState4ReadEPcm:
  272|    946|std::size_t UploadScriptState::Read(char* buffer, std::size_t capacity) {
  273|       |  // TELNET can produce negotiation replies while one curl_multi_perform call
  274|       |  // owns the thread. Empty them before returning more callback bytes;
  275|       |  // otherwise send_telnet_data() can consume the whole bounded transfer
  276|       |  // timeout while the synchronous path waits for socket capacity.
  277|    946|  if (before_read_callback_ != nullptr) {
  ------------------
  |  Branch (277:7): [True: 946, False: 0]
  ------------------
  278|    946|    before_read_callback_(before_read_userdata_);
  279|    946|  }
  280|    946|  if (offset_ >= total_size_) {
  ------------------
  |  Branch (280:7): [True: 809, False: 137]
  ------------------
  281|    809|    switch (terminal_) {
  282|      8|      case curl::fuzzer::proto::UPLOAD_TERMINAL_ABORT:
  ------------------
  |  Branch (282:7): [True: 8, False: 801]
  ------------------
  283|      8|        return CURL_READFUNC_ABORT;
  ------------------
  |  |  392|      8|#define CURL_READFUNC_ABORT 0x10000000
  ------------------
  284|      7|      case curl::fuzzer::proto::UPLOAD_TERMINAL_PAUSE:
  ------------------
  |  Branch (284:7): [True: 7, False: 802]
  ------------------
  285|      7|        return CURL_READFUNC_PAUSE;
  ------------------
  |  |  395|      7|#define CURL_READFUNC_PAUSE 0x10000001
  ------------------
  286|    794|      case curl::fuzzer::proto::UPLOAD_TERMINAL_EOF:
  ------------------
  |  Branch (286:7): [True: 794, False: 15]
  ------------------
  287|    794|      default:
  ------------------
  |  Branch (287:7): [True: 0, False: 809]
  ------------------
  288|    794|        return 0;
  289|    809|    }
  290|    809|  }
  291|    137|  if (buffer == nullptr || capacity == 0) {
  ------------------
  |  Branch (291:7): [True: 0, False: 137]
  |  Branch (291:28): [True: 0, False: 137]
  ------------------
  292|      0|    return 0;
  293|      0|  }
  294|       |
  295|    137|  std::size_t chunk_limit = std::min(capacity, max_read_size_);
  296|    137|  if (next_read_size_ < read_step_count_) {
  ------------------
  |  Branch (296:7): [True: 47, False: 90]
  ------------------
  297|     47|    chunk_limit = std::min(chunk_limit, read_sizes_[next_read_size_++]);
  298|     47|  }
  299|    137|  const std::size_t count = std::min(chunk_limit, total_size_ - offset_);
  300|    137|  if (scripted_) {
  ------------------
  |  Branch (300:7): [True: 137, False: 0]
  ------------------
  301|    137|    std::memcpy(buffer, data_.data() + offset_, count);
  302|    137|  } else {
  303|      0|    std::memset(buffer, 'U', count);
  304|      0|  }
  305|    137|  offset_ += count;
  306|    137|  return count;
  307|    137|}
_ZN12proto_fuzzer17UploadScriptState12ReadCallbackEPcmmPv:
  354|    946|std::size_t UploadScriptState::ReadCallback(char* buffer, std::size_t size, std::size_t nitems, void* userdata) {
  355|    946|  if (userdata == nullptr || size == 0 || nitems == 0) {
  ------------------
  |  Branch (355:7): [True: 0, False: 946]
  |  Branch (355:30): [True: 0, False: 946]
  |  Branch (355:43): [True: 0, False: 946]
  ------------------
  356|      0|    return 0;
  357|      0|  }
  358|    946|  const std::size_t max = std::numeric_limits<std::size_t>::max();
  359|    946|  if (nitems > max / size) {
  ------------------
  |  Branch (359:7): [True: 0, False: 946]
  ------------------
  360|      0|    return CURL_READFUNC_ABORT;
  ------------------
  |  |  392|      0|#define CURL_READFUNC_ABORT 0x10000000
  ------------------
  361|      0|  }
  362|    946|  return static_cast<UploadScriptState*>(userdata)->Read(buffer, size * nitems);
  363|    946|}
_ZN12proto_fuzzer17UploadScriptState21SetBeforeReadCallbackEPFvPvES1_:
  382|  2.53k|void UploadScriptState::SetBeforeReadCallback(BeforeReadCallback callback, void* userdata) {
  383|  2.53k|  before_read_callback_ = callback;
  384|  2.53k|  before_read_userdata_ = userdata;
  385|  2.53k|}
_ZN12proto_fuzzer19ScenarioRequestDataC2EPvRKN4curl6fuzzer5proto8ScenarioE:
  392|  2.53k|    : easy_(easy),
  393|  2.53k|      request_headers_(nullptr),
  394|  2.53k|      telnet_options_(nullptr),
  395|  2.53k|      mime_post_(nullptr),
  396|  2.53k|      upload_state_(scenario),
  397|  2.53k|      upload_callbacks_installed_(false) {
  398|  2.53k|  if (easy_ == nullptr) {
  ------------------
  |  Branch (398:7): [True: 0, False: 2.53k]
  ------------------
  399|      0|    return;
  400|      0|  }
  401|       |
  402|  2.53k|  if (NeedsUploadCallbacks(scenario)) {
  ------------------
  |  Branch (402:7): [True: 2.53k, False: 0]
  ------------------
  403|       |    // Install a per-run memory source even when Scenario.upload is absent but
  404|       |    // CURLOPT_UPLOAD or TELNET may request caller input. Non-TELNET schemes
  405|       |    // retain the historical fallback bytes; TELNET returns EOF. Either result
  406|       |    // replaces stdin and cannot block OSS-Fuzz. The state remains scoped to
  407|       |    // the complete drive so retries cannot share a cursor across iterations.
  408|  2.53k|    upload_callbacks_installed_ = true;
  409|  2.53k|    (void)curl_easy_setopt(easy_, CURLOPT_READFUNCTION, &UploadScriptState::ReadCallback);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  410|  2.53k|    (void)curl_easy_setopt(easy_, CURLOPT_READDATA, &upload_state_);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  411|  2.53k|    (void)curl_easy_setopt(easy_, CURLOPT_SEEKFUNCTION, &UploadScriptState::SeekCallback);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  412|  2.53k|    (void)curl_easy_setopt(easy_, CURLOPT_SEEKDATA, &upload_state_);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  413|  2.53k|  }
  414|       |
  415|       |  // HTTP headers/MIME and TELNET options are mutually exclusive because only
  416|       |  // the selected protocol can observe them. Avoid allocating protocol-inert
  417|       |  // lists and trees in compatibility inputs that bypass target policy.
  418|  2.53k|  if (scenario.scheme() == curl::fuzzer::proto::SCHEME_TELNET) {
  ------------------
  |  Branch (418:7): [True: 2.53k, False: 0]
  ------------------
  419|  2.53k|    telnet_options_ = BuildStringList(scenario.telnet_options(), scenario_limits::kMaxTelnetOptions,
  420|  2.53k|                                      scenario_limits::kMaxTelnetOptionBytes, &stats_.telnet_options);
  421|  2.53k|    if (telnet_options_ != nullptr) {
  ------------------
  |  Branch (421:9): [True: 395, False: 2.14k]
  ------------------
  422|    395|      (void)curl_easy_setopt(easy_, CURLOPT_TELNETOPTIONS, telnet_options_);
  ------------------
  |  | 3363|    395|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|    395|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  423|    395|    }
  424|  2.53k|  } else {
  425|      0|    request_headers_ = BuildStringList(scenario.request_headers(), scenario_limits::kMaxRequestHeaders,
  426|      0|                                       scenario_limits::kMaxMetadataBytes, &stats_.request_headers);
  427|      0|    if (request_headers_ != nullptr) {
  ------------------
  |  Branch (427:9): [True: 0, False: 0]
  ------------------
  428|      0|      (void)curl_easy_setopt(easy_, CURLOPT_HTTPHEADER, request_headers_);
  ------------------
  |  | 3363|      0|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|      0|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  429|      0|    }
  430|       |
  431|      0|    if (scenario.has_mime_post()) {
  ------------------
  |  Branch (431:9): [True: 0, False: 0]
  ------------------
  432|      0|      mime_post_ = BuildMimePost(easy_, scenario.mime_post(), &stats_);
  433|      0|      if (mime_post_ != nullptr) {
  ------------------
  |  Branch (433:11): [True: 0, False: 0]
  ------------------
  434|      0|        (void)curl_easy_setopt(easy_, CURLOPT_MIMEPOST, mime_post_);
  ------------------
  |  | 3363|      0|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|      0|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  435|      0|      }
  436|      0|    }
  437|      0|  }
  438|  2.53k|}
_ZN12proto_fuzzer19ScenarioRequestDataD2Ev:
  444|  2.53k|ScenarioRequestData::~ScenarioRequestData() {
  445|  2.53k|  if (easy_ != nullptr) {
  ------------------
  |  Branch (445:7): [True: 2.53k, False: 0]
  ------------------
  446|       |    // Clear callbacks before their userdata member is destroyed. There is no
  447|       |    // perform in this destructor, but making the handle non-dangling keeps the
  448|       |    // ownership rule robust if cleanup later gains diagnostics or getinfo.
  449|  2.53k|    if (upload_callbacks_installed_) {
  ------------------
  |  Branch (449:9): [True: 2.53k, False: 0]
  ------------------
  450|  2.53k|      (void)curl_easy_setopt(easy_, CURLOPT_SEEKFUNCTION, nullptr);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  451|  2.53k|      (void)curl_easy_setopt(easy_, CURLOPT_SEEKDATA, nullptr);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  452|  2.53k|      (void)curl_easy_setopt(easy_, CURLOPT_READFUNCTION, nullptr);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  453|  2.53k|      (void)curl_easy_setopt(easy_, CURLOPT_READDATA, nullptr);
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  454|  2.53k|    }
  455|  2.53k|    if (mime_post_ != nullptr) {
  ------------------
  |  Branch (455:9): [True: 0, False: 2.53k]
  ------------------
  456|      0|      (void)curl_easy_setopt(easy_, CURLOPT_MIMEPOST, nullptr);
  ------------------
  |  | 3363|      0|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|      0|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  457|      0|    }
  458|  2.53k|    if (request_headers_ != nullptr) {
  ------------------
  |  Branch (458:9): [True: 0, False: 2.53k]
  ------------------
  459|      0|      (void)curl_easy_setopt(easy_, CURLOPT_HTTPHEADER, nullptr);
  ------------------
  |  | 3363|      0|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|      0|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  460|      0|    }
  461|  2.53k|    if (telnet_options_ != nullptr) {
  ------------------
  |  Branch (461:9): [True: 395, False: 2.14k]
  ------------------
  462|    395|      (void)curl_easy_setopt(easy_, CURLOPT_TELNETOPTIONS, nullptr);
  ------------------
  |  | 3363|    395|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|    395|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  463|    395|    }
  464|  2.53k|  }
  465|  2.53k|  curl_mime_free(mime_post_);
  466|  2.53k|  curl_slist_free_all(telnet_options_);
  467|  2.53k|  curl_slist_free_all(request_headers_);
  468|  2.53k|}
_ZN12proto_fuzzer19ScenarioRequestData27SetBeforeUploadReadCallbackEPFvPvES1_:
  478|  2.53k|void ScenarioRequestData::SetBeforeUploadReadCallback(UploadScriptState::BeforeReadCallback callback, void* userdata) {
  479|  2.53k|  upload_state_.SetBeforeReadCallback(callback, userdata);
  480|  2.53k|}
request_data.cc:_ZN12proto_fuzzer12_GLOBAL__N_120NeedsUploadCallbacksERKN4curl6fuzzer5proto8ScenarioE:
   46|  2.53k|bool NeedsUploadCallbacks(const curl::fuzzer::proto::Scenario& scenario) {
   47|       |  // curl's TELNET implementation polls stdin unless a READFUNCTION was
   48|       |  // explicitly installed. Always provide the bounded per-scenario source,
   49|       |  // even when there is no upload payload to send.
   50|  2.53k|  if (scenario.scheme() == curl::fuzzer::proto::SCHEME_TELNET || scenario.has_upload()) {
  ------------------
  |  Branch (50:7): [True: 2.53k, False: 0]
  |  Branch (50:66): [True: 0, False: 0]
  ------------------
   51|  2.53k|    return true;
   52|  2.53k|  }
   53|      0|  const std::size_t option_count = RuntimeOptionCount(scenario);
   54|      0|  for (std::size_t index = 0; index < option_count; ++index) {
  ------------------
  |  Branch (54:31): [True: 0, False: 0]
  ------------------
   55|      0|    const auto& option = scenario.options(static_cast<int>(index));
   56|      0|    if (option.option_id() == curl::fuzzer::proto::CURLOPT_UPLOAD ||
  ------------------
  |  Branch (56:9): [True: 0, False: 0]
  ------------------
   57|      0|        option.option_id() == curl::fuzzer::proto::CURLOPT_POST) {
  ------------------
  |  Branch (57:9): [True: 0, False: 0]
  ------------------
   58|      0|      return true;
   59|      0|    }
   60|      0|  }
   61|      0|  return false;
   62|      0|}
request_data.cc:_ZN12proto_fuzzer12_GLOBAL__N_114BoundedCStringERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEmPS7_:
   32|    982|const char* BoundedCString(const std::string& value, std::size_t limit, std::string* truncated) {
   33|    982|  if (value.size() <= limit) {
  ------------------
  |  Branch (33:7): [True: 982, False: 0]
  ------------------
   34|    982|    return value.c_str();
   35|    982|  }
   36|      0|  truncated->assign(value.data(), limit);
   37|      0|  return truncated->c_str();
   38|    982|}
request_data.cc:_ZN12proto_fuzzer12_GLOBAL__N_115BuildStringListIN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEP10curl_slistRKT_mmPm:
   91|  2.53k|                            std::size_t* applied) {
   92|  2.53k|  curl_slist* list = nullptr;
   93|  2.53k|  std::string truncated;
   94|  2.53k|  const std::size_t count = std::min<std::size_t>(count_limit, values.size());
   95|  3.52k|  for (std::size_t i = 0; i < count; ++i) {
  ------------------
  |  Branch (95:27): [True: 982, False: 2.53k]
  ------------------
   96|    982|    const std::string& value = values.Get(static_cast<int>(i));
   97|    982|    curl_slist* appended = curl_slist_append(list, BoundedCString(value, value_limit, &truncated));
   98|    982|    if (appended == nullptr) {
  ------------------
  |  Branch (98:9): [True: 0, False: 982]
  ------------------
   99|      0|      break;
  100|      0|    }
  101|    982|    list = appended;
  102|    982|    ++*applied;
  103|    982|  }
  104|  2.53k|  return list;
  105|  2.53k|}

_ZN12proto_fuzzer14ScenarioRunnerC2Ev:
  166|  2.57k|ScenarioRunner::ScenarioRunner() = default;
_ZN12proto_fuzzer14ScenarioRunnerD2Ev:
  170|  2.57k|ScenarioRunner::~ScenarioRunner() = default;
_ZN12proto_fuzzer14ScenarioRunner3RunERKN4curl6fuzzer5proto8ScenarioENS_15ScenarioRunModeE:
  174|  2.57k|int ScenarioRunner::Run(const curl::fuzzer::proto::Scenario& scenario, ScenarioRunMode mode) {
  175|  2.57k|  const char* prefix = SchemePrefix(scenario.scheme());
  176|  2.57k|  if (prefix == nullptr || scenario.host_path().empty()) {
  ------------------
  |  Branch (176:7): [True: 0, False: 2.57k]
  |  Branch (176:28): [True: 31, False: 2.53k]
  ------------------
  177|     31|    return 0;
  178|     31|  }
  179|       |
  180|  2.53k|  std::unique_ptr<MockServerBase> mock = MakeMockServerForScenario(scenario, mode);
  181|  2.53k|  if (!mock) {
  ------------------
  |  Branch (181:7): [True: 0, False: 2.53k]
  ------------------
  182|      0|    return 0;
  183|      0|  }
  184|       |
  185|       |  // Declaration order is an ownership invariant: reverse destruction keeps
  186|       |  // CONNECT_TO storage and share callback userdata alive through easy cleanup.
  187|       |  // This matters for incomplete transfers, where an explicit share detach can
  188|       |  // be rejected while easy cleanup can still release the reference safely.
  189|  2.53k|  std::unique_ptr<ApiLifecycle> api_lifecycle;
  190|  2.53k|  CurlSlistPtr connect_to;
  191|  2.53k|  CurlEasyPtr easy(curl_easy_init());
  192|  2.53k|  if (!easy) {
  ------------------
  |  Branch (192:7): [True: 0, False: 2.53k]
  ------------------
  193|      0|    return 0;
  194|      0|  }
  195|       |
  196|  2.53k|  std::string url = std::string(prefix) + "://" + scenario.host_path();
  197|  2.53k|  const auto configure_easy = [&] {
  198|  2.53k|    connect_to.reset(ApplyBaselineOptions(easy.get(), scenario.scheme()));
  199|  2.53k|    curl_easy_setopt(easy.get(), CURLOPT_URL, url.c_str());
  200|  2.53k|    mock->Install(easy.get());
  201|       |
  202|       |    // Compatibility inputs deliberately bypass the mutating postprocessor,
  203|       |    // so enforce the shared option prefix again at the runtime boundary. The
  204|       |    // helper still ignores individual CURLcodes: the fuzzer stresses curl
  205|       |    // rather than treating rejected combinations as harness failures.
  206|  2.53k|    (void)ApplyScenarioOptions(easy.get(), scenario);
  207|  2.53k|  };
  208|  2.53k|  configure_easy();
  209|       |
  210|  2.53k|  const curl::fuzzer::proto::ApiPlan* api_plan =
  211|  2.53k|      mode == ScenarioRunMode::kApiLifecycle && scenario.has_api_plan() ? &scenario.api_plan() : nullptr;
  ------------------
  |  Branch (211:7): [True: 0, False: 2.53k]
  |  Branch (211:49): [True: 0, False: 0]
  ------------------
  212|  2.53k|  if (api_plan != nullptr && api_plan->reset_easy()) {
  ------------------
  |  Branch (212:7): [True: 0, False: 2.53k]
  |  Branch (212:30): [True: 0, False: 0]
  ------------------
  213|       |    // Reset deliberately drops every pointer-valued option before its backing
  214|       |    // list is freed. Reapplying the exact scenario then lets the transfer
  215|       |    // populate post-reset state instead of turning reset coverage into a
  216|       |    // guaranteed malformed request.
  217|      0|    curl_easy_reset(easy.get());
  218|      0|    connect_to.reset();
  219|      0|    configure_easy();
  220|      0|  }
  221|       |
  222|  2.53k|  if (api_plan != nullptr) {
  ------------------
  |  Branch (222:7): [True: 0, False: 2.53k]
  ------------------
  223|      0|    api_lifecycle = std::make_unique<ApiLifecycle>(easy.get(), *api_plan, url);
  224|      0|  }
  225|       |
  226|  2.53k|  {
  227|       |    // HTTP headers, MIME bodies, TELNET options, and callback userdata are
  228|       |    // pointer-valued state that libcurl does not copy. Keep their owner around
  229|       |    // the entire multi-handle drive, then let it detach them while `easy` is
  230|       |    // still valid. This inner scope is deliberate: easy.reset() below must
  231|       |    // never run before the owner's destructor clears those options.
  232|  2.53k|    ScenarioRequestData request_data(easy.get(), scenario);
  233|  2.53k|    mock->ConfigureRequestData(&request_data);
  234|  2.53k|    const auto drive_mode = api_plan == nullptr ? curl::fuzzer::proto::API_DRIVE_MULTI_PERFORM : api_plan->drive_mode();
  ------------------
  |  Branch (234:29): [True: 2.53k, False: 0]
  ------------------
  235|  2.53k|    if (drive_mode == curl::fuzzer::proto::API_DRIVE_EASY_PERFORM) {
  ------------------
  |  Branch (235:9): [True: 0, False: 2.53k]
  ------------------
  236|      0|      mock->DriveEasyScenario(easy.get(), scenario);
  237|  2.53k|    } else {
  238|  2.53k|      mock->DriveScenario(easy.get(), scenario, drive_mode == curl::fuzzer::proto::API_DRIVE_MULTI_SOCKET,
  239|  2.53k|                          api_plan != nullptr && api_plan->wake_multi());
  ------------------
  |  Branch (239:27): [True: 0, False: 2.53k]
  |  Branch (239:50): [True: 0, False: 0]
  ------------------
  240|  2.53k|    }
  241|  2.53k|    if (api_lifecycle != nullptr) {
  ------------------
  |  Branch (241:9): [True: 0, False: 2.53k]
  ------------------
  242|      0|      api_lifecycle->ProbeTransferResults(drive_mode == curl::fuzzer::proto::API_DRIVE_EASY_PERFORM);
  243|      0|      api_lifecycle->ProbeEasyDuplication();
  244|  2.53k|    } else if (mode != ScenarioRunMode::kFastProtocol) {
  ------------------
  |  Branch (244:16): [True: 0, False: 2.53k]
  ------------------
  245|      0|      ProbeTransferResults(easy.get());
  246|      0|    }
  247|  2.53k|  }
  248|       |
  249|       |  // Easy cleanup is the reliable share-detach boundary even if the bounded
  250|       |  // drive stopped with a connection attached. The lifecycle object—and thus
  251|       |  // lock callback userdata—outlives it, then releases share-owned caches.
  252|  2.53k|  easy.reset();
  253|  2.53k|  connect_to.reset();
  254|  2.53k|  api_lifecycle.reset();
  255|  2.53k|  return 0;
  256|  2.53k|}
scenario_runner.cc:_ZN12proto_fuzzer12_GLOBAL__N_112SchemePrefixEN4curl6fuzzer5proto6SchemeE:
   89|  2.57k|const char* SchemePrefix(curl::fuzzer::proto::Scheme scheme) {
   90|  2.57k|  switch (scheme) {
   91|      0|    case curl::fuzzer::proto::SCHEME_HTTP:
  ------------------
  |  Branch (91:5): [True: 0, False: 2.57k]
  ------------------
   92|      0|      return "http";
   93|      0|    case curl::fuzzer::proto::SCHEME_HTTPS:
  ------------------
  |  Branch (93:5): [True: 0, False: 2.57k]
  ------------------
   94|      0|      return "https";
   95|      0|    case curl::fuzzer::proto::SCHEME_WS:
  ------------------
  |  Branch (95:5): [True: 0, False: 2.57k]
  ------------------
   96|      0|      return "ws";
   97|      0|    case curl::fuzzer::proto::SCHEME_WSS:
  ------------------
  |  Branch (97:5): [True: 0, False: 2.57k]
  ------------------
   98|      0|      return "wss";
   99|  2.57k|    case curl::fuzzer::proto::SCHEME_TELNET:
  ------------------
  |  Branch (99:5): [True: 2.57k, False: 0]
  ------------------
  100|  2.57k|      return "telnet";
  101|      0|    case curl::fuzzer::proto::SCHEME_FTP:
  ------------------
  |  Branch (101:5): [True: 0, False: 2.57k]
  ------------------
  102|      0|      return "ftp";
  103|      0|    case curl::fuzzer::proto::SCHEME_TFTP:
  ------------------
  |  Branch (103:5): [True: 0, False: 2.57k]
  ------------------
  104|      0|      return "tftp";
  105|      0|    case curl::fuzzer::proto::SCHEME_UNSPECIFIED:
  ------------------
  |  Branch (105:5): [True: 0, False: 2.57k]
  ------------------
  106|      0|    default:
  ------------------
  |  Branch (106:5): [True: 0, False: 2.57k]
  ------------------
  107|      0|      return nullptr;
  108|  2.57k|  }
  109|  2.57k|}
scenario_runner.cc:_ZN12proto_fuzzer12_GLOBAL__N_125MakeMockServerForScenarioERKN4curl6fuzzer5proto8ScenarioENS_15ScenarioRunModeE:
  117|  2.53k|                                                          ScenarioRunMode mode) {
  118|  2.53k|  switch (scenario.scheme()) {
  119|      0|    case curl::fuzzer::proto::SCHEME_HTTP:
  ------------------
  |  Branch (119:5): [True: 0, False: 2.53k]
  ------------------
  120|      0|      return std::make_unique<MockServer>();
  121|      0|    case curl::fuzzer::proto::SCHEME_HTTPS:
  ------------------
  |  Branch (121:5): [True: 0, False: 2.53k]
  ------------------
  122|      0|#if defined(PROTO_FUZZER_HAS_TLS_MOCK_SERVER)
  123|      0|      if (mode == ScenarioRunMode::kTlsCoverage) {
  ------------------
  |  Branch (123:11): [True: 0, False: 0]
  ------------------
  124|      0|        return std::make_unique<TlsMockServer>();
  125|      0|      }
  126|       |#else
  127|       |      (void)mode;
  128|       |#endif
  129|      0|      return std::make_unique<MockServer>();
  130|      0|    case curl::fuzzer::proto::SCHEME_WS:
  ------------------
  |  Branch (130:5): [True: 0, False: 2.53k]
  ------------------
  131|      0|    case curl::fuzzer::proto::SCHEME_WSS:
  ------------------
  |  Branch (131:5): [True: 0, False: 2.53k]
  ------------------
  132|      0|      return std::make_unique<WebSocketMockServer>();
  133|  2.53k|    case curl::fuzzer::proto::SCHEME_TELNET:
  ------------------
  |  Branch (133:5): [True: 2.53k, False: 0]
  ------------------
  134|  2.53k|      return std::make_unique<TelnetMockServer>();
  135|      0|    case curl::fuzzer::proto::SCHEME_FTP:
  ------------------
  |  Branch (135:5): [True: 0, False: 2.53k]
  ------------------
  136|       |      // New numeric enum values may already occur in the historical mixed
  137|       |      // corpus as unknown fields. Only the fixed FTP profile may reinterpret
  138|       |      // one as a live two-channel protocol exchange.
  139|      0|      if (mode == ScenarioRunMode::kFtpCoverage) {
  ------------------
  |  Branch (139:11): [True: 0, False: 0]
  ------------------
  140|      0|        return std::make_unique<FtpMockServer>();
  141|      0|      }
  142|      0|      return nullptr;
  143|      0|    case curl::fuzzer::proto::SCHEME_TFTP:
  ------------------
  |  Branch (143:5): [True: 0, False: 2.53k]
  ------------------
  144|       |      // TFTP changes the callback transport from a preconnected stream to a
  145|       |      // real UDP endpoint, so compatibility inputs must not opt into it merely
  146|       |      // because this build learned a new enum value.
  147|      0|      if (mode == ScenarioRunMode::kTftpCoverage) {
  ------------------
  |  Branch (147:11): [True: 0, False: 0]
  ------------------
  148|      0|        return std::make_unique<TftpMockServer>();
  149|      0|      }
  150|      0|      return nullptr;
  151|      0|    case curl::fuzzer::proto::SCHEME_UNSPECIFIED:
  ------------------
  |  Branch (151:5): [True: 0, False: 2.53k]
  ------------------
  152|      0|    default:
  ------------------
  |  Branch (152:5): [True: 0, False: 2.53k]
  ------------------
  153|      0|      return nullptr;
  154|  2.53k|  }
  155|  2.53k|}
scenario_runner.cc:_ZZN12proto_fuzzer14ScenarioRunner3RunERKN4curl6fuzzer5proto8ScenarioENS_15ScenarioRunModeEENK3$_0clEv:
  197|  2.53k|  const auto configure_easy = [&] {
  198|  2.53k|    connect_to.reset(ApplyBaselineOptions(easy.get(), scenario.scheme()));
  199|  2.53k|    curl_easy_setopt(easy.get(), CURLOPT_URL, url.c_str());
  ------------------
  |  | 3363|  2.53k|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3361|  2.53k|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
  200|  2.53k|    mock->Install(easy.get());
  201|       |
  202|       |    // Compatibility inputs deliberately bypass the mutating postprocessor,
  203|       |    // so enforce the shared option prefix again at the runtime boundary. The
  204|       |    // helper still ignores individual CURLcodes: the fuzzer stresses curl
  205|       |    // rather than treating rejected combinations as harness failures.
  206|  2.53k|    (void)ApplyScenarioOptions(easy.get(), scenario);
  207|  2.53k|  };
scenario_runner.cc:_ZNK12proto_fuzzer12_GLOBAL__N_116CurlSlistDeleterclEP10curl_slist:
   47|  2.53k|  void operator()(curl_slist* list) const noexcept { curl_slist_free_all(list); }
scenario_runner.cc:_ZNK12proto_fuzzer12_GLOBAL__N_115CurlEasyDeleterclEPv:
   39|  2.53k|  void operator()(CURL* h) const noexcept {
   40|  2.53k|    if (h) curl_easy_cleanup(h);
  ------------------
  |  Branch (40:9): [True: 2.53k, False: 0]
  ------------------
   41|  2.53k|  }

_ZN12proto_fuzzer17ApplyTargetPolicyEPN4curl6fuzzer5proto8ScenarioENS_13TargetProfileE:
  663|  2.57k|void ApplyTargetPolicy(curl::fuzzer::proto::Scenario* scenario, TargetProfile profile) {
  664|  2.57k|  if (scenario == nullptr) {
  ------------------
  |  Branch (664:7): [True: 0, False: 2.57k]
  ------------------
  665|      0|    return;
  666|      0|  }
  667|       |
  668|  2.57k|  if (profile == TargetProfile::kCompatibility) {
  ------------------
  |  Branch (668:7): [True: 0, False: 2.57k]
  ------------------
  669|       |    // The original target's existing corpus predates profile splitting. A
  670|       |    // no-op here makes the type safe to pass around while its binary continues
  671|       |    // to omit postprocessor registration altogether. The append-only FTP/TFTP
  672|       |    // scheme values do not justify rewriting historical mixed-lane inputs.
  673|      0|    return;
  674|      0|  }
  675|       |
  676|  2.57k|  if (profile == TargetProfile::kFastTelnet) {
  ------------------
  |  Branch (676:7): [True: 2.57k, False: 0]
  ------------------
  677|       |    // Set the scheme before general bounds so the TELNET-specific upload and
  678|       |    // PAUSE budgets are selected rather than event-driven compatibility ones.
  679|  2.57k|    scenario->set_scheme(curl::fuzzer::proto::SCHEME_TELNET);
  680|  2.57k|    RemoveApiOnlyShape(scenario);
  681|  2.57k|    RemoveNonTelnetShape(scenario);
  682|  2.57k|    RetainCheapTelnetOptions(scenario);
  683|  2.57k|    BoundScenarioShape(scenario);
  684|  2.57k|    BoundTelnetResponse(scenario->mutable_connection());
  685|  2.57k|    return;
  686|  2.57k|  }
  687|       |
  688|      0|  if (profile == TargetProfile::kFastHttp) {
  ------------------
  |  Branch (688:7): [True: 0, False: 0]
  ------------------
  689|      0|    scenario->set_scheme(curl::fuzzer::proto::SCHEME_HTTP);
  690|      0|    RemoveApiOnlyShape(scenario);
  691|      0|    RemoveTelnetOnlyShape(scenario);
  692|      0|    RemoveDeepHttpShape(scenario);
  693|      0|    RetainCheapHttpOptions(scenario);
  694|      0|    BoundScenarioShape(scenario);
  695|      0|    return;
  696|      0|  }
  697|       |
  698|      0|  if (profile == TargetProfile::kFastFtp) {
  ------------------
  |  Branch (698:7): [True: 0, False: 0]
  ------------------
  699|      0|    scenario->set_scheme(curl::fuzzer::proto::SCHEME_FTP);
  700|      0|    RemoveIgnoredFtpShape(scenario);
  701|      0|    RetainFtpOptions(scenario);
  702|      0|    CanonicalizeFtpOptionModes(scenario);
  703|      0|    BoundScenarioShape(scenario);
  704|      0|    CanonicalizeFtpAuthority(scenario);
  705|      0|    return;
  706|      0|  }
  707|       |
  708|      0|  if (profile == TargetProfile::kFastTftp) {
  ------------------
  |  Branch (708:7): [True: 0, False: 0]
  ------------------
  709|      0|    scenario->set_scheme(curl::fuzzer::proto::SCHEME_TFTP);
  710|      0|    RemoveIgnoredTftpShape(scenario);
  711|      0|    RetainTftpOptions(scenario);
  712|      0|    CanonicalizeTftpOptionModes(scenario);
  713|      0|    BoundScenarioShape(scenario);
  714|      0|    CanonicalizeTftpAuthority(scenario);
  715|      0|    return;
  716|      0|  }
  717|       |
  718|       |  // Select the lane's scheme before applying scheme-sensitive upload bounds.
  719|       |  // The scheme field is itself mutable, so bounding first could accidentally
  720|       |  // give an HTTP/WS case TELNET's smaller payload budget merely because that
  721|       |  // was the input's pre-policy value.
  722|      0|  switch (profile) {
  ------------------
  |  Branch (722:11): [True: 0, False: 0]
  ------------------
  723|      0|    case TargetProfile::kCompatibility:
  ------------------
  |  Branch (723:5): [True: 0, False: 0]
  ------------------
  724|      0|      return;
  725|      0|    case TargetProfile::kDeepHttp:
  ------------------
  |  Branch (725:5): [True: 0, False: 0]
  ------------------
  726|      0|      scenario->set_scheme(curl::fuzzer::proto::SCHEME_HTTP);
  727|      0|      break;
  728|      0|    case TargetProfile::kApi:
  ------------------
  |  Branch (728:5): [True: 0, False: 0]
  ------------------
  729|      0|      scenario->set_scheme(curl::fuzzer::proto::SCHEME_HTTP);
  730|      0|      break;
  731|      0|    case TargetProfile::kFastHttps:
  ------------------
  |  Branch (731:5): [True: 0, False: 0]
  ------------------
  732|      0|      scenario->set_scheme(curl::fuzzer::proto::SCHEME_HTTPS);
  733|      0|      break;
  734|      0|    case TargetProfile::kFastWebSocket:
  ------------------
  |  Branch (734:5): [True: 0, False: 0]
  ------------------
  735|      0|      scenario->set_scheme(curl::fuzzer::proto::SCHEME_WS);
  736|      0|      break;
  737|      0|    case TargetProfile::kFastSecureWebSocket:
  ------------------
  |  Branch (737:5): [True: 0, False: 0]
  ------------------
  738|      0|      scenario->set_scheme(curl::fuzzer::proto::SCHEME_WSS);
  739|      0|      break;
  740|      0|    case TargetProfile::kTiming:
  ------------------
  |  Branch (740:5): [True: 0, False: 0]
  ------------------
  741|      0|      scenario->set_scheme(PlaintextScheme(scenario->scheme()));
  742|      0|      break;
  743|      0|    case TargetProfile::kFastHttp:
  ------------------
  |  Branch (743:5): [True: 0, False: 0]
  ------------------
  744|      0|    case TargetProfile::kFastTelnet:
  ------------------
  |  Branch (744:5): [True: 0, False: 0]
  ------------------
  745|      0|    case TargetProfile::kFastFtp:
  ------------------
  |  Branch (745:5): [True: 0, False: 0]
  ------------------
  746|      0|    case TargetProfile::kFastTftp:
  ------------------
  |  Branch (746:5): [True: 0, False: 0]
  ------------------
  747|       |      // Protocol-specific early-return paths selected their scheme above.
  748|      0|      return;
  749|      0|  }
  750|       |
  751|       |  // TELNET's retained slist and synchronous pause have no observable, safe
  752|       |  // meaning in the fixed event-driven lanes. Clear them before walking the
  753|       |  // general shape so only the compatibility and TELNET targets can retain
  754|       |  // those values.
  755|      0|  RemoveTelnetOnlyShape(scenario);
  756|      0|  if (profile != TargetProfile::kApi) {
  ------------------
  |  Branch (756:7): [True: 0, False: 0]
  ------------------
  757|      0|    RemoveApiOnlyShape(scenario);
  758|      0|  }
  759|      0|  RemoveFileTransferOnlyOptions(scenario);
  760|      0|  BoundScenarioShape(scenario);
  761|       |
  762|      0|  switch (profile) {
  ------------------
  |  Branch (762:11): [True: 0, False: 0]
  ------------------
  763|      0|    case TargetProfile::kCompatibility:
  ------------------
  |  Branch (763:5): [True: 0, False: 0]
  ------------------
  764|      0|      return;
  765|      0|    case TargetProfile::kFastHttp:
  ------------------
  |  Branch (765:5): [True: 0, False: 0]
  ------------------
  766|       |      // Handled before the general bounds so discarded deep shapes are never
  767|       |      // traversed on the fast path.
  768|      0|      return;
  769|       |
  770|      0|    case TargetProfile::kDeepHttp:
  ------------------
  |  Branch (770:5): [True: 0, False: 0]
  ------------------
  771|      0|      ClearAllBackpressure(scenario);
  772|      0|      return;
  773|       |
  774|      0|    case TargetProfile::kApi:
  ------------------
  |  Branch (774:5): [True: 0, False: 0]
  ------------------
  775|      0|      ClearAllBackpressure(scenario);
  776|      0|      if (scenario->host_path().size() > scenario_limits::kMaxApiStringBytes) {
  ------------------
  |  Branch (776:11): [True: 0, False: 0]
  ------------------
  777|      0|        scenario->mutable_host_path()->resize(scenario_limits::kMaxApiStringBytes);
  778|      0|      }
  779|      0|      if (scenario->has_api_plan()) {
  ------------------
  |  Branch (779:11): [True: 0, False: 0]
  ------------------
  780|      0|        BoundApiPlanShape(scenario->mutable_api_plan());
  781|      0|      }
  782|      0|      return;
  783|       |
  784|      0|    case TargetProfile::kFastHttps:
  ------------------
  |  Branch (784:5): [True: 0, False: 0]
  ------------------
  785|      0|      ClearAllBackpressure(scenario);
  786|      0|      CanonicalizeTlsAuthority(scenario);
  787|      0|      return;
  788|       |
  789|      0|    case TargetProfile::kFastWebSocket:
  ------------------
  |  Branch (789:5): [True: 0, False: 0]
  ------------------
  790|      0|      ClearAllBackpressure(scenario);
  791|      0|      RemoveIgnoredWebSocketShape(scenario);
  792|      0|      return;
  793|       |
  794|      0|    case TargetProfile::kFastSecureWebSocket:
  ------------------
  |  Branch (794:5): [True: 0, False: 0]
  ------------------
  795|      0|      ClearAllBackpressure(scenario);
  796|      0|      RemoveIgnoredWebSocketShape(scenario);
  797|      0|      return;
  798|       |
  799|      0|    case TargetProfile::kFastTelnet:
  ------------------
  |  Branch (799:5): [True: 0, False: 0]
  ------------------
  800|       |      // Handled before the general bounds so its protocol-specific limits are
  801|       |      // selected from the start.
  802|      0|      return;
  803|       |
  804|      0|    case TargetProfile::kFastFtp:
  ------------------
  |  Branch (804:5): [True: 0, False: 0]
  ------------------
  805|      0|    case TargetProfile::kFastTftp:
  ------------------
  |  Branch (805:5): [True: 0, False: 0]
  ------------------
  806|       |      // Their peers consume narrower raw-script shapes, pruned before general
  807|       |      // bounds so ignored fields never tax these fast paths.
  808|      0|      return;
  809|       |
  810|      0|    case TargetProfile::kTiming: {
  ------------------
  |  Branch (810:5): [True: 0, False: 0]
  ------------------
  811|      0|      if (scenario->scheme() == curl::fuzzer::proto::SCHEME_WS) {
  ------------------
  |  Branch (811:11): [True: 0, False: 0]
  ------------------
  812|      0|        RemoveIgnoredWebSocketShape(scenario);
  813|      0|      }
  814|      0|      auto* backpressure = scenario->mutable_connection()->mutable_backpressure();
  815|      0|      if (backpressure->recv_buf_bytes() == 0) {
  ------------------
  |  Branch (815:11): [True: 0, False: 0]
  ------------------
  816|       |        // A drain limit alone cannot fill the default AF_UNIX buffer with the
  817|       |        // harness's bounded upload. Always tighten the socket so this lane
  818|       |        // represents real pressure, not merely selection of the timed loop.
  819|      0|        backpressure->set_recv_buf_bytes(kDefaultBackpressureBufferBytes);
  820|      0|      } else {
  821|      0|        backpressure->set_recv_buf_bytes(CanonicalizeNonZero(backpressure->recv_buf_bytes(),
  822|      0|                                                             kMinBackpressureBufferBytes, kMaxBackpressureBufferBytes));
  823|      0|      }
  824|      0|      backpressure->set_drain_limit(CanonicalizeNonZero(backpressure->drain_limit(), 1, kMaxDrainBytesPerIteration));
  825|      0|      for (auto& connection : *scenario->mutable_subsequent_connections()) {
  ------------------
  |  Branch (825:29): [True: 0, False: 0]
  ------------------
  826|      0|        CanonicalizeOptionalBackpressure(&connection);
  827|      0|      }
  828|      0|      return;
  829|      0|    }
  830|      0|  }
  831|      0|}
target_policy.cc:_ZN12proto_fuzzer12_GLOBAL__N_118RemoveApiOnlyShapeEPN4curl6fuzzer5proto8ScenarioE:
  557|  2.57k|void RemoveApiOnlyShape(curl::fuzzer::proto::Scenario* scenario) { scenario->clear_api_plan(); }
target_policy.cc:_ZN12proto_fuzzer12_GLOBAL__N_120RemoveNonTelnetShapeEPN4curl6fuzzer5proto8ScenarioE:
  533|  2.57k|void RemoveNonTelnetShape(curl::fuzzer::proto::Scenario* scenario) {
  534|  2.57k|  scenario->clear_subsequent_connections();
  535|  2.57k|  scenario->clear_request_headers();
  536|  2.57k|  scenario->clear_mime_post();
  537|       |
  538|  2.57k|  auto* connection = scenario->mutable_connection();
  539|  2.57k|  connection->clear_server_frames();
  540|  2.57k|  connection->clear_manual_probes();
  541|  2.57k|  connection->clear_backpressure();
  542|  2.57k|}
target_policy.cc:_ZN12proto_fuzzer12_GLOBAL__N_124RetainCheapTelnetOptionsEPN4curl6fuzzer5proto8ScenarioE:
  344|  2.57k|void RetainCheapTelnetOptions(curl::fuzzer::proto::Scenario* scenario) {
  345|  2.57k|  RetainMatchingOptions(scenario, &IsCheapTelnetOption);
  346|  2.57k|}
target_policy.cc:_ZN12proto_fuzzer12_GLOBAL__N_121RetainMatchingOptionsIPFbN4curl6fuzzer5proto12CurlOptionIdEEEEvPNS4_8ScenarioET_:
  302|  2.57k|void RetainMatchingOptions(curl::fuzzer::proto::Scenario* scenario, Predicate predicate) {
  303|  2.57k|  auto* options = scenario->mutable_options();
  304|  2.57k|  int retained = 0;
  305|  3.70k|  for (int index = 0; index < options->size(); ++index) {
  ------------------
  |  Branch (305:23): [True: 1.13k, False: 2.57k]
  ------------------
  306|  1.13k|    if (!predicate(options->Get(index).option_id())) {
  ------------------
  |  Branch (306:9): [True: 0, False: 1.13k]
  ------------------
  307|      0|      continue;
  308|      0|    }
  309|  1.13k|    if (retained != index) {
  ------------------
  |  Branch (309:9): [True: 0, False: 1.13k]
  ------------------
  310|      0|      options->SwapElements(retained, index);
  311|      0|    }
  312|  1.13k|    ++retained;
  313|  1.13k|  }
  314|  2.57k|  options->DeleteSubrange(retained, options->size() - retained);
  315|  2.57k|}
target_policy.cc:_ZN12proto_fuzzer12_GLOBAL__N_119IsCheapTelnetOptionEN4curl6fuzzer5proto12CurlOptionIdE:
  326|  1.13k|bool IsCheapTelnetOption(curl::fuzzer::proto::CurlOptionId option_id) {
  327|  1.13k|  switch (option_id) {
  328|     78|    case curl::fuzzer::proto::CURLOPT_CRLF:
  ------------------
  |  Branch (328:5): [True: 78, False: 1.05k]
  ------------------
  329|    548|    case curl::fuzzer::proto::CURLOPT_USERPWD:
  ------------------
  |  Branch (329:5): [True: 470, False: 665]
  ------------------
  330|    638|    case curl::fuzzer::proto::CURLOPT_USERNAME:
  ------------------
  |  Branch (330:5): [True: 90, False: 1.04k]
  ------------------
  331|    796|    case curl::fuzzer::proto::CURLOPT_PASSWORD:
  ------------------
  |  Branch (331:5): [True: 158, False: 977]
  ------------------
  332|  1.13k|    case curl::fuzzer::proto::CURLOPT_MAXFILESIZE_LARGE:
  ------------------
  |  Branch (332:5): [True: 339, False: 796]
  ------------------
  333|  1.13k|      return true;
  334|       |
  335|      0|    case curl::fuzzer::proto::CURL_OPTION_UNSPECIFIED:
  ------------------
  |  Branch (335:5): [True: 0, False: 1.13k]
  ------------------
  336|      0|    default:
  ------------------
  |  Branch (336:5): [True: 0, False: 1.13k]
  ------------------
  337|      0|      return false;
  338|  1.13k|  }
  339|  1.13k|}
target_policy.cc:_ZN12proto_fuzzer12_GLOBAL__N_118BoundScenarioShapeEPN4curl6fuzzer5proto8ScenarioE:
  231|  2.57k|void BoundScenarioShape(curl::fuzzer::proto::Scenario* scenario) {
  232|  2.57k|  TrimRepeated(scenario->mutable_options(), scenario_limits::kMaxOptions);
  233|  2.57k|  for (auto& option : *scenario->mutable_options()) {
  ------------------
  |  Branch (233:21): [True: 1.13k, False: 2.57k]
  ------------------
  234|  1.13k|    if (option.value_case() == curl::fuzzer::proto::SetOption::kStringValue) {
  ------------------
  |  Branch (234:9): [True: 718, False: 417]
  ------------------
  235|    718|      TrimMetadata(option.mutable_string_value());
  236|    718|    }
  237|  1.13k|  }
  238|       |
  239|  2.57k|  BoundHeaderValues(scenario->mutable_request_headers(), scenario_limits::kMaxRequestHeaders);
  240|  2.57k|  BoundStringValues(scenario->mutable_telnet_options(), scenario_limits::kMaxTelnetOptions,
  241|  2.57k|                    scenario_limits::kMaxTelnetOptionBytes);
  242|  2.57k|  if (scenario->has_mime_post()) {
  ------------------
  |  Branch (242:7): [True: 0, False: 2.57k]
  ------------------
  243|      0|    BoundMimeShape(scenario->mutable_mime_post());
  244|      0|  }
  245|  2.57k|  if (scenario->has_upload()) {
  ------------------
  |  Branch (245:7): [True: 249, False: 2.32k]
  ------------------
  246|    249|    const bool telnet = scenario->scheme() == curl::fuzzer::proto::SCHEME_TELNET;
  247|    249|    const std::size_t data_limit = telnet ? scenario_limits::kMaxTelnetUploadBytes : scenario_limits::kMaxUploadBytes;
  ------------------
  |  Branch (247:36): [True: 249, False: 0]
  ------------------
  248|    249|    const std::size_t read_step_limit =
  249|    249|        telnet ? scenario_limits::kMaxTelnetUploadReadSteps : scenario_limits::kMaxUploadReadSteps;
  ------------------
  |  Branch (249:9): [True: 249, False: 0]
  ------------------
  250|    249|    const std::size_t read_size_limit =
  251|    249|        telnet ? scenario_limits::kMaxTelnetUploadReadSize : scenario_limits::kMaxUploadReadSize;
  ------------------
  |  Branch (251:9): [True: 249, False: 0]
  ------------------
  252|    249|    BoundUploadShape(scenario->mutable_upload(), data_limit, read_step_limit, read_size_limit);
  253|    249|  }
  254|       |
  255|  2.57k|  BoundConnectionShape(scenario->mutable_connection());
  256|  2.57k|  TrimRepeated(scenario->mutable_subsequent_connections(), scenario_limits::kMaxConnections - 1);
  257|  2.57k|  for (auto& connection : *scenario->mutable_subsequent_connections()) {
  ------------------
  |  Branch (257:25): [True: 0, False: 2.57k]
  ------------------
  258|      0|    BoundConnectionShape(&connection);
  259|      0|  }
  260|  2.57k|}
target_policy.cc:_ZN12proto_fuzzer12_GLOBAL__N_112TrimRepeatedIN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto9SetOptionEEEEEvPT_m:
   38|  2.57k|void TrimRepeated(RepeatedField* field, std::size_t limit) {
   39|  2.57k|  const std::size_t size = static_cast<std::size_t>(field->size());
   40|  2.57k|  if (size > limit) {
  ------------------
  |  Branch (40:7): [True: 0, False: 2.57k]
  ------------------
   41|      0|    field->DeleteSubrange(static_cast<int>(limit), static_cast<int>(size - limit));
   42|      0|  }
   43|  2.57k|}
target_policy.cc:_ZN12proto_fuzzer12_GLOBAL__N_112TrimMetadataEPNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
   48|    718|void TrimMetadata(std::string* value) {
   49|    718|  if (value->size() > scenario_limits::kMaxMetadataBytes) {
  ------------------
  |  Branch (49:7): [True: 0, False: 718]
  ------------------
   50|      0|    value->resize(scenario_limits::kMaxMetadataBytes);
   51|      0|  }
   52|    718|}
target_policy.cc:_ZN12proto_fuzzer12_GLOBAL__N_117BoundHeaderValuesIN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEvPT_m:
  110|  2.57k|void BoundHeaderValues(RepeatedBytes* headers, std::size_t limit) {
  111|  2.57k|  BoundStringValues(headers, limit, scenario_limits::kMaxMetadataBytes);
  112|  2.57k|}
target_policy.cc:_ZN12proto_fuzzer12_GLOBAL__N_117BoundStringValuesIN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEvPT_mm:
  100|  5.14k|void BoundStringValues(RepeatedBytes* values, std::size_t count_limit, std::size_t value_limit) {
  101|  5.14k|  TrimRepeated(values, count_limit);
  102|  5.14k|  for (std::string& value : *values) {
  ------------------
  |  Branch (102:27): [True: 997, False: 5.14k]
  ------------------
  103|    997|    if (value.size() > value_limit) {
  ------------------
  |  Branch (103:9): [True: 0, False: 997]
  ------------------
  104|      0|      value.resize(value_limit);
  105|      0|    }
  106|    997|  }
  107|  5.14k|}
target_policy.cc:_ZN12proto_fuzzer12_GLOBAL__N_112TrimRepeatedIN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEvPT_m:
   38|  7.71k|void TrimRepeated(RepeatedField* field, std::size_t limit) {
   39|  7.71k|  const std::size_t size = static_cast<std::size_t>(field->size());
   40|  7.71k|  if (size > limit) {
  ------------------
  |  Branch (40:7): [True: 0, False: 7.71k]
  ------------------
   41|      0|    field->DeleteSubrange(static_cast<int>(limit), static_cast<int>(size - limit));
   42|      0|  }
   43|  7.71k|}
target_policy.cc:_ZN12proto_fuzzer12_GLOBAL__N_116BoundUploadShapeEPN4curl6fuzzer5proto12UploadScriptEmmm:
  178|    249|                      std::size_t read_size_limit) {
  179|    249|  if (upload->data().size() > data_limit) {
  ------------------
  |  Branch (179:7): [True: 0, False: 249]
  ------------------
  180|      0|    upload->mutable_data()->resize(data_limit);
  181|      0|  }
  182|       |  // RepeatedField<uint32_t> lacks RepeatedPtrField's DeleteSubrange helper;
  183|       |  // removing the ignored suffix from the end is constant-time per element and
  184|       |  // preserves the mutation-significant prefix exactly.
  185|    249|  while (static_cast<std::size_t>(upload->read_sizes_size()) > read_step_limit) {
  ------------------
  |  Branch (185:10): [True: 0, False: 249]
  ------------------
  186|      0|    upload->mutable_read_sizes()->RemoveLast();
  187|      0|  }
  188|    376|  for (int i = 0; i < upload->read_sizes_size(); ++i) {
  ------------------
  |  Branch (188:19): [True: 127, False: 249]
  ------------------
  189|    127|    if (upload->read_sizes(i) > read_size_limit) {
  ------------------
  |  Branch (189:9): [True: 0, False: 127]
  ------------------
  190|      0|      upload->set_read_sizes(i, static_cast<std::uint32_t>(read_size_limit));
  191|      0|    }
  192|    127|  }
  193|    249|}
target_policy.cc:_ZN12proto_fuzzer12_GLOBAL__N_120BoundConnectionShapeEPN4curl6fuzzer5proto10ConnectionE:
  117|  2.57k|void BoundConnectionShape(curl::fuzzer::proto::Connection* connection) {
  118|  2.57k|  TrimRepeated(connection->mutable_on_readable(), scenario_limits::kMaxResponseChunks);
  119|  2.57k|  const std::size_t raw_count = static_cast<std::size_t>(connection->on_readable_size());
  120|  2.57k|  TrimRepeated(connection->mutable_server_frames(), scenario_limits::kMaxResponseChunks - raw_count);
  121|  2.57k|}
target_policy.cc:_ZN12proto_fuzzer12_GLOBAL__N_112TrimRepeatedIN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto14WebSocketFrameEEEEEvPT_m:
   38|  2.57k|void TrimRepeated(RepeatedField* field, std::size_t limit) {
   39|  2.57k|  const std::size_t size = static_cast<std::size_t>(field->size());
   40|  2.57k|  if (size > limit) {
  ------------------
  |  Branch (40:7): [True: 0, False: 2.57k]
  ------------------
   41|      0|    field->DeleteSubrange(static_cast<int>(limit), static_cast<int>(size - limit));
   42|      0|  }
   43|  2.57k|}
target_policy.cc:_ZN12proto_fuzzer12_GLOBAL__N_112TrimRepeatedIN6google8protobuf16RepeatedPtrFieldIN4curl6fuzzer5proto10ConnectionEEEEEvPT_m:
   38|  2.57k|void TrimRepeated(RepeatedField* field, std::size_t limit) {
   39|  2.57k|  const std::size_t size = static_cast<std::size_t>(field->size());
   40|  2.57k|  if (size > limit) {
  ------------------
  |  Branch (40:7): [True: 0, False: 2.57k]
  ------------------
   41|      0|    field->DeleteSubrange(static_cast<int>(limit), static_cast<int>(size - limit));
   42|      0|  }
   43|  2.57k|}

_ZN12proto_fuzzer10RunModeForENS_13TargetProfileE:
   65|  2.57k|constexpr ScenarioRunMode RunModeFor(TargetProfile profile) {
   66|  2.57k|  switch (profile) {
  ------------------
  |  Branch (66:11): [True: 2.57k, False: 0]
  ------------------
   67|      0|    case TargetProfile::kFastHttp:
  ------------------
  |  Branch (67:5): [True: 0, False: 2.57k]
  ------------------
   68|  2.57k|    case TargetProfile::kFastTelnet:
  ------------------
  |  Branch (68:5): [True: 2.57k, False: 0]
  ------------------
   69|  2.57k|      return ScenarioRunMode::kFastProtocol;
   70|       |
   71|      0|    case TargetProfile::kApi:
  ------------------
  |  Branch (71:5): [True: 0, False: 2.57k]
  ------------------
   72|      0|      return ScenarioRunMode::kApiLifecycle;
   73|       |
   74|      0|    case TargetProfile::kFastHttps:
  ------------------
  |  Branch (74:5): [True: 0, False: 2.57k]
  ------------------
   75|      0|      return ScenarioRunMode::kTlsCoverage;
   76|       |
   77|      0|    case TargetProfile::kFastFtp:
  ------------------
  |  Branch (77:5): [True: 0, False: 2.57k]
  ------------------
   78|      0|      return ScenarioRunMode::kFtpCoverage;
   79|       |
   80|      0|    case TargetProfile::kFastTftp:
  ------------------
  |  Branch (80:5): [True: 0, False: 2.57k]
  ------------------
   81|      0|      return ScenarioRunMode::kTftpCoverage;
   82|       |
   83|      0|    case TargetProfile::kCompatibility:
  ------------------
  |  Branch (83:5): [True: 0, False: 2.57k]
  ------------------
   84|      0|    case TargetProfile::kDeepHttp:
  ------------------
  |  Branch (84:5): [True: 0, False: 2.57k]
  ------------------
   85|      0|    case TargetProfile::kFastWebSocket:
  ------------------
  |  Branch (85:5): [True: 0, False: 2.57k]
  ------------------
   86|      0|    case TargetProfile::kFastSecureWebSocket:
  ------------------
  |  Branch (86:5): [True: 0, False: 2.57k]
  ------------------
   87|      0|    case TargetProfile::kTiming:
  ------------------
  |  Branch (87:5): [True: 0, False: 2.57k]
  ------------------
   88|      0|      return ScenarioRunMode::kProtocolCoverage;
   89|  2.57k|  }
   90|      0|  return ScenarioRunMode::kProtocolCoverage;
   91|  2.57k|}

_ZN12proto_fuzzer16TelnetMockServerC2Ev:
   75|  2.53k|TelnetMockServer::TelnetMockServer() : scenario_(nullptr), socket_opened_(false) {}
_ZN12proto_fuzzer16TelnetMockServerD2Ev:
   78|  2.53k|TelnetMockServer::~TelnetMockServer() = default;
_ZN12proto_fuzzer16TelnetMockServer20ConfigureRequestDataEPNS_19ScenarioRequestDataE:
   80|  2.53k|void TelnetMockServer::ConfigureRequestData(ScenarioRequestData* request_data) {
   81|  2.53k|  if (request_data != nullptr) {
  ------------------
  |  Branch (81:7): [True: 2.53k, False: 0]
  ------------------
   82|  2.53k|    request_data->SetBeforeUploadReadCallback(&DrainBeforeUploadRead, this);
   83|  2.53k|  }
   84|  2.53k|}
_ZN12proto_fuzzer16TelnetMockServer21DrainBeforeUploadReadEPv:
   86|    946|void TelnetMockServer::DrainBeforeUploadRead(void* userdata) {
   87|    946|  auto* server = static_cast<TelnetMockServer*>(userdata);
   88|    946|  if (server != nullptr && server->connection_) {
  ------------------
  |  Branch (88:7): [True: 946, False: 0]
  |  Branch (88:28): [True: 946, False: 0]
  ------------------
   89|    946|    (void)server->connection_->DrainIncoming();
   90|    946|  }
   91|    946|}
_ZN12proto_fuzzer16TelnetMockServer16HandleOpenSocketE12curlsocktypeP13curl_sockaddr:
  105|  2.03k|curl_socket_t TelnetMockServer::HandleOpenSocket(curlsocktype purpose, struct curl_sockaddr* address) {
  106|  2.03k|  (void)purpose;
  107|  2.03k|  (void)address;
  108|  2.03k|  if (scenario_ == nullptr || socket_opened_) {
  ------------------
  |  Branch (108:7): [True: 0, False: 2.03k]
  |  Branch (108:31): [True: 0, False: 2.03k]
  ------------------
  109|      0|    return CURL_SOCKET_BAD;
  ------------------
  |  |  147|      0|#define CURL_SOCKET_BAD (-1)
  ------------------
  110|      0|  }
  111|  2.03k|  socket_opened_ = true;
  112|       |
  113|  2.03k|  connection_ = std::make_unique<MockConnection>();
  114|  2.03k|  if (!connection_->ok()) {
  ------------------
  |  Branch (114:7): [True: 0, False: 2.03k]
  ------------------
  115|      0|    connection_.reset();
  116|      0|    return CURL_SOCKET_BAD;
  ------------------
  |  |  147|      0|#define CURL_SOCKET_BAD (-1)
  ------------------
  117|      0|  }
  118|       |
  119|  2.03k|  if (!connection_->EnsureClientSendBufferSize(kMinClientSendBufferBytes)) {
  ------------------
  |  Branch (119:7): [True: 0, False: 2.03k]
  ------------------
  120|      0|    connection_.reset();
  121|      0|    return CURL_SOCKET_BAD;
  ------------------
  |  |  147|      0|#define CURL_SOCKET_BAD (-1)
  ------------------
  122|      0|  }
  123|       |
  124|  2.03k|  const auto write_bytes = [this](const std::string& bytes) {
  125|  2.03k|    return bytes.empty() || connection_->WriteAll(reinterpret_cast<const unsigned char*>(bytes.data()), bytes.size());
  126|  2.03k|  };
  127|       |
  128|       |  // Compatibility corpus entries bypass the LPM postprocessor. Copy only the
  129|       |  // raw prefix TELNET can consume, then normalize it so direct replay gets the
  130|       |  // same byte/control budgets without traversing HTTP/WS-only fields.
  131|  2.03k|  const auto& source = scenario_->connection();
  132|  2.03k|  curl::fuzzer::proto::Connection script;
  133|  2.03k|  CopyTelnetResponsePrefix(source, &script);
  134|  2.03k|  BoundTelnetResponse(&script);
  135|  2.03k|  bool complete = write_bytes(script.initial_response());
  136|  2.03k|  const std::size_t chunk_count = static_cast<std::size_t>(script.on_readable_size());
  137|  3.40k|  for (std::size_t index = 0; complete && index < chunk_count; ++index) {
  ------------------
  |  Branch (137:31): [True: 3.40k, False: 0]
  |  Branch (137:43): [True: 1.37k, False: 2.03k]
  ------------------
  138|  1.37k|    complete = write_bytes(script.on_readable(static_cast<int>(index)));
  139|  1.37k|  }
  140|  2.03k|  (void)complete;
  141|       |
  142|       |  // Do not apply BackpressureConfig here. curl's TELNET driver sends from
  143|       |  // inside its blocking protocol loop; tightening the socket would invalidate
  144|       |  // the minimum-capacity invariant used by the pre-read drain.
  145|  2.03k|  connection_->ShutdownWrite();
  146|  2.03k|  return connection_->take_client_fd();
  147|  2.03k|}
_ZN12proto_fuzzer16TelnetMockServer7RunLoopEPvS1_RKN4curl6fuzzer5proto8ScenarioE:
  156|  2.53k|void TelnetMockServer::RunLoop(CURLM* multi, CURL* easy, const curl::fuzzer::proto::Scenario& scenario) {
  157|  2.53k|  (void)easy;
  158|  2.53k|  scenario_ = &scenario;
  159|  2.53k|  socket_opened_ = false;
  160|  2.53k|  connection_.reset();
  161|       |
  162|  2.53k|  int still_running = 1;
  163|  5.07k|  for (int iteration = 0; still_running && iteration < kMaxIdleIterations; ++iteration) {
  ------------------
  |  Branch (163:27): [True: 2.53k, False: 2.53k]
  |  Branch (163:44): [True: 2.53k, False: 0]
  ------------------
  164|  2.53k|    const CURLMcode result = curl_multi_perform(multi, &still_running);
  165|  2.53k|    if (result != CURLM_OK) {
  ------------------
  |  Branch (165:9): [True: 0, False: 2.53k]
  ------------------
  166|      0|      break;
  167|      0|    }
  168|  2.53k|    if (connection_) {
  ------------------
  |  Branch (168:9): [True: 2.03k, False: 504]
  ------------------
  169|  2.03k|      (void)connection_->DrainIncoming();
  170|  2.03k|    }
  171|  2.53k|  }
  172|       |
  173|  2.53k|  scenario_ = nullptr;
  174|  2.53k|}
telnet_mock_server.cc:_ZN12proto_fuzzer12_GLOBAL__N_124CopyTelnetResponsePrefixERKN4curl6fuzzer5proto10ConnectionEPS4_:
   49|  2.03k|                              curl::fuzzer::proto::Connection* destination) {
   50|  2.03k|  std::size_t bytes_left = scenario_limits::kMaxTelnetResponseBytes;
   51|  2.03k|  const auto copy_fragment = [&bytes_left](const std::string& fragment, std::string* output) {
   52|  2.03k|    const std::size_t retained = std::min(fragment.size(), bytes_left);
   53|  2.03k|    output->assign(fragment.data(), retained);
   54|  2.03k|    bytes_left -= retained;
   55|  2.03k|    return retained == fragment.size();
   56|  2.03k|  };
   57|       |
   58|  2.03k|  if (!copy_fragment(source.initial_response(), destination->mutable_initial_response())) {
  ------------------
  |  Branch (58:7): [True: 0, False: 2.03k]
  ------------------
   59|      0|    return;
   60|      0|  }
   61|       |
   62|  2.03k|  const std::size_t chunk_count =
   63|  2.03k|      std::min<std::size_t>(scenario_limits::kMaxTelnetResponseChunks, source.on_readable_size());
   64|  3.40k|  for (std::size_t index = 0; index < chunk_count && bytes_left != 0; ++index) {
  ------------------
  |  Branch (64:31): [True: 1.37k, False: 2.03k]
  |  Branch (64:54): [True: 1.37k, False: 0]
  ------------------
   65|  1.37k|    if (!copy_fragment(source.on_readable(static_cast<int>(index)), destination->add_on_readable())) {
  ------------------
  |  Branch (65:9): [True: 0, False: 1.37k]
  ------------------
   66|      0|      break;
   67|      0|    }
   68|  1.37k|  }
   69|  2.03k|}
telnet_mock_server.cc:_ZZN12proto_fuzzer12_GLOBAL__N_124CopyTelnetResponsePrefixERKN4curl6fuzzer5proto10ConnectionEPS4_ENK3$_0clERKNSt3__112basic_stringIcNS9_11char_traitsIcEENS9_9allocatorIcEEEEPSF_:
   51|  3.40k|  const auto copy_fragment = [&bytes_left](const std::string& fragment, std::string* output) {
   52|  3.40k|    const std::size_t retained = std::min(fragment.size(), bytes_left);
   53|  3.40k|    output->assign(fragment.data(), retained);
   54|  3.40k|    bytes_left -= retained;
   55|  3.40k|    return retained == fragment.size();
   56|  3.40k|  };
telnet_mock_server.cc:_ZZN12proto_fuzzer16TelnetMockServer16HandleOpenSocketE12curlsocktypeP13curl_sockaddrENK3$_0clERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE:
  124|  3.40k|  const auto write_bytes = [this](const std::string& bytes) {
  125|  3.40k|    return bytes.empty() || connection_->WriteAll(reinterpret_cast<const unsigned char*>(bytes.data()), bytes.size());
  ------------------
  |  Branch (125:12): [True: 1.33k, False: 2.07k]
  |  Branch (125:29): [True: 2.07k, False: 0]
  ------------------
  126|  3.40k|  };

_ZN12proto_fuzzer19BoundTelnetResponseEPN4curl6fuzzer5proto10ConnectionE:
   53|  4.60k|void BoundTelnetResponse(curl::fuzzer::proto::Connection* connection) {
   54|  4.60k|  if (connection == nullptr) {
  ------------------
  |  Branch (54:7): [True: 0, False: 4.60k]
  ------------------
   55|      0|    return;
   56|      0|  }
   57|       |
   58|  4.60k|  TrimRepeated(connection->mutable_on_readable(), scenario_limits::kMaxTelnetResponseChunks);
   59|       |
   60|  4.60k|  std::size_t bytes_left = scenario_limits::kMaxTelnetResponseBytes;
   61|  4.60k|  std::size_t controls_left = scenario_limits::kMaxTelnetControlBytes;
   62|  4.60k|  if (!BoundTelnetFragment(connection->mutable_initial_response(), &bytes_left, &controls_left)) {
  ------------------
  |  Branch (62:7): [True: 0, False: 4.60k]
  ------------------
   63|      0|    connection->clear_on_readable();
   64|      0|    return;
   65|      0|  }
   66|       |
   67|  4.60k|  int retained_chunks = 0;
   68|  7.40k|  for (; retained_chunks < connection->on_readable_size(); ++retained_chunks) {
  ------------------
  |  Branch (68:10): [True: 2.80k, False: 4.60k]
  ------------------
   69|  2.80k|    std::string* fragment = connection->mutable_on_readable(retained_chunks);
   70|  2.80k|    if (!BoundTelnetFragment(fragment, &bytes_left, &controls_left)) {
  ------------------
  |  Branch (70:9): [True: 0, False: 2.80k]
  ------------------
   71|       |      // A genuinely partial prefix is observable and worth retaining. When a
   72|       |      // previous fragment exhausted the budget, however, keeping the empty
   73|       |      // truncation would give LPM a field curl can never distinguish.
   74|      0|      if (!fragment->empty()) {
  ------------------
  |  Branch (74:11): [True: 0, False: 0]
  ------------------
   75|      0|        ++retained_chunks;
   76|      0|      }
   77|      0|      break;
   78|      0|    }
   79|  2.80k|  }
   80|       |
   81|  4.60k|  auto* chunks = connection->mutable_on_readable();
   82|  4.60k|  if (retained_chunks < chunks->size()) {
  ------------------
  |  Branch (82:7): [True: 0, False: 4.60k]
  ------------------
   83|      0|    chunks->DeleteSubrange(retained_chunks, chunks->size() - retained_chunks);
   84|      0|  }
   85|  4.60k|}
telnet_scenario.cc:_ZN12proto_fuzzer12_GLOBAL__N_119BoundTelnetFragmentEPNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEPmS9_:
   33|  7.40k|bool BoundTelnetFragment(std::string* fragment, std::size_t* bytes_left, std::size_t* controls_left) {
   34|  7.40k|  std::size_t retained = 0;
   35|   965k|  while (retained < fragment->size() && retained < *bytes_left) {
  ------------------
  |  Branch (35:10): [True: 957k, False: 7.40k]
  |  Branch (35:41): [True: 957k, False: 0]
  ------------------
   36|   957k|    if (static_cast<unsigned char>((*fragment)[retained]) == 0xff) {
  ------------------
  |  Branch (36:9): [True: 10.5k, False: 947k]
  ------------------
   37|  10.5k|      if (*controls_left == 0) {
  ------------------
  |  Branch (37:11): [True: 0, False: 10.5k]
  ------------------
   38|      0|        break;
   39|      0|      }
   40|  10.5k|      --*controls_left;
   41|  10.5k|    }
   42|   957k|    ++retained;
   43|   957k|  }
   44|       |
   45|  7.40k|  const bool complete = retained == fragment->size();
   46|  7.40k|  fragment->resize(retained);
   47|  7.40k|  *bytes_left -= retained;
   48|  7.40k|  return complete;
   49|  7.40k|}
telnet_scenario.cc:_ZN12proto_fuzzer12_GLOBAL__N_112TrimRepeatedIN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEvPT_m:
   23|  4.60k|void TrimRepeated(RepeatedField* field, std::size_t limit) {
   24|  4.60k|  const std::size_t size = static_cast<std::size_t>(field->size());
   25|  4.60k|  if (size > limit) {
  ------------------
  |  Branch (25:7): [True: 0, False: 4.60k]
  ------------------
   26|      0|    field->DeleteSubrange(static_cast<int>(limit), static_cast<int>(size - limit));
   27|      0|  }
   28|  4.60k|}

