_Z19SanityCheckPointersPKcmPK17GumboInternalNodei:
    5|   430k|int SanityCheckPointers(const char* input, size_t input_length, const GumboNode* node, int depth) {
    6|   430k|  if (node->type == GUMBO_NODE_DOCUMENT || depth > 400) {
  ------------------
  |  Branch (6:7): [True: 0, False: 430k]
  |  Branch (6:44): [True: 0, False: 430k]
  ------------------
    7|      0|    return -1;
    8|      0|  }
    9|   430k|  if (node->type == GUMBO_NODE_ELEMENT) {
  ------------------
  |  Branch (9:7): [True: 295k, False: 134k]
  ------------------
   10|   295k|    const GumboElement* element = &node->v.element;
   11|   295k|    const GumboVector* attributes = &element->attributes;
   12|       |
   13|   342k|    for (unsigned int i = 0; i < attributes->length; ++i) {
  ------------------
  |  Branch (13:30): [True: 46.5k, False: 295k]
  ------------------
   14|  46.5k|      const GumboAttribute* attribute = static_cast<const GumboAttribute*>(attributes->data[i]);
   15|  46.5k|      if (!attribute)
  ------------------
  |  Branch (15:11): [True: 0, False: 46.5k]
  ------------------
   16|      0|      {
   17|      0|        return -1;
   18|      0|      }
   19|  46.5k|    }
   20|   295k|    const GumboVector* children = &element->children;
   21|   699k|    for (unsigned int i = 0; i < children->length; ++i) {
  ------------------
  |  Branch (21:30): [True: 403k, False: 295k]
  ------------------
   22|   403k|      const GumboNode* child = static_cast<const GumboNode*>(children->data[i]);
   23|   403k|      if (!child)
  ------------------
  |  Branch (23:11): [True: 0, False: 403k]
  ------------------
   24|      0|      {
   25|      0|        return -1;
   26|      0|      }
   27|   403k|      SanityCheckPointers(input, input_length, child, depth + 1);
   28|   403k|    }
   29|   295k|  } else {
   30|   134k|    const GumboText* text = &node->v.text;
   31|   134k|    if (!text)
  ------------------
  |  Branch (31:9): [True: 0, False: 134k]
  ------------------
   32|      0|    {
   33|      0|      return -1;
   34|      0|    }
   35|   134k|  }
   36|       |
   37|   430k|  return 0;
   38|   430k|}
_Z12FormatErrorsPKcmPK19GumboInternalOutput:
   48|  26.7k|void FormatErrors(const char* input, size_t input_length, const GumboOutput* output) {
   49|   288k|  for (unsigned int i = 0; i < output->errors.length && i < MAX_FORMATTED_ERRORS; ++i) {
  ------------------
  |  |   46|   273k|#define MAX_FORMATTED_ERRORS 16
  ------------------
  |  Branch (49:28): [True: 273k, False: 15.7k]
  |  Branch (49:57): [True: 261k, False: 11.0k]
  ------------------
   50|   261k|    const GumboError* error = static_cast<const GumboError*>(output->errors.data[i]);
   51|   261k|    gumbo_error_position(error);
   52|   261k|    gumbo_error_code(error);
   53|       |
   54|   261k|    char* message;
   55|   261k|    gumbo_caret_diagnostic_to_string(error, input, input_length, &message);
   56|   261k|    free(message);
   57|   261k|  }
   58|  26.7k|}
LLVMFuzzerTestOneInput:
   60|  26.7k|extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
   61|       |  /* arbitrary upper size limit to avoid "out-of-memory in parse_fuzzer" reports */
   62|  26.7k|  if (size < 10 || size > 25000) {
  ------------------
  |  Branch (62:7): [True: 6, False: 26.7k]
  |  Branch (62:20): [True: 6, False: 26.7k]
  ------------------
   63|     12|    return 0;
   64|     12|  }
   65|       |
   66|  26.7k|  GumboOptions options = kGumboDefaultOptions;
   67|  26.7k|  GumboOutput* output = gumbo_parse_with_options(&options, (char*)data, size);
   68|       |
   69|  26.7k|  int result = SanityCheckPointers((char*)data, size, output->root, 0);
   70|  26.7k|  FormatErrors((char*)data, size, output);
   71|       |
   72|  26.7k|  gumbo_destroy_output(output);
   73|       |
   74|  26.7k|  if (result < 0) {
  ------------------
  |  Branch (74:7): [True: 0, False: 26.7k]
  ------------------
   75|      0|    return -1;
   76|      0|  }
   77|       |
   78|  26.7k|  return 0;
   79|  26.7k|}

gumbo_ascii_strcasecmp:
    3|   714k|int gumbo_ascii_strcasecmp(const char *s1, const char *s2) {
    4|   714k|  int c1, c2;
    5|  1.02M|  while (*s1 && *s2) {
  ------------------
  |  Branch (5:10): [True: 989k, False: 40.1k]
  |  Branch (5:17): [True: 983k, False: 5.53k]
  ------------------
    6|   983k|    c1 = (int)(unsigned char) gumbo_ascii_tolower(*s1);
    7|   983k|    c2 = (int)(unsigned char) gumbo_ascii_tolower(*s2);
    8|   983k|    if (c1 != c2) {
  ------------------
  |  Branch (8:9): [True: 668k, False: 315k]
  ------------------
    9|   668k|      return (c1 - c2);
   10|   668k|    }
   11|   315k|    s1++;
   12|   315k|    s2++;
   13|   315k|  }
   14|  45.6k|  return (((int)(unsigned char) *s1) - ((int)(unsigned char) *s2));
   15|   714k|}
gumbo_ascii_strncasecmp:
   17|   319k|int gumbo_ascii_strncasecmp(const char *s1, const char *s2, size_t n) {
   18|   319k|  int c1, c2;
   19|  1.41M|  while (n && *s1 && *s2) {
  ------------------
  |  Branch (19:10): [True: 1.12M, False: 288k]
  |  Branch (19:15): [True: 1.12M, False: 1.02k]
  |  Branch (19:22): [True: 1.12M, False: 0]
  ------------------
   20|  1.12M|    n -= 1;
   21|  1.12M|    c1 = (int)(unsigned char) gumbo_ascii_tolower(*s1);
   22|  1.12M|    c2 = (int)(unsigned char) gumbo_ascii_tolower(*s2);
   23|  1.12M|    if (c1 != c2) {
  ------------------
  |  Branch (23:9): [True: 30.3k, False: 1.09M]
  ------------------
   24|  30.3k|      return (c1 - c2);
   25|  30.3k|    }
   26|  1.09M|    s1++;
   27|  1.09M|    s2++;
   28|  1.09M|  }
   29|   289k|  if (n) {
  ------------------
  |  Branch (29:7): [True: 1.02k, False: 288k]
  ------------------
   30|  1.02k|    return (((int)(unsigned char) *s1) - ((int)(unsigned char) *s2));
   31|  1.02k|  }
   32|   288k|  return 0;
   33|   289k|}

error.c:gumbo_ascii_isascii:
   32|  17.8k|static inline int gumbo_ascii_isascii(int c) {
   33|  17.8k|  return ((unsigned int)c & ~0x7fu) == 0;
   34|  17.8k|}
error.c:gumbo_ascii_iscntrl:
   38|  8.04k|static inline int gumbo_ascii_iscntrl(int c) {
   39|  8.04k|  return gumbo_ascii_isascii(c)
  ------------------
  |  Branch (39:10): [True: 8.04k, False: 0]
  ------------------
   40|  8.04k|         && (_gumbo_ascii_table[c] & GUMBO_ASCII_CNTRL);
  ------------------
  |  |   18|  8.04k|#define GUMBO_ASCII_CNTRL 1
  ------------------
  |  Branch (40:13): [True: 1.21k, False: 6.83k]
  ------------------
   41|  8.04k|}
token_buffer.c:gumbo_ascii_isspace:
   45|   266k|static inline int gumbo_ascii_isspace(int c) {
   46|   266k|  return gumbo_ascii_isascii(c)
  ------------------
  |  Branch (46:10): [True: 175k, False: 91.3k]
  ------------------
   47|   175k|         && (_gumbo_ascii_table[c] & GUMBO_ASCII_SPACE);
  ------------------
  |  |   19|   175k|#define GUMBO_ASCII_SPACE 2
  ------------------
  |  Branch (47:13): [True: 2.04k, False: 173k]
  ------------------
   48|   266k|}
token_buffer.c:gumbo_ascii_isascii:
   32|   266k|static inline int gumbo_ascii_isascii(int c) {
   33|   266k|  return ((unsigned int)c & ~0x7fu) == 0;
   34|   266k|}
tokenizer.c:gumbo_ascii_isalpha:
   62|  1.29M|static inline int gumbo_ascii_isalpha(int c) {
   63|  1.29M|  return gumbo_ascii_isascii(c)
  ------------------
  |  Branch (63:10): [True: 1.27M, False: 19.6k]
  ------------------
   64|  1.27M|         && (_gumbo_ascii_table[c] & GUMBO_ASCII_ALPHA);
  ------------------
  |  |   26|  1.27M|#define GUMBO_ASCII_ALPHA (GUMBO_ASCII_UPPER_ALPHA | GUMBO_ASCII_LOWER_ALPHA)
  |  |  ------------------
  |  |  |  |   23|  1.27M|#define GUMBO_ASCII_UPPER_ALPHA 32
  |  |  ------------------
  |  |               #define GUMBO_ASCII_ALPHA (GUMBO_ASCII_UPPER_ALPHA | GUMBO_ASCII_LOWER_ALPHA)
  |  |  ------------------
  |  |  |  |   24|  1.27M|#define GUMBO_ASCII_LOWER_ALPHA 64
  |  |  ------------------
  ------------------
  |  Branch (64:13): [True: 1.18M, False: 92.6k]
  ------------------
   65|  1.29M|}
tokenizer.c:gumbo_ascii_isascii:
   32|  4.15M|static inline int gumbo_ascii_isascii(int c) {
   33|  4.15M|  return ((unsigned int)c & ~0x7fu) == 0;
   34|  4.15M|}
tokenizer.c:gumbo_ascii_tolower:
  104|  2.50M|static inline int gumbo_ascii_tolower(int c) {
  105|  2.50M|  if (gumbo_ascii_isupper(c)) {
  ------------------
  |  Branch (105:7): [True: 239k, False: 2.26M]
  ------------------
  106|   239k|    return c | 32;
  107|   239k|  }
  108|  2.26M|  return c;
  109|  2.50M|}
tokenizer.c:gumbo_ascii_isupper:
   86|  2.50M|static inline int gumbo_ascii_isupper(int c) {
   87|  2.50M|  return ((unsigned)(c) - 'A') < 26;
   88|  2.50M|}
tokenizer.c:gumbo_ascii_isalnum:
   97|  2.82M|static inline int gumbo_ascii_isalnum(int c) {
   98|  2.82M|  return gumbo_ascii_isascii(c)
  ------------------
  |  Branch (98:10): [True: 2.70M, False: 119k]
  ------------------
   99|  2.70M|         && (_gumbo_ascii_table[c] & GUMBO_ASCII_ALNUM);
  ------------------
  |  |   27|  2.70M|#define GUMBO_ASCII_ALNUM (GUMBO_ASCII_DIGIT | GUMBO_ASCII_ALPHA)
  |  |  ------------------
  |  |  |  |   20|  2.70M|#define GUMBO_ASCII_DIGIT 4
  |  |  ------------------
  |  |               #define GUMBO_ASCII_ALNUM (GUMBO_ASCII_DIGIT | GUMBO_ASCII_ALPHA)
  |  |  ------------------
  |  |  |  |   26|  2.70M|#define GUMBO_ASCII_ALPHA (GUMBO_ASCII_UPPER_ALPHA | GUMBO_ASCII_LOWER_ALPHA)
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|  2.70M|#define GUMBO_ASCII_UPPER_ALPHA 32
  |  |  |  |  ------------------
  |  |  |  |               #define GUMBO_ASCII_ALPHA (GUMBO_ASCII_UPPER_ALPHA | GUMBO_ASCII_LOWER_ALPHA)
  |  |  |  |  ------------------
  |  |  |  |  |  |   24|  2.70M|#define GUMBO_ASCII_LOWER_ALPHA 64
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (99:13): [True: 2.25M, False: 451k]
  ------------------
  100|  2.82M|}
tokenizer.c:gumbo_ascii_isxdigit:
   68|  5.55k|static inline int gumbo_ascii_isxdigit(int c) {
   69|  5.55k|  return gumbo_ascii_isascii(c)
  ------------------
  |  Branch (69:10): [True: 5.27k, False: 278]
  ------------------
   70|  5.27k|         && (_gumbo_ascii_table[c] & GUMBO_ASCII_XDIGIT);
  ------------------
  |  |   25|  5.27k|#define GUMBO_ASCII_XDIGIT (GUMBO_ASCII_LOWER_XDIGIT | GUMBO_ASCII_UPPER_XDIGIT)
  |  |  ------------------
  |  |  |  |   22|  5.27k|#define GUMBO_ASCII_LOWER_XDIGIT 16
  |  |  ------------------
  |  |               #define GUMBO_ASCII_XDIGIT (GUMBO_ASCII_LOWER_XDIGIT | GUMBO_ASCII_UPPER_XDIGIT)
  |  |  ------------------
  |  |  |  |   21|  5.27k|#define GUMBO_ASCII_UPPER_XDIGIT 8
  |  |  ------------------
  ------------------
  |  Branch (70:13): [True: 4.84k, False: 432]
  ------------------
   71|  5.55k|}
tokenizer.c:gumbo_ascii_isdigit:
   57|  39.4k|static inline int gumbo_ascii_isdigit(int c) {
   58|  39.4k|  return c >= 0x30 && c <= 0x39;
  ------------------
  |  Branch (58:10): [True: 32.9k, False: 6.46k]
  |  Branch (58:23): [True: 15.3k, False: 17.6k]
  ------------------
   59|  39.4k|}
tokenizer.c:gumbo_ascii_isupper_xdigit:
   74|  16.9k|static inline int gumbo_ascii_isupper_xdigit(int c) {
   75|  16.9k|  return gumbo_ascii_isascii(c)
  ------------------
  |  Branch (75:10): [True: 16.2k, False: 751]
  ------------------
   76|  16.2k|         && (_gumbo_ascii_table[c] & GUMBO_ASCII_UPPER_XDIGIT);
  ------------------
  |  |   21|  16.2k|#define GUMBO_ASCII_UPPER_XDIGIT 8
  ------------------
  |  Branch (76:13): [True: 7.61k, False: 8.59k]
  ------------------
   77|  16.9k|}
tokenizer.c:gumbo_ascii_islower_xdigit:
   80|  9.34k|static inline int gumbo_ascii_islower_xdigit(int c) {
   81|  9.34k|  return gumbo_ascii_isascii(c)
  ------------------
  |  Branch (81:10): [True: 8.59k, False: 751]
  ------------------
   82|  8.59k|         && (_gumbo_ascii_table[c] & GUMBO_ASCII_LOWER_XDIGIT);
  ------------------
  |  |   22|  8.59k|#define GUMBO_ASCII_LOWER_XDIGIT 16
  ------------------
  |  Branch (82:13): [True: 4.49k, False: 4.09k]
  ------------------
   83|  9.34k|}
tokenizer.c:gumbo_ascii_isspace:
   45|  3.64k|static inline int gumbo_ascii_isspace(int c) {
   46|  3.64k|  return gumbo_ascii_isascii(c)
  ------------------
  |  Branch (46:10): [True: 2.29k, False: 1.35k]
  ------------------
   47|  2.29k|         && (_gumbo_ascii_table[c] & GUMBO_ASCII_SPACE);
  ------------------
  |  |   19|  2.29k|#define GUMBO_ASCII_SPACE 2
  ------------------
  |  Branch (47:13): [True: 994, False: 1.29k]
  ------------------
   48|  3.64k|}
utf8.c:gumbo_ascii_isspace:
   45|  1.61M|static inline int gumbo_ascii_isspace(int c) {
   46|  1.61M|  return gumbo_ascii_isascii(c)
  ------------------
  |  Branch (46:10): [True: 1.61M, False: 893]
  ------------------
   47|  1.61M|         && (_gumbo_ascii_table[c] & GUMBO_ASCII_SPACE);
  ------------------
  |  |   19|  1.61M|#define GUMBO_ASCII_SPACE 2
  ------------------
  |  Branch (47:13): [True: 265k, False: 1.34M]
  ------------------
   48|  1.61M|}
utf8.c:gumbo_ascii_isascii:
   32|  1.61M|static inline int gumbo_ascii_isascii(int c) {
   33|  1.61M|  return ((unsigned int)c & ~0x7fu) == 0;
   34|  1.61M|}
ascii.c:gumbo_ascii_tolower:
  104|  4.21M|static inline int gumbo_ascii_tolower(int c) {
  105|  4.21M|  if (gumbo_ascii_isupper(c)) {
  ------------------
  |  Branch (105:7): [True: 505k, False: 3.71M]
  ------------------
  106|   505k|    return c | 32;
  107|   505k|  }
  108|  3.71M|  return c;
  109|  4.21M|}
ascii.c:gumbo_ascii_isupper:
   86|  4.21M|static inline int gumbo_ascii_isupper(int c) {
   87|  4.21M|  return ((unsigned)(c) - 'A') < 26;
   88|  4.21M|}

gumbo_get_attribute:
   28|   115k|) {
   29|   748k|  for (unsigned int i = 0; i < attributes->length; ++i) {
  ------------------
  |  Branch (29:28): [True: 662k, False: 85.6k]
  ------------------
   30|   662k|    GumboAttribute* attr = attributes->data[i];
   31|   662k|    if (!gumbo_ascii_strcasecmp(attr->name, name)) {
  ------------------
  |  Branch (31:9): [True: 29.5k, False: 632k]
  ------------------
   32|  29.5k|      return attr;
   33|  29.5k|    }
   34|   662k|  }
   35|  85.6k|  return NULL;
   36|   115k|}
gumbo_destroy_attribute:
   38|  83.4k|void gumbo_destroy_attribute(GumboAttribute* attribute) {
   39|  83.4k|  gumbo_free((void*) attribute->name);
   40|  83.4k|  gumbo_free((void*) attribute->value);
   41|  83.4k|  gumbo_free((void*) attribute);
   42|  83.4k|}

match_named_char_ref:
13178|   885k|) {
13179|   885k|  int cs;
13180|   885k|  int act;
13181|   885k|  const char *p = str;
13182|   885k|  const char *pe = str + size;
13183|   885k|  const char *const eof = pe;
13184|   885k|  const char *ts;
13185|   885k|  const char *te;
13186|   885k|  output[0] = output[1] = kGumboNoChar;
  ------------------
  |  |   11|   885k|#define kGumboNoChar (-1)
  ------------------
13187|       |  
13188|   885k|#line 13189 "src/char_ref.c"
13189|   885k|	{
13190|   885k|	cs = start;
13191|   885k|	ts = 0;
13192|   885k|	te = 0;
13193|   885k|	act = 0;
13194|   885k|	}
13195|       |
13196|   885k|#line 2149 "src/char_ref.rl"
13197|       |  
13198|   885k|#line 13199 "src/char_ref.c"
13199|   885k|	{
13200|   885k|	int _slen;
13201|   885k|	int _trans;
13202|   885k|	const char *_keys;
13203|   885k|	const short *_inds;
13204|   885k|	if ( p == pe )
  ------------------
  |  Branch (13204:7): [True: 0, False: 885k]
  ------------------
13205|      0|		goto _test_eof;
13206|   885k|	if ( cs == 0 )
  ------------------
  |  Branch (13206:7): [True: 0, False: 885k]
  ------------------
13207|      0|		goto _out;
13208|  4.26M|_resume:
13209|  4.26M|	switch ( _from_state_actions[cs] ) {
  ------------------
  |  Branch (13209:11): [True: 885k, False: 3.37M]
  ------------------
13210|   885k|	case 2030:
  ------------------
  |  Branch (13210:2): [True: 885k, False: 3.37M]
  ------------------
13211|   885k|#line 1 "NONE"
13212|   885k|	{ts = p;}
13213|   885k|	break;
13214|  4.26M|#line 13215 "src/char_ref.c"
13215|  4.26M|	}
13216|       |
13217|  4.26M|	_keys = _trans_keys + (cs<<1);
13218|  4.26M|	_inds = _indicies + _index_offsets[cs];
13219|       |
13220|  4.26M|	_slen = _key_spans[cs];
13221|  4.26M|	_trans = _inds[ _slen > 0 && _keys[0] <=(*p) &&
  ------------------
  |  Branch (13221:18): [True: 4.26M, False: 0]
  |  Branch (13221:31): [True: 3.97M, False: 283k]
  ------------------
13222|  3.97M|		(*p) <= _keys[1] ?
  ------------------
  |  Branch (13222:3): [True: 3.90M, False: 70.8k]
  ------------------
13223|  3.90M|		(*p) - _keys[0] : _slen ];
13224|       |
13225|  4.26M|_eof_trans:
13226|  4.26M|	cs = _trans_targs[_trans];
13227|       |
13228|  4.26M|	if ( _trans_actions[_trans] == 0 )
  ------------------
  |  Branch (13228:7): [True: 3.72M, False: 536k]
  ------------------
13229|  3.72M|		goto _again;
13230|       |
13231|   536k|	switch ( _trans_actions[_trans] ) {
  ------------------
  |  Branch (13231:11): [True: 536k, False: 0]
  ------------------
13232|  23.1k|	case 745:
  ------------------
  |  Branch (13232:2): [True: 23.1k, False: 513k]
  ------------------
13233|  23.1k|#line 1 "NONE"
13234|  23.1k|	{te = p+1;}
13235|  23.1k|	break;
13236|    316|	case 2032:
  ------------------
  |  Branch (13236:2): [True: 316, False: 536k]
  ------------------
13237|    316|#line 6 "src/char_ref.rl"
13238|    316|	{te = p+1;{output[0]=0xc6; {p++; goto _out; }}}
13239|      0|	break;
13240|    332|	case 2034:
  ------------------
  |  Branch (13240:2): [True: 332, False: 535k]
  ------------------
13241|    332|#line 7 "src/char_ref.rl"
13242|    332|	{te = p+1;{output[0]=0x26; {p++; goto _out; }}}
13243|      0|	break;
13244|    195|	case 2036:
  ------------------
  |  Branch (13244:2): [True: 195, False: 536k]
  ------------------
13245|    195|#line 8 "src/char_ref.rl"
13246|    195|	{te = p+1;{output[0]=0xc1; {p++; goto _out; }}}
13247|      0|	break;
13248|    197|	case 1:
  ------------------
  |  Branch (13248:2): [True: 197, False: 536k]
  ------------------
13249|    197|#line 9 "src/char_ref.rl"
13250|    197|	{te = p+1;{output[0]=0x102; {p++; goto _out; }}}
13251|      0|	break;
13252|    442|	case 2038:
  ------------------
  |  Branch (13252:2): [True: 442, False: 535k]
  ------------------
13253|    442|#line 10 "src/char_ref.rl"
13254|    442|	{te = p+1;{output[0]=0xc2; {p++; goto _out; }}}
13255|      0|	break;
13256|    213|	case 2:
  ------------------
  |  Branch (13256:2): [True: 213, False: 536k]
  ------------------
13257|    213|#line 11 "src/char_ref.rl"
13258|    213|	{te = p+1;{output[0]=0x410; {p++; goto _out; }}}
13259|      0|	break;
13260|    339|	case 3:
  ------------------
  |  Branch (13260:2): [True: 339, False: 535k]
  ------------------
13261|    339|#line 12 "src/char_ref.rl"
13262|    339|	{te = p+1;{output[0]=0x1d504; {p++; goto _out; }}}
13263|      0|	break;
13264|    595|	case 2040:
  ------------------
  |  Branch (13264:2): [True: 595, False: 535k]
  ------------------
13265|    595|#line 13 "src/char_ref.rl"
13266|    595|	{te = p+1;{output[0]=0xc0; {p++; goto _out; }}}
13267|      0|	break;
13268|    214|	case 4:
  ------------------
  |  Branch (13268:2): [True: 214, False: 536k]
  ------------------
13269|    214|#line 14 "src/char_ref.rl"
13270|    214|	{te = p+1;{output[0]=0x391; {p++; goto _out; }}}
13271|      0|	break;
13272|    196|	case 5:
  ------------------
  |  Branch (13272:2): [True: 196, False: 536k]
  ------------------
13273|    196|#line 15 "src/char_ref.rl"
13274|    196|	{te = p+1;{output[0]=0x100; {p++; goto _out; }}}
13275|      0|	break;
13276|    207|	case 6:
  ------------------
  |  Branch (13276:2): [True: 207, False: 536k]
  ------------------
13277|    207|#line 16 "src/char_ref.rl"
13278|    207|	{te = p+1;{output[0]=0x2a53; {p++; goto _out; }}}
13279|      0|	break;
13280|    205|	case 7:
  ------------------
  |  Branch (13280:2): [True: 205, False: 536k]
  ------------------
13281|    205|#line 17 "src/char_ref.rl"
13282|    205|	{te = p+1;{output[0]=0x104; {p++; goto _out; }}}
13283|      0|	break;
13284|    221|	case 8:
  ------------------
  |  Branch (13284:2): [True: 221, False: 536k]
  ------------------
13285|    221|#line 18 "src/char_ref.rl"
13286|    221|	{te = p+1;{output[0]=0x1d538; {p++; goto _out; }}}
13287|      0|	break;
13288|      0|	case 9:
  ------------------
  |  Branch (13288:2): [True: 0, False: 536k]
  ------------------
13289|      0|#line 19 "src/char_ref.rl"
13290|      0|	{te = p+1;{output[0]=0x2061; {p++; goto _out; }}}
13291|      0|	break;
13292|    274|	case 2042:
  ------------------
  |  Branch (13292:2): [True: 274, False: 536k]
  ------------------
13293|    274|#line 20 "src/char_ref.rl"
13294|    274|	{te = p+1;{output[0]=0xc5; {p++; goto _out; }}}
13295|      0|	break;
13296|    208|	case 10:
  ------------------
  |  Branch (13296:2): [True: 208, False: 536k]
  ------------------
13297|    208|#line 21 "src/char_ref.rl"
13298|    208|	{te = p+1;{output[0]=0x1d49c; {p++; goto _out; }}}
13299|      0|	break;
13300|    234|	case 11:
  ------------------
  |  Branch (13300:2): [True: 234, False: 536k]
  ------------------
13301|    234|#line 22 "src/char_ref.rl"
13302|    234|	{te = p+1;{output[0]=0x2254; {p++; goto _out; }}}
13303|      0|	break;
13304|    284|	case 2044:
  ------------------
  |  Branch (13304:2): [True: 284, False: 536k]
  ------------------
13305|    284|#line 23 "src/char_ref.rl"
13306|    284|	{te = p+1;{output[0]=0xc3; {p++; goto _out; }}}
13307|      0|	break;
13308|    258|	case 2046:
  ------------------
  |  Branch (13308:2): [True: 258, False: 536k]
  ------------------
13309|    258|#line 24 "src/char_ref.rl"
13310|    258|	{te = p+1;{output[0]=0xc4; {p++; goto _out; }}}
13311|      0|	break;
13312|      0|	case 12:
  ------------------
  |  Branch (13312:2): [True: 0, False: 536k]
  ------------------
13313|      0|#line 25 "src/char_ref.rl"
13314|      0|	{te = p+1;{output[0]=0x2216; {p++; goto _out; }}}
13315|      0|	break;
13316|    251|	case 13:
  ------------------
  |  Branch (13316:2): [True: 251, False: 536k]
  ------------------
13317|    251|#line 26 "src/char_ref.rl"
13318|    251|	{te = p+1;{output[0]=0x2ae7; {p++; goto _out; }}}
13319|      0|	break;
13320|    255|	case 14:
  ------------------
  |  Branch (13320:2): [True: 255, False: 536k]
  ------------------
13321|    255|#line 27 "src/char_ref.rl"
13322|    255|	{te = p+1;{output[0]=0x2306; {p++; goto _out; }}}
13323|      0|	break;
13324|    379|	case 15:
  ------------------
  |  Branch (13324:2): [True: 379, False: 535k]
  ------------------
13325|    379|#line 28 "src/char_ref.rl"
13326|    379|	{te = p+1;{output[0]=0x411; {p++; goto _out; }}}
13327|      0|	break;
13328|    200|	case 16:
  ------------------
  |  Branch (13328:2): [True: 200, False: 536k]
  ------------------
13329|    200|#line 29 "src/char_ref.rl"
13330|    200|	{te = p+1;{output[0]=0x2235; {p++; goto _out; }}}
13331|      0|	break;
13332|      0|	case 17:
  ------------------
  |  Branch (13332:2): [True: 0, False: 536k]
  ------------------
13333|      0|#line 30 "src/char_ref.rl"
13334|      0|	{te = p+1;{output[0]=0x212c; {p++; goto _out; }}}
13335|      0|	break;
13336|    208|	case 18:
  ------------------
  |  Branch (13336:2): [True: 208, False: 536k]
  ------------------
13337|    208|#line 31 "src/char_ref.rl"
13338|    208|	{te = p+1;{output[0]=0x392; {p++; goto _out; }}}
13339|      0|	break;
13340|    210|	case 19:
  ------------------
  |  Branch (13340:2): [True: 210, False: 536k]
  ------------------
13341|    210|#line 32 "src/char_ref.rl"
13342|    210|	{te = p+1;{output[0]=0x1d505; {p++; goto _out; }}}
13343|      0|	break;
13344|    227|	case 20:
  ------------------
  |  Branch (13344:2): [True: 227, False: 536k]
  ------------------
13345|    227|#line 33 "src/char_ref.rl"
13346|    227|	{te = p+1;{output[0]=0x1d539; {p++; goto _out; }}}
13347|      0|	break;
13348|    359|	case 21:
  ------------------
  |  Branch (13348:2): [True: 359, False: 535k]
  ------------------
13349|    359|#line 34 "src/char_ref.rl"
13350|    359|	{te = p+1;{output[0]=0x2d8; {p++; goto _out; }}}
13351|      0|	break;
13352|    241|	case 22:
  ------------------
  |  Branch (13352:2): [True: 241, False: 536k]
  ------------------
13353|    241|#line 35 "src/char_ref.rl"
13354|    241|	{te = p+1;{output[0]=0x212c; {p++; goto _out; }}}
13355|      0|	break;
13356|    328|	case 23:
  ------------------
  |  Branch (13356:2): [True: 328, False: 535k]
  ------------------
13357|    328|#line 36 "src/char_ref.rl"
13358|    328|	{te = p+1;{output[0]=0x224e; {p++; goto _out; }}}
13359|      0|	break;
13360|    356|	case 24:
  ------------------
  |  Branch (13360:2): [True: 356, False: 535k]
  ------------------
13361|    356|#line 37 "src/char_ref.rl"
13362|    356|	{te = p+1;{output[0]=0x427; {p++; goto _out; }}}
13363|      0|	break;
13364|    280|	case 2048:
  ------------------
  |  Branch (13364:2): [True: 280, False: 536k]
  ------------------
13365|    280|#line 38 "src/char_ref.rl"
13366|    280|	{te = p+1;{output[0]=0xa9; {p++; goto _out; }}}
13367|      0|	break;
13368|    217|	case 25:
  ------------------
  |  Branch (13368:2): [True: 217, False: 536k]
  ------------------
13369|    217|#line 39 "src/char_ref.rl"
13370|    217|	{te = p+1;{output[0]=0x106; {p++; goto _out; }}}
13371|      0|	break;
13372|    195|	case 26:
  ------------------
  |  Branch (13372:2): [True: 195, False: 536k]
  ------------------
13373|    195|#line 40 "src/char_ref.rl"
13374|    195|	{te = p+1;{output[0]=0x22d2; {p++; goto _out; }}}
13375|      0|	break;
13376|      0|	case 27:
  ------------------
  |  Branch (13376:2): [True: 0, False: 536k]
  ------------------
13377|      0|#line 41 "src/char_ref.rl"
13378|      0|	{te = p+1;{output[0]=0x2145; {p++; goto _out; }}}
13379|      0|	break;
13380|      0|	case 28:
  ------------------
  |  Branch (13380:2): [True: 0, False: 536k]
  ------------------
13381|      0|#line 42 "src/char_ref.rl"
13382|      0|	{te = p+1;{output[0]=0x212d; {p++; goto _out; }}}
13383|      0|	break;
13384|    197|	case 29:
  ------------------
  |  Branch (13384:2): [True: 197, False: 536k]
  ------------------
13385|    197|#line 43 "src/char_ref.rl"
13386|    197|	{te = p+1;{output[0]=0x10c; {p++; goto _out; }}}
13387|      0|	break;
13388|    195|	case 2050:
  ------------------
  |  Branch (13388:2): [True: 195, False: 536k]
  ------------------
13389|    195|#line 44 "src/char_ref.rl"
13390|    195|	{te = p+1;{output[0]=0xc7; {p++; goto _out; }}}
13391|      0|	break;
13392|    306|	case 30:
  ------------------
  |  Branch (13392:2): [True: 306, False: 536k]
  ------------------
13393|    306|#line 45 "src/char_ref.rl"
13394|    306|	{te = p+1;{output[0]=0x108; {p++; goto _out; }}}
13395|      0|	break;
13396|    196|	case 31:
  ------------------
  |  Branch (13396:2): [True: 196, False: 536k]
  ------------------
13397|    196|#line 46 "src/char_ref.rl"
13398|    196|	{te = p+1;{output[0]=0x2230; {p++; goto _out; }}}
13399|      0|	break;
13400|    245|	case 32:
  ------------------
  |  Branch (13400:2): [True: 245, False: 536k]
  ------------------
13401|    245|#line 47 "src/char_ref.rl"
13402|    245|	{te = p+1;{output[0]=0x10a; {p++; goto _out; }}}
13403|      0|	break;
13404|    201|	case 33:
  ------------------
  |  Branch (13404:2): [True: 201, False: 536k]
  ------------------
13405|    201|#line 48 "src/char_ref.rl"
13406|    201|	{te = p+1;{output[0]=0xb8; {p++; goto _out; }}}
13407|      0|	break;
13408|    269|	case 34:
  ------------------
  |  Branch (13408:2): [True: 269, False: 536k]
  ------------------
13409|    269|#line 49 "src/char_ref.rl"
13410|    269|	{te = p+1;{output[0]=0xb7; {p++; goto _out; }}}
13411|      0|	break;
13412|    293|	case 35:
  ------------------
  |  Branch (13412:2): [True: 293, False: 536k]
  ------------------
13413|    293|#line 50 "src/char_ref.rl"
13414|    293|	{te = p+1;{output[0]=0x212d; {p++; goto _out; }}}
13415|      0|	break;
13416|    226|	case 36:
  ------------------
  |  Branch (13416:2): [True: 226, False: 536k]
  ------------------
13417|    226|#line 51 "src/char_ref.rl"
13418|    226|	{te = p+1;{output[0]=0x3a7; {p++; goto _out; }}}
13419|      0|	break;
13420|      0|	case 37:
  ------------------
  |  Branch (13420:2): [True: 0, False: 536k]
  ------------------
13421|      0|#line 52 "src/char_ref.rl"
13422|      0|	{te = p+1;{output[0]=0x2299; {p++; goto _out; }}}
13423|      0|	break;
13424|      0|	case 38:
  ------------------
  |  Branch (13424:2): [True: 0, False: 536k]
  ------------------
13425|      0|#line 53 "src/char_ref.rl"
13426|      0|	{te = p+1;{output[0]=0x2296; {p++; goto _out; }}}
13427|      0|	break;
13428|      0|	case 39:
  ------------------
  |  Branch (13428:2): [True: 0, False: 536k]
  ------------------
13429|      0|#line 54 "src/char_ref.rl"
13430|      0|	{te = p+1;{output[0]=0x2295; {p++; goto _out; }}}
13431|      0|	break;
13432|      0|	case 40:
  ------------------
  |  Branch (13432:2): [True: 0, False: 536k]
  ------------------
13433|      0|#line 55 "src/char_ref.rl"
13434|      0|	{te = p+1;{output[0]=0x2297; {p++; goto _out; }}}
13435|      0|	break;
13436|      0|	case 41:
  ------------------
  |  Branch (13436:2): [True: 0, False: 536k]
  ------------------
13437|      0|#line 56 "src/char_ref.rl"
13438|      0|	{te = p+1;{output[0]=0x2232; {p++; goto _out; }}}
13439|      0|	break;
13440|      0|	case 42:
  ------------------
  |  Branch (13440:2): [True: 0, False: 536k]
  ------------------
13441|      0|#line 57 "src/char_ref.rl"
13442|      0|	{te = p+1;{output[0]=0x201d; {p++; goto _out; }}}
13443|      0|	break;
13444|      0|	case 43:
  ------------------
  |  Branch (13444:2): [True: 0, False: 536k]
  ------------------
13445|      0|#line 58 "src/char_ref.rl"
13446|      0|	{te = p+1;{output[0]=0x2019; {p++; goto _out; }}}
13447|      0|	break;
13448|    206|	case 44:
  ------------------
  |  Branch (13448:2): [True: 206, False: 536k]
  ------------------
13449|    206|#line 59 "src/char_ref.rl"
13450|    206|	{te = p+1;{output[0]=0x2237; {p++; goto _out; }}}
13451|      0|	break;
13452|    200|	case 45:
  ------------------
  |  Branch (13452:2): [True: 200, False: 536k]
  ------------------
13453|    200|#line 60 "src/char_ref.rl"
13454|    200|	{te = p+1;{output[0]=0x2a74; {p++; goto _out; }}}
13455|      0|	break;
13456|      0|	case 46:
  ------------------
  |  Branch (13456:2): [True: 0, False: 536k]
  ------------------
13457|      0|#line 61 "src/char_ref.rl"
13458|      0|	{te = p+1;{output[0]=0x2261; {p++; goto _out; }}}
13459|      0|	break;
13460|    200|	case 47:
  ------------------
  |  Branch (13460:2): [True: 200, False: 536k]
  ------------------
13461|    200|#line 62 "src/char_ref.rl"
13462|    200|	{te = p+1;{output[0]=0x222f; {p++; goto _out; }}}
13463|      0|	break;
13464|      0|	case 48:
  ------------------
  |  Branch (13464:2): [True: 0, False: 536k]
  ------------------
13465|      0|#line 63 "src/char_ref.rl"
13466|      0|	{te = p+1;{output[0]=0x222e; {p++; goto _out; }}}
13467|      0|	break;
13468|    201|	case 49:
  ------------------
  |  Branch (13468:2): [True: 201, False: 536k]
  ------------------
13469|    201|#line 64 "src/char_ref.rl"
13470|    201|	{te = p+1;{output[0]=0x2102; {p++; goto _out; }}}
13471|      0|	break;
13472|      0|	case 50:
  ------------------
  |  Branch (13472:2): [True: 0, False: 536k]
  ------------------
13473|      0|#line 65 "src/char_ref.rl"
13474|      0|	{te = p+1;{output[0]=0x2210; {p++; goto _out; }}}
13475|      0|	break;
13476|      0|	case 51:
  ------------------
  |  Branch (13476:2): [True: 0, False: 536k]
  ------------------
13477|      0|#line 66 "src/char_ref.rl"
13478|      0|	{te = p+1;{output[0]=0x2233; {p++; goto _out; }}}
13479|      0|	break;
13480|    233|	case 52:
  ------------------
  |  Branch (13480:2): [True: 233, False: 536k]
  ------------------
13481|    233|#line 67 "src/char_ref.rl"
13482|    233|	{te = p+1;{output[0]=0x2a2f; {p++; goto _out; }}}
13483|      0|	break;
13484|    204|	case 53:
  ------------------
  |  Branch (13484:2): [True: 204, False: 536k]
  ------------------
13485|    204|#line 68 "src/char_ref.rl"
13486|    204|	{te = p+1;{output[0]=0x1d49e; {p++; goto _out; }}}
13487|      0|	break;
13488|    211|	case 54:
  ------------------
  |  Branch (13488:2): [True: 211, False: 536k]
  ------------------
13489|    211|#line 69 "src/char_ref.rl"
13490|    211|	{te = p+1;{output[0]=0x22d3; {p++; goto _out; }}}
13491|      0|	break;
13492|    288|	case 55:
  ------------------
  |  Branch (13492:2): [True: 288, False: 536k]
  ------------------
13493|    288|#line 70 "src/char_ref.rl"
13494|    288|	{te = p+1;{output[0]=0x224d; {p++; goto _out; }}}
13495|      0|	break;
13496|    218|	case 56:
  ------------------
  |  Branch (13496:2): [True: 218, False: 536k]
  ------------------
13497|    218|#line 71 "src/char_ref.rl"
13498|    218|	{te = p+1;{output[0]=0x2145; {p++; goto _out; }}}
13499|      0|	break;
13500|      0|	case 57:
  ------------------
  |  Branch (13500:2): [True: 0, False: 536k]
  ------------------
13501|      0|#line 72 "src/char_ref.rl"
13502|      0|	{te = p+1;{output[0]=0x2911; {p++; goto _out; }}}
13503|      0|	break;
13504|    229|	case 58:
  ------------------
  |  Branch (13504:2): [True: 229, False: 536k]
  ------------------
13505|    229|#line 73 "src/char_ref.rl"
13506|    229|	{te = p+1;{output[0]=0x402; {p++; goto _out; }}}
13507|      0|	break;
13508|    201|	case 59:
  ------------------
  |  Branch (13508:2): [True: 201, False: 536k]
  ------------------
13509|    201|#line 74 "src/char_ref.rl"
13510|    201|	{te = p+1;{output[0]=0x405; {p++; goto _out; }}}
13511|      0|	break;
13512|    196|	case 60:
  ------------------
  |  Branch (13512:2): [True: 196, False: 536k]
  ------------------
13513|    196|#line 75 "src/char_ref.rl"
13514|    196|	{te = p+1;{output[0]=0x40f; {p++; goto _out; }}}
13515|      0|	break;
13516|    218|	case 61:
  ------------------
  |  Branch (13516:2): [True: 218, False: 536k]
  ------------------
13517|    218|#line 76 "src/char_ref.rl"
13518|    218|	{te = p+1;{output[0]=0x2021; {p++; goto _out; }}}
13519|      0|	break;
13520|    207|	case 62:
  ------------------
  |  Branch (13520:2): [True: 207, False: 536k]
  ------------------
13521|    207|#line 77 "src/char_ref.rl"
13522|    207|	{te = p+1;{output[0]=0x21a1; {p++; goto _out; }}}
13523|      0|	break;
13524|    259|	case 63:
  ------------------
  |  Branch (13524:2): [True: 259, False: 536k]
  ------------------
13525|    259|#line 78 "src/char_ref.rl"
13526|    259|	{te = p+1;{output[0]=0x2ae4; {p++; goto _out; }}}
13527|      0|	break;
13528|    200|	case 64:
  ------------------
  |  Branch (13528:2): [True: 200, False: 536k]
  ------------------
13529|    200|#line 79 "src/char_ref.rl"
13530|    200|	{te = p+1;{output[0]=0x10e; {p++; goto _out; }}}
13531|      0|	break;
13532|    437|	case 65:
  ------------------
  |  Branch (13532:2): [True: 437, False: 535k]
  ------------------
13533|    437|#line 80 "src/char_ref.rl"
13534|    437|	{te = p+1;{output[0]=0x414; {p++; goto _out; }}}
13535|      0|	break;
13536|    290|	case 66:
  ------------------
  |  Branch (13536:2): [True: 290, False: 536k]
  ------------------
13537|    290|#line 81 "src/char_ref.rl"
13538|    290|	{te = p+1;{output[0]=0x2207; {p++; goto _out; }}}
13539|      0|	break;
13540|    270|	case 67:
  ------------------
  |  Branch (13540:2): [True: 270, False: 536k]
  ------------------
13541|    270|#line 82 "src/char_ref.rl"
13542|    270|	{te = p+1;{output[0]=0x394; {p++; goto _out; }}}
13543|      0|	break;
13544|    269|	case 68:
  ------------------
  |  Branch (13544:2): [True: 269, False: 536k]
  ------------------
13545|    269|#line 83 "src/char_ref.rl"
13546|    269|	{te = p+1;{output[0]=0x1d507; {p++; goto _out; }}}
13547|      0|	break;
13548|      0|	case 69:
  ------------------
  |  Branch (13548:2): [True: 0, False: 536k]
  ------------------
13549|      0|#line 84 "src/char_ref.rl"
13550|      0|	{te = p+1;{output[0]=0xb4; {p++; goto _out; }}}
13551|      0|	break;
13552|      0|	case 70:
  ------------------
  |  Branch (13552:2): [True: 0, False: 536k]
  ------------------
13553|      0|#line 85 "src/char_ref.rl"
13554|      0|	{te = p+1;{output[0]=0x2d9; {p++; goto _out; }}}
13555|      0|	break;
13556|      0|	case 71:
  ------------------
  |  Branch (13556:2): [True: 0, False: 536k]
  ------------------
13557|      0|#line 86 "src/char_ref.rl"
13558|      0|	{te = p+1;{output[0]=0x2dd; {p++; goto _out; }}}
13559|      0|	break;
13560|      0|	case 72:
  ------------------
  |  Branch (13560:2): [True: 0, False: 536k]
  ------------------
13561|      0|#line 87 "src/char_ref.rl"
13562|      0|	{te = p+1;{output[0]=0x60; {p++; goto _out; }}}
13563|      0|	break;
13564|      0|	case 73:
  ------------------
  |  Branch (13564:2): [True: 0, False: 536k]
  ------------------
13565|      0|#line 88 "src/char_ref.rl"
13566|      0|	{te = p+1;{output[0]=0x2dc; {p++; goto _out; }}}
13567|      0|	break;
13568|    266|	case 74:
  ------------------
  |  Branch (13568:2): [True: 266, False: 536k]
  ------------------
13569|    266|#line 89 "src/char_ref.rl"
13570|    266|	{te = p+1;{output[0]=0x22c4; {p++; goto _out; }}}
13571|      0|	break;
13572|      0|	case 75:
  ------------------
  |  Branch (13572:2): [True: 0, False: 536k]
  ------------------
13573|      0|#line 90 "src/char_ref.rl"
13574|      0|	{te = p+1;{output[0]=0x2146; {p++; goto _out; }}}
13575|      0|	break;
13576|    200|	case 76:
  ------------------
  |  Branch (13576:2): [True: 200, False: 536k]
  ------------------
13577|    200|#line 91 "src/char_ref.rl"
13578|    200|	{te = p+1;{output[0]=0x1d53b; {p++; goto _out; }}}
13579|      0|	break;
13580|    290|	case 77:
  ------------------
  |  Branch (13580:2): [True: 290, False: 536k]
  ------------------
13581|    290|#line 92 "src/char_ref.rl"
13582|    290|	{te = p+1;{output[0]=0xa8; {p++; goto _out; }}}
13583|      0|	break;
13584|    208|	case 78:
  ------------------
  |  Branch (13584:2): [True: 208, False: 536k]
  ------------------
13585|    208|#line 93 "src/char_ref.rl"
13586|    208|	{te = p+1;{output[0]=0x20dc; {p++; goto _out; }}}
13587|      0|	break;
13588|    197|	case 79:
  ------------------
  |  Branch (13588:2): [True: 197, False: 536k]
  ------------------
13589|    197|#line 94 "src/char_ref.rl"
13590|    197|	{te = p+1;{output[0]=0x2250; {p++; goto _out; }}}
13591|      0|	break;
13592|      0|	case 80:
  ------------------
  |  Branch (13592:2): [True: 0, False: 536k]
  ------------------
13593|      0|#line 95 "src/char_ref.rl"
13594|      0|	{te = p+1;{output[0]=0x222f; {p++; goto _out; }}}
13595|      0|	break;
13596|      0|	case 81:
  ------------------
  |  Branch (13596:2): [True: 0, False: 536k]
  ------------------
13597|      0|#line 96 "src/char_ref.rl"
13598|      0|	{te = p+1;{output[0]=0xa8; {p++; goto _out; }}}
13599|      0|	break;
13600|      0|	case 82:
  ------------------
  |  Branch (13600:2): [True: 0, False: 536k]
  ------------------
13601|      0|#line 97 "src/char_ref.rl"
13602|      0|	{te = p+1;{output[0]=0x21d3; {p++; goto _out; }}}
13603|      0|	break;
13604|      0|	case 83:
  ------------------
  |  Branch (13604:2): [True: 0, False: 536k]
  ------------------
13605|      0|#line 98 "src/char_ref.rl"
13606|      0|	{te = p+1;{output[0]=0x21d0; {p++; goto _out; }}}
13607|      0|	break;
13608|      0|	case 84:
  ------------------
  |  Branch (13608:2): [True: 0, False: 536k]
  ------------------
13609|      0|#line 99 "src/char_ref.rl"
13610|      0|	{te = p+1;{output[0]=0x21d4; {p++; goto _out; }}}
13611|      0|	break;
13612|      0|	case 85:
  ------------------
  |  Branch (13612:2): [True: 0, False: 536k]
  ------------------
13613|      0|#line 100 "src/char_ref.rl"
13614|      0|	{te = p+1;{output[0]=0x2ae4; {p++; goto _out; }}}
13615|      0|	break;
13616|      0|	case 86:
  ------------------
  |  Branch (13616:2): [True: 0, False: 536k]
  ------------------
13617|      0|#line 101 "src/char_ref.rl"
13618|      0|	{te = p+1;{output[0]=0x27f8; {p++; goto _out; }}}
13619|      0|	break;
13620|      0|	case 87:
  ------------------
  |  Branch (13620:2): [True: 0, False: 536k]
  ------------------
13621|      0|#line 102 "src/char_ref.rl"
13622|      0|	{te = p+1;{output[0]=0x27fa; {p++; goto _out; }}}
13623|      0|	break;
13624|      0|	case 88:
  ------------------
  |  Branch (13624:2): [True: 0, False: 536k]
  ------------------
13625|      0|#line 103 "src/char_ref.rl"
13626|      0|	{te = p+1;{output[0]=0x27f9; {p++; goto _out; }}}
13627|      0|	break;
13628|      0|	case 89:
  ------------------
  |  Branch (13628:2): [True: 0, False: 536k]
  ------------------
13629|      0|#line 104 "src/char_ref.rl"
13630|      0|	{te = p+1;{output[0]=0x21d2; {p++; goto _out; }}}
13631|      0|	break;
13632|      0|	case 90:
  ------------------
  |  Branch (13632:2): [True: 0, False: 536k]
  ------------------
13633|      0|#line 105 "src/char_ref.rl"
13634|      0|	{te = p+1;{output[0]=0x22a8; {p++; goto _out; }}}
13635|      0|	break;
13636|      0|	case 91:
  ------------------
  |  Branch (13636:2): [True: 0, False: 536k]
  ------------------
13637|      0|#line 106 "src/char_ref.rl"
13638|      0|	{te = p+1;{output[0]=0x21d1; {p++; goto _out; }}}
13639|      0|	break;
13640|      0|	case 92:
  ------------------
  |  Branch (13640:2): [True: 0, False: 536k]
  ------------------
13641|      0|#line 107 "src/char_ref.rl"
13642|      0|	{te = p+1;{output[0]=0x21d5; {p++; goto _out; }}}
13643|      0|	break;
13644|      0|	case 93:
  ------------------
  |  Branch (13644:2): [True: 0, False: 536k]
  ------------------
13645|      0|#line 108 "src/char_ref.rl"
13646|      0|	{te = p+1;{output[0]=0x2225; {p++; goto _out; }}}
13647|      0|	break;
13648|    222|	case 94:
  ------------------
  |  Branch (13648:2): [True: 222, False: 536k]
  ------------------
13649|    222|#line 109 "src/char_ref.rl"
13650|    222|	{te = p+1;{output[0]=0x2193; {p++; goto _out; }}}
13651|      0|	break;
13652|    200|	case 95:
  ------------------
  |  Branch (13652:2): [True: 200, False: 536k]
  ------------------
13653|    200|#line 110 "src/char_ref.rl"
13654|    200|	{te = p+1;{output[0]=0x2913; {p++; goto _out; }}}
13655|      0|	break;
13656|    212|	case 96:
  ------------------
  |  Branch (13656:2): [True: 212, False: 536k]
  ------------------
13657|    212|#line 111 "src/char_ref.rl"
13658|    212|	{te = p+1;{output[0]=0x21f5; {p++; goto _out; }}}
13659|      0|	break;
13660|    196|	case 97:
  ------------------
  |  Branch (13660:2): [True: 196, False: 536k]
  ------------------
13661|    196|#line 112 "src/char_ref.rl"
13662|    196|	{te = p+1;{output[0]=0x311; {p++; goto _out; }}}
13663|      0|	break;
13664|      0|	case 98:
  ------------------
  |  Branch (13664:2): [True: 0, False: 536k]
  ------------------
13665|      0|#line 113 "src/char_ref.rl"
13666|      0|	{te = p+1;{output[0]=0x2950; {p++; goto _out; }}}
13667|      0|	break;
13668|      0|	case 99:
  ------------------
  |  Branch (13668:2): [True: 0, False: 536k]
  ------------------
13669|      0|#line 114 "src/char_ref.rl"
13670|      0|	{te = p+1;{output[0]=0x295e; {p++; goto _out; }}}
13671|      0|	break;
13672|      0|	case 100:
  ------------------
  |  Branch (13672:2): [True: 0, False: 536k]
  ------------------
13673|      0|#line 115 "src/char_ref.rl"
13674|      0|	{te = p+1;{output[0]=0x21bd; {p++; goto _out; }}}
13675|      0|	break;
13676|      0|	case 101:
  ------------------
  |  Branch (13676:2): [True: 0, False: 536k]
  ------------------
13677|      0|#line 116 "src/char_ref.rl"
13678|      0|	{te = p+1;{output[0]=0x2956; {p++; goto _out; }}}
13679|      0|	break;
13680|      0|	case 102:
  ------------------
  |  Branch (13680:2): [True: 0, False: 536k]
  ------------------
13681|      0|#line 117 "src/char_ref.rl"
13682|      0|	{te = p+1;{output[0]=0x295f; {p++; goto _out; }}}
13683|      0|	break;
13684|      0|	case 103:
  ------------------
  |  Branch (13684:2): [True: 0, False: 536k]
  ------------------
13685|      0|#line 118 "src/char_ref.rl"
13686|      0|	{te = p+1;{output[0]=0x21c1; {p++; goto _out; }}}
13687|      0|	break;
13688|      0|	case 104:
  ------------------
  |  Branch (13688:2): [True: 0, False: 536k]
  ------------------
13689|      0|#line 119 "src/char_ref.rl"
13690|      0|	{te = p+1;{output[0]=0x2957; {p++; goto _out; }}}
13691|      0|	break;
13692|    278|	case 105:
  ------------------
  |  Branch (13692:2): [True: 278, False: 536k]
  ------------------
13693|    278|#line 120 "src/char_ref.rl"
13694|    278|	{te = p+1;{output[0]=0x22a4; {p++; goto _out; }}}
13695|      0|	break;
13696|    208|	case 106:
  ------------------
  |  Branch (13696:2): [True: 208, False: 536k]
  ------------------
13697|    208|#line 121 "src/char_ref.rl"
13698|    208|	{te = p+1;{output[0]=0x21a7; {p++; goto _out; }}}
13699|      0|	break;
13700|    206|	case 107:
  ------------------
  |  Branch (13700:2): [True: 206, False: 536k]
  ------------------
13701|    206|#line 122 "src/char_ref.rl"
13702|    206|	{te = p+1;{output[0]=0x21d3; {p++; goto _out; }}}
13703|      0|	break;
13704|    206|	case 108:
  ------------------
  |  Branch (13704:2): [True: 206, False: 536k]
  ------------------
13705|    206|#line 123 "src/char_ref.rl"
13706|    206|	{te = p+1;{output[0]=0x1d49f; {p++; goto _out; }}}
13707|      0|	break;
13708|    221|	case 109:
  ------------------
  |  Branch (13708:2): [True: 221, False: 536k]
  ------------------
13709|    221|#line 124 "src/char_ref.rl"
13710|    221|	{te = p+1;{output[0]=0x110; {p++; goto _out; }}}
13711|      0|	break;
13712|    204|	case 110:
  ------------------
  |  Branch (13712:2): [True: 204, False: 536k]
  ------------------
13713|    204|#line 125 "src/char_ref.rl"
13714|    204|	{te = p+1;{output[0]=0x14a; {p++; goto _out; }}}
13715|      0|	break;
13716|    338|	case 2052:
  ------------------
  |  Branch (13716:2): [True: 338, False: 535k]
  ------------------
13717|    338|#line 126 "src/char_ref.rl"
13718|    338|	{te = p+1;{output[0]=0xd0; {p++; goto _out; }}}
13719|      0|	break;
13720|    360|	case 2054:
  ------------------
  |  Branch (13720:2): [True: 360, False: 535k]
  ------------------
13721|    360|#line 127 "src/char_ref.rl"
13722|    360|	{te = p+1;{output[0]=0xc9; {p++; goto _out; }}}
13723|      0|	break;
13724|    222|	case 111:
  ------------------
  |  Branch (13724:2): [True: 222, False: 536k]
  ------------------
13725|    222|#line 128 "src/char_ref.rl"
13726|    222|	{te = p+1;{output[0]=0x11a; {p++; goto _out; }}}
13727|      0|	break;
13728|    260|	case 2056:
  ------------------
  |  Branch (13728:2): [True: 260, False: 536k]
  ------------------
13729|    260|#line 129 "src/char_ref.rl"
13730|    260|	{te = p+1;{output[0]=0xca; {p++; goto _out; }}}
13731|      0|	break;
13732|    289|	case 112:
  ------------------
  |  Branch (13732:2): [True: 289, False: 536k]
  ------------------
13733|    289|#line 130 "src/char_ref.rl"
13734|    289|	{te = p+1;{output[0]=0x42d; {p++; goto _out; }}}
13735|      0|	break;
13736|    257|	case 113:
  ------------------
  |  Branch (13736:2): [True: 257, False: 536k]
  ------------------
13737|    257|#line 131 "src/char_ref.rl"
13738|    257|	{te = p+1;{output[0]=0x116; {p++; goto _out; }}}
13739|      0|	break;
13740|    197|	case 114:
  ------------------
  |  Branch (13740:2): [True: 197, False: 536k]
  ------------------
13741|    197|#line 132 "src/char_ref.rl"
13742|    197|	{te = p+1;{output[0]=0x1d508; {p++; goto _out; }}}
13743|      0|	break;
13744|    217|	case 2058:
  ------------------
  |  Branch (13744:2): [True: 217, False: 536k]
  ------------------
13745|    217|#line 133 "src/char_ref.rl"
13746|    217|	{te = p+1;{output[0]=0xc8; {p++; goto _out; }}}
13747|      0|	break;
13748|    195|	case 115:
  ------------------
  |  Branch (13748:2): [True: 195, False: 536k]
  ------------------
13749|    195|#line 134 "src/char_ref.rl"
13750|    195|	{te = p+1;{output[0]=0x2208; {p++; goto _out; }}}
13751|      0|	break;
13752|    309|	case 116:
  ------------------
  |  Branch (13752:2): [True: 309, False: 536k]
  ------------------
13753|    309|#line 135 "src/char_ref.rl"
13754|    309|	{te = p+1;{output[0]=0x112; {p++; goto _out; }}}
13755|      0|	break;
13756|      0|	case 117:
  ------------------
  |  Branch (13756:2): [True: 0, False: 536k]
  ------------------
13757|      0|#line 136 "src/char_ref.rl"
13758|      0|	{te = p+1;{output[0]=0x25fb; {p++; goto _out; }}}
13759|      0|	break;
13760|      0|	case 118:
  ------------------
  |  Branch (13760:2): [True: 0, False: 536k]
  ------------------
13761|      0|#line 137 "src/char_ref.rl"
13762|      0|	{te = p+1;{output[0]=0x25ab; {p++; goto _out; }}}
13763|      0|	break;
13764|    200|	case 119:
  ------------------
  |  Branch (13764:2): [True: 200, False: 536k]
  ------------------
13765|    200|#line 138 "src/char_ref.rl"
13766|    200|	{te = p+1;{output[0]=0x118; {p++; goto _out; }}}
13767|      0|	break;
13768|    237|	case 120:
  ------------------
  |  Branch (13768:2): [True: 237, False: 536k]
  ------------------
13769|    237|#line 139 "src/char_ref.rl"
13770|    237|	{te = p+1;{output[0]=0x1d53c; {p++; goto _out; }}}
13771|      0|	break;
13772|    224|	case 121:
  ------------------
  |  Branch (13772:2): [True: 224, False: 536k]
  ------------------
13773|    224|#line 140 "src/char_ref.rl"
13774|    224|	{te = p+1;{output[0]=0x395; {p++; goto _out; }}}
13775|      0|	break;
13776|    217|	case 122:
  ------------------
  |  Branch (13776:2): [True: 217, False: 536k]
  ------------------
13777|    217|#line 141 "src/char_ref.rl"
13778|    217|	{te = p+1;{output[0]=0x2a75; {p++; goto _out; }}}
13779|      0|	break;
13780|    211|	case 123:
  ------------------
  |  Branch (13780:2): [True: 211, False: 536k]
  ------------------
13781|    211|#line 142 "src/char_ref.rl"
13782|    211|	{te = p+1;{output[0]=0x2242; {p++; goto _out; }}}
13783|      0|	break;
13784|      0|	case 124:
  ------------------
  |  Branch (13784:2): [True: 0, False: 536k]
  ------------------
13785|      0|#line 143 "src/char_ref.rl"
13786|      0|	{te = p+1;{output[0]=0x21cc; {p++; goto _out; }}}
13787|      0|	break;
13788|    276|	case 125:
  ------------------
  |  Branch (13788:2): [True: 276, False: 536k]
  ------------------
13789|    276|#line 144 "src/char_ref.rl"
13790|    276|	{te = p+1;{output[0]=0x2130; {p++; goto _out; }}}
13791|      0|	break;
13792|    198|	case 126:
  ------------------
  |  Branch (13792:2): [True: 198, False: 536k]
  ------------------
13793|    198|#line 145 "src/char_ref.rl"
13794|    198|	{te = p+1;{output[0]=0x2a73; {p++; goto _out; }}}
13795|      0|	break;
13796|    214|	case 127:
  ------------------
  |  Branch (13796:2): [True: 214, False: 536k]
  ------------------
13797|    214|#line 146 "src/char_ref.rl"
13798|    214|	{te = p+1;{output[0]=0x397; {p++; goto _out; }}}
13799|      0|	break;
13800|    567|	case 2060:
  ------------------
  |  Branch (13800:2): [True: 567, False: 535k]
  ------------------
13801|    567|#line 147 "src/char_ref.rl"
13802|    567|	{te = p+1;{output[0]=0xcb; {p++; goto _out; }}}
13803|      0|	break;
13804|    218|	case 128:
  ------------------
  |  Branch (13804:2): [True: 218, False: 536k]
  ------------------
13805|    218|#line 148 "src/char_ref.rl"
13806|    218|	{te = p+1;{output[0]=0x2203; {p++; goto _out; }}}
13807|      0|	break;
13808|      0|	case 129:
  ------------------
  |  Branch (13808:2): [True: 0, False: 536k]
  ------------------
13809|      0|#line 149 "src/char_ref.rl"
13810|      0|	{te = p+1;{output[0]=0x2147; {p++; goto _out; }}}
13811|      0|	break;
13812|    391|	case 130:
  ------------------
  |  Branch (13812:2): [True: 391, False: 535k]
  ------------------
13813|    391|#line 150 "src/char_ref.rl"
13814|    391|	{te = p+1;{output[0]=0x424; {p++; goto _out; }}}
13815|      0|	break;
13816|    250|	case 131:
  ------------------
  |  Branch (13816:2): [True: 250, False: 536k]
  ------------------
13817|    250|#line 151 "src/char_ref.rl"
13818|    250|	{te = p+1;{output[0]=0x1d509; {p++; goto _out; }}}
13819|      0|	break;
13820|      0|	case 132:
  ------------------
  |  Branch (13820:2): [True: 0, False: 536k]
  ------------------
13821|      0|#line 152 "src/char_ref.rl"
13822|      0|	{te = p+1;{output[0]=0x25fc; {p++; goto _out; }}}
13823|      0|	break;
13824|      0|	case 133:
  ------------------
  |  Branch (13824:2): [True: 0, False: 536k]
  ------------------
13825|      0|#line 153 "src/char_ref.rl"
13826|      0|	{te = p+1;{output[0]=0x25aa; {p++; goto _out; }}}
13827|      0|	break;
13828|    284|	case 134:
  ------------------
  |  Branch (13828:2): [True: 284, False: 536k]
  ------------------
13829|    284|#line 154 "src/char_ref.rl"
13830|    284|	{te = p+1;{output[0]=0x1d53d; {p++; goto _out; }}}
13831|      0|	break;
13832|    326|	case 135:
  ------------------
  |  Branch (13832:2): [True: 326, False: 536k]
  ------------------
13833|    326|#line 155 "src/char_ref.rl"
13834|    326|	{te = p+1;{output[0]=0x2200; {p++; goto _out; }}}
13835|      0|	break;
13836|      0|	case 136:
  ------------------
  |  Branch (13836:2): [True: 0, False: 536k]
  ------------------
13837|      0|#line 156 "src/char_ref.rl"
13838|      0|	{te = p+1;{output[0]=0x2131; {p++; goto _out; }}}
13839|      0|	break;
13840|    227|	case 137:
  ------------------
  |  Branch (13840:2): [True: 227, False: 536k]
  ------------------
13841|    227|#line 157 "src/char_ref.rl"
13842|    227|	{te = p+1;{output[0]=0x2131; {p++; goto _out; }}}
13843|      0|	break;
13844|    375|	case 138:
  ------------------
  |  Branch (13844:2): [True: 375, False: 535k]
  ------------------
13845|    375|#line 158 "src/char_ref.rl"
13846|    375|	{te = p+1;{output[0]=0x403; {p++; goto _out; }}}
13847|      0|	break;
13848|    496|	case 2062:
  ------------------
  |  Branch (13848:2): [True: 496, False: 535k]
  ------------------
13849|    496|#line 159 "src/char_ref.rl"
13850|    496|	{te = p+1;{output[0]=0x3e; {p++; goto _out; }}}
13851|      0|	break;
13852|    255|	case 139:
  ------------------
  |  Branch (13852:2): [True: 255, False: 536k]
  ------------------
13853|    255|#line 160 "src/char_ref.rl"
13854|    255|	{te = p+1;{output[0]=0x393; {p++; goto _out; }}}
13855|      0|	break;
13856|    205|	case 140:
  ------------------
  |  Branch (13856:2): [True: 205, False: 536k]
  ------------------
13857|    205|#line 161 "src/char_ref.rl"
13858|    205|	{te = p+1;{output[0]=0x3dc; {p++; goto _out; }}}
13859|      0|	break;
13860|    196|	case 141:
  ------------------
  |  Branch (13860:2): [True: 196, False: 536k]
  ------------------
13861|    196|#line 162 "src/char_ref.rl"
13862|    196|	{te = p+1;{output[0]=0x11e; {p++; goto _out; }}}
13863|      0|	break;
13864|    206|	case 142:
  ------------------
  |  Branch (13864:2): [True: 206, False: 536k]
  ------------------
13865|    206|#line 163 "src/char_ref.rl"
13866|    206|	{te = p+1;{output[0]=0x122; {p++; goto _out; }}}
13867|      0|	break;
13868|    462|	case 143:
  ------------------
  |  Branch (13868:2): [True: 462, False: 535k]
  ------------------
13869|    462|#line 164 "src/char_ref.rl"
13870|    462|	{te = p+1;{output[0]=0x11c; {p++; goto _out; }}}
13871|      0|	break;
13872|    329|	case 144:
  ------------------
  |  Branch (13872:2): [True: 329, False: 535k]
  ------------------
13873|    329|#line 165 "src/char_ref.rl"
13874|    329|	{te = p+1;{output[0]=0x413; {p++; goto _out; }}}
13875|      0|	break;
13876|    262|	case 145:
  ------------------
  |  Branch (13876:2): [True: 262, False: 536k]
  ------------------
13877|    262|#line 166 "src/char_ref.rl"
13878|    262|	{te = p+1;{output[0]=0x120; {p++; goto _out; }}}
13879|      0|	break;
13880|    483|	case 146:
  ------------------
  |  Branch (13880:2): [True: 483, False: 535k]
  ------------------
13881|    483|#line 167 "src/char_ref.rl"
13882|    483|	{te = p+1;{output[0]=0x1d50a; {p++; goto _out; }}}
13883|      0|	break;
13884|    217|	case 147:
  ------------------
  |  Branch (13884:2): [True: 217, False: 536k]
  ------------------
13885|    217|#line 168 "src/char_ref.rl"
13886|    217|	{te = p+1;{output[0]=0x22d9; {p++; goto _out; }}}
13887|      0|	break;
13888|    332|	case 148:
  ------------------
  |  Branch (13888:2): [True: 332, False: 535k]
  ------------------
13889|    332|#line 169 "src/char_ref.rl"
13890|    332|	{te = p+1;{output[0]=0x1d53e; {p++; goto _out; }}}
13891|      0|	break;
13892|      0|	case 149:
  ------------------
  |  Branch (13892:2): [True: 0, False: 536k]
  ------------------
13893|      0|#line 170 "src/char_ref.rl"
13894|      0|	{te = p+1;{output[0]=0x2265; {p++; goto _out; }}}
13895|      0|	break;
13896|      0|	case 150:
  ------------------
  |  Branch (13896:2): [True: 0, False: 536k]
  ------------------
13897|      0|#line 171 "src/char_ref.rl"
13898|      0|	{te = p+1;{output[0]=0x22db; {p++; goto _out; }}}
13899|      0|	break;
13900|      0|	case 151:
  ------------------
  |  Branch (13900:2): [True: 0, False: 536k]
  ------------------
13901|      0|#line 172 "src/char_ref.rl"
13902|      0|	{te = p+1;{output[0]=0x2267; {p++; goto _out; }}}
13903|      0|	break;
13904|      0|	case 152:
  ------------------
  |  Branch (13904:2): [True: 0, False: 536k]
  ------------------
13905|      0|#line 173 "src/char_ref.rl"
13906|      0|	{te = p+1;{output[0]=0x2aa2; {p++; goto _out; }}}
13907|      0|	break;
13908|      0|	case 153:
  ------------------
  |  Branch (13908:2): [True: 0, False: 536k]
  ------------------
13909|      0|#line 174 "src/char_ref.rl"
13910|      0|	{te = p+1;{output[0]=0x2277; {p++; goto _out; }}}
13911|      0|	break;
13912|      0|	case 154:
  ------------------
  |  Branch (13912:2): [True: 0, False: 536k]
  ------------------
13913|      0|#line 175 "src/char_ref.rl"
13914|      0|	{te = p+1;{output[0]=0x2a7e; {p++; goto _out; }}}
13915|      0|	break;
13916|      0|	case 155:
  ------------------
  |  Branch (13916:2): [True: 0, False: 536k]
  ------------------
13917|      0|#line 176 "src/char_ref.rl"
13918|      0|	{te = p+1;{output[0]=0x2273; {p++; goto _out; }}}
13919|      0|	break;
13920|    213|	case 156:
  ------------------
  |  Branch (13920:2): [True: 213, False: 536k]
  ------------------
13921|    213|#line 177 "src/char_ref.rl"
13922|    213|	{te = p+1;{output[0]=0x1d4a2; {p++; goto _out; }}}
13923|      0|	break;
13924|    339|	case 157:
  ------------------
  |  Branch (13924:2): [True: 339, False: 535k]
  ------------------
13925|    339|#line 178 "src/char_ref.rl"
13926|    339|	{te = p+1;{output[0]=0x226b; {p++; goto _out; }}}
13927|      0|	break;
13928|    222|	case 158:
  ------------------
  |  Branch (13928:2): [True: 222, False: 536k]
  ------------------
13929|    222|#line 179 "src/char_ref.rl"
13930|    222|	{te = p+1;{output[0]=0x42a; {p++; goto _out; }}}
13931|      0|	break;
13932|    203|	case 159:
  ------------------
  |  Branch (13932:2): [True: 203, False: 536k]
  ------------------
13933|    203|#line 180 "src/char_ref.rl"
13934|    203|	{te = p+1;{output[0]=0x2c7; {p++; goto _out; }}}
13935|      0|	break;
13936|    229|	case 160:
  ------------------
  |  Branch (13936:2): [True: 229, False: 536k]
  ------------------
13937|    229|#line 181 "src/char_ref.rl"
13938|    229|	{te = p+1;{output[0]=0x5e; {p++; goto _out; }}}
13939|      0|	break;
13940|    215|	case 161:
  ------------------
  |  Branch (13940:2): [True: 215, False: 536k]
  ------------------
13941|    215|#line 182 "src/char_ref.rl"
13942|    215|	{te = p+1;{output[0]=0x124; {p++; goto _out; }}}
13943|      0|	break;
13944|    228|	case 162:
  ------------------
  |  Branch (13944:2): [True: 228, False: 536k]
  ------------------
13945|    228|#line 183 "src/char_ref.rl"
13946|    228|	{te = p+1;{output[0]=0x210c; {p++; goto _out; }}}
13947|      0|	break;
13948|      0|	case 163:
  ------------------
  |  Branch (13948:2): [True: 0, False: 536k]
  ------------------
13949|      0|#line 184 "src/char_ref.rl"
13950|      0|	{te = p+1;{output[0]=0x210b; {p++; goto _out; }}}
13951|      0|	break;
13952|    226|	case 164:
  ------------------
  |  Branch (13952:2): [True: 226, False: 536k]
  ------------------
13953|    226|#line 185 "src/char_ref.rl"
13954|    226|	{te = p+1;{output[0]=0x210d; {p++; goto _out; }}}
13955|      0|	break;
13956|      0|	case 165:
  ------------------
  |  Branch (13956:2): [True: 0, False: 536k]
  ------------------
13957|      0|#line 186 "src/char_ref.rl"
13958|      0|	{te = p+1;{output[0]=0x2500; {p++; goto _out; }}}
13959|      0|	break;
13960|    270|	case 166:
  ------------------
  |  Branch (13960:2): [True: 270, False: 536k]
  ------------------
13961|    270|#line 187 "src/char_ref.rl"
13962|    270|	{te = p+1;{output[0]=0x210b; {p++; goto _out; }}}
13963|      0|	break;
13964|    307|	case 167:
  ------------------
  |  Branch (13964:2): [True: 307, False: 536k]
  ------------------
13965|    307|#line 188 "src/char_ref.rl"
13966|    307|	{te = p+1;{output[0]=0x126; {p++; goto _out; }}}
13967|      0|	break;
13968|      0|	case 168:
  ------------------
  |  Branch (13968:2): [True: 0, False: 536k]
  ------------------
13969|      0|#line 189 "src/char_ref.rl"
13970|      0|	{te = p+1;{output[0]=0x224e; {p++; goto _out; }}}
13971|      0|	break;
13972|      0|	case 169:
  ------------------
  |  Branch (13972:2): [True: 0, False: 536k]
  ------------------
13973|      0|#line 190 "src/char_ref.rl"
13974|      0|	{te = p+1;{output[0]=0x224f; {p++; goto _out; }}}
13975|      0|	break;
13976|    247|	case 170:
  ------------------
  |  Branch (13976:2): [True: 247, False: 536k]
  ------------------
13977|    247|#line 191 "src/char_ref.rl"
13978|    247|	{te = p+1;{output[0]=0x415; {p++; goto _out; }}}
13979|      0|	break;
13980|    248|	case 171:
  ------------------
  |  Branch (13980:2): [True: 248, False: 536k]
  ------------------
13981|    248|#line 192 "src/char_ref.rl"
13982|    248|	{te = p+1;{output[0]=0x132; {p++; goto _out; }}}
13983|      0|	break;
13984|    201|	case 172:
  ------------------
  |  Branch (13984:2): [True: 201, False: 536k]
  ------------------
13985|    201|#line 193 "src/char_ref.rl"
13986|    201|	{te = p+1;{output[0]=0x401; {p++; goto _out; }}}
13987|      0|	break;
13988|    206|	case 2064:
  ------------------
  |  Branch (13988:2): [True: 206, False: 536k]
  ------------------
13989|    206|#line 194 "src/char_ref.rl"
13990|    206|	{te = p+1;{output[0]=0xcd; {p++; goto _out; }}}
13991|      0|	break;
13992|    266|	case 2066:
  ------------------
  |  Branch (13992:2): [True: 266, False: 536k]
  ------------------
13993|    266|#line 195 "src/char_ref.rl"
13994|    266|	{te = p+1;{output[0]=0xce; {p++; goto _out; }}}
13995|      0|	break;
13996|    309|	case 173:
  ------------------
  |  Branch (13996:2): [True: 309, False: 536k]
  ------------------
13997|    309|#line 196 "src/char_ref.rl"
13998|    309|	{te = p+1;{output[0]=0x418; {p++; goto _out; }}}
13999|      0|	break;
14000|    208|	case 174:
  ------------------
  |  Branch (14000:2): [True: 208, False: 536k]
  ------------------
14001|    208|#line 197 "src/char_ref.rl"
14002|    208|	{te = p+1;{output[0]=0x130; {p++; goto _out; }}}
14003|      0|	break;
14004|    248|	case 175:
  ------------------
  |  Branch (14004:2): [True: 248, False: 536k]
  ------------------
14005|    248|#line 198 "src/char_ref.rl"
14006|    248|	{te = p+1;{output[0]=0x2111; {p++; goto _out; }}}
14007|      0|	break;
14008|    198|	case 2068:
  ------------------
  |  Branch (14008:2): [True: 198, False: 536k]
  ------------------
14009|    198|#line 199 "src/char_ref.rl"
14010|    198|	{te = p+1;{output[0]=0xcc; {p++; goto _out; }}}
14011|      0|	break;
14012|    288|	case 176:
  ------------------
  |  Branch (14012:2): [True: 288, False: 536k]
  ------------------
14013|    288|#line 200 "src/char_ref.rl"
14014|    288|	{te = p+1;{output[0]=0x2111; {p++; goto _out; }}}
14015|      0|	break;
14016|    263|	case 177:
  ------------------
  |  Branch (14016:2): [True: 263, False: 536k]
  ------------------
14017|    263|#line 201 "src/char_ref.rl"
14018|    263|	{te = p+1;{output[0]=0x12a; {p++; goto _out; }}}
14019|      0|	break;
14020|      0|	case 178:
  ------------------
  |  Branch (14020:2): [True: 0, False: 536k]
  ------------------
14021|      0|#line 202 "src/char_ref.rl"
14022|      0|	{te = p+1;{output[0]=0x2148; {p++; goto _out; }}}
14023|      0|	break;
14024|      0|	case 179:
  ------------------
  |  Branch (14024:2): [True: 0, False: 536k]
  ------------------
14025|      0|#line 203 "src/char_ref.rl"
14026|      0|	{te = p+1;{output[0]=0x21d2; {p++; goto _out; }}}
14027|      0|	break;
14028|    354|	case 180:
  ------------------
  |  Branch (14028:2): [True: 354, False: 535k]
  ------------------
14029|    354|#line 204 "src/char_ref.rl"
14030|    354|	{te = p+1;{output[0]=0x222c; {p++; goto _out; }}}
14031|      0|	break;
14032|      0|	case 181:
  ------------------
  |  Branch (14032:2): [True: 0, False: 536k]
  ------------------
14033|      0|#line 205 "src/char_ref.rl"
14034|      0|	{te = p+1;{output[0]=0x222b; {p++; goto _out; }}}
14035|      0|	break;
14036|      0|	case 182:
  ------------------
  |  Branch (14036:2): [True: 0, False: 536k]
  ------------------
14037|      0|#line 206 "src/char_ref.rl"
14038|      0|	{te = p+1;{output[0]=0x22c2; {p++; goto _out; }}}
14039|      0|	break;
14040|      0|	case 183:
  ------------------
  |  Branch (14040:2): [True: 0, False: 536k]
  ------------------
14041|      0|#line 207 "src/char_ref.rl"
14042|      0|	{te = p+1;{output[0]=0x2063; {p++; goto _out; }}}
14043|      0|	break;
14044|      0|	case 184:
  ------------------
  |  Branch (14044:2): [True: 0, False: 536k]
  ------------------
14045|      0|#line 208 "src/char_ref.rl"
14046|      0|	{te = p+1;{output[0]=0x2062; {p++; goto _out; }}}
14047|      0|	break;
14048|    244|	case 185:
  ------------------
  |  Branch (14048:2): [True: 244, False: 536k]
  ------------------
14049|    244|#line 209 "src/char_ref.rl"
14050|    244|	{te = p+1;{output[0]=0x12e; {p++; goto _out; }}}
14051|      0|	break;
14052|    242|	case 186:
  ------------------
  |  Branch (14052:2): [True: 242, False: 536k]
  ------------------
14053|    242|#line 210 "src/char_ref.rl"
14054|    242|	{te = p+1;{output[0]=0x1d540; {p++; goto _out; }}}
14055|      0|	break;
14056|    218|	case 187:
  ------------------
  |  Branch (14056:2): [True: 218, False: 536k]
  ------------------
14057|    218|#line 211 "src/char_ref.rl"
14058|    218|	{te = p+1;{output[0]=0x399; {p++; goto _out; }}}
14059|      0|	break;
14060|    204|	case 188:
  ------------------
  |  Branch (14060:2): [True: 204, False: 536k]
  ------------------
14061|    204|#line 212 "src/char_ref.rl"
14062|    204|	{te = p+1;{output[0]=0x2110; {p++; goto _out; }}}
14063|      0|	break;
14064|    198|	case 189:
  ------------------
  |  Branch (14064:2): [True: 198, False: 536k]
  ------------------
14065|    198|#line 213 "src/char_ref.rl"
14066|    198|	{te = p+1;{output[0]=0x128; {p++; goto _out; }}}
14067|      0|	break;
14068|    247|	case 190:
  ------------------
  |  Branch (14068:2): [True: 247, False: 536k]
  ------------------
14069|    247|#line 214 "src/char_ref.rl"
14070|    247|	{te = p+1;{output[0]=0x406; {p++; goto _out; }}}
14071|      0|	break;
14072|    236|	case 2070:
  ------------------
  |  Branch (14072:2): [True: 236, False: 536k]
  ------------------
14073|    236|#line 215 "src/char_ref.rl"
14074|    236|	{te = p+1;{output[0]=0xcf; {p++; goto _out; }}}
14075|      0|	break;
14076|    252|	case 191:
  ------------------
  |  Branch (14076:2): [True: 252, False: 536k]
  ------------------
14077|    252|#line 216 "src/char_ref.rl"
14078|    252|	{te = p+1;{output[0]=0x134; {p++; goto _out; }}}
14079|      0|	break;
14080|    317|	case 192:
  ------------------
  |  Branch (14080:2): [True: 317, False: 536k]
  ------------------
14081|    317|#line 217 "src/char_ref.rl"
14082|    317|	{te = p+1;{output[0]=0x419; {p++; goto _out; }}}
14083|      0|	break;
14084|    242|	case 193:
  ------------------
  |  Branch (14084:2): [True: 242, False: 536k]
  ------------------
14085|    242|#line 218 "src/char_ref.rl"
14086|    242|	{te = p+1;{output[0]=0x1d50d; {p++; goto _out; }}}
14087|      0|	break;
14088|    421|	case 194:
  ------------------
  |  Branch (14088:2): [True: 421, False: 535k]
  ------------------
14089|    421|#line 219 "src/char_ref.rl"
14090|    421|	{te = p+1;{output[0]=0x1d541; {p++; goto _out; }}}
14091|      0|	break;
14092|    483|	case 195:
  ------------------
  |  Branch (14092:2): [True: 483, False: 535k]
  ------------------
14093|    483|#line 220 "src/char_ref.rl"
14094|    483|	{te = p+1;{output[0]=0x1d4a5; {p++; goto _out; }}}
14095|      0|	break;
14096|    195|	case 196:
  ------------------
  |  Branch (14096:2): [True: 195, False: 536k]
  ------------------
14097|    195|#line 221 "src/char_ref.rl"
14098|    195|	{te = p+1;{output[0]=0x408; {p++; goto _out; }}}
14099|      0|	break;
14100|    248|	case 197:
  ------------------
  |  Branch (14100:2): [True: 248, False: 536k]
  ------------------
14101|    248|#line 222 "src/char_ref.rl"
14102|    248|	{te = p+1;{output[0]=0x404; {p++; goto _out; }}}
14103|      0|	break;
14104|    375|	case 198:
  ------------------
  |  Branch (14104:2): [True: 375, False: 535k]
  ------------------
14105|    375|#line 223 "src/char_ref.rl"
14106|    375|	{te = p+1;{output[0]=0x425; {p++; goto _out; }}}
14107|      0|	break;
14108|    310|	case 199:
  ------------------
  |  Branch (14108:2): [True: 310, False: 536k]
  ------------------
14109|    310|#line 224 "src/char_ref.rl"
14110|    310|	{te = p+1;{output[0]=0x40c; {p++; goto _out; }}}
14111|      0|	break;
14112|    210|	case 200:
  ------------------
  |  Branch (14112:2): [True: 210, False: 536k]
  ------------------
14113|    210|#line 225 "src/char_ref.rl"
14114|    210|	{te = p+1;{output[0]=0x39a; {p++; goto _out; }}}
14115|      0|	break;
14116|    204|	case 201:
  ------------------
  |  Branch (14116:2): [True: 204, False: 536k]
  ------------------
14117|    204|#line 226 "src/char_ref.rl"
14118|    204|	{te = p+1;{output[0]=0x136; {p++; goto _out; }}}
14119|      0|	break;
14120|    582|	case 202:
  ------------------
  |  Branch (14120:2): [True: 582, False: 535k]
  ------------------
14121|    582|#line 227 "src/char_ref.rl"
14122|    582|	{te = p+1;{output[0]=0x41a; {p++; goto _out; }}}
14123|      0|	break;
14124|    410|	case 203:
  ------------------
  |  Branch (14124:2): [True: 410, False: 535k]
  ------------------
14125|    410|#line 228 "src/char_ref.rl"
14126|    410|	{te = p+1;{output[0]=0x1d50e; {p++; goto _out; }}}
14127|      0|	break;
14128|    779|	case 204:
  ------------------
  |  Branch (14128:2): [True: 779, False: 535k]
  ------------------
14129|    779|#line 229 "src/char_ref.rl"
14130|    779|	{te = p+1;{output[0]=0x1d542; {p++; goto _out; }}}
14131|      0|	break;
14132|    217|	case 205:
  ------------------
  |  Branch (14132:2): [True: 217, False: 536k]
  ------------------
14133|    217|#line 230 "src/char_ref.rl"
14134|    217|	{te = p+1;{output[0]=0x1d4a6; {p++; goto _out; }}}
14135|      0|	break;
14136|    234|	case 206:
  ------------------
  |  Branch (14136:2): [True: 234, False: 536k]
  ------------------
14137|    234|#line 231 "src/char_ref.rl"
14138|    234|	{te = p+1;{output[0]=0x409; {p++; goto _out; }}}
14139|      0|	break;
14140|    263|	case 2072:
  ------------------
  |  Branch (14140:2): [True: 263, False: 536k]
  ------------------
14141|    263|#line 232 "src/char_ref.rl"
14142|    263|	{te = p+1;{output[0]=0x3c; {p++; goto _out; }}}
14143|      0|	break;
14144|    292|	case 207:
  ------------------
  |  Branch (14144:2): [True: 292, False: 536k]
  ------------------
14145|    292|#line 233 "src/char_ref.rl"
14146|    292|	{te = p+1;{output[0]=0x139; {p++; goto _out; }}}
14147|      0|	break;
14148|      0|	case 208:
  ------------------
  |  Branch (14148:2): [True: 0, False: 536k]
  ------------------
14149|      0|#line 234 "src/char_ref.rl"
14150|      0|	{te = p+1;{output[0]=0x39b; {p++; goto _out; }}}
14151|      0|	break;
14152|    200|	case 209:
  ------------------
  |  Branch (14152:2): [True: 200, False: 536k]
  ------------------
14153|    200|#line 235 "src/char_ref.rl"
14154|    200|	{te = p+1;{output[0]=0x27ea; {p++; goto _out; }}}
14155|      0|	break;
14156|      0|	case 210:
  ------------------
  |  Branch (14156:2): [True: 0, False: 536k]
  ------------------
14157|      0|#line 236 "src/char_ref.rl"
14158|      0|	{te = p+1;{output[0]=0x2112; {p++; goto _out; }}}
14159|      0|	break;
14160|    208|	case 211:
  ------------------
  |  Branch (14160:2): [True: 208, False: 536k]
  ------------------
14161|    208|#line 237 "src/char_ref.rl"
14162|    208|	{te = p+1;{output[0]=0x219e; {p++; goto _out; }}}
14163|      0|	break;
14164|    205|	case 212:
  ------------------
  |  Branch (14164:2): [True: 205, False: 536k]
  ------------------
14165|    205|#line 238 "src/char_ref.rl"
14166|    205|	{te = p+1;{output[0]=0x13d; {p++; goto _out; }}}
14167|      0|	break;
14168|    212|	case 213:
  ------------------
  |  Branch (14168:2): [True: 212, False: 536k]
  ------------------
14169|    212|#line 239 "src/char_ref.rl"
14170|    212|	{te = p+1;{output[0]=0x13b; {p++; goto _out; }}}
14171|      0|	break;
14172|    346|	case 214:
  ------------------
  |  Branch (14172:2): [True: 346, False: 535k]
  ------------------
14173|    346|#line 240 "src/char_ref.rl"
14174|    346|	{te = p+1;{output[0]=0x41b; {p++; goto _out; }}}
14175|      0|	break;
14176|      0|	case 215:
  ------------------
  |  Branch (14176:2): [True: 0, False: 536k]
  ------------------
14177|      0|#line 241 "src/char_ref.rl"
14178|      0|	{te = p+1;{output[0]=0x27e8; {p++; goto _out; }}}
14179|      0|	break;
14180|      0|	case 216:
  ------------------
  |  Branch (14180:2): [True: 0, False: 536k]
  ------------------
14181|      0|#line 242 "src/char_ref.rl"
14182|      0|	{te = p+1;{output[0]=0x2190; {p++; goto _out; }}}
14183|      0|	break;
14184|      0|	case 217:
  ------------------
  |  Branch (14184:2): [True: 0, False: 536k]
  ------------------
14185|      0|#line 243 "src/char_ref.rl"
14186|      0|	{te = p+1;{output[0]=0x21e4; {p++; goto _out; }}}
14187|      0|	break;
14188|      0|	case 218:
  ------------------
  |  Branch (14188:2): [True: 0, False: 536k]
  ------------------
14189|      0|#line 244 "src/char_ref.rl"
14190|      0|	{te = p+1;{output[0]=0x21c6; {p++; goto _out; }}}
14191|      0|	break;
14192|      0|	case 219:
  ------------------
  |  Branch (14192:2): [True: 0, False: 536k]
  ------------------
14193|      0|#line 245 "src/char_ref.rl"
14194|      0|	{te = p+1;{output[0]=0x2308; {p++; goto _out; }}}
14195|      0|	break;
14196|      0|	case 220:
  ------------------
  |  Branch (14196:2): [True: 0, False: 536k]
  ------------------
14197|      0|#line 246 "src/char_ref.rl"
14198|      0|	{te = p+1;{output[0]=0x27e6; {p++; goto _out; }}}
14199|      0|	break;
14200|      0|	case 221:
  ------------------
  |  Branch (14200:2): [True: 0, False: 536k]
  ------------------
14201|      0|#line 247 "src/char_ref.rl"
14202|      0|	{te = p+1;{output[0]=0x2961; {p++; goto _out; }}}
14203|      0|	break;
14204|      0|	case 222:
  ------------------
  |  Branch (14204:2): [True: 0, False: 536k]
  ------------------
14205|      0|#line 248 "src/char_ref.rl"
14206|      0|	{te = p+1;{output[0]=0x21c3; {p++; goto _out; }}}
14207|      0|	break;
14208|      0|	case 223:
  ------------------
  |  Branch (14208:2): [True: 0, False: 536k]
  ------------------
14209|      0|#line 249 "src/char_ref.rl"
14210|      0|	{te = p+1;{output[0]=0x2959; {p++; goto _out; }}}
14211|      0|	break;
14212|      0|	case 224:
  ------------------
  |  Branch (14212:2): [True: 0, False: 536k]
  ------------------
14213|      0|#line 250 "src/char_ref.rl"
14214|      0|	{te = p+1;{output[0]=0x230a; {p++; goto _out; }}}
14215|      0|	break;
14216|      0|	case 225:
  ------------------
  |  Branch (14216:2): [True: 0, False: 536k]
  ------------------
14217|      0|#line 251 "src/char_ref.rl"
14218|      0|	{te = p+1;{output[0]=0x2194; {p++; goto _out; }}}
14219|      0|	break;
14220|      0|	case 226:
  ------------------
  |  Branch (14220:2): [True: 0, False: 536k]
  ------------------
14221|      0|#line 252 "src/char_ref.rl"
14222|      0|	{te = p+1;{output[0]=0x294e; {p++; goto _out; }}}
14223|      0|	break;
14224|      0|	case 227:
  ------------------
  |  Branch (14224:2): [True: 0, False: 536k]
  ------------------
14225|      0|#line 253 "src/char_ref.rl"
14226|      0|	{te = p+1;{output[0]=0x22a3; {p++; goto _out; }}}
14227|      0|	break;
14228|      0|	case 228:
  ------------------
  |  Branch (14228:2): [True: 0, False: 536k]
  ------------------
14229|      0|#line 254 "src/char_ref.rl"
14230|      0|	{te = p+1;{output[0]=0x21a4; {p++; goto _out; }}}
14231|      0|	break;
14232|      0|	case 229:
  ------------------
  |  Branch (14232:2): [True: 0, False: 536k]
  ------------------
14233|      0|#line 255 "src/char_ref.rl"
14234|      0|	{te = p+1;{output[0]=0x295a; {p++; goto _out; }}}
14235|      0|	break;
14236|      0|	case 230:
  ------------------
  |  Branch (14236:2): [True: 0, False: 536k]
  ------------------
14237|      0|#line 256 "src/char_ref.rl"
14238|      0|	{te = p+1;{output[0]=0x22b2; {p++; goto _out; }}}
14239|      0|	break;
14240|      0|	case 231:
  ------------------
  |  Branch (14240:2): [True: 0, False: 536k]
  ------------------
14241|      0|#line 257 "src/char_ref.rl"
14242|      0|	{te = p+1;{output[0]=0x29cf; {p++; goto _out; }}}
14243|      0|	break;
14244|      0|	case 232:
  ------------------
  |  Branch (14244:2): [True: 0, False: 536k]
  ------------------
14245|      0|#line 258 "src/char_ref.rl"
14246|      0|	{te = p+1;{output[0]=0x22b4; {p++; goto _out; }}}
14247|      0|	break;
14248|      0|	case 233:
  ------------------
  |  Branch (14248:2): [True: 0, False: 536k]
  ------------------
14249|      0|#line 259 "src/char_ref.rl"
14250|      0|	{te = p+1;{output[0]=0x2951; {p++; goto _out; }}}
14251|      0|	break;
14252|      0|	case 234:
  ------------------
  |  Branch (14252:2): [True: 0, False: 536k]
  ------------------
14253|      0|#line 260 "src/char_ref.rl"
14254|      0|	{te = p+1;{output[0]=0x2960; {p++; goto _out; }}}
14255|      0|	break;
14256|      0|	case 235:
  ------------------
  |  Branch (14256:2): [True: 0, False: 536k]
  ------------------
14257|      0|#line 261 "src/char_ref.rl"
14258|      0|	{te = p+1;{output[0]=0x21bf; {p++; goto _out; }}}
14259|      0|	break;
14260|      0|	case 236:
  ------------------
  |  Branch (14260:2): [True: 0, False: 536k]
  ------------------
14261|      0|#line 262 "src/char_ref.rl"
14262|      0|	{te = p+1;{output[0]=0x2958; {p++; goto _out; }}}
14263|      0|	break;
14264|      0|	case 237:
  ------------------
  |  Branch (14264:2): [True: 0, False: 536k]
  ------------------
14265|      0|#line 263 "src/char_ref.rl"
14266|      0|	{te = p+1;{output[0]=0x21bc; {p++; goto _out; }}}
14267|      0|	break;
14268|      0|	case 238:
  ------------------
  |  Branch (14268:2): [True: 0, False: 536k]
  ------------------
14269|      0|#line 264 "src/char_ref.rl"
14270|      0|	{te = p+1;{output[0]=0x2952; {p++; goto _out; }}}
14271|      0|	break;
14272|      0|	case 239:
  ------------------
  |  Branch (14272:2): [True: 0, False: 536k]
  ------------------
14273|      0|#line 265 "src/char_ref.rl"
14274|      0|	{te = p+1;{output[0]=0x21d0; {p++; goto _out; }}}
14275|      0|	break;
14276|      0|	case 240:
  ------------------
  |  Branch (14276:2): [True: 0, False: 536k]
  ------------------
14277|      0|#line 266 "src/char_ref.rl"
14278|      0|	{te = p+1;{output[0]=0x21d4; {p++; goto _out; }}}
14279|      0|	break;
14280|      0|	case 241:
  ------------------
  |  Branch (14280:2): [True: 0, False: 536k]
  ------------------
14281|      0|#line 267 "src/char_ref.rl"
14282|      0|	{te = p+1;{output[0]=0x22da; {p++; goto _out; }}}
14283|      0|	break;
14284|      0|	case 242:
  ------------------
  |  Branch (14284:2): [True: 0, False: 536k]
  ------------------
14285|      0|#line 268 "src/char_ref.rl"
14286|      0|	{te = p+1;{output[0]=0x2266; {p++; goto _out; }}}
14287|      0|	break;
14288|      0|	case 243:
  ------------------
  |  Branch (14288:2): [True: 0, False: 536k]
  ------------------
14289|      0|#line 269 "src/char_ref.rl"
14290|      0|	{te = p+1;{output[0]=0x2276; {p++; goto _out; }}}
14291|      0|	break;
14292|    200|	case 244:
  ------------------
  |  Branch (14292:2): [True: 200, False: 536k]
  ------------------
14293|    200|#line 270 "src/char_ref.rl"
14294|    200|	{te = p+1;{output[0]=0x2aa1; {p++; goto _out; }}}
14295|      0|	break;
14296|      0|	case 245:
  ------------------
  |  Branch (14296:2): [True: 0, False: 536k]
  ------------------
14297|      0|#line 271 "src/char_ref.rl"
14298|      0|	{te = p+1;{output[0]=0x2a7d; {p++; goto _out; }}}
14299|      0|	break;
14300|    195|	case 246:
  ------------------
  |  Branch (14300:2): [True: 195, False: 536k]
  ------------------
14301|    195|#line 272 "src/char_ref.rl"
14302|    195|	{te = p+1;{output[0]=0x2272; {p++; goto _out; }}}
14303|      0|	break;
14304|    230|	case 247:
  ------------------
  |  Branch (14304:2): [True: 230, False: 536k]
  ------------------
14305|    230|#line 273 "src/char_ref.rl"
14306|    230|	{te = p+1;{output[0]=0x1d50f; {p++; goto _out; }}}
14307|      0|	break;
14308|    493|	case 248:
  ------------------
  |  Branch (14308:2): [True: 493, False: 535k]
  ------------------
14309|    493|#line 274 "src/char_ref.rl"
14310|    493|	{te = p+1;{output[0]=0x22d8; {p++; goto _out; }}}
14311|      0|	break;
14312|      0|	case 249:
  ------------------
  |  Branch (14312:2): [True: 0, False: 536k]
  ------------------
14313|      0|#line 275 "src/char_ref.rl"
14314|      0|	{te = p+1;{output[0]=0x21da; {p++; goto _out; }}}
14315|      0|	break;
14316|    292|	case 250:
  ------------------
  |  Branch (14316:2): [True: 292, False: 536k]
  ------------------
14317|    292|#line 276 "src/char_ref.rl"
14318|    292|	{te = p+1;{output[0]=0x13f; {p++; goto _out; }}}
14319|      0|	break;
14320|      0|	case 251:
  ------------------
  |  Branch (14320:2): [True: 0, False: 536k]
  ------------------
14321|      0|#line 277 "src/char_ref.rl"
14322|      0|	{te = p+1;{output[0]=0x27f5; {p++; goto _out; }}}
14323|      0|	break;
14324|      0|	case 252:
  ------------------
  |  Branch (14324:2): [True: 0, False: 536k]
  ------------------
14325|      0|#line 278 "src/char_ref.rl"
14326|      0|	{te = p+1;{output[0]=0x27f7; {p++; goto _out; }}}
14327|      0|	break;
14328|      0|	case 253:
  ------------------
  |  Branch (14328:2): [True: 0, False: 536k]
  ------------------
14329|      0|#line 279 "src/char_ref.rl"
14330|      0|	{te = p+1;{output[0]=0x27f6; {p++; goto _out; }}}
14331|      0|	break;
14332|      0|	case 254:
  ------------------
  |  Branch (14332:2): [True: 0, False: 536k]
  ------------------
14333|      0|#line 280 "src/char_ref.rl"
14334|      0|	{te = p+1;{output[0]=0x27f8; {p++; goto _out; }}}
14335|      0|	break;
14336|      0|	case 255:
  ------------------
  |  Branch (14336:2): [True: 0, False: 536k]
  ------------------
14337|      0|#line 281 "src/char_ref.rl"
14338|      0|	{te = p+1;{output[0]=0x27fa; {p++; goto _out; }}}
14339|      0|	break;
14340|      0|	case 256:
  ------------------
  |  Branch (14340:2): [True: 0, False: 536k]
  ------------------
14341|      0|#line 282 "src/char_ref.rl"
14342|      0|	{te = p+1;{output[0]=0x27f9; {p++; goto _out; }}}
14343|      0|	break;
14344|    382|	case 257:
  ------------------
  |  Branch (14344:2): [True: 382, False: 535k]
  ------------------
14345|    382|#line 283 "src/char_ref.rl"
14346|    382|	{te = p+1;{output[0]=0x1d543; {p++; goto _out; }}}
14347|      0|	break;
14348|      0|	case 258:
  ------------------
  |  Branch (14348:2): [True: 0, False: 536k]
  ------------------
14349|      0|#line 284 "src/char_ref.rl"
14350|      0|	{te = p+1;{output[0]=0x2199; {p++; goto _out; }}}
14351|      0|	break;
14352|      0|	case 259:
  ------------------
  |  Branch (14352:2): [True: 0, False: 536k]
  ------------------
14353|      0|#line 285 "src/char_ref.rl"
14354|      0|	{te = p+1;{output[0]=0x2198; {p++; goto _out; }}}
14355|      0|	break;
14356|    396|	case 260:
  ------------------
  |  Branch (14356:2): [True: 396, False: 535k]
  ------------------
14357|    396|#line 286 "src/char_ref.rl"
14358|    396|	{te = p+1;{output[0]=0x2112; {p++; goto _out; }}}
14359|      0|	break;
14360|    219|	case 261:
  ------------------
  |  Branch (14360:2): [True: 219, False: 536k]
  ------------------
14361|    219|#line 287 "src/char_ref.rl"
14362|    219|	{te = p+1;{output[0]=0x21b0; {p++; goto _out; }}}
14363|      0|	break;
14364|    206|	case 262:
  ------------------
  |  Branch (14364:2): [True: 206, False: 536k]
  ------------------
14365|    206|#line 288 "src/char_ref.rl"
14366|    206|	{te = p+1;{output[0]=0x141; {p++; goto _out; }}}
14367|      0|	break;
14368|    254|	case 263:
  ------------------
  |  Branch (14368:2): [True: 254, False: 536k]
  ------------------
14369|    254|#line 289 "src/char_ref.rl"
14370|    254|	{te = p+1;{output[0]=0x226a; {p++; goto _out; }}}
14371|      0|	break;
14372|    330|	case 264:
  ------------------
  |  Branch (14372:2): [True: 330, False: 535k]
  ------------------
14373|    330|#line 290 "src/char_ref.rl"
14374|    330|	{te = p+1;{output[0]=0x2905; {p++; goto _out; }}}
14375|      0|	break;
14376|    210|	case 265:
  ------------------
  |  Branch (14376:2): [True: 210, False: 536k]
  ------------------
14377|    210|#line 291 "src/char_ref.rl"
14378|    210|	{te = p+1;{output[0]=0x41c; {p++; goto _out; }}}
14379|      0|	break;
14380|      0|	case 266:
  ------------------
  |  Branch (14380:2): [True: 0, False: 536k]
  ------------------
14381|      0|#line 292 "src/char_ref.rl"
14382|      0|	{te = p+1;{output[0]=0x205f; {p++; goto _out; }}}
14383|      0|	break;
14384|      0|	case 267:
  ------------------
  |  Branch (14384:2): [True: 0, False: 536k]
  ------------------
14385|      0|#line 293 "src/char_ref.rl"
14386|      0|	{te = p+1;{output[0]=0x2133; {p++; goto _out; }}}
14387|      0|	break;
14388|    198|	case 268:
  ------------------
  |  Branch (14388:2): [True: 198, False: 536k]
  ------------------
14389|    198|#line 294 "src/char_ref.rl"
14390|    198|	{te = p+1;{output[0]=0x1d510; {p++; goto _out; }}}
14391|      0|	break;
14392|      0|	case 269:
  ------------------
  |  Branch (14392:2): [True: 0, False: 536k]
  ------------------
14393|      0|#line 295 "src/char_ref.rl"
14394|      0|	{te = p+1;{output[0]=0x2213; {p++; goto _out; }}}
14395|      0|	break;
14396|    328|	case 270:
  ------------------
  |  Branch (14396:2): [True: 328, False: 535k]
  ------------------
14397|    328|#line 296 "src/char_ref.rl"
14398|    328|	{te = p+1;{output[0]=0x1d544; {p++; goto _out; }}}
14399|      0|	break;
14400|    305|	case 271:
  ------------------
  |  Branch (14400:2): [True: 305, False: 536k]
  ------------------
14401|    305|#line 297 "src/char_ref.rl"
14402|    305|	{te = p+1;{output[0]=0x2133; {p++; goto _out; }}}
14403|      0|	break;
14404|    268|	case 272:
  ------------------
  |  Branch (14404:2): [True: 268, False: 536k]
  ------------------
14405|    268|#line 298 "src/char_ref.rl"
14406|    268|	{te = p+1;{output[0]=0x39c; {p++; goto _out; }}}
14407|      0|	break;
14408|    199|	case 273:
  ------------------
  |  Branch (14408:2): [True: 199, False: 536k]
  ------------------
14409|    199|#line 299 "src/char_ref.rl"
14410|    199|	{te = p+1;{output[0]=0x40a; {p++; goto _out; }}}
14411|      0|	break;
14412|    199|	case 274:
  ------------------
  |  Branch (14412:2): [True: 199, False: 536k]
  ------------------
14413|    199|#line 300 "src/char_ref.rl"
14414|    199|	{te = p+1;{output[0]=0x143; {p++; goto _out; }}}
14415|      0|	break;
14416|    211|	case 275:
  ------------------
  |  Branch (14416:2): [True: 211, False: 536k]
  ------------------
14417|    211|#line 301 "src/char_ref.rl"
14418|    211|	{te = p+1;{output[0]=0x147; {p++; goto _out; }}}
14419|      0|	break;
14420|    448|	case 276:
  ------------------
  |  Branch (14420:2): [True: 448, False: 535k]
  ------------------
14421|    448|#line 302 "src/char_ref.rl"
14422|    448|	{te = p+1;{output[0]=0x145; {p++; goto _out; }}}
14423|      0|	break;
14424|    341|	case 277:
  ------------------
  |  Branch (14424:2): [True: 341, False: 535k]
  ------------------
14425|    341|#line 303 "src/char_ref.rl"
14426|    341|	{te = p+1;{output[0]=0x41d; {p++; goto _out; }}}
14427|      0|	break;
14428|      0|	case 278:
  ------------------
  |  Branch (14428:2): [True: 0, False: 536k]
  ------------------
14429|      0|#line 304 "src/char_ref.rl"
14430|      0|	{te = p+1;{output[0]=0x200b; {p++; goto _out; }}}
14431|      0|	break;
14432|      0|	case 279:
  ------------------
  |  Branch (14432:2): [True: 0, False: 536k]
  ------------------
14433|      0|#line 305 "src/char_ref.rl"
14434|      0|	{te = p+1;{output[0]=0x200b; {p++; goto _out; }}}
14435|      0|	break;
14436|      0|	case 280:
  ------------------
  |  Branch (14436:2): [True: 0, False: 536k]
  ------------------
14437|      0|#line 306 "src/char_ref.rl"
14438|      0|	{te = p+1;{output[0]=0x200b; {p++; goto _out; }}}
14439|      0|	break;
14440|      0|	case 281:
  ------------------
  |  Branch (14440:2): [True: 0, False: 536k]
  ------------------
14441|      0|#line 307 "src/char_ref.rl"
14442|      0|	{te = p+1;{output[0]=0x200b; {p++; goto _out; }}}
14443|      0|	break;
14444|      0|	case 282:
  ------------------
  |  Branch (14444:2): [True: 0, False: 536k]
  ------------------
14445|      0|#line 308 "src/char_ref.rl"
14446|      0|	{te = p+1;{output[0]=0x226b; {p++; goto _out; }}}
14447|      0|	break;
14448|      0|	case 283:
  ------------------
  |  Branch (14448:2): [True: 0, False: 536k]
  ------------------
14449|      0|#line 309 "src/char_ref.rl"
14450|      0|	{te = p+1;{output[0]=0x226a; {p++; goto _out; }}}
14451|      0|	break;
14452|      0|	case 284:
  ------------------
  |  Branch (14452:2): [True: 0, False: 536k]
  ------------------
14453|      0|#line 310 "src/char_ref.rl"
14454|      0|	{te = p+1;{output[0]=0x0a; {p++; goto _out; }}}
14455|      0|	break;
14456|    340|	case 285:
  ------------------
  |  Branch (14456:2): [True: 340, False: 535k]
  ------------------
14457|    340|#line 311 "src/char_ref.rl"
14458|    340|	{te = p+1;{output[0]=0x1d511; {p++; goto _out; }}}
14459|      0|	break;
14460|      0|	case 286:
  ------------------
  |  Branch (14460:2): [True: 0, False: 536k]
  ------------------
14461|      0|#line 312 "src/char_ref.rl"
14462|      0|	{te = p+1;{output[0]=0x2060; {p++; goto _out; }}}
14463|      0|	break;
14464|      0|	case 287:
  ------------------
  |  Branch (14464:2): [True: 0, False: 536k]
  ------------------
14465|      0|#line 313 "src/char_ref.rl"
14466|      0|	{te = p+1;{output[0]=0xa0; {p++; goto _out; }}}
14467|      0|	break;
14468|    246|	case 288:
  ------------------
  |  Branch (14468:2): [True: 246, False: 536k]
  ------------------
14469|    246|#line 314 "src/char_ref.rl"
14470|    246|	{te = p+1;{output[0]=0x2115; {p++; goto _out; }}}
14471|      0|	break;
14472|    396|	case 289:
  ------------------
  |  Branch (14472:2): [True: 396, False: 535k]
  ------------------
14473|    396|#line 315 "src/char_ref.rl"
14474|    396|	{te = p+1;{output[0]=0x2aec; {p++; goto _out; }}}
14475|      0|	break;
14476|      0|	case 290:
  ------------------
  |  Branch (14476:2): [True: 0, False: 536k]
  ------------------
14477|      0|#line 316 "src/char_ref.rl"
14478|      0|	{te = p+1;{output[0]=0x2262; {p++; goto _out; }}}
14479|      0|	break;
14480|    194|	case 291:
  ------------------
  |  Branch (14480:2): [True: 194, False: 536k]
  ------------------
14481|    194|#line 317 "src/char_ref.rl"
14482|    194|	{te = p+1;{output[0]=0x226d; {p++; goto _out; }}}
14483|      0|	break;
14484|      0|	case 292:
  ------------------
  |  Branch (14484:2): [True: 0, False: 536k]
  ------------------
14485|      0|#line 318 "src/char_ref.rl"
14486|      0|	{te = p+1;{output[0]=0x2226; {p++; goto _out; }}}
14487|      0|	break;
14488|    195|	case 293:
  ------------------
  |  Branch (14488:2): [True: 195, False: 536k]
  ------------------
14489|    195|#line 319 "src/char_ref.rl"
14490|    195|	{te = p+1;{output[0]=0x2209; {p++; goto _out; }}}
14491|      0|	break;
14492|    202|	case 294:
  ------------------
  |  Branch (14492:2): [True: 202, False: 536k]
  ------------------
14493|    202|#line 320 "src/char_ref.rl"
14494|    202|	{te = p+1;{output[0]=0x2260; {p++; goto _out; }}}
14495|      0|	break;
14496|    203|	case 295:
  ------------------
  |  Branch (14496:2): [True: 203, False: 536k]
  ------------------
14497|    203|#line 321 "src/char_ref.rl"
14498|    203|	{te = p+1;{output[0]=0x2242; output[1]=0x338; {p++; goto _out; }}}
14499|      0|	break;
14500|    210|	case 296:
  ------------------
  |  Branch (14500:2): [True: 210, False: 536k]
  ------------------
14501|    210|#line 322 "src/char_ref.rl"
14502|    210|	{te = p+1;{output[0]=0x2204; {p++; goto _out; }}}
14503|      0|	break;
14504|      0|	case 297:
  ------------------
  |  Branch (14504:2): [True: 0, False: 536k]
  ------------------
14505|      0|#line 323 "src/char_ref.rl"
14506|      0|	{te = p+1;{output[0]=0x226f; {p++; goto _out; }}}
14507|      0|	break;
14508|      0|	case 298:
  ------------------
  |  Branch (14508:2): [True: 0, False: 536k]
  ------------------
14509|      0|#line 324 "src/char_ref.rl"
14510|      0|	{te = p+1;{output[0]=0x2271; {p++; goto _out; }}}
14511|      0|	break;
14512|      0|	case 299:
  ------------------
  |  Branch (14512:2): [True: 0, False: 536k]
  ------------------
14513|      0|#line 325 "src/char_ref.rl"
14514|      0|	{te = p+1;{output[0]=0x2267; output[1]=0x338; {p++; goto _out; }}}
14515|      0|	break;
14516|      0|	case 300:
  ------------------
  |  Branch (14516:2): [True: 0, False: 536k]
  ------------------
14517|      0|#line 326 "src/char_ref.rl"
14518|      0|	{te = p+1;{output[0]=0x226b; output[1]=0x338; {p++; goto _out; }}}
14519|      0|	break;
14520|      0|	case 301:
  ------------------
  |  Branch (14520:2): [True: 0, False: 536k]
  ------------------
14521|      0|#line 327 "src/char_ref.rl"
14522|      0|	{te = p+1;{output[0]=0x2279; {p++; goto _out; }}}
14523|      0|	break;
14524|      0|	case 302:
  ------------------
  |  Branch (14524:2): [True: 0, False: 536k]
  ------------------
14525|      0|#line 328 "src/char_ref.rl"
14526|      0|	{te = p+1;{output[0]=0x2a7e; output[1]=0x338; {p++; goto _out; }}}
14527|      0|	break;
14528|      0|	case 303:
  ------------------
  |  Branch (14528:2): [True: 0, False: 536k]
  ------------------
14529|      0|#line 329 "src/char_ref.rl"
14530|      0|	{te = p+1;{output[0]=0x2275; {p++; goto _out; }}}
14531|      0|	break;
14532|      0|	case 304:
  ------------------
  |  Branch (14532:2): [True: 0, False: 536k]
  ------------------
14533|      0|#line 330 "src/char_ref.rl"
14534|      0|	{te = p+1;{output[0]=0x224e; output[1]=0x338; {p++; goto _out; }}}
14535|      0|	break;
14536|      0|	case 305:
  ------------------
  |  Branch (14536:2): [True: 0, False: 536k]
  ------------------
14537|      0|#line 331 "src/char_ref.rl"
14538|      0|	{te = p+1;{output[0]=0x224f; output[1]=0x338; {p++; goto _out; }}}
14539|      0|	break;
14540|      0|	case 306:
  ------------------
  |  Branch (14540:2): [True: 0, False: 536k]
  ------------------
14541|      0|#line 332 "src/char_ref.rl"
14542|      0|	{te = p+1;{output[0]=0x22ea; {p++; goto _out; }}}
14543|      0|	break;
14544|      0|	case 307:
  ------------------
  |  Branch (14544:2): [True: 0, False: 536k]
  ------------------
14545|      0|#line 333 "src/char_ref.rl"
14546|      0|	{te = p+1;{output[0]=0x29cf; output[1]=0x338; {p++; goto _out; }}}
14547|      0|	break;
14548|      0|	case 308:
  ------------------
  |  Branch (14548:2): [True: 0, False: 536k]
  ------------------
14549|      0|#line 334 "src/char_ref.rl"
14550|      0|	{te = p+1;{output[0]=0x22ec; {p++; goto _out; }}}
14551|      0|	break;
14552|    246|	case 309:
  ------------------
  |  Branch (14552:2): [True: 246, False: 536k]
  ------------------
14553|    246|#line 335 "src/char_ref.rl"
14554|    246|	{te = p+1;{output[0]=0x226e; {p++; goto _out; }}}
14555|      0|	break;
14556|    199|	case 310:
  ------------------
  |  Branch (14556:2): [True: 199, False: 536k]
  ------------------
14557|    199|#line 336 "src/char_ref.rl"
14558|    199|	{te = p+1;{output[0]=0x2270; {p++; goto _out; }}}
14559|      0|	break;
14560|      0|	case 311:
  ------------------
  |  Branch (14560:2): [True: 0, False: 536k]
  ------------------
14561|      0|#line 337 "src/char_ref.rl"
14562|      0|	{te = p+1;{output[0]=0x2278; {p++; goto _out; }}}
14563|      0|	break;
14564|    236|	case 312:
  ------------------
  |  Branch (14564:2): [True: 236, False: 536k]
  ------------------
14565|    236|#line 338 "src/char_ref.rl"
14566|    236|	{te = p+1;{output[0]=0x226a; output[1]=0x338; {p++; goto _out; }}}
14567|      0|	break;
14568|      0|	case 313:
  ------------------
  |  Branch (14568:2): [True: 0, False: 536k]
  ------------------
14569|      0|#line 339 "src/char_ref.rl"
14570|      0|	{te = p+1;{output[0]=0x2a7d; output[1]=0x338; {p++; goto _out; }}}
14571|      0|	break;
14572|    196|	case 314:
  ------------------
  |  Branch (14572:2): [True: 196, False: 536k]
  ------------------
14573|    196|#line 340 "src/char_ref.rl"
14574|    196|	{te = p+1;{output[0]=0x2274; {p++; goto _out; }}}
14575|      0|	break;
14576|      0|	case 315:
  ------------------
  |  Branch (14576:2): [True: 0, False: 536k]
  ------------------
14577|      0|#line 341 "src/char_ref.rl"
14578|      0|	{te = p+1;{output[0]=0x2aa2; output[1]=0x338; {p++; goto _out; }}}
14579|      0|	break;
14580|      0|	case 316:
  ------------------
  |  Branch (14580:2): [True: 0, False: 536k]
  ------------------
14581|      0|#line 342 "src/char_ref.rl"
14582|      0|	{te = p+1;{output[0]=0x2aa1; output[1]=0x338; {p++; goto _out; }}}
14583|      0|	break;
14584|      0|	case 317:
  ------------------
  |  Branch (14584:2): [True: 0, False: 536k]
  ------------------
14585|      0|#line 343 "src/char_ref.rl"
14586|      0|	{te = p+1;{output[0]=0x2280; {p++; goto _out; }}}
14587|      0|	break;
14588|      0|	case 318:
  ------------------
  |  Branch (14588:2): [True: 0, False: 536k]
  ------------------
14589|      0|#line 344 "src/char_ref.rl"
14590|      0|	{te = p+1;{output[0]=0x2aaf; output[1]=0x338; {p++; goto _out; }}}
14591|      0|	break;
14592|      0|	case 319:
  ------------------
  |  Branch (14592:2): [True: 0, False: 536k]
  ------------------
14593|      0|#line 345 "src/char_ref.rl"
14594|      0|	{te = p+1;{output[0]=0x22e0; {p++; goto _out; }}}
14595|      0|	break;
14596|      0|	case 320:
  ------------------
  |  Branch (14596:2): [True: 0, False: 536k]
  ------------------
14597|      0|#line 346 "src/char_ref.rl"
14598|      0|	{te = p+1;{output[0]=0x220c; {p++; goto _out; }}}
14599|      0|	break;
14600|      0|	case 321:
  ------------------
  |  Branch (14600:2): [True: 0, False: 536k]
  ------------------
14601|      0|#line 347 "src/char_ref.rl"
14602|      0|	{te = p+1;{output[0]=0x22eb; {p++; goto _out; }}}
14603|      0|	break;
14604|      0|	case 322:
  ------------------
  |  Branch (14604:2): [True: 0, False: 536k]
  ------------------
14605|      0|#line 348 "src/char_ref.rl"
14606|      0|	{te = p+1;{output[0]=0x29d0; output[1]=0x338; {p++; goto _out; }}}
14607|      0|	break;
14608|      0|	case 323:
  ------------------
  |  Branch (14608:2): [True: 0, False: 536k]
  ------------------
14609|      0|#line 349 "src/char_ref.rl"
14610|      0|	{te = p+1;{output[0]=0x22ed; {p++; goto _out; }}}
14611|      0|	break;
14612|    195|	case 324:
  ------------------
  |  Branch (14612:2): [True: 195, False: 536k]
  ------------------
14613|    195|#line 350 "src/char_ref.rl"
14614|    195|	{te = p+1;{output[0]=0x228f; output[1]=0x338; {p++; goto _out; }}}
14615|      0|	break;
14616|    261|	case 325:
  ------------------
  |  Branch (14616:2): [True: 261, False: 536k]
  ------------------
14617|    261|#line 351 "src/char_ref.rl"
14618|    261|	{te = p+1;{output[0]=0x22e2; {p++; goto _out; }}}
14619|      0|	break;
14620|    208|	case 326:
  ------------------
  |  Branch (14620:2): [True: 208, False: 536k]
  ------------------
14621|    208|#line 352 "src/char_ref.rl"
14622|    208|	{te = p+1;{output[0]=0x2290; output[1]=0x338; {p++; goto _out; }}}
14623|      0|	break;
14624|    197|	case 327:
  ------------------
  |  Branch (14624:2): [True: 197, False: 536k]
  ------------------
14625|    197|#line 353 "src/char_ref.rl"
14626|    197|	{te = p+1;{output[0]=0x22e3; {p++; goto _out; }}}
14627|      0|	break;
14628|    203|	case 328:
  ------------------
  |  Branch (14628:2): [True: 203, False: 536k]
  ------------------
14629|    203|#line 354 "src/char_ref.rl"
14630|    203|	{te = p+1;{output[0]=0x2282; output[1]=0x20d2; {p++; goto _out; }}}
14631|      0|	break;
14632|    201|	case 329:
  ------------------
  |  Branch (14632:2): [True: 201, False: 536k]
  ------------------
14633|    201|#line 355 "src/char_ref.rl"
14634|    201|	{te = p+1;{output[0]=0x2288; {p++; goto _out; }}}
14635|      0|	break;
14636|      0|	case 330:
  ------------------
  |  Branch (14636:2): [True: 0, False: 536k]
  ------------------
14637|      0|#line 356 "src/char_ref.rl"
14638|      0|	{te = p+1;{output[0]=0x2281; {p++; goto _out; }}}
14639|      0|	break;
14640|      0|	case 331:
  ------------------
  |  Branch (14640:2): [True: 0, False: 536k]
  ------------------
14641|      0|#line 357 "src/char_ref.rl"
14642|      0|	{te = p+1;{output[0]=0x2ab0; output[1]=0x338; {p++; goto _out; }}}
14643|      0|	break;
14644|      0|	case 332:
  ------------------
  |  Branch (14644:2): [True: 0, False: 536k]
  ------------------
14645|      0|#line 358 "src/char_ref.rl"
14646|      0|	{te = p+1;{output[0]=0x22e1; {p++; goto _out; }}}
14647|      0|	break;
14648|      0|	case 333:
  ------------------
  |  Branch (14648:2): [True: 0, False: 536k]
  ------------------
14649|      0|#line 359 "src/char_ref.rl"
14650|      0|	{te = p+1;{output[0]=0x227f; output[1]=0x338; {p++; goto _out; }}}
14651|      0|	break;
14652|    201|	case 334:
  ------------------
  |  Branch (14652:2): [True: 201, False: 536k]
  ------------------
14653|    201|#line 360 "src/char_ref.rl"
14654|    201|	{te = p+1;{output[0]=0x2283; output[1]=0x20d2; {p++; goto _out; }}}
14655|      0|	break;
14656|    198|	case 335:
  ------------------
  |  Branch (14656:2): [True: 198, False: 536k]
  ------------------
14657|    198|#line 361 "src/char_ref.rl"
14658|    198|	{te = p+1;{output[0]=0x2289; {p++; goto _out; }}}
14659|      0|	break;
14660|    219|	case 336:
  ------------------
  |  Branch (14660:2): [True: 219, False: 536k]
  ------------------
14661|    219|#line 362 "src/char_ref.rl"
14662|    219|	{te = p+1;{output[0]=0x2241; {p++; goto _out; }}}
14663|      0|	break;
14664|    207|	case 337:
  ------------------
  |  Branch (14664:2): [True: 207, False: 536k]
  ------------------
14665|    207|#line 363 "src/char_ref.rl"
14666|    207|	{te = p+1;{output[0]=0x2244; {p++; goto _out; }}}
14667|      0|	break;
14668|      0|	case 338:
  ------------------
  |  Branch (14668:2): [True: 0, False: 536k]
  ------------------
14669|      0|#line 364 "src/char_ref.rl"
14670|      0|	{te = p+1;{output[0]=0x2247; {p++; goto _out; }}}
14671|      0|	break;
14672|    253|	case 339:
  ------------------
  |  Branch (14672:2): [True: 253, False: 536k]
  ------------------
14673|    253|#line 365 "src/char_ref.rl"
14674|    253|	{te = p+1;{output[0]=0x2249; {p++; goto _out; }}}
14675|      0|	break;
14676|      0|	case 340:
  ------------------
  |  Branch (14676:2): [True: 0, False: 536k]
  ------------------
14677|      0|#line 366 "src/char_ref.rl"
14678|      0|	{te = p+1;{output[0]=0x2224; {p++; goto _out; }}}
14679|      0|	break;
14680|    236|	case 341:
  ------------------
  |  Branch (14680:2): [True: 236, False: 536k]
  ------------------
14681|    236|#line 367 "src/char_ref.rl"
14682|    236|	{te = p+1;{output[0]=0x1d4a9; {p++; goto _out; }}}
14683|      0|	break;
14684|    195|	case 2074:
  ------------------
  |  Branch (14684:2): [True: 195, False: 536k]
  ------------------
14685|    195|#line 368 "src/char_ref.rl"
14686|    195|	{te = p+1;{output[0]=0xd1; {p++; goto _out; }}}
14687|      0|	break;
14688|    472|	case 342:
  ------------------
  |  Branch (14688:2): [True: 472, False: 535k]
  ------------------
14689|    472|#line 369 "src/char_ref.rl"
14690|    472|	{te = p+1;{output[0]=0x39d; {p++; goto _out; }}}
14691|      0|	break;
14692|    201|	case 343:
  ------------------
  |  Branch (14692:2): [True: 201, False: 536k]
  ------------------
14693|    201|#line 370 "src/char_ref.rl"
14694|    201|	{te = p+1;{output[0]=0x152; {p++; goto _out; }}}
14695|      0|	break;
14696|    278|	case 2076:
  ------------------
  |  Branch (14696:2): [True: 278, False: 536k]
  ------------------
14697|    278|#line 371 "src/char_ref.rl"
14698|    278|	{te = p+1;{output[0]=0xd3; {p++; goto _out; }}}
14699|      0|	break;
14700|    943|	case 2078:
  ------------------
  |  Branch (14700:2): [True: 943, False: 535k]
  ------------------
14701|    943|#line 372 "src/char_ref.rl"
14702|    943|	{te = p+1;{output[0]=0xd4; {p++; goto _out; }}}
14703|      0|	break;
14704|    306|	case 344:
  ------------------
  |  Branch (14704:2): [True: 306, False: 536k]
  ------------------
14705|    306|#line 373 "src/char_ref.rl"
14706|    306|	{te = p+1;{output[0]=0x41e; {p++; goto _out; }}}
14707|      0|	break;
14708|    272|	case 345:
  ------------------
  |  Branch (14708:2): [True: 272, False: 536k]
  ------------------
14709|    272|#line 374 "src/char_ref.rl"
14710|    272|	{te = p+1;{output[0]=0x150; {p++; goto _out; }}}
14711|      0|	break;
14712|    409|	case 346:
  ------------------
  |  Branch (14712:2): [True: 409, False: 535k]
  ------------------
14713|    409|#line 375 "src/char_ref.rl"
14714|    409|	{te = p+1;{output[0]=0x1d512; {p++; goto _out; }}}
14715|      0|	break;
14716|    198|	case 2080:
  ------------------
  |  Branch (14716:2): [True: 198, False: 536k]
  ------------------
14717|    198|#line 376 "src/char_ref.rl"
14718|    198|	{te = p+1;{output[0]=0xd2; {p++; goto _out; }}}
14719|      0|	break;
14720|    206|	case 347:
  ------------------
  |  Branch (14720:2): [True: 206, False: 536k]
  ------------------
14721|    206|#line 377 "src/char_ref.rl"
14722|    206|	{te = p+1;{output[0]=0x14c; {p++; goto _out; }}}
14723|      0|	break;
14724|    346|	case 348:
  ------------------
  |  Branch (14724:2): [True: 346, False: 535k]
  ------------------
14725|    346|#line 378 "src/char_ref.rl"
14726|    346|	{te = p+1;{output[0]=0x3a9; {p++; goto _out; }}}
14727|      0|	break;
14728|    220|	case 349:
  ------------------
  |  Branch (14728:2): [True: 220, False: 536k]
  ------------------
14729|    220|#line 379 "src/char_ref.rl"
14730|    220|	{te = p+1;{output[0]=0x39f; {p++; goto _out; }}}
14731|      0|	break;
14732|    209|	case 350:
  ------------------
  |  Branch (14732:2): [True: 209, False: 536k]
  ------------------
14733|    209|#line 380 "src/char_ref.rl"
14734|    209|	{te = p+1;{output[0]=0x1d546; {p++; goto _out; }}}
14735|      0|	break;
14736|      0|	case 351:
  ------------------
  |  Branch (14736:2): [True: 0, False: 536k]
  ------------------
14737|      0|#line 381 "src/char_ref.rl"
14738|      0|	{te = p+1;{output[0]=0x201c; {p++; goto _out; }}}
14739|      0|	break;
14740|      0|	case 352:
  ------------------
  |  Branch (14740:2): [True: 0, False: 536k]
  ------------------
14741|      0|#line 382 "src/char_ref.rl"
14742|      0|	{te = p+1;{output[0]=0x2018; {p++; goto _out; }}}
14743|      0|	break;
14744|    307|	case 353:
  ------------------
  |  Branch (14744:2): [True: 307, False: 536k]
  ------------------
14745|    307|#line 383 "src/char_ref.rl"
14746|    307|	{te = p+1;{output[0]=0x2a54; {p++; goto _out; }}}
14747|      0|	break;
14748|    214|	case 354:
  ------------------
  |  Branch (14748:2): [True: 214, False: 536k]
  ------------------
14749|    214|#line 384 "src/char_ref.rl"
14750|    214|	{te = p+1;{output[0]=0x1d4aa; {p++; goto _out; }}}
14751|      0|	break;
14752|    229|	case 2082:
  ------------------
  |  Branch (14752:2): [True: 229, False: 536k]
  ------------------
14753|    229|#line 385 "src/char_ref.rl"
14754|    229|	{te = p+1;{output[0]=0xd8; {p++; goto _out; }}}
14755|      0|	break;
14756|    197|	case 2084:
  ------------------
  |  Branch (14756:2): [True: 197, False: 536k]
  ------------------
14757|    197|#line 386 "src/char_ref.rl"
14758|    197|	{te = p+1;{output[0]=0xd5; {p++; goto _out; }}}
14759|      0|	break;
14760|    212|	case 355:
  ------------------
  |  Branch (14760:2): [True: 212, False: 536k]
  ------------------
14761|    212|#line 387 "src/char_ref.rl"
14762|    212|	{te = p+1;{output[0]=0x2a37; {p++; goto _out; }}}
14763|      0|	break;
14764|    303|	case 2086:
  ------------------
  |  Branch (14764:2): [True: 303, False: 536k]
  ------------------
14765|    303|#line 388 "src/char_ref.rl"
14766|    303|	{te = p+1;{output[0]=0xd6; {p++; goto _out; }}}
14767|      0|	break;
14768|    241|	case 356:
  ------------------
  |  Branch (14768:2): [True: 241, False: 536k]
  ------------------
14769|    241|#line 389 "src/char_ref.rl"
14770|    241|	{te = p+1;{output[0]=0x203e; {p++; goto _out; }}}
14771|      0|	break;
14772|    208|	case 357:
  ------------------
  |  Branch (14772:2): [True: 208, False: 536k]
  ------------------
14773|    208|#line 390 "src/char_ref.rl"
14774|    208|	{te = p+1;{output[0]=0x23de; {p++; goto _out; }}}
14775|      0|	break;
14776|      0|	case 358:
  ------------------
  |  Branch (14776:2): [True: 0, False: 536k]
  ------------------
14777|      0|#line 391 "src/char_ref.rl"
14778|      0|	{te = p+1;{output[0]=0x23b4; {p++; goto _out; }}}
14779|      0|	break;
14780|      0|	case 359:
  ------------------
  |  Branch (14780:2): [True: 0, False: 536k]
  ------------------
14781|      0|#line 392 "src/char_ref.rl"
14782|      0|	{te = p+1;{output[0]=0x23dc; {p++; goto _out; }}}
14783|      0|	break;
14784|      0|	case 360:
  ------------------
  |  Branch (14784:2): [True: 0, False: 536k]
  ------------------
14785|      0|#line 393 "src/char_ref.rl"
14786|      0|	{te = p+1;{output[0]=0x2202; {p++; goto _out; }}}
14787|      0|	break;
14788|    505|	case 361:
  ------------------
  |  Branch (14788:2): [True: 505, False: 535k]
  ------------------
14789|    505|#line 394 "src/char_ref.rl"
14790|    505|	{te = p+1;{output[0]=0x41f; {p++; goto _out; }}}
14791|      0|	break;
14792|    756|	case 362:
  ------------------
  |  Branch (14792:2): [True: 756, False: 535k]
  ------------------
14793|    756|#line 395 "src/char_ref.rl"
14794|    756|	{te = p+1;{output[0]=0x1d513; {p++; goto _out; }}}
14795|      0|	break;
14796|    225|	case 363:
  ------------------
  |  Branch (14796:2): [True: 225, False: 536k]
  ------------------
14797|    225|#line 396 "src/char_ref.rl"
14798|    225|	{te = p+1;{output[0]=0x3a6; {p++; goto _out; }}}
14799|      0|	break;
14800|    244|	case 364:
  ------------------
  |  Branch (14800:2): [True: 244, False: 536k]
  ------------------
14801|    244|#line 397 "src/char_ref.rl"
14802|    244|	{te = p+1;{output[0]=0x3a0; {p++; goto _out; }}}
14803|      0|	break;
14804|      0|	case 365:
  ------------------
  |  Branch (14804:2): [True: 0, False: 536k]
  ------------------
14805|      0|#line 398 "src/char_ref.rl"
14806|      0|	{te = p+1;{output[0]=0xb1; {p++; goto _out; }}}
14807|      0|	break;
14808|      0|	case 366:
  ------------------
  |  Branch (14808:2): [True: 0, False: 536k]
  ------------------
14809|      0|#line 399 "src/char_ref.rl"
14810|      0|	{te = p+1;{output[0]=0x210c; {p++; goto _out; }}}
14811|      0|	break;
14812|    214|	case 367:
  ------------------
  |  Branch (14812:2): [True: 214, False: 536k]
  ------------------
14813|    214|#line 400 "src/char_ref.rl"
14814|    214|	{te = p+1;{output[0]=0x2119; {p++; goto _out; }}}
14815|      0|	break;
14816|    368|	case 368:
  ------------------
  |  Branch (14816:2): [True: 368, False: 535k]
  ------------------
14817|    368|#line 401 "src/char_ref.rl"
14818|    368|	{te = p+1;{output[0]=0x2abb; {p++; goto _out; }}}
14819|      0|	break;
14820|      0|	case 369:
  ------------------
  |  Branch (14820:2): [True: 0, False: 536k]
  ------------------
14821|      0|#line 402 "src/char_ref.rl"
14822|      0|	{te = p+1;{output[0]=0x227a; {p++; goto _out; }}}
14823|      0|	break;
14824|      0|	case 370:
  ------------------
  |  Branch (14824:2): [True: 0, False: 536k]
  ------------------
14825|      0|#line 403 "src/char_ref.rl"
14826|      0|	{te = p+1;{output[0]=0x2aaf; {p++; goto _out; }}}
14827|      0|	break;
14828|      0|	case 371:
  ------------------
  |  Branch (14828:2): [True: 0, False: 536k]
  ------------------
14829|      0|#line 404 "src/char_ref.rl"
14830|      0|	{te = p+1;{output[0]=0x227c; {p++; goto _out; }}}
14831|      0|	break;
14832|      0|	case 372:
  ------------------
  |  Branch (14832:2): [True: 0, False: 536k]
  ------------------
14833|      0|#line 405 "src/char_ref.rl"
14834|      0|	{te = p+1;{output[0]=0x227e; {p++; goto _out; }}}
14835|      0|	break;
14836|    211|	case 373:
  ------------------
  |  Branch (14836:2): [True: 211, False: 536k]
  ------------------
14837|    211|#line 406 "src/char_ref.rl"
14838|    211|	{te = p+1;{output[0]=0x2033; {p++; goto _out; }}}
14839|      0|	break;
14840|      0|	case 374:
  ------------------
  |  Branch (14840:2): [True: 0, False: 536k]
  ------------------
14841|      0|#line 407 "src/char_ref.rl"
14842|      0|	{te = p+1;{output[0]=0x220f; {p++; goto _out; }}}
14843|      0|	break;
14844|      0|	case 375:
  ------------------
  |  Branch (14844:2): [True: 0, False: 536k]
  ------------------
14845|      0|#line 408 "src/char_ref.rl"
14846|      0|	{te = p+1;{output[0]=0x2237; {p++; goto _out; }}}
14847|      0|	break;
14848|      0|	case 376:
  ------------------
  |  Branch (14848:2): [True: 0, False: 536k]
  ------------------
14849|      0|#line 409 "src/char_ref.rl"
14850|      0|	{te = p+1;{output[0]=0x221d; {p++; goto _out; }}}
14851|      0|	break;
14852|    263|	case 377:
  ------------------
  |  Branch (14852:2): [True: 263, False: 536k]
  ------------------
14853|    263|#line 410 "src/char_ref.rl"
14854|    263|	{te = p+1;{output[0]=0x1d4ab; {p++; goto _out; }}}
14855|      0|	break;
14856|    204|	case 378:
  ------------------
  |  Branch (14856:2): [True: 204, False: 536k]
  ------------------
14857|    204|#line 411 "src/char_ref.rl"
14858|    204|	{te = p+1;{output[0]=0x3a8; {p++; goto _out; }}}
14859|      0|	break;
14860|    735|	case 2088:
  ------------------
  |  Branch (14860:2): [True: 735, False: 535k]
  ------------------
14861|    735|#line 412 "src/char_ref.rl"
14862|    735|	{te = p+1;{output[0]=0x22; {p++; goto _out; }}}
14863|      0|	break;
14864|    452|	case 379:
  ------------------
  |  Branch (14864:2): [True: 452, False: 535k]
  ------------------
14865|    452|#line 413 "src/char_ref.rl"
14866|    452|	{te = p+1;{output[0]=0x1d514; {p++; goto _out; }}}
14867|      0|	break;
14868|    357|	case 380:
  ------------------
  |  Branch (14868:2): [True: 357, False: 535k]
  ------------------
14869|    357|#line 414 "src/char_ref.rl"
14870|    357|	{te = p+1;{output[0]=0x211a; {p++; goto _out; }}}
14871|      0|	break;
14872|    196|	case 381:
  ------------------
  |  Branch (14872:2): [True: 196, False: 536k]
  ------------------
14873|    196|#line 415 "src/char_ref.rl"
14874|    196|	{te = p+1;{output[0]=0x1d4ac; {p++; goto _out; }}}
14875|      0|	break;
14876|    363|	case 382:
  ------------------
  |  Branch (14876:2): [True: 363, False: 535k]
  ------------------
14877|    363|#line 416 "src/char_ref.rl"
14878|    363|	{te = p+1;{output[0]=0x2910; {p++; goto _out; }}}
14879|      0|	break;
14880|    396|	case 2090:
  ------------------
  |  Branch (14880:2): [True: 396, False: 535k]
  ------------------
14881|    396|#line 417 "src/char_ref.rl"
14882|    396|	{te = p+1;{output[0]=0xae; {p++; goto _out; }}}
14883|      0|	break;
14884|    218|	case 383:
  ------------------
  |  Branch (14884:2): [True: 218, False: 536k]
  ------------------
14885|    218|#line 418 "src/char_ref.rl"
14886|    218|	{te = p+1;{output[0]=0x154; {p++; goto _out; }}}
14887|      0|	break;
14888|    204|	case 384:
  ------------------
  |  Branch (14888:2): [True: 204, False: 536k]
  ------------------
14889|    204|#line 419 "src/char_ref.rl"
14890|    204|	{te = p+1;{output[0]=0x27eb; {p++; goto _out; }}}
14891|      0|	break;
14892|    232|	case 385:
  ------------------
  |  Branch (14892:2): [True: 232, False: 536k]
  ------------------
14893|    232|#line 420 "src/char_ref.rl"
14894|    232|	{te = p+1;{output[0]=0x21a0; {p++; goto _out; }}}
14895|      0|	break;
14896|    218|	case 386:
  ------------------
  |  Branch (14896:2): [True: 218, False: 536k]
  ------------------
14897|    218|#line 421 "src/char_ref.rl"
14898|    218|	{te = p+1;{output[0]=0x2916; {p++; goto _out; }}}
14899|      0|	break;
14900|    243|	case 387:
  ------------------
  |  Branch (14900:2): [True: 243, False: 536k]
  ------------------
14901|    243|#line 422 "src/char_ref.rl"
14902|    243|	{te = p+1;{output[0]=0x158; {p++; goto _out; }}}
14903|      0|	break;
14904|    337|	case 388:
  ------------------
  |  Branch (14904:2): [True: 337, False: 535k]
  ------------------
14905|    337|#line 423 "src/char_ref.rl"
14906|    337|	{te = p+1;{output[0]=0x156; {p++; goto _out; }}}
14907|      0|	break;
14908|    246|	case 389:
  ------------------
  |  Branch (14908:2): [True: 246, False: 536k]
  ------------------
14909|    246|#line 424 "src/char_ref.rl"
14910|    246|	{te = p+1;{output[0]=0x420; {p++; goto _out; }}}
14911|      0|	break;
14912|    600|	case 390:
  ------------------
  |  Branch (14912:2): [True: 600, False: 535k]
  ------------------
14913|    600|#line 425 "src/char_ref.rl"
14914|    600|	{te = p+1;{output[0]=0x211c; {p++; goto _out; }}}
14915|      0|	break;
14916|      0|	case 391:
  ------------------
  |  Branch (14916:2): [True: 0, False: 536k]
  ------------------
14917|      0|#line 426 "src/char_ref.rl"
14918|      0|	{te = p+1;{output[0]=0x220b; {p++; goto _out; }}}
14919|      0|	break;
14920|      0|	case 392:
  ------------------
  |  Branch (14920:2): [True: 0, False: 536k]
  ------------------
14921|      0|#line 427 "src/char_ref.rl"
14922|      0|	{te = p+1;{output[0]=0x21cb; {p++; goto _out; }}}
14923|      0|	break;
14924|      0|	case 393:
  ------------------
  |  Branch (14924:2): [True: 0, False: 536k]
  ------------------
14925|      0|#line 428 "src/char_ref.rl"
14926|      0|	{te = p+1;{output[0]=0x296f; {p++; goto _out; }}}
14927|      0|	break;
14928|    286|	case 394:
  ------------------
  |  Branch (14928:2): [True: 286, False: 536k]
  ------------------
14929|    286|#line 429 "src/char_ref.rl"
14930|    286|	{te = p+1;{output[0]=0x211c; {p++; goto _out; }}}
14931|      0|	break;
14932|    330|	case 395:
  ------------------
  |  Branch (14932:2): [True: 330, False: 535k]
  ------------------
14933|    330|#line 430 "src/char_ref.rl"
14934|    330|	{te = p+1;{output[0]=0x3a1; {p++; goto _out; }}}
14935|      0|	break;
14936|      0|	case 396:
  ------------------
  |  Branch (14936:2): [True: 0, False: 536k]
  ------------------
14937|      0|#line 431 "src/char_ref.rl"
14938|      0|	{te = p+1;{output[0]=0x27e9; {p++; goto _out; }}}
14939|      0|	break;
14940|      0|	case 397:
  ------------------
  |  Branch (14940:2): [True: 0, False: 536k]
  ------------------
14941|      0|#line 432 "src/char_ref.rl"
14942|      0|	{te = p+1;{output[0]=0x2192; {p++; goto _out; }}}
14943|      0|	break;
14944|      0|	case 398:
  ------------------
  |  Branch (14944:2): [True: 0, False: 536k]
  ------------------
14945|      0|#line 433 "src/char_ref.rl"
14946|      0|	{te = p+1;{output[0]=0x21e5; {p++; goto _out; }}}
14947|      0|	break;
14948|      0|	case 399:
  ------------------
  |  Branch (14948:2): [True: 0, False: 536k]
  ------------------
14949|      0|#line 434 "src/char_ref.rl"
14950|      0|	{te = p+1;{output[0]=0x21c4; {p++; goto _out; }}}
14951|      0|	break;
14952|      0|	case 400:
  ------------------
  |  Branch (14952:2): [True: 0, False: 536k]
  ------------------
14953|      0|#line 435 "src/char_ref.rl"
14954|      0|	{te = p+1;{output[0]=0x2309; {p++; goto _out; }}}
14955|      0|	break;
14956|      0|	case 401:
  ------------------
  |  Branch (14956:2): [True: 0, False: 536k]
  ------------------
14957|      0|#line 436 "src/char_ref.rl"
14958|      0|	{te = p+1;{output[0]=0x27e7; {p++; goto _out; }}}
14959|      0|	break;
14960|      0|	case 402:
  ------------------
  |  Branch (14960:2): [True: 0, False: 536k]
  ------------------
14961|      0|#line 437 "src/char_ref.rl"
14962|      0|	{te = p+1;{output[0]=0x295d; {p++; goto _out; }}}
14963|      0|	break;
14964|      0|	case 403:
  ------------------
  |  Branch (14964:2): [True: 0, False: 536k]
  ------------------
14965|      0|#line 438 "src/char_ref.rl"
14966|      0|	{te = p+1;{output[0]=0x21c2; {p++; goto _out; }}}
14967|      0|	break;
14968|      0|	case 404:
  ------------------
  |  Branch (14968:2): [True: 0, False: 536k]
  ------------------
14969|      0|#line 439 "src/char_ref.rl"
14970|      0|	{te = p+1;{output[0]=0x2955; {p++; goto _out; }}}
14971|      0|	break;
14972|      0|	case 405:
  ------------------
  |  Branch (14972:2): [True: 0, False: 536k]
  ------------------
14973|      0|#line 440 "src/char_ref.rl"
14974|      0|	{te = p+1;{output[0]=0x230b; {p++; goto _out; }}}
14975|      0|	break;
14976|      0|	case 406:
  ------------------
  |  Branch (14976:2): [True: 0, False: 536k]
  ------------------
14977|      0|#line 441 "src/char_ref.rl"
14978|      0|	{te = p+1;{output[0]=0x22a2; {p++; goto _out; }}}
14979|      0|	break;
14980|      0|	case 407:
  ------------------
  |  Branch (14980:2): [True: 0, False: 536k]
  ------------------
14981|      0|#line 442 "src/char_ref.rl"
14982|      0|	{te = p+1;{output[0]=0x21a6; {p++; goto _out; }}}
14983|      0|	break;
14984|      0|	case 408:
  ------------------
  |  Branch (14984:2): [True: 0, False: 536k]
  ------------------
14985|      0|#line 443 "src/char_ref.rl"
14986|      0|	{te = p+1;{output[0]=0x295b; {p++; goto _out; }}}
14987|      0|	break;
14988|      0|	case 409:
  ------------------
  |  Branch (14988:2): [True: 0, False: 536k]
  ------------------
14989|      0|#line 444 "src/char_ref.rl"
14990|      0|	{te = p+1;{output[0]=0x22b3; {p++; goto _out; }}}
14991|      0|	break;
14992|      0|	case 410:
  ------------------
  |  Branch (14992:2): [True: 0, False: 536k]
  ------------------
14993|      0|#line 445 "src/char_ref.rl"
14994|      0|	{te = p+1;{output[0]=0x29d0; {p++; goto _out; }}}
14995|      0|	break;
14996|      0|	case 411:
  ------------------
  |  Branch (14996:2): [True: 0, False: 536k]
  ------------------
14997|      0|#line 446 "src/char_ref.rl"
14998|      0|	{te = p+1;{output[0]=0x22b5; {p++; goto _out; }}}
14999|      0|	break;
15000|      0|	case 412:
  ------------------
  |  Branch (15000:2): [True: 0, False: 536k]
  ------------------
15001|      0|#line 447 "src/char_ref.rl"
15002|      0|	{te = p+1;{output[0]=0x294f; {p++; goto _out; }}}
15003|      0|	break;
15004|      0|	case 413:
  ------------------
  |  Branch (15004:2): [True: 0, False: 536k]
  ------------------
15005|      0|#line 448 "src/char_ref.rl"
15006|      0|	{te = p+1;{output[0]=0x295c; {p++; goto _out; }}}
15007|      0|	break;
15008|      0|	case 414:
  ------------------
  |  Branch (15008:2): [True: 0, False: 536k]
  ------------------
15009|      0|#line 449 "src/char_ref.rl"
15010|      0|	{te = p+1;{output[0]=0x21be; {p++; goto _out; }}}
15011|      0|	break;
15012|      0|	case 415:
  ------------------
  |  Branch (15012:2): [True: 0, False: 536k]
  ------------------
15013|      0|#line 450 "src/char_ref.rl"
15014|      0|	{te = p+1;{output[0]=0x2954; {p++; goto _out; }}}
15015|      0|	break;
15016|      0|	case 416:
  ------------------
  |  Branch (15016:2): [True: 0, False: 536k]
  ------------------
15017|      0|#line 451 "src/char_ref.rl"
15018|      0|	{te = p+1;{output[0]=0x21c0; {p++; goto _out; }}}
15019|      0|	break;
15020|      0|	case 417:
  ------------------
  |  Branch (15020:2): [True: 0, False: 536k]
  ------------------
15021|      0|#line 452 "src/char_ref.rl"
15022|      0|	{te = p+1;{output[0]=0x2953; {p++; goto _out; }}}
15023|      0|	break;
15024|      0|	case 418:
  ------------------
  |  Branch (15024:2): [True: 0, False: 536k]
  ------------------
15025|      0|#line 453 "src/char_ref.rl"
15026|      0|	{te = p+1;{output[0]=0x21d2; {p++; goto _out; }}}
15027|      0|	break;
15028|    302|	case 419:
  ------------------
  |  Branch (15028:2): [True: 302, False: 536k]
  ------------------
15029|    302|#line 454 "src/char_ref.rl"
15030|    302|	{te = p+1;{output[0]=0x211d; {p++; goto _out; }}}
15031|      0|	break;
15032|      0|	case 420:
  ------------------
  |  Branch (15032:2): [True: 0, False: 536k]
  ------------------
15033|      0|#line 455 "src/char_ref.rl"
15034|      0|	{te = p+1;{output[0]=0x2970; {p++; goto _out; }}}
15035|      0|	break;
15036|      0|	case 421:
  ------------------
  |  Branch (15036:2): [True: 0, False: 536k]
  ------------------
15037|      0|#line 456 "src/char_ref.rl"
15038|      0|	{te = p+1;{output[0]=0x21db; {p++; goto _out; }}}
15039|      0|	break;
15040|    195|	case 422:
  ------------------
  |  Branch (15040:2): [True: 195, False: 536k]
  ------------------
15041|    195|#line 457 "src/char_ref.rl"
15042|    195|	{te = p+1;{output[0]=0x211b; {p++; goto _out; }}}
15043|      0|	break;
15044|    423|	case 423:
  ------------------
  |  Branch (15044:2): [True: 423, False: 535k]
  ------------------
15045|    423|#line 458 "src/char_ref.rl"
15046|    423|	{te = p+1;{output[0]=0x21b1; {p++; goto _out; }}}
15047|      0|	break;
15048|      0|	case 424:
  ------------------
  |  Branch (15048:2): [True: 0, False: 536k]
  ------------------
15049|      0|#line 459 "src/char_ref.rl"
15050|      0|	{te = p+1;{output[0]=0x29f4; {p++; goto _out; }}}
15051|      0|	break;
15052|    338|	case 425:
  ------------------
  |  Branch (15052:2): [True: 338, False: 535k]
  ------------------
15053|    338|#line 460 "src/char_ref.rl"
15054|    338|	{te = p+1;{output[0]=0x429; {p++; goto _out; }}}
15055|      0|	break;
15056|    337|	case 426:
  ------------------
  |  Branch (15056:2): [True: 337, False: 535k]
  ------------------
15057|    337|#line 461 "src/char_ref.rl"
15058|    337|	{te = p+1;{output[0]=0x428; {p++; goto _out; }}}
15059|      0|	break;
15060|      0|	case 427:
  ------------------
  |  Branch (15060:2): [True: 0, False: 536k]
  ------------------
15061|      0|#line 462 "src/char_ref.rl"
15062|      0|	{te = p+1;{output[0]=0x42c; {p++; goto _out; }}}
15063|      0|	break;
15064|    194|	case 428:
  ------------------
  |  Branch (15064:2): [True: 194, False: 536k]
  ------------------
15065|    194|#line 463 "src/char_ref.rl"
15066|    194|	{te = p+1;{output[0]=0x15a; {p++; goto _out; }}}
15067|      0|	break;
15068|    227|	case 429:
  ------------------
  |  Branch (15068:2): [True: 227, False: 536k]
  ------------------
15069|    227|#line 464 "src/char_ref.rl"
15070|    227|	{te = p+1;{output[0]=0x2abc; {p++; goto _out; }}}
15071|      0|	break;
15072|    254|	case 430:
  ------------------
  |  Branch (15072:2): [True: 254, False: 536k]
  ------------------
15073|    254|#line 465 "src/char_ref.rl"
15074|    254|	{te = p+1;{output[0]=0x160; {p++; goto _out; }}}
15075|      0|	break;
15076|    200|	case 431:
  ------------------
  |  Branch (15076:2): [True: 200, False: 536k]
  ------------------
15077|    200|#line 466 "src/char_ref.rl"
15078|    200|	{te = p+1;{output[0]=0x15e; {p++; goto _out; }}}
15079|      0|	break;
15080|    199|	case 432:
  ------------------
  |  Branch (15080:2): [True: 199, False: 536k]
  ------------------
15081|    199|#line 467 "src/char_ref.rl"
15082|    199|	{te = p+1;{output[0]=0x15c; {p++; goto _out; }}}
15083|      0|	break;
15084|    245|	case 433:
  ------------------
  |  Branch (15084:2): [True: 245, False: 536k]
  ------------------
15085|    245|#line 468 "src/char_ref.rl"
15086|    245|	{te = p+1;{output[0]=0x421; {p++; goto _out; }}}
15087|      0|	break;
15088|    256|	case 434:
  ------------------
  |  Branch (15088:2): [True: 256, False: 536k]
  ------------------
15089|    256|#line 469 "src/char_ref.rl"
15090|    256|	{te = p+1;{output[0]=0x1d516; {p++; goto _out; }}}
15091|      0|	break;
15092|      0|	case 435:
  ------------------
  |  Branch (15092:2): [True: 0, False: 536k]
  ------------------
15093|      0|#line 470 "src/char_ref.rl"
15094|      0|	{te = p+1;{output[0]=0x2193; {p++; goto _out; }}}
15095|      0|	break;
15096|      0|	case 436:
  ------------------
  |  Branch (15096:2): [True: 0, False: 536k]
  ------------------
15097|      0|#line 471 "src/char_ref.rl"
15098|      0|	{te = p+1;{output[0]=0x2190; {p++; goto _out; }}}
15099|      0|	break;
15100|      0|	case 437:
  ------------------
  |  Branch (15100:2): [True: 0, False: 536k]
  ------------------
15101|      0|#line 472 "src/char_ref.rl"
15102|      0|	{te = p+1;{output[0]=0x2192; {p++; goto _out; }}}
15103|      0|	break;
15104|      0|	case 438:
  ------------------
  |  Branch (15104:2): [True: 0, False: 536k]
  ------------------
15105|      0|#line 473 "src/char_ref.rl"
15106|      0|	{te = p+1;{output[0]=0x2191; {p++; goto _out; }}}
15107|      0|	break;
15108|    416|	case 439:
  ------------------
  |  Branch (15108:2): [True: 416, False: 535k]
  ------------------
15109|    416|#line 474 "src/char_ref.rl"
15110|    416|	{te = p+1;{output[0]=0x3a3; {p++; goto _out; }}}
15111|      0|	break;
15112|      0|	case 440:
  ------------------
  |  Branch (15112:2): [True: 0, False: 536k]
  ------------------
15113|      0|#line 475 "src/char_ref.rl"
15114|      0|	{te = p+1;{output[0]=0x2218; {p++; goto _out; }}}
15115|      0|	break;
15116|    217|	case 441:
  ------------------
  |  Branch (15116:2): [True: 217, False: 536k]
  ------------------
15117|    217|#line 476 "src/char_ref.rl"
15118|    217|	{te = p+1;{output[0]=0x1d54a; {p++; goto _out; }}}
15119|      0|	break;
15120|    278|	case 442:
  ------------------
  |  Branch (15120:2): [True: 278, False: 536k]
  ------------------
15121|    278|#line 477 "src/char_ref.rl"
15122|    278|	{te = p+1;{output[0]=0x221a; {p++; goto _out; }}}
15123|      0|	break;
15124|    216|	case 443:
  ------------------
  |  Branch (15124:2): [True: 216, False: 536k]
  ------------------
15125|    216|#line 478 "src/char_ref.rl"
15126|    216|	{te = p+1;{output[0]=0x25a1; {p++; goto _out; }}}
15127|      0|	break;
15128|      0|	case 444:
  ------------------
  |  Branch (15128:2): [True: 0, False: 536k]
  ------------------
15129|      0|#line 479 "src/char_ref.rl"
15130|      0|	{te = p+1;{output[0]=0x2293; {p++; goto _out; }}}
15131|      0|	break;
15132|    228|	case 445:
  ------------------
  |  Branch (15132:2): [True: 228, False: 536k]
  ------------------
15133|    228|#line 480 "src/char_ref.rl"
15134|    228|	{te = p+1;{output[0]=0x228f; {p++; goto _out; }}}
15135|      0|	break;
15136|    200|	case 446:
  ------------------
  |  Branch (15136:2): [True: 200, False: 536k]
  ------------------
15137|    200|#line 481 "src/char_ref.rl"
15138|    200|	{te = p+1;{output[0]=0x2291; {p++; goto _out; }}}
15139|      0|	break;
15140|    203|	case 447:
  ------------------
  |  Branch (15140:2): [True: 203, False: 536k]
  ------------------
15141|    203|#line 482 "src/char_ref.rl"
15142|    203|	{te = p+1;{output[0]=0x2290; {p++; goto _out; }}}
15143|      0|	break;
15144|    204|	case 448:
  ------------------
  |  Branch (15144:2): [True: 204, False: 536k]
  ------------------
15145|    204|#line 483 "src/char_ref.rl"
15146|    204|	{te = p+1;{output[0]=0x2292; {p++; goto _out; }}}
15147|      0|	break;
15148|    209|	case 449:
  ------------------
  |  Branch (15148:2): [True: 209, False: 536k]
  ------------------
15149|    209|#line 484 "src/char_ref.rl"
15150|    209|	{te = p+1;{output[0]=0x2294; {p++; goto _out; }}}
15151|      0|	break;
15152|    198|	case 450:
  ------------------
  |  Branch (15152:2): [True: 198, False: 536k]
  ------------------
15153|    198|#line 485 "src/char_ref.rl"
15154|    198|	{te = p+1;{output[0]=0x1d4ae; {p++; goto _out; }}}
15155|      0|	break;
15156|    289|	case 451:
  ------------------
  |  Branch (15156:2): [True: 289, False: 536k]
  ------------------
15157|    289|#line 486 "src/char_ref.rl"
15158|    289|	{te = p+1;{output[0]=0x22c6; {p++; goto _out; }}}
15159|      0|	break;
15160|    198|	case 452:
  ------------------
  |  Branch (15160:2): [True: 198, False: 536k]
  ------------------
15161|    198|#line 487 "src/char_ref.rl"
15162|    198|	{te = p+1;{output[0]=0x22d0; {p++; goto _out; }}}
15163|      0|	break;
15164|    279|	case 453:
  ------------------
  |  Branch (15164:2): [True: 279, False: 536k]
  ------------------
15165|    279|#line 488 "src/char_ref.rl"
15166|    279|	{te = p+1;{output[0]=0x22d0; {p++; goto _out; }}}
15167|      0|	break;
15168|    393|	case 454:
  ------------------
  |  Branch (15168:2): [True: 393, False: 535k]
  ------------------
15169|    393|#line 489 "src/char_ref.rl"
15170|    393|	{te = p+1;{output[0]=0x2286; {p++; goto _out; }}}
15171|      0|	break;
15172|      0|	case 455:
  ------------------
  |  Branch (15172:2): [True: 0, False: 536k]
  ------------------
15173|      0|#line 490 "src/char_ref.rl"
15174|      0|	{te = p+1;{output[0]=0x227b; {p++; goto _out; }}}
15175|      0|	break;
15176|      0|	case 456:
  ------------------
  |  Branch (15176:2): [True: 0, False: 536k]
  ------------------
15177|      0|#line 491 "src/char_ref.rl"
15178|      0|	{te = p+1;{output[0]=0x2ab0; {p++; goto _out; }}}
15179|      0|	break;
15180|      0|	case 457:
  ------------------
  |  Branch (15180:2): [True: 0, False: 536k]
  ------------------
15181|      0|#line 492 "src/char_ref.rl"
15182|      0|	{te = p+1;{output[0]=0x227d; {p++; goto _out; }}}
15183|      0|	break;
15184|      0|	case 458:
  ------------------
  |  Branch (15184:2): [True: 0, False: 536k]
  ------------------
15185|      0|#line 493 "src/char_ref.rl"
15186|      0|	{te = p+1;{output[0]=0x227f; {p++; goto _out; }}}
15187|      0|	break;
15188|      0|	case 459:
  ------------------
  |  Branch (15188:2): [True: 0, False: 536k]
  ------------------
15189|      0|#line 494 "src/char_ref.rl"
15190|      0|	{te = p+1;{output[0]=0x220b; {p++; goto _out; }}}
15191|      0|	break;
15192|    307|	case 460:
  ------------------
  |  Branch (15192:2): [True: 307, False: 536k]
  ------------------
15193|    307|#line 495 "src/char_ref.rl"
15194|    307|	{te = p+1;{output[0]=0x2211; {p++; goto _out; }}}
15195|      0|	break;
15196|    203|	case 461:
  ------------------
  |  Branch (15196:2): [True: 203, False: 536k]
  ------------------
15197|    203|#line 496 "src/char_ref.rl"
15198|    203|	{te = p+1;{output[0]=0x22d1; {p++; goto _out; }}}
15199|      0|	break;
15200|    233|	case 462:
  ------------------
  |  Branch (15200:2): [True: 233, False: 536k]
  ------------------
15201|    233|#line 497 "src/char_ref.rl"
15202|    233|	{te = p+1;{output[0]=0x2283; {p++; goto _out; }}}
15203|      0|	break;
15204|    328|	case 463:
  ------------------
  |  Branch (15204:2): [True: 328, False: 535k]
  ------------------
15205|    328|#line 498 "src/char_ref.rl"
15206|    328|	{te = p+1;{output[0]=0x2287; {p++; goto _out; }}}
15207|      0|	break;
15208|    227|	case 464:
  ------------------
  |  Branch (15208:2): [True: 227, False: 536k]
  ------------------
15209|    227|#line 499 "src/char_ref.rl"
15210|    227|	{te = p+1;{output[0]=0x22d1; {p++; goto _out; }}}
15211|      0|	break;
15212|      0|	case 2092:
  ------------------
  |  Branch (15212:2): [True: 0, False: 536k]
  ------------------
15213|      0|#line 500 "src/char_ref.rl"
15214|      0|	{te = p+1;{output[0]=0xde; {p++; goto _out; }}}
15215|      0|	break;
15216|      0|	case 465:
  ------------------
  |  Branch (15216:2): [True: 0, False: 536k]
  ------------------
15217|      0|#line 501 "src/char_ref.rl"
15218|      0|	{te = p+1;{output[0]=0x2122; {p++; goto _out; }}}
15219|      0|	break;
15220|    202|	case 466:
  ------------------
  |  Branch (15220:2): [True: 202, False: 536k]
  ------------------
15221|    202|#line 502 "src/char_ref.rl"
15222|    202|	{te = p+1;{output[0]=0x40b; {p++; goto _out; }}}
15223|      0|	break;
15224|    301|	case 467:
  ------------------
  |  Branch (15224:2): [True: 301, False: 536k]
  ------------------
15225|    301|#line 503 "src/char_ref.rl"
15226|    301|	{te = p+1;{output[0]=0x426; {p++; goto _out; }}}
15227|      0|	break;
15228|    460|	case 468:
  ------------------
  |  Branch (15228:2): [True: 460, False: 535k]
  ------------------
15229|    460|#line 504 "src/char_ref.rl"
15230|    460|	{te = p+1;{output[0]=0x09; {p++; goto _out; }}}
15231|      0|	break;
15232|    201|	case 469:
  ------------------
  |  Branch (15232:2): [True: 201, False: 536k]
  ------------------
15233|    201|#line 505 "src/char_ref.rl"
15234|    201|	{te = p+1;{output[0]=0x3a4; {p++; goto _out; }}}
15235|      0|	break;
15236|    242|	case 470:
  ------------------
  |  Branch (15236:2): [True: 242, False: 536k]
  ------------------
15237|    242|#line 506 "src/char_ref.rl"
15238|    242|	{te = p+1;{output[0]=0x164; {p++; goto _out; }}}
15239|      0|	break;
15240|    203|	case 471:
  ------------------
  |  Branch (15240:2): [True: 203, False: 536k]
  ------------------
15241|    203|#line 507 "src/char_ref.rl"
15242|    203|	{te = p+1;{output[0]=0x162; {p++; goto _out; }}}
15243|      0|	break;
15244|    489|	case 472:
  ------------------
  |  Branch (15244:2): [True: 489, False: 535k]
  ------------------
15245|    489|#line 508 "src/char_ref.rl"
15246|    489|	{te = p+1;{output[0]=0x422; {p++; goto _out; }}}
15247|      0|	break;
15248|    217|	case 473:
  ------------------
  |  Branch (15248:2): [True: 217, False: 536k]
  ------------------
15249|    217|#line 509 "src/char_ref.rl"
15250|    217|	{te = p+1;{output[0]=0x1d517; {p++; goto _out; }}}
15251|      0|	break;
15252|    195|	case 474:
  ------------------
  |  Branch (15252:2): [True: 195, False: 536k]
  ------------------
15253|    195|#line 510 "src/char_ref.rl"
15254|    195|	{te = p+1;{output[0]=0x2234; {p++; goto _out; }}}
15255|      0|	break;
15256|    332|	case 475:
  ------------------
  |  Branch (15256:2): [True: 332, False: 535k]
  ------------------
15257|    332|#line 511 "src/char_ref.rl"
15258|    332|	{te = p+1;{output[0]=0x398; {p++; goto _out; }}}
15259|      0|	break;
15260|      0|	case 476:
  ------------------
  |  Branch (15260:2): [True: 0, False: 536k]
  ------------------
15261|      0|#line 512 "src/char_ref.rl"
15262|      0|	{te = p+1;{output[0]=0x205f; output[1]=0x200a; {p++; goto _out; }}}
15263|      0|	break;
15264|      0|	case 477:
  ------------------
  |  Branch (15264:2): [True: 0, False: 536k]
  ------------------
15265|      0|#line 513 "src/char_ref.rl"
15266|      0|	{te = p+1;{output[0]=0x2009; {p++; goto _out; }}}
15267|      0|	break;
15268|    205|	case 478:
  ------------------
  |  Branch (15268:2): [True: 205, False: 536k]
  ------------------
15269|    205|#line 514 "src/char_ref.rl"
15270|    205|	{te = p+1;{output[0]=0x223c; {p++; goto _out; }}}
15271|      0|	break;
15272|    205|	case 479:
  ------------------
  |  Branch (15272:2): [True: 205, False: 536k]
  ------------------
15273|    205|#line 515 "src/char_ref.rl"
15274|    205|	{te = p+1;{output[0]=0x2243; {p++; goto _out; }}}
15275|      0|	break;
15276|      0|	case 480:
  ------------------
  |  Branch (15276:2): [True: 0, False: 536k]
  ------------------
15277|      0|#line 516 "src/char_ref.rl"
15278|      0|	{te = p+1;{output[0]=0x2245; {p++; goto _out; }}}
15279|      0|	break;
15280|    211|	case 481:
  ------------------
  |  Branch (15280:2): [True: 211, False: 536k]
  ------------------
15281|    211|#line 517 "src/char_ref.rl"
15282|    211|	{te = p+1;{output[0]=0x2248; {p++; goto _out; }}}
15283|      0|	break;
15284|    461|	case 482:
  ------------------
  |  Branch (15284:2): [True: 461, False: 535k]
  ------------------
15285|    461|#line 518 "src/char_ref.rl"
15286|    461|	{te = p+1;{output[0]=0x1d54b; {p++; goto _out; }}}
15287|      0|	break;
15288|      0|	case 483:
  ------------------
  |  Branch (15288:2): [True: 0, False: 536k]
  ------------------
15289|      0|#line 519 "src/char_ref.rl"
15290|      0|	{te = p+1;{output[0]=0x20db; {p++; goto _out; }}}
15291|      0|	break;
15292|    216|	case 484:
  ------------------
  |  Branch (15292:2): [True: 216, False: 536k]
  ------------------
15293|    216|#line 520 "src/char_ref.rl"
15294|    216|	{te = p+1;{output[0]=0x1d4af; {p++; goto _out; }}}
15295|      0|	break;
15296|    310|	case 485:
  ------------------
  |  Branch (15296:2): [True: 310, False: 536k]
  ------------------
15297|    310|#line 521 "src/char_ref.rl"
15298|    310|	{te = p+1;{output[0]=0x166; {p++; goto _out; }}}
15299|      0|	break;
15300|    268|	case 2094:
  ------------------
  |  Branch (15300:2): [True: 268, False: 536k]
  ------------------
15301|    268|#line 522 "src/char_ref.rl"
15302|    268|	{te = p+1;{output[0]=0xda; {p++; goto _out; }}}
15303|      0|	break;
15304|    302|	case 486:
  ------------------
  |  Branch (15304:2): [True: 302, False: 536k]
  ------------------
15305|    302|#line 523 "src/char_ref.rl"
15306|    302|	{te = p+1;{output[0]=0x219f; {p++; goto _out; }}}
15307|      0|	break;
15308|    363|	case 487:
  ------------------
  |  Branch (15308:2): [True: 363, False: 535k]
  ------------------
15309|    363|#line 524 "src/char_ref.rl"
15310|    363|	{te = p+1;{output[0]=0x2949; {p++; goto _out; }}}
15311|      0|	break;
15312|    198|	case 488:
  ------------------
  |  Branch (15312:2): [True: 198, False: 536k]
  ------------------
15313|    198|#line 525 "src/char_ref.rl"
15314|    198|	{te = p+1;{output[0]=0x40e; {p++; goto _out; }}}
15315|      0|	break;
15316|    307|	case 489:
  ------------------
  |  Branch (15316:2): [True: 307, False: 536k]
  ------------------
15317|    307|#line 526 "src/char_ref.rl"
15318|    307|	{te = p+1;{output[0]=0x16c; {p++; goto _out; }}}
15319|      0|	break;
15320|    408|	case 2096:
  ------------------
  |  Branch (15320:2): [True: 408, False: 535k]
  ------------------
15321|    408|#line 527 "src/char_ref.rl"
15322|    408|	{te = p+1;{output[0]=0xdb; {p++; goto _out; }}}
15323|      0|	break;
15324|    267|	case 490:
  ------------------
  |  Branch (15324:2): [True: 267, False: 536k]
  ------------------
15325|    267|#line 528 "src/char_ref.rl"
15326|    267|	{te = p+1;{output[0]=0x423; {p++; goto _out; }}}
15327|      0|	break;
15328|    204|	case 491:
  ------------------
  |  Branch (15328:2): [True: 204, False: 536k]
  ------------------
15329|    204|#line 529 "src/char_ref.rl"
15330|    204|	{te = p+1;{output[0]=0x170; {p++; goto _out; }}}
15331|      0|	break;
15332|    401|	case 492:
  ------------------
  |  Branch (15332:2): [True: 401, False: 535k]
  ------------------
15333|    401|#line 530 "src/char_ref.rl"
15334|    401|	{te = p+1;{output[0]=0x1d518; {p++; goto _out; }}}
15335|      0|	break;
15336|    335|	case 2098:
  ------------------
  |  Branch (15336:2): [True: 335, False: 535k]
  ------------------
15337|    335|#line 531 "src/char_ref.rl"
15338|    335|	{te = p+1;{output[0]=0xd9; {p++; goto _out; }}}
15339|      0|	break;
15340|    227|	case 493:
  ------------------
  |  Branch (15340:2): [True: 227, False: 536k]
  ------------------
15341|    227|#line 532 "src/char_ref.rl"
15342|    227|	{te = p+1;{output[0]=0x16a; {p++; goto _out; }}}
15343|      0|	break;
15344|    197|	case 494:
  ------------------
  |  Branch (15344:2): [True: 197, False: 536k]
  ------------------
15345|    197|#line 533 "src/char_ref.rl"
15346|    197|	{te = p+1;{output[0]=0x5f; {p++; goto _out; }}}
15347|      0|	break;
15348|    197|	case 495:
  ------------------
  |  Branch (15348:2): [True: 197, False: 536k]
  ------------------
15349|    197|#line 534 "src/char_ref.rl"
15350|    197|	{te = p+1;{output[0]=0x23df; {p++; goto _out; }}}
15351|      0|	break;
15352|      0|	case 496:
  ------------------
  |  Branch (15352:2): [True: 0, False: 536k]
  ------------------
15353|      0|#line 535 "src/char_ref.rl"
15354|      0|	{te = p+1;{output[0]=0x23b5; {p++; goto _out; }}}
15355|      0|	break;
15356|      0|	case 497:
  ------------------
  |  Branch (15356:2): [True: 0, False: 536k]
  ------------------
15357|      0|#line 536 "src/char_ref.rl"
15358|      0|	{te = p+1;{output[0]=0x23dd; {p++; goto _out; }}}
15359|      0|	break;
15360|    339|	case 498:
  ------------------
  |  Branch (15360:2): [True: 339, False: 535k]
  ------------------
15361|    339|#line 537 "src/char_ref.rl"
15362|    339|	{te = p+1;{output[0]=0x22c3; {p++; goto _out; }}}
15363|      0|	break;
15364|    222|	case 499:
  ------------------
  |  Branch (15364:2): [True: 222, False: 536k]
  ------------------
15365|    222|#line 538 "src/char_ref.rl"
15366|    222|	{te = p+1;{output[0]=0x228e; {p++; goto _out; }}}
15367|      0|	break;
15368|    210|	case 500:
  ------------------
  |  Branch (15368:2): [True: 210, False: 536k]
  ------------------
15369|    210|#line 539 "src/char_ref.rl"
15370|    210|	{te = p+1;{output[0]=0x172; {p++; goto _out; }}}
15371|      0|	break;
15372|    256|	case 501:
  ------------------
  |  Branch (15372:2): [True: 256, False: 536k]
  ------------------
15373|    256|#line 540 "src/char_ref.rl"
15374|    256|	{te = p+1;{output[0]=0x1d54c; {p++; goto _out; }}}
15375|      0|	break;
15376|    196|	case 502:
  ------------------
  |  Branch (15376:2): [True: 196, False: 536k]
  ------------------
15377|    196|#line 541 "src/char_ref.rl"
15378|    196|	{te = p+1;{output[0]=0x2191; {p++; goto _out; }}}
15379|      0|	break;
15380|    197|	case 503:
  ------------------
  |  Branch (15380:2): [True: 197, False: 536k]
  ------------------
15381|    197|#line 542 "src/char_ref.rl"
15382|    197|	{te = p+1;{output[0]=0x2912; {p++; goto _out; }}}
15383|      0|	break;
15384|    202|	case 504:
  ------------------
  |  Branch (15384:2): [True: 202, False: 536k]
  ------------------
15385|    202|#line 543 "src/char_ref.rl"
15386|    202|	{te = p+1;{output[0]=0x21c5; {p++; goto _out; }}}
15387|      0|	break;
15388|    194|	case 505:
  ------------------
  |  Branch (15388:2): [True: 194, False: 536k]
  ------------------
15389|    194|#line 544 "src/char_ref.rl"
15390|    194|	{te = p+1;{output[0]=0x2195; {p++; goto _out; }}}
15391|      0|	break;
15392|      0|	case 506:
  ------------------
  |  Branch (15392:2): [True: 0, False: 536k]
  ------------------
15393|      0|#line 545 "src/char_ref.rl"
15394|      0|	{te = p+1;{output[0]=0x296e; {p++; goto _out; }}}
15395|      0|	break;
15396|    296|	case 507:
  ------------------
  |  Branch (15396:2): [True: 296, False: 536k]
  ------------------
15397|    296|#line 546 "src/char_ref.rl"
15398|    296|	{te = p+1;{output[0]=0x22a5; {p++; goto _out; }}}
15399|      0|	break;
15400|    214|	case 508:
  ------------------
  |  Branch (15400:2): [True: 214, False: 536k]
  ------------------
15401|    214|#line 547 "src/char_ref.rl"
15402|    214|	{te = p+1;{output[0]=0x21a5; {p++; goto _out; }}}
15403|      0|	break;
15404|    201|	case 509:
  ------------------
  |  Branch (15404:2): [True: 201, False: 536k]
  ------------------
15405|    201|#line 548 "src/char_ref.rl"
15406|    201|	{te = p+1;{output[0]=0x21d1; {p++; goto _out; }}}
15407|      0|	break;
15408|    198|	case 510:
  ------------------
  |  Branch (15408:2): [True: 198, False: 536k]
  ------------------
15409|    198|#line 549 "src/char_ref.rl"
15410|    198|	{te = p+1;{output[0]=0x21d5; {p++; goto _out; }}}
15411|      0|	break;
15412|      0|	case 511:
  ------------------
  |  Branch (15412:2): [True: 0, False: 536k]
  ------------------
15413|      0|#line 550 "src/char_ref.rl"
15414|      0|	{te = p+1;{output[0]=0x2196; {p++; goto _out; }}}
15415|      0|	break;
15416|      0|	case 512:
  ------------------
  |  Branch (15416:2): [True: 0, False: 536k]
  ------------------
15417|      0|#line 551 "src/char_ref.rl"
15418|      0|	{te = p+1;{output[0]=0x2197; {p++; goto _out; }}}
15419|      0|	break;
15420|    301|	case 513:
  ------------------
  |  Branch (15420:2): [True: 301, False: 536k]
  ------------------
15421|    301|#line 552 "src/char_ref.rl"
15422|    301|	{te = p+1;{output[0]=0x3d2; {p++; goto _out; }}}
15423|      0|	break;
15424|    273|	case 514:
  ------------------
  |  Branch (15424:2): [True: 273, False: 536k]
  ------------------
15425|    273|#line 553 "src/char_ref.rl"
15426|    273|	{te = p+1;{output[0]=0x3a5; {p++; goto _out; }}}
15427|      0|	break;
15428|    202|	case 515:
  ------------------
  |  Branch (15428:2): [True: 202, False: 536k]
  ------------------
15429|    202|#line 554 "src/char_ref.rl"
15430|    202|	{te = p+1;{output[0]=0x16e; {p++; goto _out; }}}
15431|      0|	break;
15432|    200|	case 516:
  ------------------
  |  Branch (15432:2): [True: 200, False: 536k]
  ------------------
15433|    200|#line 555 "src/char_ref.rl"
15434|    200|	{te = p+1;{output[0]=0x1d4b0; {p++; goto _out; }}}
15435|      0|	break;
15436|    218|	case 517:
  ------------------
  |  Branch (15436:2): [True: 218, False: 536k]
  ------------------
15437|    218|#line 556 "src/char_ref.rl"
15438|    218|	{te = p+1;{output[0]=0x168; {p++; goto _out; }}}
15439|      0|	break;
15440|    265|	case 2100:
  ------------------
  |  Branch (15440:2): [True: 265, False: 536k]
  ------------------
15441|    265|#line 557 "src/char_ref.rl"
15442|    265|	{te = p+1;{output[0]=0xdc; {p++; goto _out; }}}
15443|      0|	break;
15444|    325|	case 518:
  ------------------
  |  Branch (15444:2): [True: 325, False: 536k]
  ------------------
15445|    325|#line 558 "src/char_ref.rl"
15446|    325|	{te = p+1;{output[0]=0x22ab; {p++; goto _out; }}}
15447|      0|	break;
15448|    226|	case 519:
  ------------------
  |  Branch (15448:2): [True: 226, False: 536k]
  ------------------
15449|    226|#line 559 "src/char_ref.rl"
15450|    226|	{te = p+1;{output[0]=0x2aeb; {p++; goto _out; }}}
15451|      0|	break;
15452|    282|	case 520:
  ------------------
  |  Branch (15452:2): [True: 282, False: 536k]
  ------------------
15453|    282|#line 560 "src/char_ref.rl"
15454|    282|	{te = p+1;{output[0]=0x412; {p++; goto _out; }}}
15455|      0|	break;
15456|    333|	case 521:
  ------------------
  |  Branch (15456:2): [True: 333, False: 535k]
  ------------------
15457|    333|#line 561 "src/char_ref.rl"
15458|    333|	{te = p+1;{output[0]=0x22a9; {p++; goto _out; }}}
15459|      0|	break;
15460|    230|	case 522:
  ------------------
  |  Branch (15460:2): [True: 230, False: 536k]
  ------------------
15461|    230|#line 562 "src/char_ref.rl"
15462|    230|	{te = p+1;{output[0]=0x2ae6; {p++; goto _out; }}}
15463|      0|	break;
15464|    228|	case 523:
  ------------------
  |  Branch (15464:2): [True: 228, False: 536k]
  ------------------
15465|    228|#line 563 "src/char_ref.rl"
15466|    228|	{te = p+1;{output[0]=0x22c1; {p++; goto _out; }}}
15467|      0|	break;
15468|    194|	case 524:
  ------------------
  |  Branch (15468:2): [True: 194, False: 536k]
  ------------------
15469|    194|#line 564 "src/char_ref.rl"
15470|    194|	{te = p+1;{output[0]=0x2016; {p++; goto _out; }}}
15471|      0|	break;
15472|    431|	case 525:
  ------------------
  |  Branch (15472:2): [True: 431, False: 535k]
  ------------------
15473|    431|#line 565 "src/char_ref.rl"
15474|    431|	{te = p+1;{output[0]=0x2016; {p++; goto _out; }}}
15475|      0|	break;
15476|      0|	case 526:
  ------------------
  |  Branch (15476:2): [True: 0, False: 536k]
  ------------------
15477|      0|#line 566 "src/char_ref.rl"
15478|      0|	{te = p+1;{output[0]=0x2223; {p++; goto _out; }}}
15479|      0|	break;
15480|      0|	case 527:
  ------------------
  |  Branch (15480:2): [True: 0, False: 536k]
  ------------------
15481|      0|#line 567 "src/char_ref.rl"
15482|      0|	{te = p+1;{output[0]=0x7c; {p++; goto _out; }}}
15483|      0|	break;
15484|      0|	case 528:
  ------------------
  |  Branch (15484:2): [True: 0, False: 536k]
  ------------------
15485|      0|#line 568 "src/char_ref.rl"
15486|      0|	{te = p+1;{output[0]=0x2758; {p++; goto _out; }}}
15487|      0|	break;
15488|      0|	case 529:
  ------------------
  |  Branch (15488:2): [True: 0, False: 536k]
  ------------------
15489|      0|#line 569 "src/char_ref.rl"
15490|      0|	{te = p+1;{output[0]=0x2240; {p++; goto _out; }}}
15491|      0|	break;
15492|      0|	case 530:
  ------------------
  |  Branch (15492:2): [True: 0, False: 536k]
  ------------------
15493|      0|#line 570 "src/char_ref.rl"
15494|      0|	{te = p+1;{output[0]=0x200a; {p++; goto _out; }}}
15495|      0|	break;
15496|    232|	case 531:
  ------------------
  |  Branch (15496:2): [True: 232, False: 536k]
  ------------------
15497|    232|#line 571 "src/char_ref.rl"
15498|    232|	{te = p+1;{output[0]=0x1d519; {p++; goto _out; }}}
15499|      0|	break;
15500|    278|	case 532:
  ------------------
  |  Branch (15500:2): [True: 278, False: 536k]
  ------------------
15501|    278|#line 572 "src/char_ref.rl"
15502|    278|	{te = p+1;{output[0]=0x1d54d; {p++; goto _out; }}}
15503|      0|	break;
15504|    305|	case 533:
  ------------------
  |  Branch (15504:2): [True: 305, False: 536k]
  ------------------
15505|    305|#line 573 "src/char_ref.rl"
15506|    305|	{te = p+1;{output[0]=0x1d4b1; {p++; goto _out; }}}
15507|      0|	break;
15508|    200|	case 534:
  ------------------
  |  Branch (15508:2): [True: 200, False: 536k]
  ------------------
15509|    200|#line 574 "src/char_ref.rl"
15510|    200|	{te = p+1;{output[0]=0x22aa; {p++; goto _out; }}}
15511|      0|	break;
15512|    196|	case 535:
  ------------------
  |  Branch (15512:2): [True: 196, False: 536k]
  ------------------
15513|    196|#line 575 "src/char_ref.rl"
15514|    196|	{te = p+1;{output[0]=0x174; {p++; goto _out; }}}
15515|      0|	break;
15516|    289|	case 536:
  ------------------
  |  Branch (15516:2): [True: 289, False: 536k]
  ------------------
15517|    289|#line 576 "src/char_ref.rl"
15518|    289|	{te = p+1;{output[0]=0x22c0; {p++; goto _out; }}}
15519|      0|	break;
15520|    568|	case 537:
  ------------------
  |  Branch (15520:2): [True: 568, False: 535k]
  ------------------
15521|    568|#line 577 "src/char_ref.rl"
15522|    568|	{te = p+1;{output[0]=0x1d51a; {p++; goto _out; }}}
15523|      0|	break;
15524|    199|	case 538:
  ------------------
  |  Branch (15524:2): [True: 199, False: 536k]
  ------------------
15525|    199|#line 578 "src/char_ref.rl"
15526|    199|	{te = p+1;{output[0]=0x1d54e; {p++; goto _out; }}}
15527|      0|	break;
15528|    200|	case 539:
  ------------------
  |  Branch (15528:2): [True: 200, False: 536k]
  ------------------
15529|    200|#line 579 "src/char_ref.rl"
15530|    200|	{te = p+1;{output[0]=0x1d4b2; {p++; goto _out; }}}
15531|      0|	break;
15532|    448|	case 540:
  ------------------
  |  Branch (15532:2): [True: 448, False: 535k]
  ------------------
15533|    448|#line 580 "src/char_ref.rl"
15534|    448|	{te = p+1;{output[0]=0x1d51b; {p++; goto _out; }}}
15535|      0|	break;
15536|    345|	case 541:
  ------------------
  |  Branch (15536:2): [True: 345, False: 535k]
  ------------------
15537|    345|#line 581 "src/char_ref.rl"
15538|    345|	{te = p+1;{output[0]=0x39e; {p++; goto _out; }}}
15539|      0|	break;
15540|    212|	case 542:
  ------------------
  |  Branch (15540:2): [True: 212, False: 536k]
  ------------------
15541|    212|#line 582 "src/char_ref.rl"
15542|    212|	{te = p+1;{output[0]=0x1d54f; {p++; goto _out; }}}
15543|      0|	break;
15544|    288|	case 543:
  ------------------
  |  Branch (15544:2): [True: 288, False: 536k]
  ------------------
15545|    288|#line 583 "src/char_ref.rl"
15546|    288|	{te = p+1;{output[0]=0x1d4b3; {p++; goto _out; }}}
15547|      0|	break;
15548|    228|	case 544:
  ------------------
  |  Branch (15548:2): [True: 228, False: 536k]
  ------------------
15549|    228|#line 584 "src/char_ref.rl"
15550|    228|	{te = p+1;{output[0]=0x42f; {p++; goto _out; }}}
15551|      0|	break;
15552|    234|	case 545:
  ------------------
  |  Branch (15552:2): [True: 234, False: 536k]
  ------------------
15553|    234|#line 585 "src/char_ref.rl"
15554|    234|	{te = p+1;{output[0]=0x407; {p++; goto _out; }}}
15555|      0|	break;
15556|    197|	case 546:
  ------------------
  |  Branch (15556:2): [True: 197, False: 536k]
  ------------------
15557|    197|#line 586 "src/char_ref.rl"
15558|    197|	{te = p+1;{output[0]=0x42e; {p++; goto _out; }}}
15559|      0|	break;
15560|    306|	case 2102:
  ------------------
  |  Branch (15560:2): [True: 306, False: 536k]
  ------------------
15561|    306|#line 587 "src/char_ref.rl"
15562|    306|	{te = p+1;{output[0]=0xdd; {p++; goto _out; }}}
15563|      0|	break;
15564|    197|	case 547:
  ------------------
  |  Branch (15564:2): [True: 197, False: 536k]
  ------------------
15565|    197|#line 588 "src/char_ref.rl"
15566|    197|	{te = p+1;{output[0]=0x176; {p++; goto _out; }}}
15567|      0|	break;
15568|    248|	case 548:
  ------------------
  |  Branch (15568:2): [True: 248, False: 536k]
  ------------------
15569|    248|#line 589 "src/char_ref.rl"
15570|    248|	{te = p+1;{output[0]=0x42b; {p++; goto _out; }}}
15571|      0|	break;
15572|    320|	case 549:
  ------------------
  |  Branch (15572:2): [True: 320, False: 536k]
  ------------------
15573|    320|#line 590 "src/char_ref.rl"
15574|    320|	{te = p+1;{output[0]=0x1d51c; {p++; goto _out; }}}
15575|      0|	break;
15576|    221|	case 550:
  ------------------
  |  Branch (15576:2): [True: 221, False: 536k]
  ------------------
15577|    221|#line 591 "src/char_ref.rl"
15578|    221|	{te = p+1;{output[0]=0x1d550; {p++; goto _out; }}}
15579|      0|	break;
15580|    209|	case 551:
  ------------------
  |  Branch (15580:2): [True: 209, False: 536k]
  ------------------
15581|    209|#line 592 "src/char_ref.rl"
15582|    209|	{te = p+1;{output[0]=0x1d4b4; {p++; goto _out; }}}
15583|      0|	break;
15584|    223|	case 552:
  ------------------
  |  Branch (15584:2): [True: 223, False: 536k]
  ------------------
15585|    223|#line 593 "src/char_ref.rl"
15586|    223|	{te = p+1;{output[0]=0x178; {p++; goto _out; }}}
15587|      0|	break;
15588|    227|	case 553:
  ------------------
  |  Branch (15588:2): [True: 227, False: 536k]
  ------------------
15589|    227|#line 594 "src/char_ref.rl"
15590|    227|	{te = p+1;{output[0]=0x416; {p++; goto _out; }}}
15591|      0|	break;
15592|    210|	case 554:
  ------------------
  |  Branch (15592:2): [True: 210, False: 536k]
  ------------------
15593|    210|#line 595 "src/char_ref.rl"
15594|    210|	{te = p+1;{output[0]=0x179; {p++; goto _out; }}}
15595|      0|	break;
15596|    214|	case 555:
  ------------------
  |  Branch (15596:2): [True: 214, False: 536k]
  ------------------
15597|    214|#line 596 "src/char_ref.rl"
15598|    214|	{te = p+1;{output[0]=0x17d; {p++; goto _out; }}}
15599|      0|	break;
15600|    315|	case 556:
  ------------------
  |  Branch (15600:2): [True: 315, False: 536k]
  ------------------
15601|    315|#line 597 "src/char_ref.rl"
15602|    315|	{te = p+1;{output[0]=0x417; {p++; goto _out; }}}
15603|      0|	break;
15604|    202|	case 557:
  ------------------
  |  Branch (15604:2): [True: 202, False: 536k]
  ------------------
15605|    202|#line 598 "src/char_ref.rl"
15606|    202|	{te = p+1;{output[0]=0x17b; {p++; goto _out; }}}
15607|      0|	break;
15608|      0|	case 558:
  ------------------
  |  Branch (15608:2): [True: 0, False: 536k]
  ------------------
15609|      0|#line 599 "src/char_ref.rl"
15610|      0|	{te = p+1;{output[0]=0x200b; {p++; goto _out; }}}
15611|      0|	break;
15612|    239|	case 559:
  ------------------
  |  Branch (15612:2): [True: 239, False: 536k]
  ------------------
15613|    239|#line 600 "src/char_ref.rl"
15614|    239|	{te = p+1;{output[0]=0x396; {p++; goto _out; }}}
15615|      0|	break;
15616|    358|	case 560:
  ------------------
  |  Branch (15616:2): [True: 358, False: 535k]
  ------------------
15617|    358|#line 601 "src/char_ref.rl"
15618|    358|	{te = p+1;{output[0]=0x2128; {p++; goto _out; }}}
15619|      0|	break;
15620|    550|	case 561:
  ------------------
  |  Branch (15620:2): [True: 550, False: 535k]
  ------------------
15621|    550|#line 602 "src/char_ref.rl"
15622|    550|	{te = p+1;{output[0]=0x2124; {p++; goto _out; }}}
15623|      0|	break;
15624|    212|	case 562:
  ------------------
  |  Branch (15624:2): [True: 212, False: 536k]
  ------------------
15625|    212|#line 603 "src/char_ref.rl"
15626|    212|	{te = p+1;{output[0]=0x1d4b5; {p++; goto _out; }}}
15627|      0|	break;
15628|    366|	case 2104:
  ------------------
  |  Branch (15628:2): [True: 366, False: 535k]
  ------------------
15629|    366|#line 604 "src/char_ref.rl"
15630|    366|	{te = p+1;{output[0]=0xe1; {p++; goto _out; }}}
15631|      0|	break;
15632|    255|	case 563:
  ------------------
  |  Branch (15632:2): [True: 255, False: 536k]
  ------------------
15633|    255|#line 605 "src/char_ref.rl"
15634|    255|	{te = p+1;{output[0]=0x103; {p++; goto _out; }}}
15635|      0|	break;
15636|    396|	case 564:
  ------------------
  |  Branch (15636:2): [True: 396, False: 535k]
  ------------------
15637|    396|#line 606 "src/char_ref.rl"
15638|    396|	{te = p+1;{output[0]=0x223e; {p++; goto _out; }}}
15639|      0|	break;
15640|    219|	case 565:
  ------------------
  |  Branch (15640:2): [True: 219, False: 536k]
  ------------------
15641|    219|#line 607 "src/char_ref.rl"
15642|    219|	{te = p+1;{output[0]=0x223e; output[1]=0x333; {p++; goto _out; }}}
15643|      0|	break;
15644|    408|	case 566:
  ------------------
  |  Branch (15644:2): [True: 408, False: 535k]
  ------------------
15645|    408|#line 608 "src/char_ref.rl"
15646|    408|	{te = p+1;{output[0]=0x223f; {p++; goto _out; }}}
15647|      0|	break;
15648|    475|	case 2106:
  ------------------
  |  Branch (15648:2): [True: 475, False: 535k]
  ------------------
15649|    475|#line 609 "src/char_ref.rl"
15650|    475|	{te = p+1;{output[0]=0xe2; {p++; goto _out; }}}
15651|      0|	break;
15652|    225|	case 2108:
  ------------------
  |  Branch (15652:2): [True: 225, False: 536k]
  ------------------
15653|    225|#line 610 "src/char_ref.rl"
15654|    225|	{te = p+1;{output[0]=0xb4; {p++; goto _out; }}}
15655|      0|	break;
15656|    278|	case 567:
  ------------------
  |  Branch (15656:2): [True: 278, False: 536k]
  ------------------
15657|    278|#line 611 "src/char_ref.rl"
15658|    278|	{te = p+1;{output[0]=0x430; {p++; goto _out; }}}
15659|      0|	break;
15660|    262|	case 2110:
  ------------------
  |  Branch (15660:2): [True: 262, False: 536k]
  ------------------
15661|    262|#line 612 "src/char_ref.rl"
15662|    262|	{te = p+1;{output[0]=0xe6; {p++; goto _out; }}}
15663|      0|	break;
15664|    246|	case 568:
  ------------------
  |  Branch (15664:2): [True: 246, False: 536k]
  ------------------
15665|    246|#line 613 "src/char_ref.rl"
15666|    246|	{te = p+1;{output[0]=0x2061; {p++; goto _out; }}}
15667|      0|	break;
15668|    709|	case 569:
  ------------------
  |  Branch (15668:2): [True: 709, False: 535k]
  ------------------
15669|    709|#line 614 "src/char_ref.rl"
15670|    709|	{te = p+1;{output[0]=0x1d51e; {p++; goto _out; }}}
15671|      0|	break;
15672|    294|	case 2112:
  ------------------
  |  Branch (15672:2): [True: 294, False: 536k]
  ------------------
15673|    294|#line 615 "src/char_ref.rl"
15674|    294|	{te = p+1;{output[0]=0xe0; {p++; goto _out; }}}
15675|      0|	break;
15676|      0|	case 570:
  ------------------
  |  Branch (15676:2): [True: 0, False: 536k]
  ------------------
15677|      0|#line 616 "src/char_ref.rl"
15678|      0|	{te = p+1;{output[0]=0x2135; {p++; goto _out; }}}
15679|      0|	break;
15680|    218|	case 571:
  ------------------
  |  Branch (15680:2): [True: 218, False: 536k]
  ------------------
15681|    218|#line 617 "src/char_ref.rl"
15682|    218|	{te = p+1;{output[0]=0x2135; {p++; goto _out; }}}
15683|      0|	break;
15684|    403|	case 572:
  ------------------
  |  Branch (15684:2): [True: 403, False: 535k]
  ------------------
15685|    403|#line 618 "src/char_ref.rl"
15686|    403|	{te = p+1;{output[0]=0x3b1; {p++; goto _out; }}}
15687|      0|	break;
15688|    268|	case 573:
  ------------------
  |  Branch (15688:2): [True: 268, False: 536k]
  ------------------
15689|    268|#line 619 "src/char_ref.rl"
15690|    268|	{te = p+1;{output[0]=0x101; {p++; goto _out; }}}
15691|      0|	break;
15692|    290|	case 574:
  ------------------
  |  Branch (15692:2): [True: 290, False: 536k]
  ------------------
15693|    290|#line 620 "src/char_ref.rl"
15694|    290|	{te = p+1;{output[0]=0x2a3f; {p++; goto _out; }}}
15695|      0|	break;
15696|    261|	case 2114:
  ------------------
  |  Branch (15696:2): [True: 261, False: 536k]
  ------------------
15697|    261|#line 621 "src/char_ref.rl"
15698|    261|	{te = p+1;{output[0]=0x26; {p++; goto _out; }}}
15699|      0|	break;
15700|    323|	case 575:
  ------------------
  |  Branch (15700:2): [True: 323, False: 536k]
  ------------------
15701|    323|#line 622 "src/char_ref.rl"
15702|    323|	{te = p+1;{output[0]=0x2227; {p++; goto _out; }}}
15703|      0|	break;
15704|    205|	case 576:
  ------------------
  |  Branch (15704:2): [True: 205, False: 536k]
  ------------------
15705|    205|#line 623 "src/char_ref.rl"
15706|    205|	{te = p+1;{output[0]=0x2a55; {p++; goto _out; }}}
15707|      0|	break;
15708|    296|	case 577:
  ------------------
  |  Branch (15708:2): [True: 296, False: 536k]
  ------------------
15709|    296|#line 624 "src/char_ref.rl"
15710|    296|	{te = p+1;{output[0]=0x2a5c; {p++; goto _out; }}}
15711|      0|	break;
15712|      0|	case 578:
  ------------------
  |  Branch (15712:2): [True: 0, False: 536k]
  ------------------
15713|      0|#line 625 "src/char_ref.rl"
15714|      0|	{te = p+1;{output[0]=0x2a58; {p++; goto _out; }}}
15715|      0|	break;
15716|    194|	case 579:
  ------------------
  |  Branch (15716:2): [True: 194, False: 536k]
  ------------------
15717|    194|#line 626 "src/char_ref.rl"
15718|    194|	{te = p+1;{output[0]=0x2a5a; {p++; goto _out; }}}
15719|      0|	break;
15720|    229|	case 580:
  ------------------
  |  Branch (15720:2): [True: 229, False: 536k]
  ------------------
15721|    229|#line 627 "src/char_ref.rl"
15722|    229|	{te = p+1;{output[0]=0x2220; {p++; goto _out; }}}
15723|      0|	break;
15724|    345|	case 581:
  ------------------
  |  Branch (15724:2): [True: 345, False: 535k]
  ------------------
15725|    345|#line 628 "src/char_ref.rl"
15726|    345|	{te = p+1;{output[0]=0x29a4; {p++; goto _out; }}}
15727|      0|	break;
15728|    275|	case 582:
  ------------------
  |  Branch (15728:2): [True: 275, False: 536k]
  ------------------
15729|    275|#line 629 "src/char_ref.rl"
15730|    275|	{te = p+1;{output[0]=0x2220; {p++; goto _out; }}}
15731|      0|	break;
15732|    315|	case 583:
  ------------------
  |  Branch (15732:2): [True: 315, False: 536k]
  ------------------
15733|    315|#line 630 "src/char_ref.rl"
15734|    315|	{te = p+1;{output[0]=0x2221; {p++; goto _out; }}}
15735|      0|	break;
15736|    244|	case 584:
  ------------------
  |  Branch (15736:2): [True: 244, False: 536k]
  ------------------
15737|    244|#line 631 "src/char_ref.rl"
15738|    244|	{te = p+1;{output[0]=0x29a8; {p++; goto _out; }}}
15739|      0|	break;
15740|    209|	case 585:
  ------------------
  |  Branch (15740:2): [True: 209, False: 536k]
  ------------------
15741|    209|#line 632 "src/char_ref.rl"
15742|    209|	{te = p+1;{output[0]=0x29a9; {p++; goto _out; }}}
15743|      0|	break;
15744|    202|	case 586:
  ------------------
  |  Branch (15744:2): [True: 202, False: 536k]
  ------------------
15745|    202|#line 633 "src/char_ref.rl"
15746|    202|	{te = p+1;{output[0]=0x29aa; {p++; goto _out; }}}
15747|      0|	break;
15748|    207|	case 587:
  ------------------
  |  Branch (15748:2): [True: 207, False: 536k]
  ------------------
15749|    207|#line 634 "src/char_ref.rl"
15750|    207|	{te = p+1;{output[0]=0x29ab; {p++; goto _out; }}}
15751|      0|	break;
15752|    207|	case 588:
  ------------------
  |  Branch (15752:2): [True: 207, False: 536k]
  ------------------
15753|    207|#line 635 "src/char_ref.rl"
15754|    207|	{te = p+1;{output[0]=0x29ac; {p++; goto _out; }}}
15755|      0|	break;
15756|    205|	case 589:
  ------------------
  |  Branch (15756:2): [True: 205, False: 536k]
  ------------------
15757|    205|#line 636 "src/char_ref.rl"
15758|    205|	{te = p+1;{output[0]=0x29ad; {p++; goto _out; }}}
15759|      0|	break;
15760|    198|	case 590:
  ------------------
  |  Branch (15760:2): [True: 198, False: 536k]
  ------------------
15761|    198|#line 637 "src/char_ref.rl"
15762|    198|	{te = p+1;{output[0]=0x29ae; {p++; goto _out; }}}
15763|      0|	break;
15764|    196|	case 591:
  ------------------
  |  Branch (15764:2): [True: 196, False: 536k]
  ------------------
15765|    196|#line 638 "src/char_ref.rl"
15766|    196|	{te = p+1;{output[0]=0x29af; {p++; goto _out; }}}
15767|      0|	break;
15768|    234|	case 592:
  ------------------
  |  Branch (15768:2): [True: 234, False: 536k]
  ------------------
15769|    234|#line 639 "src/char_ref.rl"
15770|    234|	{te = p+1;{output[0]=0x221f; {p++; goto _out; }}}
15771|      0|	break;
15772|    211|	case 593:
  ------------------
  |  Branch (15772:2): [True: 211, False: 536k]
  ------------------
15773|    211|#line 640 "src/char_ref.rl"
15774|    211|	{te = p+1;{output[0]=0x22be; {p++; goto _out; }}}
15775|      0|	break;
15776|    201|	case 594:
  ------------------
  |  Branch (15776:2): [True: 201, False: 536k]
  ------------------
15777|    201|#line 641 "src/char_ref.rl"
15778|    201|	{te = p+1;{output[0]=0x299d; {p++; goto _out; }}}
15779|      0|	break;
15780|    306|	case 595:
  ------------------
  |  Branch (15780:2): [True: 306, False: 536k]
  ------------------
15781|    306|#line 642 "src/char_ref.rl"
15782|    306|	{te = p+1;{output[0]=0x2222; {p++; goto _out; }}}
15783|      0|	break;
15784|    286|	case 596:
  ------------------
  |  Branch (15784:2): [True: 286, False: 536k]
  ------------------
15785|    286|#line 643 "src/char_ref.rl"
15786|    286|	{te = p+1;{output[0]=0xc5; {p++; goto _out; }}}
15787|      0|	break;
15788|    210|	case 597:
  ------------------
  |  Branch (15788:2): [True: 210, False: 536k]
  ------------------
15789|    210|#line 644 "src/char_ref.rl"
15790|    210|	{te = p+1;{output[0]=0x237c; {p++; goto _out; }}}
15791|      0|	break;
15792|    198|	case 598:
  ------------------
  |  Branch (15792:2): [True: 198, False: 536k]
  ------------------
15793|    198|#line 645 "src/char_ref.rl"
15794|    198|	{te = p+1;{output[0]=0x105; {p++; goto _out; }}}
15795|      0|	break;
15796|    366|	case 599:
  ------------------
  |  Branch (15796:2): [True: 366, False: 535k]
  ------------------
15797|    366|#line 646 "src/char_ref.rl"
15798|    366|	{te = p+1;{output[0]=0x1d552; {p++; goto _out; }}}
15799|      0|	break;
15800|    432|	case 600:
  ------------------
  |  Branch (15800:2): [True: 432, False: 535k]
  ------------------
15801|    432|#line 647 "src/char_ref.rl"
15802|    432|	{te = p+1;{output[0]=0x2248; {p++; goto _out; }}}
15803|      0|	break;
15804|    223|	case 601:
  ------------------
  |  Branch (15804:2): [True: 223, False: 536k]
  ------------------
15805|    223|#line 648 "src/char_ref.rl"
15806|    223|	{te = p+1;{output[0]=0x2a70; {p++; goto _out; }}}
15807|      0|	break;
15808|    234|	case 602:
  ------------------
  |  Branch (15808:2): [True: 234, False: 536k]
  ------------------
15809|    234|#line 649 "src/char_ref.rl"
15810|    234|	{te = p+1;{output[0]=0x2a6f; {p++; goto _out; }}}
15811|      0|	break;
15812|    253|	case 603:
  ------------------
  |  Branch (15812:2): [True: 253, False: 536k]
  ------------------
15813|    253|#line 650 "src/char_ref.rl"
15814|    253|	{te = p+1;{output[0]=0x224a; {p++; goto _out; }}}
15815|      0|	break;
15816|    195|	case 604:
  ------------------
  |  Branch (15816:2): [True: 195, False: 536k]
  ------------------
15817|    195|#line 651 "src/char_ref.rl"
15818|    195|	{te = p+1;{output[0]=0x224b; {p++; goto _out; }}}
15819|      0|	break;
15820|    319|	case 605:
  ------------------
  |  Branch (15820:2): [True: 319, False: 536k]
  ------------------
15821|    319|#line 652 "src/char_ref.rl"
15822|    319|	{te = p+1;{output[0]=0x27; {p++; goto _out; }}}
15823|      0|	break;
15824|    205|	case 606:
  ------------------
  |  Branch (15824:2): [True: 205, False: 536k]
  ------------------
15825|    205|#line 653 "src/char_ref.rl"
15826|    205|	{te = p+1;{output[0]=0x2248; {p++; goto _out; }}}
15827|      0|	break;
15828|    205|	case 607:
  ------------------
  |  Branch (15828:2): [True: 205, False: 536k]
  ------------------
15829|    205|#line 654 "src/char_ref.rl"
15830|    205|	{te = p+1;{output[0]=0x224a; {p++; goto _out; }}}
15831|      0|	break;
15832|    246|	case 2116:
  ------------------
  |  Branch (15832:2): [True: 246, False: 536k]
  ------------------
15833|    246|#line 655 "src/char_ref.rl"
15834|    246|	{te = p+1;{output[0]=0xe5; {p++; goto _out; }}}
15835|      0|	break;
15836|    216|	case 608:
  ------------------
  |  Branch (15836:2): [True: 216, False: 536k]
  ------------------
15837|    216|#line 656 "src/char_ref.rl"
15838|    216|	{te = p+1;{output[0]=0x1d4b6; {p++; goto _out; }}}
15839|      0|	break;
15840|    228|	case 609:
  ------------------
  |  Branch (15840:2): [True: 228, False: 536k]
  ------------------
15841|    228|#line 657 "src/char_ref.rl"
15842|    228|	{te = p+1;{output[0]=0x2a; {p++; goto _out; }}}
15843|      0|	break;
15844|    477|	case 610:
  ------------------
  |  Branch (15844:2): [True: 477, False: 535k]
  ------------------
15845|    477|#line 658 "src/char_ref.rl"
15846|    477|	{te = p+1;{output[0]=0x2248; {p++; goto _out; }}}
15847|      0|	break;
15848|    268|	case 611:
  ------------------
  |  Branch (15848:2): [True: 268, False: 536k]
  ------------------
15849|    268|#line 659 "src/char_ref.rl"
15850|    268|	{te = p+1;{output[0]=0x224d; {p++; goto _out; }}}
15851|      0|	break;
15852|    295|	case 2118:
  ------------------
  |  Branch (15852:2): [True: 295, False: 536k]
  ------------------
15853|    295|#line 660 "src/char_ref.rl"
15854|    295|	{te = p+1;{output[0]=0xe3; {p++; goto _out; }}}
15855|      0|	break;
15856|    310|	case 2120:
  ------------------
  |  Branch (15856:2): [True: 310, False: 536k]
  ------------------
15857|    310|#line 661 "src/char_ref.rl"
15858|    310|	{te = p+1;{output[0]=0xe4; {p++; goto _out; }}}
15859|      0|	break;
15860|    280|	case 612:
  ------------------
  |  Branch (15860:2): [True: 280, False: 536k]
  ------------------
15861|    280|#line 662 "src/char_ref.rl"
15862|    280|	{te = p+1;{output[0]=0x2233; {p++; goto _out; }}}
15863|      0|	break;
15864|    201|	case 613:
  ------------------
  |  Branch (15864:2): [True: 201, False: 536k]
  ------------------
15865|    201|#line 663 "src/char_ref.rl"
15866|    201|	{te = p+1;{output[0]=0x2a11; {p++; goto _out; }}}
15867|      0|	break;
15868|    219|	case 614:
  ------------------
  |  Branch (15868:2): [True: 219, False: 536k]
  ------------------
15869|    219|#line 664 "src/char_ref.rl"
15870|    219|	{te = p+1;{output[0]=0x2aed; {p++; goto _out; }}}
15871|      0|	break;
15872|    198|	case 615:
  ------------------
  |  Branch (15872:2): [True: 198, False: 536k]
  ------------------
15873|    198|#line 665 "src/char_ref.rl"
15874|    198|	{te = p+1;{output[0]=0x224c; {p++; goto _out; }}}
15875|      0|	break;
15876|    198|	case 616:
  ------------------
  |  Branch (15876:2): [True: 198, False: 536k]
  ------------------
15877|    198|#line 666 "src/char_ref.rl"
15878|    198|	{te = p+1;{output[0]=0x3f6; {p++; goto _out; }}}
15879|      0|	break;
15880|    210|	case 617:
  ------------------
  |  Branch (15880:2): [True: 210, False: 536k]
  ------------------
15881|    210|#line 667 "src/char_ref.rl"
15882|    210|	{te = p+1;{output[0]=0x2035; {p++; goto _out; }}}
15883|      0|	break;
15884|    271|	case 618:
  ------------------
  |  Branch (15884:2): [True: 271, False: 536k]
  ------------------
15885|    271|#line 668 "src/char_ref.rl"
15886|    271|	{te = p+1;{output[0]=0x223d; {p++; goto _out; }}}
15887|      0|	break;
15888|    195|	case 619:
  ------------------
  |  Branch (15888:2): [True: 195, False: 536k]
  ------------------
15889|    195|#line 669 "src/char_ref.rl"
15890|    195|	{te = p+1;{output[0]=0x22cd; {p++; goto _out; }}}
15891|      0|	break;
15892|    237|	case 620:
  ------------------
  |  Branch (15892:2): [True: 237, False: 536k]
  ------------------
15893|    237|#line 670 "src/char_ref.rl"
15894|    237|	{te = p+1;{output[0]=0x22bd; {p++; goto _out; }}}
15895|      0|	break;
15896|    341|	case 621:
  ------------------
  |  Branch (15896:2): [True: 341, False: 535k]
  ------------------
15897|    341|#line 671 "src/char_ref.rl"
15898|    341|	{te = p+1;{output[0]=0x2305; {p++; goto _out; }}}
15899|      0|	break;
15900|    198|	case 622:
  ------------------
  |  Branch (15900:2): [True: 198, False: 536k]
  ------------------
15901|    198|#line 672 "src/char_ref.rl"
15902|    198|	{te = p+1;{output[0]=0x2305; {p++; goto _out; }}}
15903|      0|	break;
15904|    206|	case 623:
  ------------------
  |  Branch (15904:2): [True: 206, False: 536k]
  ------------------
15905|    206|#line 673 "src/char_ref.rl"
15906|    206|	{te = p+1;{output[0]=0x23b5; {p++; goto _out; }}}
15907|      0|	break;
15908|    302|	case 624:
  ------------------
  |  Branch (15908:2): [True: 302, False: 536k]
  ------------------
15909|    302|#line 674 "src/char_ref.rl"
15910|    302|	{te = p+1;{output[0]=0x23b6; {p++; goto _out; }}}
15911|      0|	break;
15912|    221|	case 625:
  ------------------
  |  Branch (15912:2): [True: 221, False: 536k]
  ------------------
15913|    221|#line 675 "src/char_ref.rl"
15914|    221|	{te = p+1;{output[0]=0x224c; {p++; goto _out; }}}
15915|      0|	break;
15916|    295|	case 626:
  ------------------
  |  Branch (15916:2): [True: 295, False: 536k]
  ------------------
15917|    295|#line 676 "src/char_ref.rl"
15918|    295|	{te = p+1;{output[0]=0x431; {p++; goto _out; }}}
15919|      0|	break;
15920|    456|	case 627:
  ------------------
  |  Branch (15920:2): [True: 456, False: 535k]
  ------------------
15921|    456|#line 677 "src/char_ref.rl"
15922|    456|	{te = p+1;{output[0]=0x201e; {p++; goto _out; }}}
15923|      0|	break;
15924|    194|	case 628:
  ------------------
  |  Branch (15924:2): [True: 194, False: 536k]
  ------------------
15925|    194|#line 678 "src/char_ref.rl"
15926|    194|	{te = p+1;{output[0]=0x2235; {p++; goto _out; }}}
15927|      0|	break;
15928|    261|	case 629:
  ------------------
  |  Branch (15928:2): [True: 261, False: 536k]
  ------------------
15929|    261|#line 679 "src/char_ref.rl"
15930|    261|	{te = p+1;{output[0]=0x2235; {p++; goto _out; }}}
15931|      0|	break;
15932|    281|	case 630:
  ------------------
  |  Branch (15932:2): [True: 281, False: 536k]
  ------------------
15933|    281|#line 680 "src/char_ref.rl"
15934|    281|	{te = p+1;{output[0]=0x29b0; {p++; goto _out; }}}
15935|      0|	break;
15936|    213|	case 631:
  ------------------
  |  Branch (15936:2): [True: 213, False: 536k]
  ------------------
15937|    213|#line 681 "src/char_ref.rl"
15938|    213|	{te = p+1;{output[0]=0x3f6; {p++; goto _out; }}}
15939|      0|	break;
15940|      0|	case 632:
  ------------------
  |  Branch (15940:2): [True: 0, False: 536k]
  ------------------
15941|      0|#line 682 "src/char_ref.rl"
15942|      0|	{te = p+1;{output[0]=0x212c; {p++; goto _out; }}}
15943|      0|	break;
15944|    232|	case 633:
  ------------------
  |  Branch (15944:2): [True: 232, False: 536k]
  ------------------
15945|    232|#line 683 "src/char_ref.rl"
15946|    232|	{te = p+1;{output[0]=0x3b2; {p++; goto _out; }}}
15947|      0|	break;
15948|    411|	case 634:
  ------------------
  |  Branch (15948:2): [True: 411, False: 535k]
  ------------------
15949|    411|#line 684 "src/char_ref.rl"
15950|    411|	{te = p+1;{output[0]=0x2136; {p++; goto _out; }}}
15951|      0|	break;
15952|      0|	case 635:
  ------------------
  |  Branch (15952:2): [True: 0, False: 536k]
  ------------------
15953|      0|#line 685 "src/char_ref.rl"
15954|      0|	{te = p+1;{output[0]=0x226c; {p++; goto _out; }}}
15955|      0|	break;
15956|    252|	case 636:
  ------------------
  |  Branch (15956:2): [True: 252, False: 536k]
  ------------------
15957|    252|#line 686 "src/char_ref.rl"
15958|    252|	{te = p+1;{output[0]=0x1d51f; {p++; goto _out; }}}
15959|      0|	break;
15960|    259|	case 637:
  ------------------
  |  Branch (15960:2): [True: 259, False: 536k]
  ------------------
15961|    259|#line 687 "src/char_ref.rl"
15962|    259|	{te = p+1;{output[0]=0x22c2; {p++; goto _out; }}}
15963|      0|	break;
15964|    215|	case 638:
  ------------------
  |  Branch (15964:2): [True: 215, False: 536k]
  ------------------
15965|    215|#line 688 "src/char_ref.rl"
15966|    215|	{te = p+1;{output[0]=0x25ef; {p++; goto _out; }}}
15967|      0|	break;
15968|    202|	case 639:
  ------------------
  |  Branch (15968:2): [True: 202, False: 536k]
  ------------------
15969|    202|#line 689 "src/char_ref.rl"
15970|    202|	{te = p+1;{output[0]=0x22c3; {p++; goto _out; }}}
15971|      0|	break;
15972|    202|	case 640:
  ------------------
  |  Branch (15972:2): [True: 202, False: 536k]
  ------------------
15973|    202|#line 690 "src/char_ref.rl"
15974|    202|	{te = p+1;{output[0]=0x2a00; {p++; goto _out; }}}
15975|      0|	break;
15976|    221|	case 641:
  ------------------
  |  Branch (15976:2): [True: 221, False: 536k]
  ------------------
15977|    221|#line 691 "src/char_ref.rl"
15978|    221|	{te = p+1;{output[0]=0x2a01; {p++; goto _out; }}}
15979|      0|	break;
15980|    239|	case 642:
  ------------------
  |  Branch (15980:2): [True: 239, False: 536k]
  ------------------
15981|    239|#line 692 "src/char_ref.rl"
15982|    239|	{te = p+1;{output[0]=0x2a02; {p++; goto _out; }}}
15983|      0|	break;
15984|    210|	case 643:
  ------------------
  |  Branch (15984:2): [True: 210, False: 536k]
  ------------------
15985|    210|#line 693 "src/char_ref.rl"
15986|    210|	{te = p+1;{output[0]=0x2a06; {p++; goto _out; }}}
15987|      0|	break;
15988|    205|	case 644:
  ------------------
  |  Branch (15988:2): [True: 205, False: 536k]
  ------------------
15989|    205|#line 694 "src/char_ref.rl"
15990|    205|	{te = p+1;{output[0]=0x2605; {p++; goto _out; }}}
15991|      0|	break;
15992|    199|	case 645:
  ------------------
  |  Branch (15992:2): [True: 199, False: 536k]
  ------------------
15993|    199|#line 695 "src/char_ref.rl"
15994|    199|	{te = p+1;{output[0]=0x25bd; {p++; goto _out; }}}
15995|      0|	break;
15996|    246|	case 646:
  ------------------
  |  Branch (15996:2): [True: 246, False: 536k]
  ------------------
15997|    246|#line 696 "src/char_ref.rl"
15998|    246|	{te = p+1;{output[0]=0x25b3; {p++; goto _out; }}}
15999|      0|	break;
16000|    213|	case 647:
  ------------------
  |  Branch (16000:2): [True: 213, False: 536k]
  ------------------
16001|    213|#line 697 "src/char_ref.rl"
16002|    213|	{te = p+1;{output[0]=0x2a04; {p++; goto _out; }}}
16003|      0|	break;
16004|    352|	case 648:
  ------------------
  |  Branch (16004:2): [True: 352, False: 535k]
  ------------------
16005|    352|#line 698 "src/char_ref.rl"
16006|    352|	{te = p+1;{output[0]=0x22c1; {p++; goto _out; }}}
16007|      0|	break;
16008|    201|	case 649:
  ------------------
  |  Branch (16008:2): [True: 201, False: 536k]
  ------------------
16009|    201|#line 699 "src/char_ref.rl"
16010|    201|	{te = p+1;{output[0]=0x22c0; {p++; goto _out; }}}
16011|      0|	break;
16012|      0|	case 650:
  ------------------
  |  Branch (16012:2): [True: 0, False: 536k]
  ------------------
16013|      0|#line 700 "src/char_ref.rl"
16014|      0|	{te = p+1;{output[0]=0x290d; {p++; goto _out; }}}
16015|      0|	break;
16016|      0|	case 651:
  ------------------
  |  Branch (16016:2): [True: 0, False: 536k]
  ------------------
16017|      0|#line 701 "src/char_ref.rl"
16018|      0|	{te = p+1;{output[0]=0x29eb; {p++; goto _out; }}}
16019|      0|	break;
16020|      0|	case 652:
  ------------------
  |  Branch (16020:2): [True: 0, False: 536k]
  ------------------
16021|      0|#line 702 "src/char_ref.rl"
16022|      0|	{te = p+1;{output[0]=0x25aa; {p++; goto _out; }}}
16023|      0|	break;
16024|      0|	case 653:
  ------------------
  |  Branch (16024:2): [True: 0, False: 536k]
  ------------------
16025|      0|#line 703 "src/char_ref.rl"
16026|      0|	{te = p+1;{output[0]=0x25b4; {p++; goto _out; }}}
16027|      0|	break;
16028|      0|	case 654:
  ------------------
  |  Branch (16028:2): [True: 0, False: 536k]
  ------------------
16029|      0|#line 704 "src/char_ref.rl"
16030|      0|	{te = p+1;{output[0]=0x25be; {p++; goto _out; }}}
16031|      0|	break;
16032|      0|	case 655:
  ------------------
  |  Branch (16032:2): [True: 0, False: 536k]
  ------------------
16033|      0|#line 705 "src/char_ref.rl"
16034|      0|	{te = p+1;{output[0]=0x25c2; {p++; goto _out; }}}
16035|      0|	break;
16036|      0|	case 656:
  ------------------
  |  Branch (16036:2): [True: 0, False: 536k]
  ------------------
16037|      0|#line 706 "src/char_ref.rl"
16038|      0|	{te = p+1;{output[0]=0x25b8; {p++; goto _out; }}}
16039|      0|	break;
16040|    204|	case 657:
  ------------------
  |  Branch (16040:2): [True: 204, False: 536k]
  ------------------
16041|    204|#line 707 "src/char_ref.rl"
16042|    204|	{te = p+1;{output[0]=0x2423; {p++; goto _out; }}}
16043|      0|	break;
16044|    287|	case 658:
  ------------------
  |  Branch (16044:2): [True: 287, False: 536k]
  ------------------
16045|    287|#line 708 "src/char_ref.rl"
16046|    287|	{te = p+1;{output[0]=0x2592; {p++; goto _out; }}}
16047|      0|	break;
16048|    279|	case 659:
  ------------------
  |  Branch (16048:2): [True: 279, False: 536k]
  ------------------
16049|    279|#line 709 "src/char_ref.rl"
16050|    279|	{te = p+1;{output[0]=0x2591; {p++; goto _out; }}}
16051|      0|	break;
16052|    233|	case 660:
  ------------------
  |  Branch (16052:2): [True: 233, False: 536k]
  ------------------
16053|    233|#line 710 "src/char_ref.rl"
16054|    233|	{te = p+1;{output[0]=0x2593; {p++; goto _out; }}}
16055|      0|	break;
16056|    248|	case 661:
  ------------------
  |  Branch (16056:2): [True: 248, False: 536k]
  ------------------
16057|    248|#line 711 "src/char_ref.rl"
16058|    248|	{te = p+1;{output[0]=0x2588; {p++; goto _out; }}}
16059|      0|	break;
16060|    477|	case 662:
  ------------------
  |  Branch (16060:2): [True: 477, False: 535k]
  ------------------
16061|    477|#line 712 "src/char_ref.rl"
16062|    477|	{te = p+1;{output[0]=0x3d; output[1]=0x20e5; {p++; goto _out; }}}
16063|      0|	break;
16064|    205|	case 663:
  ------------------
  |  Branch (16064:2): [True: 205, False: 536k]
  ------------------
16065|    205|#line 713 "src/char_ref.rl"
16066|    205|	{te = p+1;{output[0]=0x2261; output[1]=0x20e5; {p++; goto _out; }}}
16067|      0|	break;
16068|    211|	case 664:
  ------------------
  |  Branch (16068:2): [True: 211, False: 536k]
  ------------------
16069|    211|#line 714 "src/char_ref.rl"
16070|    211|	{te = p+1;{output[0]=0x2310; {p++; goto _out; }}}
16071|      0|	break;
16072|    358|	case 665:
  ------------------
  |  Branch (16072:2): [True: 358, False: 535k]
  ------------------
16073|    358|#line 715 "src/char_ref.rl"
16074|    358|	{te = p+1;{output[0]=0x1d553; {p++; goto _out; }}}
16075|      0|	break;
16076|    388|	case 666:
  ------------------
  |  Branch (16076:2): [True: 388, False: 535k]
  ------------------
16077|    388|#line 716 "src/char_ref.rl"
16078|    388|	{te = p+1;{output[0]=0x22a5; {p++; goto _out; }}}
16079|      0|	break;
16080|    207|	case 667:
  ------------------
  |  Branch (16080:2): [True: 207, False: 536k]
  ------------------
16081|    207|#line 717 "src/char_ref.rl"
16082|    207|	{te = p+1;{output[0]=0x22a5; {p++; goto _out; }}}
16083|      0|	break;
16084|    215|	case 668:
  ------------------
  |  Branch (16084:2): [True: 215, False: 536k]
  ------------------
16085|    215|#line 718 "src/char_ref.rl"
16086|    215|	{te = p+1;{output[0]=0x22c8; {p++; goto _out; }}}
16087|      0|	break;
16088|    232|	case 669:
  ------------------
  |  Branch (16088:2): [True: 232, False: 536k]
  ------------------
16089|    232|#line 719 "src/char_ref.rl"
16090|    232|	{te = p+1;{output[0]=0x2557; {p++; goto _out; }}}
16091|      0|	break;
16092|    196|	case 670:
  ------------------
  |  Branch (16092:2): [True: 196, False: 536k]
  ------------------
16093|    196|#line 720 "src/char_ref.rl"
16094|    196|	{te = p+1;{output[0]=0x2554; {p++; goto _out; }}}
16095|      0|	break;
16096|    265|	case 671:
  ------------------
  |  Branch (16096:2): [True: 265, False: 536k]
  ------------------
16097|    265|#line 721 "src/char_ref.rl"
16098|    265|	{te = p+1;{output[0]=0x2556; {p++; goto _out; }}}
16099|      0|	break;
16100|    237|	case 672:
  ------------------
  |  Branch (16100:2): [True: 237, False: 536k]
  ------------------
16101|    237|#line 722 "src/char_ref.rl"
16102|    237|	{te = p+1;{output[0]=0x2553; {p++; goto _out; }}}
16103|      0|	break;
16104|    300|	case 673:
  ------------------
  |  Branch (16104:2): [True: 300, False: 536k]
  ------------------
16105|    300|#line 723 "src/char_ref.rl"
16106|    300|	{te = p+1;{output[0]=0x2550; {p++; goto _out; }}}
16107|      0|	break;
16108|    206|	case 674:
  ------------------
  |  Branch (16108:2): [True: 206, False: 536k]
  ------------------
16109|    206|#line 724 "src/char_ref.rl"
16110|    206|	{te = p+1;{output[0]=0x2566; {p++; goto _out; }}}
16111|      0|	break;
16112|    205|	case 675:
  ------------------
  |  Branch (16112:2): [True: 205, False: 536k]
  ------------------
16113|    205|#line 725 "src/char_ref.rl"
16114|    205|	{te = p+1;{output[0]=0x2569; {p++; goto _out; }}}
16115|      0|	break;
16116|    219|	case 676:
  ------------------
  |  Branch (16116:2): [True: 219, False: 536k]
  ------------------
16117|    219|#line 726 "src/char_ref.rl"
16118|    219|	{te = p+1;{output[0]=0x2564; {p++; goto _out; }}}
16119|      0|	break;
16120|    221|	case 677:
  ------------------
  |  Branch (16120:2): [True: 221, False: 536k]
  ------------------
16121|    221|#line 727 "src/char_ref.rl"
16122|    221|	{te = p+1;{output[0]=0x2567; {p++; goto _out; }}}
16123|      0|	break;
16124|    322|	case 678:
  ------------------
  |  Branch (16124:2): [True: 322, False: 536k]
  ------------------
16125|    322|#line 728 "src/char_ref.rl"
16126|    322|	{te = p+1;{output[0]=0x255d; {p++; goto _out; }}}
16127|      0|	break;
16128|    206|	case 679:
  ------------------
  |  Branch (16128:2): [True: 206, False: 536k]
  ------------------
16129|    206|#line 729 "src/char_ref.rl"
16130|    206|	{te = p+1;{output[0]=0x255a; {p++; goto _out; }}}
16131|      0|	break;
16132|    224|	case 680:
  ------------------
  |  Branch (16132:2): [True: 224, False: 536k]
  ------------------
16133|    224|#line 730 "src/char_ref.rl"
16134|    224|	{te = p+1;{output[0]=0x255c; {p++; goto _out; }}}
16135|      0|	break;
16136|    264|	case 681:
  ------------------
  |  Branch (16136:2): [True: 264, False: 536k]
  ------------------
16137|    264|#line 731 "src/char_ref.rl"
16138|    264|	{te = p+1;{output[0]=0x2559; {p++; goto _out; }}}
16139|      0|	break;
16140|    391|	case 682:
  ------------------
  |  Branch (16140:2): [True: 391, False: 535k]
  ------------------
16141|    391|#line 732 "src/char_ref.rl"
16142|    391|	{te = p+1;{output[0]=0x2551; {p++; goto _out; }}}
16143|      0|	break;
16144|    297|	case 683:
  ------------------
  |  Branch (16144:2): [True: 297, False: 536k]
  ------------------
16145|    297|#line 733 "src/char_ref.rl"
16146|    297|	{te = p+1;{output[0]=0x256c; {p++; goto _out; }}}
16147|      0|	break;
16148|    311|	case 684:
  ------------------
  |  Branch (16148:2): [True: 311, False: 536k]
  ------------------
16149|    311|#line 734 "src/char_ref.rl"
16150|    311|	{te = p+1;{output[0]=0x2563; {p++; goto _out; }}}
16151|      0|	break;
16152|    203|	case 685:
  ------------------
  |  Branch (16152:2): [True: 203, False: 536k]
  ------------------
16153|    203|#line 735 "src/char_ref.rl"
16154|    203|	{te = p+1;{output[0]=0x2560; {p++; goto _out; }}}
16155|      0|	break;
16156|    242|	case 686:
  ------------------
  |  Branch (16156:2): [True: 242, False: 536k]
  ------------------
16157|    242|#line 736 "src/char_ref.rl"
16158|    242|	{te = p+1;{output[0]=0x256b; {p++; goto _out; }}}
16159|      0|	break;
16160|    203|	case 687:
  ------------------
  |  Branch (16160:2): [True: 203, False: 536k]
  ------------------
16161|    203|#line 737 "src/char_ref.rl"
16162|    203|	{te = p+1;{output[0]=0x2562; {p++; goto _out; }}}
16163|      0|	break;
16164|    306|	case 688:
  ------------------
  |  Branch (16164:2): [True: 306, False: 536k]
  ------------------
16165|    306|#line 738 "src/char_ref.rl"
16166|    306|	{te = p+1;{output[0]=0x255f; {p++; goto _out; }}}
16167|      0|	break;
16168|    279|	case 689:
  ------------------
  |  Branch (16168:2): [True: 279, False: 536k]
  ------------------
16169|    279|#line 739 "src/char_ref.rl"
16170|    279|	{te = p+1;{output[0]=0x29c9; {p++; goto _out; }}}
16171|      0|	break;
16172|    203|	case 690:
  ------------------
  |  Branch (16172:2): [True: 203, False: 536k]
  ------------------
16173|    203|#line 740 "src/char_ref.rl"
16174|    203|	{te = p+1;{output[0]=0x2555; {p++; goto _out; }}}
16175|      0|	break;
16176|    248|	case 691:
  ------------------
  |  Branch (16176:2): [True: 248, False: 536k]
  ------------------
16177|    248|#line 741 "src/char_ref.rl"
16178|    248|	{te = p+1;{output[0]=0x2552; {p++; goto _out; }}}
16179|      0|	break;
16180|    294|	case 692:
  ------------------
  |  Branch (16180:2): [True: 294, False: 536k]
  ------------------
16181|    294|#line 742 "src/char_ref.rl"
16182|    294|	{te = p+1;{output[0]=0x2510; {p++; goto _out; }}}
16183|      0|	break;
16184|    197|	case 693:
  ------------------
  |  Branch (16184:2): [True: 197, False: 536k]
  ------------------
16185|    197|#line 743 "src/char_ref.rl"
16186|    197|	{te = p+1;{output[0]=0x250c; {p++; goto _out; }}}
16187|      0|	break;
16188|    274|	case 694:
  ------------------
  |  Branch (16188:2): [True: 274, False: 536k]
  ------------------
16189|    274|#line 744 "src/char_ref.rl"
16190|    274|	{te = p+1;{output[0]=0x2500; {p++; goto _out; }}}
16191|      0|	break;
16192|    212|	case 695:
  ------------------
  |  Branch (16192:2): [True: 212, False: 536k]
  ------------------
16193|    212|#line 745 "src/char_ref.rl"
16194|    212|	{te = p+1;{output[0]=0x2565; {p++; goto _out; }}}
16195|      0|	break;
16196|    200|	case 696:
  ------------------
  |  Branch (16196:2): [True: 200, False: 536k]
  ------------------
16197|    200|#line 746 "src/char_ref.rl"
16198|    200|	{te = p+1;{output[0]=0x2568; {p++; goto _out; }}}
16199|      0|	break;
16200|    205|	case 697:
  ------------------
  |  Branch (16200:2): [True: 205, False: 536k]
  ------------------
16201|    205|#line 747 "src/char_ref.rl"
16202|    205|	{te = p+1;{output[0]=0x252c; {p++; goto _out; }}}
16203|      0|	break;
16204|    208|	case 698:
  ------------------
  |  Branch (16204:2): [True: 208, False: 536k]
  ------------------
16205|    208|#line 748 "src/char_ref.rl"
16206|    208|	{te = p+1;{output[0]=0x2534; {p++; goto _out; }}}
16207|      0|	break;
16208|    216|	case 699:
  ------------------
  |  Branch (16208:2): [True: 216, False: 536k]
  ------------------
16209|    216|#line 749 "src/char_ref.rl"
16210|    216|	{te = p+1;{output[0]=0x229f; {p++; goto _out; }}}
16211|      0|	break;
16212|    223|	case 700:
  ------------------
  |  Branch (16212:2): [True: 223, False: 536k]
  ------------------
16213|    223|#line 750 "src/char_ref.rl"
16214|    223|	{te = p+1;{output[0]=0x229e; {p++; goto _out; }}}
16215|      0|	break;
16216|    285|	case 701:
  ------------------
  |  Branch (16216:2): [True: 285, False: 536k]
  ------------------
16217|    285|#line 751 "src/char_ref.rl"
16218|    285|	{te = p+1;{output[0]=0x22a0; {p++; goto _out; }}}
16219|      0|	break;
16220|    241|	case 702:
  ------------------
  |  Branch (16220:2): [True: 241, False: 536k]
  ------------------
16221|    241|#line 752 "src/char_ref.rl"
16222|    241|	{te = p+1;{output[0]=0x255b; {p++; goto _out; }}}
16223|      0|	break;
16224|    194|	case 703:
  ------------------
  |  Branch (16224:2): [True: 194, False: 536k]
  ------------------
16225|    194|#line 753 "src/char_ref.rl"
16226|    194|	{te = p+1;{output[0]=0x2558; {p++; goto _out; }}}
16227|      0|	break;
16228|    302|	case 704:
  ------------------
  |  Branch (16228:2): [True: 302, False: 536k]
  ------------------
16229|    302|#line 754 "src/char_ref.rl"
16230|    302|	{te = p+1;{output[0]=0x2518; {p++; goto _out; }}}
16231|      0|	break;
16232|    208|	case 705:
  ------------------
  |  Branch (16232:2): [True: 208, False: 536k]
  ------------------
16233|    208|#line 755 "src/char_ref.rl"
16234|    208|	{te = p+1;{output[0]=0x2514; {p++; goto _out; }}}
16235|      0|	break;
16236|    256|	case 706:
  ------------------
  |  Branch (16236:2): [True: 256, False: 536k]
  ------------------
16237|    256|#line 756 "src/char_ref.rl"
16238|    256|	{te = p+1;{output[0]=0x2502; {p++; goto _out; }}}
16239|      0|	break;
16240|    203|	case 707:
  ------------------
  |  Branch (16240:2): [True: 203, False: 536k]
  ------------------
16241|    203|#line 757 "src/char_ref.rl"
16242|    203|	{te = p+1;{output[0]=0x256a; {p++; goto _out; }}}
16243|      0|	break;
16244|    218|	case 708:
  ------------------
  |  Branch (16244:2): [True: 218, False: 536k]
  ------------------
16245|    218|#line 758 "src/char_ref.rl"
16246|    218|	{te = p+1;{output[0]=0x2561; {p++; goto _out; }}}
16247|      0|	break;
16248|    399|	case 709:
  ------------------
  |  Branch (16248:2): [True: 399, False: 535k]
  ------------------
16249|    399|#line 759 "src/char_ref.rl"
16250|    399|	{te = p+1;{output[0]=0x255e; {p++; goto _out; }}}
16251|      0|	break;
16252|    465|	case 710:
  ------------------
  |  Branch (16252:2): [True: 465, False: 535k]
  ------------------
16253|    465|#line 760 "src/char_ref.rl"
16254|    465|	{te = p+1;{output[0]=0x253c; {p++; goto _out; }}}
16255|      0|	break;
16256|    304|	case 711:
  ------------------
  |  Branch (16256:2): [True: 304, False: 536k]
  ------------------
16257|    304|#line 761 "src/char_ref.rl"
16258|    304|	{te = p+1;{output[0]=0x2524; {p++; goto _out; }}}
16259|      0|	break;
16260|    249|	case 712:
  ------------------
  |  Branch (16260:2): [True: 249, False: 536k]
  ------------------
16261|    249|#line 762 "src/char_ref.rl"
16262|    249|	{te = p+1;{output[0]=0x251c; {p++; goto _out; }}}
16263|      0|	break;
16264|    238|	case 713:
  ------------------
  |  Branch (16264:2): [True: 238, False: 536k]
  ------------------
16265|    238|#line 763 "src/char_ref.rl"
16266|    238|	{te = p+1;{output[0]=0x2035; {p++; goto _out; }}}
16267|      0|	break;
16268|    267|	case 714:
  ------------------
  |  Branch (16268:2): [True: 267, False: 536k]
  ------------------
16269|    267|#line 764 "src/char_ref.rl"
16270|    267|	{te = p+1;{output[0]=0x2d8; {p++; goto _out; }}}
16271|      0|	break;
16272|    204|	case 2122:
  ------------------
  |  Branch (16272:2): [True: 204, False: 536k]
  ------------------
16273|    204|#line 765 "src/char_ref.rl"
16274|    204|	{te = p+1;{output[0]=0xa6; {p++; goto _out; }}}
16275|      0|	break;
16276|    294|	case 715:
  ------------------
  |  Branch (16276:2): [True: 294, False: 536k]
  ------------------
16277|    294|#line 766 "src/char_ref.rl"
16278|    294|	{te = p+1;{output[0]=0x1d4b7; {p++; goto _out; }}}
16279|      0|	break;
16280|    402|	case 716:
  ------------------
  |  Branch (16280:2): [True: 402, False: 535k]
  ------------------
16281|    402|#line 767 "src/char_ref.rl"
16282|    402|	{te = p+1;{output[0]=0x204f; {p++; goto _out; }}}
16283|      0|	break;
16284|    343|	case 717:
  ------------------
  |  Branch (16284:2): [True: 343, False: 535k]
  ------------------
16285|    343|#line 768 "src/char_ref.rl"
16286|    343|	{te = p+1;{output[0]=0x223d; {p++; goto _out; }}}
16287|      0|	break;
16288|    312|	case 718:
  ------------------
  |  Branch (16288:2): [True: 312, False: 536k]
  ------------------
16289|    312|#line 769 "src/char_ref.rl"
16290|    312|	{te = p+1;{output[0]=0x22cd; {p++; goto _out; }}}
16291|      0|	break;
16292|    203|	case 719:
  ------------------
  |  Branch (16292:2): [True: 203, False: 536k]
  ------------------
16293|    203|#line 770 "src/char_ref.rl"
16294|    203|	{te = p+1;{output[0]=0x5c; {p++; goto _out; }}}
16295|      0|	break;
16296|    200|	case 720:
  ------------------
  |  Branch (16296:2): [True: 200, False: 536k]
  ------------------
16297|    200|#line 771 "src/char_ref.rl"
16298|    200|	{te = p+1;{output[0]=0x29c5; {p++; goto _out; }}}
16299|      0|	break;
16300|    210|	case 721:
  ------------------
  |  Branch (16300:2): [True: 210, False: 536k]
  ------------------
16301|    210|#line 772 "src/char_ref.rl"
16302|    210|	{te = p+1;{output[0]=0x27c8; {p++; goto _out; }}}
16303|      0|	break;
16304|    213|	case 722:
  ------------------
  |  Branch (16304:2): [True: 213, False: 536k]
  ------------------
16305|    213|#line 773 "src/char_ref.rl"
16306|    213|	{te = p+1;{output[0]=0x2022; {p++; goto _out; }}}
16307|      0|	break;
16308|    195|	case 723:
  ------------------
  |  Branch (16308:2): [True: 195, False: 536k]
  ------------------
16309|    195|#line 774 "src/char_ref.rl"
16310|    195|	{te = p+1;{output[0]=0x2022; {p++; goto _out; }}}
16311|      0|	break;
16312|    258|	case 724:
  ------------------
  |  Branch (16312:2): [True: 258, False: 536k]
  ------------------
16313|    258|#line 775 "src/char_ref.rl"
16314|    258|	{te = p+1;{output[0]=0x224e; {p++; goto _out; }}}
16315|      0|	break;
16316|    307|	case 725:
  ------------------
  |  Branch (16316:2): [True: 307, False: 536k]
  ------------------
16317|    307|#line 776 "src/char_ref.rl"
16318|    307|	{te = p+1;{output[0]=0x2aae; {p++; goto _out; }}}
16319|      0|	break;
16320|    204|	case 726:
  ------------------
  |  Branch (16320:2): [True: 204, False: 536k]
  ------------------
16321|    204|#line 777 "src/char_ref.rl"
16322|    204|	{te = p+1;{output[0]=0x224f; {p++; goto _out; }}}
16323|      0|	break;
16324|    293|	case 727:
  ------------------
  |  Branch (16324:2): [True: 293, False: 536k]
  ------------------
16325|    293|#line 778 "src/char_ref.rl"
16326|    293|	{te = p+1;{output[0]=0x224f; {p++; goto _out; }}}
16327|      0|	break;
16328|    503|	case 728:
  ------------------
  |  Branch (16328:2): [True: 503, False: 535k]
  ------------------
16329|    503|#line 779 "src/char_ref.rl"
16330|    503|	{te = p+1;{output[0]=0x107; {p++; goto _out; }}}
16331|      0|	break;
16332|    212|	case 729:
  ------------------
  |  Branch (16332:2): [True: 212, False: 536k]
  ------------------
16333|    212|#line 780 "src/char_ref.rl"
16334|    212|	{te = p+1;{output[0]=0x2229; {p++; goto _out; }}}
16335|      0|	break;
16336|    213|	case 730:
  ------------------
  |  Branch (16336:2): [True: 213, False: 536k]
  ------------------
16337|    213|#line 781 "src/char_ref.rl"
16338|    213|	{te = p+1;{output[0]=0x2a44; {p++; goto _out; }}}
16339|      0|	break;
16340|    199|	case 731:
  ------------------
  |  Branch (16340:2): [True: 199, False: 536k]
  ------------------
16341|    199|#line 782 "src/char_ref.rl"
16342|    199|	{te = p+1;{output[0]=0x2a49; {p++; goto _out; }}}
16343|      0|	break;
16344|    253|	case 732:
  ------------------
  |  Branch (16344:2): [True: 253, False: 536k]
  ------------------
16345|    253|#line 783 "src/char_ref.rl"
16346|    253|	{te = p+1;{output[0]=0x2a4b; {p++; goto _out; }}}
16347|      0|	break;
16348|    205|	case 733:
  ------------------
  |  Branch (16348:2): [True: 205, False: 536k]
  ------------------
16349|    205|#line 784 "src/char_ref.rl"
16350|    205|	{te = p+1;{output[0]=0x2a47; {p++; goto _out; }}}
16351|      0|	break;
16352|    335|	case 734:
  ------------------
  |  Branch (16352:2): [True: 335, False: 535k]
  ------------------
16353|    335|#line 785 "src/char_ref.rl"
16354|    335|	{te = p+1;{output[0]=0x2a40; {p++; goto _out; }}}
16355|      0|	break;
16356|    231|	case 735:
  ------------------
  |  Branch (16356:2): [True: 231, False: 536k]
  ------------------
16357|    231|#line 786 "src/char_ref.rl"
16358|    231|	{te = p+1;{output[0]=0x2229; output[1]=0xfe00; {p++; goto _out; }}}
16359|      0|	break;
16360|    234|	case 736:
  ------------------
  |  Branch (16360:2): [True: 234, False: 536k]
  ------------------
16361|    234|#line 787 "src/char_ref.rl"
16362|    234|	{te = p+1;{output[0]=0x2041; {p++; goto _out; }}}
16363|      0|	break;
16364|    262|	case 737:
  ------------------
  |  Branch (16364:2): [True: 262, False: 536k]
  ------------------
16365|    262|#line 788 "src/char_ref.rl"
16366|    262|	{te = p+1;{output[0]=0x2c7; {p++; goto _out; }}}
16367|      0|	break;
16368|    197|	case 738:
  ------------------
  |  Branch (16368:2): [True: 197, False: 536k]
  ------------------
16369|    197|#line 789 "src/char_ref.rl"
16370|    197|	{te = p+1;{output[0]=0x2a4d; {p++; goto _out; }}}
16371|      0|	break;
16372|    206|	case 739:
  ------------------
  |  Branch (16372:2): [True: 206, False: 536k]
  ------------------
16373|    206|#line 790 "src/char_ref.rl"
16374|    206|	{te = p+1;{output[0]=0x10d; {p++; goto _out; }}}
16375|      0|	break;
16376|    217|	case 2124:
  ------------------
  |  Branch (16376:2): [True: 217, False: 536k]
  ------------------
16377|    217|#line 791 "src/char_ref.rl"
16378|    217|	{te = p+1;{output[0]=0xe7; {p++; goto _out; }}}
16379|      0|	break;
16380|    248|	case 740:
  ------------------
  |  Branch (16380:2): [True: 248, False: 536k]
  ------------------
16381|    248|#line 792 "src/char_ref.rl"
16382|    248|	{te = p+1;{output[0]=0x109; {p++; goto _out; }}}
16383|      0|	break;
16384|    239|	case 741:
  ------------------
  |  Branch (16384:2): [True: 239, False: 536k]
  ------------------
16385|    239|#line 793 "src/char_ref.rl"
16386|    239|	{te = p+1;{output[0]=0x2a4c; {p++; goto _out; }}}
16387|      0|	break;
16388|    195|	case 742:
  ------------------
  |  Branch (16388:2): [True: 195, False: 536k]
  ------------------
16389|    195|#line 794 "src/char_ref.rl"
16390|    195|	{te = p+1;{output[0]=0x2a50; {p++; goto _out; }}}
16391|      0|	break;
16392|    340|	case 743:
  ------------------
  |  Branch (16392:2): [True: 340, False: 535k]
  ------------------
16393|    340|#line 795 "src/char_ref.rl"
16394|    340|	{te = p+1;{output[0]=0x10b; {p++; goto _out; }}}
16395|      0|	break;
16396|    207|	case 2126:
  ------------------
  |  Branch (16396:2): [True: 207, False: 536k]
  ------------------
16397|    207|#line 796 "src/char_ref.rl"
16398|    207|	{te = p+1;{output[0]=0xb8; {p++; goto _out; }}}
16399|      0|	break;
16400|    198|	case 744:
  ------------------
  |  Branch (16400:2): [True: 198, False: 536k]
  ------------------
16401|    198|#line 797 "src/char_ref.rl"
16402|    198|	{te = p+1;{output[0]=0x29b2; {p++; goto _out; }}}
16403|      0|	break;
16404|    382|	case 2128:
  ------------------
  |  Branch (16404:2): [True: 382, False: 535k]
  ------------------
16405|    382|#line 798 "src/char_ref.rl"
16406|    382|	{te = p+1;{output[0]=0xa2; {p++; goto _out; }}}
16407|      0|	break;
16408|    198|	case 747:
  ------------------
  |  Branch (16408:2): [True: 198, False: 536k]
  ------------------
16409|    198|#line 799 "src/char_ref.rl"
16410|    198|	{te = p+1;{output[0]=0xb7; {p++; goto _out; }}}
16411|      0|	break;
16412|    211|	case 748:
  ------------------
  |  Branch (16412:2): [True: 211, False: 536k]
  ------------------
16413|    211|#line 800 "src/char_ref.rl"
16414|    211|	{te = p+1;{output[0]=0x1d520; {p++; goto _out; }}}
16415|      0|	break;
16416|    206|	case 749:
  ------------------
  |  Branch (16416:2): [True: 206, False: 536k]
  ------------------
16417|    206|#line 801 "src/char_ref.rl"
16418|    206|	{te = p+1;{output[0]=0x447; {p++; goto _out; }}}
16419|      0|	break;
16420|    210|	case 750:
  ------------------
  |  Branch (16420:2): [True: 210, False: 536k]
  ------------------
16421|    210|#line 802 "src/char_ref.rl"
16422|    210|	{te = p+1;{output[0]=0x2713; {p++; goto _out; }}}
16423|      0|	break;
16424|    194|	case 751:
  ------------------
  |  Branch (16424:2): [True: 194, False: 536k]
  ------------------
16425|    194|#line 803 "src/char_ref.rl"
16426|    194|	{te = p+1;{output[0]=0x2713; {p++; goto _out; }}}
16427|      0|	break;
16428|    292|	case 752:
  ------------------
  |  Branch (16428:2): [True: 292, False: 536k]
  ------------------
16429|    292|#line 804 "src/char_ref.rl"
16430|    292|	{te = p+1;{output[0]=0x3c7; {p++; goto _out; }}}
16431|      0|	break;
16432|    370|	case 753:
  ------------------
  |  Branch (16432:2): [True: 370, False: 535k]
  ------------------
16433|    370|#line 805 "src/char_ref.rl"
16434|    370|	{te = p+1;{output[0]=0x25cb; {p++; goto _out; }}}
16435|      0|	break;
16436|    209|	case 754:
  ------------------
  |  Branch (16436:2): [True: 209, False: 536k]
  ------------------
16437|    209|#line 806 "src/char_ref.rl"
16438|    209|	{te = p+1;{output[0]=0x29c3; {p++; goto _out; }}}
16439|      0|	break;
16440|    326|	case 755:
  ------------------
  |  Branch (16440:2): [True: 326, False: 536k]
  ------------------
16441|    326|#line 807 "src/char_ref.rl"
16442|    326|	{te = p+1;{output[0]=0x2c6; {p++; goto _out; }}}
16443|      0|	break;
16444|    207|	case 756:
  ------------------
  |  Branch (16444:2): [True: 207, False: 536k]
  ------------------
16445|    207|#line 808 "src/char_ref.rl"
16446|    207|	{te = p+1;{output[0]=0x2257; {p++; goto _out; }}}
16447|      0|	break;
16448|      0|	case 757:
  ------------------
  |  Branch (16448:2): [True: 0, False: 536k]
  ------------------
16449|      0|#line 809 "src/char_ref.rl"
16450|      0|	{te = p+1;{output[0]=0x21ba; {p++; goto _out; }}}
16451|      0|	break;
16452|      0|	case 758:
  ------------------
  |  Branch (16452:2): [True: 0, False: 536k]
  ------------------
16453|      0|#line 810 "src/char_ref.rl"
16454|      0|	{te = p+1;{output[0]=0x21bb; {p++; goto _out; }}}
16455|      0|	break;
16456|    247|	case 759:
  ------------------
  |  Branch (16456:2): [True: 247, False: 536k]
  ------------------
16457|    247|#line 811 "src/char_ref.rl"
16458|    247|	{te = p+1;{output[0]=0xae; {p++; goto _out; }}}
16459|      0|	break;
16460|    210|	case 760:
  ------------------
  |  Branch (16460:2): [True: 210, False: 536k]
  ------------------
16461|    210|#line 812 "src/char_ref.rl"
16462|    210|	{te = p+1;{output[0]=0x24c8; {p++; goto _out; }}}
16463|      0|	break;
16464|    242|	case 761:
  ------------------
  |  Branch (16464:2): [True: 242, False: 536k]
  ------------------
16465|    242|#line 813 "src/char_ref.rl"
16466|    242|	{te = p+1;{output[0]=0x229b; {p++; goto _out; }}}
16467|      0|	break;
16468|    238|	case 762:
  ------------------
  |  Branch (16468:2): [True: 238, False: 536k]
  ------------------
16469|    238|#line 814 "src/char_ref.rl"
16470|    238|	{te = p+1;{output[0]=0x229a; {p++; goto _out; }}}
16471|      0|	break;
16472|    203|	case 763:
  ------------------
  |  Branch (16472:2): [True: 203, False: 536k]
  ------------------
16473|    203|#line 815 "src/char_ref.rl"
16474|    203|	{te = p+1;{output[0]=0x229d; {p++; goto _out; }}}
16475|      0|	break;
16476|    253|	case 764:
  ------------------
  |  Branch (16476:2): [True: 253, False: 536k]
  ------------------
16477|    253|#line 816 "src/char_ref.rl"
16478|    253|	{te = p+1;{output[0]=0x2257; {p++; goto _out; }}}
16479|      0|	break;
16480|      0|	case 765:
  ------------------
  |  Branch (16480:2): [True: 0, False: 536k]
  ------------------
16481|      0|#line 817 "src/char_ref.rl"
16482|      0|	{te = p+1;{output[0]=0x2a10; {p++; goto _out; }}}
16483|      0|	break;
16484|    241|	case 766:
  ------------------
  |  Branch (16484:2): [True: 241, False: 536k]
  ------------------
16485|    241|#line 818 "src/char_ref.rl"
16486|    241|	{te = p+1;{output[0]=0x2aef; {p++; goto _out; }}}
16487|      0|	break;
16488|    198|	case 767:
  ------------------
  |  Branch (16488:2): [True: 198, False: 536k]
  ------------------
16489|    198|#line 819 "src/char_ref.rl"
16490|    198|	{te = p+1;{output[0]=0x29c2; {p++; goto _out; }}}
16491|      0|	break;
16492|    348|	case 768:
  ------------------
  |  Branch (16492:2): [True: 348, False: 535k]
  ------------------
16493|    348|#line 820 "src/char_ref.rl"
16494|    348|	{te = p+1;{output[0]=0x2663; {p++; goto _out; }}}
16495|      0|	break;
16496|    202|	case 769:
  ------------------
  |  Branch (16496:2): [True: 202, False: 536k]
  ------------------
16497|    202|#line 821 "src/char_ref.rl"
16498|    202|	{te = p+1;{output[0]=0x2663; {p++; goto _out; }}}
16499|      0|	break;
16500|    197|	case 770:
  ------------------
  |  Branch (16500:2): [True: 197, False: 536k]
  ------------------
16501|    197|#line 822 "src/char_ref.rl"
16502|    197|	{te = p+1;{output[0]=0x3a; {p++; goto _out; }}}
16503|      0|	break;
16504|    207|	case 771:
  ------------------
  |  Branch (16504:2): [True: 207, False: 536k]
  ------------------
16505|    207|#line 823 "src/char_ref.rl"
16506|    207|	{te = p+1;{output[0]=0x2254; {p++; goto _out; }}}
16507|      0|	break;
16508|    203|	case 772:
  ------------------
  |  Branch (16508:2): [True: 203, False: 536k]
  ------------------
16509|    203|#line 824 "src/char_ref.rl"
16510|    203|	{te = p+1;{output[0]=0x2254; {p++; goto _out; }}}
16511|      0|	break;
16512|    440|	case 773:
  ------------------
  |  Branch (16512:2): [True: 440, False: 535k]
  ------------------
16513|    440|#line 825 "src/char_ref.rl"
16514|    440|	{te = p+1;{output[0]=0x2c; {p++; goto _out; }}}
16515|      0|	break;
16516|    242|	case 774:
  ------------------
  |  Branch (16516:2): [True: 242, False: 536k]
  ------------------
16517|    242|#line 826 "src/char_ref.rl"
16518|    242|	{te = p+1;{output[0]=0x40; {p++; goto _out; }}}
16519|      0|	break;
16520|    466|	case 775:
  ------------------
  |  Branch (16520:2): [True: 466, False: 535k]
  ------------------
16521|    466|#line 827 "src/char_ref.rl"
16522|    466|	{te = p+1;{output[0]=0x2201; {p++; goto _out; }}}
16523|      0|	break;
16524|    325|	case 776:
  ------------------
  |  Branch (16524:2): [True: 325, False: 536k]
  ------------------
16525|    325|#line 828 "src/char_ref.rl"
16526|    325|	{te = p+1;{output[0]=0x2218; {p++; goto _out; }}}
16527|      0|	break;
16528|    199|	case 777:
  ------------------
  |  Branch (16528:2): [True: 199, False: 536k]
  ------------------
16529|    199|#line 829 "src/char_ref.rl"
16530|    199|	{te = p+1;{output[0]=0x2201; {p++; goto _out; }}}
16531|      0|	break;
16532|      0|	case 778:
  ------------------
  |  Branch (16532:2): [True: 0, False: 536k]
  ------------------
16533|      0|#line 830 "src/char_ref.rl"
16534|      0|	{te = p+1;{output[0]=0x2102; {p++; goto _out; }}}
16535|      0|	break;
16536|    223|	case 779:
  ------------------
  |  Branch (16536:2): [True: 223, False: 536k]
  ------------------
16537|    223|#line 831 "src/char_ref.rl"
16538|    223|	{te = p+1;{output[0]=0x2245; {p++; goto _out; }}}
16539|      0|	break;
16540|    275|	case 780:
  ------------------
  |  Branch (16540:2): [True: 275, False: 536k]
  ------------------
16541|    275|#line 832 "src/char_ref.rl"
16542|    275|	{te = p+1;{output[0]=0x2a6d; {p++; goto _out; }}}
16543|      0|	break;
16544|    222|	case 781:
  ------------------
  |  Branch (16544:2): [True: 222, False: 536k]
  ------------------
16545|    222|#line 833 "src/char_ref.rl"
16546|    222|	{te = p+1;{output[0]=0x222e; {p++; goto _out; }}}
16547|      0|	break;
16548|    244|	case 782:
  ------------------
  |  Branch (16548:2): [True: 244, False: 536k]
  ------------------
16549|    244|#line 834 "src/char_ref.rl"
16550|    244|	{te = p+1;{output[0]=0x1d554; {p++; goto _out; }}}
16551|      0|	break;
16552|    199|	case 783:
  ------------------
  |  Branch (16552:2): [True: 199, False: 536k]
  ------------------
16553|    199|#line 835 "src/char_ref.rl"
16554|    199|	{te = p+1;{output[0]=0x2210; {p++; goto _out; }}}
16555|      0|	break;
16556|    228|	case 2130:
  ------------------
  |  Branch (16556:2): [True: 228, False: 536k]
  ------------------
16557|    228|#line 836 "src/char_ref.rl"
16558|    228|	{te = p+1;{output[0]=0xa9; {p++; goto _out; }}}
16559|      0|	break;
16560|    225|	case 785:
  ------------------
  |  Branch (16560:2): [True: 225, False: 536k]
  ------------------
16561|    225|#line 837 "src/char_ref.rl"
16562|    225|	{te = p+1;{output[0]=0x2117; {p++; goto _out; }}}
16563|      0|	break;
16564|    205|	case 786:
  ------------------
  |  Branch (16564:2): [True: 205, False: 536k]
  ------------------
16565|    205|#line 838 "src/char_ref.rl"
16566|    205|	{te = p+1;{output[0]=0x21b5; {p++; goto _out; }}}
16567|      0|	break;
16568|    295|	case 787:
  ------------------
  |  Branch (16568:2): [True: 295, False: 536k]
  ------------------
16569|    295|#line 839 "src/char_ref.rl"
16570|    295|	{te = p+1;{output[0]=0x2717; {p++; goto _out; }}}
16571|      0|	break;
16572|    206|	case 788:
  ------------------
  |  Branch (16572:2): [True: 206, False: 536k]
  ------------------
16573|    206|#line 840 "src/char_ref.rl"
16574|    206|	{te = p+1;{output[0]=0x1d4b8; {p++; goto _out; }}}
16575|      0|	break;
16576|    321|	case 789:
  ------------------
  |  Branch (16576:2): [True: 321, False: 536k]
  ------------------
16577|    321|#line 841 "src/char_ref.rl"
16578|    321|	{te = p+1;{output[0]=0x2acf; {p++; goto _out; }}}
16579|      0|	break;
16580|    227|	case 790:
  ------------------
  |  Branch (16580:2): [True: 227, False: 536k]
  ------------------
16581|    227|#line 842 "src/char_ref.rl"
16582|    227|	{te = p+1;{output[0]=0x2ad1; {p++; goto _out; }}}
16583|      0|	break;
16584|    235|	case 791:
  ------------------
  |  Branch (16584:2): [True: 235, False: 536k]
  ------------------
16585|    235|#line 843 "src/char_ref.rl"
16586|    235|	{te = p+1;{output[0]=0x2ad0; {p++; goto _out; }}}
16587|      0|	break;
16588|    247|	case 792:
  ------------------
  |  Branch (16588:2): [True: 247, False: 536k]
  ------------------
16589|    247|#line 844 "src/char_ref.rl"
16590|    247|	{te = p+1;{output[0]=0x2ad2; {p++; goto _out; }}}
16591|      0|	break;
16592|    224|	case 793:
  ------------------
  |  Branch (16592:2): [True: 224, False: 536k]
  ------------------
16593|    224|#line 845 "src/char_ref.rl"
16594|    224|	{te = p+1;{output[0]=0x22ef; {p++; goto _out; }}}
16595|      0|	break;
16596|    218|	case 794:
  ------------------
  |  Branch (16596:2): [True: 218, False: 536k]
  ------------------
16597|    218|#line 846 "src/char_ref.rl"
16598|    218|	{te = p+1;{output[0]=0x2938; {p++; goto _out; }}}
16599|      0|	break;
16600|    195|	case 795:
  ------------------
  |  Branch (16600:2): [True: 195, False: 536k]
  ------------------
16601|    195|#line 847 "src/char_ref.rl"
16602|    195|	{te = p+1;{output[0]=0x2935; {p++; goto _out; }}}
16603|      0|	break;
16604|    212|	case 796:
  ------------------
  |  Branch (16604:2): [True: 212, False: 536k]
  ------------------
16605|    212|#line 848 "src/char_ref.rl"
16606|    212|	{te = p+1;{output[0]=0x22de; {p++; goto _out; }}}
16607|      0|	break;
16608|    229|	case 797:
  ------------------
  |  Branch (16608:2): [True: 229, False: 536k]
  ------------------
16609|    229|#line 849 "src/char_ref.rl"
16610|    229|	{te = p+1;{output[0]=0x22df; {p++; goto _out; }}}
16611|      0|	break;
16612|    344|	case 798:
  ------------------
  |  Branch (16612:2): [True: 344, False: 535k]
  ------------------
16613|    344|#line 850 "src/char_ref.rl"
16614|    344|	{te = p+1;{output[0]=0x21b6; {p++; goto _out; }}}
16615|      0|	break;
16616|    286|	case 799:
  ------------------
  |  Branch (16616:2): [True: 286, False: 536k]
  ------------------
16617|    286|#line 851 "src/char_ref.rl"
16618|    286|	{te = p+1;{output[0]=0x293d; {p++; goto _out; }}}
16619|      0|	break;
16620|    214|	case 800:
  ------------------
  |  Branch (16620:2): [True: 214, False: 536k]
  ------------------
16621|    214|#line 852 "src/char_ref.rl"
16622|    214|	{te = p+1;{output[0]=0x222a; {p++; goto _out; }}}
16623|      0|	break;
16624|    216|	case 801:
  ------------------
  |  Branch (16624:2): [True: 216, False: 536k]
  ------------------
16625|    216|#line 853 "src/char_ref.rl"
16626|    216|	{te = p+1;{output[0]=0x2a48; {p++; goto _out; }}}
16627|      0|	break;
16628|    217|	case 802:
  ------------------
  |  Branch (16628:2): [True: 217, False: 536k]
  ------------------
16629|    217|#line 854 "src/char_ref.rl"
16630|    217|	{te = p+1;{output[0]=0x2a46; {p++; goto _out; }}}
16631|      0|	break;
16632|    239|	case 803:
  ------------------
  |  Branch (16632:2): [True: 239, False: 536k]
  ------------------
16633|    239|#line 855 "src/char_ref.rl"
16634|    239|	{te = p+1;{output[0]=0x2a4a; {p++; goto _out; }}}
16635|      0|	break;
16636|    262|	case 804:
  ------------------
  |  Branch (16636:2): [True: 262, False: 536k]
  ------------------
16637|    262|#line 856 "src/char_ref.rl"
16638|    262|	{te = p+1;{output[0]=0x228d; {p++; goto _out; }}}
16639|      0|	break;
16640|    263|	case 805:
  ------------------
  |  Branch (16640:2): [True: 263, False: 536k]
  ------------------
16641|    263|#line 857 "src/char_ref.rl"
16642|    263|	{te = p+1;{output[0]=0x2a45; {p++; goto _out; }}}
16643|      0|	break;
16644|    237|	case 806:
  ------------------
  |  Branch (16644:2): [True: 237, False: 536k]
  ------------------
16645|    237|#line 858 "src/char_ref.rl"
16646|    237|	{te = p+1;{output[0]=0x222a; output[1]=0xfe00; {p++; goto _out; }}}
16647|      0|	break;
16648|    196|	case 807:
  ------------------
  |  Branch (16648:2): [True: 196, False: 536k]
  ------------------
16649|    196|#line 859 "src/char_ref.rl"
16650|    196|	{te = p+1;{output[0]=0x21b7; {p++; goto _out; }}}
16651|      0|	break;
16652|    195|	case 808:
  ------------------
  |  Branch (16652:2): [True: 195, False: 536k]
  ------------------
16653|    195|#line 860 "src/char_ref.rl"
16654|    195|	{te = p+1;{output[0]=0x293c; {p++; goto _out; }}}
16655|      0|	break;
16656|      0|	case 809:
  ------------------
  |  Branch (16656:2): [True: 0, False: 536k]
  ------------------
16657|      0|#line 861 "src/char_ref.rl"
16658|      0|	{te = p+1;{output[0]=0x22de; {p++; goto _out; }}}
16659|      0|	break;
16660|      0|	case 810:
  ------------------
  |  Branch (16660:2): [True: 0, False: 536k]
  ------------------
16661|      0|#line 862 "src/char_ref.rl"
16662|      0|	{te = p+1;{output[0]=0x22df; {p++; goto _out; }}}
16663|      0|	break;
16664|      0|	case 811:
  ------------------
  |  Branch (16664:2): [True: 0, False: 536k]
  ------------------
16665|      0|#line 863 "src/char_ref.rl"
16666|      0|	{te = p+1;{output[0]=0x22ce; {p++; goto _out; }}}
16667|      0|	break;
16668|      0|	case 812:
  ------------------
  |  Branch (16668:2): [True: 0, False: 536k]
  ------------------
16669|      0|#line 864 "src/char_ref.rl"
16670|      0|	{te = p+1;{output[0]=0x22cf; {p++; goto _out; }}}
16671|      0|	break;
16672|    202|	case 2132:
  ------------------
  |  Branch (16672:2): [True: 202, False: 536k]
  ------------------
16673|    202|#line 865 "src/char_ref.rl"
16674|    202|	{te = p+1;{output[0]=0xa4; {p++; goto _out; }}}
16675|      0|	break;
16676|      0|	case 813:
  ------------------
  |  Branch (16676:2): [True: 0, False: 536k]
  ------------------
16677|      0|#line 866 "src/char_ref.rl"
16678|      0|	{te = p+1;{output[0]=0x21b6; {p++; goto _out; }}}
16679|      0|	break;
16680|      0|	case 814:
  ------------------
  |  Branch (16680:2): [True: 0, False: 536k]
  ------------------
16681|      0|#line 867 "src/char_ref.rl"
16682|      0|	{te = p+1;{output[0]=0x21b7; {p++; goto _out; }}}
16683|      0|	break;
16684|    272|	case 815:
  ------------------
  |  Branch (16684:2): [True: 272, False: 536k]
  ------------------
16685|    272|#line 868 "src/char_ref.rl"
16686|    272|	{te = p+1;{output[0]=0x22ce; {p++; goto _out; }}}
16687|      0|	break;
16688|    211|	case 816:
  ------------------
  |  Branch (16688:2): [True: 211, False: 536k]
  ------------------
16689|    211|#line 869 "src/char_ref.rl"
16690|    211|	{te = p+1;{output[0]=0x22cf; {p++; goto _out; }}}
16691|      0|	break;
16692|    197|	case 817:
  ------------------
  |  Branch (16692:2): [True: 197, False: 536k]
  ------------------
16693|    197|#line 870 "src/char_ref.rl"
16694|    197|	{te = p+1;{output[0]=0x2232; {p++; goto _out; }}}
16695|      0|	break;
16696|    212|	case 818:
  ------------------
  |  Branch (16696:2): [True: 212, False: 536k]
  ------------------
16697|    212|#line 871 "src/char_ref.rl"
16698|    212|	{te = p+1;{output[0]=0x2231; {p++; goto _out; }}}
16699|      0|	break;
16700|    205|	case 819:
  ------------------
  |  Branch (16700:2): [True: 205, False: 536k]
  ------------------
16701|    205|#line 872 "src/char_ref.rl"
16702|    205|	{te = p+1;{output[0]=0x232d; {p++; goto _out; }}}
16703|      0|	break;
16704|    204|	case 820:
  ------------------
  |  Branch (16704:2): [True: 204, False: 536k]
  ------------------
16705|    204|#line 873 "src/char_ref.rl"
16706|    204|	{te = p+1;{output[0]=0x21d3; {p++; goto _out; }}}
16707|      0|	break;
16708|    275|	case 821:
  ------------------
  |  Branch (16708:2): [True: 275, False: 536k]
  ------------------
16709|    275|#line 874 "src/char_ref.rl"
16710|    275|	{te = p+1;{output[0]=0x2965; {p++; goto _out; }}}
16711|      0|	break;
16712|    221|	case 822:
  ------------------
  |  Branch (16712:2): [True: 221, False: 536k]
  ------------------
16713|    221|#line 875 "src/char_ref.rl"
16714|    221|	{te = p+1;{output[0]=0x2020; {p++; goto _out; }}}
16715|      0|	break;
16716|    232|	case 823:
  ------------------
  |  Branch (16716:2): [True: 232, False: 536k]
  ------------------
16717|    232|#line 876 "src/char_ref.rl"
16718|    232|	{te = p+1;{output[0]=0x2138; {p++; goto _out; }}}
16719|      0|	break;
16720|    243|	case 824:
  ------------------
  |  Branch (16720:2): [True: 243, False: 536k]
  ------------------
16721|    243|#line 877 "src/char_ref.rl"
16722|    243|	{te = p+1;{output[0]=0x2193; {p++; goto _out; }}}
16723|      0|	break;
16724|    322|	case 825:
  ------------------
  |  Branch (16724:2): [True: 322, False: 536k]
  ------------------
16725|    322|#line 878 "src/char_ref.rl"
16726|    322|	{te = p+1;{output[0]=0x2010; {p++; goto _out; }}}
16727|      0|	break;
16728|    207|	case 826:
  ------------------
  |  Branch (16728:2): [True: 207, False: 536k]
  ------------------
16729|    207|#line 879 "src/char_ref.rl"
16730|    207|	{te = p+1;{output[0]=0x22a3; {p++; goto _out; }}}
16731|      0|	break;
16732|      0|	case 827:
  ------------------
  |  Branch (16732:2): [True: 0, False: 536k]
  ------------------
16733|      0|#line 880 "src/char_ref.rl"
16734|      0|	{te = p+1;{output[0]=0x290f; {p++; goto _out; }}}
16735|      0|	break;
16736|    204|	case 828:
  ------------------
  |  Branch (16736:2): [True: 204, False: 536k]
  ------------------
16737|    204|#line 881 "src/char_ref.rl"
16738|    204|	{te = p+1;{output[0]=0x2dd; {p++; goto _out; }}}
16739|      0|	break;
16740|    224|	case 829:
  ------------------
  |  Branch (16740:2): [True: 224, False: 536k]
  ------------------
16741|    224|#line 882 "src/char_ref.rl"
16742|    224|	{te = p+1;{output[0]=0x10f; {p++; goto _out; }}}
16743|      0|	break;
16744|    239|	case 830:
  ------------------
  |  Branch (16744:2): [True: 239, False: 536k]
  ------------------
16745|    239|#line 883 "src/char_ref.rl"
16746|    239|	{te = p+1;{output[0]=0x434; {p++; goto _out; }}}
16747|      0|	break;
16748|    218|	case 831:
  ------------------
  |  Branch (16748:2): [True: 218, False: 536k]
  ------------------
16749|    218|#line 884 "src/char_ref.rl"
16750|    218|	{te = p+1;{output[0]=0x2146; {p++; goto _out; }}}
16751|      0|	break;
16752|    205|	case 832:
  ------------------
  |  Branch (16752:2): [True: 205, False: 536k]
  ------------------
16753|    205|#line 885 "src/char_ref.rl"
16754|    205|	{te = p+1;{output[0]=0x2021; {p++; goto _out; }}}
16755|      0|	break;
16756|    205|	case 833:
  ------------------
  |  Branch (16756:2): [True: 205, False: 536k]
  ------------------
16757|    205|#line 886 "src/char_ref.rl"
16758|    205|	{te = p+1;{output[0]=0x21ca; {p++; goto _out; }}}
16759|      0|	break;
16760|    203|	case 834:
  ------------------
  |  Branch (16760:2): [True: 203, False: 536k]
  ------------------
16761|    203|#line 887 "src/char_ref.rl"
16762|    203|	{te = p+1;{output[0]=0x2a77; {p++; goto _out; }}}
16763|      0|	break;
16764|    225|	case 2134:
  ------------------
  |  Branch (16764:2): [True: 225, False: 536k]
  ------------------
16765|    225|#line 888 "src/char_ref.rl"
16766|    225|	{te = p+1;{output[0]=0xb0; {p++; goto _out; }}}
16767|      0|	break;
16768|    220|	case 835:
  ------------------
  |  Branch (16768:2): [True: 220, False: 536k]
  ------------------
16769|    220|#line 889 "src/char_ref.rl"
16770|    220|	{te = p+1;{output[0]=0x3b4; {p++; goto _out; }}}
16771|      0|	break;
16772|    229|	case 836:
  ------------------
  |  Branch (16772:2): [True: 229, False: 536k]
  ------------------
16773|    229|#line 890 "src/char_ref.rl"
16774|    229|	{te = p+1;{output[0]=0x29b1; {p++; goto _out; }}}
16775|      0|	break;
16776|      0|	case 837:
  ------------------
  |  Branch (16776:2): [True: 0, False: 536k]
  ------------------
16777|      0|#line 891 "src/char_ref.rl"
16778|      0|	{te = p+1;{output[0]=0x297f; {p++; goto _out; }}}
16779|      0|	break;
16780|    416|	case 838:
  ------------------
  |  Branch (16780:2): [True: 416, False: 535k]
  ------------------
16781|    416|#line 892 "src/char_ref.rl"
16782|    416|	{te = p+1;{output[0]=0x1d521; {p++; goto _out; }}}
16783|      0|	break;
16784|    194|	case 839:
  ------------------
  |  Branch (16784:2): [True: 194, False: 536k]
  ------------------
16785|    194|#line 893 "src/char_ref.rl"
16786|    194|	{te = p+1;{output[0]=0x21c3; {p++; goto _out; }}}
16787|      0|	break;
16788|    206|	case 840:
  ------------------
  |  Branch (16788:2): [True: 206, False: 536k]
  ------------------
16789|    206|#line 894 "src/char_ref.rl"
16790|    206|	{te = p+1;{output[0]=0x21c2; {p++; goto _out; }}}
16791|      0|	break;
16792|    218|	case 841:
  ------------------
  |  Branch (16792:2): [True: 218, False: 536k]
  ------------------
16793|    218|#line 895 "src/char_ref.rl"
16794|    218|	{te = p+1;{output[0]=0x22c4; {p++; goto _out; }}}
16795|      0|	break;
16796|    240|	case 842:
  ------------------
  |  Branch (16796:2): [True: 240, False: 536k]
  ------------------
16797|    240|#line 896 "src/char_ref.rl"
16798|    240|	{te = p+1;{output[0]=0x22c4; {p++; goto _out; }}}
16799|      0|	break;
16800|    371|	case 843:
  ------------------
  |  Branch (16800:2): [True: 371, False: 535k]
  ------------------
16801|    371|#line 897 "src/char_ref.rl"
16802|    371|	{te = p+1;{output[0]=0x2666; {p++; goto _out; }}}
16803|      0|	break;
16804|    213|	case 844:
  ------------------
  |  Branch (16804:2): [True: 213, False: 536k]
  ------------------
16805|    213|#line 898 "src/char_ref.rl"
16806|    213|	{te = p+1;{output[0]=0x2666; {p++; goto _out; }}}
16807|      0|	break;
16808|    197|	case 845:
  ------------------
  |  Branch (16808:2): [True: 197, False: 536k]
  ------------------
16809|    197|#line 899 "src/char_ref.rl"
16810|    197|	{te = p+1;{output[0]=0xa8; {p++; goto _out; }}}
16811|      0|	break;
16812|    236|	case 846:
  ------------------
  |  Branch (16812:2): [True: 236, False: 536k]
  ------------------
16813|    236|#line 900 "src/char_ref.rl"
16814|    236|	{te = p+1;{output[0]=0x3dd; {p++; goto _out; }}}
16815|      0|	break;
16816|    197|	case 847:
  ------------------
  |  Branch (16816:2): [True: 197, False: 536k]
  ------------------
16817|    197|#line 901 "src/char_ref.rl"
16818|    197|	{te = p+1;{output[0]=0x22f2; {p++; goto _out; }}}
16819|      0|	break;
16820|    351|	case 848:
  ------------------
  |  Branch (16820:2): [True: 351, False: 535k]
  ------------------
16821|    351|#line 902 "src/char_ref.rl"
16822|    351|	{te = p+1;{output[0]=0xf7; {p++; goto _out; }}}
16823|      0|	break;
16824|    213|	case 2136:
  ------------------
  |  Branch (16824:2): [True: 213, False: 536k]
  ------------------
16825|    213|#line 903 "src/char_ref.rl"
16826|    213|	{te = p+1;{output[0]=0xf7; {p++; goto _out; }}}
16827|      0|	break;
16828|    196|	case 850:
  ------------------
  |  Branch (16828:2): [True: 196, False: 536k]
  ------------------
16829|    196|#line 904 "src/char_ref.rl"
16830|    196|	{te = p+1;{output[0]=0x22c7; {p++; goto _out; }}}
16831|      0|	break;
16832|    199|	case 851:
  ------------------
  |  Branch (16832:2): [True: 199, False: 536k]
  ------------------
16833|    199|#line 905 "src/char_ref.rl"
16834|    199|	{te = p+1;{output[0]=0x22c7; {p++; goto _out; }}}
16835|      0|	break;
16836|    208|	case 852:
  ------------------
  |  Branch (16836:2): [True: 208, False: 536k]
  ------------------
16837|    208|#line 906 "src/char_ref.rl"
16838|    208|	{te = p+1;{output[0]=0x452; {p++; goto _out; }}}
16839|      0|	break;
16840|    195|	case 853:
  ------------------
  |  Branch (16840:2): [True: 195, False: 536k]
  ------------------
16841|    195|#line 907 "src/char_ref.rl"
16842|    195|	{te = p+1;{output[0]=0x231e; {p++; goto _out; }}}
16843|      0|	break;
16844|    208|	case 854:
  ------------------
  |  Branch (16844:2): [True: 208, False: 536k]
  ------------------
16845|    208|#line 908 "src/char_ref.rl"
16846|    208|	{te = p+1;{output[0]=0x230d; {p++; goto _out; }}}
16847|      0|	break;
16848|    372|	case 855:
  ------------------
  |  Branch (16848:2): [True: 372, False: 535k]
  ------------------
16849|    372|#line 909 "src/char_ref.rl"
16850|    372|	{te = p+1;{output[0]=0x24; {p++; goto _out; }}}
16851|      0|	break;
16852|    434|	case 856:
  ------------------
  |  Branch (16852:2): [True: 434, False: 535k]
  ------------------
16853|    434|#line 910 "src/char_ref.rl"
16854|    434|	{te = p+1;{output[0]=0x1d555; {p++; goto _out; }}}
16855|      0|	break;
16856|    446|	case 857:
  ------------------
  |  Branch (16856:2): [True: 446, False: 535k]
  ------------------
16857|    446|#line 911 "src/char_ref.rl"
16858|    446|	{te = p+1;{output[0]=0x2d9; {p++; goto _out; }}}
16859|      0|	break;
16860|    211|	case 858:
  ------------------
  |  Branch (16860:2): [True: 211, False: 536k]
  ------------------
16861|    211|#line 912 "src/char_ref.rl"
16862|    211|	{te = p+1;{output[0]=0x2250; {p++; goto _out; }}}
16863|      0|	break;
16864|    221|	case 859:
  ------------------
  |  Branch (16864:2): [True: 221, False: 536k]
  ------------------
16865|    221|#line 913 "src/char_ref.rl"
16866|    221|	{te = p+1;{output[0]=0x2251; {p++; goto _out; }}}
16867|      0|	break;
16868|    256|	case 860:
  ------------------
  |  Branch (16868:2): [True: 256, False: 536k]
  ------------------
16869|    256|#line 914 "src/char_ref.rl"
16870|    256|	{te = p+1;{output[0]=0x2238; {p++; goto _out; }}}
16871|      0|	break;
16872|    204|	case 861:
  ------------------
  |  Branch (16872:2): [True: 204, False: 536k]
  ------------------
16873|    204|#line 915 "src/char_ref.rl"
16874|    204|	{te = p+1;{output[0]=0x2214; {p++; goto _out; }}}
16875|      0|	break;
16876|    230|	case 862:
  ------------------
  |  Branch (16876:2): [True: 230, False: 536k]
  ------------------
16877|    230|#line 916 "src/char_ref.rl"
16878|    230|	{te = p+1;{output[0]=0x22a1; {p++; goto _out; }}}
16879|      0|	break;
16880|      0|	case 863:
  ------------------
  |  Branch (16880:2): [True: 0, False: 536k]
  ------------------
16881|      0|#line 917 "src/char_ref.rl"
16882|      0|	{te = p+1;{output[0]=0x2306; {p++; goto _out; }}}
16883|      0|	break;
16884|    210|	case 864:
  ------------------
  |  Branch (16884:2): [True: 210, False: 536k]
  ------------------
16885|    210|#line 918 "src/char_ref.rl"
16886|    210|	{te = p+1;{output[0]=0x2193; {p++; goto _out; }}}
16887|      0|	break;
16888|    198|	case 865:
  ------------------
  |  Branch (16888:2): [True: 198, False: 536k]
  ------------------
16889|    198|#line 919 "src/char_ref.rl"
16890|    198|	{te = p+1;{output[0]=0x21ca; {p++; goto _out; }}}
16891|      0|	break;
16892|      0|	case 866:
  ------------------
  |  Branch (16892:2): [True: 0, False: 536k]
  ------------------
16893|      0|#line 920 "src/char_ref.rl"
16894|      0|	{te = p+1;{output[0]=0x21c3; {p++; goto _out; }}}
16895|      0|	break;
16896|      0|	case 867:
  ------------------
  |  Branch (16896:2): [True: 0, False: 536k]
  ------------------
16897|      0|#line 921 "src/char_ref.rl"
16898|      0|	{te = p+1;{output[0]=0x21c2; {p++; goto _out; }}}
16899|      0|	break;
16900|      0|	case 868:
  ------------------
  |  Branch (16900:2): [True: 0, False: 536k]
  ------------------
16901|      0|#line 922 "src/char_ref.rl"
16902|      0|	{te = p+1;{output[0]=0x2910; {p++; goto _out; }}}
16903|      0|	break;
16904|    228|	case 869:
  ------------------
  |  Branch (16904:2): [True: 228, False: 536k]
  ------------------
16905|    228|#line 923 "src/char_ref.rl"
16906|    228|	{te = p+1;{output[0]=0x231f; {p++; goto _out; }}}
16907|      0|	break;
16908|    226|	case 870:
  ------------------
  |  Branch (16908:2): [True: 226, False: 536k]
  ------------------
16909|    226|#line 924 "src/char_ref.rl"
16910|    226|	{te = p+1;{output[0]=0x230c; {p++; goto _out; }}}
16911|      0|	break;
16912|    333|	case 871:
  ------------------
  |  Branch (16912:2): [True: 333, False: 535k]
  ------------------
16913|    333|#line 925 "src/char_ref.rl"
16914|    333|	{te = p+1;{output[0]=0x1d4b9; {p++; goto _out; }}}
16915|      0|	break;
16916|    250|	case 872:
  ------------------
  |  Branch (16916:2): [True: 250, False: 536k]
  ------------------
16917|    250|#line 926 "src/char_ref.rl"
16918|    250|	{te = p+1;{output[0]=0x455; {p++; goto _out; }}}
16919|      0|	break;
16920|    262|	case 873:
  ------------------
  |  Branch (16920:2): [True: 262, False: 536k]
  ------------------
16921|    262|#line 927 "src/char_ref.rl"
16922|    262|	{te = p+1;{output[0]=0x29f6; {p++; goto _out; }}}
16923|      0|	break;
16924|    202|	case 874:
  ------------------
  |  Branch (16924:2): [True: 202, False: 536k]
  ------------------
16925|    202|#line 928 "src/char_ref.rl"
16926|    202|	{te = p+1;{output[0]=0x111; {p++; goto _out; }}}
16927|      0|	break;
16928|    512|	case 875:
  ------------------
  |  Branch (16928:2): [True: 512, False: 535k]
  ------------------
16929|    512|#line 929 "src/char_ref.rl"
16930|    512|	{te = p+1;{output[0]=0x22f1; {p++; goto _out; }}}
16931|      0|	break;
16932|    233|	case 876:
  ------------------
  |  Branch (16932:2): [True: 233, False: 536k]
  ------------------
16933|    233|#line 930 "src/char_ref.rl"
16934|    233|	{te = p+1;{output[0]=0x25bf; {p++; goto _out; }}}
16935|      0|	break;
16936|    242|	case 877:
  ------------------
  |  Branch (16936:2): [True: 242, False: 536k]
  ------------------
16937|    242|#line 931 "src/char_ref.rl"
16938|    242|	{te = p+1;{output[0]=0x25be; {p++; goto _out; }}}
16939|      0|	break;
16940|    258|	case 878:
  ------------------
  |  Branch (16940:2): [True: 258, False: 536k]
  ------------------
16941|    258|#line 932 "src/char_ref.rl"
16942|    258|	{te = p+1;{output[0]=0x21f5; {p++; goto _out; }}}
16943|      0|	break;
16944|    216|	case 879:
  ------------------
  |  Branch (16944:2): [True: 216, False: 536k]
  ------------------
16945|    216|#line 933 "src/char_ref.rl"
16946|    216|	{te = p+1;{output[0]=0x296f; {p++; goto _out; }}}
16947|      0|	break;
16948|    348|	case 880:
  ------------------
  |  Branch (16948:2): [True: 348, False: 535k]
  ------------------
16949|    348|#line 934 "src/char_ref.rl"
16950|    348|	{te = p+1;{output[0]=0x29a6; {p++; goto _out; }}}
16951|      0|	break;
16952|    258|	case 881:
  ------------------
  |  Branch (16952:2): [True: 258, False: 536k]
  ------------------
16953|    258|#line 935 "src/char_ref.rl"
16954|    258|	{te = p+1;{output[0]=0x45f; {p++; goto _out; }}}
16955|      0|	break;
16956|    197|	case 882:
  ------------------
  |  Branch (16956:2): [True: 197, False: 536k]
  ------------------
16957|    197|#line 936 "src/char_ref.rl"
16958|    197|	{te = p+1;{output[0]=0x27ff; {p++; goto _out; }}}
16959|      0|	break;
16960|    240|	case 883:
  ------------------
  |  Branch (16960:2): [True: 240, False: 536k]
  ------------------
16961|    240|#line 937 "src/char_ref.rl"
16962|    240|	{te = p+1;{output[0]=0x2a77; {p++; goto _out; }}}
16963|      0|	break;
16964|    377|	case 884:
  ------------------
  |  Branch (16964:2): [True: 377, False: 535k]
  ------------------
16965|    377|#line 938 "src/char_ref.rl"
16966|    377|	{te = p+1;{output[0]=0x2251; {p++; goto _out; }}}
16967|      0|	break;
16968|    217|	case 2138:
  ------------------
  |  Branch (16968:2): [True: 217, False: 536k]
  ------------------
16969|    217|#line 939 "src/char_ref.rl"
16970|    217|	{te = p+1;{output[0]=0xe9; {p++; goto _out; }}}
16971|      0|	break;
16972|    204|	case 885:
  ------------------
  |  Branch (16972:2): [True: 204, False: 536k]
  ------------------
16973|    204|#line 940 "src/char_ref.rl"
16974|    204|	{te = p+1;{output[0]=0x2a6e; {p++; goto _out; }}}
16975|      0|	break;
16976|    240|	case 886:
  ------------------
  |  Branch (16976:2): [True: 240, False: 536k]
  ------------------
16977|    240|#line 941 "src/char_ref.rl"
16978|    240|	{te = p+1;{output[0]=0x11b; {p++; goto _out; }}}
16979|      0|	break;
16980|    199|	case 887:
  ------------------
  |  Branch (16980:2): [True: 199, False: 536k]
  ------------------
16981|    199|#line 942 "src/char_ref.rl"
16982|    199|	{te = p+1;{output[0]=0x2256; {p++; goto _out; }}}
16983|      0|	break;
16984|    203|	case 2140:
  ------------------
  |  Branch (16984:2): [True: 203, False: 536k]
  ------------------
16985|    203|#line 943 "src/char_ref.rl"
16986|    203|	{te = p+1;{output[0]=0xea; {p++; goto _out; }}}
16987|      0|	break;
16988|    281|	case 888:
  ------------------
  |  Branch (16988:2): [True: 281, False: 536k]
  ------------------
16989|    281|#line 944 "src/char_ref.rl"
16990|    281|	{te = p+1;{output[0]=0x2255; {p++; goto _out; }}}
16991|      0|	break;
16992|    210|	case 889:
  ------------------
  |  Branch (16992:2): [True: 210, False: 536k]
  ------------------
16993|    210|#line 945 "src/char_ref.rl"
16994|    210|	{te = p+1;{output[0]=0x44d; {p++; goto _out; }}}
16995|      0|	break;
16996|    205|	case 890:
  ------------------
  |  Branch (16996:2): [True: 205, False: 536k]
  ------------------
16997|    205|#line 946 "src/char_ref.rl"
16998|    205|	{te = p+1;{output[0]=0x117; {p++; goto _out; }}}
16999|      0|	break;
17000|    405|	case 891:
  ------------------
  |  Branch (17000:2): [True: 405, False: 535k]
  ------------------
17001|    405|#line 947 "src/char_ref.rl"
17002|    405|	{te = p+1;{output[0]=0x2147; {p++; goto _out; }}}
17003|      0|	break;
17004|    262|	case 892:
  ------------------
  |  Branch (17004:2): [True: 262, False: 536k]
  ------------------
17005|    262|#line 948 "src/char_ref.rl"
17006|    262|	{te = p+1;{output[0]=0x2252; {p++; goto _out; }}}
17007|      0|	break;
17008|    288|	case 893:
  ------------------
  |  Branch (17008:2): [True: 288, False: 536k]
  ------------------
17009|    288|#line 949 "src/char_ref.rl"
17010|    288|	{te = p+1;{output[0]=0x1d522; {p++; goto _out; }}}
17011|      0|	break;
17012|    544|	case 894:
  ------------------
  |  Branch (17012:2): [True: 544, False: 535k]
  ------------------
17013|    544|#line 950 "src/char_ref.rl"
17014|    544|	{te = p+1;{output[0]=0x2a9a; {p++; goto _out; }}}
17015|      0|	break;
17016|    201|	case 2142:
  ------------------
  |  Branch (17016:2): [True: 201, False: 536k]
  ------------------
17017|    201|#line 951 "src/char_ref.rl"
17018|    201|	{te = p+1;{output[0]=0xe8; {p++; goto _out; }}}
17019|      0|	break;
17020|    257|	case 895:
  ------------------
  |  Branch (17020:2): [True: 257, False: 536k]
  ------------------
17021|    257|#line 952 "src/char_ref.rl"
17022|    257|	{te = p+1;{output[0]=0x2a96; {p++; goto _out; }}}
17023|      0|	break;
17024|    260|	case 896:
  ------------------
  |  Branch (17024:2): [True: 260, False: 536k]
  ------------------
17025|    260|#line 953 "src/char_ref.rl"
17026|    260|	{te = p+1;{output[0]=0x2a98; {p++; goto _out; }}}
17027|      0|	break;
17028|    425|	case 897:
  ------------------
  |  Branch (17028:2): [True: 425, False: 535k]
  ------------------
17029|    425|#line 954 "src/char_ref.rl"
17030|    425|	{te = p+1;{output[0]=0x2a99; {p++; goto _out; }}}
17031|      0|	break;
17032|    208|	case 898:
  ------------------
  |  Branch (17032:2): [True: 208, False: 536k]
  ------------------
17033|    208|#line 955 "src/char_ref.rl"
17034|    208|	{te = p+1;{output[0]=0x23e7; {p++; goto _out; }}}
17035|      0|	break;
17036|    206|	case 899:
  ------------------
  |  Branch (17036:2): [True: 206, False: 536k]
  ------------------
17037|    206|#line 956 "src/char_ref.rl"
17038|    206|	{te = p+1;{output[0]=0x2113; {p++; goto _out; }}}
17039|      0|	break;
17040|    347|	case 900:
  ------------------
  |  Branch (17040:2): [True: 347, False: 535k]
  ------------------
17041|    347|#line 957 "src/char_ref.rl"
17042|    347|	{te = p+1;{output[0]=0x2a95; {p++; goto _out; }}}
17043|      0|	break;
17044|    249|	case 901:
  ------------------
  |  Branch (17044:2): [True: 249, False: 536k]
  ------------------
17045|    249|#line 958 "src/char_ref.rl"
17046|    249|	{te = p+1;{output[0]=0x2a97; {p++; goto _out; }}}
17047|      0|	break;
17048|    259|	case 902:
  ------------------
  |  Branch (17048:2): [True: 259, False: 536k]
  ------------------
17049|    259|#line 959 "src/char_ref.rl"
17050|    259|	{te = p+1;{output[0]=0x113; {p++; goto _out; }}}
17051|      0|	break;
17052|    254|	case 903:
  ------------------
  |  Branch (17052:2): [True: 254, False: 536k]
  ------------------
17053|    254|#line 960 "src/char_ref.rl"
17054|    254|	{te = p+1;{output[0]=0x2205; {p++; goto _out; }}}
17055|      0|	break;
17056|    234|	case 904:
  ------------------
  |  Branch (17056:2): [True: 234, False: 536k]
  ------------------
17057|    234|#line 961 "src/char_ref.rl"
17058|    234|	{te = p+1;{output[0]=0x2205; {p++; goto _out; }}}
17059|      0|	break;
17060|    227|	case 905:
  ------------------
  |  Branch (17060:2): [True: 227, False: 536k]
  ------------------
17061|    227|#line 962 "src/char_ref.rl"
17062|    227|	{te = p+1;{output[0]=0x2205; {p++; goto _out; }}}
17063|      0|	break;
17064|    212|	case 907:
  ------------------
  |  Branch (17064:2): [True: 212, False: 536k]
  ------------------
17065|    212|#line 963 "src/char_ref.rl"
17066|    212|	{te = p+1;{output[0]=0x2004; {p++; goto _out; }}}
17067|      0|	break;
17068|    287|	case 908:
  ------------------
  |  Branch (17068:2): [True: 287, False: 536k]
  ------------------
17069|    287|#line 964 "src/char_ref.rl"
17070|    287|	{te = p+1;{output[0]=0x2005; {p++; goto _out; }}}
17071|      0|	break;
17072|    196|	case 906:
  ------------------
  |  Branch (17072:2): [True: 196, False: 536k]
  ------------------
17073|    196|#line 965 "src/char_ref.rl"
17074|    196|	{te = p+1;{output[0]=0x2003; {p++; goto _out; }}}
17075|      0|	break;
17076|    279|	case 909:
  ------------------
  |  Branch (17076:2): [True: 279, False: 536k]
  ------------------
17077|    279|#line 966 "src/char_ref.rl"
17078|    279|	{te = p+1;{output[0]=0x14b; {p++; goto _out; }}}
17079|      0|	break;
17080|    198|	case 910:
  ------------------
  |  Branch (17080:2): [True: 198, False: 536k]
  ------------------
17081|    198|#line 967 "src/char_ref.rl"
17082|    198|	{te = p+1;{output[0]=0x2002; {p++; goto _out; }}}
17083|      0|	break;
17084|    211|	case 911:
  ------------------
  |  Branch (17084:2): [True: 211, False: 536k]
  ------------------
17085|    211|#line 968 "src/char_ref.rl"
17086|    211|	{te = p+1;{output[0]=0x119; {p++; goto _out; }}}
17087|      0|	break;
17088|    213|	case 912:
  ------------------
  |  Branch (17088:2): [True: 213, False: 536k]
  ------------------
17089|    213|#line 969 "src/char_ref.rl"
17090|    213|	{te = p+1;{output[0]=0x1d556; {p++; goto _out; }}}
17091|      0|	break;
17092|    298|	case 913:
  ------------------
  |  Branch (17092:2): [True: 298, False: 536k]
  ------------------
17093|    298|#line 970 "src/char_ref.rl"
17094|    298|	{te = p+1;{output[0]=0x22d5; {p++; goto _out; }}}
17095|      0|	break;
17096|    361|	case 914:
  ------------------
  |  Branch (17096:2): [True: 361, False: 535k]
  ------------------
17097|    361|#line 971 "src/char_ref.rl"
17098|    361|	{te = p+1;{output[0]=0x29e3; {p++; goto _out; }}}
17099|      0|	break;
17100|    237|	case 915:
  ------------------
  |  Branch (17100:2): [True: 237, False: 536k]
  ------------------
17101|    237|#line 972 "src/char_ref.rl"
17102|    237|	{te = p+1;{output[0]=0x2a71; {p++; goto _out; }}}
17103|      0|	break;
17104|    234|	case 916:
  ------------------
  |  Branch (17104:2): [True: 234, False: 536k]
  ------------------
17105|    234|#line 973 "src/char_ref.rl"
17106|    234|	{te = p+1;{output[0]=0x3b5; {p++; goto _out; }}}
17107|      0|	break;
17108|    219|	case 917:
  ------------------
  |  Branch (17108:2): [True: 219, False: 536k]
  ------------------
17109|    219|#line 974 "src/char_ref.rl"
17110|    219|	{te = p+1;{output[0]=0x3b5; {p++; goto _out; }}}
17111|      0|	break;
17112|    214|	case 918:
  ------------------
  |  Branch (17112:2): [True: 214, False: 536k]
  ------------------
17113|    214|#line 975 "src/char_ref.rl"
17114|    214|	{te = p+1;{output[0]=0x3f5; {p++; goto _out; }}}
17115|      0|	break;
17116|    200|	case 919:
  ------------------
  |  Branch (17116:2): [True: 200, False: 536k]
  ------------------
17117|    200|#line 976 "src/char_ref.rl"
17118|    200|	{te = p+1;{output[0]=0x2256; {p++; goto _out; }}}
17119|      0|	break;
17120|    230|	case 920:
  ------------------
  |  Branch (17120:2): [True: 230, False: 536k]
  ------------------
17121|    230|#line 977 "src/char_ref.rl"
17122|    230|	{te = p+1;{output[0]=0x2255; {p++; goto _out; }}}
17123|      0|	break;
17124|    345|	case 921:
  ------------------
  |  Branch (17124:2): [True: 345, False: 535k]
  ------------------
17125|    345|#line 978 "src/char_ref.rl"
17126|    345|	{te = p+1;{output[0]=0x2242; {p++; goto _out; }}}
17127|      0|	break;
17128|      0|	case 922:
  ------------------
  |  Branch (17128:2): [True: 0, False: 536k]
  ------------------
17129|      0|#line 979 "src/char_ref.rl"
17130|      0|	{te = p+1;{output[0]=0x2a96; {p++; goto _out; }}}
17131|      0|	break;
17132|      0|	case 923:
  ------------------
  |  Branch (17132:2): [True: 0, False: 536k]
  ------------------
17133|      0|#line 980 "src/char_ref.rl"
17134|      0|	{te = p+1;{output[0]=0x2a95; {p++; goto _out; }}}
17135|      0|	break;
17136|    197|	case 924:
  ------------------
  |  Branch (17136:2): [True: 197, False: 536k]
  ------------------
17137|    197|#line 981 "src/char_ref.rl"
17138|    197|	{te = p+1;{output[0]=0x3d; {p++; goto _out; }}}
17139|      0|	break;
17140|    251|	case 925:
  ------------------
  |  Branch (17140:2): [True: 251, False: 536k]
  ------------------
17141|    251|#line 982 "src/char_ref.rl"
17142|    251|	{te = p+1;{output[0]=0x225f; {p++; goto _out; }}}
17143|      0|	break;
17144|    235|	case 926:
  ------------------
  |  Branch (17144:2): [True: 235, False: 536k]
  ------------------
17145|    235|#line 983 "src/char_ref.rl"
17146|    235|	{te = p+1;{output[0]=0x2261; {p++; goto _out; }}}
17147|      0|	break;
17148|    286|	case 927:
  ------------------
  |  Branch (17148:2): [True: 286, False: 536k]
  ------------------
17149|    286|#line 984 "src/char_ref.rl"
17150|    286|	{te = p+1;{output[0]=0x2a78; {p++; goto _out; }}}
17151|      0|	break;
17152|    233|	case 928:
  ------------------
  |  Branch (17152:2): [True: 233, False: 536k]
  ------------------
17153|    233|#line 985 "src/char_ref.rl"
17154|    233|	{te = p+1;{output[0]=0x29e5; {p++; goto _out; }}}
17155|      0|	break;
17156|    255|	case 929:
  ------------------
  |  Branch (17156:2): [True: 255, False: 536k]
  ------------------
17157|    255|#line 986 "src/char_ref.rl"
17158|    255|	{te = p+1;{output[0]=0x2253; {p++; goto _out; }}}
17159|      0|	break;
17160|    225|	case 930:
  ------------------
  |  Branch (17160:2): [True: 225, False: 536k]
  ------------------
17161|    225|#line 987 "src/char_ref.rl"
17162|    225|	{te = p+1;{output[0]=0x2971; {p++; goto _out; }}}
17163|      0|	break;
17164|    220|	case 931:
  ------------------
  |  Branch (17164:2): [True: 220, False: 536k]
  ------------------
17165|    220|#line 988 "src/char_ref.rl"
17166|    220|	{te = p+1;{output[0]=0x212f; {p++; goto _out; }}}
17167|      0|	break;
17168|    202|	case 932:
  ------------------
  |  Branch (17168:2): [True: 202, False: 536k]
  ------------------
17169|    202|#line 989 "src/char_ref.rl"
17170|    202|	{te = p+1;{output[0]=0x2250; {p++; goto _out; }}}
17171|      0|	break;
17172|    225|	case 933:
  ------------------
  |  Branch (17172:2): [True: 225, False: 536k]
  ------------------
17173|    225|#line 990 "src/char_ref.rl"
17174|    225|	{te = p+1;{output[0]=0x2242; {p++; goto _out; }}}
17175|      0|	break;
17176|    391|	case 934:
  ------------------
  |  Branch (17176:2): [True: 391, False: 535k]
  ------------------
17177|    391|#line 991 "src/char_ref.rl"
17178|    391|	{te = p+1;{output[0]=0x3b7; {p++; goto _out; }}}
17179|      0|	break;
17180|    235|	case 2144:
  ------------------
  |  Branch (17180:2): [True: 235, False: 536k]
  ------------------
17181|    235|#line 992 "src/char_ref.rl"
17182|    235|	{te = p+1;{output[0]=0xf0; {p++; goto _out; }}}
17183|      0|	break;
17184|    258|	case 2146:
  ------------------
  |  Branch (17184:2): [True: 258, False: 536k]
  ------------------
17185|    258|#line 993 "src/char_ref.rl"
17186|    258|	{te = p+1;{output[0]=0xeb; {p++; goto _out; }}}
17187|      0|	break;
17188|    287|	case 935:
  ------------------
  |  Branch (17188:2): [True: 287, False: 536k]
  ------------------
17189|    287|#line 994 "src/char_ref.rl"
17190|    287|	{te = p+1;{output[0]=0x20ac; {p++; goto _out; }}}
17191|      0|	break;
17192|    224|	case 936:
  ------------------
  |  Branch (17192:2): [True: 224, False: 536k]
  ------------------
17193|    224|#line 995 "src/char_ref.rl"
17194|    224|	{te = p+1;{output[0]=0x21; {p++; goto _out; }}}
17195|      0|	break;
17196|    287|	case 937:
  ------------------
  |  Branch (17196:2): [True: 287, False: 536k]
  ------------------
17197|    287|#line 996 "src/char_ref.rl"
17198|    287|	{te = p+1;{output[0]=0x2203; {p++; goto _out; }}}
17199|      0|	break;
17200|      0|	case 938:
  ------------------
  |  Branch (17200:2): [True: 0, False: 536k]
  ------------------
17201|      0|#line 997 "src/char_ref.rl"
17202|      0|	{te = p+1;{output[0]=0x2130; {p++; goto _out; }}}
17203|      0|	break;
17204|      0|	case 939:
  ------------------
  |  Branch (17204:2): [True: 0, False: 536k]
  ------------------
17205|      0|#line 998 "src/char_ref.rl"
17206|      0|	{te = p+1;{output[0]=0x2147; {p++; goto _out; }}}
17207|      0|	break;
17208|      0|	case 940:
  ------------------
  |  Branch (17208:2): [True: 0, False: 536k]
  ------------------
17209|      0|#line 999 "src/char_ref.rl"
17210|      0|	{te = p+1;{output[0]=0x2252; {p++; goto _out; }}}
17211|      0|	break;
17212|    227|	case 941:
  ------------------
  |  Branch (17212:2): [True: 227, False: 536k]
  ------------------
17213|    227|#line 1000 "src/char_ref.rl"
17214|    227|	{te = p+1;{output[0]=0x444; {p++; goto _out; }}}
17215|      0|	break;
17216|    211|	case 942:
  ------------------
  |  Branch (17216:2): [True: 211, False: 536k]
  ------------------
17217|    211|#line 1001 "src/char_ref.rl"
17218|    211|	{te = p+1;{output[0]=0x2640; {p++; goto _out; }}}
17219|      0|	break;
17220|    199|	case 943:
  ------------------
  |  Branch (17220:2): [True: 199, False: 536k]
  ------------------
17221|    199|#line 1002 "src/char_ref.rl"
17222|    199|	{te = p+1;{output[0]=0xfb03; {p++; goto _out; }}}
17223|      0|	break;
17224|    243|	case 944:
  ------------------
  |  Branch (17224:2): [True: 243, False: 536k]
  ------------------
17225|    243|#line 1003 "src/char_ref.rl"
17226|    243|	{te = p+1;{output[0]=0xfb00; {p++; goto _out; }}}
17227|      0|	break;
17228|    197|	case 945:
  ------------------
  |  Branch (17228:2): [True: 197, False: 536k]
  ------------------
17229|    197|#line 1004 "src/char_ref.rl"
17230|    197|	{te = p+1;{output[0]=0xfb04; {p++; goto _out; }}}
17231|      0|	break;
17232|    269|	case 946:
  ------------------
  |  Branch (17232:2): [True: 269, False: 536k]
  ------------------
17233|    269|#line 1005 "src/char_ref.rl"
17234|    269|	{te = p+1;{output[0]=0x1d523; {p++; goto _out; }}}
17235|      0|	break;
17236|    210|	case 947:
  ------------------
  |  Branch (17236:2): [True: 210, False: 536k]
  ------------------
17237|    210|#line 1006 "src/char_ref.rl"
17238|    210|	{te = p+1;{output[0]=0xfb01; {p++; goto _out; }}}
17239|      0|	break;
17240|    201|	case 948:
  ------------------
  |  Branch (17240:2): [True: 201, False: 536k]
  ------------------
17241|    201|#line 1007 "src/char_ref.rl"
17242|    201|	{te = p+1;{output[0]=0x66; output[1]=0x6a; {p++; goto _out; }}}
17243|      0|	break;
17244|    478|	case 949:
  ------------------
  |  Branch (17244:2): [True: 478, False: 535k]
  ------------------
17245|    478|#line 1008 "src/char_ref.rl"
17246|    478|	{te = p+1;{output[0]=0x266d; {p++; goto _out; }}}
17247|      0|	break;
17248|    229|	case 950:
  ------------------
  |  Branch (17248:2): [True: 229, False: 536k]
  ------------------
17249|    229|#line 1009 "src/char_ref.rl"
17250|    229|	{te = p+1;{output[0]=0xfb02; {p++; goto _out; }}}
17251|      0|	break;
17252|    201|	case 951:
  ------------------
  |  Branch (17252:2): [True: 201, False: 536k]
  ------------------
17253|    201|#line 1010 "src/char_ref.rl"
17254|    201|	{te = p+1;{output[0]=0x25b1; {p++; goto _out; }}}
17255|      0|	break;
17256|    216|	case 952:
  ------------------
  |  Branch (17256:2): [True: 216, False: 536k]
  ------------------
17257|    216|#line 1011 "src/char_ref.rl"
17258|    216|	{te = p+1;{output[0]=0x192; {p++; goto _out; }}}
17259|      0|	break;
17260|    267|	case 953:
  ------------------
  |  Branch (17260:2): [True: 267, False: 536k]
  ------------------
17261|    267|#line 1012 "src/char_ref.rl"
17262|    267|	{te = p+1;{output[0]=0x1d557; {p++; goto _out; }}}
17263|      0|	break;
17264|    260|	case 954:
  ------------------
  |  Branch (17264:2): [True: 260, False: 536k]
  ------------------
17265|    260|#line 1013 "src/char_ref.rl"
17266|    260|	{te = p+1;{output[0]=0x2200; {p++; goto _out; }}}
17267|      0|	break;
17268|    275|	case 955:
  ------------------
  |  Branch (17268:2): [True: 275, False: 536k]
  ------------------
17269|    275|#line 1014 "src/char_ref.rl"
17270|    275|	{te = p+1;{output[0]=0x22d4; {p++; goto _out; }}}
17271|      0|	break;
17272|    423|	case 956:
  ------------------
  |  Branch (17272:2): [True: 423, False: 535k]
  ------------------
17273|    423|#line 1015 "src/char_ref.rl"
17274|    423|	{te = p+1;{output[0]=0x2ad9; {p++; goto _out; }}}
17275|      0|	break;
17276|      0|	case 957:
  ------------------
  |  Branch (17276:2): [True: 0, False: 536k]
  ------------------
17277|      0|#line 1016 "src/char_ref.rl"
17278|      0|	{te = p+1;{output[0]=0x2a0d; {p++; goto _out; }}}
17279|      0|	break;
17280|    296|	case 2148:
  ------------------
  |  Branch (17280:2): [True: 296, False: 536k]
  ------------------
17281|    296|#line 1017 "src/char_ref.rl"
17282|    296|	{te = p+1;{output[0]=0xbd; {p++; goto _out; }}}
17283|      0|	break;
17284|    255|	case 958:
  ------------------
  |  Branch (17284:2): [True: 255, False: 536k]
  ------------------
17285|    255|#line 1018 "src/char_ref.rl"
17286|    255|	{te = p+1;{output[0]=0x2153; {p++; goto _out; }}}
17287|      0|	break;
17288|    361|	case 2150:
  ------------------
  |  Branch (17288:2): [True: 361, False: 535k]
  ------------------
17289|    361|#line 1019 "src/char_ref.rl"
17290|    361|	{te = p+1;{output[0]=0xbc; {p++; goto _out; }}}
17291|      0|	break;
17292|    293|	case 959:
  ------------------
  |  Branch (17292:2): [True: 293, False: 536k]
  ------------------
17293|    293|#line 1020 "src/char_ref.rl"
17294|    293|	{te = p+1;{output[0]=0x2155; {p++; goto _out; }}}
17295|      0|	break;
17296|    341|	case 960:
  ------------------
  |  Branch (17296:2): [True: 341, False: 535k]
  ------------------
17297|    341|#line 1021 "src/char_ref.rl"
17298|    341|	{te = p+1;{output[0]=0x2159; {p++; goto _out; }}}
17299|      0|	break;
17300|    202|	case 961:
  ------------------
  |  Branch (17300:2): [True: 202, False: 536k]
  ------------------
17301|    202|#line 1022 "src/char_ref.rl"
17302|    202|	{te = p+1;{output[0]=0x215b; {p++; goto _out; }}}
17303|      0|	break;
17304|    339|	case 962:
  ------------------
  |  Branch (17304:2): [True: 339, False: 535k]
  ------------------
17305|    339|#line 1023 "src/char_ref.rl"
17306|    339|	{te = p+1;{output[0]=0x2154; {p++; goto _out; }}}
17307|      0|	break;
17308|    216|	case 963:
  ------------------
  |  Branch (17308:2): [True: 216, False: 536k]
  ------------------
17309|    216|#line 1024 "src/char_ref.rl"
17310|    216|	{te = p+1;{output[0]=0x2156; {p++; goto _out; }}}
17311|      0|	break;
17312|    208|	case 2152:
  ------------------
  |  Branch (17312:2): [True: 208, False: 536k]
  ------------------
17313|    208|#line 1025 "src/char_ref.rl"
17314|    208|	{te = p+1;{output[0]=0xbe; {p++; goto _out; }}}
17315|      0|	break;
17316|    294|	case 964:
  ------------------
  |  Branch (17316:2): [True: 294, False: 536k]
  ------------------
17317|    294|#line 1026 "src/char_ref.rl"
17318|    294|	{te = p+1;{output[0]=0x2157; {p++; goto _out; }}}
17319|      0|	break;
17320|    202|	case 965:
  ------------------
  |  Branch (17320:2): [True: 202, False: 536k]
  ------------------
17321|    202|#line 1027 "src/char_ref.rl"
17322|    202|	{te = p+1;{output[0]=0x215c; {p++; goto _out; }}}
17323|      0|	break;
17324|    231|	case 966:
  ------------------
  |  Branch (17324:2): [True: 231, False: 536k]
  ------------------
17325|    231|#line 1028 "src/char_ref.rl"
17326|    231|	{te = p+1;{output[0]=0x2158; {p++; goto _out; }}}
17327|      0|	break;
17328|    321|	case 967:
  ------------------
  |  Branch (17328:2): [True: 321, False: 536k]
  ------------------
17329|    321|#line 1029 "src/char_ref.rl"
17330|    321|	{te = p+1;{output[0]=0x215a; {p++; goto _out; }}}
17331|      0|	break;
17332|    208|	case 968:
  ------------------
  |  Branch (17332:2): [True: 208, False: 536k]
  ------------------
17333|    208|#line 1030 "src/char_ref.rl"
17334|    208|	{te = p+1;{output[0]=0x215d; {p++; goto _out; }}}
17335|      0|	break;
17336|    195|	case 969:
  ------------------
  |  Branch (17336:2): [True: 195, False: 536k]
  ------------------
17337|    195|#line 1031 "src/char_ref.rl"
17338|    195|	{te = p+1;{output[0]=0x215e; {p++; goto _out; }}}
17339|      0|	break;
17340|    247|	case 970:
  ------------------
  |  Branch (17340:2): [True: 247, False: 536k]
  ------------------
17341|    247|#line 1032 "src/char_ref.rl"
17342|    247|	{te = p+1;{output[0]=0x2044; {p++; goto _out; }}}
17343|      0|	break;
17344|    495|	case 971:
  ------------------
  |  Branch (17344:2): [True: 495, False: 535k]
  ------------------
17345|    495|#line 1033 "src/char_ref.rl"
17346|    495|	{te = p+1;{output[0]=0x2322; {p++; goto _out; }}}
17347|      0|	break;
17348|    454|	case 972:
  ------------------
  |  Branch (17348:2): [True: 454, False: 535k]
  ------------------
17349|    454|#line 1034 "src/char_ref.rl"
17350|    454|	{te = p+1;{output[0]=0x1d4bb; {p++; goto _out; }}}
17351|      0|	break;
17352|    523|	case 973:
  ------------------
  |  Branch (17352:2): [True: 523, False: 535k]
  ------------------
17353|    523|#line 1035 "src/char_ref.rl"
17354|    523|	{te = p+1;{output[0]=0x2267; {p++; goto _out; }}}
17355|      0|	break;
17356|    199|	case 974:
  ------------------
  |  Branch (17356:2): [True: 199, False: 536k]
  ------------------
17357|    199|#line 1036 "src/char_ref.rl"
17358|    199|	{te = p+1;{output[0]=0x2a8c; {p++; goto _out; }}}
17359|      0|	break;
17360|    227|	case 975:
  ------------------
  |  Branch (17360:2): [True: 227, False: 536k]
  ------------------
17361|    227|#line 1037 "src/char_ref.rl"
17362|    227|	{te = p+1;{output[0]=0x1f5; {p++; goto _out; }}}
17363|      0|	break;
17364|    217|	case 976:
  ------------------
  |  Branch (17364:2): [True: 217, False: 536k]
  ------------------
17365|    217|#line 1038 "src/char_ref.rl"
17366|    217|	{te = p+1;{output[0]=0x3b3; {p++; goto _out; }}}
17367|      0|	break;
17368|    219|	case 977:
  ------------------
  |  Branch (17368:2): [True: 219, False: 536k]
  ------------------
17369|    219|#line 1039 "src/char_ref.rl"
17370|    219|	{te = p+1;{output[0]=0x3dd; {p++; goto _out; }}}
17371|      0|	break;
17372|    286|	case 978:
  ------------------
  |  Branch (17372:2): [True: 286, False: 536k]
  ------------------
17373|    286|#line 1040 "src/char_ref.rl"
17374|    286|	{te = p+1;{output[0]=0x2a86; {p++; goto _out; }}}
17375|      0|	break;
17376|    200|	case 979:
  ------------------
  |  Branch (17376:2): [True: 200, False: 536k]
  ------------------
17377|    200|#line 1041 "src/char_ref.rl"
17378|    200|	{te = p+1;{output[0]=0x11f; {p++; goto _out; }}}
17379|      0|	break;
17380|    378|	case 980:
  ------------------
  |  Branch (17380:2): [True: 378, False: 535k]
  ------------------
17381|    378|#line 1042 "src/char_ref.rl"
17382|    378|	{te = p+1;{output[0]=0x11d; {p++; goto _out; }}}
17383|      0|	break;
17384|    237|	case 981:
  ------------------
  |  Branch (17384:2): [True: 237, False: 536k]
  ------------------
17385|    237|#line 1043 "src/char_ref.rl"
17386|    237|	{te = p+1;{output[0]=0x433; {p++; goto _out; }}}
17387|      0|	break;
17388|    223|	case 982:
  ------------------
  |  Branch (17388:2): [True: 223, False: 536k]
  ------------------
17389|    223|#line 1044 "src/char_ref.rl"
17390|    223|	{te = p+1;{output[0]=0x121; {p++; goto _out; }}}
17391|      0|	break;
17392|    944|	case 983:
  ------------------
  |  Branch (17392:2): [True: 944, False: 535k]
  ------------------
17393|    944|#line 1045 "src/char_ref.rl"
17394|    944|	{te = p+1;{output[0]=0x2265; {p++; goto _out; }}}
17395|      0|	break;
17396|    272|	case 984:
  ------------------
  |  Branch (17396:2): [True: 272, False: 536k]
  ------------------
17397|    272|#line 1046 "src/char_ref.rl"
17398|    272|	{te = p+1;{output[0]=0x22db; {p++; goto _out; }}}
17399|      0|	break;
17400|    245|	case 985:
  ------------------
  |  Branch (17400:2): [True: 245, False: 536k]
  ------------------
17401|    245|#line 1047 "src/char_ref.rl"
17402|    245|	{te = p+1;{output[0]=0x2265; {p++; goto _out; }}}
17403|      0|	break;
17404|    234|	case 986:
  ------------------
  |  Branch (17404:2): [True: 234, False: 536k]
  ------------------
17405|    234|#line 1048 "src/char_ref.rl"
17406|    234|	{te = p+1;{output[0]=0x2267; {p++; goto _out; }}}
17407|      0|	break;
17408|      0|	case 987:
  ------------------
  |  Branch (17408:2): [True: 0, False: 536k]
  ------------------
17409|      0|#line 1049 "src/char_ref.rl"
17410|      0|	{te = p+1;{output[0]=0x2a7e; {p++; goto _out; }}}
17411|      0|	break;
17412|    391|	case 988:
  ------------------
  |  Branch (17412:2): [True: 391, False: 535k]
  ------------------
17413|    391|#line 1050 "src/char_ref.rl"
17414|    391|	{te = p+1;{output[0]=0x2a7e; {p++; goto _out; }}}
17415|      0|	break;
17416|    222|	case 989:
  ------------------
  |  Branch (17416:2): [True: 222, False: 536k]
  ------------------
17417|    222|#line 1051 "src/char_ref.rl"
17418|    222|	{te = p+1;{output[0]=0x2aa9; {p++; goto _out; }}}
17419|      0|	break;
17420|    199|	case 990:
  ------------------
  |  Branch (17420:2): [True: 199, False: 536k]
  ------------------
17421|    199|#line 1052 "src/char_ref.rl"
17422|    199|	{te = p+1;{output[0]=0x2a80; {p++; goto _out; }}}
17423|      0|	break;
17424|    317|	case 991:
  ------------------
  |  Branch (17424:2): [True: 317, False: 536k]
  ------------------
17425|    317|#line 1053 "src/char_ref.rl"
17426|    317|	{te = p+1;{output[0]=0x2a82; {p++; goto _out; }}}
17427|      0|	break;
17428|    221|	case 992:
  ------------------
  |  Branch (17428:2): [True: 221, False: 536k]
  ------------------
17429|    221|#line 1054 "src/char_ref.rl"
17430|    221|	{te = p+1;{output[0]=0x2a84; {p++; goto _out; }}}
17431|      0|	break;
17432|    226|	case 993:
  ------------------
  |  Branch (17432:2): [True: 226, False: 536k]
  ------------------
17433|    226|#line 1055 "src/char_ref.rl"
17434|    226|	{te = p+1;{output[0]=0x22db; output[1]=0xfe00; {p++; goto _out; }}}
17435|      0|	break;
17436|    201|	case 994:
  ------------------
  |  Branch (17436:2): [True: 201, False: 536k]
  ------------------
17437|    201|#line 1056 "src/char_ref.rl"
17438|    201|	{te = p+1;{output[0]=0x2a94; {p++; goto _out; }}}
17439|      0|	break;
17440|    232|	case 995:
  ------------------
  |  Branch (17440:2): [True: 232, False: 536k]
  ------------------
17441|    232|#line 1057 "src/char_ref.rl"
17442|    232|	{te = p+1;{output[0]=0x1d524; {p++; goto _out; }}}
17443|      0|	break;
17444|    863|	case 996:
  ------------------
  |  Branch (17444:2): [True: 863, False: 535k]
  ------------------
17445|    863|#line 1058 "src/char_ref.rl"
17446|    863|	{te = p+1;{output[0]=0x226b; {p++; goto _out; }}}
17447|      0|	break;
17448|    383|	case 997:
  ------------------
  |  Branch (17448:2): [True: 383, False: 535k]
  ------------------
17449|    383|#line 1059 "src/char_ref.rl"
17450|    383|	{te = p+1;{output[0]=0x22d9; {p++; goto _out; }}}
17451|      0|	break;
17452|    205|	case 998:
  ------------------
  |  Branch (17452:2): [True: 205, False: 536k]
  ------------------
17453|    205|#line 1060 "src/char_ref.rl"
17454|    205|	{te = p+1;{output[0]=0x2137; {p++; goto _out; }}}
17455|      0|	break;
17456|    275|	case 999:
  ------------------
  |  Branch (17456:2): [True: 275, False: 536k]
  ------------------
17457|    275|#line 1061 "src/char_ref.rl"
17458|    275|	{te = p+1;{output[0]=0x453; {p++; goto _out; }}}
17459|      0|	break;
17460|    388|	case 1000:
  ------------------
  |  Branch (17460:2): [True: 388, False: 535k]
  ------------------
17461|    388|#line 1062 "src/char_ref.rl"
17462|    388|	{te = p+1;{output[0]=0x2277; {p++; goto _out; }}}
17463|      0|	break;
17464|    301|	case 1001:
  ------------------
  |  Branch (17464:2): [True: 301, False: 536k]
  ------------------
17465|    301|#line 1063 "src/char_ref.rl"
17466|    301|	{te = p+1;{output[0]=0x2a92; {p++; goto _out; }}}
17467|      0|	break;
17468|    228|	case 1002:
  ------------------
  |  Branch (17468:2): [True: 228, False: 536k]
  ------------------
17469|    228|#line 1064 "src/char_ref.rl"
17470|    228|	{te = p+1;{output[0]=0x2aa5; {p++; goto _out; }}}
17471|      0|	break;
17472|    194|	case 1003:
  ------------------
  |  Branch (17472:2): [True: 194, False: 536k]
  ------------------
17473|    194|#line 1065 "src/char_ref.rl"
17474|    194|	{te = p+1;{output[0]=0x2aa4; {p++; goto _out; }}}
17475|      0|	break;
17476|    264|	case 1004:
  ------------------
  |  Branch (17476:2): [True: 264, False: 536k]
  ------------------
17477|    264|#line 1066 "src/char_ref.rl"
17478|    264|	{te = p+1;{output[0]=0x2269; {p++; goto _out; }}}
17479|      0|	break;
17480|    250|	case 1005:
  ------------------
  |  Branch (17480:2): [True: 250, False: 536k]
  ------------------
17481|    250|#line 1067 "src/char_ref.rl"
17482|    250|	{te = p+1;{output[0]=0x2a8a; {p++; goto _out; }}}
17483|      0|	break;
17484|    215|	case 1006:
  ------------------
  |  Branch (17484:2): [True: 215, False: 536k]
  ------------------
17485|    215|#line 1068 "src/char_ref.rl"
17486|    215|	{te = p+1;{output[0]=0x2a8a; {p++; goto _out; }}}
17487|      0|	break;
17488|    206|	case 1007:
  ------------------
  |  Branch (17488:2): [True: 206, False: 536k]
  ------------------
17489|    206|#line 1069 "src/char_ref.rl"
17490|    206|	{te = p+1;{output[0]=0x2a88; {p++; goto _out; }}}
17491|      0|	break;
17492|    254|	case 1008:
  ------------------
  |  Branch (17492:2): [True: 254, False: 536k]
  ------------------
17493|    254|#line 1070 "src/char_ref.rl"
17494|    254|	{te = p+1;{output[0]=0x2a88; {p++; goto _out; }}}
17495|      0|	break;
17496|    201|	case 1009:
  ------------------
  |  Branch (17496:2): [True: 201, False: 536k]
  ------------------
17497|    201|#line 1071 "src/char_ref.rl"
17498|    201|	{te = p+1;{output[0]=0x2269; {p++; goto _out; }}}
17499|      0|	break;
17500|    472|	case 1010:
  ------------------
  |  Branch (17500:2): [True: 472, False: 535k]
  ------------------
17501|    472|#line 1072 "src/char_ref.rl"
17502|    472|	{te = p+1;{output[0]=0x22e7; {p++; goto _out; }}}
17503|      0|	break;
17504|    263|	case 1011:
  ------------------
  |  Branch (17504:2): [True: 263, False: 536k]
  ------------------
17505|    263|#line 1073 "src/char_ref.rl"
17506|    263|	{te = p+1;{output[0]=0x1d558; {p++; goto _out; }}}
17507|      0|	break;
17508|    207|	case 1012:
  ------------------
  |  Branch (17508:2): [True: 207, False: 536k]
  ------------------
17509|    207|#line 1074 "src/char_ref.rl"
17510|    207|	{te = p+1;{output[0]=0x60; {p++; goto _out; }}}
17511|      0|	break;
17512|    299|	case 1013:
  ------------------
  |  Branch (17512:2): [True: 299, False: 536k]
  ------------------
17513|    299|#line 1075 "src/char_ref.rl"
17514|    299|	{te = p+1;{output[0]=0x210a; {p++; goto _out; }}}
17515|      0|	break;
17516|    249|	case 1014:
  ------------------
  |  Branch (17516:2): [True: 249, False: 536k]
  ------------------
17517|    249|#line 1076 "src/char_ref.rl"
17518|    249|	{te = p+1;{output[0]=0x2273; {p++; goto _out; }}}
17519|      0|	break;
17520|    229|	case 1015:
  ------------------
  |  Branch (17520:2): [True: 229, False: 536k]
  ------------------
17521|    229|#line 1077 "src/char_ref.rl"
17522|    229|	{te = p+1;{output[0]=0x2a8e; {p++; goto _out; }}}
17523|      0|	break;
17524|    212|	case 1016:
  ------------------
  |  Branch (17524:2): [True: 212, False: 536k]
  ------------------
17525|    212|#line 1078 "src/char_ref.rl"
17526|    212|	{te = p+1;{output[0]=0x2a90; {p++; goto _out; }}}
17527|      0|	break;
17528|    322|	case 2154:
  ------------------
  |  Branch (17528:2): [True: 322, False: 536k]
  ------------------
17529|    322|#line 1079 "src/char_ref.rl"
17530|    322|	{te = p+1;{output[0]=0x3e; {p++; goto _out; }}}
17531|      0|	break;
17532|    358|	case 1018:
  ------------------
  |  Branch (17532:2): [True: 358, False: 535k]
  ------------------
17533|    358|#line 1080 "src/char_ref.rl"
17534|    358|	{te = p+1;{output[0]=0x2aa7; {p++; goto _out; }}}
17535|      0|	break;
17536|    224|	case 1019:
  ------------------
  |  Branch (17536:2): [True: 224, False: 536k]
  ------------------
17537|    224|#line 1081 "src/char_ref.rl"
17538|    224|	{te = p+1;{output[0]=0x2a7a; {p++; goto _out; }}}
17539|      0|	break;
17540|    242|	case 1020:
  ------------------
  |  Branch (17540:2): [True: 242, False: 536k]
  ------------------
17541|    242|#line 1082 "src/char_ref.rl"
17542|    242|	{te = p+1;{output[0]=0x22d7; {p++; goto _out; }}}
17543|      0|	break;
17544|    212|	case 1021:
  ------------------
  |  Branch (17544:2): [True: 212, False: 536k]
  ------------------
17545|    212|#line 1083 "src/char_ref.rl"
17546|    212|	{te = p+1;{output[0]=0x2995; {p++; goto _out; }}}
17547|      0|	break;
17548|    283|	case 1022:
  ------------------
  |  Branch (17548:2): [True: 283, False: 536k]
  ------------------
17549|    283|#line 1084 "src/char_ref.rl"
17550|    283|	{te = p+1;{output[0]=0x2a7c; {p++; goto _out; }}}
17551|      0|	break;
17552|    196|	case 1023:
  ------------------
  |  Branch (17552:2): [True: 196, False: 536k]
  ------------------
17553|    196|#line 1085 "src/char_ref.rl"
17554|    196|	{te = p+1;{output[0]=0x2a86; {p++; goto _out; }}}
17555|      0|	break;
17556|    204|	case 1024:
  ------------------
  |  Branch (17556:2): [True: 204, False: 536k]
  ------------------
17557|    204|#line 1086 "src/char_ref.rl"
17558|    204|	{te = p+1;{output[0]=0x2978; {p++; goto _out; }}}
17559|      0|	break;
17560|    204|	case 1025:
  ------------------
  |  Branch (17560:2): [True: 204, False: 536k]
  ------------------
17561|    204|#line 1087 "src/char_ref.rl"
17562|    204|	{te = p+1;{output[0]=0x22d7; {p++; goto _out; }}}
17563|      0|	break;
17564|    209|	case 1026:
  ------------------
  |  Branch (17564:2): [True: 209, False: 536k]
  ------------------
17565|    209|#line 1088 "src/char_ref.rl"
17566|    209|	{te = p+1;{output[0]=0x22db; {p++; goto _out; }}}
17567|      0|	break;
17568|    200|	case 1027:
  ------------------
  |  Branch (17568:2): [True: 200, False: 536k]
  ------------------
17569|    200|#line 1089 "src/char_ref.rl"
17570|    200|	{te = p+1;{output[0]=0x2a8c; {p++; goto _out; }}}
17571|      0|	break;
17572|    194|	case 1028:
  ------------------
  |  Branch (17572:2): [True: 194, False: 536k]
  ------------------
17573|    194|#line 1090 "src/char_ref.rl"
17574|    194|	{te = p+1;{output[0]=0x2277; {p++; goto _out; }}}
17575|      0|	break;
17576|    201|	case 1029:
  ------------------
  |  Branch (17576:2): [True: 201, False: 536k]
  ------------------
17577|    201|#line 1091 "src/char_ref.rl"
17578|    201|	{te = p+1;{output[0]=0x2273; {p++; goto _out; }}}
17579|      0|	break;
17580|    615|	case 1030:
  ------------------
  |  Branch (17580:2): [True: 615, False: 535k]
  ------------------
17581|    615|#line 1092 "src/char_ref.rl"
17582|    615|	{te = p+1;{output[0]=0x2269; output[1]=0xfe00; {p++; goto _out; }}}
17583|      0|	break;
17584|    278|	case 1031:
  ------------------
  |  Branch (17584:2): [True: 278, False: 536k]
  ------------------
17585|    278|#line 1093 "src/char_ref.rl"
17586|    278|	{te = p+1;{output[0]=0x2269; output[1]=0xfe00; {p++; goto _out; }}}
17587|      0|	break;
17588|    302|	case 1032:
  ------------------
  |  Branch (17588:2): [True: 302, False: 536k]
  ------------------
17589|    302|#line 1094 "src/char_ref.rl"
17590|    302|	{te = p+1;{output[0]=0x21d4; {p++; goto _out; }}}
17591|      0|	break;
17592|    200|	case 1033:
  ------------------
  |  Branch (17592:2): [True: 200, False: 536k]
  ------------------
17593|    200|#line 1095 "src/char_ref.rl"
17594|    200|	{te = p+1;{output[0]=0x200a; {p++; goto _out; }}}
17595|      0|	break;
17596|    290|	case 1034:
  ------------------
  |  Branch (17596:2): [True: 290, False: 536k]
  ------------------
17597|    290|#line 1096 "src/char_ref.rl"
17598|    290|	{te = p+1;{output[0]=0xbd; {p++; goto _out; }}}
17599|      0|	break;
17600|      0|	case 1035:
  ------------------
  |  Branch (17600:2): [True: 0, False: 536k]
  ------------------
17601|      0|#line 1097 "src/char_ref.rl"
17602|      0|	{te = p+1;{output[0]=0x210b; {p++; goto _out; }}}
17603|      0|	break;
17604|    309|	case 1036:
  ------------------
  |  Branch (17604:2): [True: 309, False: 536k]
  ------------------
17605|    309|#line 1098 "src/char_ref.rl"
17606|    309|	{te = p+1;{output[0]=0x44a; {p++; goto _out; }}}
17607|      0|	break;
17608|    445|	case 1037:
  ------------------
  |  Branch (17608:2): [True: 445, False: 535k]
  ------------------
17609|    445|#line 1099 "src/char_ref.rl"
17610|    445|	{te = p+1;{output[0]=0x2194; {p++; goto _out; }}}
17611|      0|	break;
17612|    243|	case 1038:
  ------------------
  |  Branch (17612:2): [True: 243, False: 536k]
  ------------------
17613|    243|#line 1100 "src/char_ref.rl"
17614|    243|	{te = p+1;{output[0]=0x2948; {p++; goto _out; }}}
17615|      0|	break;
17616|    234|	case 1039:
  ------------------
  |  Branch (17616:2): [True: 234, False: 536k]
  ------------------
17617|    234|#line 1101 "src/char_ref.rl"
17618|    234|	{te = p+1;{output[0]=0x21ad; {p++; goto _out; }}}
17619|      0|	break;
17620|    210|	case 1040:
  ------------------
  |  Branch (17620:2): [True: 210, False: 536k]
  ------------------
17621|    210|#line 1102 "src/char_ref.rl"
17622|    210|	{te = p+1;{output[0]=0x210f; {p++; goto _out; }}}
17623|      0|	break;
17624|    224|	case 1041:
  ------------------
  |  Branch (17624:2): [True: 224, False: 536k]
  ------------------
17625|    224|#line 1103 "src/char_ref.rl"
17626|    224|	{te = p+1;{output[0]=0x125; {p++; goto _out; }}}
17627|      0|	break;
17628|    283|	case 1042:
  ------------------
  |  Branch (17628:2): [True: 283, False: 536k]
  ------------------
17629|    283|#line 1104 "src/char_ref.rl"
17630|    283|	{te = p+1;{output[0]=0x2665; {p++; goto _out; }}}
17631|      0|	break;
17632|    217|	case 1043:
  ------------------
  |  Branch (17632:2): [True: 217, False: 536k]
  ------------------
17633|    217|#line 1105 "src/char_ref.rl"
17634|    217|	{te = p+1;{output[0]=0x2665; {p++; goto _out; }}}
17635|      0|	break;
17636|      0|	case 1044:
  ------------------
  |  Branch (17636:2): [True: 0, False: 536k]
  ------------------
17637|      0|#line 1106 "src/char_ref.rl"
17638|      0|	{te = p+1;{output[0]=0x2026; {p++; goto _out; }}}
17639|      0|	break;
17640|    201|	case 1045:
  ------------------
  |  Branch (17640:2): [True: 201, False: 536k]
  ------------------
17641|    201|#line 1107 "src/char_ref.rl"
17642|    201|	{te = p+1;{output[0]=0x22b9; {p++; goto _out; }}}
17643|      0|	break;
17644|    438|	case 1046:
  ------------------
  |  Branch (17644:2): [True: 438, False: 535k]
  ------------------
17645|    438|#line 1108 "src/char_ref.rl"
17646|    438|	{te = p+1;{output[0]=0x1d525; {p++; goto _out; }}}
17647|      0|	break;
17648|      0|	case 1047:
  ------------------
  |  Branch (17648:2): [True: 0, False: 536k]
  ------------------
17649|      0|#line 1109 "src/char_ref.rl"
17650|      0|	{te = p+1;{output[0]=0x2925; {p++; goto _out; }}}
17651|      0|	break;
17652|      0|	case 1048:
  ------------------
  |  Branch (17652:2): [True: 0, False: 536k]
  ------------------
17653|      0|#line 1110 "src/char_ref.rl"
17654|      0|	{te = p+1;{output[0]=0x2926; {p++; goto _out; }}}
17655|      0|	break;
17656|    200|	case 1049:
  ------------------
  |  Branch (17656:2): [True: 200, False: 536k]
  ------------------
17657|    200|#line 1111 "src/char_ref.rl"
17658|    200|	{te = p+1;{output[0]=0x21ff; {p++; goto _out; }}}
17659|      0|	break;
17660|      0|	case 1050:
  ------------------
  |  Branch (17660:2): [True: 0, False: 536k]
  ------------------
17661|      0|#line 1112 "src/char_ref.rl"
17662|      0|	{te = p+1;{output[0]=0x223b; {p++; goto _out; }}}
17663|      0|	break;
17664|      0|	case 1051:
  ------------------
  |  Branch (17664:2): [True: 0, False: 536k]
  ------------------
17665|      0|#line 1113 "src/char_ref.rl"
17666|      0|	{te = p+1;{output[0]=0x21a9; {p++; goto _out; }}}
17667|      0|	break;
17668|      0|	case 1052:
  ------------------
  |  Branch (17668:2): [True: 0, False: 536k]
  ------------------
17669|      0|#line 1114 "src/char_ref.rl"
17670|      0|	{te = p+1;{output[0]=0x21aa; {p++; goto _out; }}}
17671|      0|	break;
17672|    210|	case 1053:
  ------------------
  |  Branch (17672:2): [True: 210, False: 536k]
  ------------------
17673|    210|#line 1115 "src/char_ref.rl"
17674|    210|	{te = p+1;{output[0]=0x1d559; {p++; goto _out; }}}
17675|      0|	break;
17676|    215|	case 1054:
  ------------------
  |  Branch (17676:2): [True: 215, False: 536k]
  ------------------
17677|    215|#line 1116 "src/char_ref.rl"
17678|    215|	{te = p+1;{output[0]=0x2015; {p++; goto _out; }}}
17679|      0|	break;
17680|    325|	case 1055:
  ------------------
  |  Branch (17680:2): [True: 325, False: 536k]
  ------------------
17681|    325|#line 1117 "src/char_ref.rl"
17682|    325|	{te = p+1;{output[0]=0x1d4bd; {p++; goto _out; }}}
17683|      0|	break;
17684|    201|	case 1056:
  ------------------
  |  Branch (17684:2): [True: 201, False: 536k]
  ------------------
17685|    201|#line 1118 "src/char_ref.rl"
17686|    201|	{te = p+1;{output[0]=0x210f; {p++; goto _out; }}}
17687|      0|	break;
17688|    226|	case 1057:
  ------------------
  |  Branch (17688:2): [True: 226, False: 536k]
  ------------------
17689|    226|#line 1119 "src/char_ref.rl"
17690|    226|	{te = p+1;{output[0]=0x127; {p++; goto _out; }}}
17691|      0|	break;
17692|    226|	case 1058:
  ------------------
  |  Branch (17692:2): [True: 226, False: 536k]
  ------------------
17693|    226|#line 1120 "src/char_ref.rl"
17694|    226|	{te = p+1;{output[0]=0x2043; {p++; goto _out; }}}
17695|      0|	break;
17696|      0|	case 1059:
  ------------------
  |  Branch (17696:2): [True: 0, False: 536k]
  ------------------
17697|      0|#line 1121 "src/char_ref.rl"
17698|      0|	{te = p+1;{output[0]=0x2010; {p++; goto _out; }}}
17699|      0|	break;
17700|    198|	case 2156:
  ------------------
  |  Branch (17700:2): [True: 198, False: 536k]
  ------------------
17701|    198|#line 1122 "src/char_ref.rl"
17702|    198|	{te = p+1;{output[0]=0xed; {p++; goto _out; }}}
17703|      0|	break;
17704|    573|	case 1060:
  ------------------
  |  Branch (17704:2): [True: 573, False: 535k]
  ------------------
17705|    573|#line 1123 "src/char_ref.rl"
17706|    573|	{te = p+1;{output[0]=0x2063; {p++; goto _out; }}}
17707|      0|	break;
17708|    207|	case 2158:
  ------------------
  |  Branch (17708:2): [True: 207, False: 536k]
  ------------------
17709|    207|#line 1124 "src/char_ref.rl"
17710|    207|	{te = p+1;{output[0]=0xee; {p++; goto _out; }}}
17711|      0|	break;
17712|    559|	case 1061:
  ------------------
  |  Branch (17712:2): [True: 559, False: 535k]
  ------------------
17713|    559|#line 1125 "src/char_ref.rl"
17714|    559|	{te = p+1;{output[0]=0x438; {p++; goto _out; }}}
17715|      0|	break;
17716|    224|	case 1062:
  ------------------
  |  Branch (17716:2): [True: 224, False: 536k]
  ------------------
17717|    224|#line 1126 "src/char_ref.rl"
17718|    224|	{te = p+1;{output[0]=0x435; {p++; goto _out; }}}
17719|      0|	break;
17720|    194|	case 2160:
  ------------------
  |  Branch (17720:2): [True: 194, False: 536k]
  ------------------
17721|    194|#line 1127 "src/char_ref.rl"
17722|    194|	{te = p+1;{output[0]=0xa1; {p++; goto _out; }}}
17723|      0|	break;
17724|    280|	case 1063:
  ------------------
  |  Branch (17724:2): [True: 280, False: 536k]
  ------------------
17725|    280|#line 1128 "src/char_ref.rl"
17726|    280|	{te = p+1;{output[0]=0x21d4; {p++; goto _out; }}}
17727|      0|	break;
17728|    283|	case 1064:
  ------------------
  |  Branch (17728:2): [True: 283, False: 536k]
  ------------------
17729|    283|#line 1129 "src/char_ref.rl"
17730|    283|	{te = p+1;{output[0]=0x1d526; {p++; goto _out; }}}
17731|      0|	break;
17732|    240|	case 2162:
  ------------------
  |  Branch (17732:2): [True: 240, False: 536k]
  ------------------
17733|    240|#line 1130 "src/char_ref.rl"
17734|    240|	{te = p+1;{output[0]=0xec; {p++; goto _out; }}}
17735|      0|	break;
17736|    396|	case 1065:
  ------------------
  |  Branch (17736:2): [True: 396, False: 535k]
  ------------------
17737|    396|#line 1131 "src/char_ref.rl"
17738|    396|	{te = p+1;{output[0]=0x2148; {p++; goto _out; }}}
17739|      0|	break;
17740|    219|	case 1066:
  ------------------
  |  Branch (17740:2): [True: 219, False: 536k]
  ------------------
17741|    219|#line 1132 "src/char_ref.rl"
17742|    219|	{te = p+1;{output[0]=0x2a0c; {p++; goto _out; }}}
17743|      0|	break;
17744|    351|	case 1067:
  ------------------
  |  Branch (17744:2): [True: 351, False: 535k]
  ------------------
17745|    351|#line 1133 "src/char_ref.rl"
17746|    351|	{te = p+1;{output[0]=0x222d; {p++; goto _out; }}}
17747|      0|	break;
17748|    214|	case 1068:
  ------------------
  |  Branch (17748:2): [True: 214, False: 536k]
  ------------------
17749|    214|#line 1134 "src/char_ref.rl"
17750|    214|	{te = p+1;{output[0]=0x29dc; {p++; goto _out; }}}
17751|      0|	break;
17752|    377|	case 1069:
  ------------------
  |  Branch (17752:2): [True: 377, False: 535k]
  ------------------
17753|    377|#line 1135 "src/char_ref.rl"
17754|    377|	{te = p+1;{output[0]=0x2129; {p++; goto _out; }}}
17755|      0|	break;
17756|    204|	case 1070:
  ------------------
  |  Branch (17756:2): [True: 204, False: 536k]
  ------------------
17757|    204|#line 1136 "src/char_ref.rl"
17758|    204|	{te = p+1;{output[0]=0x133; {p++; goto _out; }}}
17759|      0|	break;
17760|    240|	case 1071:
  ------------------
  |  Branch (17760:2): [True: 240, False: 536k]
  ------------------
17761|    240|#line 1137 "src/char_ref.rl"
17762|    240|	{te = p+1;{output[0]=0x12b; {p++; goto _out; }}}
17763|      0|	break;
17764|    240|	case 1072:
  ------------------
  |  Branch (17764:2): [True: 240, False: 536k]
  ------------------
17765|    240|#line 1138 "src/char_ref.rl"
17766|    240|	{te = p+1;{output[0]=0x2111; {p++; goto _out; }}}
17767|      0|	break;
17768|    198|	case 1073:
  ------------------
  |  Branch (17768:2): [True: 198, False: 536k]
  ------------------
17769|    198|#line 1139 "src/char_ref.rl"
17770|    198|	{te = p+1;{output[0]=0x2110; {p++; goto _out; }}}
17771|      0|	break;
17772|    211|	case 1074:
  ------------------
  |  Branch (17772:2): [True: 211, False: 536k]
  ------------------
17773|    211|#line 1140 "src/char_ref.rl"
17774|    211|	{te = p+1;{output[0]=0x2111; {p++; goto _out; }}}
17775|      0|	break;
17776|    195|	case 1075:
  ------------------
  |  Branch (17776:2): [True: 195, False: 536k]
  ------------------
17777|    195|#line 1141 "src/char_ref.rl"
17778|    195|	{te = p+1;{output[0]=0x131; {p++; goto _out; }}}
17779|      0|	break;
17780|    221|	case 1076:
  ------------------
  |  Branch (17780:2): [True: 221, False: 536k]
  ------------------
17781|    221|#line 1142 "src/char_ref.rl"
17782|    221|	{te = p+1;{output[0]=0x22b7; {p++; goto _out; }}}
17783|      0|	break;
17784|    308|	case 1077:
  ------------------
  |  Branch (17784:2): [True: 308, False: 536k]
  ------------------
17785|    308|#line 1143 "src/char_ref.rl"
17786|    308|	{te = p+1;{output[0]=0x1b5; {p++; goto _out; }}}
17787|      0|	break;
17788|    292|	case 1078:
  ------------------
  |  Branch (17788:2): [True: 292, False: 536k]
  ------------------
17789|    292|#line 1144 "src/char_ref.rl"
17790|    292|	{te = p+1;{output[0]=0x2208; {p++; goto _out; }}}
17791|      0|	break;
17792|    225|	case 1079:
  ------------------
  |  Branch (17792:2): [True: 225, False: 536k]
  ------------------
17793|    225|#line 1145 "src/char_ref.rl"
17794|    225|	{te = p+1;{output[0]=0x2105; {p++; goto _out; }}}
17795|      0|	break;
17796|    230|	case 1080:
  ------------------
  |  Branch (17796:2): [True: 230, False: 536k]
  ------------------
17797|    230|#line 1146 "src/char_ref.rl"
17798|    230|	{te = p+1;{output[0]=0x221e; {p++; goto _out; }}}
17799|      0|	break;
17800|    195|	case 1081:
  ------------------
  |  Branch (17800:2): [True: 195, False: 536k]
  ------------------
17801|    195|#line 1147 "src/char_ref.rl"
17802|    195|	{te = p+1;{output[0]=0x29dd; {p++; goto _out; }}}
17803|      0|	break;
17804|    206|	case 1082:
  ------------------
  |  Branch (17804:2): [True: 206, False: 536k]
  ------------------
17805|    206|#line 1148 "src/char_ref.rl"
17806|    206|	{te = p+1;{output[0]=0x131; {p++; goto _out; }}}
17807|      0|	break;
17808|    514|	case 1083:
  ------------------
  |  Branch (17808:2): [True: 514, False: 535k]
  ------------------
17809|    514|#line 1149 "src/char_ref.rl"
17810|    514|	{te = p+1;{output[0]=0x222b; {p++; goto _out; }}}
17811|      0|	break;
17812|    294|	case 1084:
  ------------------
  |  Branch (17812:2): [True: 294, False: 536k]
  ------------------
17813|    294|#line 1150 "src/char_ref.rl"
17814|    294|	{te = p+1;{output[0]=0x22ba; {p++; goto _out; }}}
17815|      0|	break;
17816|    241|	case 1085:
  ------------------
  |  Branch (17816:2): [True: 241, False: 536k]
  ------------------
17817|    241|#line 1151 "src/char_ref.rl"
17818|    241|	{te = p+1;{output[0]=0x2124; {p++; goto _out; }}}
17819|      0|	break;
17820|    232|	case 1086:
  ------------------
  |  Branch (17820:2): [True: 232, False: 536k]
  ------------------
17821|    232|#line 1152 "src/char_ref.rl"
17822|    232|	{te = p+1;{output[0]=0x22ba; {p++; goto _out; }}}
17823|      0|	break;
17824|      0|	case 1087:
  ------------------
  |  Branch (17824:2): [True: 0, False: 536k]
  ------------------
17825|      0|#line 1153 "src/char_ref.rl"
17826|      0|	{te = p+1;{output[0]=0x2a17; {p++; goto _out; }}}
17827|      0|	break;
17828|    196|	case 1088:
  ------------------
  |  Branch (17828:2): [True: 196, False: 536k]
  ------------------
17829|    196|#line 1154 "src/char_ref.rl"
17830|    196|	{te = p+1;{output[0]=0x2a3c; {p++; goto _out; }}}
17831|      0|	break;
17832|    296|	case 1089:
  ------------------
  |  Branch (17832:2): [True: 296, False: 536k]
  ------------------
17833|    296|#line 1155 "src/char_ref.rl"
17834|    296|	{te = p+1;{output[0]=0x451; {p++; goto _out; }}}
17835|      0|	break;
17836|    218|	case 1090:
  ------------------
  |  Branch (17836:2): [True: 218, False: 536k]
  ------------------
17837|    218|#line 1156 "src/char_ref.rl"
17838|    218|	{te = p+1;{output[0]=0x12f; {p++; goto _out; }}}
17839|      0|	break;
17840|    305|	case 1091:
  ------------------
  |  Branch (17840:2): [True: 305, False: 536k]
  ------------------
17841|    305|#line 1157 "src/char_ref.rl"
17842|    305|	{te = p+1;{output[0]=0x1d55a; {p++; goto _out; }}}
17843|      0|	break;
17844|    219|	case 1092:
  ------------------
  |  Branch (17844:2): [True: 219, False: 536k]
  ------------------
17845|    219|#line 1158 "src/char_ref.rl"
17846|    219|	{te = p+1;{output[0]=0x3b9; {p++; goto _out; }}}
17847|      0|	break;
17848|    222|	case 1093:
  ------------------
  |  Branch (17848:2): [True: 222, False: 536k]
  ------------------
17849|    222|#line 1159 "src/char_ref.rl"
17850|    222|	{te = p+1;{output[0]=0x2a3c; {p++; goto _out; }}}
17851|      0|	break;
17852|    538|	case 2164:
  ------------------
  |  Branch (17852:2): [True: 538, False: 535k]
  ------------------
17853|    538|#line 1160 "src/char_ref.rl"
17854|    538|	{te = p+1;{output[0]=0xbf; {p++; goto _out; }}}
17855|      0|	break;
17856|    198|	case 1094:
  ------------------
  |  Branch (17856:2): [True: 198, False: 536k]
  ------------------
17857|    198|#line 1161 "src/char_ref.rl"
17858|    198|	{te = p+1;{output[0]=0x1d4be; {p++; goto _out; }}}
17859|      0|	break;
17860|    213|	case 1095:
  ------------------
  |  Branch (17860:2): [True: 213, False: 536k]
  ------------------
17861|    213|#line 1162 "src/char_ref.rl"
17862|    213|	{te = p+1;{output[0]=0x2208; {p++; goto _out; }}}
17863|      0|	break;
17864|    291|	case 1096:
  ------------------
  |  Branch (17864:2): [True: 291, False: 536k]
  ------------------
17865|    291|#line 1163 "src/char_ref.rl"
17866|    291|	{te = p+1;{output[0]=0x22f9; {p++; goto _out; }}}
17867|      0|	break;
17868|    197|	case 1097:
  ------------------
  |  Branch (17868:2): [True: 197, False: 536k]
  ------------------
17869|    197|#line 1164 "src/char_ref.rl"
17870|    197|	{te = p+1;{output[0]=0x22f5; {p++; goto _out; }}}
17871|      0|	break;
17872|    328|	case 1098:
  ------------------
  |  Branch (17872:2): [True: 328, False: 535k]
  ------------------
17873|    328|#line 1165 "src/char_ref.rl"
17874|    328|	{te = p+1;{output[0]=0x22f4; {p++; goto _out; }}}
17875|      0|	break;
17876|    299|	case 1099:
  ------------------
  |  Branch (17876:2): [True: 299, False: 536k]
  ------------------
17877|    299|#line 1166 "src/char_ref.rl"
17878|    299|	{te = p+1;{output[0]=0x22f3; {p++; goto _out; }}}
17879|      0|	break;
17880|    200|	case 1100:
  ------------------
  |  Branch (17880:2): [True: 200, False: 536k]
  ------------------
17881|    200|#line 1167 "src/char_ref.rl"
17882|    200|	{te = p+1;{output[0]=0x2208; {p++; goto _out; }}}
17883|      0|	break;
17884|    305|	case 1101:
  ------------------
  |  Branch (17884:2): [True: 305, False: 536k]
  ------------------
17885|    305|#line 1168 "src/char_ref.rl"
17886|    305|	{te = p+1;{output[0]=0x2062; {p++; goto _out; }}}
17887|      0|	break;
17888|    236|	case 1102:
  ------------------
  |  Branch (17888:2): [True: 236, False: 536k]
  ------------------
17889|    236|#line 1169 "src/char_ref.rl"
17890|    236|	{te = p+1;{output[0]=0x129; {p++; goto _out; }}}
17891|      0|	break;
17892|    197|	case 1103:
  ------------------
  |  Branch (17892:2): [True: 197, False: 536k]
  ------------------
17893|    197|#line 1170 "src/char_ref.rl"
17894|    197|	{te = p+1;{output[0]=0x456; {p++; goto _out; }}}
17895|      0|	break;
17896|    429|	case 2166:
  ------------------
  |  Branch (17896:2): [True: 429, False: 535k]
  ------------------
17897|    429|#line 1171 "src/char_ref.rl"
17898|    429|	{te = p+1;{output[0]=0xef; {p++; goto _out; }}}
17899|      0|	break;
17900|    213|	case 1104:
  ------------------
  |  Branch (17900:2): [True: 213, False: 536k]
  ------------------
17901|    213|#line 1172 "src/char_ref.rl"
17902|    213|	{te = p+1;{output[0]=0x135; {p++; goto _out; }}}
17903|      0|	break;
17904|    752|	case 1105:
  ------------------
  |  Branch (17904:2): [True: 752, False: 535k]
  ------------------
17905|    752|#line 1173 "src/char_ref.rl"
17906|    752|	{te = p+1;{output[0]=0x439; {p++; goto _out; }}}
17907|      0|	break;
17908|    398|	case 1106:
  ------------------
  |  Branch (17908:2): [True: 398, False: 535k]
  ------------------
17909|    398|#line 1174 "src/char_ref.rl"
17910|    398|	{te = p+1;{output[0]=0x1d527; {p++; goto _out; }}}
17911|      0|	break;
17912|    243|	case 1107:
  ------------------
  |  Branch (17912:2): [True: 243, False: 536k]
  ------------------
17913|    243|#line 1175 "src/char_ref.rl"
17914|    243|	{te = p+1;{output[0]=0x237; {p++; goto _out; }}}
17915|      0|	break;
17916|    224|	case 1108:
  ------------------
  |  Branch (17916:2): [True: 224, False: 536k]
  ------------------
17917|    224|#line 1176 "src/char_ref.rl"
17918|    224|	{te = p+1;{output[0]=0x1d55b; {p++; goto _out; }}}
17919|      0|	break;
17920|    269|	case 1109:
  ------------------
  |  Branch (17920:2): [True: 269, False: 536k]
  ------------------
17921|    269|#line 1177 "src/char_ref.rl"
17922|    269|	{te = p+1;{output[0]=0x1d4bf; {p++; goto _out; }}}
17923|      0|	break;
17924|    269|	case 1110:
  ------------------
  |  Branch (17924:2): [True: 269, False: 536k]
  ------------------
17925|    269|#line 1178 "src/char_ref.rl"
17926|    269|	{te = p+1;{output[0]=0x458; {p++; goto _out; }}}
17927|      0|	break;
17928|    240|	case 1111:
  ------------------
  |  Branch (17928:2): [True: 240, False: 536k]
  ------------------
17929|    240|#line 1179 "src/char_ref.rl"
17930|    240|	{te = p+1;{output[0]=0x454; {p++; goto _out; }}}
17931|      0|	break;
17932|    200|	case 1112:
  ------------------
  |  Branch (17932:2): [True: 200, False: 536k]
  ------------------
17933|    200|#line 1180 "src/char_ref.rl"
17934|    200|	{te = p+1;{output[0]=0x3ba; {p++; goto _out; }}}
17935|      0|	break;
17936|    218|	case 1113:
  ------------------
  |  Branch (17936:2): [True: 218, False: 536k]
  ------------------
17937|    218|#line 1181 "src/char_ref.rl"
17938|    218|	{te = p+1;{output[0]=0x3f0; {p++; goto _out; }}}
17939|      0|	break;
17940|    206|	case 1114:
  ------------------
  |  Branch (17940:2): [True: 206, False: 536k]
  ------------------
17941|    206|#line 1182 "src/char_ref.rl"
17942|    206|	{te = p+1;{output[0]=0x137; {p++; goto _out; }}}
17943|      0|	break;
17944|    262|	case 1115:
  ------------------
  |  Branch (17944:2): [True: 262, False: 536k]
  ------------------
17945|    262|#line 1183 "src/char_ref.rl"
17946|    262|	{te = p+1;{output[0]=0x43a; {p++; goto _out; }}}
17947|      0|	break;
17948|    197|	case 1116:
  ------------------
  |  Branch (17948:2): [True: 197, False: 536k]
  ------------------
17949|    197|#line 1184 "src/char_ref.rl"
17950|    197|	{te = p+1;{output[0]=0x1d528; {p++; goto _out; }}}
17951|      0|	break;
17952|      0|	case 1117:
  ------------------
  |  Branch (17952:2): [True: 0, False: 536k]
  ------------------
17953|      0|#line 1185 "src/char_ref.rl"
17954|      0|	{te = p+1;{output[0]=0x138; {p++; goto _out; }}}
17955|      0|	break;
17956|    198|	case 1118:
  ------------------
  |  Branch (17956:2): [True: 198, False: 536k]
  ------------------
17957|    198|#line 1186 "src/char_ref.rl"
17958|    198|	{te = p+1;{output[0]=0x445; {p++; goto _out; }}}
17959|      0|	break;
17960|    421|	case 1119:
  ------------------
  |  Branch (17960:2): [True: 421, False: 535k]
  ------------------
17961|    421|#line 1187 "src/char_ref.rl"
17962|    421|	{te = p+1;{output[0]=0x45c; {p++; goto _out; }}}
17963|      0|	break;
17964|    270|	case 1120:
  ------------------
  |  Branch (17964:2): [True: 270, False: 536k]
  ------------------
17965|    270|#line 1188 "src/char_ref.rl"
17966|    270|	{te = p+1;{output[0]=0x1d55c; {p++; goto _out; }}}
17967|      0|	break;
17968|    245|	case 1121:
  ------------------
  |  Branch (17968:2): [True: 245, False: 536k]
  ------------------
17969|    245|#line 1189 "src/char_ref.rl"
17970|    245|	{te = p+1;{output[0]=0x1d4c0; {p++; goto _out; }}}
17971|      0|	break;
17972|    199|	case 1122:
  ------------------
  |  Branch (17972:2): [True: 199, False: 536k]
  ------------------
17973|    199|#line 1190 "src/char_ref.rl"
17974|    199|	{te = p+1;{output[0]=0x21da; {p++; goto _out; }}}
17975|      0|	break;
17976|    384|	case 1123:
  ------------------
  |  Branch (17976:2): [True: 384, False: 535k]
  ------------------
17977|    384|#line 1191 "src/char_ref.rl"
17978|    384|	{te = p+1;{output[0]=0x21d0; {p++; goto _out; }}}
17979|      0|	break;
17980|    195|	case 1124:
  ------------------
  |  Branch (17980:2): [True: 195, False: 536k]
  ------------------
17981|    195|#line 1192 "src/char_ref.rl"
17982|    195|	{te = p+1;{output[0]=0x291b; {p++; goto _out; }}}
17983|      0|	break;
17984|    194|	case 1125:
  ------------------
  |  Branch (17984:2): [True: 194, False: 536k]
  ------------------
17985|    194|#line 1193 "src/char_ref.rl"
17986|    194|	{te = p+1;{output[0]=0x290e; {p++; goto _out; }}}
17987|      0|	break;
17988|    344|	case 1126:
  ------------------
  |  Branch (17988:2): [True: 344, False: 535k]
  ------------------
17989|    344|#line 1194 "src/char_ref.rl"
17990|    344|	{te = p+1;{output[0]=0x2266; {p++; goto _out; }}}
17991|      0|	break;
17992|    270|	case 1127:
  ------------------
  |  Branch (17992:2): [True: 270, False: 536k]
  ------------------
17993|    270|#line 1195 "src/char_ref.rl"
17994|    270|	{te = p+1;{output[0]=0x2a8b; {p++; goto _out; }}}
17995|      0|	break;
17996|    396|	case 1128:
  ------------------
  |  Branch (17996:2): [True: 396, False: 535k]
  ------------------
17997|    396|#line 1196 "src/char_ref.rl"
17998|    396|	{te = p+1;{output[0]=0x2962; {p++; goto _out; }}}
17999|      0|	break;
18000|    252|	case 1129:
  ------------------
  |  Branch (18000:2): [True: 252, False: 536k]
  ------------------
18001|    252|#line 1197 "src/char_ref.rl"
18002|    252|	{te = p+1;{output[0]=0x13a; {p++; goto _out; }}}
18003|      0|	break;
18004|    219|	case 1130:
  ------------------
  |  Branch (18004:2): [True: 219, False: 536k]
  ------------------
18005|    219|#line 1198 "src/char_ref.rl"
18006|    219|	{te = p+1;{output[0]=0x29b4; {p++; goto _out; }}}
18007|      0|	break;
18008|    305|	case 1131:
  ------------------
  |  Branch (18008:2): [True: 305, False: 536k]
  ------------------
18009|    305|#line 1199 "src/char_ref.rl"
18010|    305|	{te = p+1;{output[0]=0x2112; {p++; goto _out; }}}
18011|      0|	break;
18012|      0|	case 1132:
  ------------------
  |  Branch (18012:2): [True: 0, False: 536k]
  ------------------
18013|      0|#line 1200 "src/char_ref.rl"
18014|      0|	{te = p+1;{output[0]=0x3bb; {p++; goto _out; }}}
18015|      0|	break;
18016|    200|	case 1133:
  ------------------
  |  Branch (18016:2): [True: 200, False: 536k]
  ------------------
18017|    200|#line 1201 "src/char_ref.rl"
18018|    200|	{te = p+1;{output[0]=0x27e8; {p++; goto _out; }}}
18019|      0|	break;
18020|    417|	case 1134:
  ------------------
  |  Branch (18020:2): [True: 417, False: 535k]
  ------------------
18021|    417|#line 1202 "src/char_ref.rl"
18022|    417|	{te = p+1;{output[0]=0x2991; {p++; goto _out; }}}
18023|      0|	break;
18024|    200|	case 1135:
  ------------------
  |  Branch (18024:2): [True: 200, False: 536k]
  ------------------
18025|    200|#line 1203 "src/char_ref.rl"
18026|    200|	{te = p+1;{output[0]=0x27e8; {p++; goto _out; }}}
18027|      0|	break;
18028|    226|	case 1136:
  ------------------
  |  Branch (18028:2): [True: 226, False: 536k]
  ------------------
18029|    226|#line 1204 "src/char_ref.rl"
18030|    226|	{te = p+1;{output[0]=0x2a85; {p++; goto _out; }}}
18031|      0|	break;
18032|    252|	case 2168:
  ------------------
  |  Branch (18032:2): [True: 252, False: 536k]
  ------------------
18033|    252|#line 1205 "src/char_ref.rl"
18034|    252|	{te = p+1;{output[0]=0xab; {p++; goto _out; }}}
18035|      0|	break;
18036|    294|	case 1137:
  ------------------
  |  Branch (18036:2): [True: 294, False: 536k]
  ------------------
18037|    294|#line 1206 "src/char_ref.rl"
18038|    294|	{te = p+1;{output[0]=0x2190; {p++; goto _out; }}}
18039|      0|	break;
18040|    320|	case 1138:
  ------------------
  |  Branch (18040:2): [True: 320, False: 536k]
  ------------------
18041|    320|#line 1207 "src/char_ref.rl"
18042|    320|	{te = p+1;{output[0]=0x21e4; {p++; goto _out; }}}
18043|      0|	break;
18044|    204|	case 1139:
  ------------------
  |  Branch (18044:2): [True: 204, False: 536k]
  ------------------
18045|    204|#line 1208 "src/char_ref.rl"
18046|    204|	{te = p+1;{output[0]=0x291f; {p++; goto _out; }}}
18047|      0|	break;
18048|    376|	case 1140:
  ------------------
  |  Branch (18048:2): [True: 376, False: 535k]
  ------------------
18049|    376|#line 1209 "src/char_ref.rl"
18050|    376|	{te = p+1;{output[0]=0x291d; {p++; goto _out; }}}
18051|      0|	break;
18052|    205|	case 1141:
  ------------------
  |  Branch (18052:2): [True: 205, False: 536k]
  ------------------
18053|    205|#line 1210 "src/char_ref.rl"
18054|    205|	{te = p+1;{output[0]=0x21a9; {p++; goto _out; }}}
18055|      0|	break;
18056|    209|	case 1142:
  ------------------
  |  Branch (18056:2): [True: 209, False: 536k]
  ------------------
18057|    209|#line 1211 "src/char_ref.rl"
18058|    209|	{te = p+1;{output[0]=0x21ab; {p++; goto _out; }}}
18059|      0|	break;
18060|    234|	case 1143:
  ------------------
  |  Branch (18060:2): [True: 234, False: 536k]
  ------------------
18061|    234|#line 1212 "src/char_ref.rl"
18062|    234|	{te = p+1;{output[0]=0x2939; {p++; goto _out; }}}
18063|      0|	break;
18064|    302|	case 1144:
  ------------------
  |  Branch (18064:2): [True: 302, False: 536k]
  ------------------
18065|    302|#line 1213 "src/char_ref.rl"
18066|    302|	{te = p+1;{output[0]=0x2973; {p++; goto _out; }}}
18067|      0|	break;
18068|    286|	case 1145:
  ------------------
  |  Branch (18068:2): [True: 286, False: 536k]
  ------------------
18069|    286|#line 1214 "src/char_ref.rl"
18070|    286|	{te = p+1;{output[0]=0x21a2; {p++; goto _out; }}}
18071|      0|	break;
18072|    326|	case 1146:
  ------------------
  |  Branch (18072:2): [True: 326, False: 536k]
  ------------------
18073|    326|#line 1215 "src/char_ref.rl"
18074|    326|	{te = p+1;{output[0]=0x2aab; {p++; goto _out; }}}
18075|      0|	break;
18076|    214|	case 1147:
  ------------------
  |  Branch (18076:2): [True: 214, False: 536k]
  ------------------
18077|    214|#line 1216 "src/char_ref.rl"
18078|    214|	{te = p+1;{output[0]=0x2919; {p++; goto _out; }}}
18079|      0|	break;
18080|    281|	case 1148:
  ------------------
  |  Branch (18080:2): [True: 281, False: 536k]
  ------------------
18081|    281|#line 1217 "src/char_ref.rl"
18082|    281|	{te = p+1;{output[0]=0x2aad; {p++; goto _out; }}}
18083|      0|	break;
18084|    412|	case 1149:
  ------------------
  |  Branch (18084:2): [True: 412, False: 535k]
  ------------------
18085|    412|#line 1218 "src/char_ref.rl"
18086|    412|	{te = p+1;{output[0]=0x2aad; output[1]=0xfe00; {p++; goto _out; }}}
18087|      0|	break;
18088|    365|	case 1150:
  ------------------
  |  Branch (18088:2): [True: 365, False: 535k]
  ------------------
18089|    365|#line 1219 "src/char_ref.rl"
18090|    365|	{te = p+1;{output[0]=0x290c; {p++; goto _out; }}}
18091|      0|	break;
18092|    224|	case 1151:
  ------------------
  |  Branch (18092:2): [True: 224, False: 536k]
  ------------------
18093|    224|#line 1220 "src/char_ref.rl"
18094|    224|	{te = p+1;{output[0]=0x2772; {p++; goto _out; }}}
18095|      0|	break;
18096|    219|	case 1152:
  ------------------
  |  Branch (18096:2): [True: 219, False: 536k]
  ------------------
18097|    219|#line 1221 "src/char_ref.rl"
18098|    219|	{te = p+1;{output[0]=0x7b; {p++; goto _out; }}}
18099|      0|	break;
18100|    233|	case 1153:
  ------------------
  |  Branch (18100:2): [True: 233, False: 536k]
  ------------------
18101|    233|#line 1222 "src/char_ref.rl"
18102|    233|	{te = p+1;{output[0]=0x5b; {p++; goto _out; }}}
18103|      0|	break;
18104|    197|	case 1154:
  ------------------
  |  Branch (18104:2): [True: 197, False: 536k]
  ------------------
18105|    197|#line 1223 "src/char_ref.rl"
18106|    197|	{te = p+1;{output[0]=0x298b; {p++; goto _out; }}}
18107|      0|	break;
18108|    239|	case 1155:
  ------------------
  |  Branch (18108:2): [True: 239, False: 536k]
  ------------------
18109|    239|#line 1224 "src/char_ref.rl"
18110|    239|	{te = p+1;{output[0]=0x298f; {p++; goto _out; }}}
18111|      0|	break;
18112|    198|	case 1156:
  ------------------
  |  Branch (18112:2): [True: 198, False: 536k]
  ------------------
18113|    198|#line 1225 "src/char_ref.rl"
18114|    198|	{te = p+1;{output[0]=0x298d; {p++; goto _out; }}}
18115|      0|	break;
18116|    216|	case 1157:
  ------------------
  |  Branch (18116:2): [True: 216, False: 536k]
  ------------------
18117|    216|#line 1226 "src/char_ref.rl"
18118|    216|	{te = p+1;{output[0]=0x13e; {p++; goto _out; }}}
18119|      0|	break;
18120|    203|	case 1158:
  ------------------
  |  Branch (18120:2): [True: 203, False: 536k]
  ------------------
18121|    203|#line 1227 "src/char_ref.rl"
18122|    203|	{te = p+1;{output[0]=0x13c; {p++; goto _out; }}}
18123|      0|	break;
18124|    210|	case 1159:
  ------------------
  |  Branch (18124:2): [True: 210, False: 536k]
  ------------------
18125|    210|#line 1228 "src/char_ref.rl"
18126|    210|	{te = p+1;{output[0]=0x2308; {p++; goto _out; }}}
18127|      0|	break;
18128|    214|	case 1160:
  ------------------
  |  Branch (18128:2): [True: 214, False: 536k]
  ------------------
18129|    214|#line 1229 "src/char_ref.rl"
18130|    214|	{te = p+1;{output[0]=0x7b; {p++; goto _out; }}}
18131|      0|	break;
18132|    201|	case 1161:
  ------------------
  |  Branch (18132:2): [True: 201, False: 536k]
  ------------------
18133|    201|#line 1230 "src/char_ref.rl"
18134|    201|	{te = p+1;{output[0]=0x43b; {p++; goto _out; }}}
18135|      0|	break;
18136|    215|	case 1162:
  ------------------
  |  Branch (18136:2): [True: 215, False: 536k]
  ------------------
18137|    215|#line 1231 "src/char_ref.rl"
18138|    215|	{te = p+1;{output[0]=0x2936; {p++; goto _out; }}}
18139|      0|	break;
18140|    281|	case 1163:
  ------------------
  |  Branch (18140:2): [True: 281, False: 536k]
  ------------------
18141|    281|#line 1232 "src/char_ref.rl"
18142|    281|	{te = p+1;{output[0]=0x201c; {p++; goto _out; }}}
18143|      0|	break;
18144|    211|	case 1164:
  ------------------
  |  Branch (18144:2): [True: 211, False: 536k]
  ------------------
18145|    211|#line 1233 "src/char_ref.rl"
18146|    211|	{te = p+1;{output[0]=0x201e; {p++; goto _out; }}}
18147|      0|	break;
18148|    208|	case 1165:
  ------------------
  |  Branch (18148:2): [True: 208, False: 536k]
  ------------------
18149|    208|#line 1234 "src/char_ref.rl"
18150|    208|	{te = p+1;{output[0]=0x2967; {p++; goto _out; }}}
18151|      0|	break;
18152|    202|	case 1166:
  ------------------
  |  Branch (18152:2): [True: 202, False: 536k]
  ------------------
18153|    202|#line 1235 "src/char_ref.rl"
18154|    202|	{te = p+1;{output[0]=0x294b; {p++; goto _out; }}}
18155|      0|	break;
18156|    195|	case 1167:
  ------------------
  |  Branch (18156:2): [True: 195, False: 536k]
  ------------------
18157|    195|#line 1236 "src/char_ref.rl"
18158|    195|	{te = p+1;{output[0]=0x21b2; {p++; goto _out; }}}
18159|      0|	break;
18160|    603|	case 1168:
  ------------------
  |  Branch (18160:2): [True: 603, False: 535k]
  ------------------
18161|    603|#line 1237 "src/char_ref.rl"
18162|    603|	{te = p+1;{output[0]=0x2264; {p++; goto _out; }}}
18163|      0|	break;
18164|      0|	case 1169:
  ------------------
  |  Branch (18164:2): [True: 0, False: 536k]
  ------------------
18165|      0|#line 1238 "src/char_ref.rl"
18166|      0|	{te = p+1;{output[0]=0x2190; {p++; goto _out; }}}
18167|      0|	break;
18168|      0|	case 1170:
  ------------------
  |  Branch (18168:2): [True: 0, False: 536k]
  ------------------
18169|      0|#line 1239 "src/char_ref.rl"
18170|      0|	{te = p+1;{output[0]=0x21a2; {p++; goto _out; }}}
18171|      0|	break;
18172|      0|	case 1171:
  ------------------
  |  Branch (18172:2): [True: 0, False: 536k]
  ------------------
18173|      0|#line 1240 "src/char_ref.rl"
18174|      0|	{te = p+1;{output[0]=0x21bd; {p++; goto _out; }}}
18175|      0|	break;
18176|      0|	case 1172:
  ------------------
  |  Branch (18176:2): [True: 0, False: 536k]
  ------------------
18177|      0|#line 1241 "src/char_ref.rl"
18178|      0|	{te = p+1;{output[0]=0x21bc; {p++; goto _out; }}}
18179|      0|	break;
18180|      0|	case 1173:
  ------------------
  |  Branch (18180:2): [True: 0, False: 536k]
  ------------------
18181|      0|#line 1242 "src/char_ref.rl"
18182|      0|	{te = p+1;{output[0]=0x21c7; {p++; goto _out; }}}
18183|      0|	break;
18184|      0|	case 1174:
  ------------------
  |  Branch (18184:2): [True: 0, False: 536k]
  ------------------
18185|      0|#line 1243 "src/char_ref.rl"
18186|      0|	{te = p+1;{output[0]=0x2194; {p++; goto _out; }}}
18187|      0|	break;
18188|      0|	case 1175:
  ------------------
  |  Branch (18188:2): [True: 0, False: 536k]
  ------------------
18189|      0|#line 1244 "src/char_ref.rl"
18190|      0|	{te = p+1;{output[0]=0x21c6; {p++; goto _out; }}}
18191|      0|	break;
18192|      0|	case 1176:
  ------------------
  |  Branch (18192:2): [True: 0, False: 536k]
  ------------------
18193|      0|#line 1245 "src/char_ref.rl"
18194|      0|	{te = p+1;{output[0]=0x21cb; {p++; goto _out; }}}
18195|      0|	break;
18196|      0|	case 1177:
  ------------------
  |  Branch (18196:2): [True: 0, False: 536k]
  ------------------
18197|      0|#line 1246 "src/char_ref.rl"
18198|      0|	{te = p+1;{output[0]=0x21ad; {p++; goto _out; }}}
18199|      0|	break;
18200|      0|	case 1178:
  ------------------
  |  Branch (18200:2): [True: 0, False: 536k]
  ------------------
18201|      0|#line 1247 "src/char_ref.rl"
18202|      0|	{te = p+1;{output[0]=0x22cb; {p++; goto _out; }}}
18203|      0|	break;
18204|    216|	case 1179:
  ------------------
  |  Branch (18204:2): [True: 216, False: 536k]
  ------------------
18205|    216|#line 1248 "src/char_ref.rl"
18206|    216|	{te = p+1;{output[0]=0x22da; {p++; goto _out; }}}
18207|      0|	break;
18208|    207|	case 1180:
  ------------------
  |  Branch (18208:2): [True: 207, False: 536k]
  ------------------
18209|    207|#line 1249 "src/char_ref.rl"
18210|    207|	{te = p+1;{output[0]=0x2264; {p++; goto _out; }}}
18211|      0|	break;
18212|    302|	case 1181:
  ------------------
  |  Branch (18212:2): [True: 302, False: 536k]
  ------------------
18213|    302|#line 1250 "src/char_ref.rl"
18214|    302|	{te = p+1;{output[0]=0x2266; {p++; goto _out; }}}
18215|      0|	break;
18216|      0|	case 1182:
  ------------------
  |  Branch (18216:2): [True: 0, False: 536k]
  ------------------
18217|      0|#line 1251 "src/char_ref.rl"
18218|      0|	{te = p+1;{output[0]=0x2a7d; {p++; goto _out; }}}
18219|      0|	break;
18220|    475|	case 1183:
  ------------------
  |  Branch (18220:2): [True: 475, False: 535k]
  ------------------
18221|    475|#line 1252 "src/char_ref.rl"
18222|    475|	{te = p+1;{output[0]=0x2a7d; {p++; goto _out; }}}
18223|      0|	break;
18224|    207|	case 1184:
  ------------------
  |  Branch (18224:2): [True: 207, False: 536k]
  ------------------
18225|    207|#line 1253 "src/char_ref.rl"
18226|    207|	{te = p+1;{output[0]=0x2aa8; {p++; goto _out; }}}
18227|      0|	break;
18228|    225|	case 1185:
  ------------------
  |  Branch (18228:2): [True: 225, False: 536k]
  ------------------
18229|    225|#line 1254 "src/char_ref.rl"
18230|    225|	{te = p+1;{output[0]=0x2a7f; {p++; goto _out; }}}
18231|      0|	break;
18232|    232|	case 1186:
  ------------------
  |  Branch (18232:2): [True: 232, False: 536k]
  ------------------
18233|    232|#line 1255 "src/char_ref.rl"
18234|    232|	{te = p+1;{output[0]=0x2a81; {p++; goto _out; }}}
18235|      0|	break;
18236|    206|	case 1187:
  ------------------
  |  Branch (18236:2): [True: 206, False: 536k]
  ------------------
18237|    206|#line 1256 "src/char_ref.rl"
18238|    206|	{te = p+1;{output[0]=0x2a83; {p++; goto _out; }}}
18239|      0|	break;
18240|    207|	case 1188:
  ------------------
  |  Branch (18240:2): [True: 207, False: 536k]
  ------------------
18241|    207|#line 1257 "src/char_ref.rl"
18242|    207|	{te = p+1;{output[0]=0x22da; output[1]=0xfe00; {p++; goto _out; }}}
18243|      0|	break;
18244|    198|	case 1189:
  ------------------
  |  Branch (18244:2): [True: 198, False: 536k]
  ------------------
18245|    198|#line 1258 "src/char_ref.rl"
18246|    198|	{te = p+1;{output[0]=0x2a93; {p++; goto _out; }}}
18247|      0|	break;
18248|    203|	case 1190:
  ------------------
  |  Branch (18248:2): [True: 203, False: 536k]
  ------------------
18249|    203|#line 1259 "src/char_ref.rl"
18250|    203|	{te = p+1;{output[0]=0x2a85; {p++; goto _out; }}}
18251|      0|	break;
18252|    268|	case 1191:
  ------------------
  |  Branch (18252:2): [True: 268, False: 536k]
  ------------------
18253|    268|#line 1260 "src/char_ref.rl"
18254|    268|	{te = p+1;{output[0]=0x22d6; {p++; goto _out; }}}
18255|      0|	break;
18256|    308|	case 1192:
  ------------------
  |  Branch (18256:2): [True: 308, False: 536k]
  ------------------
18257|    308|#line 1261 "src/char_ref.rl"
18258|    308|	{te = p+1;{output[0]=0x22da; {p++; goto _out; }}}
18259|      0|	break;
18260|    221|	case 1193:
  ------------------
  |  Branch (18260:2): [True: 221, False: 536k]
  ------------------
18261|    221|#line 1262 "src/char_ref.rl"
18262|    221|	{te = p+1;{output[0]=0x2a8b; {p++; goto _out; }}}
18263|      0|	break;
18264|    312|	case 1194:
  ------------------
  |  Branch (18264:2): [True: 312, False: 536k]
  ------------------
18265|    312|#line 1263 "src/char_ref.rl"
18266|    312|	{te = p+1;{output[0]=0x2276; {p++; goto _out; }}}
18267|      0|	break;
18268|    336|	case 1195:
  ------------------
  |  Branch (18268:2): [True: 336, False: 535k]
  ------------------
18269|    336|#line 1264 "src/char_ref.rl"
18270|    336|	{te = p+1;{output[0]=0x2272; {p++; goto _out; }}}
18271|      0|	break;
18272|      0|	case 1196:
  ------------------
  |  Branch (18272:2): [True: 0, False: 536k]
  ------------------
18273|      0|#line 1265 "src/char_ref.rl"
18274|      0|	{te = p+1;{output[0]=0x297c; {p++; goto _out; }}}
18275|      0|	break;
18276|    199|	case 1197:
  ------------------
  |  Branch (18276:2): [True: 199, False: 536k]
  ------------------
18277|    199|#line 1266 "src/char_ref.rl"
18278|    199|	{te = p+1;{output[0]=0x230a; {p++; goto _out; }}}
18279|      0|	break;
18280|    641|	case 1198:
  ------------------
  |  Branch (18280:2): [True: 641, False: 535k]
  ------------------
18281|    641|#line 1267 "src/char_ref.rl"
18282|    641|	{te = p+1;{output[0]=0x1d529; {p++; goto _out; }}}
18283|      0|	break;
18284|    436|	case 1199:
  ------------------
  |  Branch (18284:2): [True: 436, False: 535k]
  ------------------
18285|    436|#line 1268 "src/char_ref.rl"
18286|    436|	{te = p+1;{output[0]=0x2276; {p++; goto _out; }}}
18287|      0|	break;
18288|    201|	case 1200:
  ------------------
  |  Branch (18288:2): [True: 201, False: 536k]
  ------------------
18289|    201|#line 1269 "src/char_ref.rl"
18290|    201|	{te = p+1;{output[0]=0x2a91; {p++; goto _out; }}}
18291|      0|	break;
18292|    265|	case 1201:
  ------------------
  |  Branch (18292:2): [True: 265, False: 536k]
  ------------------
18293|    265|#line 1270 "src/char_ref.rl"
18294|    265|	{te = p+1;{output[0]=0x21bd; {p++; goto _out; }}}
18295|      0|	break;
18296|    202|	case 1202:
  ------------------
  |  Branch (18296:2): [True: 202, False: 536k]
  ------------------
18297|    202|#line 1271 "src/char_ref.rl"
18298|    202|	{te = p+1;{output[0]=0x21bc; {p++; goto _out; }}}
18299|      0|	break;
18300|    202|	case 1203:
  ------------------
  |  Branch (18300:2): [True: 202, False: 536k]
  ------------------
18301|    202|#line 1272 "src/char_ref.rl"
18302|    202|	{te = p+1;{output[0]=0x296a; {p++; goto _out; }}}
18303|      0|	break;
18304|    372|	case 1204:
  ------------------
  |  Branch (18304:2): [True: 372, False: 535k]
  ------------------
18305|    372|#line 1273 "src/char_ref.rl"
18306|    372|	{te = p+1;{output[0]=0x2584; {p++; goto _out; }}}
18307|      0|	break;
18308|    198|	case 1205:
  ------------------
  |  Branch (18308:2): [True: 198, False: 536k]
  ------------------
18309|    198|#line 1274 "src/char_ref.rl"
18310|    198|	{te = p+1;{output[0]=0x459; {p++; goto _out; }}}
18311|      0|	break;
18312|    404|	case 1206:
  ------------------
  |  Branch (18312:2): [True: 404, False: 535k]
  ------------------
18313|    404|#line 1275 "src/char_ref.rl"
18314|    404|	{te = p+1;{output[0]=0x226a; {p++; goto _out; }}}
18315|      0|	break;
18316|    232|	case 1207:
  ------------------
  |  Branch (18316:2): [True: 232, False: 536k]
  ------------------
18317|    232|#line 1276 "src/char_ref.rl"
18318|    232|	{te = p+1;{output[0]=0x21c7; {p++; goto _out; }}}
18319|      0|	break;
18320|    234|	case 1208:
  ------------------
  |  Branch (18320:2): [True: 234, False: 536k]
  ------------------
18321|    234|#line 1277 "src/char_ref.rl"
18322|    234|	{te = p+1;{output[0]=0x231e; {p++; goto _out; }}}
18323|      0|	break;
18324|    273|	case 1209:
  ------------------
  |  Branch (18324:2): [True: 273, False: 536k]
  ------------------
18325|    273|#line 1278 "src/char_ref.rl"
18326|    273|	{te = p+1;{output[0]=0x296b; {p++; goto _out; }}}
18327|      0|	break;
18328|    244|	case 1210:
  ------------------
  |  Branch (18328:2): [True: 244, False: 536k]
  ------------------
18329|    244|#line 1279 "src/char_ref.rl"
18330|    244|	{te = p+1;{output[0]=0x25fa; {p++; goto _out; }}}
18331|      0|	break;
18332|    278|	case 1211:
  ------------------
  |  Branch (18332:2): [True: 278, False: 536k]
  ------------------
18333|    278|#line 1280 "src/char_ref.rl"
18334|    278|	{te = p+1;{output[0]=0x140; {p++; goto _out; }}}
18335|      0|	break;
18336|    227|	case 1212:
  ------------------
  |  Branch (18336:2): [True: 227, False: 536k]
  ------------------
18337|    227|#line 1281 "src/char_ref.rl"
18338|    227|	{te = p+1;{output[0]=0x23b0; {p++; goto _out; }}}
18339|      0|	break;
18340|      0|	case 1213:
  ------------------
  |  Branch (18340:2): [True: 0, False: 536k]
  ------------------
18341|      0|#line 1282 "src/char_ref.rl"
18342|      0|	{te = p+1;{output[0]=0x23b0; {p++; goto _out; }}}
18343|      0|	break;
18344|    317|	case 1214:
  ------------------
  |  Branch (18344:2): [True: 317, False: 536k]
  ------------------
18345|    317|#line 1283 "src/char_ref.rl"
18346|    317|	{te = p+1;{output[0]=0x2268; {p++; goto _out; }}}
18347|      0|	break;
18348|    617|	case 1215:
  ------------------
  |  Branch (18348:2): [True: 617, False: 535k]
  ------------------
18349|    617|#line 1284 "src/char_ref.rl"
18350|    617|	{te = p+1;{output[0]=0x2a89; {p++; goto _out; }}}
18351|      0|	break;
18352|    199|	case 1216:
  ------------------
  |  Branch (18352:2): [True: 199, False: 536k]
  ------------------
18353|    199|#line 1285 "src/char_ref.rl"
18354|    199|	{te = p+1;{output[0]=0x2a89; {p++; goto _out; }}}
18355|      0|	break;
18356|    205|	case 1217:
  ------------------
  |  Branch (18356:2): [True: 205, False: 536k]
  ------------------
18357|    205|#line 1286 "src/char_ref.rl"
18358|    205|	{te = p+1;{output[0]=0x2a87; {p++; goto _out; }}}
18359|      0|	break;
18360|    211|	case 1218:
  ------------------
  |  Branch (18360:2): [True: 211, False: 536k]
  ------------------
18361|    211|#line 1287 "src/char_ref.rl"
18362|    211|	{te = p+1;{output[0]=0x2a87; {p++; goto _out; }}}
18363|      0|	break;
18364|    202|	case 1219:
  ------------------
  |  Branch (18364:2): [True: 202, False: 536k]
  ------------------
18365|    202|#line 1288 "src/char_ref.rl"
18366|    202|	{te = p+1;{output[0]=0x2268; {p++; goto _out; }}}
18367|      0|	break;
18368|    228|	case 1220:
  ------------------
  |  Branch (18368:2): [True: 228, False: 536k]
  ------------------
18369|    228|#line 1289 "src/char_ref.rl"
18370|    228|	{te = p+1;{output[0]=0x22e6; {p++; goto _out; }}}
18371|      0|	break;
18372|    200|	case 1221:
  ------------------
  |  Branch (18372:2): [True: 200, False: 536k]
  ------------------
18373|    200|#line 1290 "src/char_ref.rl"
18374|    200|	{te = p+1;{output[0]=0x27ec; {p++; goto _out; }}}
18375|      0|	break;
18376|    236|	case 1222:
  ------------------
  |  Branch (18376:2): [True: 236, False: 536k]
  ------------------
18377|    236|#line 1291 "src/char_ref.rl"
18378|    236|	{te = p+1;{output[0]=0x21fd; {p++; goto _out; }}}
18379|      0|	break;
18380|    297|	case 1223:
  ------------------
  |  Branch (18380:2): [True: 297, False: 536k]
  ------------------
18381|    297|#line 1292 "src/char_ref.rl"
18382|    297|	{te = p+1;{output[0]=0x27e6; {p++; goto _out; }}}
18383|      0|	break;
18384|      0|	case 1224:
  ------------------
  |  Branch (18384:2): [True: 0, False: 536k]
  ------------------
18385|      0|#line 1293 "src/char_ref.rl"
18386|      0|	{te = p+1;{output[0]=0x27f5; {p++; goto _out; }}}
18387|      0|	break;
18388|      0|	case 1225:
  ------------------
  |  Branch (18388:2): [True: 0, False: 536k]
  ------------------
18389|      0|#line 1294 "src/char_ref.rl"
18390|      0|	{te = p+1;{output[0]=0x27f7; {p++; goto _out; }}}
18391|      0|	break;
18392|      0|	case 1226:
  ------------------
  |  Branch (18392:2): [True: 0, False: 536k]
  ------------------
18393|      0|#line 1295 "src/char_ref.rl"
18394|      0|	{te = p+1;{output[0]=0x27fc; {p++; goto _out; }}}
18395|      0|	break;
18396|      0|	case 1227:
  ------------------
  |  Branch (18396:2): [True: 0, False: 536k]
  ------------------
18397|      0|#line 1296 "src/char_ref.rl"
18398|      0|	{te = p+1;{output[0]=0x27f6; {p++; goto _out; }}}
18399|      0|	break;
18400|      0|	case 1228:
  ------------------
  |  Branch (18400:2): [True: 0, False: 536k]
  ------------------
18401|      0|#line 1297 "src/char_ref.rl"
18402|      0|	{te = p+1;{output[0]=0x21ab; {p++; goto _out; }}}
18403|      0|	break;
18404|      0|	case 1229:
  ------------------
  |  Branch (18404:2): [True: 0, False: 536k]
  ------------------
18405|      0|#line 1298 "src/char_ref.rl"
18406|      0|	{te = p+1;{output[0]=0x21ac; {p++; goto _out; }}}
18407|      0|	break;
18408|    225|	case 1230:
  ------------------
  |  Branch (18408:2): [True: 225, False: 536k]
  ------------------
18409|    225|#line 1299 "src/char_ref.rl"
18410|    225|	{te = p+1;{output[0]=0x2985; {p++; goto _out; }}}
18411|      0|	break;
18412|    233|	case 1231:
  ------------------
  |  Branch (18412:2): [True: 233, False: 536k]
  ------------------
18413|    233|#line 1300 "src/char_ref.rl"
18414|    233|	{te = p+1;{output[0]=0x1d55d; {p++; goto _out; }}}
18415|      0|	break;
18416|    201|	case 1232:
  ------------------
  |  Branch (18416:2): [True: 201, False: 536k]
  ------------------
18417|    201|#line 1301 "src/char_ref.rl"
18418|    201|	{te = p+1;{output[0]=0x2a2d; {p++; goto _out; }}}
18419|      0|	break;
18420|    198|	case 1233:
  ------------------
  |  Branch (18420:2): [True: 198, False: 536k]
  ------------------
18421|    198|#line 1302 "src/char_ref.rl"
18422|    198|	{te = p+1;{output[0]=0x2a34; {p++; goto _out; }}}
18423|      0|	break;
18424|    200|	case 1234:
  ------------------
  |  Branch (18424:2): [True: 200, False: 536k]
  ------------------
18425|    200|#line 1303 "src/char_ref.rl"
18426|    200|	{te = p+1;{output[0]=0x2217; {p++; goto _out; }}}
18427|      0|	break;
18428|    343|	case 1235:
  ------------------
  |  Branch (18428:2): [True: 343, False: 535k]
  ------------------
18429|    343|#line 1304 "src/char_ref.rl"
18430|    343|	{te = p+1;{output[0]=0x5f; {p++; goto _out; }}}
18431|      0|	break;
18432|    210|	case 1236:
  ------------------
  |  Branch (18432:2): [True: 210, False: 536k]
  ------------------
18433|    210|#line 1305 "src/char_ref.rl"
18434|    210|	{te = p+1;{output[0]=0x25ca; {p++; goto _out; }}}
18435|      0|	break;
18436|    204|	case 1237:
  ------------------
  |  Branch (18436:2): [True: 204, False: 536k]
  ------------------
18437|    204|#line 1306 "src/char_ref.rl"
18438|    204|	{te = p+1;{output[0]=0x25ca; {p++; goto _out; }}}
18439|      0|	break;
18440|    195|	case 1238:
  ------------------
  |  Branch (18440:2): [True: 195, False: 536k]
  ------------------
18441|    195|#line 1307 "src/char_ref.rl"
18442|    195|	{te = p+1;{output[0]=0x29eb; {p++; goto _out; }}}
18443|      0|	break;
18444|    265|	case 1239:
  ------------------
  |  Branch (18444:2): [True: 265, False: 536k]
  ------------------
18445|    265|#line 1308 "src/char_ref.rl"
18446|    265|	{te = p+1;{output[0]=0x28; {p++; goto _out; }}}
18447|      0|	break;
18448|    263|	case 1240:
  ------------------
  |  Branch (18448:2): [True: 263, False: 536k]
  ------------------
18449|    263|#line 1309 "src/char_ref.rl"
18450|    263|	{te = p+1;{output[0]=0x2993; {p++; goto _out; }}}
18451|      0|	break;
18452|    285|	case 1241:
  ------------------
  |  Branch (18452:2): [True: 285, False: 536k]
  ------------------
18453|    285|#line 1310 "src/char_ref.rl"
18454|    285|	{te = p+1;{output[0]=0x21c6; {p++; goto _out; }}}
18455|      0|	break;
18456|    201|	case 1242:
  ------------------
  |  Branch (18456:2): [True: 201, False: 536k]
  ------------------
18457|    201|#line 1311 "src/char_ref.rl"
18458|    201|	{te = p+1;{output[0]=0x231f; {p++; goto _out; }}}
18459|      0|	break;
18460|    272|	case 1243:
  ------------------
  |  Branch (18460:2): [True: 272, False: 536k]
  ------------------
18461|    272|#line 1312 "src/char_ref.rl"
18462|    272|	{te = p+1;{output[0]=0x21cb; {p++; goto _out; }}}
18463|      0|	break;
18464|    228|	case 1244:
  ------------------
  |  Branch (18464:2): [True: 228, False: 536k]
  ------------------
18465|    228|#line 1313 "src/char_ref.rl"
18466|    228|	{te = p+1;{output[0]=0x296d; {p++; goto _out; }}}
18467|      0|	break;
18468|    236|	case 1245:
  ------------------
  |  Branch (18468:2): [True: 236, False: 536k]
  ------------------
18469|    236|#line 1314 "src/char_ref.rl"
18470|    236|	{te = p+1;{output[0]=0x200e; {p++; goto _out; }}}
18471|      0|	break;
18472|    278|	case 1246:
  ------------------
  |  Branch (18472:2): [True: 278, False: 536k]
  ------------------
18473|    278|#line 1315 "src/char_ref.rl"
18474|    278|	{te = p+1;{output[0]=0x22bf; {p++; goto _out; }}}
18475|      0|	break;
18476|    223|	case 1247:
  ------------------
  |  Branch (18476:2): [True: 223, False: 536k]
  ------------------
18477|    223|#line 1316 "src/char_ref.rl"
18478|    223|	{te = p+1;{output[0]=0x2039; {p++; goto _out; }}}
18479|      0|	break;
18480|    284|	case 1248:
  ------------------
  |  Branch (18480:2): [True: 284, False: 536k]
  ------------------
18481|    284|#line 1317 "src/char_ref.rl"
18482|    284|	{te = p+1;{output[0]=0x1d4c1; {p++; goto _out; }}}
18483|      0|	break;
18484|    261|	case 1249:
  ------------------
  |  Branch (18484:2): [True: 261, False: 536k]
  ------------------
18485|    261|#line 1318 "src/char_ref.rl"
18486|    261|	{te = p+1;{output[0]=0x21b0; {p++; goto _out; }}}
18487|      0|	break;
18488|    224|	case 1250:
  ------------------
  |  Branch (18488:2): [True: 224, False: 536k]
  ------------------
18489|    224|#line 1319 "src/char_ref.rl"
18490|    224|	{te = p+1;{output[0]=0x2272; {p++; goto _out; }}}
18491|      0|	break;
18492|    266|	case 1251:
  ------------------
  |  Branch (18492:2): [True: 266, False: 536k]
  ------------------
18493|    266|#line 1320 "src/char_ref.rl"
18494|    266|	{te = p+1;{output[0]=0x2a8d; {p++; goto _out; }}}
18495|      0|	break;
18496|    214|	case 1252:
  ------------------
  |  Branch (18496:2): [True: 214, False: 536k]
  ------------------
18497|    214|#line 1321 "src/char_ref.rl"
18498|    214|	{te = p+1;{output[0]=0x2a8f; {p++; goto _out; }}}
18499|      0|	break;
18500|    223|	case 1253:
  ------------------
  |  Branch (18500:2): [True: 223, False: 536k]
  ------------------
18501|    223|#line 1322 "src/char_ref.rl"
18502|    223|	{te = p+1;{output[0]=0x5b; {p++; goto _out; }}}
18503|      0|	break;
18504|    196|	case 1254:
  ------------------
  |  Branch (18504:2): [True: 196, False: 536k]
  ------------------
18505|    196|#line 1323 "src/char_ref.rl"
18506|    196|	{te = p+1;{output[0]=0x2018; {p++; goto _out; }}}
18507|      0|	break;
18508|    357|	case 1255:
  ------------------
  |  Branch (18508:2): [True: 357, False: 535k]
  ------------------
18509|    357|#line 1324 "src/char_ref.rl"
18510|    357|	{te = p+1;{output[0]=0x201a; {p++; goto _out; }}}
18511|      0|	break;
18512|    271|	case 1256:
  ------------------
  |  Branch (18512:2): [True: 271, False: 536k]
  ------------------
18513|    271|#line 1325 "src/char_ref.rl"
18514|    271|	{te = p+1;{output[0]=0x142; {p++; goto _out; }}}
18515|      0|	break;
18516|    578|	case 2170:
  ------------------
  |  Branch (18516:2): [True: 578, False: 535k]
  ------------------
18517|    578|#line 1326 "src/char_ref.rl"
18518|    578|	{te = p+1;{output[0]=0x3c; {p++; goto _out; }}}
18519|      0|	break;
18520|    301|	case 1258:
  ------------------
  |  Branch (18520:2): [True: 301, False: 536k]
  ------------------
18521|    301|#line 1327 "src/char_ref.rl"
18522|    301|	{te = p+1;{output[0]=0x2aa6; {p++; goto _out; }}}
18523|      0|	break;
18524|    368|	case 1259:
  ------------------
  |  Branch (18524:2): [True: 368, False: 535k]
  ------------------
18525|    368|#line 1328 "src/char_ref.rl"
18526|    368|	{te = p+1;{output[0]=0x2a79; {p++; goto _out; }}}
18527|      0|	break;
18528|    262|	case 1260:
  ------------------
  |  Branch (18528:2): [True: 262, False: 536k]
  ------------------
18529|    262|#line 1329 "src/char_ref.rl"
18530|    262|	{te = p+1;{output[0]=0x22d6; {p++; goto _out; }}}
18531|      0|	break;
18532|    201|	case 1261:
  ------------------
  |  Branch (18532:2): [True: 201, False: 536k]
  ------------------
18533|    201|#line 1330 "src/char_ref.rl"
18534|    201|	{te = p+1;{output[0]=0x22cb; {p++; goto _out; }}}
18535|      0|	break;
18536|    370|	case 1262:
  ------------------
  |  Branch (18536:2): [True: 370, False: 535k]
  ------------------
18537|    370|#line 1331 "src/char_ref.rl"
18538|    370|	{te = p+1;{output[0]=0x22c9; {p++; goto _out; }}}
18539|      0|	break;
18540|    199|	case 1263:
  ------------------
  |  Branch (18540:2): [True: 199, False: 536k]
  ------------------
18541|    199|#line 1332 "src/char_ref.rl"
18542|    199|	{te = p+1;{output[0]=0x2976; {p++; goto _out; }}}
18543|      0|	break;
18544|    228|	case 1264:
  ------------------
  |  Branch (18544:2): [True: 228, False: 536k]
  ------------------
18545|    228|#line 1333 "src/char_ref.rl"
18546|    228|	{te = p+1;{output[0]=0x2a7b; {p++; goto _out; }}}
18547|      0|	break;
18548|    225|	case 1265:
  ------------------
  |  Branch (18548:2): [True: 225, False: 536k]
  ------------------
18549|    225|#line 1334 "src/char_ref.rl"
18550|    225|	{te = p+1;{output[0]=0x2996; {p++; goto _out; }}}
18551|      0|	break;
18552|    202|	case 1266:
  ------------------
  |  Branch (18552:2): [True: 202, False: 536k]
  ------------------
18553|    202|#line 1335 "src/char_ref.rl"
18554|    202|	{te = p+1;{output[0]=0x25c3; {p++; goto _out; }}}
18555|      0|	break;
18556|    201|	case 1267:
  ------------------
  |  Branch (18556:2): [True: 201, False: 536k]
  ------------------
18557|    201|#line 1336 "src/char_ref.rl"
18558|    201|	{te = p+1;{output[0]=0x22b4; {p++; goto _out; }}}
18559|      0|	break;
18560|    215|	case 1268:
  ------------------
  |  Branch (18560:2): [True: 215, False: 536k]
  ------------------
18561|    215|#line 1337 "src/char_ref.rl"
18562|    215|	{te = p+1;{output[0]=0x25c2; {p++; goto _out; }}}
18563|      0|	break;
18564|    216|	case 1269:
  ------------------
  |  Branch (18564:2): [True: 216, False: 536k]
  ------------------
18565|    216|#line 1338 "src/char_ref.rl"
18566|    216|	{te = p+1;{output[0]=0x294a; {p++; goto _out; }}}
18567|      0|	break;
18568|    212|	case 1270:
  ------------------
  |  Branch (18568:2): [True: 212, False: 536k]
  ------------------
18569|    212|#line 1339 "src/char_ref.rl"
18570|    212|	{te = p+1;{output[0]=0x2966; {p++; goto _out; }}}
18571|      0|	break;
18572|    239|	case 1271:
  ------------------
  |  Branch (18572:2): [True: 239, False: 536k]
  ------------------
18573|    239|#line 1340 "src/char_ref.rl"
18574|    239|	{te = p+1;{output[0]=0x2268; output[1]=0xfe00; {p++; goto _out; }}}
18575|      0|	break;
18576|    302|	case 1272:
  ------------------
  |  Branch (18576:2): [True: 302, False: 536k]
  ------------------
18577|    302|#line 1341 "src/char_ref.rl"
18578|    302|	{te = p+1;{output[0]=0x2268; output[1]=0xfe00; {p++; goto _out; }}}
18579|      0|	break;
18580|    220|	case 1273:
  ------------------
  |  Branch (18580:2): [True: 220, False: 536k]
  ------------------
18581|    220|#line 1342 "src/char_ref.rl"
18582|    220|	{te = p+1;{output[0]=0x223a; {p++; goto _out; }}}
18583|      0|	break;
18584|    340|	case 2172:
  ------------------
  |  Branch (18584:2): [True: 340, False: 535k]
  ------------------
18585|    340|#line 1343 "src/char_ref.rl"
18586|    340|	{te = p+1;{output[0]=0xaf; {p++; goto _out; }}}
18587|      0|	break;
18588|    219|	case 1274:
  ------------------
  |  Branch (18588:2): [True: 219, False: 536k]
  ------------------
18589|    219|#line 1344 "src/char_ref.rl"
18590|    219|	{te = p+1;{output[0]=0x2642; {p++; goto _out; }}}
18591|      0|	break;
18592|    265|	case 1275:
  ------------------
  |  Branch (18592:2): [True: 265, False: 536k]
  ------------------
18593|    265|#line 1345 "src/char_ref.rl"
18594|    265|	{te = p+1;{output[0]=0x2720; {p++; goto _out; }}}
18595|      0|	break;
18596|    234|	case 1276:
  ------------------
  |  Branch (18596:2): [True: 234, False: 536k]
  ------------------
18597|    234|#line 1346 "src/char_ref.rl"
18598|    234|	{te = p+1;{output[0]=0x2720; {p++; goto _out; }}}
18599|      0|	break;
18600|    379|	case 1277:
  ------------------
  |  Branch (18600:2): [True: 379, False: 535k]
  ------------------
18601|    379|#line 1347 "src/char_ref.rl"
18602|    379|	{te = p+1;{output[0]=0x21a6; {p++; goto _out; }}}
18603|      0|	break;
18604|    196|	case 1278:
  ------------------
  |  Branch (18604:2): [True: 196, False: 536k]
  ------------------
18605|    196|#line 1348 "src/char_ref.rl"
18606|    196|	{te = p+1;{output[0]=0x21a6; {p++; goto _out; }}}
18607|      0|	break;
18608|    220|	case 1279:
  ------------------
  |  Branch (18608:2): [True: 220, False: 536k]
  ------------------
18609|    220|#line 1349 "src/char_ref.rl"
18610|    220|	{te = p+1;{output[0]=0x21a7; {p++; goto _out; }}}
18611|      0|	break;
18612|      0|	case 1280:
  ------------------
  |  Branch (18612:2): [True: 0, False: 536k]
  ------------------
18613|      0|#line 1350 "src/char_ref.rl"
18614|      0|	{te = p+1;{output[0]=0x21a4; {p++; goto _out; }}}
18615|      0|	break;
18616|    197|	case 1281:
  ------------------
  |  Branch (18616:2): [True: 197, False: 536k]
  ------------------
18617|    197|#line 1351 "src/char_ref.rl"
18618|    197|	{te = p+1;{output[0]=0x21a5; {p++; goto _out; }}}
18619|      0|	break;
18620|    194|	case 1282:
  ------------------
  |  Branch (18620:2): [True: 194, False: 536k]
  ------------------
18621|    194|#line 1352 "src/char_ref.rl"
18622|    194|	{te = p+1;{output[0]=0x25ae; {p++; goto _out; }}}
18623|      0|	break;
18624|    207|	case 1283:
  ------------------
  |  Branch (18624:2): [True: 207, False: 536k]
  ------------------
18625|    207|#line 1353 "src/char_ref.rl"
18626|    207|	{te = p+1;{output[0]=0x2a29; {p++; goto _out; }}}
18627|      0|	break;
18628|    380|	case 1284:
  ------------------
  |  Branch (18628:2): [True: 380, False: 535k]
  ------------------
18629|    380|#line 1354 "src/char_ref.rl"
18630|    380|	{te = p+1;{output[0]=0x43c; {p++; goto _out; }}}
18631|      0|	break;
18632|    214|	case 1285:
  ------------------
  |  Branch (18632:2): [True: 214, False: 536k]
  ------------------
18633|    214|#line 1355 "src/char_ref.rl"
18634|    214|	{te = p+1;{output[0]=0x2014; {p++; goto _out; }}}
18635|      0|	break;
18636|      0|	case 1286:
  ------------------
  |  Branch (18636:2): [True: 0, False: 536k]
  ------------------
18637|      0|#line 1356 "src/char_ref.rl"
18638|      0|	{te = p+1;{output[0]=0x2221; {p++; goto _out; }}}
18639|      0|	break;
18640|    298|	case 1287:
  ------------------
  |  Branch (18640:2): [True: 298, False: 536k]
  ------------------
18641|    298|#line 1357 "src/char_ref.rl"
18642|    298|	{te = p+1;{output[0]=0x1d52a; {p++; goto _out; }}}
18643|      0|	break;
18644|    268|	case 1288:
  ------------------
  |  Branch (18644:2): [True: 268, False: 536k]
  ------------------
18645|    268|#line 1358 "src/char_ref.rl"
18646|    268|	{te = p+1;{output[0]=0x2127; {p++; goto _out; }}}
18647|      0|	break;
18648|    511|	case 2174:
  ------------------
  |  Branch (18648:2): [True: 511, False: 535k]
  ------------------
18649|    511|#line 1359 "src/char_ref.rl"
18650|    511|	{te = p+1;{output[0]=0xb5; {p++; goto _out; }}}
18651|      0|	break;
18652|    230|	case 1289:
  ------------------
  |  Branch (18652:2): [True: 230, False: 536k]
  ------------------
18653|    230|#line 1360 "src/char_ref.rl"
18654|    230|	{te = p+1;{output[0]=0x2223; {p++; goto _out; }}}
18655|      0|	break;
18656|    201|	case 1290:
  ------------------
  |  Branch (18656:2): [True: 201, False: 536k]
  ------------------
18657|    201|#line 1361 "src/char_ref.rl"
18658|    201|	{te = p+1;{output[0]=0x2a; {p++; goto _out; }}}
18659|      0|	break;
18660|    208|	case 1291:
  ------------------
  |  Branch (18660:2): [True: 208, False: 536k]
  ------------------
18661|    208|#line 1362 "src/char_ref.rl"
18662|    208|	{te = p+1;{output[0]=0x2af0; {p++; goto _out; }}}
18663|      0|	break;
18664|    390|	case 2176:
  ------------------
  |  Branch (18664:2): [True: 390, False: 535k]
  ------------------
18665|    390|#line 1363 "src/char_ref.rl"
18666|    390|	{te = p+1;{output[0]=0xb7; {p++; goto _out; }}}
18667|      0|	break;
18668|    371|	case 1292:
  ------------------
  |  Branch (18668:2): [True: 371, False: 535k]
  ------------------
18669|    371|#line 1364 "src/char_ref.rl"
18670|    371|	{te = p+1;{output[0]=0x2212; {p++; goto _out; }}}
18671|      0|	break;
18672|    208|	case 1293:
  ------------------
  |  Branch (18672:2): [True: 208, False: 536k]
  ------------------
18673|    208|#line 1365 "src/char_ref.rl"
18674|    208|	{te = p+1;{output[0]=0x229f; {p++; goto _out; }}}
18675|      0|	break;
18676|    198|	case 1294:
  ------------------
  |  Branch (18676:2): [True: 198, False: 536k]
  ------------------
18677|    198|#line 1366 "src/char_ref.rl"
18678|    198|	{te = p+1;{output[0]=0x2238; {p++; goto _out; }}}
18679|      0|	break;
18680|    332|	case 1295:
  ------------------
  |  Branch (18680:2): [True: 332, False: 535k]
  ------------------
18681|    332|#line 1367 "src/char_ref.rl"
18682|    332|	{te = p+1;{output[0]=0x2a2a; {p++; goto _out; }}}
18683|      0|	break;
18684|    222|	case 1296:
  ------------------
  |  Branch (18684:2): [True: 222, False: 536k]
  ------------------
18685|    222|#line 1368 "src/char_ref.rl"
18686|    222|	{te = p+1;{output[0]=0x2adb; {p++; goto _out; }}}
18687|      0|	break;
18688|    447|	case 1297:
  ------------------
  |  Branch (18688:2): [True: 447, False: 535k]
  ------------------
18689|    447|#line 1369 "src/char_ref.rl"
18690|    447|	{te = p+1;{output[0]=0x2026; {p++; goto _out; }}}
18691|      0|	break;
18692|    194|	case 1298:
  ------------------
  |  Branch (18692:2): [True: 194, False: 536k]
  ------------------
18693|    194|#line 1370 "src/char_ref.rl"
18694|    194|	{te = p+1;{output[0]=0x2213; {p++; goto _out; }}}
18695|      0|	break;
18696|    198|	case 1299:
  ------------------
  |  Branch (18696:2): [True: 198, False: 536k]
  ------------------
18697|    198|#line 1371 "src/char_ref.rl"
18698|    198|	{te = p+1;{output[0]=0x22a7; {p++; goto _out; }}}
18699|      0|	break;
18700|    202|	case 1300:
  ------------------
  |  Branch (18700:2): [True: 202, False: 536k]
  ------------------
18701|    202|#line 1372 "src/char_ref.rl"
18702|    202|	{te = p+1;{output[0]=0x1d55e; {p++; goto _out; }}}
18703|      0|	break;
18704|    358|	case 1301:
  ------------------
  |  Branch (18704:2): [True: 358, False: 535k]
  ------------------
18705|    358|#line 1373 "src/char_ref.rl"
18706|    358|	{te = p+1;{output[0]=0x2213; {p++; goto _out; }}}
18707|      0|	break;
18708|    257|	case 1302:
  ------------------
  |  Branch (18708:2): [True: 257, False: 536k]
  ------------------
18709|    257|#line 1374 "src/char_ref.rl"
18710|    257|	{te = p+1;{output[0]=0x1d4c2; {p++; goto _out; }}}
18711|      0|	break;
18712|    240|	case 1303:
  ------------------
  |  Branch (18712:2): [True: 240, False: 536k]
  ------------------
18713|    240|#line 1375 "src/char_ref.rl"
18714|    240|	{te = p+1;{output[0]=0x223e; {p++; goto _out; }}}
18715|      0|	break;
18716|    264|	case 1304:
  ------------------
  |  Branch (18716:2): [True: 264, False: 536k]
  ------------------
18717|    264|#line 1376 "src/char_ref.rl"
18718|    264|	{te = p+1;{output[0]=0x3bc; {p++; goto _out; }}}
18719|      0|	break;
18720|    252|	case 1305:
  ------------------
  |  Branch (18720:2): [True: 252, False: 536k]
  ------------------
18721|    252|#line 1377 "src/char_ref.rl"
18722|    252|	{te = p+1;{output[0]=0x22b8; {p++; goto _out; }}}
18723|      0|	break;
18724|    205|	case 1306:
  ------------------
  |  Branch (18724:2): [True: 205, False: 536k]
  ------------------
18725|    205|#line 1378 "src/char_ref.rl"
18726|    205|	{te = p+1;{output[0]=0x22b8; {p++; goto _out; }}}
18727|      0|	break;
18728|    232|	case 1307:
  ------------------
  |  Branch (18728:2): [True: 232, False: 536k]
  ------------------
18729|    232|#line 1379 "src/char_ref.rl"
18730|    232|	{te = p+1;{output[0]=0x22d9; output[1]=0x338; {p++; goto _out; }}}
18731|      0|	break;
18732|    403|	case 1308:
  ------------------
  |  Branch (18732:2): [True: 403, False: 535k]
  ------------------
18733|    403|#line 1380 "src/char_ref.rl"
18734|    403|	{te = p+1;{output[0]=0x226b; output[1]=0x20d2; {p++; goto _out; }}}
18735|      0|	break;
18736|    550|	case 1309:
  ------------------
  |  Branch (18736:2): [True: 550, False: 535k]
  ------------------
18737|    550|#line 1381 "src/char_ref.rl"
18738|    550|	{te = p+1;{output[0]=0x226b; output[1]=0x338; {p++; goto _out; }}}
18739|      0|	break;
18740|      0|	case 1310:
  ------------------
  |  Branch (18740:2): [True: 0, False: 536k]
  ------------------
18741|      0|#line 1382 "src/char_ref.rl"
18742|      0|	{te = p+1;{output[0]=0x21cd; {p++; goto _out; }}}
18743|      0|	break;
18744|      0|	case 1311:
  ------------------
  |  Branch (18744:2): [True: 0, False: 536k]
  ------------------
18745|      0|#line 1383 "src/char_ref.rl"
18746|      0|	{te = p+1;{output[0]=0x21ce; {p++; goto _out; }}}
18747|      0|	break;
18748|    352|	case 1312:
  ------------------
  |  Branch (18748:2): [True: 352, False: 535k]
  ------------------
18749|    352|#line 1384 "src/char_ref.rl"
18750|    352|	{te = p+1;{output[0]=0x22d8; output[1]=0x338; {p++; goto _out; }}}
18751|      0|	break;
18752|    206|	case 1313:
  ------------------
  |  Branch (18752:2): [True: 206, False: 536k]
  ------------------
18753|    206|#line 1385 "src/char_ref.rl"
18754|    206|	{te = p+1;{output[0]=0x226a; output[1]=0x20d2; {p++; goto _out; }}}
18755|      0|	break;
18756|    205|	case 1314:
  ------------------
  |  Branch (18756:2): [True: 205, False: 536k]
  ------------------
18757|    205|#line 1386 "src/char_ref.rl"
18758|    205|	{te = p+1;{output[0]=0x226a; output[1]=0x338; {p++; goto _out; }}}
18759|      0|	break;
18760|      0|	case 1315:
  ------------------
  |  Branch (18760:2): [True: 0, False: 536k]
  ------------------
18761|      0|#line 1387 "src/char_ref.rl"
18762|      0|	{te = p+1;{output[0]=0x21cf; {p++; goto _out; }}}
18763|      0|	break;
18764|    292|	case 1316:
  ------------------
  |  Branch (18764:2): [True: 292, False: 536k]
  ------------------
18765|    292|#line 1388 "src/char_ref.rl"
18766|    292|	{te = p+1;{output[0]=0x22af; {p++; goto _out; }}}
18767|      0|	break;
18768|    196|	case 1317:
  ------------------
  |  Branch (18768:2): [True: 196, False: 536k]
  ------------------
18769|    196|#line 1389 "src/char_ref.rl"
18770|    196|	{te = p+1;{output[0]=0x22ae; {p++; goto _out; }}}
18771|      0|	break;
18772|    197|	case 1318:
  ------------------
  |  Branch (18772:2): [True: 197, False: 536k]
  ------------------
18773|    197|#line 1390 "src/char_ref.rl"
18774|    197|	{te = p+1;{output[0]=0x2207; {p++; goto _out; }}}
18775|      0|	break;
18776|    285|	case 1319:
  ------------------
  |  Branch (18776:2): [True: 285, False: 536k]
  ------------------
18777|    285|#line 1391 "src/char_ref.rl"
18778|    285|	{te = p+1;{output[0]=0x144; {p++; goto _out; }}}
18779|      0|	break;
18780|    232|	case 1320:
  ------------------
  |  Branch (18780:2): [True: 232, False: 536k]
  ------------------
18781|    232|#line 1392 "src/char_ref.rl"
18782|    232|	{te = p+1;{output[0]=0x2220; output[1]=0x20d2; {p++; goto _out; }}}
18783|      0|	break;
18784|    265|	case 1321:
  ------------------
  |  Branch (18784:2): [True: 265, False: 536k]
  ------------------
18785|    265|#line 1393 "src/char_ref.rl"
18786|    265|	{te = p+1;{output[0]=0x2249; {p++; goto _out; }}}
18787|      0|	break;
18788|    202|	case 1322:
  ------------------
  |  Branch (18788:2): [True: 202, False: 536k]
  ------------------
18789|    202|#line 1394 "src/char_ref.rl"
18790|    202|	{te = p+1;{output[0]=0x2a70; output[1]=0x338; {p++; goto _out; }}}
18791|      0|	break;
18792|    194|	case 1323:
  ------------------
  |  Branch (18792:2): [True: 194, False: 536k]
  ------------------
18793|    194|#line 1395 "src/char_ref.rl"
18794|    194|	{te = p+1;{output[0]=0x224b; output[1]=0x338; {p++; goto _out; }}}
18795|      0|	break;
18796|    224|	case 1324:
  ------------------
  |  Branch (18796:2): [True: 224, False: 536k]
  ------------------
18797|    224|#line 1396 "src/char_ref.rl"
18798|    224|	{te = p+1;{output[0]=0x149; {p++; goto _out; }}}
18799|      0|	break;
18800|    360|	case 1325:
  ------------------
  |  Branch (18800:2): [True: 360, False: 535k]
  ------------------
18801|    360|#line 1397 "src/char_ref.rl"
18802|    360|	{te = p+1;{output[0]=0x2249; {p++; goto _out; }}}
18803|      0|	break;
18804|    202|	case 1326:
  ------------------
  |  Branch (18804:2): [True: 202, False: 536k]
  ------------------
18805|    202|#line 1398 "src/char_ref.rl"
18806|    202|	{te = p+1;{output[0]=0x266e; {p++; goto _out; }}}
18807|      0|	break;
18808|    195|	case 1327:
  ------------------
  |  Branch (18808:2): [True: 195, False: 536k]
  ------------------
18809|    195|#line 1399 "src/char_ref.rl"
18810|    195|	{te = p+1;{output[0]=0x266e; {p++; goto _out; }}}
18811|      0|	break;
18812|    203|	case 1328:
  ------------------
  |  Branch (18812:2): [True: 203, False: 536k]
  ------------------
18813|    203|#line 1400 "src/char_ref.rl"
18814|    203|	{te = p+1;{output[0]=0x2115; {p++; goto _out; }}}
18815|      0|	break;
18816|    208|	case 2178:
  ------------------
  |  Branch (18816:2): [True: 208, False: 536k]
  ------------------
18817|    208|#line 1401 "src/char_ref.rl"
18818|    208|	{te = p+1;{output[0]=0xa0; {p++; goto _out; }}}
18819|      0|	break;
18820|    250|	case 1329:
  ------------------
  |  Branch (18820:2): [True: 250, False: 536k]
  ------------------
18821|    250|#line 1402 "src/char_ref.rl"
18822|    250|	{te = p+1;{output[0]=0x224e; output[1]=0x338; {p++; goto _out; }}}
18823|      0|	break;
18824|    218|	case 1330:
  ------------------
  |  Branch (18824:2): [True: 218, False: 536k]
  ------------------
18825|    218|#line 1403 "src/char_ref.rl"
18826|    218|	{te = p+1;{output[0]=0x224f; output[1]=0x338; {p++; goto _out; }}}
18827|      0|	break;
18828|    220|	case 1331:
  ------------------
  |  Branch (18828:2): [True: 220, False: 536k]
  ------------------
18829|    220|#line 1404 "src/char_ref.rl"
18830|    220|	{te = p+1;{output[0]=0x2a43; {p++; goto _out; }}}
18831|      0|	break;
18832|    279|	case 1332:
  ------------------
  |  Branch (18832:2): [True: 279, False: 536k]
  ------------------
18833|    279|#line 1405 "src/char_ref.rl"
18834|    279|	{te = p+1;{output[0]=0x148; {p++; goto _out; }}}
18835|      0|	break;
18836|    324|	case 1333:
  ------------------
  |  Branch (18836:2): [True: 324, False: 536k]
  ------------------
18837|    324|#line 1406 "src/char_ref.rl"
18838|    324|	{te = p+1;{output[0]=0x146; {p++; goto _out; }}}
18839|      0|	break;
18840|    371|	case 1334:
  ------------------
  |  Branch (18840:2): [True: 371, False: 535k]
  ------------------
18841|    371|#line 1407 "src/char_ref.rl"
18842|    371|	{te = p+1;{output[0]=0x2247; {p++; goto _out; }}}
18843|      0|	break;
18844|    202|	case 1335:
  ------------------
  |  Branch (18844:2): [True: 202, False: 536k]
  ------------------
18845|    202|#line 1408 "src/char_ref.rl"
18846|    202|	{te = p+1;{output[0]=0x2a6d; output[1]=0x338; {p++; goto _out; }}}
18847|      0|	break;
18848|    210|	case 1336:
  ------------------
  |  Branch (18848:2): [True: 210, False: 536k]
  ------------------
18849|    210|#line 1409 "src/char_ref.rl"
18850|    210|	{te = p+1;{output[0]=0x2a42; {p++; goto _out; }}}
18851|      0|	break;
18852|    341|	case 1337:
  ------------------
  |  Branch (18852:2): [True: 341, False: 535k]
  ------------------
18853|    341|#line 1410 "src/char_ref.rl"
18854|    341|	{te = p+1;{output[0]=0x43d; {p++; goto _out; }}}
18855|      0|	break;
18856|    333|	case 1338:
  ------------------
  |  Branch (18856:2): [True: 333, False: 535k]
  ------------------
18857|    333|#line 1411 "src/char_ref.rl"
18858|    333|	{te = p+1;{output[0]=0x2013; {p++; goto _out; }}}
18859|      0|	break;
18860|    476|	case 1339:
  ------------------
  |  Branch (18860:2): [True: 476, False: 535k]
  ------------------
18861|    476|#line 1412 "src/char_ref.rl"
18862|    476|	{te = p+1;{output[0]=0x2260; {p++; goto _out; }}}
18863|      0|	break;
18864|    208|	case 1340:
  ------------------
  |  Branch (18864:2): [True: 208, False: 536k]
  ------------------
18865|    208|#line 1413 "src/char_ref.rl"
18866|    208|	{te = p+1;{output[0]=0x21d7; {p++; goto _out; }}}
18867|      0|	break;
18868|    214|	case 1341:
  ------------------
  |  Branch (18868:2): [True: 214, False: 536k]
  ------------------
18869|    214|#line 1414 "src/char_ref.rl"
18870|    214|	{te = p+1;{output[0]=0x2924; {p++; goto _out; }}}
18871|      0|	break;
18872|    217|	case 1342:
  ------------------
  |  Branch (18872:2): [True: 217, False: 536k]
  ------------------
18873|    217|#line 1415 "src/char_ref.rl"
18874|    217|	{te = p+1;{output[0]=0x2197; {p++; goto _out; }}}
18875|      0|	break;
18876|    232|	case 1343:
  ------------------
  |  Branch (18876:2): [True: 232, False: 536k]
  ------------------
18877|    232|#line 1416 "src/char_ref.rl"
18878|    232|	{te = p+1;{output[0]=0x2197; {p++; goto _out; }}}
18879|      0|	break;
18880|    271|	case 1344:
  ------------------
  |  Branch (18880:2): [True: 271, False: 536k]
  ------------------
18881|    271|#line 1417 "src/char_ref.rl"
18882|    271|	{te = p+1;{output[0]=0x2250; output[1]=0x338; {p++; goto _out; }}}
18883|      0|	break;
18884|    211|	case 1345:
  ------------------
  |  Branch (18884:2): [True: 211, False: 536k]
  ------------------
18885|    211|#line 1418 "src/char_ref.rl"
18886|    211|	{te = p+1;{output[0]=0x2262; {p++; goto _out; }}}
18887|      0|	break;
18888|    198|	case 1346:
  ------------------
  |  Branch (18888:2): [True: 198, False: 536k]
  ------------------
18889|    198|#line 1419 "src/char_ref.rl"
18890|    198|	{te = p+1;{output[0]=0x2928; {p++; goto _out; }}}
18891|      0|	break;
18892|    197|	case 1347:
  ------------------
  |  Branch (18892:2): [True: 197, False: 536k]
  ------------------
18893|    197|#line 1420 "src/char_ref.rl"
18894|    197|	{te = p+1;{output[0]=0x2242; output[1]=0x338; {p++; goto _out; }}}
18895|      0|	break;
18896|    228|	case 1348:
  ------------------
  |  Branch (18896:2): [True: 228, False: 536k]
  ------------------
18897|    228|#line 1421 "src/char_ref.rl"
18898|    228|	{te = p+1;{output[0]=0x2204; {p++; goto _out; }}}
18899|      0|	break;
18900|    203|	case 1349:
  ------------------
  |  Branch (18900:2): [True: 203, False: 536k]
  ------------------
18901|    203|#line 1422 "src/char_ref.rl"
18902|    203|	{te = p+1;{output[0]=0x2204; {p++; goto _out; }}}
18903|      0|	break;
18904|    490|	case 1350:
  ------------------
  |  Branch (18904:2): [True: 490, False: 535k]
  ------------------
18905|    490|#line 1423 "src/char_ref.rl"
18906|    490|	{te = p+1;{output[0]=0x1d52b; {p++; goto _out; }}}
18907|      0|	break;
18908|    200|	case 1351:
  ------------------
  |  Branch (18908:2): [True: 200, False: 536k]
  ------------------
18909|    200|#line 1424 "src/char_ref.rl"
18910|    200|	{te = p+1;{output[0]=0x2267; output[1]=0x338; {p++; goto _out; }}}
18911|      0|	break;
18912|    401|	case 1352:
  ------------------
  |  Branch (18912:2): [True: 401, False: 535k]
  ------------------
18913|    401|#line 1425 "src/char_ref.rl"
18914|    401|	{te = p+1;{output[0]=0x2271; {p++; goto _out; }}}
18915|      0|	break;
18916|    221|	case 1353:
  ------------------
  |  Branch (18916:2): [True: 221, False: 536k]
  ------------------
18917|    221|#line 1426 "src/char_ref.rl"
18918|    221|	{te = p+1;{output[0]=0x2271; {p++; goto _out; }}}
18919|      0|	break;
18920|    284|	case 1354:
  ------------------
  |  Branch (18920:2): [True: 284, False: 536k]
  ------------------
18921|    284|#line 1427 "src/char_ref.rl"
18922|    284|	{te = p+1;{output[0]=0x2267; output[1]=0x338; {p++; goto _out; }}}
18923|      0|	break;
18924|      0|	case 1355:
  ------------------
  |  Branch (18924:2): [True: 0, False: 536k]
  ------------------
18925|      0|#line 1428 "src/char_ref.rl"
18926|      0|	{te = p+1;{output[0]=0x2a7e; output[1]=0x338; {p++; goto _out; }}}
18927|      0|	break;
18928|    200|	case 1356:
  ------------------
  |  Branch (18928:2): [True: 200, False: 536k]
  ------------------
18929|    200|#line 1429 "src/char_ref.rl"
18930|    200|	{te = p+1;{output[0]=0x2a7e; output[1]=0x338; {p++; goto _out; }}}
18931|      0|	break;
18932|    216|	case 1357:
  ------------------
  |  Branch (18932:2): [True: 216, False: 536k]
  ------------------
18933|    216|#line 1430 "src/char_ref.rl"
18934|    216|	{te = p+1;{output[0]=0x2275; {p++; goto _out; }}}
18935|      0|	break;
18936|    265|	case 1358:
  ------------------
  |  Branch (18936:2): [True: 265, False: 536k]
  ------------------
18937|    265|#line 1431 "src/char_ref.rl"
18938|    265|	{te = p+1;{output[0]=0x226f; {p++; goto _out; }}}
18939|      0|	break;
18940|    213|	case 1359:
  ------------------
  |  Branch (18940:2): [True: 213, False: 536k]
  ------------------
18941|    213|#line 1432 "src/char_ref.rl"
18942|    213|	{te = p+1;{output[0]=0x226f; {p++; goto _out; }}}
18943|      0|	break;
18944|    275|	case 1360:
  ------------------
  |  Branch (18944:2): [True: 275, False: 536k]
  ------------------
18945|    275|#line 1433 "src/char_ref.rl"
18946|    275|	{te = p+1;{output[0]=0x21ce; {p++; goto _out; }}}
18947|      0|	break;
18948|    233|	case 1361:
  ------------------
  |  Branch (18948:2): [True: 233, False: 536k]
  ------------------
18949|    233|#line 1434 "src/char_ref.rl"
18950|    233|	{te = p+1;{output[0]=0x21ae; {p++; goto _out; }}}
18951|      0|	break;
18952|    293|	case 1362:
  ------------------
  |  Branch (18952:2): [True: 293, False: 536k]
  ------------------
18953|    293|#line 1435 "src/char_ref.rl"
18954|    293|	{te = p+1;{output[0]=0x2af2; {p++; goto _out; }}}
18955|      0|	break;
18956|    250|	case 1363:
  ------------------
  |  Branch (18956:2): [True: 250, False: 536k]
  ------------------
18957|    250|#line 1436 "src/char_ref.rl"
18958|    250|	{te = p+1;{output[0]=0x220b; {p++; goto _out; }}}
18959|      0|	break;
18960|    492|	case 1364:
  ------------------
  |  Branch (18960:2): [True: 492, False: 535k]
  ------------------
18961|    492|#line 1437 "src/char_ref.rl"
18962|    492|	{te = p+1;{output[0]=0x22fc; {p++; goto _out; }}}
18963|      0|	break;
18964|    204|	case 1365:
  ------------------
  |  Branch (18964:2): [True: 204, False: 536k]
  ------------------
18965|    204|#line 1438 "src/char_ref.rl"
18966|    204|	{te = p+1;{output[0]=0x22fa; {p++; goto _out; }}}
18967|      0|	break;
18968|    216|	case 1366:
  ------------------
  |  Branch (18968:2): [True: 216, False: 536k]
  ------------------
18969|    216|#line 1439 "src/char_ref.rl"
18970|    216|	{te = p+1;{output[0]=0x220b; {p++; goto _out; }}}
18971|      0|	break;
18972|    219|	case 1367:
  ------------------
  |  Branch (18972:2): [True: 219, False: 536k]
  ------------------
18973|    219|#line 1440 "src/char_ref.rl"
18974|    219|	{te = p+1;{output[0]=0x45a; {p++; goto _out; }}}
18975|      0|	break;
18976|    290|	case 1368:
  ------------------
  |  Branch (18976:2): [True: 290, False: 536k]
  ------------------
18977|    290|#line 1441 "src/char_ref.rl"
18978|    290|	{te = p+1;{output[0]=0x21cd; {p++; goto _out; }}}
18979|      0|	break;
18980|    389|	case 1369:
  ------------------
  |  Branch (18980:2): [True: 389, False: 535k]
  ------------------
18981|    389|#line 1442 "src/char_ref.rl"
18982|    389|	{te = p+1;{output[0]=0x2266; output[1]=0x338; {p++; goto _out; }}}
18983|      0|	break;
18984|    225|	case 1370:
  ------------------
  |  Branch (18984:2): [True: 225, False: 536k]
  ------------------
18985|    225|#line 1443 "src/char_ref.rl"
18986|    225|	{te = p+1;{output[0]=0x219a; {p++; goto _out; }}}
18987|      0|	break;
18988|    429|	case 1371:
  ------------------
  |  Branch (18988:2): [True: 429, False: 535k]
  ------------------
18989|    429|#line 1444 "src/char_ref.rl"
18990|    429|	{te = p+1;{output[0]=0x2025; {p++; goto _out; }}}
18991|      0|	break;
18992|    275|	case 1372:
  ------------------
  |  Branch (18992:2): [True: 275, False: 536k]
  ------------------
18993|    275|#line 1445 "src/char_ref.rl"
18994|    275|	{te = p+1;{output[0]=0x2270; {p++; goto _out; }}}
18995|      0|	break;
18996|      0|	case 1373:
  ------------------
  |  Branch (18996:2): [True: 0, False: 536k]
  ------------------
18997|      0|#line 1446 "src/char_ref.rl"
18998|      0|	{te = p+1;{output[0]=0x219a; {p++; goto _out; }}}
18999|      0|	break;
19000|      0|	case 1374:
  ------------------
  |  Branch (19000:2): [True: 0, False: 536k]
  ------------------
19001|      0|#line 1447 "src/char_ref.rl"
19002|      0|	{te = p+1;{output[0]=0x21ae; {p++; goto _out; }}}
19003|      0|	break;
19004|    303|	case 1375:
  ------------------
  |  Branch (19004:2): [True: 303, False: 536k]
  ------------------
19005|    303|#line 1448 "src/char_ref.rl"
19006|    303|	{te = p+1;{output[0]=0x2270; {p++; goto _out; }}}
19007|      0|	break;
19008|    200|	case 1376:
  ------------------
  |  Branch (19008:2): [True: 200, False: 536k]
  ------------------
19009|    200|#line 1449 "src/char_ref.rl"
19010|    200|	{te = p+1;{output[0]=0x2266; output[1]=0x338; {p++; goto _out; }}}
19011|      0|	break;
19012|      0|	case 1377:
  ------------------
  |  Branch (19012:2): [True: 0, False: 536k]
  ------------------
19013|      0|#line 1450 "src/char_ref.rl"
19014|      0|	{te = p+1;{output[0]=0x2a7d; output[1]=0x338; {p++; goto _out; }}}
19015|      0|	break;
19016|    326|	case 1378:
  ------------------
  |  Branch (19016:2): [True: 326, False: 536k]
  ------------------
19017|    326|#line 1451 "src/char_ref.rl"
19018|    326|	{te = p+1;{output[0]=0x2a7d; output[1]=0x338; {p++; goto _out; }}}
19019|      0|	break;
19020|    204|	case 1379:
  ------------------
  |  Branch (19020:2): [True: 204, False: 536k]
  ------------------
19021|    204|#line 1452 "src/char_ref.rl"
19022|    204|	{te = p+1;{output[0]=0x226e; {p++; goto _out; }}}
19023|      0|	break;
19024|    335|	case 1380:
  ------------------
  |  Branch (19024:2): [True: 335, False: 535k]
  ------------------
19025|    335|#line 1453 "src/char_ref.rl"
19026|    335|	{te = p+1;{output[0]=0x2274; {p++; goto _out; }}}
19027|      0|	break;
19028|    312|	case 1381:
  ------------------
  |  Branch (19028:2): [True: 312, False: 536k]
  ------------------
19029|    312|#line 1454 "src/char_ref.rl"
19030|    312|	{te = p+1;{output[0]=0x226e; {p++; goto _out; }}}
19031|      0|	break;
19032|    214|	case 1382:
  ------------------
  |  Branch (19032:2): [True: 214, False: 536k]
  ------------------
19033|    214|#line 1455 "src/char_ref.rl"
19034|    214|	{te = p+1;{output[0]=0x22ea; {p++; goto _out; }}}
19035|      0|	break;
19036|    255|	case 1383:
  ------------------
  |  Branch (19036:2): [True: 255, False: 536k]
  ------------------
19037|    255|#line 1456 "src/char_ref.rl"
19038|    255|	{te = p+1;{output[0]=0x22ec; {p++; goto _out; }}}
19039|      0|	break;
19040|    233|	case 1384:
  ------------------
  |  Branch (19040:2): [True: 233, False: 536k]
  ------------------
19041|    233|#line 1457 "src/char_ref.rl"
19042|    233|	{te = p+1;{output[0]=0x2224; {p++; goto _out; }}}
19043|      0|	break;
19044|    201|	case 1385:
  ------------------
  |  Branch (19044:2): [True: 201, False: 536k]
  ------------------
19045|    201|#line 1458 "src/char_ref.rl"
19046|    201|	{te = p+1;{output[0]=0x1d55f; {p++; goto _out; }}}
19047|      0|	break;
19048|    232|	case 2180:
  ------------------
  |  Branch (19048:2): [True: 232, False: 536k]
  ------------------
19049|    232|#line 1459 "src/char_ref.rl"
19050|    232|	{te = p+1;{output[0]=0xac; {p++; goto _out; }}}
19051|      0|	break;
19052|    197|	case 1387:
  ------------------
  |  Branch (19052:2): [True: 197, False: 536k]
  ------------------
19053|    197|#line 1460 "src/char_ref.rl"
19054|    197|	{te = p+1;{output[0]=0x2209; {p++; goto _out; }}}
19055|      0|	break;
19056|    327|	case 1388:
  ------------------
  |  Branch (19056:2): [True: 327, False: 536k]
  ------------------
19057|    327|#line 1461 "src/char_ref.rl"
19058|    327|	{te = p+1;{output[0]=0x22f9; output[1]=0x338; {p++; goto _out; }}}
19059|      0|	break;
19060|    204|	case 1389:
  ------------------
  |  Branch (19060:2): [True: 204, False: 536k]
  ------------------
19061|    204|#line 1462 "src/char_ref.rl"
19062|    204|	{te = p+1;{output[0]=0x22f5; output[1]=0x338; {p++; goto _out; }}}
19063|      0|	break;
19064|    207|	case 1390:
  ------------------
  |  Branch (19064:2): [True: 207, False: 536k]
  ------------------
19065|    207|#line 1463 "src/char_ref.rl"
19066|    207|	{te = p+1;{output[0]=0x2209; {p++; goto _out; }}}
19067|      0|	break;
19068|    197|	case 1391:
  ------------------
  |  Branch (19068:2): [True: 197, False: 536k]
  ------------------
19069|    197|#line 1464 "src/char_ref.rl"
19070|    197|	{te = p+1;{output[0]=0x22f7; {p++; goto _out; }}}
19071|      0|	break;
19072|    233|	case 1392:
  ------------------
  |  Branch (19072:2): [True: 233, False: 536k]
  ------------------
19073|    233|#line 1465 "src/char_ref.rl"
19074|    233|	{te = p+1;{output[0]=0x22f6; {p++; goto _out; }}}
19075|      0|	break;
19076|    201|	case 1393:
  ------------------
  |  Branch (19076:2): [True: 201, False: 536k]
  ------------------
19077|    201|#line 1466 "src/char_ref.rl"
19078|    201|	{te = p+1;{output[0]=0x220c; {p++; goto _out; }}}
19079|      0|	break;
19080|    202|	case 1394:
  ------------------
  |  Branch (19080:2): [True: 202, False: 536k]
  ------------------
19081|    202|#line 1467 "src/char_ref.rl"
19082|    202|	{te = p+1;{output[0]=0x220c; {p++; goto _out; }}}
19083|      0|	break;
19084|    308|	case 1395:
  ------------------
  |  Branch (19084:2): [True: 308, False: 536k]
  ------------------
19085|    308|#line 1468 "src/char_ref.rl"
19086|    308|	{te = p+1;{output[0]=0x22fe; {p++; goto _out; }}}
19087|      0|	break;
19088|    223|	case 1396:
  ------------------
  |  Branch (19088:2): [True: 223, False: 536k]
  ------------------
19089|    223|#line 1469 "src/char_ref.rl"
19090|    223|	{te = p+1;{output[0]=0x22fd; {p++; goto _out; }}}
19091|      0|	break;
19092|    296|	case 1397:
  ------------------
  |  Branch (19092:2): [True: 296, False: 536k]
  ------------------
19093|    296|#line 1470 "src/char_ref.rl"
19094|    296|	{te = p+1;{output[0]=0x2226; {p++; goto _out; }}}
19095|      0|	break;
19096|    200|	case 1398:
  ------------------
  |  Branch (19096:2): [True: 200, False: 536k]
  ------------------
19097|    200|#line 1471 "src/char_ref.rl"
19098|    200|	{te = p+1;{output[0]=0x2226; {p++; goto _out; }}}
19099|      0|	break;
19100|    339|	case 1399:
  ------------------
  |  Branch (19100:2): [True: 339, False: 535k]
  ------------------
19101|    339|#line 1472 "src/char_ref.rl"
19102|    339|	{te = p+1;{output[0]=0x2afd; output[1]=0x20e5; {p++; goto _out; }}}
19103|      0|	break;
19104|    409|	case 1400:
  ------------------
  |  Branch (19104:2): [True: 409, False: 535k]
  ------------------
19105|    409|#line 1473 "src/char_ref.rl"
19106|    409|	{te = p+1;{output[0]=0x2202; output[1]=0x338; {p++; goto _out; }}}
19107|      0|	break;
19108|    207|	case 1401:
  ------------------
  |  Branch (19108:2): [True: 207, False: 536k]
  ------------------
19109|    207|#line 1474 "src/char_ref.rl"
19110|    207|	{te = p+1;{output[0]=0x2a14; {p++; goto _out; }}}
19111|      0|	break;
19112|    302|	case 1402:
  ------------------
  |  Branch (19112:2): [True: 302, False: 536k]
  ------------------
19113|    302|#line 1475 "src/char_ref.rl"
19114|    302|	{te = p+1;{output[0]=0x2280; {p++; goto _out; }}}
19115|      0|	break;
19116|    201|	case 1403:
  ------------------
  |  Branch (19116:2): [True: 201, False: 536k]
  ------------------
19117|    201|#line 1476 "src/char_ref.rl"
19118|    201|	{te = p+1;{output[0]=0x22e0; {p++; goto _out; }}}
19119|      0|	break;
19120|    315|	case 1404:
  ------------------
  |  Branch (19120:2): [True: 315, False: 536k]
  ------------------
19121|    315|#line 1477 "src/char_ref.rl"
19122|    315|	{te = p+1;{output[0]=0x2aaf; output[1]=0x338; {p++; goto _out; }}}
19123|      0|	break;
19124|    291|	case 1405:
  ------------------
  |  Branch (19124:2): [True: 291, False: 536k]
  ------------------
19125|    291|#line 1478 "src/char_ref.rl"
19126|    291|	{te = p+1;{output[0]=0x2280; {p++; goto _out; }}}
19127|      0|	break;
19128|    198|	case 1406:
  ------------------
  |  Branch (19128:2): [True: 198, False: 536k]
  ------------------
19129|    198|#line 1479 "src/char_ref.rl"
19130|    198|	{te = p+1;{output[0]=0x2aaf; output[1]=0x338; {p++; goto _out; }}}
19131|      0|	break;
19132|    228|	case 1407:
  ------------------
  |  Branch (19132:2): [True: 228, False: 536k]
  ------------------
19133|    228|#line 1480 "src/char_ref.rl"
19134|    228|	{te = p+1;{output[0]=0x21cf; {p++; goto _out; }}}
19135|      0|	break;
19136|    202|	case 1408:
  ------------------
  |  Branch (19136:2): [True: 202, False: 536k]
  ------------------
19137|    202|#line 1481 "src/char_ref.rl"
19138|    202|	{te = p+1;{output[0]=0x219b; {p++; goto _out; }}}
19139|      0|	break;
19140|    230|	case 1409:
  ------------------
  |  Branch (19140:2): [True: 230, False: 536k]
  ------------------
19141|    230|#line 1482 "src/char_ref.rl"
19142|    230|	{te = p+1;{output[0]=0x2933; output[1]=0x338; {p++; goto _out; }}}
19143|      0|	break;
19144|    194|	case 1410:
  ------------------
  |  Branch (19144:2): [True: 194, False: 536k]
  ------------------
19145|    194|#line 1483 "src/char_ref.rl"
19146|    194|	{te = p+1;{output[0]=0x219d; output[1]=0x338; {p++; goto _out; }}}
19147|      0|	break;
19148|      0|	case 1411:
  ------------------
  |  Branch (19148:2): [True: 0, False: 536k]
  ------------------
19149|      0|#line 1484 "src/char_ref.rl"
19150|      0|	{te = p+1;{output[0]=0x219b; {p++; goto _out; }}}
19151|      0|	break;
19152|    252|	case 1412:
  ------------------
  |  Branch (19152:2): [True: 252, False: 536k]
  ------------------
19153|    252|#line 1485 "src/char_ref.rl"
19154|    252|	{te = p+1;{output[0]=0x22eb; {p++; goto _out; }}}
19155|      0|	break;
19156|    370|	case 1413:
  ------------------
  |  Branch (19156:2): [True: 370, False: 535k]
  ------------------
19157|    370|#line 1486 "src/char_ref.rl"
19158|    370|	{te = p+1;{output[0]=0x22ed; {p++; goto _out; }}}
19159|      0|	break;
19160|    267|	case 1414:
  ------------------
  |  Branch (19160:2): [True: 267, False: 536k]
  ------------------
19161|    267|#line 1487 "src/char_ref.rl"
19162|    267|	{te = p+1;{output[0]=0x2281; {p++; goto _out; }}}
19163|      0|	break;
19164|    208|	case 1415:
  ------------------
  |  Branch (19164:2): [True: 208, False: 536k]
  ------------------
19165|    208|#line 1488 "src/char_ref.rl"
19166|    208|	{te = p+1;{output[0]=0x22e1; {p++; goto _out; }}}
19167|      0|	break;
19168|    195|	case 1416:
  ------------------
  |  Branch (19168:2): [True: 195, False: 536k]
  ------------------
19169|    195|#line 1489 "src/char_ref.rl"
19170|    195|	{te = p+1;{output[0]=0x2ab0; output[1]=0x338; {p++; goto _out; }}}
19171|      0|	break;
19172|    347|	case 1417:
  ------------------
  |  Branch (19172:2): [True: 347, False: 535k]
  ------------------
19173|    347|#line 1490 "src/char_ref.rl"
19174|    347|	{te = p+1;{output[0]=0x1d4c3; {p++; goto _out; }}}
19175|      0|	break;
19176|      0|	case 1418:
  ------------------
  |  Branch (19176:2): [True: 0, False: 536k]
  ------------------
19177|      0|#line 1491 "src/char_ref.rl"
19178|      0|	{te = p+1;{output[0]=0x2224; {p++; goto _out; }}}
19179|      0|	break;
19180|      0|	case 1419:
  ------------------
  |  Branch (19180:2): [True: 0, False: 536k]
  ------------------
19181|      0|#line 1492 "src/char_ref.rl"
19182|      0|	{te = p+1;{output[0]=0x2226; {p++; goto _out; }}}
19183|      0|	break;
19184|    277|	case 1420:
  ------------------
  |  Branch (19184:2): [True: 277, False: 536k]
  ------------------
19185|    277|#line 1493 "src/char_ref.rl"
19186|    277|	{te = p+1;{output[0]=0x2241; {p++; goto _out; }}}
19187|      0|	break;
19188|    217|	case 1421:
  ------------------
  |  Branch (19188:2): [True: 217, False: 536k]
  ------------------
19189|    217|#line 1494 "src/char_ref.rl"
19190|    217|	{te = p+1;{output[0]=0x2244; {p++; goto _out; }}}
19191|      0|	break;
19192|    355|	case 1422:
  ------------------
  |  Branch (19192:2): [True: 355, False: 535k]
  ------------------
19193|    355|#line 1495 "src/char_ref.rl"
19194|    355|	{te = p+1;{output[0]=0x2244; {p++; goto _out; }}}
19195|      0|	break;
19196|    202|	case 1423:
  ------------------
  |  Branch (19196:2): [True: 202, False: 536k]
  ------------------
19197|    202|#line 1496 "src/char_ref.rl"
19198|    202|	{te = p+1;{output[0]=0x2224; {p++; goto _out; }}}
19199|      0|	break;
19200|    241|	case 1424:
  ------------------
  |  Branch (19200:2): [True: 241, False: 536k]
  ------------------
19201|    241|#line 1497 "src/char_ref.rl"
19202|    241|	{te = p+1;{output[0]=0x2226; {p++; goto _out; }}}
19203|      0|	break;
19204|    201|	case 1425:
  ------------------
  |  Branch (19204:2): [True: 201, False: 536k]
  ------------------
19205|    201|#line 1498 "src/char_ref.rl"
19206|    201|	{te = p+1;{output[0]=0x22e2; {p++; goto _out; }}}
19207|      0|	break;
19208|    568|	case 1426:
  ------------------
  |  Branch (19208:2): [True: 568, False: 535k]
  ------------------
19209|    568|#line 1499 "src/char_ref.rl"
19210|    568|	{te = p+1;{output[0]=0x22e3; {p++; goto _out; }}}
19211|      0|	break;
19212|    352|	case 1427:
  ------------------
  |  Branch (19212:2): [True: 352, False: 535k]
  ------------------
19213|    352|#line 1500 "src/char_ref.rl"
19214|    352|	{te = p+1;{output[0]=0x2284; {p++; goto _out; }}}
19215|      0|	break;
19216|    221|	case 1428:
  ------------------
  |  Branch (19216:2): [True: 221, False: 536k]
  ------------------
19217|    221|#line 1501 "src/char_ref.rl"
19218|    221|	{te = p+1;{output[0]=0x2ac5; output[1]=0x338; {p++; goto _out; }}}
19219|      0|	break;
19220|    231|	case 1429:
  ------------------
  |  Branch (19220:2): [True: 231, False: 536k]
  ------------------
19221|    231|#line 1502 "src/char_ref.rl"
19222|    231|	{te = p+1;{output[0]=0x2288; {p++; goto _out; }}}
19223|      0|	break;
19224|    312|	case 1430:
  ------------------
  |  Branch (19224:2): [True: 312, False: 536k]
  ------------------
19225|    312|#line 1503 "src/char_ref.rl"
19226|    312|	{te = p+1;{output[0]=0x2282; output[1]=0x20d2; {p++; goto _out; }}}
19227|      0|	break;
19228|    226|	case 1431:
  ------------------
  |  Branch (19228:2): [True: 226, False: 536k]
  ------------------
19229|    226|#line 1504 "src/char_ref.rl"
19230|    226|	{te = p+1;{output[0]=0x2288; {p++; goto _out; }}}
19231|      0|	break;
19232|    206|	case 1432:
  ------------------
  |  Branch (19232:2): [True: 206, False: 536k]
  ------------------
19233|    206|#line 1505 "src/char_ref.rl"
19234|    206|	{te = p+1;{output[0]=0x2ac5; output[1]=0x338; {p++; goto _out; }}}
19235|      0|	break;
19236|    203|	case 1433:
  ------------------
  |  Branch (19236:2): [True: 203, False: 536k]
  ------------------
19237|    203|#line 1506 "src/char_ref.rl"
19238|    203|	{te = p+1;{output[0]=0x2281; {p++; goto _out; }}}
19239|      0|	break;
19240|    211|	case 1434:
  ------------------
  |  Branch (19240:2): [True: 211, False: 536k]
  ------------------
19241|    211|#line 1507 "src/char_ref.rl"
19242|    211|	{te = p+1;{output[0]=0x2ab0; output[1]=0x338; {p++; goto _out; }}}
19243|      0|	break;
19244|    198|	case 1435:
  ------------------
  |  Branch (19244:2): [True: 198, False: 536k]
  ------------------
19245|    198|#line 1508 "src/char_ref.rl"
19246|    198|	{te = p+1;{output[0]=0x2285; {p++; goto _out; }}}
19247|      0|	break;
19248|    356|	case 1436:
  ------------------
  |  Branch (19248:2): [True: 356, False: 535k]
  ------------------
19249|    356|#line 1509 "src/char_ref.rl"
19250|    356|	{te = p+1;{output[0]=0x2ac6; output[1]=0x338; {p++; goto _out; }}}
19251|      0|	break;
19252|    363|	case 1437:
  ------------------
  |  Branch (19252:2): [True: 363, False: 535k]
  ------------------
19253|    363|#line 1510 "src/char_ref.rl"
19254|    363|	{te = p+1;{output[0]=0x2289; {p++; goto _out; }}}
19255|      0|	break;
19256|    274|	case 1438:
  ------------------
  |  Branch (19256:2): [True: 274, False: 536k]
  ------------------
19257|    274|#line 1511 "src/char_ref.rl"
19258|    274|	{te = p+1;{output[0]=0x2283; output[1]=0x20d2; {p++; goto _out; }}}
19259|      0|	break;
19260|    250|	case 1439:
  ------------------
  |  Branch (19260:2): [True: 250, False: 536k]
  ------------------
19261|    250|#line 1512 "src/char_ref.rl"
19262|    250|	{te = p+1;{output[0]=0x2289; {p++; goto _out; }}}
19263|      0|	break;
19264|    251|	case 1440:
  ------------------
  |  Branch (19264:2): [True: 251, False: 536k]
  ------------------
19265|    251|#line 1513 "src/char_ref.rl"
19266|    251|	{te = p+1;{output[0]=0x2ac6; output[1]=0x338; {p++; goto _out; }}}
19267|      0|	break;
19268|    340|	case 1441:
  ------------------
  |  Branch (19268:2): [True: 340, False: 535k]
  ------------------
19269|    340|#line 1514 "src/char_ref.rl"
19270|    340|	{te = p+1;{output[0]=0x2279; {p++; goto _out; }}}
19271|      0|	break;
19272|    270|	case 2182:
  ------------------
  |  Branch (19272:2): [True: 270, False: 536k]
  ------------------
19273|    270|#line 1515 "src/char_ref.rl"
19274|    270|	{te = p+1;{output[0]=0xf1; {p++; goto _out; }}}
19275|      0|	break;
19276|    389|	case 1442:
  ------------------
  |  Branch (19276:2): [True: 389, False: 535k]
  ------------------
19277|    389|#line 1516 "src/char_ref.rl"
19278|    389|	{te = p+1;{output[0]=0x2278; {p++; goto _out; }}}
19279|      0|	break;
19280|      0|	case 1443:
  ------------------
  |  Branch (19280:2): [True: 0, False: 536k]
  ------------------
19281|      0|#line 1517 "src/char_ref.rl"
19282|      0|	{te = p+1;{output[0]=0x22ea; {p++; goto _out; }}}
19283|      0|	break;
19284|      0|	case 1444:
  ------------------
  |  Branch (19284:2): [True: 0, False: 536k]
  ------------------
19285|      0|#line 1518 "src/char_ref.rl"
19286|      0|	{te = p+1;{output[0]=0x22ec; {p++; goto _out; }}}
19287|      0|	break;
19288|      0|	case 1445:
  ------------------
  |  Branch (19288:2): [True: 0, False: 536k]
  ------------------
19289|      0|#line 1519 "src/char_ref.rl"
19290|      0|	{te = p+1;{output[0]=0x22eb; {p++; goto _out; }}}
19291|      0|	break;
19292|      0|	case 1446:
  ------------------
  |  Branch (19292:2): [True: 0, False: 536k]
  ------------------
19293|      0|#line 1520 "src/char_ref.rl"
19294|      0|	{te = p+1;{output[0]=0x22ed; {p++; goto _out; }}}
19295|      0|	break;
19296|    445|	case 1447:
  ------------------
  |  Branch (19296:2): [True: 445, False: 535k]
  ------------------
19297|    445|#line 1521 "src/char_ref.rl"
19298|    445|	{te = p+1;{output[0]=0x3bd; {p++; goto _out; }}}
19299|      0|	break;
19300|    253|	case 1448:
  ------------------
  |  Branch (19300:2): [True: 253, False: 536k]
  ------------------
19301|    253|#line 1522 "src/char_ref.rl"
19302|    253|	{te = p+1;{output[0]=0x23; {p++; goto _out; }}}
19303|      0|	break;
19304|    204|	case 1449:
  ------------------
  |  Branch (19304:2): [True: 204, False: 536k]
  ------------------
19305|    204|#line 1523 "src/char_ref.rl"
19306|    204|	{te = p+1;{output[0]=0x2116; {p++; goto _out; }}}
19307|      0|	break;
19308|    223|	case 1450:
  ------------------
  |  Branch (19308:2): [True: 223, False: 536k]
  ------------------
19309|    223|#line 1524 "src/char_ref.rl"
19310|    223|	{te = p+1;{output[0]=0x2007; {p++; goto _out; }}}
19311|      0|	break;
19312|    346|	case 1451:
  ------------------
  |  Branch (19312:2): [True: 346, False: 535k]
  ------------------
19313|    346|#line 1525 "src/char_ref.rl"
19314|    346|	{te = p+1;{output[0]=0x22ad; {p++; goto _out; }}}
19315|      0|	break;
19316|    202|	case 1452:
  ------------------
  |  Branch (19316:2): [True: 202, False: 536k]
  ------------------
19317|    202|#line 1526 "src/char_ref.rl"
19318|    202|	{te = p+1;{output[0]=0x2904; {p++; goto _out; }}}
19319|      0|	break;
19320|    213|	case 1453:
  ------------------
  |  Branch (19320:2): [True: 213, False: 536k]
  ------------------
19321|    213|#line 1527 "src/char_ref.rl"
19322|    213|	{te = p+1;{output[0]=0x224d; output[1]=0x20d2; {p++; goto _out; }}}
19323|      0|	break;
19324|    245|	case 1454:
  ------------------
  |  Branch (19324:2): [True: 245, False: 536k]
  ------------------
19325|    245|#line 1528 "src/char_ref.rl"
19326|    245|	{te = p+1;{output[0]=0x22ac; {p++; goto _out; }}}
19327|      0|	break;
19328|    564|	case 1455:
  ------------------
  |  Branch (19328:2): [True: 564, False: 535k]
  ------------------
19329|    564|#line 1529 "src/char_ref.rl"
19330|    564|	{te = p+1;{output[0]=0x2265; output[1]=0x20d2; {p++; goto _out; }}}
19331|      0|	break;
19332|    279|	case 1456:
  ------------------
  |  Branch (19332:2): [True: 279, False: 536k]
  ------------------
19333|    279|#line 1530 "src/char_ref.rl"
19334|    279|	{te = p+1;{output[0]=0x3e; output[1]=0x20d2; {p++; goto _out; }}}
19335|      0|	break;
19336|    203|	case 1457:
  ------------------
  |  Branch (19336:2): [True: 203, False: 536k]
  ------------------
19337|    203|#line 1531 "src/char_ref.rl"
19338|    203|	{te = p+1;{output[0]=0x29de; {p++; goto _out; }}}
19339|      0|	break;
19340|    231|	case 1458:
  ------------------
  |  Branch (19340:2): [True: 231, False: 536k]
  ------------------
19341|    231|#line 1532 "src/char_ref.rl"
19342|    231|	{te = p+1;{output[0]=0x2902; {p++; goto _out; }}}
19343|      0|	break;
19344|    610|	case 1459:
  ------------------
  |  Branch (19344:2): [True: 610, False: 535k]
  ------------------
19345|    610|#line 1533 "src/char_ref.rl"
19346|    610|	{te = p+1;{output[0]=0x2264; output[1]=0x20d2; {p++; goto _out; }}}
19347|      0|	break;
19348|    214|	case 1460:
  ------------------
  |  Branch (19348:2): [True: 214, False: 536k]
  ------------------
19349|    214|#line 1534 "src/char_ref.rl"
19350|    214|	{te = p+1;{output[0]=0x3c; output[1]=0x20d2; {p++; goto _out; }}}
19351|      0|	break;
19352|    201|	case 1461:
  ------------------
  |  Branch (19352:2): [True: 201, False: 536k]
  ------------------
19353|    201|#line 1535 "src/char_ref.rl"
19354|    201|	{te = p+1;{output[0]=0x22b4; output[1]=0x20d2; {p++; goto _out; }}}
19355|      0|	break;
19356|    198|	case 1462:
  ------------------
  |  Branch (19356:2): [True: 198, False: 536k]
  ------------------
19357|    198|#line 1536 "src/char_ref.rl"
19358|    198|	{te = p+1;{output[0]=0x2903; {p++; goto _out; }}}
19359|      0|	break;
19360|    203|	case 1463:
  ------------------
  |  Branch (19360:2): [True: 203, False: 536k]
  ------------------
19361|    203|#line 1537 "src/char_ref.rl"
19362|    203|	{te = p+1;{output[0]=0x22b5; output[1]=0x20d2; {p++; goto _out; }}}
19363|      0|	break;
19364|    231|	case 1464:
  ------------------
  |  Branch (19364:2): [True: 231, False: 536k]
  ------------------
19365|    231|#line 1538 "src/char_ref.rl"
19366|    231|	{te = p+1;{output[0]=0x223c; output[1]=0x20d2; {p++; goto _out; }}}
19367|      0|	break;
19368|    196|	case 1465:
  ------------------
  |  Branch (19368:2): [True: 196, False: 536k]
  ------------------
19369|    196|#line 1539 "src/char_ref.rl"
19370|    196|	{te = p+1;{output[0]=0x21d6; {p++; goto _out; }}}
19371|      0|	break;
19372|    240|	case 1466:
  ------------------
  |  Branch (19372:2): [True: 240, False: 536k]
  ------------------
19373|    240|#line 1540 "src/char_ref.rl"
19374|    240|	{te = p+1;{output[0]=0x2923; {p++; goto _out; }}}
19375|      0|	break;
19376|    214|	case 1467:
  ------------------
  |  Branch (19376:2): [True: 214, False: 536k]
  ------------------
19377|    214|#line 1541 "src/char_ref.rl"
19378|    214|	{te = p+1;{output[0]=0x2196; {p++; goto _out; }}}
19379|      0|	break;
19380|    217|	case 1468:
  ------------------
  |  Branch (19380:2): [True: 217, False: 536k]
  ------------------
19381|    217|#line 1542 "src/char_ref.rl"
19382|    217|	{te = p+1;{output[0]=0x2196; {p++; goto _out; }}}
19383|      0|	break;
19384|    209|	case 1469:
  ------------------
  |  Branch (19384:2): [True: 209, False: 536k]
  ------------------
19385|    209|#line 1543 "src/char_ref.rl"
19386|    209|	{te = p+1;{output[0]=0x2927; {p++; goto _out; }}}
19387|      0|	break;
19388|    468|	case 1470:
  ------------------
  |  Branch (19388:2): [True: 468, False: 535k]
  ------------------
19389|    468|#line 1544 "src/char_ref.rl"
19390|    468|	{te = p+1;{output[0]=0x24c8; {p++; goto _out; }}}
19391|      0|	break;
19392|    269|	case 2184:
  ------------------
  |  Branch (19392:2): [True: 269, False: 536k]
  ------------------
19393|    269|#line 1545 "src/char_ref.rl"
19394|    269|	{te = p+1;{output[0]=0xf3; {p++; goto _out; }}}
19395|      0|	break;
19396|    202|	case 1471:
  ------------------
  |  Branch (19396:2): [True: 202, False: 536k]
  ------------------
19397|    202|#line 1546 "src/char_ref.rl"
19398|    202|	{te = p+1;{output[0]=0x229b; {p++; goto _out; }}}
19399|      0|	break;
19400|    360|	case 1472:
  ------------------
  |  Branch (19400:2): [True: 360, False: 535k]
  ------------------
19401|    360|#line 1547 "src/char_ref.rl"
19402|    360|	{te = p+1;{output[0]=0x229a; {p++; goto _out; }}}
19403|      0|	break;
19404|    210|	case 2186:
  ------------------
  |  Branch (19404:2): [True: 210, False: 536k]
  ------------------
19405|    210|#line 1548 "src/char_ref.rl"
19406|    210|	{te = p+1;{output[0]=0xf4; {p++; goto _out; }}}
19407|      0|	break;
19408|    219|	case 1473:
  ------------------
  |  Branch (19408:2): [True: 219, False: 536k]
  ------------------
19409|    219|#line 1549 "src/char_ref.rl"
19410|    219|	{te = p+1;{output[0]=0x43e; {p++; goto _out; }}}
19411|      0|	break;
19412|    383|	case 1474:
  ------------------
  |  Branch (19412:2): [True: 383, False: 535k]
  ------------------
19413|    383|#line 1550 "src/char_ref.rl"
19414|    383|	{te = p+1;{output[0]=0x229d; {p++; goto _out; }}}
19415|      0|	break;
19416|    205|	case 1475:
  ------------------
  |  Branch (19416:2): [True: 205, False: 536k]
  ------------------
19417|    205|#line 1551 "src/char_ref.rl"
19418|    205|	{te = p+1;{output[0]=0x151; {p++; goto _out; }}}
19419|      0|	break;
19420|    242|	case 1476:
  ------------------
  |  Branch (19420:2): [True: 242, False: 536k]
  ------------------
19421|    242|#line 1552 "src/char_ref.rl"
19422|    242|	{te = p+1;{output[0]=0x2a38; {p++; goto _out; }}}
19423|      0|	break;
19424|    210|	case 1477:
  ------------------
  |  Branch (19424:2): [True: 210, False: 536k]
  ------------------
19425|    210|#line 1553 "src/char_ref.rl"
19426|    210|	{te = p+1;{output[0]=0x2299; {p++; goto _out; }}}
19427|      0|	break;
19428|    202|	case 1478:
  ------------------
  |  Branch (19428:2): [True: 202, False: 536k]
  ------------------
19429|    202|#line 1554 "src/char_ref.rl"
19430|    202|	{te = p+1;{output[0]=0x29bc; {p++; goto _out; }}}
19431|      0|	break;
19432|    216|	case 1479:
  ------------------
  |  Branch (19432:2): [True: 216, False: 536k]
  ------------------
19433|    216|#line 1555 "src/char_ref.rl"
19434|    216|	{te = p+1;{output[0]=0x153; {p++; goto _out; }}}
19435|      0|	break;
19436|    214|	case 1480:
  ------------------
  |  Branch (19436:2): [True: 214, False: 536k]
  ------------------
19437|    214|#line 1556 "src/char_ref.rl"
19438|    214|	{te = p+1;{output[0]=0x29bf; {p++; goto _out; }}}
19439|      0|	break;
19440|    205|	case 1481:
  ------------------
  |  Branch (19440:2): [True: 205, False: 536k]
  ------------------
19441|    205|#line 1557 "src/char_ref.rl"
19442|    205|	{te = p+1;{output[0]=0x1d52c; {p++; goto _out; }}}
19443|      0|	break;
19444|    237|	case 1482:
  ------------------
  |  Branch (19444:2): [True: 237, False: 536k]
  ------------------
19445|    237|#line 1558 "src/char_ref.rl"
19446|    237|	{te = p+1;{output[0]=0x2db; {p++; goto _out; }}}
19447|      0|	break;
19448|    213|	case 2188:
  ------------------
  |  Branch (19448:2): [True: 213, False: 536k]
  ------------------
19449|    213|#line 1559 "src/char_ref.rl"
19450|    213|	{te = p+1;{output[0]=0xf2; {p++; goto _out; }}}
19451|      0|	break;
19452|    223|	case 1483:
  ------------------
  |  Branch (19452:2): [True: 223, False: 536k]
  ------------------
19453|    223|#line 1560 "src/char_ref.rl"
19454|    223|	{te = p+1;{output[0]=0x29c1; {p++; goto _out; }}}
19455|      0|	break;
19456|    243|	case 1484:
  ------------------
  |  Branch (19456:2): [True: 243, False: 536k]
  ------------------
19457|    243|#line 1561 "src/char_ref.rl"
19458|    243|	{te = p+1;{output[0]=0x29b5; {p++; goto _out; }}}
19459|      0|	break;
19460|    231|	case 1485:
  ------------------
  |  Branch (19460:2): [True: 231, False: 536k]
  ------------------
19461|    231|#line 1562 "src/char_ref.rl"
19462|    231|	{te = p+1;{output[0]=0x3a9; {p++; goto _out; }}}
19463|      0|	break;
19464|    233|	case 1486:
  ------------------
  |  Branch (19464:2): [True: 233, False: 536k]
  ------------------
19465|    233|#line 1563 "src/char_ref.rl"
19466|    233|	{te = p+1;{output[0]=0x222e; {p++; goto _out; }}}
19467|      0|	break;
19468|    233|	case 1487:
  ------------------
  |  Branch (19468:2): [True: 233, False: 536k]
  ------------------
19469|    233|#line 1564 "src/char_ref.rl"
19470|    233|	{te = p+1;{output[0]=0x21ba; {p++; goto _out; }}}
19471|      0|	break;
19472|    238|	case 1488:
  ------------------
  |  Branch (19472:2): [True: 238, False: 536k]
  ------------------
19473|    238|#line 1565 "src/char_ref.rl"
19474|    238|	{te = p+1;{output[0]=0x29be; {p++; goto _out; }}}
19475|      0|	break;
19476|    368|	case 1489:
  ------------------
  |  Branch (19476:2): [True: 368, False: 535k]
  ------------------
19477|    368|#line 1566 "src/char_ref.rl"
19478|    368|	{te = p+1;{output[0]=0x29bb; {p++; goto _out; }}}
19479|      0|	break;
19480|    200|	case 1490:
  ------------------
  |  Branch (19480:2): [True: 200, False: 536k]
  ------------------
19481|    200|#line 1567 "src/char_ref.rl"
19482|    200|	{te = p+1;{output[0]=0x203e; {p++; goto _out; }}}
19483|      0|	break;
19484|    238|	case 1491:
  ------------------
  |  Branch (19484:2): [True: 238, False: 536k]
  ------------------
19485|    238|#line 1568 "src/char_ref.rl"
19486|    238|	{te = p+1;{output[0]=0x29c0; {p++; goto _out; }}}
19487|      0|	break;
19488|    196|	case 1492:
  ------------------
  |  Branch (19488:2): [True: 196, False: 536k]
  ------------------
19489|    196|#line 1569 "src/char_ref.rl"
19490|    196|	{te = p+1;{output[0]=0x14d; {p++; goto _out; }}}
19491|      0|	break;
19492|    415|	case 1493:
  ------------------
  |  Branch (19492:2): [True: 415, False: 535k]
  ------------------
19493|    415|#line 1570 "src/char_ref.rl"
19494|    415|	{te = p+1;{output[0]=0x3c9; {p++; goto _out; }}}
19495|      0|	break;
19496|    210|	case 1494:
  ------------------
  |  Branch (19496:2): [True: 210, False: 536k]
  ------------------
19497|    210|#line 1571 "src/char_ref.rl"
19498|    210|	{te = p+1;{output[0]=0x3bf; {p++; goto _out; }}}
19499|      0|	break;
19500|    205|	case 1495:
  ------------------
  |  Branch (19500:2): [True: 205, False: 536k]
  ------------------
19501|    205|#line 1572 "src/char_ref.rl"
19502|    205|	{te = p+1;{output[0]=0x29b6; {p++; goto _out; }}}
19503|      0|	break;
19504|    203|	case 1496:
  ------------------
  |  Branch (19504:2): [True: 203, False: 536k]
  ------------------
19505|    203|#line 1573 "src/char_ref.rl"
19506|    203|	{te = p+1;{output[0]=0x2296; {p++; goto _out; }}}
19507|      0|	break;
19508|    299|	case 1497:
  ------------------
  |  Branch (19508:2): [True: 299, False: 536k]
  ------------------
19509|    299|#line 1574 "src/char_ref.rl"
19510|    299|	{te = p+1;{output[0]=0x1d560; {p++; goto _out; }}}
19511|      0|	break;
19512|    407|	case 1498:
  ------------------
  |  Branch (19512:2): [True: 407, False: 535k]
  ------------------
19513|    407|#line 1575 "src/char_ref.rl"
19514|    407|	{te = p+1;{output[0]=0x29b7; {p++; goto _out; }}}
19515|      0|	break;
19516|    555|	case 1499:
  ------------------
  |  Branch (19516:2): [True: 555, False: 535k]
  ------------------
19517|    555|#line 1576 "src/char_ref.rl"
19518|    555|	{te = p+1;{output[0]=0x29b9; {p++; goto _out; }}}
19519|      0|	break;
19520|    203|	case 1500:
  ------------------
  |  Branch (19520:2): [True: 203, False: 536k]
  ------------------
19521|    203|#line 1577 "src/char_ref.rl"
19522|    203|	{te = p+1;{output[0]=0x2295; {p++; goto _out; }}}
19523|      0|	break;
19524|    480|	case 1501:
  ------------------
  |  Branch (19524:2): [True: 480, False: 535k]
  ------------------
19525|    480|#line 1578 "src/char_ref.rl"
19526|    480|	{te = p+1;{output[0]=0x2228; {p++; goto _out; }}}
19527|      0|	break;
19528|    204|	case 1502:
  ------------------
  |  Branch (19528:2): [True: 204, False: 536k]
  ------------------
19529|    204|#line 1579 "src/char_ref.rl"
19530|    204|	{te = p+1;{output[0]=0x21bb; {p++; goto _out; }}}
19531|      0|	break;
19532|    204|	case 1503:
  ------------------
  |  Branch (19532:2): [True: 204, False: 536k]
  ------------------
19533|    204|#line 1580 "src/char_ref.rl"
19534|    204|	{te = p+1;{output[0]=0x2a5d; {p++; goto _out; }}}
19535|      0|	break;
19536|    234|	case 1504:
  ------------------
  |  Branch (19536:2): [True: 234, False: 536k]
  ------------------
19537|    234|#line 1581 "src/char_ref.rl"
19538|    234|	{te = p+1;{output[0]=0x2134; {p++; goto _out; }}}
19539|      0|	break;
19540|    442|	case 1505:
  ------------------
  |  Branch (19540:2): [True: 442, False: 535k]
  ------------------
19541|    442|#line 1582 "src/char_ref.rl"
19542|    442|	{te = p+1;{output[0]=0x2134; {p++; goto _out; }}}
19543|      0|	break;
19544|    355|	case 2190:
  ------------------
  |  Branch (19544:2): [True: 355, False: 535k]
  ------------------
19545|    355|#line 1583 "src/char_ref.rl"
19546|    355|	{te = p+1;{output[0]=0xaa; {p++; goto _out; }}}
19547|      0|	break;
19548|    429|	case 2192:
  ------------------
  |  Branch (19548:2): [True: 429, False: 535k]
  ------------------
19549|    429|#line 1584 "src/char_ref.rl"
19550|    429|	{te = p+1;{output[0]=0xba; {p++; goto _out; }}}
19551|      0|	break;
19552|    195|	case 1506:
  ------------------
  |  Branch (19552:2): [True: 195, False: 536k]
  ------------------
19553|    195|#line 1585 "src/char_ref.rl"
19554|    195|	{te = p+1;{output[0]=0x22b6; {p++; goto _out; }}}
19555|      0|	break;
19556|    238|	case 1507:
  ------------------
  |  Branch (19556:2): [True: 238, False: 536k]
  ------------------
19557|    238|#line 1586 "src/char_ref.rl"
19558|    238|	{te = p+1;{output[0]=0x2a56; {p++; goto _out; }}}
19559|      0|	break;
19560|      0|	case 1508:
  ------------------
  |  Branch (19560:2): [True: 0, False: 536k]
  ------------------
19561|      0|#line 1587 "src/char_ref.rl"
19562|      0|	{te = p+1;{output[0]=0x2a57; {p++; goto _out; }}}
19563|      0|	break;
19564|    208|	case 1509:
  ------------------
  |  Branch (19564:2): [True: 208, False: 536k]
  ------------------
19565|    208|#line 1588 "src/char_ref.rl"
19566|    208|	{te = p+1;{output[0]=0x2a5b; {p++; goto _out; }}}
19567|      0|	break;
19568|    217|	case 1510:
  ------------------
  |  Branch (19568:2): [True: 217, False: 536k]
  ------------------
19569|    217|#line 1589 "src/char_ref.rl"
19570|    217|	{te = p+1;{output[0]=0x2134; {p++; goto _out; }}}
19571|      0|	break;
19572|    228|	case 2194:
  ------------------
  |  Branch (19572:2): [True: 228, False: 536k]
  ------------------
19573|    228|#line 1590 "src/char_ref.rl"
19574|    228|	{te = p+1;{output[0]=0xf8; {p++; goto _out; }}}
19575|      0|	break;
19576|    198|	case 1511:
  ------------------
  |  Branch (19576:2): [True: 198, False: 536k]
  ------------------
19577|    198|#line 1591 "src/char_ref.rl"
19578|    198|	{te = p+1;{output[0]=0x2298; {p++; goto _out; }}}
19579|      0|	break;
19580|    196|	case 2196:
  ------------------
  |  Branch (19580:2): [True: 196, False: 536k]
  ------------------
19581|    196|#line 1592 "src/char_ref.rl"
19582|    196|	{te = p+1;{output[0]=0xf5; {p++; goto _out; }}}
19583|      0|	break;
19584|    384|	case 1512:
  ------------------
  |  Branch (19584:2): [True: 384, False: 535k]
  ------------------
19585|    384|#line 1593 "src/char_ref.rl"
19586|    384|	{te = p+1;{output[0]=0x2297; {p++; goto _out; }}}
19587|      0|	break;
19588|    262|	case 1513:
  ------------------
  |  Branch (19588:2): [True: 262, False: 536k]
  ------------------
19589|    262|#line 1594 "src/char_ref.rl"
19590|    262|	{te = p+1;{output[0]=0x2a36; {p++; goto _out; }}}
19591|      0|	break;
19592|    203|	case 2198:
  ------------------
  |  Branch (19592:2): [True: 203, False: 536k]
  ------------------
19593|    203|#line 1595 "src/char_ref.rl"
19594|    203|	{te = p+1;{output[0]=0xf6; {p++; goto _out; }}}
19595|      0|	break;
19596|    195|	case 1514:
  ------------------
  |  Branch (19596:2): [True: 195, False: 536k]
  ------------------
19597|    195|#line 1596 "src/char_ref.rl"
19598|    195|	{te = p+1;{output[0]=0x233d; {p++; goto _out; }}}
19599|      0|	break;
19600|    326|	case 1515:
  ------------------
  |  Branch (19600:2): [True: 326, False: 536k]
  ------------------
19601|    326|#line 1597 "src/char_ref.rl"
19602|    326|	{te = p+1;{output[0]=0x2225; {p++; goto _out; }}}
19603|      0|	break;
19604|    391|	case 2200:
  ------------------
  |  Branch (19604:2): [True: 391, False: 535k]
  ------------------
19605|    391|#line 1598 "src/char_ref.rl"
19606|    391|	{te = p+1;{output[0]=0xb6; {p++; goto _out; }}}
19607|      0|	break;
19608|    281|	case 1517:
  ------------------
  |  Branch (19608:2): [True: 281, False: 536k]
  ------------------
19609|    281|#line 1599 "src/char_ref.rl"
19610|    281|	{te = p+1;{output[0]=0x2225; {p++; goto _out; }}}
19611|      0|	break;
19612|    198|	case 1518:
  ------------------
  |  Branch (19612:2): [True: 198, False: 536k]
  ------------------
19613|    198|#line 1600 "src/char_ref.rl"
19614|    198|	{te = p+1;{output[0]=0x2af3; {p++; goto _out; }}}
19615|      0|	break;
19616|    207|	case 1519:
  ------------------
  |  Branch (19616:2): [True: 207, False: 536k]
  ------------------
19617|    207|#line 1601 "src/char_ref.rl"
19618|    207|	{te = p+1;{output[0]=0x2afd; {p++; goto _out; }}}
19619|      0|	break;
19620|    247|	case 1520:
  ------------------
  |  Branch (19620:2): [True: 247, False: 536k]
  ------------------
19621|    247|#line 1602 "src/char_ref.rl"
19622|    247|	{te = p+1;{output[0]=0x2202; {p++; goto _out; }}}
19623|      0|	break;
19624|    195|	case 1521:
  ------------------
  |  Branch (19624:2): [True: 195, False: 536k]
  ------------------
19625|    195|#line 1603 "src/char_ref.rl"
19626|    195|	{te = p+1;{output[0]=0x43f; {p++; goto _out; }}}
19627|      0|	break;
19628|    197|	case 1522:
  ------------------
  |  Branch (19628:2): [True: 197, False: 536k]
  ------------------
19629|    197|#line 1604 "src/char_ref.rl"
19630|    197|	{te = p+1;{output[0]=0x25; {p++; goto _out; }}}
19631|      0|	break;
19632|    218|	case 1523:
  ------------------
  |  Branch (19632:2): [True: 218, False: 536k]
  ------------------
19633|    218|#line 1605 "src/char_ref.rl"
19634|    218|	{te = p+1;{output[0]=0x2e; {p++; goto _out; }}}
19635|      0|	break;
19636|    204|	case 1524:
  ------------------
  |  Branch (19636:2): [True: 204, False: 536k]
  ------------------
19637|    204|#line 1606 "src/char_ref.rl"
19638|    204|	{te = p+1;{output[0]=0x2030; {p++; goto _out; }}}
19639|      0|	break;
19640|    261|	case 1525:
  ------------------
  |  Branch (19640:2): [True: 261, False: 536k]
  ------------------
19641|    261|#line 1607 "src/char_ref.rl"
19642|    261|	{te = p+1;{output[0]=0x22a5; {p++; goto _out; }}}
19643|      0|	break;
19644|      0|	case 1526:
  ------------------
  |  Branch (19644:2): [True: 0, False: 536k]
  ------------------
19645|      0|#line 1608 "src/char_ref.rl"
19646|      0|	{te = p+1;{output[0]=0x2031; {p++; goto _out; }}}
19647|      0|	break;
19648|    285|	case 1527:
  ------------------
  |  Branch (19648:2): [True: 285, False: 536k]
  ------------------
19649|    285|#line 1609 "src/char_ref.rl"
19650|    285|	{te = p+1;{output[0]=0x1d52d; {p++; goto _out; }}}
19651|      0|	break;
19652|    286|	case 1528:
  ------------------
  |  Branch (19652:2): [True: 286, False: 536k]
  ------------------
19653|    286|#line 1610 "src/char_ref.rl"
19654|    286|	{te = p+1;{output[0]=0x3c6; {p++; goto _out; }}}
19655|      0|	break;
19656|    195|	case 1529:
  ------------------
  |  Branch (19656:2): [True: 195, False: 536k]
  ------------------
19657|    195|#line 1611 "src/char_ref.rl"
19658|    195|	{te = p+1;{output[0]=0x3d5; {p++; goto _out; }}}
19659|      0|	break;
19660|    228|	case 1530:
  ------------------
  |  Branch (19660:2): [True: 228, False: 536k]
  ------------------
19661|    228|#line 1612 "src/char_ref.rl"
19662|    228|	{te = p+1;{output[0]=0x2133; {p++; goto _out; }}}
19663|      0|	break;
19664|    235|	case 1531:
  ------------------
  |  Branch (19664:2): [True: 235, False: 536k]
  ------------------
19665|    235|#line 1613 "src/char_ref.rl"
19666|    235|	{te = p+1;{output[0]=0x260e; {p++; goto _out; }}}
19667|      0|	break;
19668|    234|	case 1532:
  ------------------
  |  Branch (19668:2): [True: 234, False: 536k]
  ------------------
19669|    234|#line 1614 "src/char_ref.rl"
19670|    234|	{te = p+1;{output[0]=0x3c0; {p++; goto _out; }}}
19671|      0|	break;
19672|      0|	case 1533:
  ------------------
  |  Branch (19672:2): [True: 0, False: 536k]
  ------------------
19673|      0|#line 1615 "src/char_ref.rl"
19674|      0|	{te = p+1;{output[0]=0x22d4; {p++; goto _out; }}}
19675|      0|	break;
19676|    254|	case 1534:
  ------------------
  |  Branch (19676:2): [True: 254, False: 536k]
  ------------------
19677|    254|#line 1616 "src/char_ref.rl"
19678|    254|	{te = p+1;{output[0]=0x3d6; {p++; goto _out; }}}
19679|      0|	break;
19680|    261|	case 1535:
  ------------------
  |  Branch (19680:2): [True: 261, False: 536k]
  ------------------
19681|    261|#line 1617 "src/char_ref.rl"
19682|    261|	{te = p+1;{output[0]=0x210f; {p++; goto _out; }}}
19683|      0|	break;
19684|    217|	case 1536:
  ------------------
  |  Branch (19684:2): [True: 217, False: 536k]
  ------------------
19685|    217|#line 1618 "src/char_ref.rl"
19686|    217|	{te = p+1;{output[0]=0x210e; {p++; goto _out; }}}
19687|      0|	break;
19688|    226|	case 1537:
  ------------------
  |  Branch (19688:2): [True: 226, False: 536k]
  ------------------
19689|    226|#line 1619 "src/char_ref.rl"
19690|    226|	{te = p+1;{output[0]=0x210f; {p++; goto _out; }}}
19691|      0|	break;
19692|    356|	case 1538:
  ------------------
  |  Branch (19692:2): [True: 356, False: 535k]
  ------------------
19693|    356|#line 1620 "src/char_ref.rl"
19694|    356|	{te = p+1;{output[0]=0x2b; {p++; goto _out; }}}
19695|      0|	break;
19696|    222|	case 1539:
  ------------------
  |  Branch (19696:2): [True: 222, False: 536k]
  ------------------
19697|    222|#line 1621 "src/char_ref.rl"
19698|    222|	{te = p+1;{output[0]=0x2a23; {p++; goto _out; }}}
19699|      0|	break;
19700|    419|	case 1540:
  ------------------
  |  Branch (19700:2): [True: 419, False: 535k]
  ------------------
19701|    419|#line 1622 "src/char_ref.rl"
19702|    419|	{te = p+1;{output[0]=0x229e; {p++; goto _out; }}}
19703|      0|	break;
19704|    266|	case 1541:
  ------------------
  |  Branch (19704:2): [True: 266, False: 536k]
  ------------------
19705|    266|#line 1623 "src/char_ref.rl"
19706|    266|	{te = p+1;{output[0]=0x2a22; {p++; goto _out; }}}
19707|      0|	break;
19708|    319|	case 1542:
  ------------------
  |  Branch (19708:2): [True: 319, False: 536k]
  ------------------
19709|    319|#line 1624 "src/char_ref.rl"
19710|    319|	{te = p+1;{output[0]=0x2214; {p++; goto _out; }}}
19711|      0|	break;
19712|    204|	case 1543:
  ------------------
  |  Branch (19712:2): [True: 204, False: 536k]
  ------------------
19713|    204|#line 1625 "src/char_ref.rl"
19714|    204|	{te = p+1;{output[0]=0x2a25; {p++; goto _out; }}}
19715|      0|	break;
19716|    212|	case 1544:
  ------------------
  |  Branch (19716:2): [True: 212, False: 536k]
  ------------------
19717|    212|#line 1626 "src/char_ref.rl"
19718|    212|	{te = p+1;{output[0]=0x2a72; {p++; goto _out; }}}
19719|      0|	break;
19720|    492|	case 2202:
  ------------------
  |  Branch (19720:2): [True: 492, False: 535k]
  ------------------
19721|    492|#line 1627 "src/char_ref.rl"
19722|    492|	{te = p+1;{output[0]=0xb1; {p++; goto _out; }}}
19723|      0|	break;
19724|    201|	case 1545:
  ------------------
  |  Branch (19724:2): [True: 201, False: 536k]
  ------------------
19725|    201|#line 1628 "src/char_ref.rl"
19726|    201|	{te = p+1;{output[0]=0x2a26; {p++; goto _out; }}}
19727|      0|	break;
19728|      0|	case 1546:
  ------------------
  |  Branch (19728:2): [True: 0, False: 536k]
  ------------------
19729|      0|#line 1629 "src/char_ref.rl"
19730|      0|	{te = p+1;{output[0]=0x2a27; {p++; goto _out; }}}
19731|      0|	break;
19732|    508|	case 1547:
  ------------------
  |  Branch (19732:2): [True: 508, False: 535k]
  ------------------
19733|    508|#line 1630 "src/char_ref.rl"
19734|    508|	{te = p+1;{output[0]=0xb1; {p++; goto _out; }}}
19735|      0|	break;
19736|    205|	case 1548:
  ------------------
  |  Branch (19736:2): [True: 205, False: 536k]
  ------------------
19737|    205|#line 1631 "src/char_ref.rl"
19738|    205|	{te = p+1;{output[0]=0x2a15; {p++; goto _out; }}}
19739|      0|	break;
19740|    313|	case 1549:
  ------------------
  |  Branch (19740:2): [True: 313, False: 536k]
  ------------------
19741|    313|#line 1632 "src/char_ref.rl"
19742|    313|	{te = p+1;{output[0]=0x1d561; {p++; goto _out; }}}
19743|      0|	break;
19744|    194|	case 2204:
  ------------------
  |  Branch (19744:2): [True: 194, False: 536k]
  ------------------
19745|    194|#line 1633 "src/char_ref.rl"
19746|    194|	{te = p+1;{output[0]=0xa3; {p++; goto _out; }}}
19747|      0|	break;
19748|  1.08k|	case 1550:
  ------------------
  |  Branch (19748:2): [True: 1.08k, False: 535k]
  ------------------
19749|  1.08k|#line 1634 "src/char_ref.rl"
19750|  1.08k|	{te = p+1;{output[0]=0x227a; {p++; goto _out; }}}
19751|      0|	break;
19752|    217|	case 1551:
  ------------------
  |  Branch (19752:2): [True: 217, False: 536k]
  ------------------
19753|    217|#line 1635 "src/char_ref.rl"
19754|    217|	{te = p+1;{output[0]=0x2ab3; {p++; goto _out; }}}
19755|      0|	break;
19756|    225|	case 1552:
  ------------------
  |  Branch (19756:2): [True: 225, False: 536k]
  ------------------
19757|    225|#line 1636 "src/char_ref.rl"
19758|    225|	{te = p+1;{output[0]=0x2ab7; {p++; goto _out; }}}
19759|      0|	break;
19760|    248|	case 1553:
  ------------------
  |  Branch (19760:2): [True: 248, False: 536k]
  ------------------
19761|    248|#line 1637 "src/char_ref.rl"
19762|    248|	{te = p+1;{output[0]=0x227c; {p++; goto _out; }}}
19763|      0|	break;
19764|    327|	case 1554:
  ------------------
  |  Branch (19764:2): [True: 327, False: 536k]
  ------------------
19765|    327|#line 1638 "src/char_ref.rl"
19766|    327|	{te = p+1;{output[0]=0x2aaf; {p++; goto _out; }}}
19767|      0|	break;
19768|    327|	case 1555:
  ------------------
  |  Branch (19768:2): [True: 327, False: 536k]
  ------------------
19769|    327|#line 1639 "src/char_ref.rl"
19770|    327|	{te = p+1;{output[0]=0x227a; {p++; goto _out; }}}
19771|      0|	break;
19772|    232|	case 1556:
  ------------------
  |  Branch (19772:2): [True: 232, False: 536k]
  ------------------
19773|    232|#line 1640 "src/char_ref.rl"
19774|    232|	{te = p+1;{output[0]=0x2ab7; {p++; goto _out; }}}
19775|      0|	break;
19776|      0|	case 1557:
  ------------------
  |  Branch (19776:2): [True: 0, False: 536k]
  ------------------
19777|      0|#line 1641 "src/char_ref.rl"
19778|      0|	{te = p+1;{output[0]=0x227c; {p++; goto _out; }}}
19779|      0|	break;
19780|    447|	case 1558:
  ------------------
  |  Branch (19780:2): [True: 447, False: 535k]
  ------------------
19781|    447|#line 1642 "src/char_ref.rl"
19782|    447|	{te = p+1;{output[0]=0x2aaf; {p++; goto _out; }}}
19783|      0|	break;
19784|    198|	case 1559:
  ------------------
  |  Branch (19784:2): [True: 198, False: 536k]
  ------------------
19785|    198|#line 1643 "src/char_ref.rl"
19786|    198|	{te = p+1;{output[0]=0x2ab9; {p++; goto _out; }}}
19787|      0|	break;
19788|    194|	case 1560:
  ------------------
  |  Branch (19788:2): [True: 194, False: 536k]
  ------------------
19789|    194|#line 1644 "src/char_ref.rl"
19790|    194|	{te = p+1;{output[0]=0x2ab5; {p++; goto _out; }}}
19791|      0|	break;
19792|    388|	case 1561:
  ------------------
  |  Branch (19792:2): [True: 388, False: 535k]
  ------------------
19793|    388|#line 1645 "src/char_ref.rl"
19794|    388|	{te = p+1;{output[0]=0x22e8; {p++; goto _out; }}}
19795|      0|	break;
19796|    206|	case 1562:
  ------------------
  |  Branch (19796:2): [True: 206, False: 536k]
  ------------------
19797|    206|#line 1646 "src/char_ref.rl"
19798|    206|	{te = p+1;{output[0]=0x227e; {p++; goto _out; }}}
19799|      0|	break;
19800|    226|	case 1563:
  ------------------
  |  Branch (19800:2): [True: 226, False: 536k]
  ------------------
19801|    226|#line 1647 "src/char_ref.rl"
19802|    226|	{te = p+1;{output[0]=0x2032; {p++; goto _out; }}}
19803|      0|	break;
19804|    199|	case 1564:
  ------------------
  |  Branch (19804:2): [True: 199, False: 536k]
  ------------------
19805|    199|#line 1648 "src/char_ref.rl"
19806|    199|	{te = p+1;{output[0]=0x2119; {p++; goto _out; }}}
19807|      0|	break;
19808|    226|	case 1565:
  ------------------
  |  Branch (19808:2): [True: 226, False: 536k]
  ------------------
19809|    226|#line 1649 "src/char_ref.rl"
19810|    226|	{te = p+1;{output[0]=0x2ab5; {p++; goto _out; }}}
19811|      0|	break;
19812|    254|	case 1566:
  ------------------
  |  Branch (19812:2): [True: 254, False: 536k]
  ------------------
19813|    254|#line 1650 "src/char_ref.rl"
19814|    254|	{te = p+1;{output[0]=0x2ab9; {p++; goto _out; }}}
19815|      0|	break;
19816|    195|	case 1567:
  ------------------
  |  Branch (19816:2): [True: 195, False: 536k]
  ------------------
19817|    195|#line 1651 "src/char_ref.rl"
19818|    195|	{te = p+1;{output[0]=0x22e8; {p++; goto _out; }}}
19819|      0|	break;
19820|    272|	case 1568:
  ------------------
  |  Branch (19820:2): [True: 272, False: 536k]
  ------------------
19821|    272|#line 1652 "src/char_ref.rl"
19822|    272|	{te = p+1;{output[0]=0x220f; {p++; goto _out; }}}
19823|      0|	break;
19824|      0|	case 1569:
  ------------------
  |  Branch (19824:2): [True: 0, False: 536k]
  ------------------
19825|      0|#line 1653 "src/char_ref.rl"
19826|      0|	{te = p+1;{output[0]=0x232e; {p++; goto _out; }}}
19827|      0|	break;
19828|    194|	case 1570:
  ------------------
  |  Branch (19828:2): [True: 194, False: 536k]
  ------------------
19829|    194|#line 1654 "src/char_ref.rl"
19830|    194|	{te = p+1;{output[0]=0x2312; {p++; goto _out; }}}
19831|      0|	break;
19832|      0|	case 1571:
  ------------------
  |  Branch (19832:2): [True: 0, False: 536k]
  ------------------
19833|      0|#line 1655 "src/char_ref.rl"
19834|      0|	{te = p+1;{output[0]=0x2313; {p++; goto _out; }}}
19835|      0|	break;
19836|    261|	case 1572:
  ------------------
  |  Branch (19836:2): [True: 261, False: 536k]
  ------------------
19837|    261|#line 1656 "src/char_ref.rl"
19838|    261|	{te = p+1;{output[0]=0x221d; {p++; goto _out; }}}
19839|      0|	break;
19840|    233|	case 1573:
  ------------------
  |  Branch (19840:2): [True: 233, False: 536k]
  ------------------
19841|    233|#line 1657 "src/char_ref.rl"
19842|    233|	{te = p+1;{output[0]=0x221d; {p++; goto _out; }}}
19843|      0|	break;
19844|    234|	case 1574:
  ------------------
  |  Branch (19844:2): [True: 234, False: 536k]
  ------------------
19845|    234|#line 1658 "src/char_ref.rl"
19846|    234|	{te = p+1;{output[0]=0x227e; {p++; goto _out; }}}
19847|      0|	break;
19848|    234|	case 1575:
  ------------------
  |  Branch (19848:2): [True: 234, False: 536k]
  ------------------
19849|    234|#line 1659 "src/char_ref.rl"
19850|    234|	{te = p+1;{output[0]=0x22b0; {p++; goto _out; }}}
19851|      0|	break;
19852|    264|	case 1576:
  ------------------
  |  Branch (19852:2): [True: 264, False: 536k]
  ------------------
19853|    264|#line 1660 "src/char_ref.rl"
19854|    264|	{te = p+1;{output[0]=0x1d4c5; {p++; goto _out; }}}
19855|      0|	break;
19856|    335|	case 1577:
  ------------------
  |  Branch (19856:2): [True: 335, False: 535k]
  ------------------
19857|    335|#line 1661 "src/char_ref.rl"
19858|    335|	{te = p+1;{output[0]=0x3c8; {p++; goto _out; }}}
19859|      0|	break;
19860|    201|	case 1578:
  ------------------
  |  Branch (19860:2): [True: 201, False: 536k]
  ------------------
19861|    201|#line 1662 "src/char_ref.rl"
19862|    201|	{te = p+1;{output[0]=0x2008; {p++; goto _out; }}}
19863|      0|	break;
19864|    532|	case 1579:
  ------------------
  |  Branch (19864:2): [True: 532, False: 535k]
  ------------------
19865|    532|#line 1663 "src/char_ref.rl"
19866|    532|	{te = p+1;{output[0]=0x1d52e; {p++; goto _out; }}}
19867|      0|	break;
19868|    227|	case 1580:
  ------------------
  |  Branch (19868:2): [True: 227, False: 536k]
  ------------------
19869|    227|#line 1664 "src/char_ref.rl"
19870|    227|	{te = p+1;{output[0]=0x2a0c; {p++; goto _out; }}}
19871|      0|	break;
19872|    351|	case 1581:
  ------------------
  |  Branch (19872:2): [True: 351, False: 535k]
  ------------------
19873|    351|#line 1665 "src/char_ref.rl"
19874|    351|	{te = p+1;{output[0]=0x1d562; {p++; goto _out; }}}
19875|      0|	break;
19876|    202|	case 1582:
  ------------------
  |  Branch (19876:2): [True: 202, False: 536k]
  ------------------
19877|    202|#line 1666 "src/char_ref.rl"
19878|    202|	{te = p+1;{output[0]=0x2057; {p++; goto _out; }}}
19879|      0|	break;
19880|    386|	case 1583:
  ------------------
  |  Branch (19880:2): [True: 386, False: 535k]
  ------------------
19881|    386|#line 1667 "src/char_ref.rl"
19882|    386|	{te = p+1;{output[0]=0x1d4c6; {p++; goto _out; }}}
19883|      0|	break;
19884|      0|	case 1584:
  ------------------
  |  Branch (19884:2): [True: 0, False: 536k]
  ------------------
19885|      0|#line 1668 "src/char_ref.rl"
19886|      0|	{te = p+1;{output[0]=0x210d; {p++; goto _out; }}}
19887|      0|	break;
19888|    202|	case 1585:
  ------------------
  |  Branch (19888:2): [True: 202, False: 536k]
  ------------------
19889|    202|#line 1669 "src/char_ref.rl"
19890|    202|	{te = p+1;{output[0]=0x2a16; {p++; goto _out; }}}
19891|      0|	break;
19892|    348|	case 1586:
  ------------------
  |  Branch (19892:2): [True: 348, False: 535k]
  ------------------
19893|    348|#line 1670 "src/char_ref.rl"
19894|    348|	{te = p+1;{output[0]=0x3f; {p++; goto _out; }}}
19895|      0|	break;
19896|    194|	case 1587:
  ------------------
  |  Branch (19896:2): [True: 194, False: 536k]
  ------------------
19897|    194|#line 1671 "src/char_ref.rl"
19898|    194|	{te = p+1;{output[0]=0x225f; {p++; goto _out; }}}
19899|      0|	break;
19900|    348|	case 2206:
  ------------------
  |  Branch (19900:2): [True: 348, False: 535k]
  ------------------
19901|    348|#line 1672 "src/char_ref.rl"
19902|    348|	{te = p+1;{output[0]=0x22; {p++; goto _out; }}}
19903|      0|	break;
19904|    210|	case 1588:
  ------------------
  |  Branch (19904:2): [True: 210, False: 536k]
  ------------------
19905|    210|#line 1673 "src/char_ref.rl"
19906|    210|	{te = p+1;{output[0]=0x21db; {p++; goto _out; }}}
19907|      0|	break;
19908|    246|	case 1589:
  ------------------
  |  Branch (19908:2): [True: 246, False: 536k]
  ------------------
19909|    246|#line 1674 "src/char_ref.rl"
19910|    246|	{te = p+1;{output[0]=0x21d2; {p++; goto _out; }}}
19911|      0|	break;
19912|    366|	case 1590:
  ------------------
  |  Branch (19912:2): [True: 366, False: 535k]
  ------------------
19913|    366|#line 1675 "src/char_ref.rl"
19914|    366|	{te = p+1;{output[0]=0x291c; {p++; goto _out; }}}
19915|      0|	break;
19916|    490|	case 1591:
  ------------------
  |  Branch (19916:2): [True: 490, False: 535k]
  ------------------
19917|    490|#line 1676 "src/char_ref.rl"
19918|    490|	{te = p+1;{output[0]=0x290f; {p++; goto _out; }}}
19919|      0|	break;
19920|    274|	case 1592:
  ------------------
  |  Branch (19920:2): [True: 274, False: 536k]
  ------------------
19921|    274|#line 1677 "src/char_ref.rl"
19922|    274|	{te = p+1;{output[0]=0x2964; {p++; goto _out; }}}
19923|      0|	break;
19924|    319|	case 1593:
  ------------------
  |  Branch (19924:2): [True: 319, False: 536k]
  ------------------
19925|    319|#line 1678 "src/char_ref.rl"
19926|    319|	{te = p+1;{output[0]=0x223d; output[1]=0x331; {p++; goto _out; }}}
19927|      0|	break;
19928|    223|	case 1594:
  ------------------
  |  Branch (19928:2): [True: 223, False: 536k]
  ------------------
19929|    223|#line 1679 "src/char_ref.rl"
19930|    223|	{te = p+1;{output[0]=0x155; {p++; goto _out; }}}
19931|      0|	break;
19932|    199|	case 1595:
  ------------------
  |  Branch (19932:2): [True: 199, False: 536k]
  ------------------
19933|    199|#line 1680 "src/char_ref.rl"
19934|    199|	{te = p+1;{output[0]=0x221a; {p++; goto _out; }}}
19935|      0|	break;
19936|    211|	case 1596:
  ------------------
  |  Branch (19936:2): [True: 211, False: 536k]
  ------------------
19937|    211|#line 1681 "src/char_ref.rl"
19938|    211|	{te = p+1;{output[0]=0x29b3; {p++; goto _out; }}}
19939|      0|	break;
19940|    199|	case 1597:
  ------------------
  |  Branch (19940:2): [True: 199, False: 536k]
  ------------------
19941|    199|#line 1682 "src/char_ref.rl"
19942|    199|	{te = p+1;{output[0]=0x27e9; {p++; goto _out; }}}
19943|      0|	break;
19944|    204|	case 1598:
  ------------------
  |  Branch (19944:2): [True: 204, False: 536k]
  ------------------
19945|    204|#line 1683 "src/char_ref.rl"
19946|    204|	{te = p+1;{output[0]=0x2992; {p++; goto _out; }}}
19947|      0|	break;
19948|    200|	case 1599:
  ------------------
  |  Branch (19948:2): [True: 200, False: 536k]
  ------------------
19949|    200|#line 1684 "src/char_ref.rl"
19950|    200|	{te = p+1;{output[0]=0x29a5; {p++; goto _out; }}}
19951|      0|	break;
19952|    218|	case 1600:
  ------------------
  |  Branch (19952:2): [True: 218, False: 536k]
  ------------------
19953|    218|#line 1685 "src/char_ref.rl"
19954|    218|	{te = p+1;{output[0]=0x27e9; {p++; goto _out; }}}
19955|      0|	break;
19956|    247|	case 2208:
  ------------------
  |  Branch (19956:2): [True: 247, False: 536k]
  ------------------
19957|    247|#line 1686 "src/char_ref.rl"
19958|    247|	{te = p+1;{output[0]=0xbb; {p++; goto _out; }}}
19959|      0|	break;
19960|    279|	case 1601:
  ------------------
  |  Branch (19960:2): [True: 279, False: 536k]
  ------------------
19961|    279|#line 1687 "src/char_ref.rl"
19962|    279|	{te = p+1;{output[0]=0x2192; {p++; goto _out; }}}
19963|      0|	break;
19964|    230|	case 1602:
  ------------------
  |  Branch (19964:2): [True: 230, False: 536k]
  ------------------
19965|    230|#line 1688 "src/char_ref.rl"
19966|    230|	{te = p+1;{output[0]=0x2975; {p++; goto _out; }}}
19967|      0|	break;
19968|    210|	case 1603:
  ------------------
  |  Branch (19968:2): [True: 210, False: 536k]
  ------------------
19969|    210|#line 1689 "src/char_ref.rl"
19970|    210|	{te = p+1;{output[0]=0x21e5; {p++; goto _out; }}}
19971|      0|	break;
19972|    243|	case 1604:
  ------------------
  |  Branch (19972:2): [True: 243, False: 536k]
  ------------------
19973|    243|#line 1690 "src/char_ref.rl"
19974|    243|	{te = p+1;{output[0]=0x2920; {p++; goto _out; }}}
19975|      0|	break;
19976|    369|	case 1605:
  ------------------
  |  Branch (19976:2): [True: 369, False: 535k]
  ------------------
19977|    369|#line 1691 "src/char_ref.rl"
19978|    369|	{te = p+1;{output[0]=0x2933; {p++; goto _out; }}}
19979|      0|	break;
19980|    218|	case 1606:
  ------------------
  |  Branch (19980:2): [True: 218, False: 536k]
  ------------------
19981|    218|#line 1692 "src/char_ref.rl"
19982|    218|	{te = p+1;{output[0]=0x291e; {p++; goto _out; }}}
19983|      0|	break;
19984|    356|	case 1607:
  ------------------
  |  Branch (19984:2): [True: 356, False: 535k]
  ------------------
19985|    356|#line 1693 "src/char_ref.rl"
19986|    356|	{te = p+1;{output[0]=0x21aa; {p++; goto _out; }}}
19987|      0|	break;
19988|    207|	case 1608:
  ------------------
  |  Branch (19988:2): [True: 207, False: 536k]
  ------------------
19989|    207|#line 1694 "src/char_ref.rl"
19990|    207|	{te = p+1;{output[0]=0x21ac; {p++; goto _out; }}}
19991|      0|	break;
19992|    216|	case 1609:
  ------------------
  |  Branch (19992:2): [True: 216, False: 536k]
  ------------------
19993|    216|#line 1695 "src/char_ref.rl"
19994|    216|	{te = p+1;{output[0]=0x2945; {p++; goto _out; }}}
19995|      0|	break;
19996|    210|	case 1610:
  ------------------
  |  Branch (19996:2): [True: 210, False: 536k]
  ------------------
19997|    210|#line 1696 "src/char_ref.rl"
19998|    210|	{te = p+1;{output[0]=0x2974; {p++; goto _out; }}}
19999|      0|	break;
20000|    258|	case 1611:
  ------------------
  |  Branch (20000:2): [True: 258, False: 536k]
  ------------------
20001|    258|#line 1697 "src/char_ref.rl"
20002|    258|	{te = p+1;{output[0]=0x21a3; {p++; goto _out; }}}
20003|      0|	break;
20004|    215|	case 1612:
  ------------------
  |  Branch (20004:2): [True: 215, False: 536k]
  ------------------
20005|    215|#line 1698 "src/char_ref.rl"
20006|    215|	{te = p+1;{output[0]=0x219d; {p++; goto _out; }}}
20007|      0|	break;
20008|    194|	case 1613:
  ------------------
  |  Branch (20008:2): [True: 194, False: 536k]
  ------------------
20009|    194|#line 1699 "src/char_ref.rl"
20010|    194|	{te = p+1;{output[0]=0x291a; {p++; goto _out; }}}
20011|      0|	break;
20012|    196|	case 1614:
  ------------------
  |  Branch (20012:2): [True: 196, False: 536k]
  ------------------
20013|    196|#line 1700 "src/char_ref.rl"
20014|    196|	{te = p+1;{output[0]=0x2236; {p++; goto _out; }}}
20015|      0|	break;
20016|    284|	case 1615:
  ------------------
  |  Branch (20016:2): [True: 284, False: 536k]
  ------------------
20017|    284|#line 1701 "src/char_ref.rl"
20018|    284|	{te = p+1;{output[0]=0x211a; {p++; goto _out; }}}
20019|      0|	break;
20020|    198|	case 1616:
  ------------------
  |  Branch (20020:2): [True: 198, False: 536k]
  ------------------
20021|    198|#line 1702 "src/char_ref.rl"
20022|    198|	{te = p+1;{output[0]=0x290d; {p++; goto _out; }}}
20023|      0|	break;
20024|    207|	case 1617:
  ------------------
  |  Branch (20024:2): [True: 207, False: 536k]
  ------------------
20025|    207|#line 1703 "src/char_ref.rl"
20026|    207|	{te = p+1;{output[0]=0x2773; {p++; goto _out; }}}
20027|      0|	break;
20028|    199|	case 1618:
  ------------------
  |  Branch (20028:2): [True: 199, False: 536k]
  ------------------
20029|    199|#line 1704 "src/char_ref.rl"
20030|    199|	{te = p+1;{output[0]=0x7d; {p++; goto _out; }}}
20031|      0|	break;
20032|    785|	case 1619:
  ------------------
  |  Branch (20032:2): [True: 785, False: 535k]
  ------------------
20033|    785|#line 1705 "src/char_ref.rl"
20034|    785|	{te = p+1;{output[0]=0x5d; {p++; goto _out; }}}
20035|      0|	break;
20036|    194|	case 1620:
  ------------------
  |  Branch (20036:2): [True: 194, False: 536k]
  ------------------
20037|    194|#line 1706 "src/char_ref.rl"
20038|    194|	{te = p+1;{output[0]=0x298c; {p++; goto _out; }}}
20039|      0|	break;
20040|    207|	case 1621:
  ------------------
  |  Branch (20040:2): [True: 207, False: 536k]
  ------------------
20041|    207|#line 1707 "src/char_ref.rl"
20042|    207|	{te = p+1;{output[0]=0x298e; {p++; goto _out; }}}
20043|      0|	break;
20044|    227|	case 1622:
  ------------------
  |  Branch (20044:2): [True: 227, False: 536k]
  ------------------
20045|    227|#line 1708 "src/char_ref.rl"
20046|    227|	{te = p+1;{output[0]=0x2990; {p++; goto _out; }}}
20047|      0|	break;
20048|    220|	case 1623:
  ------------------
  |  Branch (20048:2): [True: 220, False: 536k]
  ------------------
20049|    220|#line 1709 "src/char_ref.rl"
20050|    220|	{te = p+1;{output[0]=0x159; {p++; goto _out; }}}
20051|      0|	break;
20052|    285|	case 1624:
  ------------------
  |  Branch (20052:2): [True: 285, False: 536k]
  ------------------
20053|    285|#line 1710 "src/char_ref.rl"
20054|    285|	{te = p+1;{output[0]=0x157; {p++; goto _out; }}}
20055|      0|	break;
20056|    197|	case 1625:
  ------------------
  |  Branch (20056:2): [True: 197, False: 536k]
  ------------------
20057|    197|#line 1711 "src/char_ref.rl"
20058|    197|	{te = p+1;{output[0]=0x2309; {p++; goto _out; }}}
20059|      0|	break;
20060|    203|	case 1626:
  ------------------
  |  Branch (20060:2): [True: 203, False: 536k]
  ------------------
20061|    203|#line 1712 "src/char_ref.rl"
20062|    203|	{te = p+1;{output[0]=0x7d; {p++; goto _out; }}}
20063|      0|	break;
20064|    233|	case 1627:
  ------------------
  |  Branch (20064:2): [True: 233, False: 536k]
  ------------------
20065|    233|#line 1713 "src/char_ref.rl"
20066|    233|	{te = p+1;{output[0]=0x440; {p++; goto _out; }}}
20067|      0|	break;
20068|    304|	case 1628:
  ------------------
  |  Branch (20068:2): [True: 304, False: 536k]
  ------------------
20069|    304|#line 1714 "src/char_ref.rl"
20070|    304|	{te = p+1;{output[0]=0x2937; {p++; goto _out; }}}
20071|      0|	break;
20072|    220|	case 1629:
  ------------------
  |  Branch (20072:2): [True: 220, False: 536k]
  ------------------
20073|    220|#line 1715 "src/char_ref.rl"
20074|    220|	{te = p+1;{output[0]=0x2969; {p++; goto _out; }}}
20075|      0|	break;
20076|    252|	case 1630:
  ------------------
  |  Branch (20076:2): [True: 252, False: 536k]
  ------------------
20077|    252|#line 1716 "src/char_ref.rl"
20078|    252|	{te = p+1;{output[0]=0x201d; {p++; goto _out; }}}
20079|      0|	break;
20080|    196|	case 1631:
  ------------------
  |  Branch (20080:2): [True: 196, False: 536k]
  ------------------
20081|    196|#line 1717 "src/char_ref.rl"
20082|    196|	{te = p+1;{output[0]=0x201d; {p++; goto _out; }}}
20083|      0|	break;
20084|    213|	case 1632:
  ------------------
  |  Branch (20084:2): [True: 213, False: 536k]
  ------------------
20085|    213|#line 1718 "src/char_ref.rl"
20086|    213|	{te = p+1;{output[0]=0x21b3; {p++; goto _out; }}}
20087|      0|	break;
20088|    229|	case 1633:
  ------------------
  |  Branch (20088:2): [True: 229, False: 536k]
  ------------------
20089|    229|#line 1719 "src/char_ref.rl"
20090|    229|	{te = p+1;{output[0]=0x211c; {p++; goto _out; }}}
20091|      0|	break;
20092|    215|	case 1634:
  ------------------
  |  Branch (20092:2): [True: 215, False: 536k]
  ------------------
20093|    215|#line 1720 "src/char_ref.rl"
20094|    215|	{te = p+1;{output[0]=0x211b; {p++; goto _out; }}}
20095|      0|	break;
20096|    207|	case 1635:
  ------------------
  |  Branch (20096:2): [True: 207, False: 536k]
  ------------------
20097|    207|#line 1721 "src/char_ref.rl"
20098|    207|	{te = p+1;{output[0]=0x211c; {p++; goto _out; }}}
20099|      0|	break;
20100|    239|	case 1636:
  ------------------
  |  Branch (20100:2): [True: 239, False: 536k]
  ------------------
20101|    239|#line 1722 "src/char_ref.rl"
20102|    239|	{te = p+1;{output[0]=0x211d; {p++; goto _out; }}}
20103|      0|	break;
20104|    454|	case 1637:
  ------------------
  |  Branch (20104:2): [True: 454, False: 535k]
  ------------------
20105|    454|#line 1723 "src/char_ref.rl"
20106|    454|	{te = p+1;{output[0]=0x25ad; {p++; goto _out; }}}
20107|      0|	break;
20108|    200|	case 2210:
  ------------------
  |  Branch (20108:2): [True: 200, False: 536k]
  ------------------
20109|    200|#line 1724 "src/char_ref.rl"
20110|    200|	{te = p+1;{output[0]=0xae; {p++; goto _out; }}}
20111|      0|	break;
20112|      0|	case 1638:
  ------------------
  |  Branch (20112:2): [True: 0, False: 536k]
  ------------------
20113|      0|#line 1725 "src/char_ref.rl"
20114|      0|	{te = p+1;{output[0]=0x297d; {p++; goto _out; }}}
20115|      0|	break;
20116|    200|	case 1639:
  ------------------
  |  Branch (20116:2): [True: 200, False: 536k]
  ------------------
20117|    200|#line 1726 "src/char_ref.rl"
20118|    200|	{te = p+1;{output[0]=0x230b; {p++; goto _out; }}}
20119|      0|	break;
20120|    244|	case 1640:
  ------------------
  |  Branch (20120:2): [True: 244, False: 536k]
  ------------------
20121|    244|#line 1727 "src/char_ref.rl"
20122|    244|	{te = p+1;{output[0]=0x1d52f; {p++; goto _out; }}}
20123|      0|	break;
20124|    214|	case 1641:
  ------------------
  |  Branch (20124:2): [True: 214, False: 536k]
  ------------------
20125|    214|#line 1728 "src/char_ref.rl"
20126|    214|	{te = p+1;{output[0]=0x21c1; {p++; goto _out; }}}
20127|      0|	break;
20128|    357|	case 1642:
  ------------------
  |  Branch (20128:2): [True: 357, False: 535k]
  ------------------
20129|    357|#line 1729 "src/char_ref.rl"
20130|    357|	{te = p+1;{output[0]=0x21c0; {p++; goto _out; }}}
20131|      0|	break;
20132|    199|	case 1643:
  ------------------
  |  Branch (20132:2): [True: 199, False: 536k]
  ------------------
20133|    199|#line 1730 "src/char_ref.rl"
20134|    199|	{te = p+1;{output[0]=0x296c; {p++; goto _out; }}}
20135|      0|	break;
20136|    378|	case 1644:
  ------------------
  |  Branch (20136:2): [True: 378, False: 535k]
  ------------------
20137|    378|#line 1731 "src/char_ref.rl"
20138|    378|	{te = p+1;{output[0]=0x3c1; {p++; goto _out; }}}
20139|      0|	break;
20140|    205|	case 1645:
  ------------------
  |  Branch (20140:2): [True: 205, False: 536k]
  ------------------
20141|    205|#line 1732 "src/char_ref.rl"
20142|    205|	{te = p+1;{output[0]=0x3f1; {p++; goto _out; }}}
20143|      0|	break;
20144|      0|	case 1646:
  ------------------
  |  Branch (20144:2): [True: 0, False: 536k]
  ------------------
20145|      0|#line 1733 "src/char_ref.rl"
20146|      0|	{te = p+1;{output[0]=0x2192; {p++; goto _out; }}}
20147|      0|	break;
20148|      0|	case 1647:
  ------------------
  |  Branch (20148:2): [True: 0, False: 536k]
  ------------------
20149|      0|#line 1734 "src/char_ref.rl"
20150|      0|	{te = p+1;{output[0]=0x21a3; {p++; goto _out; }}}
20151|      0|	break;
20152|      0|	case 1648:
  ------------------
  |  Branch (20152:2): [True: 0, False: 536k]
  ------------------
20153|      0|#line 1735 "src/char_ref.rl"
20154|      0|	{te = p+1;{output[0]=0x21c1; {p++; goto _out; }}}
20155|      0|	break;
20156|      0|	case 1649:
  ------------------
  |  Branch (20156:2): [True: 0, False: 536k]
  ------------------
20157|      0|#line 1736 "src/char_ref.rl"
20158|      0|	{te = p+1;{output[0]=0x21c0; {p++; goto _out; }}}
20159|      0|	break;
20160|      0|	case 1650:
  ------------------
  |  Branch (20160:2): [True: 0, False: 536k]
  ------------------
20161|      0|#line 1737 "src/char_ref.rl"
20162|      0|	{te = p+1;{output[0]=0x21c4; {p++; goto _out; }}}
20163|      0|	break;
20164|      0|	case 1651:
  ------------------
  |  Branch (20164:2): [True: 0, False: 536k]
  ------------------
20165|      0|#line 1738 "src/char_ref.rl"
20166|      0|	{te = p+1;{output[0]=0x21cc; {p++; goto _out; }}}
20167|      0|	break;
20168|      0|	case 1652:
  ------------------
  |  Branch (20168:2): [True: 0, False: 536k]
  ------------------
20169|      0|#line 1739 "src/char_ref.rl"
20170|      0|	{te = p+1;{output[0]=0x21c9; {p++; goto _out; }}}
20171|      0|	break;
20172|      0|	case 1653:
  ------------------
  |  Branch (20172:2): [True: 0, False: 536k]
  ------------------
20173|      0|#line 1740 "src/char_ref.rl"
20174|      0|	{te = p+1;{output[0]=0x219d; {p++; goto _out; }}}
20175|      0|	break;
20176|      0|	case 1654:
  ------------------
  |  Branch (20176:2): [True: 0, False: 536k]
  ------------------
20177|      0|#line 1741 "src/char_ref.rl"
20178|      0|	{te = p+1;{output[0]=0x22cc; {p++; goto _out; }}}
20179|      0|	break;
20180|    315|	case 1655:
  ------------------
  |  Branch (20180:2): [True: 315, False: 536k]
  ------------------
20181|    315|#line 1742 "src/char_ref.rl"
20182|    315|	{te = p+1;{output[0]=0x2da; {p++; goto _out; }}}
20183|      0|	break;
20184|      0|	case 1656:
  ------------------
  |  Branch (20184:2): [True: 0, False: 536k]
  ------------------
20185|      0|#line 1743 "src/char_ref.rl"
20186|      0|	{te = p+1;{output[0]=0x2253; {p++; goto _out; }}}
20187|      0|	break;
20188|    350|	case 1657:
  ------------------
  |  Branch (20188:2): [True: 350, False: 535k]
  ------------------
20189|    350|#line 1744 "src/char_ref.rl"
20190|    350|	{te = p+1;{output[0]=0x21c4; {p++; goto _out; }}}
20191|      0|	break;
20192|    254|	case 1658:
  ------------------
  |  Branch (20192:2): [True: 254, False: 536k]
  ------------------
20193|    254|#line 1745 "src/char_ref.rl"
20194|    254|	{te = p+1;{output[0]=0x21cc; {p++; goto _out; }}}
20195|      0|	break;
20196|    267|	case 1659:
  ------------------
  |  Branch (20196:2): [True: 267, False: 536k]
  ------------------
20197|    267|#line 1746 "src/char_ref.rl"
20198|    267|	{te = p+1;{output[0]=0x200f; {p++; goto _out; }}}
20199|      0|	break;
20200|    238|	case 1660:
  ------------------
  |  Branch (20200:2): [True: 238, False: 536k]
  ------------------
20201|    238|#line 1747 "src/char_ref.rl"
20202|    238|	{te = p+1;{output[0]=0x23b1; {p++; goto _out; }}}
20203|      0|	break;
20204|      0|	case 1661:
  ------------------
  |  Branch (20204:2): [True: 0, False: 536k]
  ------------------
20205|      0|#line 1748 "src/char_ref.rl"
20206|      0|	{te = p+1;{output[0]=0x23b1; {p++; goto _out; }}}
20207|      0|	break;
20208|    290|	case 1662:
  ------------------
  |  Branch (20208:2): [True: 290, False: 536k]
  ------------------
20209|    290|#line 1749 "src/char_ref.rl"
20210|    290|	{te = p+1;{output[0]=0x2aee; {p++; goto _out; }}}
20211|      0|	break;
20212|    277|	case 1663:
  ------------------
  |  Branch (20212:2): [True: 277, False: 536k]
  ------------------
20213|    277|#line 1750 "src/char_ref.rl"
20214|    277|	{te = p+1;{output[0]=0x27ed; {p++; goto _out; }}}
20215|      0|	break;
20216|    224|	case 1664:
  ------------------
  |  Branch (20216:2): [True: 224, False: 536k]
  ------------------
20217|    224|#line 1751 "src/char_ref.rl"
20218|    224|	{te = p+1;{output[0]=0x21fe; {p++; goto _out; }}}
20219|      0|	break;
20220|    198|	case 1665:
  ------------------
  |  Branch (20220:2): [True: 198, False: 536k]
  ------------------
20221|    198|#line 1752 "src/char_ref.rl"
20222|    198|	{te = p+1;{output[0]=0x27e7; {p++; goto _out; }}}
20223|      0|	break;
20224|    234|	case 1666:
  ------------------
  |  Branch (20224:2): [True: 234, False: 536k]
  ------------------
20225|    234|#line 1753 "src/char_ref.rl"
20226|    234|	{te = p+1;{output[0]=0x2986; {p++; goto _out; }}}
20227|      0|	break;
20228|    275|	case 1667:
  ------------------
  |  Branch (20228:2): [True: 275, False: 536k]
  ------------------
20229|    275|#line 1754 "src/char_ref.rl"
20230|    275|	{te = p+1;{output[0]=0x1d563; {p++; goto _out; }}}
20231|      0|	break;
20232|    267|	case 1668:
  ------------------
  |  Branch (20232:2): [True: 267, False: 536k]
  ------------------
20233|    267|#line 1755 "src/char_ref.rl"
20234|    267|	{te = p+1;{output[0]=0x2a2e; {p++; goto _out; }}}
20235|      0|	break;
20236|    205|	case 1669:
  ------------------
  |  Branch (20236:2): [True: 205, False: 536k]
  ------------------
20237|    205|#line 1756 "src/char_ref.rl"
20238|    205|	{te = p+1;{output[0]=0x2a35; {p++; goto _out; }}}
20239|      0|	break;
20240|    300|	case 1670:
  ------------------
  |  Branch (20240:2): [True: 300, False: 536k]
  ------------------
20241|    300|#line 1757 "src/char_ref.rl"
20242|    300|	{te = p+1;{output[0]=0x29; {p++; goto _out; }}}
20243|      0|	break;
20244|    210|	case 1671:
  ------------------
  |  Branch (20244:2): [True: 210, False: 536k]
  ------------------
20245|    210|#line 1758 "src/char_ref.rl"
20246|    210|	{te = p+1;{output[0]=0x2994; {p++; goto _out; }}}
20247|      0|	break;
20248|    242|	case 1672:
  ------------------
  |  Branch (20248:2): [True: 242, False: 536k]
  ------------------
20249|    242|#line 1759 "src/char_ref.rl"
20250|    242|	{te = p+1;{output[0]=0x2a12; {p++; goto _out; }}}
20251|      0|	break;
20252|    253|	case 1673:
  ------------------
  |  Branch (20252:2): [True: 253, False: 536k]
  ------------------
20253|    253|#line 1760 "src/char_ref.rl"
20254|    253|	{te = p+1;{output[0]=0x21c9; {p++; goto _out; }}}
20255|      0|	break;
20256|    199|	case 1674:
  ------------------
  |  Branch (20256:2): [True: 199, False: 536k]
  ------------------
20257|    199|#line 1761 "src/char_ref.rl"
20258|    199|	{te = p+1;{output[0]=0x203a; {p++; goto _out; }}}
20259|      0|	break;
20260|    299|	case 1675:
  ------------------
  |  Branch (20260:2): [True: 299, False: 536k]
  ------------------
20261|    299|#line 1762 "src/char_ref.rl"
20262|    299|	{te = p+1;{output[0]=0x1d4c7; {p++; goto _out; }}}
20263|      0|	break;
20264|    227|	case 1676:
  ------------------
  |  Branch (20264:2): [True: 227, False: 536k]
  ------------------
20265|    227|#line 1763 "src/char_ref.rl"
20266|    227|	{te = p+1;{output[0]=0x21b1; {p++; goto _out; }}}
20267|      0|	break;
20268|    518|	case 1677:
  ------------------
  |  Branch (20268:2): [True: 518, False: 535k]
  ------------------
20269|    518|#line 1764 "src/char_ref.rl"
20270|    518|	{te = p+1;{output[0]=0x5d; {p++; goto _out; }}}
20271|      0|	break;
20272|    203|	case 1678:
  ------------------
  |  Branch (20272:2): [True: 203, False: 536k]
  ------------------
20273|    203|#line 1765 "src/char_ref.rl"
20274|    203|	{te = p+1;{output[0]=0x2019; {p++; goto _out; }}}
20275|      0|	break;
20276|    204|	case 1679:
  ------------------
  |  Branch (20276:2): [True: 204, False: 536k]
  ------------------
20277|    204|#line 1766 "src/char_ref.rl"
20278|    204|	{te = p+1;{output[0]=0x2019; {p++; goto _out; }}}
20279|      0|	break;
20280|    229|	case 1680:
  ------------------
  |  Branch (20280:2): [True: 229, False: 536k]
  ------------------
20281|    229|#line 1767 "src/char_ref.rl"
20282|    229|	{te = p+1;{output[0]=0x22cc; {p++; goto _out; }}}
20283|      0|	break;
20284|    197|	case 1681:
  ------------------
  |  Branch (20284:2): [True: 197, False: 536k]
  ------------------
20285|    197|#line 1768 "src/char_ref.rl"
20286|    197|	{te = p+1;{output[0]=0x22ca; {p++; goto _out; }}}
20287|      0|	break;
20288|    236|	case 1682:
  ------------------
  |  Branch (20288:2): [True: 236, False: 536k]
  ------------------
20289|    236|#line 1769 "src/char_ref.rl"
20290|    236|	{te = p+1;{output[0]=0x25b9; {p++; goto _out; }}}
20291|      0|	break;
20292|    332|	case 1683:
  ------------------
  |  Branch (20292:2): [True: 332, False: 535k]
  ------------------
20293|    332|#line 1770 "src/char_ref.rl"
20294|    332|	{te = p+1;{output[0]=0x22b5; {p++; goto _out; }}}
20295|      0|	break;
20296|    203|	case 1684:
  ------------------
  |  Branch (20296:2): [True: 203, False: 536k]
  ------------------
20297|    203|#line 1771 "src/char_ref.rl"
20298|    203|	{te = p+1;{output[0]=0x25b8; {p++; goto _out; }}}
20299|      0|	break;
20300|    196|	case 1685:
  ------------------
  |  Branch (20300:2): [True: 196, False: 536k]
  ------------------
20301|    196|#line 1772 "src/char_ref.rl"
20302|    196|	{te = p+1;{output[0]=0x29ce; {p++; goto _out; }}}
20303|      0|	break;
20304|    195|	case 1686:
  ------------------
  |  Branch (20304:2): [True: 195, False: 536k]
  ------------------
20305|    195|#line 1773 "src/char_ref.rl"
20306|    195|	{te = p+1;{output[0]=0x2968; {p++; goto _out; }}}
20307|      0|	break;
20308|    362|	case 1687:
  ------------------
  |  Branch (20308:2): [True: 362, False: 535k]
  ------------------
20309|    362|#line 1774 "src/char_ref.rl"
20310|    362|	{te = p+1;{output[0]=0x211e; {p++; goto _out; }}}
20311|      0|	break;
20312|    209|	case 1688:
  ------------------
  |  Branch (20312:2): [True: 209, False: 536k]
  ------------------
20313|    209|#line 1775 "src/char_ref.rl"
20314|    209|	{te = p+1;{output[0]=0x15b; {p++; goto _out; }}}
20315|      0|	break;
20316|    569|	case 1689:
  ------------------
  |  Branch (20316:2): [True: 569, False: 535k]
  ------------------
20317|    569|#line 1776 "src/char_ref.rl"
20318|    569|	{te = p+1;{output[0]=0x201a; {p++; goto _out; }}}
20319|      0|	break;
20320|    286|	case 1690:
  ------------------
  |  Branch (20320:2): [True: 286, False: 536k]
  ------------------
20321|    286|#line 1777 "src/char_ref.rl"
20322|    286|	{te = p+1;{output[0]=0x227b; {p++; goto _out; }}}
20323|      0|	break;
20324|    218|	case 1691:
  ------------------
  |  Branch (20324:2): [True: 218, False: 536k]
  ------------------
20325|    218|#line 1778 "src/char_ref.rl"
20326|    218|	{te = p+1;{output[0]=0x2ab4; {p++; goto _out; }}}
20327|      0|	break;
20328|    227|	case 1692:
  ------------------
  |  Branch (20328:2): [True: 227, False: 536k]
  ------------------
20329|    227|#line 1779 "src/char_ref.rl"
20330|    227|	{te = p+1;{output[0]=0x2ab8; {p++; goto _out; }}}
20331|      0|	break;
20332|    202|	case 1693:
  ------------------
  |  Branch (20332:2): [True: 202, False: 536k]
  ------------------
20333|    202|#line 1780 "src/char_ref.rl"
20334|    202|	{te = p+1;{output[0]=0x161; {p++; goto _out; }}}
20335|      0|	break;
20336|    196|	case 1694:
  ------------------
  |  Branch (20336:2): [True: 196, False: 536k]
  ------------------
20337|    196|#line 1781 "src/char_ref.rl"
20338|    196|	{te = p+1;{output[0]=0x227d; {p++; goto _out; }}}
20339|      0|	break;
20340|    326|	case 1695:
  ------------------
  |  Branch (20340:2): [True: 326, False: 536k]
  ------------------
20341|    326|#line 1782 "src/char_ref.rl"
20342|    326|	{te = p+1;{output[0]=0x2ab0; {p++; goto _out; }}}
20343|      0|	break;
20344|    224|	case 1696:
  ------------------
  |  Branch (20344:2): [True: 224, False: 536k]
  ------------------
20345|    224|#line 1783 "src/char_ref.rl"
20346|    224|	{te = p+1;{output[0]=0x15f; {p++; goto _out; }}}
20347|      0|	break;
20348|    222|	case 1697:
  ------------------
  |  Branch (20348:2): [True: 222, False: 536k]
  ------------------
20349|    222|#line 1784 "src/char_ref.rl"
20350|    222|	{te = p+1;{output[0]=0x15d; {p++; goto _out; }}}
20351|      0|	break;
20352|    197|	case 1698:
  ------------------
  |  Branch (20352:2): [True: 197, False: 536k]
  ------------------
20353|    197|#line 1785 "src/char_ref.rl"
20354|    197|	{te = p+1;{output[0]=0x2ab6; {p++; goto _out; }}}
20355|      0|	break;
20356|    208|	case 1699:
  ------------------
  |  Branch (20356:2): [True: 208, False: 536k]
  ------------------
20357|    208|#line 1786 "src/char_ref.rl"
20358|    208|	{te = p+1;{output[0]=0x2aba; {p++; goto _out; }}}
20359|      0|	break;
20360|    321|	case 1700:
  ------------------
  |  Branch (20360:2): [True: 321, False: 536k]
  ------------------
20361|    321|#line 1787 "src/char_ref.rl"
20362|    321|	{te = p+1;{output[0]=0x22e9; {p++; goto _out; }}}
20363|      0|	break;
20364|    220|	case 1701:
  ------------------
  |  Branch (20364:2): [True: 220, False: 536k]
  ------------------
20365|    220|#line 1788 "src/char_ref.rl"
20366|    220|	{te = p+1;{output[0]=0x2a13; {p++; goto _out; }}}
20367|      0|	break;
20368|    204|	case 1702:
  ------------------
  |  Branch (20368:2): [True: 204, False: 536k]
  ------------------
20369|    204|#line 1789 "src/char_ref.rl"
20370|    204|	{te = p+1;{output[0]=0x227f; {p++; goto _out; }}}
20371|      0|	break;
20372|    294|	case 1703:
  ------------------
  |  Branch (20372:2): [True: 294, False: 536k]
  ------------------
20373|    294|#line 1790 "src/char_ref.rl"
20374|    294|	{te = p+1;{output[0]=0x441; {p++; goto _out; }}}
20375|      0|	break;
20376|    206|	case 1704:
  ------------------
  |  Branch (20376:2): [True: 206, False: 536k]
  ------------------
20377|    206|#line 1791 "src/char_ref.rl"
20378|    206|	{te = p+1;{output[0]=0x22c5; {p++; goto _out; }}}
20379|      0|	break;
20380|    222|	case 1705:
  ------------------
  |  Branch (20380:2): [True: 222, False: 536k]
  ------------------
20381|    222|#line 1792 "src/char_ref.rl"
20382|    222|	{te = p+1;{output[0]=0x22a1; {p++; goto _out; }}}
20383|      0|	break;
20384|    196|	case 1706:
  ------------------
  |  Branch (20384:2): [True: 196, False: 536k]
  ------------------
20385|    196|#line 1793 "src/char_ref.rl"
20386|    196|	{te = p+1;{output[0]=0x2a66; {p++; goto _out; }}}
20387|      0|	break;
20388|    197|	case 1707:
  ------------------
  |  Branch (20388:2): [True: 197, False: 536k]
  ------------------
20389|    197|#line 1794 "src/char_ref.rl"
20390|    197|	{te = p+1;{output[0]=0x21d8; {p++; goto _out; }}}
20391|      0|	break;
20392|    194|	case 1708:
  ------------------
  |  Branch (20392:2): [True: 194, False: 536k]
  ------------------
20393|    194|#line 1795 "src/char_ref.rl"
20394|    194|	{te = p+1;{output[0]=0x2925; {p++; goto _out; }}}
20395|      0|	break;
20396|    196|	case 1709:
  ------------------
  |  Branch (20396:2): [True: 196, False: 536k]
  ------------------
20397|    196|#line 1796 "src/char_ref.rl"
20398|    196|	{te = p+1;{output[0]=0x2198; {p++; goto _out; }}}
20399|      0|	break;
20400|    198|	case 1710:
  ------------------
  |  Branch (20400:2): [True: 198, False: 536k]
  ------------------
20401|    198|#line 1797 "src/char_ref.rl"
20402|    198|	{te = p+1;{output[0]=0x2198; {p++; goto _out; }}}
20403|      0|	break;
20404|    250|	case 2212:
  ------------------
  |  Branch (20404:2): [True: 250, False: 536k]
  ------------------
20405|    250|#line 1798 "src/char_ref.rl"
20406|    250|	{te = p+1;{output[0]=0xa7; {p++; goto _out; }}}
20407|      0|	break;
20408|    195|	case 1711:
  ------------------
  |  Branch (20408:2): [True: 195, False: 536k]
  ------------------
20409|    195|#line 1799 "src/char_ref.rl"
20410|    195|	{te = p+1;{output[0]=0x3b; {p++; goto _out; }}}
20411|      0|	break;
20412|    198|	case 1712:
  ------------------
  |  Branch (20412:2): [True: 198, False: 536k]
  ------------------
20413|    198|#line 1800 "src/char_ref.rl"
20414|    198|	{te = p+1;{output[0]=0x2929; {p++; goto _out; }}}
20415|      0|	break;
20416|    243|	case 1713:
  ------------------
  |  Branch (20416:2): [True: 243, False: 536k]
  ------------------
20417|    243|#line 1801 "src/char_ref.rl"
20418|    243|	{te = p+1;{output[0]=0x2216; {p++; goto _out; }}}
20419|      0|	break;
20420|    303|	case 1714:
  ------------------
  |  Branch (20420:2): [True: 303, False: 536k]
  ------------------
20421|    303|#line 1802 "src/char_ref.rl"
20422|    303|	{te = p+1;{output[0]=0x2216; {p++; goto _out; }}}
20423|      0|	break;
20424|    490|	case 1715:
  ------------------
  |  Branch (20424:2): [True: 490, False: 535k]
  ------------------
20425|    490|#line 1803 "src/char_ref.rl"
20426|    490|	{te = p+1;{output[0]=0x2736; {p++; goto _out; }}}
20427|      0|	break;
20428|    242|	case 1716:
  ------------------
  |  Branch (20428:2): [True: 242, False: 536k]
  ------------------
20429|    242|#line 1804 "src/char_ref.rl"
20430|    242|	{te = p+1;{output[0]=0x1d530; {p++; goto _out; }}}
20431|      0|	break;
20432|    215|	case 1717:
  ------------------
  |  Branch (20432:2): [True: 215, False: 536k]
  ------------------
20433|    215|#line 1805 "src/char_ref.rl"
20434|    215|	{te = p+1;{output[0]=0x2322; {p++; goto _out; }}}
20435|      0|	break;
20436|    197|	case 1718:
  ------------------
  |  Branch (20436:2): [True: 197, False: 536k]
  ------------------
20437|    197|#line 1806 "src/char_ref.rl"
20438|    197|	{te = p+1;{output[0]=0x266f; {p++; goto _out; }}}
20439|      0|	break;
20440|    212|	case 1719:
  ------------------
  |  Branch (20440:2): [True: 212, False: 536k]
  ------------------
20441|    212|#line 1807 "src/char_ref.rl"
20442|    212|	{te = p+1;{output[0]=0x449; {p++; goto _out; }}}
20443|      0|	break;
20444|    392|	case 1720:
  ------------------
  |  Branch (20444:2): [True: 392, False: 535k]
  ------------------
20445|    392|#line 1808 "src/char_ref.rl"
20446|    392|	{te = p+1;{output[0]=0x448; {p++; goto _out; }}}
20447|      0|	break;
20448|      0|	case 1721:
  ------------------
  |  Branch (20448:2): [True: 0, False: 536k]
  ------------------
20449|      0|#line 1809 "src/char_ref.rl"
20450|      0|	{te = p+1;{output[0]=0x2223; {p++; goto _out; }}}
20451|      0|	break;
20452|      0|	case 1722:
  ------------------
  |  Branch (20452:2): [True: 0, False: 536k]
  ------------------
20453|      0|#line 1810 "src/char_ref.rl"
20454|      0|	{te = p+1;{output[0]=0x2225; {p++; goto _out; }}}
20455|      0|	break;
20456|    255|	case 2214:
  ------------------
  |  Branch (20456:2): [True: 255, False: 536k]
  ------------------
20457|    255|#line 1811 "src/char_ref.rl"
20458|    255|	{te = p+1;{output[0]=0xad; {p++; goto _out; }}}
20459|      0|	break;
20460|    415|	case 1723:
  ------------------
  |  Branch (20460:2): [True: 415, False: 535k]
  ------------------
20461|    415|#line 1812 "src/char_ref.rl"
20462|    415|	{te = p+1;{output[0]=0x3c3; {p++; goto _out; }}}
20463|      0|	break;
20464|    194|	case 1724:
  ------------------
  |  Branch (20464:2): [True: 194, False: 536k]
  ------------------
20465|    194|#line 1813 "src/char_ref.rl"
20466|    194|	{te = p+1;{output[0]=0x3c2; {p++; goto _out; }}}
20467|      0|	break;
20468|    204|	case 1725:
  ------------------
  |  Branch (20468:2): [True: 204, False: 536k]
  ------------------
20469|    204|#line 1814 "src/char_ref.rl"
20470|    204|	{te = p+1;{output[0]=0x3c2; {p++; goto _out; }}}
20471|      0|	break;
20472|    409|	case 1726:
  ------------------
  |  Branch (20472:2): [True: 409, False: 535k]
  ------------------
20473|    409|#line 1815 "src/char_ref.rl"
20474|    409|	{te = p+1;{output[0]=0x223c; {p++; goto _out; }}}
20475|      0|	break;
20476|    211|	case 1727:
  ------------------
  |  Branch (20476:2): [True: 211, False: 536k]
  ------------------
20477|    211|#line 1816 "src/char_ref.rl"
20478|    211|	{te = p+1;{output[0]=0x2a6a; {p++; goto _out; }}}
20479|      0|	break;
20480|    328|	case 1728:
  ------------------
  |  Branch (20480:2): [True: 328, False: 535k]
  ------------------
20481|    328|#line 1817 "src/char_ref.rl"
20482|    328|	{te = p+1;{output[0]=0x2243; {p++; goto _out; }}}
20483|      0|	break;
20484|    259|	case 1729:
  ------------------
  |  Branch (20484:2): [True: 259, False: 536k]
  ------------------
20485|    259|#line 1818 "src/char_ref.rl"
20486|    259|	{te = p+1;{output[0]=0x2243; {p++; goto _out; }}}
20487|      0|	break;
20488|    244|	case 1730:
  ------------------
  |  Branch (20488:2): [True: 244, False: 536k]
  ------------------
20489|    244|#line 1819 "src/char_ref.rl"
20490|    244|	{te = p+1;{output[0]=0x2a9e; {p++; goto _out; }}}
20491|      0|	break;
20492|    437|	case 1731:
  ------------------
  |  Branch (20492:2): [True: 437, False: 535k]
  ------------------
20493|    437|#line 1820 "src/char_ref.rl"
20494|    437|	{te = p+1;{output[0]=0x2aa0; {p++; goto _out; }}}
20495|      0|	break;
20496|    530|	case 1732:
  ------------------
  |  Branch (20496:2): [True: 530, False: 535k]
  ------------------
20497|    530|#line 1821 "src/char_ref.rl"
20498|    530|	{te = p+1;{output[0]=0x2a9d; {p++; goto _out; }}}
20499|      0|	break;
20500|    206|	case 1733:
  ------------------
  |  Branch (20500:2): [True: 206, False: 536k]
  ------------------
20501|    206|#line 1822 "src/char_ref.rl"
20502|    206|	{te = p+1;{output[0]=0x2a9f; {p++; goto _out; }}}
20503|      0|	break;
20504|    222|	case 1734:
  ------------------
  |  Branch (20504:2): [True: 222, False: 536k]
  ------------------
20505|    222|#line 1823 "src/char_ref.rl"
20506|    222|	{te = p+1;{output[0]=0x2246; {p++; goto _out; }}}
20507|      0|	break;
20508|    198|	case 1735:
  ------------------
  |  Branch (20508:2): [True: 198, False: 536k]
  ------------------
20509|    198|#line 1824 "src/char_ref.rl"
20510|    198|	{te = p+1;{output[0]=0x2a24; {p++; goto _out; }}}
20511|      0|	break;
20512|    196|	case 1736:
  ------------------
  |  Branch (20512:2): [True: 196, False: 536k]
  ------------------
20513|    196|#line 1825 "src/char_ref.rl"
20514|    196|	{te = p+1;{output[0]=0x2972; {p++; goto _out; }}}
20515|      0|	break;
20516|    354|	case 1737:
  ------------------
  |  Branch (20516:2): [True: 354, False: 535k]
  ------------------
20517|    354|#line 1826 "src/char_ref.rl"
20518|    354|	{te = p+1;{output[0]=0x2190; {p++; goto _out; }}}
20519|      0|	break;
20520|    197|	case 1738:
  ------------------
  |  Branch (20520:2): [True: 197, False: 536k]
  ------------------
20521|    197|#line 1827 "src/char_ref.rl"
20522|    197|	{te = p+1;{output[0]=0x2216; {p++; goto _out; }}}
20523|      0|	break;
20524|    257|	case 1739:
  ------------------
  |  Branch (20524:2): [True: 257, False: 536k]
  ------------------
20525|    257|#line 1828 "src/char_ref.rl"
20526|    257|	{te = p+1;{output[0]=0x2a33; {p++; goto _out; }}}
20527|      0|	break;
20528|    194|	case 1740:
  ------------------
  |  Branch (20528:2): [True: 194, False: 536k]
  ------------------
20529|    194|#line 1829 "src/char_ref.rl"
20530|    194|	{te = p+1;{output[0]=0x29e4; {p++; goto _out; }}}
20531|      0|	break;
20532|    240|	case 1741:
  ------------------
  |  Branch (20532:2): [True: 240, False: 536k]
  ------------------
20533|    240|#line 1830 "src/char_ref.rl"
20534|    240|	{te = p+1;{output[0]=0x2223; {p++; goto _out; }}}
20535|      0|	break;
20536|    209|	case 1742:
  ------------------
  |  Branch (20536:2): [True: 209, False: 536k]
  ------------------
20537|    209|#line 1831 "src/char_ref.rl"
20538|    209|	{te = p+1;{output[0]=0x2323; {p++; goto _out; }}}
20539|      0|	break;
20540|    244|	case 1743:
  ------------------
  |  Branch (20540:2): [True: 244, False: 536k]
  ------------------
20541|    244|#line 1832 "src/char_ref.rl"
20542|    244|	{te = p+1;{output[0]=0x2aaa; {p++; goto _out; }}}
20543|      0|	break;
20544|    227|	case 1744:
  ------------------
  |  Branch (20544:2): [True: 227, False: 536k]
  ------------------
20545|    227|#line 1833 "src/char_ref.rl"
20546|    227|	{te = p+1;{output[0]=0x2aac; {p++; goto _out; }}}
20547|      0|	break;
20548|    206|	case 1745:
  ------------------
  |  Branch (20548:2): [True: 206, False: 536k]
  ------------------
20549|    206|#line 1834 "src/char_ref.rl"
20550|    206|	{te = p+1;{output[0]=0x2aac; output[1]=0xfe00; {p++; goto _out; }}}
20551|      0|	break;
20552|    196|	case 1746:
  ------------------
  |  Branch (20552:2): [True: 196, False: 536k]
  ------------------
20553|    196|#line 1835 "src/char_ref.rl"
20554|    196|	{te = p+1;{output[0]=0x44c; {p++; goto _out; }}}
20555|      0|	break;
20556|    294|	case 1747:
  ------------------
  |  Branch (20556:2): [True: 294, False: 536k]
  ------------------
20557|    294|#line 1836 "src/char_ref.rl"
20558|    294|	{te = p+1;{output[0]=0x2f; {p++; goto _out; }}}
20559|      0|	break;
20560|    352|	case 1748:
  ------------------
  |  Branch (20560:2): [True: 352, False: 535k]
  ------------------
20561|    352|#line 1837 "src/char_ref.rl"
20562|    352|	{te = p+1;{output[0]=0x29c4; {p++; goto _out; }}}
20563|      0|	break;
20564|    206|	case 1749:
  ------------------
  |  Branch (20564:2): [True: 206, False: 536k]
  ------------------
20565|    206|#line 1838 "src/char_ref.rl"
20566|    206|	{te = p+1;{output[0]=0x233f; {p++; goto _out; }}}
20567|      0|	break;
20568|    313|	case 1750:
  ------------------
  |  Branch (20568:2): [True: 313, False: 536k]
  ------------------
20569|    313|#line 1839 "src/char_ref.rl"
20570|    313|	{te = p+1;{output[0]=0x1d564; {p++; goto _out; }}}
20571|      0|	break;
20572|    210|	case 1751:
  ------------------
  |  Branch (20572:2): [True: 210, False: 536k]
  ------------------
20573|    210|#line 1840 "src/char_ref.rl"
20574|    210|	{te = p+1;{output[0]=0x2660; {p++; goto _out; }}}
20575|      0|	break;
20576|    194|	case 1752:
  ------------------
  |  Branch (20576:2): [True: 194, False: 536k]
  ------------------
20577|    194|#line 1841 "src/char_ref.rl"
20578|    194|	{te = p+1;{output[0]=0x2660; {p++; goto _out; }}}
20579|      0|	break;
20580|    627|	case 1753:
  ------------------
  |  Branch (20580:2): [True: 627, False: 535k]
  ------------------
20581|    627|#line 1842 "src/char_ref.rl"
20582|    627|	{te = p+1;{output[0]=0x2225; {p++; goto _out; }}}
20583|      0|	break;
20584|    202|	case 1754:
  ------------------
  |  Branch (20584:2): [True: 202, False: 536k]
  ------------------
20585|    202|#line 1843 "src/char_ref.rl"
20586|    202|	{te = p+1;{output[0]=0x2293; {p++; goto _out; }}}
20587|      0|	break;
20588|    247|	case 1755:
  ------------------
  |  Branch (20588:2): [True: 247, False: 536k]
  ------------------
20589|    247|#line 1844 "src/char_ref.rl"
20590|    247|	{te = p+1;{output[0]=0x2293; output[1]=0xfe00; {p++; goto _out; }}}
20591|      0|	break;
20592|    341|	case 1756:
  ------------------
  |  Branch (20592:2): [True: 341, False: 535k]
  ------------------
20593|    341|#line 1845 "src/char_ref.rl"
20594|    341|	{te = p+1;{output[0]=0x2294; {p++; goto _out; }}}
20595|      0|	break;
20596|    206|	case 1757:
  ------------------
  |  Branch (20596:2): [True: 206, False: 536k]
  ------------------
20597|    206|#line 1846 "src/char_ref.rl"
20598|    206|	{te = p+1;{output[0]=0x2294; output[1]=0xfe00; {p++; goto _out; }}}
20599|      0|	break;
20600|    273|	case 1758:
  ------------------
  |  Branch (20600:2): [True: 273, False: 536k]
  ------------------
20601|    273|#line 1847 "src/char_ref.rl"
20602|    273|	{te = p+1;{output[0]=0x228f; {p++; goto _out; }}}
20603|      0|	break;
20604|    232|	case 1759:
  ------------------
  |  Branch (20604:2): [True: 232, False: 536k]
  ------------------
20605|    232|#line 1848 "src/char_ref.rl"
20606|    232|	{te = p+1;{output[0]=0x2291; {p++; goto _out; }}}
20607|      0|	break;
20608|    203|	case 1760:
  ------------------
  |  Branch (20608:2): [True: 203, False: 536k]
  ------------------
20609|    203|#line 1849 "src/char_ref.rl"
20610|    203|	{te = p+1;{output[0]=0x228f; {p++; goto _out; }}}
20611|      0|	break;
20612|    197|	case 1761:
  ------------------
  |  Branch (20612:2): [True: 197, False: 536k]
  ------------------
20613|    197|#line 1850 "src/char_ref.rl"
20614|    197|	{te = p+1;{output[0]=0x2291; {p++; goto _out; }}}
20615|      0|	break;
20616|    234|	case 1762:
  ------------------
  |  Branch (20616:2): [True: 234, False: 536k]
  ------------------
20617|    234|#line 1851 "src/char_ref.rl"
20618|    234|	{te = p+1;{output[0]=0x2290; {p++; goto _out; }}}
20619|      0|	break;
20620|    376|	case 1763:
  ------------------
  |  Branch (20620:2): [True: 376, False: 535k]
  ------------------
20621|    376|#line 1852 "src/char_ref.rl"
20622|    376|	{te = p+1;{output[0]=0x2292; {p++; goto _out; }}}
20623|      0|	break;
20624|    220|	case 1764:
  ------------------
  |  Branch (20624:2): [True: 220, False: 536k]
  ------------------
20625|    220|#line 1853 "src/char_ref.rl"
20626|    220|	{te = p+1;{output[0]=0x2290; {p++; goto _out; }}}
20627|      0|	break;
20628|    234|	case 1765:
  ------------------
  |  Branch (20628:2): [True: 234, False: 536k]
  ------------------
20629|    234|#line 1854 "src/char_ref.rl"
20630|    234|	{te = p+1;{output[0]=0x2292; {p++; goto _out; }}}
20631|      0|	break;
20632|    508|	case 1766:
  ------------------
  |  Branch (20632:2): [True: 508, False: 535k]
  ------------------
20633|    508|#line 1855 "src/char_ref.rl"
20634|    508|	{te = p+1;{output[0]=0x25a1; {p++; goto _out; }}}
20635|      0|	break;
20636|    257|	case 1767:
  ------------------
  |  Branch (20636:2): [True: 257, False: 536k]
  ------------------
20637|    257|#line 1856 "src/char_ref.rl"
20638|    257|	{te = p+1;{output[0]=0x25a1; {p++; goto _out; }}}
20639|      0|	break;
20640|    194|	case 1768:
  ------------------
  |  Branch (20640:2): [True: 194, False: 536k]
  ------------------
20641|    194|#line 1857 "src/char_ref.rl"
20642|    194|	{te = p+1;{output[0]=0x25aa; {p++; goto _out; }}}
20643|      0|	break;
20644|    270|	case 1769:
  ------------------
  |  Branch (20644:2): [True: 270, False: 536k]
  ------------------
20645|    270|#line 1858 "src/char_ref.rl"
20646|    270|	{te = p+1;{output[0]=0x25aa; {p++; goto _out; }}}
20647|      0|	break;
20648|    290|	case 1770:
  ------------------
  |  Branch (20648:2): [True: 290, False: 536k]
  ------------------
20649|    290|#line 1859 "src/char_ref.rl"
20650|    290|	{te = p+1;{output[0]=0x2192; {p++; goto _out; }}}
20651|      0|	break;
20652|    279|	case 1771:
  ------------------
  |  Branch (20652:2): [True: 279, False: 536k]
  ------------------
20653|    279|#line 1860 "src/char_ref.rl"
20654|    279|	{te = p+1;{output[0]=0x1d4c8; {p++; goto _out; }}}
20655|      0|	break;
20656|    215|	case 1772:
  ------------------
  |  Branch (20656:2): [True: 215, False: 536k]
  ------------------
20657|    215|#line 1861 "src/char_ref.rl"
20658|    215|	{te = p+1;{output[0]=0x2216; {p++; goto _out; }}}
20659|      0|	break;
20660|    213|	case 1773:
  ------------------
  |  Branch (20660:2): [True: 213, False: 536k]
  ------------------
20661|    213|#line 1862 "src/char_ref.rl"
20662|    213|	{te = p+1;{output[0]=0x2323; {p++; goto _out; }}}
20663|      0|	break;
20664|    227|	case 1774:
  ------------------
  |  Branch (20664:2): [True: 227, False: 536k]
  ------------------
20665|    227|#line 1863 "src/char_ref.rl"
20666|    227|	{te = p+1;{output[0]=0x22c6; {p++; goto _out; }}}
20667|      0|	break;
20668|    326|	case 1775:
  ------------------
  |  Branch (20668:2): [True: 326, False: 536k]
  ------------------
20669|    326|#line 1864 "src/char_ref.rl"
20670|    326|	{te = p+1;{output[0]=0x2606; {p++; goto _out; }}}
20671|      0|	break;
20672|    247|	case 1776:
  ------------------
  |  Branch (20672:2): [True: 247, False: 536k]
  ------------------
20673|    247|#line 1865 "src/char_ref.rl"
20674|    247|	{te = p+1;{output[0]=0x2605; {p++; goto _out; }}}
20675|      0|	break;
20676|      0|	case 1777:
  ------------------
  |  Branch (20676:2): [True: 0, False: 536k]
  ------------------
20677|      0|#line 1866 "src/char_ref.rl"
20678|      0|	{te = p+1;{output[0]=0x3f5; {p++; goto _out; }}}
20679|      0|	break;
20680|      0|	case 1778:
  ------------------
  |  Branch (20680:2): [True: 0, False: 536k]
  ------------------
20681|      0|#line 1867 "src/char_ref.rl"
20682|      0|	{te = p+1;{output[0]=0x3d5; {p++; goto _out; }}}
20683|      0|	break;
20684|    233|	case 1779:
  ------------------
  |  Branch (20684:2): [True: 233, False: 536k]
  ------------------
20685|    233|#line 1868 "src/char_ref.rl"
20686|    233|	{te = p+1;{output[0]=0xaf; {p++; goto _out; }}}
20687|      0|	break;
20688|    277|	case 1780:
  ------------------
  |  Branch (20688:2): [True: 277, False: 536k]
  ------------------
20689|    277|#line 1869 "src/char_ref.rl"
20690|    277|	{te = p+1;{output[0]=0x2282; {p++; goto _out; }}}
20691|      0|	break;
20692|    240|	case 1781:
  ------------------
  |  Branch (20692:2): [True: 240, False: 536k]
  ------------------
20693|    240|#line 1870 "src/char_ref.rl"
20694|    240|	{te = p+1;{output[0]=0x2ac5; {p++; goto _out; }}}
20695|      0|	break;
20696|    201|	case 1782:
  ------------------
  |  Branch (20696:2): [True: 201, False: 536k]
  ------------------
20697|    201|#line 1871 "src/char_ref.rl"
20698|    201|	{te = p+1;{output[0]=0x2abd; {p++; goto _out; }}}
20699|      0|	break;
20700|    326|	case 1783:
  ------------------
  |  Branch (20700:2): [True: 326, False: 536k]
  ------------------
20701|    326|#line 1872 "src/char_ref.rl"
20702|    326|	{te = p+1;{output[0]=0x2286; {p++; goto _out; }}}
20703|      0|	break;
20704|    236|	case 1784:
  ------------------
  |  Branch (20704:2): [True: 236, False: 536k]
  ------------------
20705|    236|#line 1873 "src/char_ref.rl"
20706|    236|	{te = p+1;{output[0]=0x2ac3; {p++; goto _out; }}}
20707|      0|	break;
20708|    215|	case 1785:
  ------------------
  |  Branch (20708:2): [True: 215, False: 536k]
  ------------------
20709|    215|#line 1874 "src/char_ref.rl"
20710|    215|	{te = p+1;{output[0]=0x2ac1; {p++; goto _out; }}}
20711|      0|	break;
20712|    195|	case 1786:
  ------------------
  |  Branch (20712:2): [True: 195, False: 536k]
  ------------------
20713|    195|#line 1875 "src/char_ref.rl"
20714|    195|	{te = p+1;{output[0]=0x2acb; {p++; goto _out; }}}
20715|      0|	break;
20716|    204|	case 1787:
  ------------------
  |  Branch (20716:2): [True: 204, False: 536k]
  ------------------
20717|    204|#line 1876 "src/char_ref.rl"
20718|    204|	{te = p+1;{output[0]=0x228a; {p++; goto _out; }}}
20719|      0|	break;
20720|    217|	case 1788:
  ------------------
  |  Branch (20720:2): [True: 217, False: 536k]
  ------------------
20721|    217|#line 1877 "src/char_ref.rl"
20722|    217|	{te = p+1;{output[0]=0x2abf; {p++; goto _out; }}}
20723|      0|	break;
20724|    197|	case 1789:
  ------------------
  |  Branch (20724:2): [True: 197, False: 536k]
  ------------------
20725|    197|#line 1878 "src/char_ref.rl"
20726|    197|	{te = p+1;{output[0]=0x2979; {p++; goto _out; }}}
20727|      0|	break;
20728|    351|	case 1790:
  ------------------
  |  Branch (20728:2): [True: 351, False: 535k]
  ------------------
20729|    351|#line 1879 "src/char_ref.rl"
20730|    351|	{te = p+1;{output[0]=0x2282; {p++; goto _out; }}}
20731|      0|	break;
20732|    210|	case 1791:
  ------------------
  |  Branch (20732:2): [True: 210, False: 536k]
  ------------------
20733|    210|#line 1880 "src/char_ref.rl"
20734|    210|	{te = p+1;{output[0]=0x2286; {p++; goto _out; }}}
20735|      0|	break;
20736|    233|	case 1792:
  ------------------
  |  Branch (20736:2): [True: 233, False: 536k]
  ------------------
20737|    233|#line 1881 "src/char_ref.rl"
20738|    233|	{te = p+1;{output[0]=0x2ac5; {p++; goto _out; }}}
20739|      0|	break;
20740|    199|	case 1793:
  ------------------
  |  Branch (20740:2): [True: 199, False: 536k]
  ------------------
20741|    199|#line 1882 "src/char_ref.rl"
20742|    199|	{te = p+1;{output[0]=0x228a; {p++; goto _out; }}}
20743|      0|	break;
20744|    287|	case 1794:
  ------------------
  |  Branch (20744:2): [True: 287, False: 536k]
  ------------------
20745|    287|#line 1883 "src/char_ref.rl"
20746|    287|	{te = p+1;{output[0]=0x2acb; {p++; goto _out; }}}
20747|      0|	break;
20748|    360|	case 1795:
  ------------------
  |  Branch (20748:2): [True: 360, False: 535k]
  ------------------
20749|    360|#line 1884 "src/char_ref.rl"
20750|    360|	{te = p+1;{output[0]=0x2ac7; {p++; goto _out; }}}
20751|      0|	break;
20752|    218|	case 1796:
  ------------------
  |  Branch (20752:2): [True: 218, False: 536k]
  ------------------
20753|    218|#line 1885 "src/char_ref.rl"
20754|    218|	{te = p+1;{output[0]=0x2ad5; {p++; goto _out; }}}
20755|      0|	break;
20756|    334|	case 1797:
  ------------------
  |  Branch (20756:2): [True: 334, False: 535k]
  ------------------
20757|    334|#line 1886 "src/char_ref.rl"
20758|    334|	{te = p+1;{output[0]=0x2ad3; {p++; goto _out; }}}
20759|      0|	break;
20760|    241|	case 1798:
  ------------------
  |  Branch (20760:2): [True: 241, False: 536k]
  ------------------
20761|    241|#line 1887 "src/char_ref.rl"
20762|    241|	{te = p+1;{output[0]=0x227b; {p++; goto _out; }}}
20763|      0|	break;
20764|    209|	case 1799:
  ------------------
  |  Branch (20764:2): [True: 209, False: 536k]
  ------------------
20765|    209|#line 1888 "src/char_ref.rl"
20766|    209|	{te = p+1;{output[0]=0x2ab8; {p++; goto _out; }}}
20767|      0|	break;
20768|      0|	case 1800:
  ------------------
  |  Branch (20768:2): [True: 0, False: 536k]
  ------------------
20769|      0|#line 1889 "src/char_ref.rl"
20770|      0|	{te = p+1;{output[0]=0x227d; {p++; goto _out; }}}
20771|      0|	break;
20772|    255|	case 1801:
  ------------------
  |  Branch (20772:2): [True: 255, False: 536k]
  ------------------
20773|    255|#line 1890 "src/char_ref.rl"
20774|    255|	{te = p+1;{output[0]=0x2ab0; {p++; goto _out; }}}
20775|      0|	break;
20776|    201|	case 1802:
  ------------------
  |  Branch (20776:2): [True: 201, False: 536k]
  ------------------
20777|    201|#line 1891 "src/char_ref.rl"
20778|    201|	{te = p+1;{output[0]=0x2aba; {p++; goto _out; }}}
20779|      0|	break;
20780|    222|	case 1803:
  ------------------
  |  Branch (20780:2): [True: 222, False: 536k]
  ------------------
20781|    222|#line 1892 "src/char_ref.rl"
20782|    222|	{te = p+1;{output[0]=0x2ab6; {p++; goto _out; }}}
20783|      0|	break;
20784|    213|	case 1804:
  ------------------
  |  Branch (20784:2): [True: 213, False: 536k]
  ------------------
20785|    213|#line 1893 "src/char_ref.rl"
20786|    213|	{te = p+1;{output[0]=0x22e9; {p++; goto _out; }}}
20787|      0|	break;
20788|    269|	case 1805:
  ------------------
  |  Branch (20788:2): [True: 269, False: 536k]
  ------------------
20789|    269|#line 1894 "src/char_ref.rl"
20790|    269|	{te = p+1;{output[0]=0x227f; {p++; goto _out; }}}
20791|      0|	break;
20792|    216|	case 1806:
  ------------------
  |  Branch (20792:2): [True: 216, False: 536k]
  ------------------
20793|    216|#line 1895 "src/char_ref.rl"
20794|    216|	{te = p+1;{output[0]=0x2211; {p++; goto _out; }}}
20795|      0|	break;
20796|    327|	case 1807:
  ------------------
  |  Branch (20796:2): [True: 327, False: 536k]
  ------------------
20797|    327|#line 1896 "src/char_ref.rl"
20798|    327|	{te = p+1;{output[0]=0x266a; {p++; goto _out; }}}
20799|      0|	break;
20800|    214|	case 2216:
  ------------------
  |  Branch (20800:2): [True: 214, False: 536k]
  ------------------
20801|    214|#line 1897 "src/char_ref.rl"
20802|    214|	{te = p+1;{output[0]=0xb9; {p++; goto _out; }}}
20803|      0|	break;
20804|    246|	case 2218:
  ------------------
  |  Branch (20804:2): [True: 246, False: 536k]
  ------------------
20805|    246|#line 1898 "src/char_ref.rl"
20806|    246|	{te = p+1;{output[0]=0xb2; {p++; goto _out; }}}
20807|      0|	break;
20808|    197|	case 2220:
  ------------------
  |  Branch (20808:2): [True: 197, False: 536k]
  ------------------
20809|    197|#line 1899 "src/char_ref.rl"
20810|    197|	{te = p+1;{output[0]=0xb3; {p++; goto _out; }}}
20811|      0|	break;
20812|    641|	case 1808:
  ------------------
  |  Branch (20812:2): [True: 641, False: 535k]
  ------------------
20813|    641|#line 1900 "src/char_ref.rl"
20814|    641|	{te = p+1;{output[0]=0x2283; {p++; goto _out; }}}
20815|      0|	break;
20816|    227|	case 1809:
  ------------------
  |  Branch (20816:2): [True: 227, False: 536k]
  ------------------
20817|    227|#line 1901 "src/char_ref.rl"
20818|    227|	{te = p+1;{output[0]=0x2ac6; {p++; goto _out; }}}
20819|      0|	break;
20820|    195|	case 1810:
  ------------------
  |  Branch (20820:2): [True: 195, False: 536k]
  ------------------
20821|    195|#line 1902 "src/char_ref.rl"
20822|    195|	{te = p+1;{output[0]=0x2abe; {p++; goto _out; }}}
20823|      0|	break;
20824|    215|	case 1811:
  ------------------
  |  Branch (20824:2): [True: 215, False: 536k]
  ------------------
20825|    215|#line 1903 "src/char_ref.rl"
20826|    215|	{te = p+1;{output[0]=0x2ad8; {p++; goto _out; }}}
20827|      0|	break;
20828|    470|	case 1812:
  ------------------
  |  Branch (20828:2): [True: 470, False: 535k]
  ------------------
20829|    470|#line 1904 "src/char_ref.rl"
20830|    470|	{te = p+1;{output[0]=0x2287; {p++; goto _out; }}}
20831|      0|	break;
20832|    281|	case 1813:
  ------------------
  |  Branch (20832:2): [True: 281, False: 536k]
  ------------------
20833|    281|#line 1905 "src/char_ref.rl"
20834|    281|	{te = p+1;{output[0]=0x2ac4; {p++; goto _out; }}}
20835|      0|	break;
20836|    196|	case 1814:
  ------------------
  |  Branch (20836:2): [True: 196, False: 536k]
  ------------------
20837|    196|#line 1906 "src/char_ref.rl"
20838|    196|	{te = p+1;{output[0]=0x27c9; {p++; goto _out; }}}
20839|      0|	break;
20840|    199|	case 1815:
  ------------------
  |  Branch (20840:2): [True: 199, False: 536k]
  ------------------
20841|    199|#line 1907 "src/char_ref.rl"
20842|    199|	{te = p+1;{output[0]=0x2ad7; {p++; goto _out; }}}
20843|      0|	break;
20844|    199|	case 1816:
  ------------------
  |  Branch (20844:2): [True: 199, False: 536k]
  ------------------
20845|    199|#line 1908 "src/char_ref.rl"
20846|    199|	{te = p+1;{output[0]=0x297b; {p++; goto _out; }}}
20847|      0|	break;
20848|    238|	case 1817:
  ------------------
  |  Branch (20848:2): [True: 238, False: 536k]
  ------------------
20849|    238|#line 1909 "src/char_ref.rl"
20850|    238|	{te = p+1;{output[0]=0x2ac2; {p++; goto _out; }}}
20851|      0|	break;
20852|    444|	case 1818:
  ------------------
  |  Branch (20852:2): [True: 444, False: 535k]
  ------------------
20853|    444|#line 1910 "src/char_ref.rl"
20854|    444|	{te = p+1;{output[0]=0x2acc; {p++; goto _out; }}}
20855|      0|	break;
20856|    213|	case 1819:
  ------------------
  |  Branch (20856:2): [True: 213, False: 536k]
  ------------------
20857|    213|#line 1911 "src/char_ref.rl"
20858|    213|	{te = p+1;{output[0]=0x228b; {p++; goto _out; }}}
20859|      0|	break;
20860|    279|	case 1820:
  ------------------
  |  Branch (20860:2): [True: 279, False: 536k]
  ------------------
20861|    279|#line 1912 "src/char_ref.rl"
20862|    279|	{te = p+1;{output[0]=0x2ac0; {p++; goto _out; }}}
20863|      0|	break;
20864|    395|	case 1821:
  ------------------
  |  Branch (20864:2): [True: 395, False: 535k]
  ------------------
20865|    395|#line 1913 "src/char_ref.rl"
20866|    395|	{te = p+1;{output[0]=0x2283; {p++; goto _out; }}}
20867|      0|	break;
20868|    194|	case 1822:
  ------------------
  |  Branch (20868:2): [True: 194, False: 536k]
  ------------------
20869|    194|#line 1914 "src/char_ref.rl"
20870|    194|	{te = p+1;{output[0]=0x2287; {p++; goto _out; }}}
20871|      0|	break;
20872|    200|	case 1823:
  ------------------
  |  Branch (20872:2): [True: 200, False: 536k]
  ------------------
20873|    200|#line 1915 "src/char_ref.rl"
20874|    200|	{te = p+1;{output[0]=0x2ac6; {p++; goto _out; }}}
20875|      0|	break;
20876|    222|	case 1824:
  ------------------
  |  Branch (20876:2): [True: 222, False: 536k]
  ------------------
20877|    222|#line 1916 "src/char_ref.rl"
20878|    222|	{te = p+1;{output[0]=0x228b; {p++; goto _out; }}}
20879|      0|	break;
20880|    194|	case 1825:
  ------------------
  |  Branch (20880:2): [True: 194, False: 536k]
  ------------------
20881|    194|#line 1917 "src/char_ref.rl"
20882|    194|	{te = p+1;{output[0]=0x2acc; {p++; goto _out; }}}
20883|      0|	break;
20884|    218|	case 1826:
  ------------------
  |  Branch (20884:2): [True: 218, False: 536k]
  ------------------
20885|    218|#line 1918 "src/char_ref.rl"
20886|    218|	{te = p+1;{output[0]=0x2ac8; {p++; goto _out; }}}
20887|      0|	break;
20888|    212|	case 1827:
  ------------------
  |  Branch (20888:2): [True: 212, False: 536k]
  ------------------
20889|    212|#line 1919 "src/char_ref.rl"
20890|    212|	{te = p+1;{output[0]=0x2ad4; {p++; goto _out; }}}
20891|      0|	break;
20892|    208|	case 1828:
  ------------------
  |  Branch (20892:2): [True: 208, False: 536k]
  ------------------
20893|    208|#line 1920 "src/char_ref.rl"
20894|    208|	{te = p+1;{output[0]=0x2ad6; {p++; goto _out; }}}
20895|      0|	break;
20896|    233|	case 1829:
  ------------------
  |  Branch (20896:2): [True: 233, False: 536k]
  ------------------
20897|    233|#line 1921 "src/char_ref.rl"
20898|    233|	{te = p+1;{output[0]=0x21d9; {p++; goto _out; }}}
20899|      0|	break;
20900|    235|	case 1830:
  ------------------
  |  Branch (20900:2): [True: 235, False: 536k]
  ------------------
20901|    235|#line 1922 "src/char_ref.rl"
20902|    235|	{te = p+1;{output[0]=0x2926; {p++; goto _out; }}}
20903|      0|	break;
20904|    198|	case 1831:
  ------------------
  |  Branch (20904:2): [True: 198, False: 536k]
  ------------------
20905|    198|#line 1923 "src/char_ref.rl"
20906|    198|	{te = p+1;{output[0]=0x2199; {p++; goto _out; }}}
20907|      0|	break;
20908|    196|	case 1832:
  ------------------
  |  Branch (20908:2): [True: 196, False: 536k]
  ------------------
20909|    196|#line 1924 "src/char_ref.rl"
20910|    196|	{te = p+1;{output[0]=0x2199; {p++; goto _out; }}}
20911|      0|	break;
20912|    200|	case 1833:
  ------------------
  |  Branch (20912:2): [True: 200, False: 536k]
  ------------------
20913|    200|#line 1925 "src/char_ref.rl"
20914|    200|	{te = p+1;{output[0]=0x292a; {p++; goto _out; }}}
20915|      0|	break;
20916|    336|	case 2222:
  ------------------
  |  Branch (20916:2): [True: 336, False: 535k]
  ------------------
20917|    336|#line 1926 "src/char_ref.rl"
20918|    336|	{te = p+1;{output[0]=0xdf; {p++; goto _out; }}}
20919|      0|	break;
20920|    311|	case 1834:
  ------------------
  |  Branch (20920:2): [True: 311, False: 536k]
  ------------------
20921|    311|#line 1927 "src/char_ref.rl"
20922|    311|	{te = p+1;{output[0]=0x2316; {p++; goto _out; }}}
20923|      0|	break;
20924|    197|	case 1835:
  ------------------
  |  Branch (20924:2): [True: 197, False: 536k]
  ------------------
20925|    197|#line 1928 "src/char_ref.rl"
20926|    197|	{te = p+1;{output[0]=0x3c4; {p++; goto _out; }}}
20927|      0|	break;
20928|    235|	case 1836:
  ------------------
  |  Branch (20928:2): [True: 235, False: 536k]
  ------------------
20929|    235|#line 1929 "src/char_ref.rl"
20930|    235|	{te = p+1;{output[0]=0x23b4; {p++; goto _out; }}}
20931|      0|	break;
20932|    274|	case 1837:
  ------------------
  |  Branch (20932:2): [True: 274, False: 536k]
  ------------------
20933|    274|#line 1930 "src/char_ref.rl"
20934|    274|	{te = p+1;{output[0]=0x165; {p++; goto _out; }}}
20935|      0|	break;
20936|    204|	case 1838:
  ------------------
  |  Branch (20936:2): [True: 204, False: 536k]
  ------------------
20937|    204|#line 1931 "src/char_ref.rl"
20938|    204|	{te = p+1;{output[0]=0x163; {p++; goto _out; }}}
20939|      0|	break;
20940|    223|	case 1839:
  ------------------
  |  Branch (20940:2): [True: 223, False: 536k]
  ------------------
20941|    223|#line 1932 "src/char_ref.rl"
20942|    223|	{te = p+1;{output[0]=0x442; {p++; goto _out; }}}
20943|      0|	break;
20944|    381|	case 1840:
  ------------------
  |  Branch (20944:2): [True: 381, False: 535k]
  ------------------
20945|    381|#line 1933 "src/char_ref.rl"
20946|    381|	{te = p+1;{output[0]=0x20db; {p++; goto _out; }}}
20947|      0|	break;
20948|    226|	case 1841:
  ------------------
  |  Branch (20948:2): [True: 226, False: 536k]
  ------------------
20949|    226|#line 1934 "src/char_ref.rl"
20950|    226|	{te = p+1;{output[0]=0x2315; {p++; goto _out; }}}
20951|      0|	break;
20952|    234|	case 1842:
  ------------------
  |  Branch (20952:2): [True: 234, False: 536k]
  ------------------
20953|    234|#line 1935 "src/char_ref.rl"
20954|    234|	{te = p+1;{output[0]=0x1d531; {p++; goto _out; }}}
20955|      0|	break;
20956|    212|	case 1843:
  ------------------
  |  Branch (20956:2): [True: 212, False: 536k]
  ------------------
20957|    212|#line 1936 "src/char_ref.rl"
20958|    212|	{te = p+1;{output[0]=0x2234; {p++; goto _out; }}}
20959|      0|	break;
20960|    199|	case 1844:
  ------------------
  |  Branch (20960:2): [True: 199, False: 536k]
  ------------------
20961|    199|#line 1937 "src/char_ref.rl"
20962|    199|	{te = p+1;{output[0]=0x2234; {p++; goto _out; }}}
20963|      0|	break;
20964|    248|	case 1845:
  ------------------
  |  Branch (20964:2): [True: 248, False: 536k]
  ------------------
20965|    248|#line 1938 "src/char_ref.rl"
20966|    248|	{te = p+1;{output[0]=0x3b8; {p++; goto _out; }}}
20967|      0|	break;
20968|    195|	case 1846:
  ------------------
  |  Branch (20968:2): [True: 195, False: 536k]
  ------------------
20969|    195|#line 1939 "src/char_ref.rl"
20970|    195|	{te = p+1;{output[0]=0x3d1; {p++; goto _out; }}}
20971|      0|	break;
20972|    318|	case 1847:
  ------------------
  |  Branch (20972:2): [True: 318, False: 536k]
  ------------------
20973|    318|#line 1940 "src/char_ref.rl"
20974|    318|	{te = p+1;{output[0]=0x3d1; {p++; goto _out; }}}
20975|      0|	break;
20976|    200|	case 1848:
  ------------------
  |  Branch (20976:2): [True: 200, False: 536k]
  ------------------
20977|    200|#line 1941 "src/char_ref.rl"
20978|    200|	{te = p+1;{output[0]=0x2248; {p++; goto _out; }}}
20979|      0|	break;
20980|    241|	case 1849:
  ------------------
  |  Branch (20980:2): [True: 241, False: 536k]
  ------------------
20981|    241|#line 1942 "src/char_ref.rl"
20982|    241|	{te = p+1;{output[0]=0x223c; {p++; goto _out; }}}
20983|      0|	break;
20984|    280|	case 1850:
  ------------------
  |  Branch (20984:2): [True: 280, False: 536k]
  ------------------
20985|    280|#line 1943 "src/char_ref.rl"
20986|    280|	{te = p+1;{output[0]=0x2009; {p++; goto _out; }}}
20987|      0|	break;
20988|    196|	case 1851:
  ------------------
  |  Branch (20988:2): [True: 196, False: 536k]
  ------------------
20989|    196|#line 1944 "src/char_ref.rl"
20990|    196|	{te = p+1;{output[0]=0x2248; {p++; goto _out; }}}
20991|      0|	break;
20992|    196|	case 1852:
  ------------------
  |  Branch (20992:2): [True: 196, False: 536k]
  ------------------
20993|    196|#line 1945 "src/char_ref.rl"
20994|    196|	{te = p+1;{output[0]=0x223c; {p++; goto _out; }}}
20995|      0|	break;
20996|    201|	case 2224:
  ------------------
  |  Branch (20996:2): [True: 201, False: 536k]
  ------------------
20997|    201|#line 1946 "src/char_ref.rl"
20998|    201|	{te = p+1;{output[0]=0xfe; {p++; goto _out; }}}
20999|      0|	break;
21000|    726|	case 1853:
  ------------------
  |  Branch (21000:2): [True: 726, False: 535k]
  ------------------
21001|    726|#line 1947 "src/char_ref.rl"
21002|    726|	{te = p+1;{output[0]=0x2dc; {p++; goto _out; }}}
21003|      0|	break;
21004|    232|	case 2226:
  ------------------
  |  Branch (21004:2): [True: 232, False: 536k]
  ------------------
21005|    232|#line 1948 "src/char_ref.rl"
21006|    232|	{te = p+1;{output[0]=0xd7; {p++; goto _out; }}}
21007|      0|	break;
21008|    269|	case 1855:
  ------------------
  |  Branch (21008:2): [True: 269, False: 536k]
  ------------------
21009|    269|#line 1949 "src/char_ref.rl"
21010|    269|	{te = p+1;{output[0]=0x22a0; {p++; goto _out; }}}
21011|      0|	break;
21012|    234|	case 1856:
  ------------------
  |  Branch (21012:2): [True: 234, False: 536k]
  ------------------
21013|    234|#line 1950 "src/char_ref.rl"
21014|    234|	{te = p+1;{output[0]=0x2a31; {p++; goto _out; }}}
21015|      0|	break;
21016|    203|	case 1857:
  ------------------
  |  Branch (21016:2): [True: 203, False: 536k]
  ------------------
21017|    203|#line 1951 "src/char_ref.rl"
21018|    203|	{te = p+1;{output[0]=0x2a30; {p++; goto _out; }}}
21019|      0|	break;
21020|    204|	case 1858:
  ------------------
  |  Branch (21020:2): [True: 204, False: 536k]
  ------------------
21021|    204|#line 1952 "src/char_ref.rl"
21022|    204|	{te = p+1;{output[0]=0x222d; {p++; goto _out; }}}
21023|      0|	break;
21024|    196|	case 1859:
  ------------------
  |  Branch (21024:2): [True: 196, False: 536k]
  ------------------
21025|    196|#line 1953 "src/char_ref.rl"
21026|    196|	{te = p+1;{output[0]=0x2928; {p++; goto _out; }}}
21027|      0|	break;
21028|    497|	case 1860:
  ------------------
  |  Branch (21028:2): [True: 497, False: 535k]
  ------------------
21029|    497|#line 1954 "src/char_ref.rl"
21030|    497|	{te = p+1;{output[0]=0x22a4; {p++; goto _out; }}}
21031|      0|	break;
21032|    309|	case 1861:
  ------------------
  |  Branch (21032:2): [True: 309, False: 536k]
  ------------------
21033|    309|#line 1955 "src/char_ref.rl"
21034|    309|	{te = p+1;{output[0]=0x2336; {p++; goto _out; }}}
21035|      0|	break;
21036|    260|	case 1862:
  ------------------
  |  Branch (21036:2): [True: 260, False: 536k]
  ------------------
21037|    260|#line 1956 "src/char_ref.rl"
21038|    260|	{te = p+1;{output[0]=0x2af1; {p++; goto _out; }}}
21039|      0|	break;
21040|    199|	case 1863:
  ------------------
  |  Branch (21040:2): [True: 199, False: 536k]
  ------------------
21041|    199|#line 1957 "src/char_ref.rl"
21042|    199|	{te = p+1;{output[0]=0x1d565; {p++; goto _out; }}}
21043|      0|	break;
21044|    217|	case 1864:
  ------------------
  |  Branch (21044:2): [True: 217, False: 536k]
  ------------------
21045|    217|#line 1958 "src/char_ref.rl"
21046|    217|	{te = p+1;{output[0]=0x2ada; {p++; goto _out; }}}
21047|      0|	break;
21048|    250|	case 1865:
  ------------------
  |  Branch (21048:2): [True: 250, False: 536k]
  ------------------
21049|    250|#line 1959 "src/char_ref.rl"
21050|    250|	{te = p+1;{output[0]=0x2929; {p++; goto _out; }}}
21051|      0|	break;
21052|    198|	case 1866:
  ------------------
  |  Branch (21052:2): [True: 198, False: 536k]
  ------------------
21053|    198|#line 1960 "src/char_ref.rl"
21054|    198|	{te = p+1;{output[0]=0x2034; {p++; goto _out; }}}
21055|      0|	break;
21056|    243|	case 1867:
  ------------------
  |  Branch (21056:2): [True: 243, False: 536k]
  ------------------
21057|    243|#line 1961 "src/char_ref.rl"
21058|    243|	{te = p+1;{output[0]=0x2122; {p++; goto _out; }}}
21059|      0|	break;
21060|    209|	case 1868:
  ------------------
  |  Branch (21060:2): [True: 209, False: 536k]
  ------------------
21061|    209|#line 1962 "src/char_ref.rl"
21062|    209|	{te = p+1;{output[0]=0x25b5; {p++; goto _out; }}}
21063|      0|	break;
21064|    281|	case 1869:
  ------------------
  |  Branch (21064:2): [True: 281, False: 536k]
  ------------------
21065|    281|#line 1963 "src/char_ref.rl"
21066|    281|	{te = p+1;{output[0]=0x25bf; {p++; goto _out; }}}
21067|      0|	break;
21068|      0|	case 1870:
  ------------------
  |  Branch (21068:2): [True: 0, False: 536k]
  ------------------
21069|      0|#line 1964 "src/char_ref.rl"
21070|      0|	{te = p+1;{output[0]=0x25c3; {p++; goto _out; }}}
21071|      0|	break;
21072|      0|	case 1871:
  ------------------
  |  Branch (21072:2): [True: 0, False: 536k]
  ------------------
21073|      0|#line 1965 "src/char_ref.rl"
21074|      0|	{te = p+1;{output[0]=0x22b4; {p++; goto _out; }}}
21075|      0|	break;
21076|    195|	case 1872:
  ------------------
  |  Branch (21076:2): [True: 195, False: 536k]
  ------------------
21077|    195|#line 1966 "src/char_ref.rl"
21078|    195|	{te = p+1;{output[0]=0x225c; {p++; goto _out; }}}
21079|      0|	break;
21080|      0|	case 1873:
  ------------------
  |  Branch (21080:2): [True: 0, False: 536k]
  ------------------
21081|      0|#line 1967 "src/char_ref.rl"
21082|      0|	{te = p+1;{output[0]=0x25b9; {p++; goto _out; }}}
21083|      0|	break;
21084|      0|	case 1874:
  ------------------
  |  Branch (21084:2): [True: 0, False: 536k]
  ------------------
21085|      0|#line 1968 "src/char_ref.rl"
21086|      0|	{te = p+1;{output[0]=0x22b5; {p++; goto _out; }}}
21087|      0|	break;
21088|    227|	case 1875:
  ------------------
  |  Branch (21088:2): [True: 227, False: 536k]
  ------------------
21089|    227|#line 1969 "src/char_ref.rl"
21090|    227|	{te = p+1;{output[0]=0x25ec; {p++; goto _out; }}}
21091|      0|	break;
21092|    607|	case 1876:
  ------------------
  |  Branch (21092:2): [True: 607, False: 535k]
  ------------------
21093|    607|#line 1970 "src/char_ref.rl"
21094|    607|	{te = p+1;{output[0]=0x225c; {p++; goto _out; }}}
21095|      0|	break;
21096|    209|	case 1877:
  ------------------
  |  Branch (21096:2): [True: 209, False: 536k]
  ------------------
21097|    209|#line 1971 "src/char_ref.rl"
21098|    209|	{te = p+1;{output[0]=0x2a3a; {p++; goto _out; }}}
21099|      0|	break;
21100|    298|	case 1878:
  ------------------
  |  Branch (21100:2): [True: 298, False: 536k]
  ------------------
21101|    298|#line 1972 "src/char_ref.rl"
21102|    298|	{te = p+1;{output[0]=0x2a39; {p++; goto _out; }}}
21103|      0|	break;
21104|    197|	case 1879:
  ------------------
  |  Branch (21104:2): [True: 197, False: 536k]
  ------------------
21105|    197|#line 1973 "src/char_ref.rl"
21106|    197|	{te = p+1;{output[0]=0x29cd; {p++; goto _out; }}}
21107|      0|	break;
21108|    216|	case 1880:
  ------------------
  |  Branch (21108:2): [True: 216, False: 536k]
  ------------------
21109|    216|#line 1974 "src/char_ref.rl"
21110|    216|	{te = p+1;{output[0]=0x2a3b; {p++; goto _out; }}}
21111|      0|	break;
21112|      0|	case 1881:
  ------------------
  |  Branch (21112:2): [True: 0, False: 536k]
  ------------------
21113|      0|#line 1975 "src/char_ref.rl"
21114|      0|	{te = p+1;{output[0]=0x23e2; {p++; goto _out; }}}
21115|      0|	break;
21116|    262|	case 1882:
  ------------------
  |  Branch (21116:2): [True: 262, False: 536k]
  ------------------
21117|    262|#line 1976 "src/char_ref.rl"
21118|    262|	{te = p+1;{output[0]=0x1d4c9; {p++; goto _out; }}}
21119|      0|	break;
21120|    285|	case 1883:
  ------------------
  |  Branch (21120:2): [True: 285, False: 536k]
  ------------------
21121|    285|#line 1977 "src/char_ref.rl"
21122|    285|	{te = p+1;{output[0]=0x446; {p++; goto _out; }}}
21123|      0|	break;
21124|    237|	case 1884:
  ------------------
  |  Branch (21124:2): [True: 237, False: 536k]
  ------------------
21125|    237|#line 1978 "src/char_ref.rl"
21126|    237|	{te = p+1;{output[0]=0x45b; {p++; goto _out; }}}
21127|      0|	break;
21128|    318|	case 1885:
  ------------------
  |  Branch (21128:2): [True: 318, False: 536k]
  ------------------
21129|    318|#line 1979 "src/char_ref.rl"
21130|    318|	{te = p+1;{output[0]=0x167; {p++; goto _out; }}}
21131|      0|	break;
21132|    205|	case 1886:
  ------------------
  |  Branch (21132:2): [True: 205, False: 536k]
  ------------------
21133|    205|#line 1980 "src/char_ref.rl"
21134|    205|	{te = p+1;{output[0]=0x226c; {p++; goto _out; }}}
21135|      0|	break;
21136|      0|	case 1887:
  ------------------
  |  Branch (21136:2): [True: 0, False: 536k]
  ------------------
21137|      0|#line 1981 "src/char_ref.rl"
21138|      0|	{te = p+1;{output[0]=0x219e; {p++; goto _out; }}}
21139|      0|	break;
21140|      0|	case 1888:
  ------------------
  |  Branch (21140:2): [True: 0, False: 536k]
  ------------------
21141|      0|#line 1982 "src/char_ref.rl"
21142|      0|	{te = p+1;{output[0]=0x21a0; {p++; goto _out; }}}
21143|      0|	break;
21144|    433|	case 1889:
  ------------------
  |  Branch (21144:2): [True: 433, False: 535k]
  ------------------
21145|    433|#line 1983 "src/char_ref.rl"
21146|    433|	{te = p+1;{output[0]=0x21d1; {p++; goto _out; }}}
21147|      0|	break;
21148|    355|	case 1890:
  ------------------
  |  Branch (21148:2): [True: 355, False: 535k]
  ------------------
21149|    355|#line 1984 "src/char_ref.rl"
21150|    355|	{te = p+1;{output[0]=0x2963; {p++; goto _out; }}}
21151|      0|	break;
21152|    201|	case 2228:
  ------------------
  |  Branch (21152:2): [True: 201, False: 536k]
  ------------------
21153|    201|#line 1985 "src/char_ref.rl"
21154|    201|	{te = p+1;{output[0]=0xfa; {p++; goto _out; }}}
21155|      0|	break;
21156|    643|	case 1891:
  ------------------
  |  Branch (21156:2): [True: 643, False: 535k]
  ------------------
21157|    643|#line 1986 "src/char_ref.rl"
21158|    643|	{te = p+1;{output[0]=0x2191; {p++; goto _out; }}}
21159|      0|	break;
21160|    207|	case 1892:
  ------------------
  |  Branch (21160:2): [True: 207, False: 536k]
  ------------------
21161|    207|#line 1987 "src/char_ref.rl"
21162|    207|	{te = p+1;{output[0]=0x45e; {p++; goto _out; }}}
21163|      0|	break;
21164|    200|	case 1893:
  ------------------
  |  Branch (21164:2): [True: 200, False: 536k]
  ------------------
21165|    200|#line 1988 "src/char_ref.rl"
21166|    200|	{te = p+1;{output[0]=0x16d; {p++; goto _out; }}}
21167|      0|	break;
21168|    197|	case 2230:
  ------------------
  |  Branch (21168:2): [True: 197, False: 536k]
  ------------------
21169|    197|#line 1989 "src/char_ref.rl"
21170|    197|	{te = p+1;{output[0]=0xfb; {p++; goto _out; }}}
21171|      0|	break;
21172|    221|	case 1894:
  ------------------
  |  Branch (21172:2): [True: 221, False: 536k]
  ------------------
21173|    221|#line 1990 "src/char_ref.rl"
21174|    221|	{te = p+1;{output[0]=0x443; {p++; goto _out; }}}
21175|      0|	break;
21176|    196|	case 1895:
  ------------------
  |  Branch (21176:2): [True: 196, False: 536k]
  ------------------
21177|    196|#line 1991 "src/char_ref.rl"
21178|    196|	{te = p+1;{output[0]=0x21c5; {p++; goto _out; }}}
21179|      0|	break;
21180|    196|	case 1896:
  ------------------
  |  Branch (21180:2): [True: 196, False: 536k]
  ------------------
21181|    196|#line 1992 "src/char_ref.rl"
21182|    196|	{te = p+1;{output[0]=0x171; {p++; goto _out; }}}
21183|      0|	break;
21184|    398|	case 1897:
  ------------------
  |  Branch (21184:2): [True: 398, False: 535k]
  ------------------
21185|    398|#line 1993 "src/char_ref.rl"
21186|    398|	{te = p+1;{output[0]=0x296e; {p++; goto _out; }}}
21187|      0|	break;
21188|      0|	case 1898:
  ------------------
  |  Branch (21188:2): [True: 0, False: 536k]
  ------------------
21189|      0|#line 1994 "src/char_ref.rl"
21190|      0|	{te = p+1;{output[0]=0x297e; {p++; goto _out; }}}
21191|      0|	break;
21192|    253|	case 1899:
  ------------------
  |  Branch (21192:2): [True: 253, False: 536k]
  ------------------
21193|    253|#line 1995 "src/char_ref.rl"
21194|    253|	{te = p+1;{output[0]=0x1d532; {p++; goto _out; }}}
21195|      0|	break;
21196|    240|	case 2232:
  ------------------
  |  Branch (21196:2): [True: 240, False: 536k]
  ------------------
21197|    240|#line 1996 "src/char_ref.rl"
21198|    240|	{te = p+1;{output[0]=0xf9; {p++; goto _out; }}}
21199|      0|	break;
21200|    210|	case 1900:
  ------------------
  |  Branch (21200:2): [True: 210, False: 536k]
  ------------------
21201|    210|#line 1997 "src/char_ref.rl"
21202|    210|	{te = p+1;{output[0]=0x21bf; {p++; goto _out; }}}
21203|      0|	break;
21204|  1.50k|	case 1901:
  ------------------
  |  Branch (21204:2): [True: 1.50k, False: 534k]
  ------------------
21205|  1.50k|#line 1998 "src/char_ref.rl"
21206|  1.50k|	{te = p+1;{output[0]=0x21be; {p++; goto _out; }}}
21207|      0|	break;
21208|    280|	case 1902:
  ------------------
  |  Branch (21208:2): [True: 280, False: 536k]
  ------------------
21209|    280|#line 1999 "src/char_ref.rl"
21210|    280|	{te = p+1;{output[0]=0x2580; {p++; goto _out; }}}
21211|      0|	break;
21212|    460|	case 1903:
  ------------------
  |  Branch (21212:2): [True: 460, False: 535k]
  ------------------
21213|    460|#line 2000 "src/char_ref.rl"
21214|    460|	{te = p+1;{output[0]=0x231c; {p++; goto _out; }}}
21215|      0|	break;
21216|    284|	case 1904:
  ------------------
  |  Branch (21216:2): [True: 284, False: 536k]
  ------------------
21217|    284|#line 2001 "src/char_ref.rl"
21218|    284|	{te = p+1;{output[0]=0x231c; {p++; goto _out; }}}
21219|      0|	break;
21220|    223|	case 1905:
  ------------------
  |  Branch (21220:2): [True: 223, False: 536k]
  ------------------
21221|    223|#line 2002 "src/char_ref.rl"
21222|    223|	{te = p+1;{output[0]=0x230f; {p++; goto _out; }}}
21223|      0|	break;
21224|    374|	case 1906:
  ------------------
  |  Branch (21224:2): [True: 374, False: 535k]
  ------------------
21225|    374|#line 2003 "src/char_ref.rl"
21226|    374|	{te = p+1;{output[0]=0x25f8; {p++; goto _out; }}}
21227|      0|	break;
21228|    227|	case 1907:
  ------------------
  |  Branch (21228:2): [True: 227, False: 536k]
  ------------------
21229|    227|#line 2004 "src/char_ref.rl"
21230|    227|	{te = p+1;{output[0]=0x16b; {p++; goto _out; }}}
21231|      0|	break;
21232|    213|	case 2234:
  ------------------
  |  Branch (21232:2): [True: 213, False: 536k]
  ------------------
21233|    213|#line 2005 "src/char_ref.rl"
21234|    213|	{te = p+1;{output[0]=0xa8; {p++; goto _out; }}}
21235|      0|	break;
21236|    204|	case 1908:
  ------------------
  |  Branch (21236:2): [True: 204, False: 536k]
  ------------------
21237|    204|#line 2006 "src/char_ref.rl"
21238|    204|	{te = p+1;{output[0]=0x173; {p++; goto _out; }}}
21239|      0|	break;
21240|    288|	case 1909:
  ------------------
  |  Branch (21240:2): [True: 288, False: 536k]
  ------------------
21241|    288|#line 2007 "src/char_ref.rl"
21242|    288|	{te = p+1;{output[0]=0x1d566; {p++; goto _out; }}}
21243|      0|	break;
21244|    203|	case 1910:
  ------------------
  |  Branch (21244:2): [True: 203, False: 536k]
  ------------------
21245|    203|#line 2008 "src/char_ref.rl"
21246|    203|	{te = p+1;{output[0]=0x2191; {p++; goto _out; }}}
21247|      0|	break;
21248|    221|	case 1911:
  ------------------
  |  Branch (21248:2): [True: 221, False: 536k]
  ------------------
21249|    221|#line 2009 "src/char_ref.rl"
21250|    221|	{te = p+1;{output[0]=0x2195; {p++; goto _out; }}}
21251|      0|	break;
21252|      0|	case 1912:
  ------------------
  |  Branch (21252:2): [True: 0, False: 536k]
  ------------------
21253|      0|#line 2010 "src/char_ref.rl"
21254|      0|	{te = p+1;{output[0]=0x21bf; {p++; goto _out; }}}
21255|      0|	break;
21256|      0|	case 1913:
  ------------------
  |  Branch (21256:2): [True: 0, False: 536k]
  ------------------
21257|      0|#line 2011 "src/char_ref.rl"
21258|      0|	{te = p+1;{output[0]=0x21be; {p++; goto _out; }}}
21259|      0|	break;
21260|    274|	case 1914:
  ------------------
  |  Branch (21260:2): [True: 274, False: 536k]
  ------------------
21261|    274|#line 2012 "src/char_ref.rl"
21262|    274|	{te = p+1;{output[0]=0x228e; {p++; goto _out; }}}
21263|      0|	break;
21264|    482|	case 1915:
  ------------------
  |  Branch (21264:2): [True: 482, False: 535k]
  ------------------
21265|    482|#line 2013 "src/char_ref.rl"
21266|    482|	{te = p+1;{output[0]=0x3c5; {p++; goto _out; }}}
21267|      0|	break;
21268|    205|	case 1916:
  ------------------
  |  Branch (21268:2): [True: 205, False: 536k]
  ------------------
21269|    205|#line 2014 "src/char_ref.rl"
21270|    205|	{te = p+1;{output[0]=0x3d2; {p++; goto _out; }}}
21271|      0|	break;
21272|    198|	case 1917:
  ------------------
  |  Branch (21272:2): [True: 198, False: 536k]
  ------------------
21273|    198|#line 2015 "src/char_ref.rl"
21274|    198|	{te = p+1;{output[0]=0x3c5; {p++; goto _out; }}}
21275|      0|	break;
21276|    382|	case 1918:
  ------------------
  |  Branch (21276:2): [True: 382, False: 535k]
  ------------------
21277|    382|#line 2016 "src/char_ref.rl"
21278|    382|	{te = p+1;{output[0]=0x21c8; {p++; goto _out; }}}
21279|      0|	break;
21280|    403|	case 1919:
  ------------------
  |  Branch (21280:2): [True: 403, False: 535k]
  ------------------
21281|    403|#line 2017 "src/char_ref.rl"
21282|    403|	{te = p+1;{output[0]=0x231d; {p++; goto _out; }}}
21283|      0|	break;
21284|    199|	case 1920:
  ------------------
  |  Branch (21284:2): [True: 199, False: 536k]
  ------------------
21285|    199|#line 2018 "src/char_ref.rl"
21286|    199|	{te = p+1;{output[0]=0x231d; {p++; goto _out; }}}
21287|      0|	break;
21288|    205|	case 1921:
  ------------------
  |  Branch (21288:2): [True: 205, False: 536k]
  ------------------
21289|    205|#line 2019 "src/char_ref.rl"
21290|    205|	{te = p+1;{output[0]=0x230e; {p++; goto _out; }}}
21291|      0|	break;
21292|    203|	case 1922:
  ------------------
  |  Branch (21292:2): [True: 203, False: 536k]
  ------------------
21293|    203|#line 2020 "src/char_ref.rl"
21294|    203|	{te = p+1;{output[0]=0x16f; {p++; goto _out; }}}
21295|      0|	break;
21296|    217|	case 1923:
  ------------------
  |  Branch (21296:2): [True: 217, False: 536k]
  ------------------
21297|    217|#line 2021 "src/char_ref.rl"
21298|    217|	{te = p+1;{output[0]=0x25f9; {p++; goto _out; }}}
21299|      0|	break;
21300|    366|	case 1924:
  ------------------
  |  Branch (21300:2): [True: 366, False: 535k]
  ------------------
21301|    366|#line 2022 "src/char_ref.rl"
21302|    366|	{te = p+1;{output[0]=0x1d4ca; {p++; goto _out; }}}
21303|      0|	break;
21304|    310|	case 1925:
  ------------------
  |  Branch (21304:2): [True: 310, False: 536k]
  ------------------
21305|    310|#line 2023 "src/char_ref.rl"
21306|    310|	{te = p+1;{output[0]=0x22f0; {p++; goto _out; }}}
21307|      0|	break;
21308|    198|	case 1926:
  ------------------
  |  Branch (21308:2): [True: 198, False: 536k]
  ------------------
21309|    198|#line 2024 "src/char_ref.rl"
21310|    198|	{te = p+1;{output[0]=0x169; {p++; goto _out; }}}
21311|      0|	break;
21312|    325|	case 1927:
  ------------------
  |  Branch (21312:2): [True: 325, False: 536k]
  ------------------
21313|    325|#line 2025 "src/char_ref.rl"
21314|    325|	{te = p+1;{output[0]=0x25b5; {p++; goto _out; }}}
21315|      0|	break;
21316|    349|	case 1928:
  ------------------
  |  Branch (21316:2): [True: 349, False: 535k]
  ------------------
21317|    349|#line 2026 "src/char_ref.rl"
21318|    349|	{te = p+1;{output[0]=0x25b4; {p++; goto _out; }}}
21319|      0|	break;
21320|    209|	case 1929:
  ------------------
  |  Branch (21320:2): [True: 209, False: 536k]
  ------------------
21321|    209|#line 2027 "src/char_ref.rl"
21322|    209|	{te = p+1;{output[0]=0x21c8; {p++; goto _out; }}}
21323|      0|	break;
21324|    269|	case 2236:
  ------------------
  |  Branch (21324:2): [True: 269, False: 536k]
  ------------------
21325|    269|#line 2028 "src/char_ref.rl"
21326|    269|	{te = p+1;{output[0]=0xfc; {p++; goto _out; }}}
21327|      0|	break;
21328|    202|	case 1930:
  ------------------
  |  Branch (21328:2): [True: 202, False: 536k]
  ------------------
21329|    202|#line 2029 "src/char_ref.rl"
21330|    202|	{te = p+1;{output[0]=0x29a7; {p++; goto _out; }}}
21331|      0|	break;
21332|    442|	case 1931:
  ------------------
  |  Branch (21332:2): [True: 442, False: 535k]
  ------------------
21333|    442|#line 2030 "src/char_ref.rl"
21334|    442|	{te = p+1;{output[0]=0x21d5; {p++; goto _out; }}}
21335|      0|	break;
21336|    385|	case 1932:
  ------------------
  |  Branch (21336:2): [True: 385, False: 535k]
  ------------------
21337|    385|#line 2031 "src/char_ref.rl"
21338|    385|	{te = p+1;{output[0]=0x2ae8; {p++; goto _out; }}}
21339|      0|	break;
21340|    216|	case 1933:
  ------------------
  |  Branch (21340:2): [True: 216, False: 536k]
  ------------------
21341|    216|#line 2032 "src/char_ref.rl"
21342|    216|	{te = p+1;{output[0]=0x2ae9; {p++; goto _out; }}}
21343|      0|	break;
21344|    212|	case 1934:
  ------------------
  |  Branch (21344:2): [True: 212, False: 536k]
  ------------------
21345|    212|#line 2033 "src/char_ref.rl"
21346|    212|	{te = p+1;{output[0]=0x22a8; {p++; goto _out; }}}
21347|      0|	break;
21348|    195|	case 1935:
  ------------------
  |  Branch (21348:2): [True: 195, False: 536k]
  ------------------
21349|    195|#line 2034 "src/char_ref.rl"
21350|    195|	{te = p+1;{output[0]=0x299c; {p++; goto _out; }}}
21351|      0|	break;
21352|    213|	case 1936:
  ------------------
  |  Branch (21352:2): [True: 213, False: 536k]
  ------------------
21353|    213|#line 2035 "src/char_ref.rl"
21354|    213|	{te = p+1;{output[0]=0x3f5; {p++; goto _out; }}}
21355|      0|	break;
21356|    201|	case 1937:
  ------------------
  |  Branch (21356:2): [True: 201, False: 536k]
  ------------------
21357|    201|#line 2036 "src/char_ref.rl"
21358|    201|	{te = p+1;{output[0]=0x3f0; {p++; goto _out; }}}
21359|      0|	break;
21360|      0|	case 1938:
  ------------------
  |  Branch (21360:2): [True: 0, False: 536k]
  ------------------
21361|      0|#line 2037 "src/char_ref.rl"
21362|      0|	{te = p+1;{output[0]=0x2205; {p++; goto _out; }}}
21363|      0|	break;
21364|    222|	case 1939:
  ------------------
  |  Branch (21364:2): [True: 222, False: 536k]
  ------------------
21365|    222|#line 2038 "src/char_ref.rl"
21366|    222|	{te = p+1;{output[0]=0x3d5; {p++; goto _out; }}}
21367|      0|	break;
21368|    204|	case 1940:
  ------------------
  |  Branch (21368:2): [True: 204, False: 536k]
  ------------------
21369|    204|#line 2039 "src/char_ref.rl"
21370|    204|	{te = p+1;{output[0]=0x3d6; {p++; goto _out; }}}
21371|      0|	break;
21372|    201|	case 1941:
  ------------------
  |  Branch (21372:2): [True: 201, False: 536k]
  ------------------
21373|    201|#line 2040 "src/char_ref.rl"
21374|    201|	{te = p+1;{output[0]=0x221d; {p++; goto _out; }}}
21375|      0|	break;
21376|    397|	case 1942:
  ------------------
  |  Branch (21376:2): [True: 397, False: 535k]
  ------------------
21377|    397|#line 2041 "src/char_ref.rl"
21378|    397|	{te = p+1;{output[0]=0x2195; {p++; goto _out; }}}
21379|      0|	break;
21380|    246|	case 1943:
  ------------------
  |  Branch (21380:2): [True: 246, False: 536k]
  ------------------
21381|    246|#line 2042 "src/char_ref.rl"
21382|    246|	{te = p+1;{output[0]=0x3f1; {p++; goto _out; }}}
21383|      0|	break;
21384|    208|	case 1944:
  ------------------
  |  Branch (21384:2): [True: 208, False: 536k]
  ------------------
21385|    208|#line 2043 "src/char_ref.rl"
21386|    208|	{te = p+1;{output[0]=0x3c2; {p++; goto _out; }}}
21387|      0|	break;
21388|    199|	case 1945:
  ------------------
  |  Branch (21388:2): [True: 199, False: 536k]
  ------------------
21389|    199|#line 2044 "src/char_ref.rl"
21390|    199|	{te = p+1;{output[0]=0x228a; output[1]=0xfe00; {p++; goto _out; }}}
21391|      0|	break;
21392|    225|	case 1946:
  ------------------
  |  Branch (21392:2): [True: 225, False: 536k]
  ------------------
21393|    225|#line 2045 "src/char_ref.rl"
21394|    225|	{te = p+1;{output[0]=0x2acb; output[1]=0xfe00; {p++; goto _out; }}}
21395|      0|	break;
21396|    200|	case 1947:
  ------------------
  |  Branch (21396:2): [True: 200, False: 536k]
  ------------------
21397|    200|#line 2046 "src/char_ref.rl"
21398|    200|	{te = p+1;{output[0]=0x228b; output[1]=0xfe00; {p++; goto _out; }}}
21399|      0|	break;
21400|    235|	case 1948:
  ------------------
  |  Branch (21400:2): [True: 235, False: 536k]
  ------------------
21401|    235|#line 2047 "src/char_ref.rl"
21402|    235|	{te = p+1;{output[0]=0x2acc; output[1]=0xfe00; {p++; goto _out; }}}
21403|      0|	break;
21404|    199|	case 1949:
  ------------------
  |  Branch (21404:2): [True: 199, False: 536k]
  ------------------
21405|    199|#line 2048 "src/char_ref.rl"
21406|    199|	{te = p+1;{output[0]=0x3d1; {p++; goto _out; }}}
21407|      0|	break;
21408|      0|	case 1950:
  ------------------
  |  Branch (21408:2): [True: 0, False: 536k]
  ------------------
21409|      0|#line 2049 "src/char_ref.rl"
21410|      0|	{te = p+1;{output[0]=0x22b2; {p++; goto _out; }}}
21411|      0|	break;
21412|      0|	case 1951:
  ------------------
  |  Branch (21412:2): [True: 0, False: 536k]
  ------------------
21413|      0|#line 2050 "src/char_ref.rl"
21414|      0|	{te = p+1;{output[0]=0x22b3; {p++; goto _out; }}}
21415|      0|	break;
21416|    231|	case 1952:
  ------------------
  |  Branch (21416:2): [True: 231, False: 536k]
  ------------------
21417|    231|#line 2051 "src/char_ref.rl"
21418|    231|	{te = p+1;{output[0]=0x432; {p++; goto _out; }}}
21419|      0|	break;
21420|    332|	case 1953:
  ------------------
  |  Branch (21420:2): [True: 332, False: 535k]
  ------------------
21421|    332|#line 2052 "src/char_ref.rl"
21422|    332|	{te = p+1;{output[0]=0x22a2; {p++; goto _out; }}}
21423|      0|	break;
21424|    280|	case 1954:
  ------------------
  |  Branch (21424:2): [True: 280, False: 536k]
  ------------------
21425|    280|#line 2053 "src/char_ref.rl"
21426|    280|	{te = p+1;{output[0]=0x2228; {p++; goto _out; }}}
21427|      0|	break;
21428|    260|	case 1955:
  ------------------
  |  Branch (21428:2): [True: 260, False: 536k]
  ------------------
21429|    260|#line 2054 "src/char_ref.rl"
21430|    260|	{te = p+1;{output[0]=0x22bb; {p++; goto _out; }}}
21431|      0|	break;
21432|    199|	case 1956:
  ------------------
  |  Branch (21432:2): [True: 199, False: 536k]
  ------------------
21433|    199|#line 2055 "src/char_ref.rl"
21434|    199|	{te = p+1;{output[0]=0x225a; {p++; goto _out; }}}
21435|      0|	break;
21436|      0|	case 1957:
  ------------------
  |  Branch (21436:2): [True: 0, False: 536k]
  ------------------
21437|      0|#line 2056 "src/char_ref.rl"
21438|      0|	{te = p+1;{output[0]=0x22ee; {p++; goto _out; }}}
21439|      0|	break;
21440|    219|	case 1958:
  ------------------
  |  Branch (21440:2): [True: 219, False: 536k]
  ------------------
21441|    219|#line 2057 "src/char_ref.rl"
21442|    219|	{te = p+1;{output[0]=0x7c; {p++; goto _out; }}}
21443|      0|	break;
21444|    521|	case 1959:
  ------------------
  |  Branch (21444:2): [True: 521, False: 535k]
  ------------------
21445|    521|#line 2058 "src/char_ref.rl"
21446|    521|	{te = p+1;{output[0]=0x7c; {p++; goto _out; }}}
21447|      0|	break;
21448|    237|	case 1960:
  ------------------
  |  Branch (21448:2): [True: 237, False: 536k]
  ------------------
21449|    237|#line 2059 "src/char_ref.rl"
21450|    237|	{te = p+1;{output[0]=0x1d533; {p++; goto _out; }}}
21451|      0|	break;
21452|    311|	case 1961:
  ------------------
  |  Branch (21452:2): [True: 311, False: 536k]
  ------------------
21453|    311|#line 2060 "src/char_ref.rl"
21454|    311|	{te = p+1;{output[0]=0x22b2; {p++; goto _out; }}}
21455|      0|	break;
21456|    200|	case 1962:
  ------------------
  |  Branch (21456:2): [True: 200, False: 536k]
  ------------------
21457|    200|#line 2061 "src/char_ref.rl"
21458|    200|	{te = p+1;{output[0]=0x2282; output[1]=0x20d2; {p++; goto _out; }}}
21459|      0|	break;
21460|    210|	case 1963:
  ------------------
  |  Branch (21460:2): [True: 210, False: 536k]
  ------------------
21461|    210|#line 2062 "src/char_ref.rl"
21462|    210|	{te = p+1;{output[0]=0x2283; output[1]=0x20d2; {p++; goto _out; }}}
21463|      0|	break;
21464|    223|	case 1964:
  ------------------
  |  Branch (21464:2): [True: 223, False: 536k]
  ------------------
21465|    223|#line 2063 "src/char_ref.rl"
21466|    223|	{te = p+1;{output[0]=0x1d567; {p++; goto _out; }}}
21467|      0|	break;
21468|    223|	case 1965:
  ------------------
  |  Branch (21468:2): [True: 223, False: 536k]
  ------------------
21469|    223|#line 2064 "src/char_ref.rl"
21470|    223|	{te = p+1;{output[0]=0x221d; {p++; goto _out; }}}
21471|      0|	break;
21472|    225|	case 1966:
  ------------------
  |  Branch (21472:2): [True: 225, False: 536k]
  ------------------
21473|    225|#line 2065 "src/char_ref.rl"
21474|    225|	{te = p+1;{output[0]=0x22b3; {p++; goto _out; }}}
21475|      0|	break;
21476|    293|	case 1967:
  ------------------
  |  Branch (21476:2): [True: 293, False: 536k]
  ------------------
21477|    293|#line 2066 "src/char_ref.rl"
21478|    293|	{te = p+1;{output[0]=0x1d4cb; {p++; goto _out; }}}
21479|      0|	break;
21480|    204|	case 1968:
  ------------------
  |  Branch (21480:2): [True: 204, False: 536k]
  ------------------
21481|    204|#line 2067 "src/char_ref.rl"
21482|    204|	{te = p+1;{output[0]=0x2acb; output[1]=0xfe00; {p++; goto _out; }}}
21483|      0|	break;
21484|    195|	case 1969:
  ------------------
  |  Branch (21484:2): [True: 195, False: 536k]
  ------------------
21485|    195|#line 2068 "src/char_ref.rl"
21486|    195|	{te = p+1;{output[0]=0x228a; output[1]=0xfe00; {p++; goto _out; }}}
21487|      0|	break;
21488|    213|	case 1970:
  ------------------
  |  Branch (21488:2): [True: 213, False: 536k]
  ------------------
21489|    213|#line 2069 "src/char_ref.rl"
21490|    213|	{te = p+1;{output[0]=0x2acc; output[1]=0xfe00; {p++; goto _out; }}}
21491|      0|	break;
21492|    196|	case 1971:
  ------------------
  |  Branch (21492:2): [True: 196, False: 536k]
  ------------------
21493|    196|#line 2070 "src/char_ref.rl"
21494|    196|	{te = p+1;{output[0]=0x228b; output[1]=0xfe00; {p++; goto _out; }}}
21495|      0|	break;
21496|      0|	case 1972:
  ------------------
  |  Branch (21496:2): [True: 0, False: 536k]
  ------------------
21497|      0|#line 2071 "src/char_ref.rl"
21498|      0|	{te = p+1;{output[0]=0x299a; {p++; goto _out; }}}
21499|      0|	break;
21500|    243|	case 1973:
  ------------------
  |  Branch (21500:2): [True: 243, False: 536k]
  ------------------
21501|    243|#line 2072 "src/char_ref.rl"
21502|    243|	{te = p+1;{output[0]=0x175; {p++; goto _out; }}}
21503|      0|	break;
21504|    226|	case 1974:
  ------------------
  |  Branch (21504:2): [True: 226, False: 536k]
  ------------------
21505|    226|#line 2073 "src/char_ref.rl"
21506|    226|	{te = p+1;{output[0]=0x2a5f; {p++; goto _out; }}}
21507|      0|	break;
21508|    232|	case 1975:
  ------------------
  |  Branch (21508:2): [True: 232, False: 536k]
  ------------------
21509|    232|#line 2074 "src/char_ref.rl"
21510|    232|	{te = p+1;{output[0]=0x2227; {p++; goto _out; }}}
21511|      0|	break;
21512|    206|	case 1976:
  ------------------
  |  Branch (21512:2): [True: 206, False: 536k]
  ------------------
21513|    206|#line 2075 "src/char_ref.rl"
21514|    206|	{te = p+1;{output[0]=0x2259; {p++; goto _out; }}}
21515|      0|	break;
21516|      0|	case 1977:
  ------------------
  |  Branch (21516:2): [True: 0, False: 536k]
  ------------------
21517|      0|#line 2076 "src/char_ref.rl"
21518|      0|	{te = p+1;{output[0]=0x2118; {p++; goto _out; }}}
21519|      0|	break;
21520|    522|	case 1978:
  ------------------
  |  Branch (21520:2): [True: 522, False: 535k]
  ------------------
21521|    522|#line 2077 "src/char_ref.rl"
21522|    522|	{te = p+1;{output[0]=0x1d534; {p++; goto _out; }}}
21523|      0|	break;
21524|    212|	case 1979:
  ------------------
  |  Branch (21524:2): [True: 212, False: 536k]
  ------------------
21525|    212|#line 2078 "src/char_ref.rl"
21526|    212|	{te = p+1;{output[0]=0x1d568; {p++; goto _out; }}}
21527|      0|	break;
21528|    216|	case 1980:
  ------------------
  |  Branch (21528:2): [True: 216, False: 536k]
  ------------------
21529|    216|#line 2079 "src/char_ref.rl"
21530|    216|	{te = p+1;{output[0]=0x2118; {p++; goto _out; }}}
21531|      0|	break;
21532|    347|	case 1981:
  ------------------
  |  Branch (21532:2): [True: 347, False: 535k]
  ------------------
21533|    347|#line 2080 "src/char_ref.rl"
21534|    347|	{te = p+1;{output[0]=0x2240; {p++; goto _out; }}}
21535|      0|	break;
21536|    211|	case 1982:
  ------------------
  |  Branch (21536:2): [True: 211, False: 536k]
  ------------------
21537|    211|#line 2081 "src/char_ref.rl"
21538|    211|	{te = p+1;{output[0]=0x2240; {p++; goto _out; }}}
21539|      0|	break;
21540|    226|	case 1983:
  ------------------
  |  Branch (21540:2): [True: 226, False: 536k]
  ------------------
21541|    226|#line 2082 "src/char_ref.rl"
21542|    226|	{te = p+1;{output[0]=0x1d4cc; {p++; goto _out; }}}
21543|      0|	break;
21544|    223|	case 1984:
  ------------------
  |  Branch (21544:2): [True: 223, False: 536k]
  ------------------
21545|    223|#line 2083 "src/char_ref.rl"
21546|    223|	{te = p+1;{output[0]=0x22c2; {p++; goto _out; }}}
21547|      0|	break;
21548|    210|	case 1985:
  ------------------
  |  Branch (21548:2): [True: 210, False: 536k]
  ------------------
21549|    210|#line 2084 "src/char_ref.rl"
21550|    210|	{te = p+1;{output[0]=0x25ef; {p++; goto _out; }}}
21551|      0|	break;
21552|    310|	case 1986:
  ------------------
  |  Branch (21552:2): [True: 310, False: 536k]
  ------------------
21553|    310|#line 2085 "src/char_ref.rl"
21554|    310|	{te = p+1;{output[0]=0x22c3; {p++; goto _out; }}}
21555|      0|	break;
21556|    211|	case 1987:
  ------------------
  |  Branch (21556:2): [True: 211, False: 536k]
  ------------------
21557|    211|#line 2086 "src/char_ref.rl"
21558|    211|	{te = p+1;{output[0]=0x25bd; {p++; goto _out; }}}
21559|      0|	break;
21560|    235|	case 1988:
  ------------------
  |  Branch (21560:2): [True: 235, False: 536k]
  ------------------
21561|    235|#line 2087 "src/char_ref.rl"
21562|    235|	{te = p+1;{output[0]=0x1d535; {p++; goto _out; }}}
21563|      0|	break;
21564|    334|	case 1989:
  ------------------
  |  Branch (21564:2): [True: 334, False: 535k]
  ------------------
21565|    334|#line 2088 "src/char_ref.rl"
21566|    334|	{te = p+1;{output[0]=0x27fa; {p++; goto _out; }}}
21567|      0|	break;
21568|    269|	case 1990:
  ------------------
  |  Branch (21568:2): [True: 269, False: 536k]
  ------------------
21569|    269|#line 2089 "src/char_ref.rl"
21570|    269|	{te = p+1;{output[0]=0x27f7; {p++; goto _out; }}}
21571|      0|	break;
21572|    198|	case 1991:
  ------------------
  |  Branch (21572:2): [True: 198, False: 536k]
  ------------------
21573|    198|#line 2090 "src/char_ref.rl"
21574|    198|	{te = p+1;{output[0]=0x3be; {p++; goto _out; }}}
21575|      0|	break;
21576|    208|	case 1992:
  ------------------
  |  Branch (21576:2): [True: 208, False: 536k]
  ------------------
21577|    208|#line 2091 "src/char_ref.rl"
21578|    208|	{te = p+1;{output[0]=0x27f8; {p++; goto _out; }}}
21579|      0|	break;
21580|    330|	case 1993:
  ------------------
  |  Branch (21580:2): [True: 330, False: 535k]
  ------------------
21581|    330|#line 2092 "src/char_ref.rl"
21582|    330|	{te = p+1;{output[0]=0x27f5; {p++; goto _out; }}}
21583|      0|	break;
21584|    195|	case 1994:
  ------------------
  |  Branch (21584:2): [True: 195, False: 536k]
  ------------------
21585|    195|#line 2093 "src/char_ref.rl"
21586|    195|	{te = p+1;{output[0]=0x27fc; {p++; goto _out; }}}
21587|      0|	break;
21588|    241|	case 1995:
  ------------------
  |  Branch (21588:2): [True: 241, False: 536k]
  ------------------
21589|    241|#line 2094 "src/char_ref.rl"
21590|    241|	{te = p+1;{output[0]=0x22fb; {p++; goto _out; }}}
21591|      0|	break;
21592|    202|	case 1996:
  ------------------
  |  Branch (21592:2): [True: 202, False: 536k]
  ------------------
21593|    202|#line 2095 "src/char_ref.rl"
21594|    202|	{te = p+1;{output[0]=0x2a00; {p++; goto _out; }}}
21595|      0|	break;
21596|    389|	case 1997:
  ------------------
  |  Branch (21596:2): [True: 389, False: 535k]
  ------------------
21597|    389|#line 2096 "src/char_ref.rl"
21598|    389|	{te = p+1;{output[0]=0x1d569; {p++; goto _out; }}}
21599|      0|	break;
21600|    722|	case 1998:
  ------------------
  |  Branch (21600:2): [True: 722, False: 535k]
  ------------------
21601|    722|#line 2097 "src/char_ref.rl"
21602|    722|	{te = p+1;{output[0]=0x2a01; {p++; goto _out; }}}
21603|      0|	break;
21604|    196|	case 1999:
  ------------------
  |  Branch (21604:2): [True: 196, False: 536k]
  ------------------
21605|    196|#line 2098 "src/char_ref.rl"
21606|    196|	{te = p+1;{output[0]=0x2a02; {p++; goto _out; }}}
21607|      0|	break;
21608|    234|	case 2000:
  ------------------
  |  Branch (21608:2): [True: 234, False: 536k]
  ------------------
21609|    234|#line 2099 "src/char_ref.rl"
21610|    234|	{te = p+1;{output[0]=0x27f9; {p++; goto _out; }}}
21611|      0|	break;
21612|    219|	case 2001:
  ------------------
  |  Branch (21612:2): [True: 219, False: 536k]
  ------------------
21613|    219|#line 2100 "src/char_ref.rl"
21614|    219|	{te = p+1;{output[0]=0x27f6; {p++; goto _out; }}}
21615|      0|	break;
21616|    301|	case 2002:
  ------------------
  |  Branch (21616:2): [True: 301, False: 536k]
  ------------------
21617|    301|#line 2101 "src/char_ref.rl"
21618|    301|	{te = p+1;{output[0]=0x1d4cd; {p++; goto _out; }}}
21619|      0|	break;
21620|    217|	case 2003:
  ------------------
  |  Branch (21620:2): [True: 217, False: 536k]
  ------------------
21621|    217|#line 2102 "src/char_ref.rl"
21622|    217|	{te = p+1;{output[0]=0x2a06; {p++; goto _out; }}}
21623|      0|	break;
21624|    215|	case 2004:
  ------------------
  |  Branch (21624:2): [True: 215, False: 536k]
  ------------------
21625|    215|#line 2103 "src/char_ref.rl"
21626|    215|	{te = p+1;{output[0]=0x2a04; {p++; goto _out; }}}
21627|      0|	break;
21628|    221|	case 2005:
  ------------------
  |  Branch (21628:2): [True: 221, False: 536k]
  ------------------
21629|    221|#line 2104 "src/char_ref.rl"
21630|    221|	{te = p+1;{output[0]=0x25b3; {p++; goto _out; }}}
21631|      0|	break;
21632|    468|	case 2006:
  ------------------
  |  Branch (21632:2): [True: 468, False: 535k]
  ------------------
21633|    468|#line 2105 "src/char_ref.rl"
21634|    468|	{te = p+1;{output[0]=0x22c1; {p++; goto _out; }}}
21635|      0|	break;
21636|    434|	case 2007:
  ------------------
  |  Branch (21636:2): [True: 434, False: 535k]
  ------------------
21637|    434|#line 2106 "src/char_ref.rl"
21638|    434|	{te = p+1;{output[0]=0x22c0; {p++; goto _out; }}}
21639|      0|	break;
21640|    196|	case 2238:
  ------------------
  |  Branch (21640:2): [True: 196, False: 536k]
  ------------------
21641|    196|#line 2107 "src/char_ref.rl"
21642|    196|	{te = p+1;{output[0]=0xfd; {p++; goto _out; }}}
21643|      0|	break;
21644|    199|	case 2008:
  ------------------
  |  Branch (21644:2): [True: 199, False: 536k]
  ------------------
21645|    199|#line 2108 "src/char_ref.rl"
21646|    199|	{te = p+1;{output[0]=0x44f; {p++; goto _out; }}}
21647|      0|	break;
21648|    204|	case 2009:
  ------------------
  |  Branch (21648:2): [True: 204, False: 536k]
  ------------------
21649|    204|#line 2109 "src/char_ref.rl"
21650|    204|	{te = p+1;{output[0]=0x177; {p++; goto _out; }}}
21651|      0|	break;
21652|    212|	case 2010:
  ------------------
  |  Branch (21652:2): [True: 212, False: 536k]
  ------------------
21653|    212|#line 2110 "src/char_ref.rl"
21654|    212|	{te = p+1;{output[0]=0x44b; {p++; goto _out; }}}
21655|      0|	break;
21656|    205|	case 2240:
  ------------------
  |  Branch (21656:2): [True: 205, False: 536k]
  ------------------
21657|    205|#line 2111 "src/char_ref.rl"
21658|    205|	{te = p+1;{output[0]=0xa5; {p++; goto _out; }}}
21659|      0|	break;
21660|    308|	case 2011:
  ------------------
  |  Branch (21660:2): [True: 308, False: 536k]
  ------------------
21661|    308|#line 2112 "src/char_ref.rl"
21662|    308|	{te = p+1;{output[0]=0x1d536; {p++; goto _out; }}}
21663|      0|	break;
21664|    212|	case 2012:
  ------------------
  |  Branch (21664:2): [True: 212, False: 536k]
  ------------------
21665|    212|#line 2113 "src/char_ref.rl"
21666|    212|	{te = p+1;{output[0]=0x457; {p++; goto _out; }}}
21667|      0|	break;
21668|    346|	case 2013:
  ------------------
  |  Branch (21668:2): [True: 346, False: 535k]
  ------------------
21669|    346|#line 2114 "src/char_ref.rl"
21670|    346|	{te = p+1;{output[0]=0x1d56a; {p++; goto _out; }}}
21671|      0|	break;
21672|    244|	case 2014:
  ------------------
  |  Branch (21672:2): [True: 244, False: 536k]
  ------------------
21673|    244|#line 2115 "src/char_ref.rl"
21674|    244|	{te = p+1;{output[0]=0x1d4ce; {p++; goto _out; }}}
21675|      0|	break;
21676|    260|	case 2015:
  ------------------
  |  Branch (21676:2): [True: 260, False: 536k]
  ------------------
21677|    260|#line 2116 "src/char_ref.rl"
21678|    260|	{te = p+1;{output[0]=0x44e; {p++; goto _out; }}}
21679|      0|	break;
21680|    334|	case 2242:
  ------------------
  |  Branch (21680:2): [True: 334, False: 535k]
  ------------------
21681|    334|#line 2117 "src/char_ref.rl"
21682|    334|	{te = p+1;{output[0]=0xff; {p++; goto _out; }}}
21683|      0|	break;
21684|    277|	case 2016:
  ------------------
  |  Branch (21684:2): [True: 277, False: 536k]
  ------------------
21685|    277|#line 2118 "src/char_ref.rl"
21686|    277|	{te = p+1;{output[0]=0x17a; {p++; goto _out; }}}
21687|      0|	break;
21688|    251|	case 2017:
  ------------------
  |  Branch (21688:2): [True: 251, False: 536k]
  ------------------
21689|    251|#line 2119 "src/char_ref.rl"
21690|    251|	{te = p+1;{output[0]=0x17e; {p++; goto _out; }}}
21691|      0|	break;
21692|    221|	case 2018:
  ------------------
  |  Branch (21692:2): [True: 221, False: 536k]
  ------------------
21693|    221|#line 2120 "src/char_ref.rl"
21694|    221|	{te = p+1;{output[0]=0x437; {p++; goto _out; }}}
21695|      0|	break;
21696|    544|	case 2019:
  ------------------
  |  Branch (21696:2): [True: 544, False: 535k]
  ------------------
21697|    544|#line 2121 "src/char_ref.rl"
21698|    544|	{te = p+1;{output[0]=0x17c; {p++; goto _out; }}}
21699|      0|	break;
21700|    199|	case 2020:
  ------------------
  |  Branch (21700:2): [True: 199, False: 536k]
  ------------------
21701|    199|#line 2122 "src/char_ref.rl"
21702|    199|	{te = p+1;{output[0]=0x2128; {p++; goto _out; }}}
21703|      0|	break;
21704|    238|	case 2021:
  ------------------
  |  Branch (21704:2): [True: 238, False: 536k]
  ------------------
21705|    238|#line 2123 "src/char_ref.rl"
21706|    238|	{te = p+1;{output[0]=0x3b6; {p++; goto _out; }}}
21707|      0|	break;
21708|    279|	case 2022:
  ------------------
  |  Branch (21708:2): [True: 279, False: 536k]
  ------------------
21709|    279|#line 2124 "src/char_ref.rl"
21710|    279|	{te = p+1;{output[0]=0x1d537; {p++; goto _out; }}}
21711|      0|	break;
21712|    205|	case 2023:
  ------------------
  |  Branch (21712:2): [True: 205, False: 536k]
  ------------------
21713|    205|#line 2125 "src/char_ref.rl"
21714|    205|	{te = p+1;{output[0]=0x436; {p++; goto _out; }}}
21715|      0|	break;
21716|    208|	case 2024:
  ------------------
  |  Branch (21716:2): [True: 208, False: 536k]
  ------------------
21717|    208|#line 2126 "src/char_ref.rl"
21718|    208|	{te = p+1;{output[0]=0x21dd; {p++; goto _out; }}}
21719|      0|	break;
21720|    253|	case 2025:
  ------------------
  |  Branch (21720:2): [True: 253, False: 536k]
  ------------------
21721|    253|#line 2127 "src/char_ref.rl"
21722|    253|	{te = p+1;{output[0]=0x1d56b; {p++; goto _out; }}}
21723|      0|	break;
21724|    205|	case 2026:
  ------------------
  |  Branch (21724:2): [True: 205, False: 536k]
  ------------------
21725|    205|#line 2128 "src/char_ref.rl"
21726|    205|	{te = p+1;{output[0]=0x1d4cf; {p++; goto _out; }}}
21727|      0|	break;
21728|    275|	case 2027:
  ------------------
  |  Branch (21728:2): [True: 275, False: 536k]
  ------------------
21729|    275|#line 2129 "src/char_ref.rl"
21730|    275|	{te = p+1;{output[0]=0x200d; {p++; goto _out; }}}
21731|      0|	break;
21732|    194|	case 2028:
  ------------------
  |  Branch (21732:2): [True: 194, False: 536k]
  ------------------
21733|    194|#line 2130 "src/char_ref.rl"
21734|    194|	{te = p+1;{output[0]=0x200c; {p++; goto _out; }}}
21735|      0|	break;
21736|    267|	case 2031:
  ------------------
  |  Branch (21736:2): [True: 267, False: 536k]
  ------------------
21737|    267|#line 6 "src/char_ref.rl"
21738|    267|	{te = p;p--;{output[0]=0xc6; {p++; goto _out; }}}
21739|      0|	break;
21740|    393|	case 2033:
  ------------------
  |  Branch (21740:2): [True: 393, False: 535k]
  ------------------
21741|    393|#line 7 "src/char_ref.rl"
21742|    393|	{te = p;p--;{output[0]=0x26; {p++; goto _out; }}}
21743|      0|	break;
21744|    239|	case 2035:
  ------------------
  |  Branch (21744:2): [True: 239, False: 536k]
  ------------------
21745|    239|#line 8 "src/char_ref.rl"
21746|    239|	{te = p;p--;{output[0]=0xc1; {p++; goto _out; }}}
21747|      0|	break;
21748|    714|	case 2037:
  ------------------
  |  Branch (21748:2): [True: 714, False: 535k]
  ------------------
21749|    714|#line 10 "src/char_ref.rl"
21750|    714|	{te = p;p--;{output[0]=0xc2; {p++; goto _out; }}}
21751|      0|	break;
21752|    227|	case 2039:
  ------------------
  |  Branch (21752:2): [True: 227, False: 536k]
  ------------------
21753|    227|#line 13 "src/char_ref.rl"
21754|    227|	{te = p;p--;{output[0]=0xc0; {p++; goto _out; }}}
21755|      0|	break;
21756|    296|	case 2041:
  ------------------
  |  Branch (21756:2): [True: 296, False: 536k]
  ------------------
21757|    296|#line 20 "src/char_ref.rl"
21758|    296|	{te = p;p--;{output[0]=0xc5; {p++; goto _out; }}}
21759|      0|	break;
21760|    212|	case 2043:
  ------------------
  |  Branch (21760:2): [True: 212, False: 536k]
  ------------------
21761|    212|#line 23 "src/char_ref.rl"
21762|    212|	{te = p;p--;{output[0]=0xc3; {p++; goto _out; }}}
21763|      0|	break;
21764|    389|	case 2045:
  ------------------
  |  Branch (21764:2): [True: 389, False: 535k]
  ------------------
21765|    389|#line 24 "src/char_ref.rl"
21766|    389|	{te = p;p--;{output[0]=0xc4; {p++; goto _out; }}}
21767|      0|	break;
21768|    387|	case 2047:
  ------------------
  |  Branch (21768:2): [True: 387, False: 535k]
  ------------------
21769|    387|#line 38 "src/char_ref.rl"
21770|    387|	{te = p;p--;{output[0]=0xa9; {p++; goto _out; }}}
21771|      0|	break;
21772|    278|	case 2049:
  ------------------
  |  Branch (21772:2): [True: 278, False: 536k]
  ------------------
21773|    278|#line 44 "src/char_ref.rl"
21774|    278|	{te = p;p--;{output[0]=0xc7; {p++; goto _out; }}}
21775|      0|	break;
21776|    441|	case 2051:
  ------------------
  |  Branch (21776:2): [True: 441, False: 535k]
  ------------------
21777|    441|#line 126 "src/char_ref.rl"
21778|    441|	{te = p;p--;{output[0]=0xd0; {p++; goto _out; }}}
21779|      0|	break;
21780|    630|	case 2053:
  ------------------
  |  Branch (21780:2): [True: 630, False: 535k]
  ------------------
21781|    630|#line 127 "src/char_ref.rl"
21782|    630|	{te = p;p--;{output[0]=0xc9; {p++; goto _out; }}}
21783|      0|	break;
21784|    222|	case 2055:
  ------------------
  |  Branch (21784:2): [True: 222, False: 536k]
  ------------------
21785|    222|#line 129 "src/char_ref.rl"
21786|    222|	{te = p;p--;{output[0]=0xca; {p++; goto _out; }}}
21787|      0|	break;
21788|    197|	case 2057:
  ------------------
  |  Branch (21788:2): [True: 197, False: 536k]
  ------------------
21789|    197|#line 133 "src/char_ref.rl"
21790|    197|	{te = p;p--;{output[0]=0xc8; {p++; goto _out; }}}
21791|      0|	break;
21792|    701|	case 2059:
  ------------------
  |  Branch (21792:2): [True: 701, False: 535k]
  ------------------
21793|    701|#line 147 "src/char_ref.rl"
21794|    701|	{te = p;p--;{output[0]=0xcb; {p++; goto _out; }}}
21795|      0|	break;
21796|    489|	case 2061:
  ------------------
  |  Branch (21796:2): [True: 489, False: 535k]
  ------------------
21797|    489|#line 159 "src/char_ref.rl"
21798|    489|	{te = p;p--;{output[0]=0x3e; {p++; goto _out; }}}
21799|      0|	break;
21800|    200|	case 2063:
  ------------------
  |  Branch (21800:2): [True: 200, False: 536k]
  ------------------
21801|    200|#line 194 "src/char_ref.rl"
21802|    200|	{te = p;p--;{output[0]=0xcd; {p++; goto _out; }}}
21803|      0|	break;
21804|    249|	case 2065:
  ------------------
  |  Branch (21804:2): [True: 249, False: 536k]
  ------------------
21805|    249|#line 195 "src/char_ref.rl"
21806|    249|	{te = p;p--;{output[0]=0xce; {p++; goto _out; }}}
21807|      0|	break;
21808|    199|	case 2067:
  ------------------
  |  Branch (21808:2): [True: 199, False: 536k]
  ------------------
21809|    199|#line 199 "src/char_ref.rl"
21810|    199|	{te = p;p--;{output[0]=0xcc; {p++; goto _out; }}}
21811|      0|	break;
21812|    270|	case 2069:
  ------------------
  |  Branch (21812:2): [True: 270, False: 536k]
  ------------------
21813|    270|#line 215 "src/char_ref.rl"
21814|    270|	{te = p;p--;{output[0]=0xcf; {p++; goto _out; }}}
21815|      0|	break;
21816|    451|	case 2071:
  ------------------
  |  Branch (21816:2): [True: 451, False: 535k]
  ------------------
21817|    451|#line 232 "src/char_ref.rl"
21818|    451|	{te = p;p--;{output[0]=0x3c; {p++; goto _out; }}}
21819|      0|	break;
21820|    294|	case 2073:
  ------------------
  |  Branch (21820:2): [True: 294, False: 536k]
  ------------------
21821|    294|#line 368 "src/char_ref.rl"
21822|    294|	{te = p;p--;{output[0]=0xd1; {p++; goto _out; }}}
21823|      0|	break;
21824|    205|	case 2075:
  ------------------
  |  Branch (21824:2): [True: 205, False: 536k]
  ------------------
21825|    205|#line 371 "src/char_ref.rl"
21826|    205|	{te = p;p--;{output[0]=0xd3; {p++; goto _out; }}}
21827|      0|	break;
21828|    225|	case 2077:
  ------------------
  |  Branch (21828:2): [True: 225, False: 536k]
  ------------------
21829|    225|#line 372 "src/char_ref.rl"
21830|    225|	{te = p;p--;{output[0]=0xd4; {p++; goto _out; }}}
21831|      0|	break;
21832|    291|	case 2079:
  ------------------
  |  Branch (21832:2): [True: 291, False: 536k]
  ------------------
21833|    291|#line 376 "src/char_ref.rl"
21834|    291|	{te = p;p--;{output[0]=0xd2; {p++; goto _out; }}}
21835|      0|	break;
21836|    244|	case 2081:
  ------------------
  |  Branch (21836:2): [True: 244, False: 536k]
  ------------------
21837|    244|#line 385 "src/char_ref.rl"
21838|    244|	{te = p;p--;{output[0]=0xd8; {p++; goto _out; }}}
21839|      0|	break;
21840|    363|	case 2083:
  ------------------
  |  Branch (21840:2): [True: 363, False: 535k]
  ------------------
21841|    363|#line 386 "src/char_ref.rl"
21842|    363|	{te = p;p--;{output[0]=0xd5; {p++; goto _out; }}}
21843|      0|	break;
21844|    345|	case 2085:
  ------------------
  |  Branch (21844:2): [True: 345, False: 535k]
  ------------------
21845|    345|#line 388 "src/char_ref.rl"
21846|    345|	{te = p;p--;{output[0]=0xd6; {p++; goto _out; }}}
21847|      0|	break;
21848|    254|	case 2087:
  ------------------
  |  Branch (21848:2): [True: 254, False: 536k]
  ------------------
21849|    254|#line 412 "src/char_ref.rl"
21850|    254|	{te = p;p--;{output[0]=0x22; {p++; goto _out; }}}
21851|      0|	break;
21852|    587|	case 2089:
  ------------------
  |  Branch (21852:2): [True: 587, False: 535k]
  ------------------
21853|    587|#line 417 "src/char_ref.rl"
21854|    587|	{te = p;p--;{output[0]=0xae; {p++; goto _out; }}}
21855|      0|	break;
21856|      0|	case 2091:
  ------------------
  |  Branch (21856:2): [True: 0, False: 536k]
  ------------------
21857|      0|#line 500 "src/char_ref.rl"
21858|      0|	{te = p;p--;{output[0]=0xde; {p++; goto _out; }}}
21859|      0|	break;
21860|    334|	case 2093:
  ------------------
  |  Branch (21860:2): [True: 334, False: 535k]
  ------------------
21861|    334|#line 522 "src/char_ref.rl"
21862|    334|	{te = p;p--;{output[0]=0xda; {p++; goto _out; }}}
21863|      0|	break;
21864|    228|	case 2095:
  ------------------
  |  Branch (21864:2): [True: 228, False: 536k]
  ------------------
21865|    228|#line 527 "src/char_ref.rl"
21866|    228|	{te = p;p--;{output[0]=0xdb; {p++; goto _out; }}}
21867|      0|	break;
21868|    315|	case 2097:
  ------------------
  |  Branch (21868:2): [True: 315, False: 536k]
  ------------------
21869|    315|#line 531 "src/char_ref.rl"
21870|    315|	{te = p;p--;{output[0]=0xd9; {p++; goto _out; }}}
21871|      0|	break;
21872|    406|	case 2099:
  ------------------
  |  Branch (21872:2): [True: 406, False: 535k]
  ------------------
21873|    406|#line 557 "src/char_ref.rl"
21874|    406|	{te = p;p--;{output[0]=0xdc; {p++; goto _out; }}}
21875|      0|	break;
21876|    242|	case 2101:
  ------------------
  |  Branch (21876:2): [True: 242, False: 536k]
  ------------------
21877|    242|#line 587 "src/char_ref.rl"
21878|    242|	{te = p;p--;{output[0]=0xdd; {p++; goto _out; }}}
21879|      0|	break;
21880|    297|	case 2103:
  ------------------
  |  Branch (21880:2): [True: 297, False: 536k]
  ------------------
21881|    297|#line 604 "src/char_ref.rl"
21882|    297|	{te = p;p--;{output[0]=0xe1; {p++; goto _out; }}}
21883|      0|	break;
21884|    303|	case 2105:
  ------------------
  |  Branch (21884:2): [True: 303, False: 536k]
  ------------------
21885|    303|#line 609 "src/char_ref.rl"
21886|    303|	{te = p;p--;{output[0]=0xe2; {p++; goto _out; }}}
21887|      0|	break;
21888|    355|	case 2107:
  ------------------
  |  Branch (21888:2): [True: 355, False: 535k]
  ------------------
21889|    355|#line 610 "src/char_ref.rl"
21890|    355|	{te = p;p--;{output[0]=0xb4; {p++; goto _out; }}}
21891|      0|	break;
21892|    269|	case 2109:
  ------------------
  |  Branch (21892:2): [True: 269, False: 536k]
  ------------------
21893|    269|#line 612 "src/char_ref.rl"
21894|    269|	{te = p;p--;{output[0]=0xe6; {p++; goto _out; }}}
21895|      0|	break;
21896|    237|	case 2111:
  ------------------
  |  Branch (21896:2): [True: 237, False: 536k]
  ------------------
21897|    237|#line 615 "src/char_ref.rl"
21898|    237|	{te = p;p--;{output[0]=0xe0; {p++; goto _out; }}}
21899|      0|	break;
21900|    428|	case 2113:
  ------------------
  |  Branch (21900:2): [True: 428, False: 535k]
  ------------------
21901|    428|#line 621 "src/char_ref.rl"
21902|    428|	{te = p;p--;{output[0]=0x26; {p++; goto _out; }}}
21903|      0|	break;
21904|    216|	case 2115:
  ------------------
  |  Branch (21904:2): [True: 216, False: 536k]
  ------------------
21905|    216|#line 655 "src/char_ref.rl"
21906|    216|	{te = p;p--;{output[0]=0xe5; {p++; goto _out; }}}
21907|      0|	break;
21908|    535|	case 2117:
  ------------------
  |  Branch (21908:2): [True: 535, False: 535k]
  ------------------
21909|    535|#line 660 "src/char_ref.rl"
21910|    535|	{te = p;p--;{output[0]=0xe3; {p++; goto _out; }}}
21911|      0|	break;
21912|    267|	case 2119:
  ------------------
  |  Branch (21912:2): [True: 267, False: 536k]
  ------------------
21913|    267|#line 661 "src/char_ref.rl"
21914|    267|	{te = p;p--;{output[0]=0xe4; {p++; goto _out; }}}
21915|      0|	break;
21916|    246|	case 2121:
  ------------------
  |  Branch (21916:2): [True: 246, False: 536k]
  ------------------
21917|    246|#line 765 "src/char_ref.rl"
21918|    246|	{te = p;p--;{output[0]=0xa6; {p++; goto _out; }}}
21919|      0|	break;
21920|    303|	case 2123:
  ------------------
  |  Branch (21920:2): [True: 303, False: 536k]
  ------------------
21921|    303|#line 791 "src/char_ref.rl"
21922|    303|	{te = p;p--;{output[0]=0xe7; {p++; goto _out; }}}
21923|      0|	break;
21924|    313|	case 2125:
  ------------------
  |  Branch (21924:2): [True: 313, False: 536k]
  ------------------
21925|    313|#line 796 "src/char_ref.rl"
21926|    313|	{te = p;p--;{output[0]=0xb8; {p++; goto _out; }}}
21927|      0|	break;
21928|    257|	case 2127:
  ------------------
  |  Branch (21928:2): [True: 257, False: 536k]
  ------------------
21929|    257|#line 798 "src/char_ref.rl"
21930|    257|	{te = p;p--;{output[0]=0xa2; {p++; goto _out; }}}
21931|      0|	break;
21932|    282|	case 2129:
  ------------------
  |  Branch (21932:2): [True: 282, False: 536k]
  ------------------
21933|    282|#line 836 "src/char_ref.rl"
21934|    282|	{te = p;p--;{output[0]=0xa9; {p++; goto _out; }}}
21935|      0|	break;
21936|    286|	case 2131:
  ------------------
  |  Branch (21936:2): [True: 286, False: 536k]
  ------------------
21937|    286|#line 865 "src/char_ref.rl"
21938|    286|	{te = p;p--;{output[0]=0xa4; {p++; goto _out; }}}
21939|      0|	break;
21940|    396|	case 2133:
  ------------------
  |  Branch (21940:2): [True: 396, False: 535k]
  ------------------
21941|    396|#line 888 "src/char_ref.rl"
21942|    396|	{te = p;p--;{output[0]=0xb0; {p++; goto _out; }}}
21943|      0|	break;
21944|    316|	case 2135:
  ------------------
  |  Branch (21944:2): [True: 316, False: 536k]
  ------------------
21945|    316|#line 903 "src/char_ref.rl"
21946|    316|	{te = p;p--;{output[0]=0xf7; {p++; goto _out; }}}
21947|      0|	break;
21948|    216|	case 2137:
  ------------------
  |  Branch (21948:2): [True: 216, False: 536k]
  ------------------
21949|    216|#line 939 "src/char_ref.rl"
21950|    216|	{te = p;p--;{output[0]=0xe9; {p++; goto _out; }}}
21951|      0|	break;
21952|    406|	case 2139:
  ------------------
  |  Branch (21952:2): [True: 406, False: 535k]
  ------------------
21953|    406|#line 943 "src/char_ref.rl"
21954|    406|	{te = p;p--;{output[0]=0xea; {p++; goto _out; }}}
21955|      0|	break;
21956|    280|	case 2141:
  ------------------
  |  Branch (21956:2): [True: 280, False: 536k]
  ------------------
21957|    280|#line 951 "src/char_ref.rl"
21958|    280|	{te = p;p--;{output[0]=0xe8; {p++; goto _out; }}}
21959|      0|	break;
21960|    322|	case 2143:
  ------------------
  |  Branch (21960:2): [True: 322, False: 536k]
  ------------------
21961|    322|#line 992 "src/char_ref.rl"
21962|    322|	{te = p;p--;{output[0]=0xf0; {p++; goto _out; }}}
21963|      0|	break;
21964|    227|	case 2145:
  ------------------
  |  Branch (21964:2): [True: 227, False: 536k]
  ------------------
21965|    227|#line 993 "src/char_ref.rl"
21966|    227|	{te = p;p--;{output[0]=0xeb; {p++; goto _out; }}}
21967|      0|	break;
21968|    298|	case 2147:
  ------------------
  |  Branch (21968:2): [True: 298, False: 536k]
  ------------------
21969|    298|#line 1017 "src/char_ref.rl"
21970|    298|	{te = p;p--;{output[0]=0xbd; {p++; goto _out; }}}
21971|      0|	break;
21972|    197|	case 2149:
  ------------------
  |  Branch (21972:2): [True: 197, False: 536k]
  ------------------
21973|    197|#line 1019 "src/char_ref.rl"
21974|    197|	{te = p;p--;{output[0]=0xbc; {p++; goto _out; }}}
21975|      0|	break;
21976|    274|	case 2151:
  ------------------
  |  Branch (21976:2): [True: 274, False: 536k]
  ------------------
21977|    274|#line 1025 "src/char_ref.rl"
21978|    274|	{te = p;p--;{output[0]=0xbe; {p++; goto _out; }}}
21979|      0|	break;
21980|  1.39k|	case 2153:
  ------------------
  |  Branch (21980:2): [True: 1.39k, False: 534k]
  ------------------
21981|  1.39k|#line 1079 "src/char_ref.rl"
21982|  1.39k|	{te = p;p--;{output[0]=0x3e; {p++; goto _out; }}}
21983|      0|	break;
21984|    201|	case 2155:
  ------------------
  |  Branch (21984:2): [True: 201, False: 536k]
  ------------------
21985|    201|#line 1122 "src/char_ref.rl"
21986|    201|	{te = p;p--;{output[0]=0xed; {p++; goto _out; }}}
21987|      0|	break;
21988|    230|	case 2157:
  ------------------
  |  Branch (21988:2): [True: 230, False: 536k]
  ------------------
21989|    230|#line 1124 "src/char_ref.rl"
21990|    230|	{te = p;p--;{output[0]=0xee; {p++; goto _out; }}}
21991|      0|	break;
21992|    488|	case 2159:
  ------------------
  |  Branch (21992:2): [True: 488, False: 535k]
  ------------------
21993|    488|#line 1127 "src/char_ref.rl"
21994|    488|	{te = p;p--;{output[0]=0xa1; {p++; goto _out; }}}
21995|      0|	break;
21996|    357|	case 2161:
  ------------------
  |  Branch (21996:2): [True: 357, False: 535k]
  ------------------
21997|    357|#line 1130 "src/char_ref.rl"
21998|    357|	{te = p;p--;{output[0]=0xec; {p++; goto _out; }}}
21999|      0|	break;
22000|    215|	case 2163:
  ------------------
  |  Branch (22000:2): [True: 215, False: 536k]
  ------------------
22001|    215|#line 1160 "src/char_ref.rl"
22002|    215|	{te = p;p--;{output[0]=0xbf; {p++; goto _out; }}}
22003|      0|	break;
22004|    345|	case 2165:
  ------------------
  |  Branch (22004:2): [True: 345, False: 535k]
  ------------------
22005|    345|#line 1171 "src/char_ref.rl"
22006|    345|	{te = p;p--;{output[0]=0xef; {p++; goto _out; }}}
22007|      0|	break;
22008|    220|	case 2167:
  ------------------
  |  Branch (22008:2): [True: 220, False: 536k]
  ------------------
22009|    220|#line 1205 "src/char_ref.rl"
22010|    220|	{te = p;p--;{output[0]=0xab; {p++; goto _out; }}}
22011|      0|	break;
22012|  1.94k|	case 2169:
  ------------------
  |  Branch (22012:2): [True: 1.94k, False: 534k]
  ------------------
22013|  1.94k|#line 1326 "src/char_ref.rl"
22014|  1.94k|	{te = p;p--;{output[0]=0x3c; {p++; goto _out; }}}
22015|      0|	break;
22016|    238|	case 2171:
  ------------------
  |  Branch (22016:2): [True: 238, False: 536k]
  ------------------
22017|    238|#line 1343 "src/char_ref.rl"
22018|    238|	{te = p;p--;{output[0]=0xaf; {p++; goto _out; }}}
22019|      0|	break;
22020|    316|	case 2173:
  ------------------
  |  Branch (22020:2): [True: 316, False: 536k]
  ------------------
22021|    316|#line 1359 "src/char_ref.rl"
22022|    316|	{te = p;p--;{output[0]=0xb5; {p++; goto _out; }}}
22023|      0|	break;
22024|    508|	case 2175:
  ------------------
  |  Branch (22024:2): [True: 508, False: 535k]
  ------------------
22025|    508|#line 1363 "src/char_ref.rl"
22026|    508|	{te = p;p--;{output[0]=0xb7; {p++; goto _out; }}}
22027|      0|	break;
22028|    265|	case 2177:
  ------------------
  |  Branch (22028:2): [True: 265, False: 536k]
  ------------------
22029|    265|#line 1401 "src/char_ref.rl"
22030|    265|	{te = p;p--;{output[0]=0xa0; {p++; goto _out; }}}
22031|      0|	break;
22032|  1.16k|	case 2179:
  ------------------
  |  Branch (22032:2): [True: 1.16k, False: 535k]
  ------------------
22033|  1.16k|#line 1459 "src/char_ref.rl"
22034|  1.16k|	{te = p;p--;{output[0]=0xac; {p++; goto _out; }}}
22035|      0|	break;
22036|    203|	case 2181:
  ------------------
  |  Branch (22036:2): [True: 203, False: 536k]
  ------------------
22037|    203|#line 1515 "src/char_ref.rl"
22038|    203|	{te = p;p--;{output[0]=0xf1; {p++; goto _out; }}}
22039|      0|	break;
22040|    409|	case 2183:
  ------------------
  |  Branch (22040:2): [True: 409, False: 535k]
  ------------------
22041|    409|#line 1545 "src/char_ref.rl"
22042|    409|	{te = p;p--;{output[0]=0xf3; {p++; goto _out; }}}
22043|      0|	break;
22044|    204|	case 2185:
  ------------------
  |  Branch (22044:2): [True: 204, False: 536k]
  ------------------
22045|    204|#line 1548 "src/char_ref.rl"
22046|    204|	{te = p;p--;{output[0]=0xf4; {p++; goto _out; }}}
22047|      0|	break;
22048|    201|	case 2187:
  ------------------
  |  Branch (22048:2): [True: 201, False: 536k]
  ------------------
22049|    201|#line 1559 "src/char_ref.rl"
22050|    201|	{te = p;p--;{output[0]=0xf2; {p++; goto _out; }}}
22051|      0|	break;
22052|    232|	case 2189:
  ------------------
  |  Branch (22052:2): [True: 232, False: 536k]
  ------------------
22053|    232|#line 1583 "src/char_ref.rl"
22054|    232|	{te = p;p--;{output[0]=0xaa; {p++; goto _out; }}}
22055|      0|	break;
22056|    270|	case 2191:
  ------------------
  |  Branch (22056:2): [True: 270, False: 536k]
  ------------------
22057|    270|#line 1584 "src/char_ref.rl"
22058|    270|	{te = p;p--;{output[0]=0xba; {p++; goto _out; }}}
22059|      0|	break;
22060|    381|	case 2193:
  ------------------
  |  Branch (22060:2): [True: 381, False: 535k]
  ------------------
22061|    381|#line 1590 "src/char_ref.rl"
22062|    381|	{te = p;p--;{output[0]=0xf8; {p++; goto _out; }}}
22063|      0|	break;
22064|    410|	case 2195:
  ------------------
  |  Branch (22064:2): [True: 410, False: 535k]
  ------------------
22065|    410|#line 1592 "src/char_ref.rl"
22066|    410|	{te = p;p--;{output[0]=0xf5; {p++; goto _out; }}}
22067|      0|	break;
22068|    323|	case 2197:
  ------------------
  |  Branch (22068:2): [True: 323, False: 536k]
  ------------------
22069|    323|#line 1595 "src/char_ref.rl"
22070|    323|	{te = p;p--;{output[0]=0xf6; {p++; goto _out; }}}
22071|      0|	break;
22072|    636|	case 2199:
  ------------------
  |  Branch (22072:2): [True: 636, False: 535k]
  ------------------
22073|    636|#line 1598 "src/char_ref.rl"
22074|    636|	{te = p;p--;{output[0]=0xb6; {p++; goto _out; }}}
22075|      0|	break;
22076|    514|	case 2201:
  ------------------
  |  Branch (22076:2): [True: 514, False: 535k]
  ------------------
22077|    514|#line 1627 "src/char_ref.rl"
22078|    514|	{te = p;p--;{output[0]=0xb1; {p++; goto _out; }}}
22079|      0|	break;
22080|    242|	case 2203:
  ------------------
  |  Branch (22080:2): [True: 242, False: 536k]
  ------------------
22081|    242|#line 1633 "src/char_ref.rl"
22082|    242|	{te = p;p--;{output[0]=0xa3; {p++; goto _out; }}}
22083|      0|	break;
22084|    223|	case 2205:
  ------------------
  |  Branch (22084:2): [True: 223, False: 536k]
  ------------------
22085|    223|#line 1672 "src/char_ref.rl"
22086|    223|	{te = p;p--;{output[0]=0x22; {p++; goto _out; }}}
22087|      0|	break;
22088|    378|	case 2207:
  ------------------
  |  Branch (22088:2): [True: 378, False: 535k]
  ------------------
22089|    378|#line 1686 "src/char_ref.rl"
22090|    378|	{te = p;p--;{output[0]=0xbb; {p++; goto _out; }}}
22091|      0|	break;
22092|    214|	case 2209:
  ------------------
  |  Branch (22092:2): [True: 214, False: 536k]
  ------------------
22093|    214|#line 1724 "src/char_ref.rl"
22094|    214|	{te = p;p--;{output[0]=0xae; {p++; goto _out; }}}
22095|      0|	break;
22096|    294|	case 2211:
  ------------------
  |  Branch (22096:2): [True: 294, False: 536k]
  ------------------
22097|    294|#line 1798 "src/char_ref.rl"
22098|    294|	{te = p;p--;{output[0]=0xa7; {p++; goto _out; }}}
22099|      0|	break;
22100|    225|	case 2213:
  ------------------
  |  Branch (22100:2): [True: 225, False: 536k]
  ------------------
22101|    225|#line 1811 "src/char_ref.rl"
22102|    225|	{te = p;p--;{output[0]=0xad; {p++; goto _out; }}}
22103|      0|	break;
22104|    237|	case 2215:
  ------------------
  |  Branch (22104:2): [True: 237, False: 536k]
  ------------------
22105|    237|#line 1897 "src/char_ref.rl"
22106|    237|	{te = p;p--;{output[0]=0xb9; {p++; goto _out; }}}
22107|      0|	break;
22108|    277|	case 2217:
  ------------------
  |  Branch (22108:2): [True: 277, False: 536k]
  ------------------
22109|    277|#line 1898 "src/char_ref.rl"
22110|    277|	{te = p;p--;{output[0]=0xb2; {p++; goto _out; }}}
22111|      0|	break;
22112|    436|	case 2219:
  ------------------
  |  Branch (22112:2): [True: 436, False: 535k]
  ------------------
22113|    436|#line 1899 "src/char_ref.rl"
22114|    436|	{te = p;p--;{output[0]=0xb3; {p++; goto _out; }}}
22115|      0|	break;
22116|    229|	case 2221:
  ------------------
  |  Branch (22116:2): [True: 229, False: 536k]
  ------------------
22117|    229|#line 1926 "src/char_ref.rl"
22118|    229|	{te = p;p--;{output[0]=0xdf; {p++; goto _out; }}}
22119|      0|	break;
22120|    203|	case 2223:
  ------------------
  |  Branch (22120:2): [True: 203, False: 536k]
  ------------------
22121|    203|#line 1946 "src/char_ref.rl"
22122|    203|	{te = p;p--;{output[0]=0xfe; {p++; goto _out; }}}
22123|      0|	break;
22124|    331|	case 2225:
  ------------------
  |  Branch (22124:2): [True: 331, False: 535k]
  ------------------
22125|    331|#line 1948 "src/char_ref.rl"
22126|    331|	{te = p;p--;{output[0]=0xd7; {p++; goto _out; }}}
22127|      0|	break;
22128|    352|	case 2227:
  ------------------
  |  Branch (22128:2): [True: 352, False: 535k]
  ------------------
22129|    352|#line 1985 "src/char_ref.rl"
22130|    352|	{te = p;p--;{output[0]=0xfa; {p++; goto _out; }}}
22131|      0|	break;
22132|    211|	case 2229:
  ------------------
  |  Branch (22132:2): [True: 211, False: 536k]
  ------------------
22133|    211|#line 1989 "src/char_ref.rl"
22134|    211|	{te = p;p--;{output[0]=0xfb; {p++; goto _out; }}}
22135|      0|	break;
22136|    337|	case 2231:
  ------------------
  |  Branch (22136:2): [True: 337, False: 535k]
  ------------------
22137|    337|#line 1996 "src/char_ref.rl"
22138|    337|	{te = p;p--;{output[0]=0xf9; {p++; goto _out; }}}
22139|      0|	break;
22140|    275|	case 2233:
  ------------------
  |  Branch (22140:2): [True: 275, False: 536k]
  ------------------
22141|    275|#line 2005 "src/char_ref.rl"
22142|    275|	{te = p;p--;{output[0]=0xa8; {p++; goto _out; }}}
22143|      0|	break;
22144|    294|	case 2235:
  ------------------
  |  Branch (22144:2): [True: 294, False: 536k]
  ------------------
22145|    294|#line 2028 "src/char_ref.rl"
22146|    294|	{te = p;p--;{output[0]=0xfc; {p++; goto _out; }}}
22147|      0|	break;
22148|    211|	case 2237:
  ------------------
  |  Branch (22148:2): [True: 211, False: 536k]
  ------------------
22149|    211|#line 2107 "src/char_ref.rl"
22150|    211|	{te = p;p--;{output[0]=0xfd; {p++; goto _out; }}}
22151|      0|	break;
22152|    331|	case 2239:
  ------------------
  |  Branch (22152:2): [True: 331, False: 535k]
  ------------------
22153|    331|#line 2111 "src/char_ref.rl"
22154|    331|	{te = p;p--;{output[0]=0xa5; {p++; goto _out; }}}
22155|      0|	break;
22156|    258|	case 2241:
  ------------------
  |  Branch (22156:2): [True: 258, False: 536k]
  ------------------
22157|    258|#line 2117 "src/char_ref.rl"
22158|    258|	{te = p;p--;{output[0]=0xff; {p++; goto _out; }}}
22159|      0|	break;
22160|    256|	case 746:
  ------------------
  |  Branch (22160:2): [True: 256, False: 536k]
  ------------------
22161|    256|#line 798 "src/char_ref.rl"
22162|    256|	{{p = ((te))-1;}{output[0]=0xa2; {p++; goto _out; }}}
22163|      0|	break;
22164|    245|	case 784:
  ------------------
  |  Branch (22164:2): [True: 245, False: 536k]
  ------------------
22165|    245|#line 836 "src/char_ref.rl"
22166|    245|	{{p = ((te))-1;}{output[0]=0xa9; {p++; goto _out; }}}
22167|      0|	break;
22168|    676|	case 849:
  ------------------
  |  Branch (22168:2): [True: 676, False: 535k]
  ------------------
22169|    676|#line 903 "src/char_ref.rl"
22170|    676|	{{p = ((te))-1;}{output[0]=0xf7; {p++; goto _out; }}}
22171|      0|	break;
22172|  1.33k|	case 1017:
  ------------------
  |  Branch (22172:2): [True: 1.33k, False: 534k]
  ------------------
22173|  1.33k|#line 1079 "src/char_ref.rl"
22174|  1.33k|	{{p = ((te))-1;}{output[0]=0x3e; {p++; goto _out; }}}
22175|      0|	break;
22176|  1.03k|	case 1257:
  ------------------
  |  Branch (22176:2): [True: 1.03k, False: 535k]
  ------------------
22177|  1.03k|#line 1326 "src/char_ref.rl"
22178|  1.03k|	{{p = ((te))-1;}{output[0]=0x3c; {p++; goto _out; }}}
22179|      0|	break;
22180|    664|	case 1386:
  ------------------
  |  Branch (22180:2): [True: 664, False: 535k]
  ------------------
22181|    664|#line 1459 "src/char_ref.rl"
22182|    664|	{{p = ((te))-1;}{output[0]=0xac; {p++; goto _out; }}}
22183|      0|	break;
22184|    303|	case 1516:
  ------------------
  |  Branch (22184:2): [True: 303, False: 536k]
  ------------------
22185|    303|#line 1598 "src/char_ref.rl"
22186|    303|	{{p = ((te))-1;}{output[0]=0xb6; {p++; goto _out; }}}
22187|      0|	break;
22188|    322|	case 1854:
  ------------------
  |  Branch (22188:2): [True: 322, False: 536k]
  ------------------
22189|    322|#line 1948 "src/char_ref.rl"
22190|    322|	{{p = ((te))-1;}{output[0]=0xd7; {p++; goto _out; }}}
22191|      0|	break;
22192|   536k|#line 22193 "src/char_ref.c"
22193|   536k|	}
22194|       |
22195|  3.74M|_again:
22196|  3.74M|	switch ( _to_state_actions[cs] ) {
  ------------------
  |  Branch (22196:11): [True: 0, False: 3.74M]
  ------------------
22197|      0|	case 2029:
  ------------------
  |  Branch (22197:2): [True: 0, False: 3.74M]
  ------------------
22198|      0|#line 1 "NONE"
22199|      0|	{ts = 0;}
22200|      0|	break;
22201|  3.74M|#line 22202 "src/char_ref.c"
22202|  3.74M|	}
22203|       |
22204|  3.74M|	if ( cs == 0 )
  ------------------
  |  Branch (22204:7): [True: 371k, False: 3.37M]
  ------------------
22205|   371k|		goto _out;
22206|  3.37M|	if ( ++p != pe )
  ------------------
  |  Branch (22206:7): [True: 3.37M, False: 1.37k]
  ------------------
22207|  3.37M|		goto _resume;
22208|  1.37k|	_test_eof: {}
22209|  1.37k|	if ( p == eof )
  ------------------
  |  Branch (22209:7): [True: 1.37k, False: 0]
  ------------------
22210|  1.37k|	{
22211|  1.37k|	if ( _eof_trans[cs] > 0 ) {
  ------------------
  |  Branch (22211:7): [True: 176, False: 1.19k]
  ------------------
22212|    176|		_trans = _eof_trans[cs] - 1;
22213|    176|		goto _eof_trans;
22214|    176|	}
22215|  1.37k|	}
22216|       |
22217|   885k|	_out: {}
22218|   885k|	}
22219|       |
22220|      0|#line 2150 "src/char_ref.rl"
22221|      0|  (void)ts;
22222|   885k|  (void)act;
22223|   885k|  size = p - str;
22224|   885k|  return cs >= 7623? size:0;
  ------------------
  |  Branch (22224:10): [True: 513k, False: 372k]
  ------------------
22225|  1.37k|}

gumbo_add_error:
  420|  4.99M|GumboError* gumbo_add_error(GumboParser* parser) {
  421|  4.99M|  parser->_output->document_error = true;
  422|       |
  423|  4.99M|  int max_errors = parser->_options->max_errors;
  424|  4.99M|  if (max_errors >= 0 && parser->_output->errors.length >= (unsigned int) max_errors) {
  ------------------
  |  Branch (424:7): [True: 0, False: 4.99M]
  |  Branch (424:26): [True: 0, False: 0]
  ------------------
  425|      0|    return NULL;
  426|      0|  }
  427|  4.99M|  GumboError* error = gumbo_alloc(sizeof(GumboError));
  428|  4.99M|  gumbo_vector_add(error, &parser->_output->errors);
  429|  4.99M|  return error;
  430|  4.99M|}
gumbo_error_position:
  432|   261k|GumboSourcePosition gumbo_error_position(const GumboError* error) {
  433|   261k|  return error->position;
  434|   261k|}
gumbo_error_code:
  436|   261k|const char* gumbo_error_code(const GumboError* error) {
  437|   261k|  switch (error->type) {
  ------------------
  |  Branch (437:11): [True: 261k, False: 0]
  ------------------
  438|       |  // Defined tokenizer errors.
  439|    228|  case GUMBO_ERR_ABRUPT_CLOSING_OF_EMPTY_COMMENT:
  ------------------
  |  Branch (439:3): [True: 228, False: 261k]
  ------------------
  440|    228|    return "abrupt-closing-of-empty-comment";
  441|     57|  case GUMBO_ERR_ABRUPT_DOCTYPE_PUBLIC_IDENTIFIER:
  ------------------
  |  Branch (441:3): [True: 57, False: 261k]
  ------------------
  442|     57|    return "abrupt-doctype-public-identifier";
  443|    136|  case GUMBO_ERR_ABRUPT_DOCTYPE_SYSTEM_IDENTIFIER:
  ------------------
  |  Branch (443:3): [True: 136, False: 261k]
  ------------------
  444|    136|    return "abrupt-doctype-system-identifier";
  445|    433|  case GUMBO_ERR_ABSENCE_OF_DIGITS_IN_NUMERIC_CHARACTER_REFERENCE:
  ------------------
  |  Branch (445:3): [True: 433, False: 261k]
  ------------------
  446|    433|    return "absence-of-digits-in-numeric-character-reference";
  447|     80|  case GUMBO_ERR_CDATA_IN_HTML_CONTENT:
  ------------------
  |  Branch (447:3): [True: 80, False: 261k]
  ------------------
  448|     80|    return "cdata-in-html-content";
  449|    118|  case GUMBO_ERR_CHARACTER_REFERENCE_OUTSIDE_UNICODE_RANGE:
  ------------------
  |  Branch (449:3): [True: 118, False: 261k]
  ------------------
  450|    118|    return "character-reference-outside-unicode-range";
  451|  19.0k|  case GUMBO_ERR_CONTROL_CHARACTER_IN_INPUT_STREAM:
  ------------------
  |  Branch (451:3): [True: 19.0k, False: 242k]
  ------------------
  452|  19.0k|    return "control-character-in-input-stream";
  453|    386|  case GUMBO_ERR_CONTROL_CHARACTER_REFERENCE:
  ------------------
  |  Branch (453:3): [True: 386, False: 261k]
  ------------------
  454|    386|    return "control-character-reference";
  455|    334|  case GUMBO_ERR_END_TAG_WITH_ATTRIBUTES:
  ------------------
  |  Branch (455:3): [True: 334, False: 261k]
  ------------------
  456|    334|    return "end-tag-with-attributes";
  457|    682|  case GUMBO_ERR_DUPLICATE_ATTRIBUTE:
  ------------------
  |  Branch (457:3): [True: 682, False: 261k]
  ------------------
  458|    682|    return "duplicate-attribute";
  459|    144|  case GUMBO_ERR_END_TAG_WITH_TRAILING_SOLIDUS:
  ------------------
  |  Branch (459:3): [True: 144, False: 261k]
  ------------------
  460|    144|    return "end-tag-with-trailing-solidus";
  461|    404|  case GUMBO_ERR_EOF_BEFORE_TAG_NAME:
  ------------------
  |  Branch (461:3): [True: 404, False: 261k]
  ------------------
  462|    404|    return "eof-before-tag-name";
  463|     84|  case GUMBO_ERR_EOF_IN_CDATA:
  ------------------
  |  Branch (463:3): [True: 84, False: 261k]
  ------------------
  464|     84|    return "eof-in-cdata";
  465|    265|  case GUMBO_ERR_EOF_IN_COMMENT:
  ------------------
  |  Branch (465:3): [True: 265, False: 261k]
  ------------------
  466|    265|    return "eof-in-comment";
  467|    519|  case GUMBO_ERR_EOF_IN_DOCTYPE:
  ------------------
  |  Branch (467:3): [True: 519, False: 261k]
  ------------------
  468|    519|    return "eof-in-doctype";
  469|    684|  case GUMBO_ERR_EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT:
  ------------------
  |  Branch (469:3): [True: 684, False: 261k]
  ------------------
  470|    684|    return "eof-in-script-html-comment-like-text";
  471|  1.32k|  case GUMBO_ERR_EOF_IN_TAG:
  ------------------
  |  Branch (471:3): [True: 1.32k, False: 260k]
  ------------------
  472|  1.32k|    return "eof-in-tag";
  473|     49|  case GUMBO_ERR_INCORRECTLY_CLOSED_COMMENT:
  ------------------
  |  Branch (473:3): [True: 49, False: 261k]
  ------------------
  474|     49|    return "incorrectly-closed-comment";
  475|  1.51k|  case GUMBO_ERR_INCORRECTLY_OPENED_COMMENT:
  ------------------
  |  Branch (475:3): [True: 1.51k, False: 260k]
  ------------------
  476|  1.51k|    return "incorrectly-opened-comment";
  477|    266|  case GUMBO_ERR_INVALID_CHARACTER_SEQUENCE_AFTER_DOCTYPE_NAME:
  ------------------
  |  Branch (477:3): [True: 266, False: 261k]
  ------------------
  478|    266|    return "invalid-character-sequence-after-doctype-name";
  479|  9.83k|  case GUMBO_ERR_INVALID_FIRST_CHARACTER_OF_TAG_NAME:
  ------------------
  |  Branch (479:3): [True: 9.83k, False: 252k]
  ------------------
  480|  9.83k|    return "invalid-first-character-of-tag-name";
  481|     85|  case GUMBO_ERR_MISSING_ATTRIBUTE_VALUE:
  ------------------
  |  Branch (481:3): [True: 85, False: 261k]
  ------------------
  482|     85|    return "missing-attribute-value";
  483|    168|  case GUMBO_ERR_MISSING_DOCTYPE_NAME:
  ------------------
  |  Branch (483:3): [True: 168, False: 261k]
  ------------------
  484|    168|    return "missing-doctype-name";
  485|     73|  case GUMBO_ERR_MISSING_DOCTYPE_PUBLIC_IDENTIFIER:
  ------------------
  |  Branch (485:3): [True: 73, False: 261k]
  ------------------
  486|     73|    return "missing-doctype-public-identifier";
  487|    114|  case GUMBO_ERR_MISSING_DOCTYPE_SYSTEM_IDENTIFIER:
  ------------------
  |  Branch (487:3): [True: 114, False: 261k]
  ------------------
  488|    114|    return "missing-doctype-system-identifier";
  489|    107|  case GUMBO_ERR_MISSING_END_TAG_NAME:
  ------------------
  |  Branch (489:3): [True: 107, False: 261k]
  ------------------
  490|    107|    return "missing-end-tag-name";
  491|    114|  case GUMBO_ERR_MISSING_QUOTE_BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:
  ------------------
  |  Branch (491:3): [True: 114, False: 261k]
  ------------------
  492|    114|    return "missing-quote-before-doctype-public-identifier";
  493|    250|  case GUMBO_ERR_MISSING_QUOTE_BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:
  ------------------
  |  Branch (493:3): [True: 250, False: 261k]
  ------------------
  494|    250|    return "missing-quote-before-doctype-system-identifier";
  495|  5.24k|  case GUMBO_ERR_MISSING_SEMICOLON_AFTER_CHARACTER_REFERENCE:
  ------------------
  |  Branch (495:3): [True: 5.24k, False: 256k]
  ------------------
  496|  5.24k|    return "missing-semicolon-after-character-reference";
  497|    435|  case GUMBO_ERR_MISSING_WHITESPACE_AFTER_DOCTYPE_PUBLIC_KEYWORD:
  ------------------
  |  Branch (497:3): [True: 435, False: 261k]
  ------------------
  498|    435|    return "missing-whitespace-after-doctype-public-keyword";
  499|    266|  case GUMBO_ERR_MISSING_WHITESPACE_AFTER_DOCTYPE_SYSTEM_KEYWORD:
  ------------------
  |  Branch (499:3): [True: 266, False: 261k]
  ------------------
  500|    266|    return "missing-whitespace-after-doctype-system-keyword";
  501|  2.07k|  case GUMBO_ERR_MISSING_WHITESPACE_BEFORE_DOCTYPE_NAME:
  ------------------
  |  Branch (501:3): [True: 2.07k, False: 259k]
  ------------------
  502|  2.07k|    return "missing-whitespace-before-doctype-name";
  503|    201|  case GUMBO_ERR_MISSING_WHITESPACE_BETWEEN_ATTRIBUTES:
  ------------------
  |  Branch (503:3): [True: 201, False: 261k]
  ------------------
  504|    201|    return "missing-whitespace-between-attributes";
  505|     87|  case GUMBO_ERR_MISSING_WHITESPACE_BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:
  ------------------
  |  Branch (505:3): [True: 87, False: 261k]
  ------------------
  506|     87|    return "missing-whitespace-between-doctype-public-and-system-identifiers";
  507|    155|  case GUMBO_ERR_NESTED_COMMENT:
  ------------------
  |  Branch (507:3): [True: 155, False: 261k]
  ------------------
  508|    155|    return "nested-comment";
  509|    105|  case GUMBO_ERR_NONCHARACTER_CHARACTER_REFERENCE:
  ------------------
  |  Branch (509:3): [True: 105, False: 261k]
  ------------------
  510|    105|    return "noncharacter-character-reference";
  511|    290|  case GUMBO_ERR_NONCHARACTER_IN_INPUT_STREAM:
  ------------------
  |  Branch (511:3): [True: 290, False: 261k]
  ------------------
  512|    290|    return "noncharacter-in-input-stream";
  513|    186|  case GUMBO_ERR_NON_VOID_HTML_ELEMENT_START_TAG_WITH_TRAILING_SOLIDUS:
  ------------------
  |  Branch (513:3): [True: 186, False: 261k]
  ------------------
  514|    186|    return "non-void-html-element-start-tag-with-trailing-solidus";
  515|    115|  case GUMBO_ERR_NULL_CHARACTER_REFERENCE:
  ------------------
  |  Branch (515:3): [True: 115, False: 261k]
  ------------------
  516|    115|    return "null-character-reference";
  517|     79|  case GUMBO_ERR_SURROGATE_CHARACTER_REFERENCE:
  ------------------
  |  Branch (517:3): [True: 79, False: 261k]
  ------------------
  518|     79|    return "surrogate-character-reference";
  519|      0|  case GUMBO_ERR_SURROGATE_IN_INPUT_STREAM:
  ------------------
  |  Branch (519:3): [True: 0, False: 261k]
  ------------------
  520|      0|    return "surrogate-in-input-stream";
  521|    112|  case GUMBO_ERR_UNEXPECTED_CHARACTER_AFTER_DOCTYPE_SYSTEM_IDENTIFIER:
  ------------------
  |  Branch (521:3): [True: 112, False: 261k]
  ------------------
  522|    112|    return "unexpected-character-after-doctype-system-identifier";
  523|  1.61k|  case GUMBO_ERR_UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME:
  ------------------
  |  Branch (523:3): [True: 1.61k, False: 260k]
  ------------------
  524|  1.61k|    return "unexpected-character-in-attribute-name";
  525|    883|  case GUMBO_ERR_UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE:
  ------------------
  |  Branch (525:3): [True: 883, False: 261k]
  ------------------
  526|    883|    return "unexpected-character-in-unquoted-attribute-value";
  527|    253|  case GUMBO_ERR_UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME:
  ------------------
  |  Branch (527:3): [True: 253, False: 261k]
  ------------------
  528|    253|    return "unexpected-equals-sign-before-attribute-name";
  529|  39.6k|  case GUMBO_ERR_UNEXPECTED_NULL_CHARACTER:
  ------------------
  |  Branch (529:3): [True: 39.6k, False: 222k]
  ------------------
  530|  39.6k|    return "unexpected-null-character";
  531|    291|  case GUMBO_ERR_UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME:
  ------------------
  |  Branch (531:3): [True: 291, False: 261k]
  ------------------
  532|    291|    return "unexpected-question-mark-instead-of-tag-name";
  533|  2.78k|  case GUMBO_ERR_UNEXPECTED_SOLIDUS_IN_TAG:
  ------------------
  |  Branch (533:3): [True: 2.78k, False: 259k]
  ------------------
  534|  2.78k|    return "unexpected-solidus-in-tag";
  535|  8.01k|  case GUMBO_ERR_UNKNOWN_NAMED_CHARACTER_REFERENCE:
  ------------------
  |  Branch (535:3): [True: 8.01k, False: 253k]
  ------------------
  536|  8.01k|    return "unknown-named-character-reference";
  537|       |
  538|       |  // Encoding errors.
  539|  84.1k|  case GUMBO_ERR_UTF8_INVALID:
  ------------------
  |  Branch (539:3): [True: 84.1k, False: 177k]
  ------------------
  540|  84.1k|    return "utf8-invalid";
  541|    612|  case GUMBO_ERR_UTF8_TRUNCATED:
  ------------------
  |  Branch (541:3): [True: 612, False: 261k]
  ------------------
  542|    612|    return "utf8-truncated";
  543|       |
  544|       |  // Generic parser error.
  545|  76.9k|  case GUMBO_ERR_PARSER:
  ------------------
  |  Branch (545:3): [True: 76.9k, False: 185k]
  ------------------
  546|  76.9k|    return "generic-parser";
  547|   261k|  }
  548|       |  // Silence warning about control reaching end of non-void function.
  549|       |  // All errors _should_ be handled in the switch statement.
  550|      0|  return "generic-parser";
  551|   261k|}
caret_diagnostic_to_string:
  576|   261k|) {
  577|   261k|  error_to_string(error, output);
  578|       |
  579|   261k|  const char* error_text = error->original_text.data;
  580|   261k|  const char* line_start = find_prev_newline(source_text, source_length, error_text);
  581|   261k|  const char* line_end = find_next_newline(source_text, source_length, error_text);
  582|   261k|  GumboStringPiece original_line;
  583|   261k|  original_line.data = line_start;
  584|   261k|  original_line.length = line_end - line_start;
  585|       |
  586|   261k|  gumbo_string_buffer_append_codepoint('\n', output);
  587|   261k|  gumbo_string_buffer_append_string(&original_line, output);
  588|   261k|  gumbo_string_buffer_append_codepoint('\n', output);
  589|   261k|  gumbo_string_buffer_reserve(output->length + error->position.column, output);
  590|   261k|  if (error->position.column >= 2) {
  ------------------
  |  Branch (590:7): [True: 227k, False: 34.6k]
  ------------------
  591|   227k|    size_t num_spaces = error->position.column - 1;
  592|   227k|    memset(output->data + output->length, ' ', num_spaces);
  593|   227k|    output->length += num_spaces;
  594|   227k|  }
  595|   261k|  gumbo_string_buffer_append_codepoint('^', output);
  596|   261k|  gumbo_string_buffer_append_codepoint('\n', output);
  597|   261k|}
gumbo_caret_diagnostic_to_string:
  604|   261k|) {
  605|   261k|  GumboStringBuffer sb;
  606|   261k|  gumbo_string_buffer_init(&sb);
  607|   261k|  caret_diagnostic_to_string(error, source_text, source_length, &sb);
  608|   261k|  *output = sb.data;
  609|   261k|  return sb.length;
  610|   261k|}
gumbo_error_destroy:
  631|  4.99M|void gumbo_error_destroy(GumboError* error) {
  632|  4.99M|  if (error->type == GUMBO_ERR_PARSER) {
  ------------------
  |  Branch (632:7): [True: 1.57M, False: 3.41M]
  ------------------
  633|       |    // Free the tag name.
  634|  1.57M|    if (error->v.parser.input_name) {
  ------------------
  |  Branch (634:9): [True: 34.5k, False: 1.54M]
  ------------------
  635|  34.5k|      gumbo_free(error->v.parser.input_name);
  636|  34.5k|    }
  637|       |
  638|  37.9M|    for (unsigned int i = 0; i < error->v.parser.tag_stack.length; ++i) {
  ------------------
  |  Branch (638:30): [True: 36.4M, False: 1.57M]
  ------------------
  639|  36.4M|      intptr_t tag = (intptr_t) error->v.parser.tag_stack.data[i];
  640|  36.4M|      if (tag > GUMBO_TAG_UNKNOWN) {
  ------------------
  |  Branch (640:11): [True: 12.0M, False: 24.3M]
  ------------------
  641|  12.0M|        gumbo_free(error->v.parser.tag_stack.data[i]);
  642|  12.0M|      }
  643|  36.4M|    }
  644|  1.57M|    gumbo_vector_destroy(&error->v.parser.tag_stack);
  645|  1.57M|  }
  646|  4.99M|  gumbo_free(error);
  647|  4.99M|}
gumbo_init_errors:
  649|  26.7k|void gumbo_init_errors(GumboParser* parser) {
  650|  26.7k|  gumbo_vector_init(5, &parser->_output->errors);
  651|  26.7k|}
error.c:error_to_string:
  556|   261k|) {
  557|   261k|  if (error->type < GUMBO_ERR_PARSER)
  ------------------
  |  Branch (557:7): [True: 185k, False: 76.9k]
  ------------------
  558|   185k|    handle_tokenizer_error(error, output);
  559|  76.9k|  else
  560|  76.9k|    handle_parser_error(&error->v.parser, output);
  561|   261k|}
error.c:handle_tokenizer_error:
  121|   185k|) {
  122|   185k|  switch (error->type) {
  ------------------
  |  Branch (122:11): [True: 185k, False: 0]
  ------------------
  123|    228|  case GUMBO_ERR_ABRUPT_CLOSING_OF_EMPTY_COMMENT:
  ------------------
  |  Branch (123:3): [True: 228, False: 184k]
  ------------------
  124|    228|      print_message(output, "Empty comment abruptly closed by '%s', use '-->'.",
  125|    228|                    error->v.tokenizer.state == GUMBO_LEX_COMMENT_START? ">" : "->");
  ------------------
  |  Branch (125:21): [True: 168, False: 60]
  ------------------
  126|    228|    break;
  127|     57|  case GUMBO_ERR_ABRUPT_DOCTYPE_PUBLIC_IDENTIFIER:
  ------------------
  |  Branch (127:3): [True: 57, False: 185k]
  ------------------
  128|     57|    print_message (
  129|     57|      output,
  130|     57|      "DOCTYPE public identifier missing closing %s.",
  131|     57|      error->v.tokenizer.state == GUMBO_LEX_DOCTYPE_PUBLIC_ID_DOUBLE_QUOTED?
  ------------------
  |  Branch (131:7): [True: 22, False: 35]
  ------------------
  132|     35|        "quotation mark (\")" : "apostrophe (')"
  133|     57|    );
  134|     57|    break;
  135|    136|  case GUMBO_ERR_ABRUPT_DOCTYPE_SYSTEM_IDENTIFIER:
  ------------------
  |  Branch (135:3): [True: 136, False: 184k]
  ------------------
  136|    136|    print_message (
  137|    136|      output,
  138|    136|      "DOCTYPE system identifier missing closing %s.",
  139|    136|      error->v.tokenizer.state == GUMBO_LEX_DOCTYPE_SYSTEM_ID_DOUBLE_QUOTED?
  ------------------
  |  Branch (139:7): [True: 62, False: 74]
  ------------------
  140|     74|        "quotation mark (\")" : "apostrophe (')"
  141|    136|    );
  142|    136|    break;
  143|    433|  case GUMBO_ERR_ABSENCE_OF_DIGITS_IN_NUMERIC_CHARACTER_REFERENCE:
  ------------------
  |  Branch (143:3): [True: 433, False: 184k]
  ------------------
  144|    433|    print_message (
  145|    433|      output,
  146|    433|      "Numeric character reference '%.*s' does not contain any %sdigits.",
  147|    433|      (int)error->original_text.length, error->original_text.data,
  148|    433|      error->v.tokenizer.state == GUMBO_LEX_HEXADECIMAL_CHARACTER_REFERENCE_START? "hexadecimal " : ""
  ------------------
  |  Branch (148:7): [True: 111, False: 322]
  ------------------
  149|    433|    );
  150|    433|    break;
  151|     80|  case GUMBO_ERR_CDATA_IN_HTML_CONTENT:
  ------------------
  |  Branch (151:3): [True: 80, False: 184k]
  ------------------
  152|     80|    print_message(output, "CDATA section outside foreign (SVG or MathML) content.");
  153|     80|    break;
  154|    118|  case GUMBO_ERR_CHARACTER_REFERENCE_OUTSIDE_UNICODE_RANGE:
  ------------------
  |  Branch (154:3): [True: 118, False: 184k]
  ------------------
  155|    118|    print_message (
  156|    118|      output,
  157|    118|      "Numeric character reference '%.*s' references a code point that is outside the valid Unicode range.",
  158|    118|      (int)error->original_text.length, error->original_text.data
  159|    118|    );
  160|    118|    break;
  161|  19.0k|  case GUMBO_ERR_CONTROL_CHARACTER_IN_INPUT_STREAM:
  ------------------
  |  Branch (161:3): [True: 19.0k, False: 165k]
  ------------------
  162|  19.0k|    print_message (
  163|  19.0k|      output,
  164|  19.0k|      "Input contains prohibited control code point U+%04X.",
  165|  19.0k|      error->v.tokenizer.codepoint
  166|  19.0k|    );
  167|  19.0k|    break;
  168|    386|  case GUMBO_ERR_CONTROL_CHARACTER_REFERENCE:
  ------------------
  |  Branch (168:3): [True: 386, False: 184k]
  ------------------
  169|    386|    print_message (
  170|    386|      output,
  171|    386|      "Numeric character reference '%.*s' references prohibited control code point U+%04X.",
  172|    386|      (int)error->original_text.length, error->original_text.data,
  173|    386|      error->v.tokenizer.codepoint
  174|    386|    );
  175|    386|    break;
  176|    334|  case GUMBO_ERR_END_TAG_WITH_ATTRIBUTES:
  ------------------
  |  Branch (176:3): [True: 334, False: 184k]
  ------------------
  177|    334|    print_message(output, "End tag contains attributes.");
  178|    334|    break;
  179|    682|  case GUMBO_ERR_DUPLICATE_ATTRIBUTE:
  ------------------
  |  Branch (179:3): [True: 682, False: 184k]
  ------------------
  180|    682|    print_message(output, "Tag contains multiple attributes with the same name.");
  181|    682|    break;
  182|    144|  case GUMBO_ERR_END_TAG_WITH_TRAILING_SOLIDUS:
  ------------------
  |  Branch (182:3): [True: 144, False: 184k]
  ------------------
  183|    144|    print_message(output, "End tag ends with '/>', use '>'.");
  184|    144|    break;
  185|    404|  case GUMBO_ERR_EOF_BEFORE_TAG_NAME:
  ------------------
  |  Branch (185:3): [True: 404, False: 184k]
  ------------------
  186|    404|    print_message(output, "End of input where a tag name is expected.");
  187|    404|    break;
  188|     84|  case GUMBO_ERR_EOF_IN_CDATA:
  ------------------
  |  Branch (188:3): [True: 84, False: 184k]
  ------------------
  189|     84|    print_message(output, "End of input in CDATA section.");
  190|     84|    break;
  191|    265|  case GUMBO_ERR_EOF_IN_COMMENT:
  ------------------
  |  Branch (191:3): [True: 265, False: 184k]
  ------------------
  192|    265|    print_message(output, "End of input in comment.");
  193|    265|    break;
  194|    519|  case GUMBO_ERR_EOF_IN_DOCTYPE:
  ------------------
  |  Branch (194:3): [True: 519, False: 184k]
  ------------------
  195|    519|    print_message(output, "End of input in DOCTYPE.");
  196|    519|    break;
  197|    684|  case GUMBO_ERR_EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT:
  ------------------
  |  Branch (197:3): [True: 684, False: 184k]
  ------------------
  198|    684|    print_message(output, "End of input in text that resembles an HTML comment inside script element content.");
  199|    684|    break;
  200|  1.32k|  case GUMBO_ERR_EOF_IN_TAG:
  ------------------
  |  Branch (200:3): [True: 1.32k, False: 183k]
  ------------------
  201|  1.32k|    print_message(output, "End of input in tag.");
  202|  1.32k|    break;
  203|     49|  case GUMBO_ERR_INCORRECTLY_CLOSED_COMMENT:
  ------------------
  |  Branch (203:3): [True: 49, False: 185k]
  ------------------
  204|     49|    print_message(output, "Comment closed incorrectly by '--!>', use '-->'.");
  205|     49|    break;
  206|  1.51k|  case GUMBO_ERR_INCORRECTLY_OPENED_COMMENT:
  ------------------
  |  Branch (206:3): [True: 1.51k, False: 183k]
  ------------------
  207|  1.51k|    print_message(output, "Comment, DOCTYPE, or CDATA opened incorrectly, use '<!--', '<!DOCTYPE', or '<![CDATA['.");
  208|  1.51k|    break;
  209|    266|  case GUMBO_ERR_INVALID_CHARACTER_SEQUENCE_AFTER_DOCTYPE_NAME:
  ------------------
  |  Branch (209:3): [True: 266, False: 184k]
  ------------------
  210|    266|    print_message(output, "Invalid character sequence after DOCTYPE name, expected 'PUBLIC', 'SYSTEM', or '>'.");
  211|    266|    break;
  212|  9.83k|  case GUMBO_ERR_INVALID_FIRST_CHARACTER_OF_TAG_NAME:
  ------------------
  |  Branch (212:3): [True: 9.83k, False: 175k]
  ------------------
  213|  9.83k|    if (gumbo_ascii_isascii(error->v.tokenizer.codepoint)
  ------------------
  |  Branch (213:9): [True: 8.04k, False: 1.78k]
  ------------------
  214|  8.04k|        && !gumbo_ascii_iscntrl(error->v.tokenizer.codepoint))
  ------------------
  |  Branch (214:12): [True: 6.83k, False: 1.21k]
  ------------------
  215|  6.83k|      print_message(output, "Invalid first character of tag name '%c'.", error->v.tokenizer.codepoint);
  216|  3.00k|    else
  217|  3.00k|      print_message(output, "Invalid first code point of tag name U+%04X.", error->v.tokenizer.codepoint);
  218|  9.83k|    break;
  219|     85|  case GUMBO_ERR_MISSING_ATTRIBUTE_VALUE:
  ------------------
  |  Branch (219:3): [True: 85, False: 184k]
  ------------------
  220|     85|    print_message(output, "Missing attribute value.");
  221|     85|    break;
  222|    168|  case GUMBO_ERR_MISSING_DOCTYPE_NAME:
  ------------------
  |  Branch (222:3): [True: 168, False: 184k]
  ------------------
  223|    168|    print_message(output, "Missing DOCTYPE name.");
  224|    168|    break;
  225|     73|  case GUMBO_ERR_MISSING_DOCTYPE_PUBLIC_IDENTIFIER:
  ------------------
  |  Branch (225:3): [True: 73, False: 184k]
  ------------------
  226|     73|    print_message(output, "Missing DOCTYPE public identifier.");
  227|     73|    break;
  228|    114|  case GUMBO_ERR_MISSING_DOCTYPE_SYSTEM_IDENTIFIER:
  ------------------
  |  Branch (228:3): [True: 114, False: 184k]
  ------------------
  229|    114|    print_message(output, "Missing DOCTYPE system identifier.");
  230|    114|    break;
  231|    107|  case GUMBO_ERR_MISSING_END_TAG_NAME:
  ------------------
  |  Branch (231:3): [True: 107, False: 184k]
  ------------------
  232|    107|    print_message(output, "Missing end tag name.");
  233|    107|    break;
  234|    114|  case GUMBO_ERR_MISSING_QUOTE_BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:
  ------------------
  |  Branch (234:3): [True: 114, False: 184k]
  ------------------
  235|    114|    print_message(output, "Missing quote before DOCTYPE public identifier.");
  236|    114|    break;
  237|    250|  case GUMBO_ERR_MISSING_QUOTE_BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:
  ------------------
  |  Branch (237:3): [True: 250, False: 184k]
  ------------------
  238|    250|    print_message(output, "Missing quote before DOCTYPE system identifier.");
  239|    250|    break;
  240|  5.24k|  case GUMBO_ERR_MISSING_SEMICOLON_AFTER_CHARACTER_REFERENCE:
  ------------------
  |  Branch (240:3): [True: 5.24k, False: 179k]
  ------------------
  241|  5.24k|    print_message(output, "Missing semicolon after character reference '%.*s'.",
  242|  5.24k|                  (int)error->original_text.length, error->original_text.data);
  243|  5.24k|    break;
  244|    435|  case GUMBO_ERR_MISSING_WHITESPACE_AFTER_DOCTYPE_PUBLIC_KEYWORD:
  ------------------
  |  Branch (244:3): [True: 435, False: 184k]
  ------------------
  245|    435|    print_message(output, "Missing whitespace after 'PUBLIC' keyword.");
  246|    435|    break;
  247|    266|  case GUMBO_ERR_MISSING_WHITESPACE_AFTER_DOCTYPE_SYSTEM_KEYWORD:
  ------------------
  |  Branch (247:3): [True: 266, False: 184k]
  ------------------
  248|    266|    print_message(output, "Missing whitespace after 'SYSTEM' keyword.");
  249|    266|    break;
  250|  2.07k|  case GUMBO_ERR_MISSING_WHITESPACE_BEFORE_DOCTYPE_NAME:
  ------------------
  |  Branch (250:3): [True: 2.07k, False: 182k]
  ------------------
  251|  2.07k|    print_message(output, "Missing whitespace between 'DOCTYPE' keyword and DOCTYPE name.");
  252|  2.07k|    break;
  253|    201|  case GUMBO_ERR_MISSING_WHITESPACE_BETWEEN_ATTRIBUTES:
  ------------------
  |  Branch (253:3): [True: 201, False: 184k]
  ------------------
  254|    201|    print_message(output, "Missing whitespace between attributes.");
  255|    201|    break;
  256|     87|  case GUMBO_ERR_MISSING_WHITESPACE_BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:
  ------------------
  |  Branch (256:3): [True: 87, False: 184k]
  ------------------
  257|     87|    print_message(output, "Missing whitespace between DOCTYPE public and system identifiers.");
  258|     87|    break;
  259|    155|  case GUMBO_ERR_NESTED_COMMENT:
  ------------------
  |  Branch (259:3): [True: 155, False: 184k]
  ------------------
  260|    155|    print_message(output, "Nested comment.");
  261|    155|    break;
  262|    105|  case GUMBO_ERR_NONCHARACTER_CHARACTER_REFERENCE:
  ------------------
  |  Branch (262:3): [True: 105, False: 184k]
  ------------------
  263|    105|    print_message (
  264|    105|      output,
  265|    105|      "Numeric character reference '%.*s' references noncharacter U+%04X.",
  266|    105|      (int)error->original_text.length, error->original_text.data,
  267|    105|      error->v.tokenizer.codepoint
  268|    105|    );
  269|    105|    break;
  270|    290|  case GUMBO_ERR_NONCHARACTER_IN_INPUT_STREAM:
  ------------------
  |  Branch (270:3): [True: 290, False: 184k]
  ------------------
  271|    290|    print_message(output, "Input contains noncharacter U+%04X.", error->v.tokenizer.codepoint);
  272|    290|    break;
  273|    186|  case GUMBO_ERR_NON_VOID_HTML_ELEMENT_START_TAG_WITH_TRAILING_SOLIDUS:
  ------------------
  |  Branch (273:3): [True: 186, False: 184k]
  ------------------
  274|    186|    print_message(output, "Start tag of nonvoid HTML element ends with '/>', use '>'.");
  275|    186|    break;
  276|    115|  case GUMBO_ERR_NULL_CHARACTER_REFERENCE:
  ------------------
  |  Branch (276:3): [True: 115, False: 184k]
  ------------------
  277|    115|    print_message(output, "Numeric character reference '%.*s' references U+0000.",
  278|    115|                  (int)error->original_text.length, error->original_text.data);
  279|    115|    break;
  280|     79|  case GUMBO_ERR_SURROGATE_CHARACTER_REFERENCE:
  ------------------
  |  Branch (280:3): [True: 79, False: 184k]
  ------------------
  281|     79|    print_message (
  282|     79|      output,
  283|     79|      "Numeric character reference '%.*s' references surrogate U+%4X.",
  284|     79|      (int)error->original_text.length, error->original_text.data,
  285|     79|      error->v.tokenizer.codepoint
  286|     79|    );
  287|     79|    break;
  288|      0|  case GUMBO_ERR_SURROGATE_IN_INPUT_STREAM:
  ------------------
  |  Branch (288:3): [True: 0, False: 185k]
  ------------------
  289|      0|    print_message(output, "Input contains surrogate U+%04X.", error->v.tokenizer.codepoint);
  290|      0|    break;
  291|    112|  case GUMBO_ERR_UNEXPECTED_CHARACTER_AFTER_DOCTYPE_SYSTEM_IDENTIFIER:
  ------------------
  |  Branch (291:3): [True: 112, False: 184k]
  ------------------
  292|    112|    print_message(output, "Unexpected character after DOCTYPE system identifier.");
  293|    112|    break;
  294|  1.61k|  case GUMBO_ERR_UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME:
  ------------------
  |  Branch (294:3): [True: 1.61k, False: 183k]
  ------------------
  295|  1.61k|    print_message(output, "Unexpected character (%c) in attribute name.", error->v.tokenizer.codepoint);
  296|  1.61k|    break;
  297|    883|  case GUMBO_ERR_UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE:
  ------------------
  |  Branch (297:3): [True: 883, False: 184k]
  ------------------
  298|    883|    print_message(output, "Unexpected character (%c) in unquoted attribute value.", error->v.tokenizer.codepoint);
  299|    883|    break;
  300|    253|  case GUMBO_ERR_UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME:
  ------------------
  |  Branch (300:3): [True: 253, False: 184k]
  ------------------
  301|    253|    print_message(output, "Unexpected '=' before an attribute name.");
  302|    253|    break;
  303|  39.6k|  case GUMBO_ERR_UNEXPECTED_NULL_CHARACTER:
  ------------------
  |  Branch (303:3): [True: 39.6k, False: 145k]
  ------------------
  304|  39.6k|    print_message(output, "Input contains unexpected U+0000.");
  305|  39.6k|    break;
  306|    291|  case GUMBO_ERR_UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME:
  ------------------
  |  Branch (306:3): [True: 291, False: 184k]
  ------------------
  307|    291|    print_message(output, "Unexpected '?' where start tag name is expected.");
  308|    291|    break;
  309|  2.78k|  case GUMBO_ERR_UNEXPECTED_SOLIDUS_IN_TAG:
  ------------------
  |  Branch (309:3): [True: 2.78k, False: 182k]
  ------------------
  310|  2.78k|    print_message(output, "Unexpected '/' in tag.");
  311|  2.78k|    break;
  312|  8.01k|  case GUMBO_ERR_UNKNOWN_NAMED_CHARACTER_REFERENCE:
  ------------------
  |  Branch (312:3): [True: 8.01k, False: 177k]
  ------------------
  313|  8.01k|    print_message(output, "Unknown named character reference '%.*s'.",
  314|  8.01k|                  (int)error->original_text.length, error->original_text.data);
  315|  8.01k|    break;
  316|  84.1k|  case GUMBO_ERR_UTF8_INVALID:
  ------------------
  |  Branch (316:3): [True: 84.1k, False: 100k]
  ------------------
  317|  84.1k|    print_message(output, "Invalid UTF8 encoding.");
  318|  84.1k|    break;
  319|    612|  case GUMBO_ERR_UTF8_TRUNCATED:
  ------------------
  |  Branch (319:3): [True: 612, False: 184k]
  ------------------
  320|    612|    print_message(output, "UTF8 character truncated.");
  321|    612|    break;
  322|      0|  case GUMBO_ERR_PARSER:
  ------------------
  |  Branch (322:3): [True: 0, False: 185k]
  ------------------
  323|       |    assert(0 && "Unreachable.");
  ------------------
  |  Branch (323:5): [Folded, False: 0]
  |  Branch (323:5): [True: 0, False: 0]
  |  Branch (323:5): [Folded, False: 0]
  |  Branch (323:5): [True: 0, False: 0]
  ------------------
  324|   185k|  }
  325|   185k|}
error.c:handle_parser_error:
  329|  76.9k|) {
  330|  76.9k|  if (
  331|  76.9k|    error->parser_state == GUMBO_INSERTION_MODE_INITIAL
  ------------------
  |  Branch (331:5): [True: 25.6k, False: 51.2k]
  ------------------
  332|  25.6k|    && error->input_type != GUMBO_TOKEN_DOCTYPE
  ------------------
  |  Branch (332:8): [True: 25.6k, False: 0]
  ------------------
  333|  76.9k|  ) {
  334|  25.6k|    print_message (
  335|  25.6k|      output,
  336|  25.6k|      "Expected a doctype token"
  337|  25.6k|    );
  338|  25.6k|    return;
  339|  25.6k|  }
  340|       |
  341|  51.2k|  switch (error->input_type) {
  ------------------
  |  Branch (341:11): [True: 51.2k, False: 0]
  ------------------
  342|  2.27k|  case GUMBO_TOKEN_DOCTYPE:
  ------------------
  |  Branch (342:3): [True: 2.27k, False: 49.0k]
  ------------------
  343|  2.27k|    print_message(output, "This is not a legal doctype");
  344|  2.27k|    return;
  345|      0|  case GUMBO_TOKEN_COMMENT:
  ------------------
  |  Branch (345:3): [True: 0, False: 51.2k]
  ------------------
  346|       |    // Should never happen; comments are always legal.
  347|      0|    assert(0);
  ------------------
  |  Branch (347:5): [Folded, False: 0]
  |  Branch (347:5): [Folded, False: 0]
  ------------------
  348|       |    // But just in case...
  349|      0|    print_message(output, "Comments aren't legal here");
  350|      0|    return;
  351|      0|  case GUMBO_TOKEN_CDATA:
  ------------------
  |  Branch (351:3): [True: 0, False: 51.2k]
  ------------------
  352|    200|  case GUMBO_TOKEN_WHITESPACE:
  ------------------
  |  Branch (352:3): [True: 200, False: 51.0k]
  ------------------
  353|  6.65k|  case GUMBO_TOKEN_CHARACTER:
  ------------------
  |  Branch (353:3): [True: 6.45k, False: 44.8k]
  ------------------
  354|  6.65k|    print_message(output, "Character tokens aren't legal here");
  355|  6.65k|    return;
  356|  25.1k|  case GUMBO_TOKEN_NULL:
  ------------------
  |  Branch (356:3): [True: 25.1k, False: 26.1k]
  ------------------
  357|  25.1k|    print_message(output, "Null bytes are not allowed in HTML5");
  358|  25.1k|    return;
  359|  4.63k|  case GUMBO_TOKEN_EOF:
  ------------------
  |  Branch (359:3): [True: 4.63k, False: 46.6k]
  ------------------
  360|  4.63k|    if (error->parser_state == GUMBO_INSERTION_MODE_INITIAL) {
  ------------------
  |  Branch (360:9): [True: 0, False: 4.63k]
  ------------------
  361|      0|      print_message(output, "You must provide a doctype");
  362|  4.63k|    } else {
  363|  4.63k|      print_message(output, "Premature end of file.");
  364|  4.63k|      print_tag_stack(error, output);
  365|  4.63k|    }
  366|  4.63k|    return;
  367|  8.17k|  case GUMBO_TOKEN_START_TAG:
  ------------------
  |  Branch (367:3): [True: 8.17k, False: 43.1k]
  ------------------
  368|  12.5k|  case GUMBO_TOKEN_END_TAG:
  ------------------
  |  Branch (368:3): [True: 4.41k, False: 46.8k]
  ------------------
  369|  12.5k|  {
  370|  12.5k|    const char* tag_name;
  371|  12.5k|    const char* which = error->input_type == GUMBO_TOKEN_START_TAG ? "Start" : "End";
  ------------------
  |  Branch (371:25): [True: 8.17k, False: 4.41k]
  ------------------
  372|  12.5k|    if (error->input_name) {
  ------------------
  |  Branch (372:9): [True: 2.82k, False: 9.75k]
  ------------------
  373|  2.82k|      tag_name = error->input_name;
  374|  9.75k|    } else {
  375|  9.75k|      tag_name = gumbo_normalized_tagname(error->input_tag);
  376|  9.75k|    }
  377|  12.5k|    print_message(output, "%s tag '%s' isn't allowed here.", which, tag_name);
  378|  12.5k|    print_tag_stack(error, output);
  379|  12.5k|    return;
  380|  8.17k|  }
  381|  51.2k|  }
  382|  51.2k|}
error.c:print_tag_stack:
  100|  17.2k|) {
  101|  17.2k|  print_message(output, " Currently open tags: ");
  102|   124k|  for (unsigned int i = 0; i < error->tag_stack.length; ++i) {
  ------------------
  |  Branch (102:28): [True: 106k, False: 17.2k]
  ------------------
  103|   106k|    if (i) {
  ------------------
  |  Branch (103:9): [True: 89.9k, False: 16.9k]
  ------------------
  104|  89.9k|      print_message(output, ", ");
  105|  89.9k|    }
  106|   106k|    uintptr_t tag = (uintptr_t) error->tag_stack.data[i];
  107|   106k|    const char* tag_name;
  108|   106k|    if (tag > GUMBO_TAG_UNKNOWN) {
  ------------------
  |  Branch (108:9): [True: 18.9k, False: 88.0k]
  ------------------
  109|  18.9k|      tag_name = error->tag_stack.data[i];
  110|  88.0k|    } else {
  111|  88.0k|      tag_name = gumbo_normalized_tagname((GumboTag)tag);
  112|  88.0k|    }
  113|   106k|    print_message(output, "%s", tag_name);
  114|   106k|  }
  115|  17.2k|  gumbo_string_buffer_append_codepoint('.', output);
  116|  17.2k|}
error.c:find_prev_newline:
  391|   261k|) {
  392|   261k|  const char* source_end = source_text + source_length;
  393|   261k|  assert(error_location >= source_text);
  ------------------
  |  Branch (393:3): [True: 0, False: 261k]
  |  Branch (393:3): [True: 261k, False: 0]
  ------------------
  394|   261k|  assert(error_location <= source_end);
  ------------------
  |  Branch (394:3): [True: 0, False: 261k]
  |  Branch (394:3): [True: 261k, False: 0]
  ------------------
  395|   261k|  const char* c = error_location;
  396|   261k|  if (c != source_text && (error_location == source_end || *c == '\n'))
  ------------------
  |  Branch (396:7): [True: 230k, False: 31.4k]
  |  Branch (396:28): [True: 7.70k, False: 222k]
  |  Branch (396:60): [True: 136, False: 222k]
  ------------------
  397|  7.83k|    --c;
  398|  11.8M|  while (c != source_text && *c != '\n')
  ------------------
  |  Branch (398:10): [True: 11.5M, False: 248k]
  |  Branch (398:30): [True: 11.5M, False: 13.4k]
  ------------------
  399|  11.5M|    --c;
  400|   261k|  return c == source_text ? c : c + 1;
  ------------------
  |  Branch (400:10): [True: 248k, False: 13.4k]
  ------------------
  401|   261k|}
error.c:find_next_newline:
  410|   261k|) {
  411|   261k|  const char* source_end = source_text + source_length;
  412|   261k|  assert(error_location >= source_text);
  ------------------
  |  Branch (412:3): [True: 0, False: 261k]
  |  Branch (412:3): [True: 261k, False: 0]
  ------------------
  413|   261k|  assert(error_location <= source_end);
  ------------------
  |  Branch (413:3): [True: 0, False: 261k]
  |  Branch (413:3): [True: 261k, False: 0]
  ------------------
  414|   261k|  const char* c = error_location;
  415|   182M|  while (c != source_end && *c != '\n')
  ------------------
  |  Branch (415:10): [True: 181M, False: 227k]
  |  Branch (415:29): [True: 181M, False: 34.2k]
  ------------------
  416|   181M|    ++c;
  417|   261k|  return c;
  418|   261k|}
error.c:print_message:
   38|   476k|) {
   39|   476k|  va_list args;
   40|   476k|  int remaining_capacity = output->capacity - output->length;
   41|   476k|  va_start(args, format);
   42|   476k|  int bytes_written = vsnprintf (
   43|   476k|    output->data + output->length,
   44|   476k|    remaining_capacity,
   45|   476k|    format,
   46|   476k|    args
   47|   476k|  );
   48|   476k|  va_end(args);
   49|       |
   50|       |#if (defined(_MSC_VER) && (_MSC_VER < 1900)) || defined(_RUBY_MSVCRT)
   51|       |  if (bytes_written == -1) {
   52|       |    // vsnprintf returns -1 on older MSVC++ if there's not enough capacity,
   53|       |    // instead of returning the number of bytes that would've been written had
   54|       |    // there been enough. In this case, we can call vsnprintf() again but
   55|       |    // with a count of 0 to get the number of bytes written, not including
   56|       |    // the null terminator.
   57|       |    // https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/vsnprintf-vsnprintf-vsnprintf-l-vsnwprintf-vsnwprintf-l?view=msvc-140#behavior-summary
   58|       |
   59|       |    va_start(args, format);
   60|       |    bytes_written = vsnprintf (
   61|       |      NULL,
   62|       |      0,
   63|       |      format,
   64|       |      args
   65|       |    );
   66|       |    va_end(args);
   67|       |  }
   68|       |#endif
   69|       |
   70|       |  // -1 in standard C99 indicates an encoding error. Return 0 and do nothing.
   71|   476k|  if (bytes_written == -1) {
  ------------------
  |  Branch (71:7): [True: 0, False: 476k]
  ------------------
   72|      0|    return 0;
   73|      0|  }
   74|       |
   75|   476k|  if (bytes_written >= remaining_capacity) {
  ------------------
  |  Branch (75:7): [True: 285k, False: 190k]
  ------------------
   76|       |    // At least double the size of the buffer.
   77|   285k|    size_t new_capacity = output->capacity * 2;
   78|   285k|    if (new_capacity < output->length + bytes_written + 1) {
  ------------------
  |  Branch (78:9): [True: 262k, False: 23.4k]
  ------------------
   79|       |      // The +1 is for the null terminator.
   80|   262k|      new_capacity = output->length + bytes_written + 1;
   81|   262k|    }
   82|   285k|    gumbo_string_buffer_reserve(new_capacity, output);
   83|   285k|    remaining_capacity = output->capacity - output->length;
   84|   285k|    va_start(args, format);
   85|   285k|    bytes_written = vsnprintf (
   86|   285k|      output->data + output->length,
   87|   285k|      remaining_capacity,
   88|   285k|      format,
   89|   285k|      args
   90|   285k|    );
   91|       |    va_end(args);
   92|   285k|  }
   93|   476k|  output->length += bytes_written;
   94|   476k|  return bytes_written;
   95|   476k|}

gumbo_get_foreign_attr_replacement:
   69|  11.8k|{
   70|  11.8k|  static const unsigned char lengthtable[] =
   71|  11.8k|    {
   72|  11.8k|       5, 10, 13,  9, 13, 10, 11, 11, 10, 10,  8
   73|  11.8k|    };
   74|  11.8k|  static const ForeignAttrReplacement wordlist[] =
   75|  11.8k|    {
   76|  11.8k|      {"xmlns", "xmlns", GUMBO_ATTR_NAMESPACE_XMLNS},
   77|  11.8k|      {"xlink:href", "href", GUMBO_ATTR_NAMESPACE_XLINK},
   78|  11.8k|      {"xlink:arcrole", "arcrole", GUMBO_ATTR_NAMESPACE_XLINK},
   79|  11.8k|      {"xml:space", "space", GUMBO_ATTR_NAMESPACE_XML},
   80|  11.8k|      {"xlink:actuate", "actuate", GUMBO_ATTR_NAMESPACE_XLINK},
   81|  11.8k|      {"xlink:type", "type", GUMBO_ATTR_NAMESPACE_XLINK},
   82|  11.8k|      {"xlink:title", "title", GUMBO_ATTR_NAMESPACE_XLINK},
   83|  11.8k|      {"xmlns:xlink", "xlink", GUMBO_ATTR_NAMESPACE_XMLNS},
   84|  11.8k|      {"xlink:role", "role", GUMBO_ATTR_NAMESPACE_XLINK},
   85|  11.8k|      {"xlink:show", "show", GUMBO_ATTR_NAMESPACE_XLINK},
   86|  11.8k|      {"xml:lang", "lang", GUMBO_ATTR_NAMESPACE_XML}
   87|  11.8k|    };
   88|       |
   89|  11.8k|  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  ------------------
  |  |   12|  23.7k|#define MAX_WORD_LENGTH 13
  ------------------
                if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  ------------------
  |  |   11|  9.98k|#define MIN_WORD_LENGTH 5
  ------------------
  |  Branch (89:7): [True: 9.98k, False: 1.91k]
  |  Branch (89:33): [True: 5.38k, False: 4.60k]
  ------------------
   90|  5.38k|    {
   91|  5.38k|      register unsigned int key = hash (str, len);
   92|       |
   93|  5.38k|      if (key <= MAX_HASH_VALUE)
  ------------------
  |  |   14|  5.38k|#define MAX_HASH_VALUE 10
  ------------------
  |  Branch (93:11): [True: 3.62k, False: 1.75k]
  ------------------
   94|  3.62k|        if (len == lengthtable[key])
  ------------------
  |  Branch (94:13): [True: 1.24k, False: 2.38k]
  ------------------
   95|  1.24k|          {
   96|  1.24k|            register const char *s = wordlist[key].from;
   97|       |
   98|  1.24k|            if (s && *str == *s && !memcmp (str + 1, s + 1, len - 1))
  ------------------
  |  Branch (98:17): [True: 1.24k, False: 0]
  |  Branch (98:22): [True: 509, False: 738]
  |  Branch (98:36): [True: 223, False: 286]
  ------------------
   99|    223|              return &wordlist[key];
  100|  1.24k|          }
  101|  5.38k|    }
  102|  11.6k|  return 0;
  103|  11.8k|}
foreign_attrs.c:hash:
   19|  5.38k|{
   20|  5.38k|  static const unsigned char asso_values[] =
   21|  5.38k|    {
   22|  5.38k|      11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
   23|  5.38k|      11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
   24|  5.38k|      11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
   25|  5.38k|      11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
   26|  5.38k|      11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
   27|  5.38k|      11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
   28|  5.38k|      11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
   29|  5.38k|      11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
   30|  5.38k|      11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
   31|  5.38k|      11, 11, 11, 11, 11, 11, 11, 11, 11,  2,
   32|  5.38k|      11,  1, 11, 10,  4,  4, 11, 11,  3, 11,
   33|  5.38k|      11,  5,  3, 11,  0, 11,  2, 11, 11, 11,
   34|  5.38k|      11,  2, 11, 11, 11, 11, 11, 11, 11, 11,
   35|  5.38k|      11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
   36|  5.38k|      11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
   37|  5.38k|      11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
   38|  5.38k|      11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
   39|  5.38k|      11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
   40|  5.38k|      11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
   41|  5.38k|      11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
   42|  5.38k|      11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
   43|  5.38k|      11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
   44|  5.38k|      11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
   45|  5.38k|      11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
   46|  5.38k|      11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
   47|  5.38k|      11, 11, 11, 11, 11, 11
   48|  5.38k|    };
   49|  5.38k|  register unsigned int hval = 0;
   50|       |
   51|  5.38k|  switch (len)
   52|  5.38k|    {
   53|  1.44k|      default:
  ------------------
  |  Branch (53:7): [True: 1.44k, False: 3.94k]
  ------------------
   54|  1.44k|        hval += asso_values[(unsigned char)str[8]];
   55|       |      /*FALLTHROUGH*/
   56|  2.31k|      case 8:
  ------------------
  |  Branch (56:7): [True: 869, False: 4.51k]
  ------------------
   57|  2.31k|        hval += asso_values[(unsigned char)str[7]];
   58|       |      /*FALLTHROUGH*/
   59|  3.34k|      case 7:
  ------------------
  |  Branch (59:7): [True: 1.03k, False: 4.34k]
  ------------------
   60|  4.22k|      case 6:
  ------------------
  |  Branch (60:7): [True: 871, False: 4.51k]
  ------------------
   61|  5.38k|      case 5:
  ------------------
  |  Branch (61:7): [True: 1.16k, False: 4.22k]
  ------------------
   62|  5.38k|        break;
   63|  5.38k|    }
   64|  5.38k|  return hval;
   65|  5.38k|}

hashmap_new_with_allocator:
  111|  2.91k|{
  112|  2.91k|    _malloc = _malloc ? _malloc : default_malloc ? default_malloc : malloc;
  ------------------
  |  Branch (112:15): [True: 1.59k, False: 1.32k]
  |  Branch (112:35): [True: 0, False: 1.32k]
  ------------------
  113|  2.91k|    _realloc = _realloc ? _realloc : default_realloc ? default_realloc : realloc;
  ------------------
  |  Branch (113:16): [True: 1.59k, False: 1.32k]
  |  Branch (113:38): [True: 0, False: 1.32k]
  ------------------
  114|  2.91k|    _free = _free ? _free : default_free ? default_free : free;
  ------------------
  |  Branch (114:13): [True: 1.59k, False: 1.32k]
  |  Branch (114:29): [True: 0, False: 1.32k]
  ------------------
  115|  2.91k|    size_t ncap = 16;
  116|  2.91k|    if (cap < ncap) {
  ------------------
  |  Branch (116:9): [True: 0, False: 2.91k]
  ------------------
  117|      0|        cap = ncap;
  118|  2.91k|    } else {
  119|  7.99k|        while (ncap < cap) {
  ------------------
  |  Branch (119:16): [True: 5.07k, False: 2.91k]
  ------------------
  120|  5.07k|            ncap *= 2;
  121|  5.07k|        }
  122|  2.91k|        cap = ncap;
  123|  2.91k|    }
  124|  2.91k|    size_t bucketsz = sizeof(struct bucket) + elsize;
  125|  2.91k|    while (bucketsz & (sizeof(uintptr_t)-1)) {
  ------------------
  |  Branch (125:12): [True: 0, False: 2.91k]
  ------------------
  126|      0|        bucketsz++;
  127|      0|    }
  128|       |    // hashmap + spare + edata
  129|  2.91k|    size_t size = sizeof(struct hashmap)+bucketsz*2;
  130|  2.91k|    struct hashmap *map = _malloc(size);
  131|  2.91k|    if (!map) {
  ------------------
  |  Branch (131:9): [True: 0, False: 2.91k]
  ------------------
  132|      0|        return NULL;
  133|      0|    }
  134|  2.91k|    memset(map, 0, sizeof(struct hashmap));
  135|  2.91k|    map->elsize = elsize;
  136|  2.91k|    map->bucketsz = bucketsz;
  137|  2.91k|    map->seed0 = seed0;
  138|  2.91k|    map->seed1 = seed1;
  139|  2.91k|    map->hash = hash;
  140|  2.91k|    map->compare = compare;
  141|  2.91k|    map->elfree = elfree;
  142|  2.91k|    map->udata = udata;
  143|  2.91k|    map->spare = ((char*)map)+sizeof(struct hashmap);
  144|  2.91k|    map->edata = (char*)map->spare+bucketsz;
  145|  2.91k|    map->cap = cap;
  146|  2.91k|    map->nbuckets = cap;
  147|  2.91k|    map->mask = map->nbuckets-1;
  148|  2.91k|    map->buckets = _malloc(map->bucketsz*map->nbuckets);
  149|  2.91k|    if (!map->buckets) {
  ------------------
  |  Branch (149:9): [True: 0, False: 2.91k]
  ------------------
  150|      0|        _free(map);
  151|      0|        return NULL;
  152|      0|    }
  153|  2.91k|    memset(map->buckets, 0, map->bucketsz*map->nbuckets);
  154|  2.91k|    map->growpower = 1;
  155|  2.91k|    map->loadfactor = clamp_load_factor(HASHMAP_LOAD_FACTOR, GROW_AT) * 100;
  ------------------
  |  |   16|  2.91k|#define HASHMAP_LOAD_FACTOR GROW_AT
  |  |  ------------------
  |  |  |  |   12|  2.91k|#define GROW_AT   0.60 /* 60% */
  |  |  ------------------
  ------------------
                  map->loadfactor = clamp_load_factor(HASHMAP_LOAD_FACTOR, GROW_AT) * 100;
  ------------------
  |  |   12|  2.91k|#define GROW_AT   0.60 /* 60% */
  ------------------
  156|  2.91k|    map->growat = map->nbuckets * (map->loadfactor / 100.0);
  157|  2.91k|    map->shrinkat = map->nbuckets * SHRINK_AT;
  ------------------
  |  |   13|  2.91k|#define SHRINK_AT 0.10 /* 10% */
  ------------------
  158|  2.91k|    map->malloc = _malloc;
  159|  2.91k|    map->realloc = _realloc;
  160|  2.91k|    map->free = _free;
  161|  2.91k|    return map;  
  162|  2.91k|}
hashmap_new:
  187|  1.32k|{
  188|  1.32k|    return hashmap_new_with_allocator(NULL, NULL, NULL, elsize, cap, seed0, 
  189|  1.32k|        seed1, hash, compare, elfree, udata);
  190|  1.32k|}
hashmap_set_with_hash:
  272|  44.0k|{
  273|  44.0k|    hash = clip_hash(hash);
  274|  44.0k|    map->oom = false;
  275|  44.0k|    if (map->count >= map->growat) {
  ------------------
  |  Branch (275:9): [True: 1.59k, False: 42.4k]
  ------------------
  276|  1.59k|        if (!resize(map, map->nbuckets*(1<<map->growpower))) {
  ------------------
  |  Branch (276:13): [True: 0, False: 1.59k]
  ------------------
  277|      0|            map->oom = true;
  278|      0|            return NULL;
  279|      0|        }
  280|  1.59k|    }
  281|       |
  282|  44.0k|    struct bucket *entry = map->edata;
  283|  44.0k|    entry->hash = hash;
  284|  44.0k|    entry->dib = 1;
  285|  44.0k|    void *eitem = bucket_item(entry);
  286|  44.0k|    memcpy(eitem, item, map->elsize);
  287|       |
  288|  44.0k|    void *bitem;
  289|  44.0k|    size_t i = entry->hash & map->mask;
  290|  77.1k|    while(1) {
  ------------------
  |  Branch (290:11): [True: 77.1k, Folded]
  ------------------
  291|  77.1k|        struct bucket *bucket = bucket_at(map, i);
  292|  77.1k|        if (bucket->dib == 0) {
  ------------------
  |  Branch (292:13): [True: 44.0k, False: 33.1k]
  ------------------
  293|  44.0k|            memcpy(bucket, entry, map->bucketsz);
  294|  44.0k|            map->count++;
  295|  44.0k|            return NULL;
  296|  44.0k|        }
  297|  33.1k|        bitem = bucket_item(bucket);
  298|  33.1k|        if (entry->hash == bucket->hash && (!map->compare ||
  ------------------
  |  Branch (298:13): [True: 0, False: 33.1k]
  |  Branch (298:45): [True: 0, False: 0]
  ------------------
  299|      0|            map->compare(eitem, bitem, map->udata) == 0))
  ------------------
  |  Branch (299:13): [True: 0, False: 0]
  ------------------
  300|      0|        {
  301|      0|            memcpy(map->spare, bitem, map->elsize);
  302|      0|            memcpy(bitem, eitem, map->elsize);
  303|      0|            return map->spare;
  304|      0|        }
  305|  33.1k|        if (bucket->dib < entry->dib) {
  ------------------
  |  Branch (305:13): [True: 11.3k, False: 21.7k]
  ------------------
  306|  11.3k|            memcpy(map->spare, bucket, map->bucketsz);
  307|  11.3k|            memcpy(bucket, entry, map->bucketsz);
  308|  11.3k|            memcpy(entry, map->spare, map->bucketsz);
  309|  11.3k|            eitem = bucket_item(entry);
  310|  11.3k|        }
  311|  33.1k|        i = (i + 1) & map->mask;
  312|  33.1k|        entry->dib += 1;
  313|  33.1k|    }
  314|  44.0k|}
hashmap_set:
  320|  44.0k|const void *hashmap_set(struct hashmap *map, const void *item) {
  321|  44.0k|    return hashmap_set_with_hash(map, item, get_hash(map, item));
  322|  44.0k|}
hashmap_get_with_hash:
  329|  32.6k|{
  330|  32.6k|    hash = clip_hash(hash);
  331|  32.6k|    size_t i = hash & map->mask;
  332|  60.8k|    while(1) {
  ------------------
  |  Branch (332:11): [True: 60.8k, Folded]
  ------------------
  333|  60.8k|        struct bucket *bucket = bucket_at(map, i);
  334|  60.8k|        if (!bucket->dib) return NULL;
  ------------------
  |  Branch (334:13): [True: 22.8k, False: 37.9k]
  ------------------
  335|  37.9k|        if (bucket->hash == hash) {
  ------------------
  |  Branch (335:13): [True: 9.74k, False: 28.2k]
  ------------------
  336|  9.74k|            void *bitem = bucket_item(bucket);
  337|  9.74k|            if (!map->compare || map->compare(key, bitem, map->udata) == 0) {
  ------------------
  |  Branch (337:17): [True: 0, False: 9.74k]
  |  Branch (337:34): [True: 9.74k, False: 0]
  ------------------
  338|  9.74k|                return bitem;
  339|  9.74k|            }
  340|  9.74k|        }
  341|  28.2k|        i = (i + 1) & map->mask;
  342|  28.2k|    }
  343|  32.6k|}
hashmap_get:
  347|  32.6k|const void *hashmap_get(struct hashmap *map, const void *key) {
  348|  32.6k|    return hashmap_get_with_hash(map, key, get_hash(map, key));
  349|  32.6k|}
hashmap_free:
  421|   345k|void hashmap_free(struct hashmap *map) {
  422|   345k|    if (!map) return;
  ------------------
  |  Branch (422:9): [True: 344k, False: 1.32k]
  ------------------
  423|  1.32k|    free_elements(map);
  424|  1.32k|    map->free(map->buckets);
  425|  1.32k|    map->free(map);
  426|  1.32k|}
hashmap_xxhash3:
  775|  76.6k|{
  776|  76.6k|    (void)seed1;
  777|  76.6k|    return xxh3(data, len ,seed0);
  778|  76.6k|}
hashmap.c:clamp_load_factor:
   67|  2.91k|static double clamp_load_factor(double factor, double default_factor) {
   68|       |    // Check for NaN and clamp between 50% and 90%
   69|  2.91k|    return factor != factor ? default_factor : 
  ------------------
  |  Branch (69:12): [True: 0, False: 2.91k]
  ------------------
   70|  2.91k|           factor < 0.50 ? 0.50 : 
  ------------------
  |  Branch (70:12): [True: 0, False: 2.91k]
  ------------------
   71|  2.91k|           factor > 0.95 ? 0.95 : 
  ------------------
  |  Branch (71:12): [True: 0, False: 2.91k]
  ------------------
   72|  2.91k|           factor;
   73|  2.91k|}
hashmap.c:free_elements:
  192|  1.32k|static void free_elements(struct hashmap *map) {
  193|  1.32k|    if (map->elfree) {
  ------------------
  |  Branch (193:9): [True: 0, False: 1.32k]
  ------------------
  194|      0|        for (size_t i = 0; i < map->nbuckets; i++) {
  ------------------
  |  Branch (194:28): [True: 0, False: 0]
  ------------------
  195|      0|            struct bucket *bucket = bucket_at(map, i);
  196|      0|            if (bucket->dib) map->elfree(bucket_item(bucket));
  ------------------
  |  Branch (196:17): [True: 0, False: 0]
  ------------------
  197|      0|        }
  198|      0|    }
  199|  1.32k|}
hashmap.c:clip_hash:
   93|   153k|static uint64_t clip_hash(uint64_t hash) {
   94|   153k|    return hash & 0xFFFFFFFFFFFF;
   95|   153k|}
hashmap.c:resize:
  263|  1.59k|static bool resize(struct hashmap *map, size_t new_cap) {
  264|  1.59k|    return resize0(map, new_cap);
  265|  1.59k|}
hashmap.c:resize0:
  226|  1.59k|static bool resize0(struct hashmap *map, size_t new_cap) {
  227|  1.59k|    struct hashmap *map2 = hashmap_new_with_allocator(map->malloc, map->realloc, 
  228|  1.59k|        map->free, map->elsize, new_cap, map->seed0, map->seed1, map->hash, 
  229|  1.59k|        map->compare, map->elfree, map->udata);
  230|  1.59k|    if (!map2) return false;
  ------------------
  |  Branch (230:9): [True: 0, False: 1.59k]
  ------------------
  231|  78.5k|    for (size_t i = 0; i < map->nbuckets; i++) {
  ------------------
  |  Branch (231:24): [True: 76.9k, False: 1.59k]
  ------------------
  232|  76.9k|        struct bucket *entry = bucket_at(map, i);
  233|  76.9k|        if (!entry->dib) {
  ------------------
  |  Branch (233:13): [True: 31.2k, False: 45.7k]
  ------------------
  234|  31.2k|            continue;
  235|  31.2k|        }
  236|  45.7k|        entry->dib = 1;
  237|  45.7k|        size_t j = entry->hash & map2->mask;
  238|  56.0k|        while(1) {
  ------------------
  |  Branch (238:15): [True: 56.0k, Folded]
  ------------------
  239|  56.0k|            struct bucket *bucket = bucket_at(map2, j);
  240|  56.0k|            if (bucket->dib == 0) {
  ------------------
  |  Branch (240:17): [True: 45.7k, False: 10.2k]
  ------------------
  241|  45.7k|                memcpy(bucket, entry, map->bucketsz);
  242|  45.7k|                break;
  243|  45.7k|            }
  244|  10.2k|            if (bucket->dib < entry->dib) {
  ------------------
  |  Branch (244:17): [True: 612, False: 9.65k]
  ------------------
  245|    612|                memcpy(map2->spare, bucket, map->bucketsz);
  246|    612|                memcpy(bucket, entry, map->bucketsz);
  247|    612|                memcpy(entry, map2->spare, map->bucketsz);
  248|    612|            }
  249|  10.2k|            j = (j + 1) & map2->mask;
  250|  10.2k|            entry->dib += 1;
  251|  10.2k|        }
  252|  45.7k|    }
  253|  1.59k|    map->free(map->buckets);
  254|  1.59k|    map->buckets = map2->buckets;
  255|  1.59k|    map->nbuckets = map2->nbuckets;
  256|  1.59k|    map->mask = map2->mask;
  257|  1.59k|    map->growat = map2->growat;
  258|  1.59k|    map->shrinkat = map2->shrinkat;
  259|  1.59k|    map->free(map2);
  260|       |    return true;
  261|  1.59k|}
hashmap.c:bucket_item:
   89|  98.2k|static void *bucket_item(struct bucket *entry) {
   90|  98.2k|    return ((char*)entry)+sizeof(struct bucket);
   91|  98.2k|}
hashmap.c:bucket_at:
   85|   270k|static struct bucket *bucket_at(struct hashmap *map, size_t index) {
   86|   270k|    return bucket_at0(map->buckets, map->bucketsz, index);
   87|   270k|}
hashmap.c:bucket_at0:
   81|   270k|static struct bucket *bucket_at0(void *buckets, size_t bucketsz, size_t i) {
   82|   270k|    return (struct bucket*)(((char*)buckets)+(bucketsz*i));
   83|   270k|}
hashmap.c:get_hash:
   97|  76.6k|static uint64_t get_hash(struct hashmap *map, const void *key) {
   98|  76.6k|    return clip_hash(map->hash(key, map->seed0, map->seed1));
   99|  76.6k|}
hashmap.c:xxh3:
  662|  76.6k|static uint64_t xxh3(const void* data, size_t len, uint64_t seed) {
  663|  76.6k|    const uint8_t* p = (const uint8_t*)data;
  664|  76.6k|    const uint8_t* const end = p + len;
  665|  76.6k|    uint64_t h64;
  666|       |
  667|  76.6k|    if (len >= 32) {
  ------------------
  |  Branch (667:9): [True: 2.80k, False: 73.8k]
  ------------------
  668|  2.80k|        const uint8_t* const limit = end - 32;
  669|  2.80k|        uint64_t v1 = seed + XXH_PRIME_1 + XXH_PRIME_2;
  ------------------
  |  |  640|  2.80k|#define XXH_PRIME_1 11400714785074694791ULL
  ------------------
                      uint64_t v1 = seed + XXH_PRIME_1 + XXH_PRIME_2;
  ------------------
  |  |  641|  2.80k|#define XXH_PRIME_2 14029467366897019727ULL
  ------------------
  670|  2.80k|        uint64_t v2 = seed + XXH_PRIME_2;
  ------------------
  |  |  641|  2.80k|#define XXH_PRIME_2 14029467366897019727ULL
  ------------------
  671|  2.80k|        uint64_t v3 = seed + 0;
  672|  2.80k|        uint64_t v4 = seed - XXH_PRIME_1;
  ------------------
  |  |  640|  2.80k|#define XXH_PRIME_1 11400714785074694791ULL
  ------------------
  673|       |
  674|  8.86k|        do {
  675|  8.86k|            v1 += XXH_read64(p) * XXH_PRIME_2;
  ------------------
  |  |  641|  8.86k|#define XXH_PRIME_2 14029467366897019727ULL
  ------------------
  676|  8.86k|            v1 = XXH_rotl64(v1, 31);
  677|  8.86k|            v1 *= XXH_PRIME_1;
  ------------------
  |  |  640|  8.86k|#define XXH_PRIME_1 11400714785074694791ULL
  ------------------
  678|       |
  679|  8.86k|            v2 += XXH_read64(p + 8) * XXH_PRIME_2;
  ------------------
  |  |  641|  8.86k|#define XXH_PRIME_2 14029467366897019727ULL
  ------------------
  680|  8.86k|            v2 = XXH_rotl64(v2, 31);
  681|  8.86k|            v2 *= XXH_PRIME_1;
  ------------------
  |  |  640|  8.86k|#define XXH_PRIME_1 11400714785074694791ULL
  ------------------
  682|       |
  683|  8.86k|            v3 += XXH_read64(p + 16) * XXH_PRIME_2;
  ------------------
  |  |  641|  8.86k|#define XXH_PRIME_2 14029467366897019727ULL
  ------------------
  684|  8.86k|            v3 = XXH_rotl64(v3, 31);
  685|  8.86k|            v3 *= XXH_PRIME_1;
  ------------------
  |  |  640|  8.86k|#define XXH_PRIME_1 11400714785074694791ULL
  ------------------
  686|       |
  687|  8.86k|            v4 += XXH_read64(p + 24) * XXH_PRIME_2;
  ------------------
  |  |  641|  8.86k|#define XXH_PRIME_2 14029467366897019727ULL
  ------------------
  688|  8.86k|            v4 = XXH_rotl64(v4, 31);
  689|  8.86k|            v4 *= XXH_PRIME_1;
  ------------------
  |  |  640|  8.86k|#define XXH_PRIME_1 11400714785074694791ULL
  ------------------
  690|       |
  691|  8.86k|            p += 32;
  692|  8.86k|        } while (p <= limit);
  ------------------
  |  Branch (692:18): [True: 6.06k, False: 2.80k]
  ------------------
  693|       |
  694|  2.80k|        h64 = XXH_rotl64(v1, 1) + XXH_rotl64(v2, 7) + XXH_rotl64(v3, 12) + 
  695|  2.80k|            XXH_rotl64(v4, 18);
  696|       |
  697|  2.80k|        v1 *= XXH_PRIME_2;
  ------------------
  |  |  641|  2.80k|#define XXH_PRIME_2 14029467366897019727ULL
  ------------------
  698|  2.80k|        v1 = XXH_rotl64(v1, 31);
  699|  2.80k|        v1 *= XXH_PRIME_1;
  ------------------
  |  |  640|  2.80k|#define XXH_PRIME_1 11400714785074694791ULL
  ------------------
  700|  2.80k|        h64 ^= v1;
  701|  2.80k|        h64 = h64 * XXH_PRIME_1 + XXH_PRIME_4;
  ------------------
  |  |  640|  2.80k|#define XXH_PRIME_1 11400714785074694791ULL
  ------------------
                      h64 = h64 * XXH_PRIME_1 + XXH_PRIME_4;
  ------------------
  |  |  643|  2.80k|#define XXH_PRIME_4 9650029242287828579ULL
  ------------------
  702|       |
  703|  2.80k|        v2 *= XXH_PRIME_2;
  ------------------
  |  |  641|  2.80k|#define XXH_PRIME_2 14029467366897019727ULL
  ------------------
  704|  2.80k|        v2 = XXH_rotl64(v2, 31);
  705|  2.80k|        v2 *= XXH_PRIME_1;
  ------------------
  |  |  640|  2.80k|#define XXH_PRIME_1 11400714785074694791ULL
  ------------------
  706|  2.80k|        h64 ^= v2;
  707|  2.80k|        h64 = h64 * XXH_PRIME_1 + XXH_PRIME_4;
  ------------------
  |  |  640|  2.80k|#define XXH_PRIME_1 11400714785074694791ULL
  ------------------
                      h64 = h64 * XXH_PRIME_1 + XXH_PRIME_4;
  ------------------
  |  |  643|  2.80k|#define XXH_PRIME_4 9650029242287828579ULL
  ------------------
  708|       |
  709|  2.80k|        v3 *= XXH_PRIME_2;
  ------------------
  |  |  641|  2.80k|#define XXH_PRIME_2 14029467366897019727ULL
  ------------------
  710|  2.80k|        v3 = XXH_rotl64(v3, 31);
  711|  2.80k|        v3 *= XXH_PRIME_1;
  ------------------
  |  |  640|  2.80k|#define XXH_PRIME_1 11400714785074694791ULL
  ------------------
  712|  2.80k|        h64 ^= v3;
  713|  2.80k|        h64 = h64 * XXH_PRIME_1 + XXH_PRIME_4;
  ------------------
  |  |  640|  2.80k|#define XXH_PRIME_1 11400714785074694791ULL
  ------------------
                      h64 = h64 * XXH_PRIME_1 + XXH_PRIME_4;
  ------------------
  |  |  643|  2.80k|#define XXH_PRIME_4 9650029242287828579ULL
  ------------------
  714|       |
  715|  2.80k|        v4 *= XXH_PRIME_2;
  ------------------
  |  |  641|  2.80k|#define XXH_PRIME_2 14029467366897019727ULL
  ------------------
  716|  2.80k|        v4 = XXH_rotl64(v4, 31);
  717|  2.80k|        v4 *= XXH_PRIME_1;
  ------------------
  |  |  640|  2.80k|#define XXH_PRIME_1 11400714785074694791ULL
  ------------------
  718|  2.80k|        h64 ^= v4;
  719|  2.80k|        h64 = h64 * XXH_PRIME_1 + XXH_PRIME_4;
  ------------------
  |  |  640|  2.80k|#define XXH_PRIME_1 11400714785074694791ULL
  ------------------
                      h64 = h64 * XXH_PRIME_1 + XXH_PRIME_4;
  ------------------
  |  |  643|  2.80k|#define XXH_PRIME_4 9650029242287828579ULL
  ------------------
  720|  2.80k|    }
  721|  73.8k|    else {
  722|  73.8k|        h64 = seed + XXH_PRIME_5;
  ------------------
  |  |  644|  73.8k|#define XXH_PRIME_5 2870177450012600261ULL
  ------------------
  723|  73.8k|    }
  724|       |
  725|  76.6k|    h64 += (uint64_t)len;
  726|       |
  727|   104k|    while (p + 8 <= end) {
  ------------------
  |  Branch (727:12): [True: 28.0k, False: 76.6k]
  ------------------
  728|  28.0k|        uint64_t k1 = XXH_read64(p);
  729|  28.0k|        k1 *= XXH_PRIME_2;
  ------------------
  |  |  641|  28.0k|#define XXH_PRIME_2 14029467366897019727ULL
  ------------------
  730|  28.0k|        k1 = XXH_rotl64(k1, 31);
  731|  28.0k|        k1 *= XXH_PRIME_1;
  ------------------
  |  |  640|  28.0k|#define XXH_PRIME_1 11400714785074694791ULL
  ------------------
  732|  28.0k|        h64 ^= k1;
  733|  28.0k|        h64 = XXH_rotl64(h64, 27) * XXH_PRIME_1 + XXH_PRIME_4;
  ------------------
  |  |  640|  28.0k|#define XXH_PRIME_1 11400714785074694791ULL
  ------------------
                      h64 = XXH_rotl64(h64, 27) * XXH_PRIME_1 + XXH_PRIME_4;
  ------------------
  |  |  643|  28.0k|#define XXH_PRIME_4 9650029242287828579ULL
  ------------------
  734|  28.0k|        p += 8;
  735|  28.0k|    }
  736|       |
  737|  76.6k|    if (p + 4 <= end) {
  ------------------
  |  Branch (737:9): [True: 24.8k, False: 51.8k]
  ------------------
  738|  24.8k|        h64 ^= (uint64_t)(XXH_read32(p)) * XXH_PRIME_1;
  ------------------
  |  |  640|  24.8k|#define XXH_PRIME_1 11400714785074694791ULL
  ------------------
  739|  24.8k|        h64 = XXH_rotl64(h64, 23) * XXH_PRIME_2 + XXH_PRIME_3;
  ------------------
  |  |  641|  24.8k|#define XXH_PRIME_2 14029467366897019727ULL
  ------------------
                      h64 = XXH_rotl64(h64, 23) * XXH_PRIME_2 + XXH_PRIME_3;
  ------------------
  |  |  642|  24.8k|#define XXH_PRIME_3 1609587929392839161ULL
  ------------------
  740|  24.8k|        p += 4;
  741|  24.8k|    }
  742|       |
  743|   181k|    while (p < end) {
  ------------------
  |  Branch (743:12): [True: 105k, False: 76.6k]
  ------------------
  744|   105k|        h64 ^= (*p) * XXH_PRIME_5;
  ------------------
  |  |  644|   105k|#define XXH_PRIME_5 2870177450012600261ULL
  ------------------
  745|   105k|        h64 = XXH_rotl64(h64, 11) * XXH_PRIME_1;
  ------------------
  |  |  640|   105k|#define XXH_PRIME_1 11400714785074694791ULL
  ------------------
  746|   105k|        p++;
  747|   105k|    }
  748|       |
  749|  76.6k|    h64 ^= h64 >> 33;
  750|  76.6k|    h64 *= XXH_PRIME_2;
  ------------------
  |  |  641|  76.6k|#define XXH_PRIME_2 14029467366897019727ULL
  ------------------
  751|  76.6k|    h64 ^= h64 >> 29;
  752|  76.6k|    h64 *= XXH_PRIME_3;
  ------------------
  |  |  642|  76.6k|#define XXH_PRIME_3 1609587929392839161ULL
  ------------------
  753|  76.6k|    h64 ^= h64 >> 32;
  754|       |
  755|  76.6k|    return h64;
  756|  76.6k|}
hashmap.c:XXH_read64:
  646|  63.5k|static uint64_t XXH_read64(const void* memptr) {
  647|  63.5k|    uint64_t val;
  648|  63.5k|    memcpy(&val, memptr, sizeof(val));
  649|  63.5k|    return val;
  650|  63.5k|}
hashmap.c:XXH_rotl64:
  658|   244k|static uint64_t XXH_rotl64(uint64_t x, int r) {
  659|   244k|    return (x << r) | (x >> (64 - r));
  660|   244k|}
hashmap.c:XXH_read32:
  652|  24.8k|static uint32_t XXH_read32(const void* memptr) {
  653|  24.8k|    uint32_t val;
  654|  24.8k|    memcpy(&val, memptr, sizeof(val));
  655|  24.8k|    return val;
  656|  24.8k|}

gumbo_compute_quirks_mode:
 1552|    182|) {
 1553|       |
 1554|    182|  GumboStringPiece pubid = {
 1555|    182|    .data = pubid_str,
 1556|    182|    .length = pubid_str? strlen(pubid_str) : 0,
  ------------------
  |  Branch (1556:15): [True: 63, False: 119]
  ------------------
 1557|    182|  };
 1558|    182|  GumboStringPiece sysid = {
 1559|    182|    .data = sysid_str,
 1560|    182|    .length = sysid_str? strlen(sysid_str) : 0,
  ------------------
  |  Branch (1560:15): [True: 64, False: 118]
  ------------------
 1561|    182|  };
 1562|    182|  bool has_system_identifier = !!sysid_str;
 1563|    182|  if (
 1564|    182|    name == NULL
  ------------------
  |  Branch (1564:5): [True: 0, False: 182]
  ------------------
 1565|    182|    || strcmp(name, "html")
  ------------------
  |  Branch (1565:8): [True: 79, False: 103]
  ------------------
 1566|    103|    || is_in_static_list(&pubid, kQuirksModePublicIdPrefixes, false)
  ------------------
  |  Branch (1566:8): [True: 0, False: 103]
  ------------------
 1567|    103|    || is_in_static_list(&pubid, kQuirksModePublicIdExactMatches, true)
  ------------------
  |  Branch (1567:8): [True: 1, False: 102]
  ------------------
 1568|    102|    || is_in_static_list(&sysid, kQuirksModeSystemIdExactMatches, true)
  ------------------
  |  Branch (1568:8): [True: 0, False: 102]
  ------------------
 1569|    102|    || (
 1570|    102|      !has_system_identifier
  ------------------
  |  Branch (1570:7): [True: 52, False: 50]
  ------------------
 1571|     52|      && is_in_static_list(&pubid, kSystemIdDependentPublicIdPrefixes, false)
  ------------------
  |  Branch (1571:10): [True: 0, False: 52]
  ------------------
 1572|    102|    )
 1573|    182|  ) {
 1574|     80|    return GUMBO_DOCTYPE_QUIRKS;
 1575|     80|  }
 1576|       |
 1577|    102|  if (
 1578|    102|    is_in_static_list(&pubid, kLimitedQuirksPublicIdPrefixes, false)
  ------------------
  |  Branch (1578:5): [True: 0, False: 102]
  ------------------
 1579|    102|    || (
 1580|    102|      has_system_identifier
  ------------------
  |  Branch (1580:7): [True: 50, False: 52]
  ------------------
 1581|     50|      && is_in_static_list(&pubid, kSystemIdDependentPublicIdPrefixes, false)
  ------------------
  |  Branch (1581:10): [True: 0, False: 50]
  ------------------
 1582|    102|    )
 1583|    102|  ) {
 1584|      0|    return GUMBO_DOCTYPE_LIMITED_QUIRKS;
 1585|      0|  }
 1586|       |
 1587|    102|  return GUMBO_DOCTYPE_NO_QUIRKS;
 1588|    102|}
gumbo_parse_with_options:
 4791|  26.7k|) {
 4792|  26.7k|  GumboParser parser;
 4793|  26.7k|  parser._options = options;
 4794|  26.7k|  output_init(&parser);
 4795|  26.7k|  gumbo_tokenizer_state_init(&parser, buffer, length);
 4796|  26.7k|  parser_state_init(&parser);
 4797|       |
 4798|  26.7k|  if (options->fragment_context != NULL)
  ------------------
  |  Branch (4798:7): [True: 0, False: 26.7k]
  ------------------
 4799|      0|    fragment_parser_init(&parser, options);
 4800|       |
 4801|  26.7k|  GumboParserState* state = parser._parser_state;
 4802|  26.7k|  gumbo_debug (
 4803|  26.7k|    "Parsing %.*s.\n",
 4804|  26.7k|    (int) length,
 4805|  26.7k|    buffer
 4806|  26.7k|  );
 4807|       |
 4808|       |  // Sanity check so that infinite loops die with an assertion failure instead
 4809|       |  // of hanging the process before we ever get an error.
 4810|  26.7k|  uint_fast32_t loop_count = 0;
 4811|       |
 4812|  26.7k|  const unsigned int max_tree_depth = options->max_tree_depth;
 4813|  26.7k|  GumboToken token;
 4814|       |
 4815|  9.55M|  do {
 4816|  9.55M|    if (state->_reprocess_current_token) {
  ------------------
  |  Branch (4816:9): [True: 182k, False: 9.36M]
  ------------------
 4817|   182k|      state->_reprocess_current_token = false;
 4818|  9.36M|    } else {
 4819|  9.36M|      GumboNode* adjusted_current_node = get_adjusted_current_node(&parser);
 4820|  9.36M|      gumbo_tokenizer_set_is_adjusted_current_node_foreign (
 4821|  9.36M|        &parser,
 4822|  9.36M|        adjusted_current_node &&
  ------------------
  |  Branch (4822:9): [True: 9.33M, False: 33.2k]
  ------------------
 4823|  9.33M|          adjusted_current_node->v.element.tag_namespace != GUMBO_NAMESPACE_HTML
  ------------------
  |  Branch (4823:11): [True: 415k, False: 8.92M]
  ------------------
 4824|  9.36M|      );
 4825|       |      // If the maximum tree depth has been exceeded, proceed as if EOF has been reached.
 4826|       |      //
 4827|       |      // The parser is pretty fragile. Breaking out of the parsing loop in the middle of
 4828|       |      // the parse can leave the document in an inconsistent state.
 4829|  9.36M|      if (unlikely(state->_open_elements.length > max_tree_depth)) {
  ------------------
  |  |   65|  9.36M|    #define unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (65:25): [True: 7, False: 9.36M]
  |  |  ------------------
  ------------------
 4830|      7|        parser._output->status = GUMBO_STATUS_TREE_TOO_DEEP;
 4831|      7|        gumbo_debug("Tree depth limit exceeded.\n");
 4832|      7|        token.type = GUMBO_TOKEN_EOF;
 4833|  9.36M|      } else {
 4834|  9.36M|        gumbo_lex(&parser, &token);
 4835|  9.36M|      }
 4836|       |
 4837|  9.36M|    }
 4838|       |
 4839|  9.55M|    const char* token_type = "text";
 4840|  9.55M|    switch (token.type) {
 4841|  21.1k|      case GUMBO_TOKEN_DOCTYPE:
  ------------------
  |  Branch (4841:7): [True: 21.1k, False: 9.53M]
  ------------------
 4842|  21.1k|        token_type = "doctype";
 4843|  21.1k|        break;
 4844|   331k|      case GUMBO_TOKEN_START_TAG:
  ------------------
  |  Branch (4844:7): [True: 331k, False: 9.22M]
  ------------------
 4845|   331k|        if (token.v.start_tag.tag == GUMBO_TAG_UNKNOWN)
  ------------------
  |  Branch (4845:13): [True: 85.5k, False: 246k]
  ------------------
 4846|  85.5k|          token_type = token.v.start_tag.name;
 4847|   246k|        else
 4848|   246k|          token_type = gumbo_normalized_tagname(token.v.start_tag.tag);
 4849|   331k|        break;
 4850|  59.8k|      case GUMBO_TOKEN_END_TAG:
  ------------------
  |  Branch (4850:7): [True: 59.8k, False: 9.49M]
  ------------------
 4851|  59.8k|        token_type = gumbo_normalized_tagname(token.v.end_tag.tag);
 4852|  59.8k|        break;
 4853|  27.3k|      case GUMBO_TOKEN_COMMENT:
  ------------------
  |  Branch (4853:7): [True: 27.3k, False: 9.52M]
  ------------------
 4854|  27.3k|        token_type = "comment";
 4855|  27.3k|        break;
 4856|  9.11M|      default:
  ------------------
  |  Branch (4856:7): [True: 9.11M, False: 440k]
  ------------------
 4857|  9.11M|        break;
 4858|  9.55M|    }
 4859|  9.55M|    gumbo_debug (
 4860|  9.55M|      "Handling %s token @%lu:%lu in insertion mode %u.\n",
 4861|  9.55M|      (char*) token_type,
 4862|  9.55M|      (unsigned long)token.position.line,
 4863|  9.55M|      (unsigned long)token.position.column,
 4864|  9.55M|      state->_insertion_mode
 4865|  9.55M|    );
 4866|       |
 4867|  9.55M|    state->_current_token = &token;
 4868|  9.55M|    state->_self_closing_flag_acknowledged = false;
 4869|       |
 4870|  9.55M|    handle_token(&parser, &token);
 4871|       |
 4872|       |    // Check for memory leaks when ownership is transferred from start tag
 4873|       |    // tokens to nodes.
 4874|  9.55M|    assert (
  ------------------
  |  Branch (4874:5): [True: 9.55M, False: 0]
  |  Branch (4874:5): [True: 0, False: 0]
  |  Branch (4874:5): [True: 0, False: 0]
  |  Branch (4874:5): [True: 0, False: 0]
  |  Branch (4874:5): [True: 182k, False: 9.36M]
  |  Branch (4874:5): [True: 9.08M, False: 279k]
  |  Branch (4874:5): [True: 279k, False: 0]
  |  Branch (4874:5): [True: 279k, False: 0]
  ------------------
 4875|  9.55M|      state->_reprocess_current_token
 4876|  9.55M|      || token.type != GUMBO_TOKEN_START_TAG
 4877|  9.55M|      || (token.v.start_tag.attributes.data == NULL
 4878|  9.55M|          && token.v.start_tag.name == NULL)
 4879|  9.55M|    );
 4880|       |
 4881|  9.55M|    if (!state->_reprocess_current_token) {
  ------------------
  |  Branch (4881:9): [True: 9.36M, False: 182k]
  ------------------
 4882|       |      // If we're done with the token, check for unacknowledged self-closing
 4883|       |      // flags on start tags.
 4884|  9.36M|      if (token.type == GUMBO_TOKEN_START_TAG &&
  ------------------
  |  Branch (4884:11): [True: 279k, False: 9.08M]
  ------------------
 4885|   279k|          token.v.start_tag.is_self_closing &&
  ------------------
  |  Branch (4885:11): [True: 2.84k, False: 276k]
  ------------------
 4886|  2.84k|          !state->_self_closing_flag_acknowledged) {
  ------------------
  |  Branch (4886:11): [True: 1.34k, False: 1.50k]
  ------------------
 4887|  1.34k|        GumboError* error = gumbo_add_error(&parser);
 4888|  1.34k|        if (error) {
  ------------------
  |  Branch (4888:13): [True: 1.34k, False: 0]
  ------------------
 4889|       |          // This is essentially a tokenizer error that's only caught during
 4890|       |          // tree construction.
 4891|  1.34k|          error->type = GUMBO_ERR_NON_VOID_HTML_ELEMENT_START_TAG_WITH_TRAILING_SOLIDUS;
 4892|  1.34k|          error->original_text = token.original_text;
 4893|  1.34k|          error->position = token.position;
 4894|  1.34k|        }
 4895|  1.34k|      }
 4896|       |      // Make sure we free the end tag's name since it doesn't get transferred
 4897|       |      // to a token.
 4898|  9.36M|      if (token.type == GUMBO_TOKEN_END_TAG &&
  ------------------
  |  Branch (4898:11): [True: 53.0k, False: 9.31M]
  ------------------
 4899|  53.0k|          token.v.end_tag.tag == GUMBO_TAG_UNKNOWN)
  ------------------
  |  Branch (4899:11): [True: 12.0k, False: 40.9k]
  ------------------
 4900|  12.0k|      {
 4901|  12.0k|        gumbo_free(token.v.end_tag.name);
 4902|  12.0k|        token.v.end_tag.name = NULL;
 4903|  12.0k|      }
 4904|  9.36M|    }
 4905|       |
 4906|       |
 4907|  9.55M|    ++loop_count;
 4908|  9.55M|    assert(loop_count < 1000000000UL);
  ------------------
  |  Branch (4908:5): [True: 0, False: 9.55M]
  |  Branch (4908:5): [True: 9.55M, False: 0]
  ------------------
 4909|       |
 4910|  9.55M|  } while (
 4911|  9.55M|    (token.type != GUMBO_TOKEN_EOF || state->_reprocess_current_token)
  ------------------
  |  Branch (4911:6): [True: 9.50M, False: 44.3k]
  |  Branch (4911:39): [True: 17.6k, False: 26.7k]
  ------------------
 4912|  9.52M|    && !(options->stop_on_first_error && parser._output->document_error)
  ------------------
  |  Branch (4912:10): [True: 0, False: 9.52M]
  |  Branch (4912:42): [True: 0, False: 0]
  ------------------
 4913|  26.7k|  );
 4914|       |
 4915|  26.7k|  finish_parsing(&parser);
 4916|       |  // For API uniformity reasons, if the doctype still has nulls, convert them to
 4917|       |  // empty strings.
 4918|  26.7k|  GumboDocument* doc_type = &parser._output->document->v.document;
 4919|  26.7k|  if (doc_type->name == NULL) {
  ------------------
  |  Branch (4919:7): [True: 26.0k, False: 724]
  ------------------
 4920|  26.0k|    doc_type->name = gumbo_strdup("");
 4921|  26.0k|  }
 4922|  26.7k|  if (doc_type->public_identifier == NULL) {
  ------------------
  |  Branch (4922:7): [True: 26.0k, False: 724]
  ------------------
 4923|  26.0k|    doc_type->public_identifier = gumbo_strdup("");
 4924|  26.0k|  }
 4925|  26.7k|  if (doc_type->system_identifier == NULL) {
  ------------------
  |  Branch (4925:7): [True: 26.0k, False: 724]
  ------------------
 4926|  26.0k|    doc_type->system_identifier = gumbo_strdup("");
 4927|  26.0k|  }
 4928|       |
 4929|  26.7k|  parser_state_destroy(&parser);
 4930|  26.7k|  gumbo_tokenizer_state_destroy(&parser);
 4931|  26.7k|  return parser._output;
 4932|  26.7k|}
gumbo_destroy_output:
 4953|  26.7k|void gumbo_destroy_output(GumboOutput* output) {
 4954|  26.7k|  destroy_node(output->document);
 4955|  5.02M|  for (unsigned int i = 0; i < output->errors.length; ++i) {
  ------------------
  |  Branch (4955:28): [True: 4.99M, False: 26.7k]
  ------------------
 4956|  4.99M|    gumbo_error_destroy(output->errors.data[i]);
 4957|  4.99M|  }
 4958|  26.7k|  gumbo_vector_destroy(&output->errors);
 4959|  26.7k|  gumbo_free(output);
 4960|  26.7k|}
parser.c:is_in_static_list:
  497|    512|) {
  498|    512|  if (needle->length == 0)
  ------------------
  |  Branch (498:7): [True: 244, False: 268]
  ------------------
  499|    244|    return false;
  500|    268|  if (exact_match) {
  ------------------
  |  Branch (500:7): [True: 99, False: 169]
  ------------------
  501|    311|    for (size_t i = 0; haystack[i].data; ++i) {
  ------------------
  |  Branch (501:24): [True: 213, False: 98]
  ------------------
  502|    213|      if (gumbo_string_equals_ignore_case(needle, &haystack[i]))
  ------------------
  |  Branch (502:11): [True: 1, False: 212]
  ------------------
  503|      1|        return true;
  504|    213|    }
  505|    169|  } else {
  506|  3.52k|    for (size_t i = 0; haystack[i].data; ++i) {
  ------------------
  |  Branch (506:24): [True: 3.35k, False: 169]
  ------------------
  507|  3.35k|      if (gumbo_string_prefix_ignore_case(&haystack[i], needle))
  ------------------
  |  Branch (507:11): [True: 0, False: 3.35k]
  ------------------
  508|      0|        return true;
  509|  3.35k|    }
  510|    169|  }
  511|    267|  return false;
  512|    268|}
parser.c:output_init:
  337|  26.7k|static void output_init(GumboParser* parser) {
  338|  26.7k|  GumboOutput* output = gumbo_alloc(sizeof(GumboOutput));
  339|  26.7k|  output->root = NULL;
  340|  26.7k|  output->document = new_document_node();
  341|       |  output->document_error = false;
  342|  26.7k|  output->status = GUMBO_STATUS_OK;
  343|  26.7k|  parser->_output = output;
  344|  26.7k|  gumbo_init_errors(parser);
  345|  26.7k|}
parser.c:new_document_node:
  321|  26.7k|static GumboNode* new_document_node(void) {
  322|  26.7k|  GumboNode* document_node = create_node(GUMBO_NODE_DOCUMENT);
  323|  26.7k|  document_node->parse_flags = GUMBO_INSERTION_BY_PARSER;
  324|  26.7k|  gumbo_vector_init(1, &document_node->v.document.children);
  325|       |
  326|       |  // Must be initialized explicitly, as there's no guarantee that we'll see a
  327|       |  // doc type token.
  328|  26.7k|  GumboDocument* document = &document_node->v.document;
  329|  26.7k|  document->has_doctype = false;
  330|  26.7k|  document->name = NULL;
  331|  26.7k|  document->public_identifier = NULL;
  332|       |  document->system_identifier = NULL;
  333|  26.7k|  document->doc_type_quirks_mode = GUMBO_DOCTYPE_NO_QUIRKS;
  334|  26.7k|  return document_node;
  335|  26.7k|}
parser.c:create_node:
  312|   523k|static GumboNode* create_node(GumboNodeType type) {
  313|   523k|  GumboNode* node = gumbo_alloc(sizeof(GumboNode));
  314|       |  node->parent = NULL;
  315|   523k|  node->index_within_parent = -1;
  316|   523k|  node->type = type;
  317|   523k|  node->parse_flags = GUMBO_INSERTION_NORMAL;
  318|   523k|  return node;
  319|   523k|}
parser.c:parser_state_init:
  347|  26.7k|static void parser_state_init(GumboParser* parser) {
  348|  26.7k|  GumboParserState* parser_state = gumbo_alloc(sizeof(GumboParserState));
  349|  26.7k|  parser_state->_insertion_mode = GUMBO_INSERTION_MODE_INITIAL;
  350|  26.7k|  parser_state->_reprocess_current_token = false;
  351|  26.7k|  parser_state->_frameset_ok = true;
  352|  26.7k|  parser_state->_ignore_next_linefeed = false;
  353|  26.7k|  parser_state->_foster_parent_insertions = false;
  354|  26.7k|  parser_state->_text_node._type = GUMBO_NODE_WHITESPACE;
  355|  26.7k|  gumbo_string_buffer_init(&parser_state->_text_node._buffer);
  356|  26.7k|  gumbo_character_token_buffer_init(&parser_state->_table_character_tokens);
  357|  26.7k|  gumbo_vector_init(10, &parser_state->_open_elements);
  358|  26.7k|  gumbo_vector_init(5, &parser_state->_active_formatting_elements);
  359|  26.7k|  gumbo_vector_init(5, &parser_state->_template_insertion_modes);
  360|  26.7k|  parser_state->_head_element = NULL;
  361|  26.7k|  parser_state->_form_element = NULL;
  362|  26.7k|  parser_state->_fragment_ctx = NULL;
  363|  26.7k|  parser_state->_current_token = NULL;
  364|  26.7k|  parser_state->_closed_body_tag = false;
  365|       |  parser_state->_closed_html_tag = false;
  366|  26.7k|  parser->_parser_state = parser_state;
  367|  26.7k|}
parser.c:get_document_node:
  459|  67.6k|static GumboNode* get_document_node(const GumboParser* parser) {
  460|  67.6k|  return parser->_output->document;
  461|  67.6k|}
parser.c:insert_element_of_tag_type:
 1240|  87.9k|) {
 1241|  87.9k|  GumboNode* element = create_element(parser, tag);
 1242|  87.9k|  element->parse_flags |= GUMBO_INSERTION_BY_PARSER | reason;
 1243|       |  insert_element(parser, element, false);
 1244|  87.9k|  gumbo_debug (
 1245|  87.9k|    "Inserting <%s> element (@%p) from tag type.\n",
 1246|  87.9k|    gumbo_normalized_tagname(tag),
 1247|  87.9k|    (void*)element
 1248|  87.9k|  );
 1249|  87.9k|  return element;
 1250|  87.9k|}
parser.c:create_element:
 1131|  87.9k|static GumboNode* create_element(GumboParser* parser, GumboTag tag) {
 1132|       |  // XXX: This will fail for creating fragments with an element with tag
 1133|       |  // GUMBO_TAG_UNKNOWN
 1134|  87.9k|  assert(tag != GUMBO_TAG_UNKNOWN);
  ------------------
  |  Branch (1134:3): [True: 0, False: 87.9k]
  |  Branch (1134:3): [True: 87.9k, False: 0]
  ------------------
 1135|  87.9k|  GumboNode* node = create_node(GUMBO_NODE_ELEMENT);
 1136|  87.9k|  GumboElement* element = &node->v.element;
 1137|  87.9k|  gumbo_vector_init(1, &element->children);
 1138|  87.9k|  gumbo_vector_init(0, &element->attributes);
 1139|  87.9k|  element->tag = tag;
 1140|  87.9k|  element->name = gumbo_normalized_tagname(tag);
 1141|  87.9k|  element->tag_namespace = GUMBO_NAMESPACE_HTML;
 1142|  87.9k|  element->original_tag = kGumboEmptyString;
  ------------------
  |  |   69|  87.9k|#define kGumboEmptyString (const GumboStringPiece)GUMBO_EMPTY_STRING_INIT
  |  |  ------------------
  |  |  |  |   67|  87.9k|#define GUMBO_EMPTY_STRING_INIT { .data = NULL, .length = 0 }
  |  |  ------------------
  ------------------
 1143|  87.9k|  element->original_end_tag = kGumboEmptyString;
  ------------------
  |  |   69|  87.9k|#define kGumboEmptyString (const GumboStringPiece)GUMBO_EMPTY_STRING_INIT
  |  |  ------------------
  |  |  |  |   67|  87.9k|#define GUMBO_EMPTY_STRING_INIT { .data = NULL, .length = 0 }
  |  |  ------------------
  ------------------
 1144|  87.9k|  element->start_pos = (parser->_parser_state->_current_token)
  ------------------
  |  Branch (1144:24): [True: 87.9k, False: 0]
  ------------------
 1145|  87.9k|    ? parser->_parser_state->_current_token->position
 1146|  87.9k|    : kGumboEmptySourcePosition
  ------------------
  |  |   45|  87.9k|#define kGumboEmptySourcePosition (const GumboSourcePosition) \
  |  |   46|  87.9k|  GUMBO_EMPTY_SOURCE_POSITION_INIT
  |  |  ------------------
  |  |  |  |   44|  87.9k|#define GUMBO_EMPTY_SOURCE_POSITION_INIT { .line = 0, .column = 0, .offset = 0 }
  |  |  ------------------
  ------------------
 1147|  87.9k|  ;
 1148|  87.9k|  element->end_pos = kGumboEmptySourcePosition;
  ------------------
  |  |   45|  87.9k|#define kGumboEmptySourcePosition (const GumboSourcePosition) \
  |  |   46|  87.9k|  GUMBO_EMPTY_SOURCE_POSITION_INIT
  |  |  ------------------
  |  |  |  |   44|  87.9k|#define GUMBO_EMPTY_SOURCE_POSITION_INIT { .line = 0, .column = 0, .offset = 0 }
  |  |  ------------------
  ------------------
 1149|  87.9k|  return node;
 1150|  87.9k|}
parser.c:insert_element:
 1197|   339k|) {
 1198|   339k|  GumboParserState* state = parser->_parser_state;
 1199|       |  // NOTE(jdtang): The text node buffer must always be flushed before inserting
 1200|       |  // a node, otherwise we're handling nodes in a different order than the spec
 1201|       |  // mandated. However, one clause of the spec (character tokens in the body)
 1202|       |  // requires that we reconstruct the active formatting elements *before* adding
 1203|       |  // the character, and reconstructing the active formatting elements may itself
 1204|       |  // result in the insertion of new elements (which should be pushed onto the
 1205|       |  // stack of open elements before the buffer is flushed). We solve this (for
 1206|       |  // the time being, the spec has been rewritten for <template> and the new
 1207|       |  // version may be simpler here) with a boolean flag to this method.
 1208|   339k|  if (!is_reconstructing_formatting_elements) {
  ------------------
  |  Branch (1208:7): [True: 339k, False: 0]
  ------------------
 1209|   339k|    maybe_flush_text_node_buffer(parser);
 1210|   339k|  }
 1211|       |  InsertionLocation location = get_appropriate_insertion_location(parser, NULL);
 1212|   339k|  insert_node(node, location);
 1213|   339k|  gumbo_vector_add((void*) node, &state->_open_elements);
 1214|   339k|}
parser.c:maybe_flush_text_node_buffer:
  948|   806k|static void maybe_flush_text_node_buffer(GumboParser* parser) {
  949|   806k|  GumboParserState* state = parser->_parser_state;
  950|   806k|  TextNodeBufferState* buffer_state = &state->_text_node;
  951|   806k|  if (buffer_state->_buffer.length == 0) {
  ------------------
  |  Branch (951:7): [True: 676k, False: 130k]
  ------------------
  952|   676k|    return;
  953|   676k|  }
  954|       |
  955|   806k|  assert (
  ------------------
  |  Branch (955:3): [True: 130k, False: 0]
  |  Branch (955:3): [True: 0, False: 0]
  |  Branch (955:3): [True: 0, False: 0]
  |  Branch (955:3): [True: 5.63k, False: 124k]
  |  Branch (955:3): [True: 124k, False: 472]
  |  Branch (955:3): [True: 472, False: 0]
  ------------------
  956|   130k|    buffer_state->_type == GUMBO_NODE_WHITESPACE
  957|   130k|    || buffer_state->_type == GUMBO_NODE_TEXT
  958|   130k|    || buffer_state->_type == GUMBO_NODE_CDATA
  959|   130k|  );
  960|   130k|  GumboNode* text_node = create_node(buffer_state->_type);
  961|   130k|  GumboText* text_node_data = &text_node->v.text;
  962|   130k|  text_node_data->text = gumbo_string_buffer_to_string(&buffer_state->_buffer);
  963|   130k|  text_node_data->original_text.data = buffer_state->_start_original_text;
  964|   130k|  text_node_data->original_text.length =
  965|   130k|      state->_current_token->original_text.data -
  966|   130k|      buffer_state->_start_original_text;
  967|   130k|  text_node_data->start_pos = buffer_state->_start_position;
  968|       |
  969|   130k|  gumbo_debug (
  970|   130k|    "Flushing text node buffer of %.*s.\n",
  971|   130k|    (int) buffer_state->_buffer.length,
  972|   130k|    buffer_state->_buffer.data
  973|   130k|  );
  974|       |
  975|   130k|  InsertionLocation location = get_appropriate_insertion_location(parser, NULL);
  976|   130k|  GumboNode* prev = NULL;
  977|   130k|  if (location.target->type == GUMBO_NODE_ELEMENT ||
  ------------------
  |  Branch (977:7): [True: 126k, False: 3.83k]
  ------------------
  978|   130k|      location.target->type == GUMBO_NODE_TEMPLATE) {
  ------------------
  |  Branch (978:7): [True: 3.83k, False: 0]
  ------------------
  979|   130k|    GumboVector* siblings = &location.target->v.element.children;
  980|   130k|    if (location.index == -1) {
  ------------------
  |  Branch (980:9): [True: 126k, False: 3.83k]
  ------------------
  981|   126k|      if (siblings->length > 0) prev = siblings->data[siblings->length - 1];
  ------------------
  |  Branch (981:11): [True: 23.2k, False: 103k]
  ------------------
  982|   126k|    } else if (location.index > 0) {
  ------------------
  |  Branch (982:16): [True: 2.94k, False: 889]
  ------------------
  983|  2.94k|      prev = siblings->data[location.index - 1];
  984|  2.94k|    }
  985|   130k|  }
  986|   130k|  if (prev != NULL &&
  ------------------
  |  Branch (986:7): [True: 26.2k, False: 104k]
  ------------------
  987|  26.2k|      (prev->type == GUMBO_NODE_TEXT || prev->type == GUMBO_NODE_WHITESPACE) &&
  ------------------
  |  Branch (987:8): [True: 1.88k, False: 24.3k]
  |  Branch (987:41): [True: 392, False: 23.9k]
  ------------------
  988|  2.27k|      (text_node->type == GUMBO_NODE_TEXT ||
  ------------------
  |  Branch (988:8): [True: 1.58k, False: 687]
  ------------------
  989|  2.25k|       text_node->type == GUMBO_NODE_WHITESPACE)) {
  ------------------
  |  Branch (989:8): [True: 668, False: 19]
  ------------------
  990|  2.25k|    GumboText* prev_data = &prev->v.text;
  991|  2.25k|    size_t prev_length = strlen(prev_data->text);
  992|  2.25k|    size_t added_length = strlen(text_node_data->text);
  993|  2.25k|    char* merged = gumbo_alloc(prev_length + added_length + 1);
  994|  2.25k|    memcpy(merged, prev_data->text, prev_length);
  995|  2.25k|    memcpy(merged + prev_length, text_node_data->text, added_length + 1);
  996|  2.25k|    gumbo_free((void*) prev_data->text);
  997|  2.25k|    prev_data->text = merged;
  998|  2.25k|    if (text_node->type == GUMBO_NODE_TEXT) {
  ------------------
  |  Branch (998:9): [True: 1.58k, False: 668]
  ------------------
  999|  1.58k|      prev->type = GUMBO_NODE_TEXT;
 1000|  1.58k|    }
 1001|  2.25k|    destroy_node(text_node);
 1002|   128k|  } else if (location.target->type == GUMBO_NODE_DOCUMENT) {
  ------------------
  |  Branch (1002:14): [True: 0, False: 128k]
  ------------------
 1003|       |    // The DOM does not allow Document nodes to have Text children, so per the
 1004|       |    // spec, they are dropped on the floor.
 1005|      0|    destroy_node(text_node);
 1006|   128k|  } else {
 1007|   128k|    insert_node(text_node, location);
 1008|   128k|  }
 1009|       |
 1010|   130k|  gumbo_string_buffer_clear(&buffer_state->_buffer);
 1011|   130k|  buffer_state->_type = GUMBO_NODE_WHITESPACE;
 1012|       |  assert(buffer_state->_buffer.length == 0);
  ------------------
  |  Branch (1012:3): [True: 0, False: 130k]
  |  Branch (1012:3): [True: 130k, False: 0]
  ------------------
 1013|   130k|}
parser.c:get_appropriate_insertion_location:
  835|   496k|) {
  836|   496k|  InsertionLocation retval = {override_target, -1};
  837|   496k|  if (retval.target == NULL) {
  ------------------
  |  Branch (837:7): [True: 490k, False: 6.60k]
  ------------------
  838|       |    // No override target; default to the current node, but special-case the
  839|       |    // root node since get_current_node() assumes the stack of open elements is
  840|       |    // non-empty.
  841|   490k|    retval.target = (parser->_output->root != NULL)
  ------------------
  |  Branch (841:21): [True: 463k, False: 26.7k]
  ------------------
  842|   490k|      ? get_current_node(parser)
  843|   490k|      : get_document_node(parser)
  844|   490k|    ;
  845|   490k|  }
  846|   496k|  if (
  847|   496k|    !parser->_parser_state->_foster_parent_insertions
  ------------------
  |  Branch (847:5): [True: 403k, False: 93.1k]
  ------------------
  848|  93.1k|    || !node_tag_in_set(retval.target, &(const TagSet) {
  ------------------
  |  Branch (848:8): [True: 71.8k, False: 21.3k]
  ------------------
  849|  93.1k|      TAG(TABLE), TAG(TBODY), TAG(TFOOT), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  93.1k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TABLE), TAG(TBODY), TAG(TFOOT), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  93.1k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TABLE), TAG(TBODY), TAG(TFOOT), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  93.1k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TABLE), TAG(TBODY), TAG(TFOOT), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  93.1k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TABLE), TAG(TBODY), TAG(TFOOT), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  93.1k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
  850|  93.1k|    })
  851|   496k|  ) {
  852|   475k|    return retval;
  853|   475k|  }
  854|       |
  855|       |  // Foster-parenting case.
  856|  21.3k|  int last_template_index = -1;
  857|  21.3k|  int last_table_index = -1;
  858|  21.3k|  const GumboVector* open_elements = &parser->_parser_state->_open_elements;
  859|   468k|  for (unsigned int i = 0; i < open_elements->length; ++i) {
  ------------------
  |  Branch (859:28): [True: 446k, False: 21.3k]
  ------------------
  860|   446k|    if (node_html_tag_is(open_elements->data[i], GUMBO_TAG_TEMPLATE)) {
  ------------------
  |  Branch (860:9): [True: 26.5k, False: 420k]
  ------------------
  861|  26.5k|      last_template_index = i;
  862|  26.5k|    }
  863|   446k|    if (node_html_tag_is(open_elements->data[i], GUMBO_TAG_TABLE)) {
  ------------------
  |  Branch (863:9): [True: 78.5k, False: 368k]
  ------------------
  864|  78.5k|      last_table_index = i;
  865|  78.5k|    }
  866|   446k|  }
  867|  21.3k|  if (
  868|  21.3k|    last_template_index != -1
  ------------------
  |  Branch (868:5): [True: 4.17k, False: 17.1k]
  ------------------
  869|  4.17k|    && (last_table_index == -1 || last_template_index > last_table_index)
  ------------------
  |  Branch (869:9): [True: 1.43k, False: 2.74k]
  |  Branch (869:35): [True: 642, False: 2.09k]
  ------------------
  870|  21.3k|  ) {
  871|  2.07k|    retval.target = open_elements->data[last_template_index];
  872|  2.07k|    return retval;
  873|  2.07k|  }
  874|  19.2k|  if (last_table_index == -1) {
  ------------------
  |  Branch (874:7): [True: 0, False: 19.2k]
  ------------------
  875|      0|    retval.target = open_elements->data[0];
  876|      0|    return retval;
  877|      0|  }
  878|  19.2k|  const GumboNode* last_table = open_elements->data[last_table_index];
  879|  19.2k|  if (last_table->parent != NULL) {
  ------------------
  |  Branch (879:7): [True: 19.2k, False: 0]
  ------------------
  880|  19.2k|    retval.target = last_table->parent;
  881|  19.2k|    retval.index = last_table->index_within_parent;
  882|  19.2k|    return retval;
  883|  19.2k|  }
  884|       |
  885|      0|  retval.target = open_elements->data[last_table_index - 1];
  886|      0|  return retval;
  887|  19.2k|}
parser.c:get_current_node:
  469|  20.4M|static GumboNode* get_current_node(const GumboParser* parser) {
  470|  20.4M|  const GumboVector* open_elements = &parser->_parser_state->_open_elements;
  471|  20.4M|  if (open_elements->length == 0) {
  ------------------
  |  Branch (471:7): [True: 92.5k, False: 20.3M]
  ------------------
  472|  92.5k|    assert(!parser->_output->root);
  ------------------
  |  Branch (472:5): [True: 0, False: 92.5k]
  |  Branch (472:5): [True: 92.5k, False: 0]
  ------------------
  473|  92.5k|    return NULL;
  474|  92.5k|  }
  475|  20.4M|  assert(open_elements->length > 0);
  ------------------
  |  Branch (475:3): [True: 0, False: 20.3M]
  |  Branch (475:3): [True: 20.3M, False: 0]
  ------------------
  476|  20.3M|  assert(open_elements->data != NULL);
  ------------------
  |  Branch (476:3): [True: 0, False: 20.3M]
  |  Branch (476:3): [True: 20.3M, False: 0]
  ------------------
  477|  20.3M|  return open_elements->data[open_elements->length - 1];
  478|  20.3M|}
parser.c:node_tag_in_set:
  582|  1.65M|static bool node_tag_in_set(const GumboNode* node, const TagSet* tags) {
  583|  1.65M|  assert(node != NULL);
  ------------------
  |  Branch (583:3): [True: 0, False: 1.65M]
  |  Branch (583:3): [True: 1.65M, False: 0]
  ------------------
  584|  1.65M|  if (node->type != GUMBO_NODE_ELEMENT && node->type != GUMBO_NODE_TEMPLATE) {
  ------------------
  |  Branch (584:7): [True: 12.6k, False: 1.64M]
  |  Branch (584:43): [True: 0, False: 12.6k]
  ------------------
  585|      0|    return false;
  586|      0|  }
  587|  1.65M|  return tagset_includes (
  588|  1.65M|    tags,
  589|  1.65M|    node->v.element.tag_namespace,
  590|  1.65M|    node->v.element.tag
  591|  1.65M|  );
  592|  1.65M|}
parser.c:tagset_includes:
  577|  2.84M|) {
  578|  2.84M|  return ((*tagset)[(unsigned) tag] & (1u << (unsigned) ns)) != 0u;
  579|  2.84M|}
parser.c:node_html_tag_is:
  646|  2.55M|static bool node_html_tag_is(const GumboNode* node, GumboTag tag) {
  647|  2.55M|  return node_qualified_tag_is(node, GUMBO_NAMESPACE_HTML, tag);
  648|  2.55M|}
parser.c:node_qualified_tag_is:
  636|  3.14M|) {
  637|  3.14M|  assert(node);
  ------------------
  |  Branch (637:3): [True: 0, False: 3.14M]
  |  Branch (637:3): [True: 3.14M, False: 0]
  ------------------
  638|  3.14M|  assert(tag != GUMBO_TAG_UNKNOWN);
  ------------------
  |  Branch (638:3): [True: 0, False: 3.14M]
  |  Branch (638:3): [True: 3.14M, False: 0]
  ------------------
  639|  3.14M|  assert(node->type == GUMBO_NODE_ELEMENT || node->type == GUMBO_NODE_TEMPLATE);
  ------------------
  |  Branch (639:3): [True: 3.14M, False: 0]
  |  Branch (639:3): [True: 0, False: 0]
  |  Branch (639:3): [True: 3.02M, False: 119k]
  |  Branch (639:3): [True: 119k, False: 0]
  ------------------
  640|  3.14M|  return
  641|  3.14M|    node->v.element.tag == tag
  ------------------
  |  Branch (641:5): [True: 727k, False: 2.41M]
  ------------------
  642|   727k|    && node->v.element.tag_namespace == ns;
  ------------------
  |  Branch (642:8): [True: 726k, False: 1.24k]
  ------------------
  643|  3.14M|}
parser.c:insert_node:
  913|   494k|static void insert_node(GumboNode* node, InsertionLocation location) {
  914|   494k|  assert(node->parent == NULL);
  ------------------
  |  Branch (914:3): [True: 0, False: 494k]
  |  Branch (914:3): [True: 494k, False: 0]
  ------------------
  915|   494k|  assert(node->index_within_parent == (unsigned int) -1);
  ------------------
  |  Branch (915:3): [True: 0, False: 494k]
  |  Branch (915:3): [True: 494k, False: 0]
  ------------------
  916|   494k|  GumboNode* parent = location.target;
  917|   494k|  int index = location.index;
  918|   494k|  if (index != -1) {
  ------------------
  |  Branch (918:7): [True: 17.8k, False: 476k]
  ------------------
  919|  17.8k|    GumboVector* children = NULL;
  920|  17.8k|    if (
  921|  17.8k|      parent->type == GUMBO_NODE_ELEMENT
  ------------------
  |  Branch (921:7): [True: 17.3k, False: 565]
  ------------------
  922|    565|      || parent->type == GUMBO_NODE_TEMPLATE
  ------------------
  |  Branch (922:10): [True: 565, False: 0]
  ------------------
  923|  17.8k|    ) {
  924|  17.8k|      children = &parent->v.element.children;
  925|  17.8k|    } else if (parent->type == GUMBO_NODE_DOCUMENT) {
  ------------------
  |  Branch (925:16): [True: 0, False: 0]
  ------------------
  926|      0|      children = &parent->v.document.children;
  927|      0|      assert(children->length == 0);
  ------------------
  |  Branch (927:7): [True: 0, False: 0]
  |  Branch (927:7): [True: 0, False: 0]
  ------------------
  928|      0|    } else {
  929|      0|      assert(0);
  ------------------
  |  Branch (929:7): [Folded, False: 0]
  |  Branch (929:7): [Folded, False: 0]
  ------------------
  930|      0|    }
  931|       |
  932|  17.8k|    assert(index >= 0);
  ------------------
  |  Branch (932:5): [True: 0, False: 17.8k]
  |  Branch (932:5): [True: 17.8k, False: 0]
  ------------------
  933|  17.8k|    assert((unsigned int) index < children->length);
  ------------------
  |  Branch (933:5): [True: 0, False: 17.8k]
  |  Branch (933:5): [True: 17.8k, False: 0]
  ------------------
  934|  17.8k|    node->parent = parent;
  935|  17.8k|    node->index_within_parent = index;
  936|  17.8k|    gumbo_vector_insert_at((void*) node, index, children);
  937|  17.8k|    assert(node->index_within_parent < children->length);
  ------------------
  |  Branch (937:5): [True: 0, False: 17.8k]
  |  Branch (937:5): [True: 17.8k, False: 0]
  ------------------
  938|  35.7k|    for (unsigned int i = index + 1; i < children->length; ++i) {
  ------------------
  |  Branch (938:38): [True: 17.8k, False: 17.8k]
  ------------------
  939|  17.8k|      GumboNode* sibling = children->data[i];
  940|  17.8k|      sibling->index_within_parent = i;
  941|  17.8k|      assert(sibling->index_within_parent < children->length);
  ------------------
  |  Branch (941:7): [True: 0, False: 17.8k]
  |  Branch (941:7): [True: 17.8k, False: 0]
  ------------------
  942|  17.8k|    }
  943|   476k|  } else {
  944|   476k|    append_node(parent, node);
  945|   476k|  }
  946|   494k|}
parser.c:append_node:
  891|   513k|static void append_node(GumboNode* parent, GumboNode* node) {
  892|   513k|  assert(node->parent == NULL);
  ------------------
  |  Branch (892:3): [True: 0, False: 513k]
  |  Branch (892:3): [True: 513k, False: 0]
  ------------------
  893|   513k|  assert(node->index_within_parent == (unsigned int) -1);
  ------------------
  |  Branch (893:3): [True: 0, False: 513k]
  |  Branch (893:3): [True: 513k, False: 0]
  ------------------
  894|   513k|  GumboVector* children;
  895|   513k|  if (
  896|   513k|    parent->type == GUMBO_NODE_ELEMENT
  ------------------
  |  Branch (896:5): [True: 463k, False: 50.1k]
  ------------------
  897|  50.1k|    || parent->type == GUMBO_NODE_TEMPLATE
  ------------------
  |  Branch (897:8): [True: 21.1k, False: 29.0k]
  ------------------
  898|   513k|  ) {
  899|   484k|    children = &parent->v.element.children;
  900|   484k|  } else {
  901|  29.0k|    assert(parent->type == GUMBO_NODE_DOCUMENT);
  ------------------
  |  Branch (901:5): [True: 0, False: 29.0k]
  |  Branch (901:5): [True: 29.0k, False: 0]
  ------------------
  902|  29.0k|    children = &parent->v.document.children;
  903|  29.0k|  }
  904|   513k|  node->parent = parent;
  905|   513k|  node->index_within_parent = children->length;
  906|   513k|  gumbo_vector_add((void*) node, children);
  907|       |  assert(node->index_within_parent < children->length);
  ------------------
  |  Branch (907:3): [True: 0, False: 513k]
  |  Branch (907:3): [True: 513k, False: 0]
  ------------------
  908|   513k|}
parser.c:push_template_insertion_mode:
  521|  12.4k|) {
  522|  12.4k|  gumbo_vector_add (
  523|  12.4k|    (void*) mode,
  524|  12.4k|    &parser->_parser_state->_template_insertion_modes
  525|  12.4k|  );
  526|  12.4k|}
parser.c:reset_insertion_mode_appropriately:
  724|  16.3k|static void reset_insertion_mode_appropriately(GumboParser* parser) {
  725|  16.3k|  const GumboVector* open_elements = &parser->_parser_state->_open_elements;
  726|  52.7k|  for (int i = open_elements->length; --i >= 0;) {
  ------------------
  |  Branch (726:39): [True: 52.7k, False: 0]
  ------------------
  727|  52.7k|    GumboInsertionMode mode = get_appropriate_insertion_mode(parser, i);
  728|  52.7k|    if (mode != GUMBO_INSERTION_MODE_INITIAL) {
  ------------------
  |  Branch (728:9): [True: 16.3k, False: 36.4k]
  ------------------
  729|  16.3k|      set_insertion_mode(parser, mode);
  730|  16.3k|      return;
  731|  16.3k|    }
  732|  52.7k|  }
  733|       |  // Should never get here, because is_last will be set on the last iteration
  734|       |  // and will force GUMBO_INSERTION_MODE_IN_BODY.
  735|  16.3k|  assert(0);
  ------------------
  |  Branch (735:3): [Folded, False: 0]
  |  Branch (735:3): [Folded, False: 0]
  ------------------
  736|      0|}
parser.c:get_appropriate_insertion_mode:
  658|  52.7k|) {
  659|  52.7k|  const GumboVector* open_elements = &parser->_parser_state->_open_elements;
  660|  52.7k|  const GumboNode* node = open_elements->data[index];
  661|  52.7k|  const bool is_last = index == 0;
  662|       |
  663|  52.7k|  if (is_last && is_fragment_parser(parser)) {
  ------------------
  |  Branch (663:7): [True: 208, False: 52.5k]
  |  Branch (663:18): [True: 0, False: 208]
  ------------------
  664|      0|    node = parser->_parser_state->_fragment_ctx;
  665|      0|  }
  666|       |
  667|  52.7k|  assert(node->type == GUMBO_NODE_ELEMENT || node->type == GUMBO_NODE_TEMPLATE);
  ------------------
  |  Branch (667:3): [True: 52.7k, False: 0]
  |  Branch (667:3): [True: 0, False: 0]
  |  Branch (667:3): [True: 48.3k, False: 4.45k]
  |  Branch (667:3): [True: 4.45k, False: 0]
  ------------------
  668|  52.7k|  if (node->v.element.tag_namespace != GUMBO_NAMESPACE_HTML) {
  ------------------
  |  Branch (668:7): [True: 531, False: 52.2k]
  ------------------
  669|    531|    return is_last ? GUMBO_INSERTION_MODE_IN_BODY : GUMBO_INSERTION_MODE_INITIAL;
  ------------------
  |  Branch (669:12): [True: 0, False: 531]
  ------------------
  670|    531|  }
  671|       |
  672|  52.2k|  switch (node->v.element.tag) {
  673|    879|    case GUMBO_TAG_SELECT: {
  ------------------
  |  Branch (673:5): [True: 879, False: 51.3k]
  ------------------
  674|    879|      if (is_last) {
  ------------------
  |  Branch (674:11): [True: 0, False: 879]
  ------------------
  675|      0|        return GUMBO_INSERTION_MODE_IN_SELECT;
  676|      0|      }
  677|  3.36k|      for (int i = index; i > 0; --i) {
  ------------------
  |  Branch (677:27): [True: 3.09k, False: 276]
  ------------------
  678|  3.09k|        const GumboNode* ancestor = open_elements->data[i];
  679|  3.09k|        if (node_html_tag_is(ancestor, GUMBO_TAG_TEMPLATE)) {
  ------------------
  |  Branch (679:13): [True: 399, False: 2.69k]
  ------------------
  680|    399|          return GUMBO_INSERTION_MODE_IN_SELECT;
  681|    399|        }
  682|  2.69k|        if (node_html_tag_is(ancestor, GUMBO_TAG_TABLE)) {
  ------------------
  |  Branch (682:13): [True: 204, False: 2.48k]
  ------------------
  683|    204|          return GUMBO_INSERTION_MODE_IN_SELECT_IN_TABLE;
  684|    204|        }
  685|  2.69k|      }
  686|    276|      return GUMBO_INSERTION_MODE_IN_SELECT;
  687|    879|    }
  688|    725|    case GUMBO_TAG_TD:
  ------------------
  |  Branch (688:5): [True: 725, False: 51.5k]
  ------------------
  689|  1.83k|    case GUMBO_TAG_TH:
  ------------------
  |  Branch (689:5): [True: 1.11k, False: 51.1k]
  ------------------
  690|  1.83k|      if (!is_last) return GUMBO_INSERTION_MODE_IN_CELL;
  ------------------
  |  Branch (690:11): [True: 1.83k, False: 0]
  ------------------
  691|      0|      break;
  692|    981|    case GUMBO_TAG_TR:
  ------------------
  |  Branch (692:5): [True: 981, False: 51.2k]
  ------------------
  693|    981|      return GUMBO_INSERTION_MODE_IN_ROW;
  694|    216|    case GUMBO_TAG_TBODY:
  ------------------
  |  Branch (694:5): [True: 216, False: 52.0k]
  ------------------
  695|    597|    case GUMBO_TAG_THEAD:
  ------------------
  |  Branch (695:5): [True: 381, False: 51.8k]
  ------------------
  696|    857|    case GUMBO_TAG_TFOOT:
  ------------------
  |  Branch (696:5): [True: 260, False: 51.9k]
  ------------------
  697|    857|      return GUMBO_INSERTION_MODE_IN_TABLE_BODY;
  698|    505|    case GUMBO_TAG_CAPTION:
  ------------------
  |  Branch (698:5): [True: 505, False: 51.7k]
  ------------------
  699|    505|      return GUMBO_INSERTION_MODE_IN_CAPTION;
  700|    205|    case GUMBO_TAG_COLGROUP:
  ------------------
  |  Branch (700:5): [True: 205, False: 52.0k]
  ------------------
  701|    205|      return GUMBO_INSERTION_MODE_IN_COLUMN_GROUP;
  702|    472|    case GUMBO_TAG_TABLE:
  ------------------
  |  Branch (702:5): [True: 472, False: 51.7k]
  ------------------
  703|    472|      return GUMBO_INSERTION_MODE_IN_TABLE;
  704|  4.45k|    case GUMBO_TAG_TEMPLATE:
  ------------------
  |  Branch (704:5): [True: 4.45k, False: 47.7k]
  ------------------
  705|  4.45k|      return get_current_template_insertion_mode(parser);
  706|    510|    case GUMBO_TAG_HEAD:
  ------------------
  |  Branch (706:5): [True: 510, False: 51.7k]
  ------------------
  707|    510|      if (!is_last) return GUMBO_INSERTION_MODE_IN_HEAD;
  ------------------
  |  Branch (707:11): [True: 510, False: 0]
  ------------------
  708|      0|      break;
  709|  5.46k|    case GUMBO_TAG_BODY:
  ------------------
  |  Branch (709:5): [True: 5.46k, False: 46.7k]
  ------------------
  710|  5.46k|      return GUMBO_INSERTION_MODE_IN_BODY;
  711|      0|    case GUMBO_TAG_FRAMESET:
  ------------------
  |  Branch (711:5): [True: 0, False: 52.2k]
  ------------------
  712|      0|      return GUMBO_INSERTION_MODE_IN_FRAMESET;
  713|    208|    case GUMBO_TAG_HTML:
  ------------------
  |  Branch (713:5): [True: 208, False: 52.0k]
  ------------------
  714|    208|      return parser->_parser_state->_head_element
  ------------------
  |  Branch (714:14): [True: 208, False: 0]
  ------------------
  715|    208|        ? GUMBO_INSERTION_MODE_AFTER_HEAD
  716|    208|        : GUMBO_INSERTION_MODE_BEFORE_HEAD;
  717|  35.8k|    default:
  ------------------
  |  Branch (717:5): [True: 35.8k, False: 16.3k]
  ------------------
  718|  35.8k|      break;
  719|  52.2k|  }
  720|  35.8k|  return is_last ? GUMBO_INSERTION_MODE_IN_BODY : GUMBO_INSERTION_MODE_INITIAL;
  ------------------
  |  Branch (720:10): [True: 0, False: 35.8k]
  ------------------
  721|  52.2k|}
parser.c:is_fragment_parser:
  463|  1.82k|static bool is_fragment_parser(const GumboParser* parser) {
  464|  1.82k|  return !!parser->_parser_state->_fragment_ctx;
  465|  1.82k|}
parser.c:get_current_template_insertion_mode:
  536|  34.6k|) {
  537|  34.6k|  GumboVector* modes = &parser->_parser_state->_template_insertion_modes;
  538|  34.6k|  if (modes->length == 0) {
  ------------------
  |  Branch (538:7): [True: 26.3k, False: 8.30k]
  ------------------
  539|  26.3k|    return GUMBO_INSERTION_MODE_INITIAL;
  540|  26.3k|  }
  541|  8.30k|  return (GumboInsertionMode)(intptr_t) modes->data[(modes->length - 1)];
  542|  34.6k|}
parser.c:set_insertion_mode:
  514|   227k|static void set_insertion_mode(GumboParser* parser, GumboInsertionMode mode) {
  515|   227k|  parser->_parser_state->_insertion_mode = mode;
  516|   227k|}
parser.c:get_adjusted_current_node:
  480|  18.9M|static GumboNode* get_adjusted_current_node(const GumboParser* parser) {
  481|  18.9M|  const GumboParserState* state = parser->_parser_state;
  482|  18.9M|  if (state->_open_elements.length == 1 && state->_fragment_ctx) {
  ------------------
  |  Branch (482:7): [True: 164k, False: 18.7M]
  |  Branch (482:44): [True: 0, False: 164k]
  ------------------
  483|      0|    return state->_fragment_ctx;
  484|      0|  }
  485|  18.9M|  return get_current_node(parser);
  486|  18.9M|}
parser.c:handle_token:
 4568|  9.55M|static void handle_token(GumboParser* parser, GumboToken* token) {
 4569|  9.55M|  if (
 4570|  9.55M|    parser->_parser_state->_ignore_next_linefeed
  ------------------
  |  Branch (4570:5): [True: 1.78k, False: 9.55M]
  ------------------
 4571|  1.78k|    && token->type == GUMBO_TOKEN_WHITESPACE && token->v.character == '\n'
  ------------------
  |  Branch (4571:8): [True: 514, False: 1.27k]
  |  Branch (4571:49): [True: 196, False: 318]
  ------------------
 4572|  9.55M|  ) {
 4573|    196|    parser->_parser_state->_ignore_next_linefeed = false;
 4574|    196|    ignore_token(parser);
 4575|    196|    return;
 4576|    196|  }
 4577|       |  // This needs to be reset both here and in the conditional above to catch both
 4578|       |  // the case where the next token is not whitespace (so we don't ignore
 4579|       |  // whitespace in the middle of <pre> tags) and where there are multiple
 4580|       |  // whitespace tokens (so we don't ignore the second one).
 4581|  9.55M|  parser->_parser_state->_ignore_next_linefeed = false;
 4582|       |
 4583|  9.55M|  if (tag_is(token, kEndTag, GUMBO_TAG_BODY)) {
  ------------------
  |  Branch (4583:7): [True: 2.44k, False: 9.54M]
  ------------------
 4584|  2.44k|    parser->_parser_state->_closed_body_tag = true;
 4585|  2.44k|  }
 4586|  9.55M|  if (tag_is(token, kEndTag, GUMBO_TAG_HTML)) {
  ------------------
  |  Branch (4586:7): [True: 4.54k, False: 9.54M]
  ------------------
 4587|  4.54k|    parser->_parser_state->_closed_html_tag = true;
 4588|  4.54k|  }
 4589|       |
 4590|  9.55M|  const GumboNode* current_node = get_adjusted_current_node(parser);
 4591|  9.55M|  assert (
  ------------------
  |  Branch (4591:3): [True: 9.55M, False: 0]
  |  Branch (4591:3): [True: 0, False: 0]
  |  Branch (4591:3): [True: 0, False: 0]
  |  Branch (4591:3): [True: 59.3k, False: 9.49M]
  |  Branch (4591:3): [True: 9.35M, False: 142k]
  |  Branch (4591:3): [True: 142k, False: 0]
  ------------------
 4592|  9.55M|    !current_node
 4593|  9.55M|    || current_node->type == GUMBO_NODE_ELEMENT
 4594|  9.55M|    || current_node->type == GUMBO_NODE_TEMPLATE
 4595|  9.55M|  );
 4596|  9.55M|  if (current_node)
  ------------------
  |  Branch (4596:7): [True: 9.49M, False: 59.3k]
  ------------------
 4597|  9.49M|    gumbo_debug("Current node: <%s>.\n", current_node->v.element.name);
 4598|  9.55M|  if (!current_node ||
  ------------------
  |  Branch (4598:7): [True: 59.3k, False: 9.49M]
  ------------------
 4599|  9.49M|      current_node->v.element.tag_namespace == GUMBO_NAMESPACE_HTML ||
  ------------------
  |  Branch (4599:7): [True: 9.07M, False: 415k]
  ------------------
 4600|   415k|      (is_mathml_integration_point(current_node) &&
  ------------------
  |  Branch (4600:8): [True: 7.46k, False: 408k]
  ------------------
 4601|  7.46k|          (token->type == GUMBO_TOKEN_CHARACTER ||
  ------------------
  |  Branch (4601:12): [True: 4.52k, False: 2.94k]
  ------------------
 4602|  2.94k|              token->type == GUMBO_TOKEN_WHITESPACE ||
  ------------------
  |  Branch (4602:15): [True: 330, False: 2.61k]
  ------------------
 4603|  2.61k|              token->type == GUMBO_TOKEN_NULL ||
  ------------------
  |  Branch (4603:15): [True: 1.49k, False: 1.12k]
  ------------------
 4604|  1.12k|              (token->type == GUMBO_TOKEN_START_TAG &&
  ------------------
  |  Branch (4604:16): [True: 608, False: 513]
  ------------------
 4605|    608|                  !tag_in(token, kStartTag,
  ------------------
  |  Branch (4605:19): [True: 413, False: 195]
  ------------------
 4606|    608|                      &(const TagSet){TAG(MGLYPH), TAG(MALIGNMARK)})))) ||
  ------------------
  |  |   40|    608|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                                    &(const TagSet){TAG(MGLYPH), TAG(MALIGNMARK)})))) ||
  ------------------
  |  |   40|    608|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 4607|   409k|      (current_node->v.element.tag_namespace == GUMBO_NAMESPACE_MATHML &&
  ------------------
  |  Branch (4607:8): [True: 135k, False: 273k]
  ------------------
 4608|   135k|          node_qualified_tag_is(
  ------------------
  |  Branch (4608:11): [True: 8.22k, False: 127k]
  ------------------
 4609|   135k|              current_node, GUMBO_NAMESPACE_MATHML, GUMBO_TAG_ANNOTATION_XML) &&
 4610|  8.22k|          tag_is(token, kStartTag, GUMBO_TAG_SVG)) ||
  ------------------
  |  Branch (4610:11): [True: 296, False: 7.93k]
  ------------------
 4611|   408k|      (is_html_integration_point(current_node) &&
  ------------------
  |  Branch (4611:8): [True: 11.4k, False: 397k]
  ------------------
 4612|  11.4k|          (token->type == GUMBO_TOKEN_START_TAG ||
  ------------------
  |  Branch (4612:12): [True: 585, False: 10.8k]
  ------------------
 4613|  10.8k|              token->type == GUMBO_TOKEN_CHARACTER ||
  ------------------
  |  Branch (4613:15): [True: 7.74k, False: 3.13k]
  ------------------
 4614|  3.13k|              token->type == GUMBO_TOKEN_NULL ||
  ------------------
  |  Branch (4614:15): [True: 1.59k, False: 1.54k]
  ------------------
 4615|  1.54k|              token->type == GUMBO_TOKEN_WHITESPACE)) ||
  ------------------
  |  Branch (4615:15): [True: 873, False: 670]
  ------------------
 4616|  9.15M|      token->type == GUMBO_TOKEN_EOF) {
  ------------------
  |  Branch (4616:7): [True: 986, False: 397k]
  ------------------
 4617|  9.15M|    handle_html_content(parser, token);
 4618|  9.15M|  } else {
 4619|   397k|    handle_in_foreign_content(parser, token);
 4620|   397k|  }
 4621|  9.55M|}
parser.c:ignore_token:
 2123|   740k|static void ignore_token(GumboParser* parser) {
 2124|   740k|  gumbo_debug("Ignoring token.\n");
 2125|   740k|  GumboToken* token = parser->_parser_state->_current_token;
 2126|       |  // Ownership of the token's internal buffers are normally transferred to the
 2127|       |  // element, but if no element is emitted (as happens in non-verbatim-mode
 2128|       |  // when a token is ignored), we need to free it here to prevent a memory
 2129|       |  // leak.
 2130|   740k|  gumbo_token_destroy(token);
 2131|   740k|#ifndef NDEBUG
 2132|   740k|  if (token->type == GUMBO_TOKEN_START_TAG) {
  ------------------
  |  Branch (2132:7): [True: 22.3k, False: 718k]
  ------------------
 2133|       |    // Mark this sentinel so the assertion in the main loop knows it's been
 2134|       |    // destroyed.
 2135|  22.3k|    token->v.start_tag.attributes = kGumboEmptyVector;
  ------------------
  |  |  123|  22.3k|#define kGumboEmptyVector (const GumboVector)GUMBO_EMPTY_VECTOR_INIT
  |  |  ------------------
  |  |  |  |  121|  22.3k|# define GUMBO_EMPTY_VECTOR_INIT { .data = NULL, .length = 0, .capacity = 0 }
  |  |  ------------------
  ------------------
 2136|       |    token->v.start_tag.name = NULL;
 2137|  22.3k|  }
 2138|   740k|#endif
 2139|   740k|}
parser.c:tag_is:
  563|  28.8M|static bool tag_is(const GumboToken* token, bool is_start, GumboTag tag) {
  564|  28.8M|  if (is_start && token->type == GUMBO_TOKEN_START_TAG) {
  ------------------
  |  Branch (564:7): [True: 6.72M, False: 22.0M]
  |  Branch (564:19): [True: 3.21M, False: 3.51M]
  ------------------
  565|  3.21M|    return token->v.start_tag.tag == tag;
  566|  3.21M|  }
  567|  25.6M|  if (!is_start && token->type == GUMBO_TOKEN_END_TAG) {
  ------------------
  |  Branch (567:7): [True: 22.0M, False: 3.51M]
  |  Branch (567:20): [True: 329k, False: 21.7M]
  ------------------
  568|   329k|    return token->v.end_tag.tag == tag;
  569|   329k|  }
  570|  25.2M|  return false;
  571|  25.6M|}
parser.c:is_mathml_integration_point:
  788|   424k|static bool is_mathml_integration_point(const GumboNode* node) {
  789|   424k|  static const TagSet mathml_integration_point_tags = {
  790|   424k|    TAG_MATHML(MI), TAG_MATHML(MO), TAG_MATHML(MN),
  ------------------
  |  |   42|   424k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  ------------------
                  TAG_MATHML(MI), TAG_MATHML(MO), TAG_MATHML(MN),
  ------------------
  |  |   42|   424k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  ------------------
                  TAG_MATHML(MI), TAG_MATHML(MO), TAG_MATHML(MN),
  ------------------
  |  |   42|   424k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  ------------------
  791|   424k|    TAG_MATHML(MS), TAG_MATHML(MTEXT)
  ------------------
  |  |   42|   424k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  ------------------
                  TAG_MATHML(MS), TAG_MATHML(MTEXT)
  ------------------
  |  |   42|   424k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  ------------------
  792|   424k|  };
  793|   424k|  return node_tag_in_set(node, &mathml_integration_point_tags);
  794|   424k|}
parser.c:tag_in:
  550|  5.76M|) {
  551|  5.76M|  GumboTag token_tag;
  552|  5.76M|  if (is_start && token->type == GUMBO_TOKEN_START_TAG) {
  ------------------
  |  Branch (552:7): [True: 3.87M, False: 1.88M]
  |  Branch (552:19): [True: 2.09M, False: 1.77M]
  ------------------
  553|  2.09M|    token_tag = token->v.start_tag.tag;
  554|  3.66M|  } else if (!is_start && token->type == GUMBO_TOKEN_END_TAG) {
  ------------------
  |  Branch (554:14): [True: 1.88M, False: 1.77M]
  |  Branch (554:27): [True: 114k, False: 1.77M]
  ------------------
  555|   114k|    token_tag = token->v.end_tag.tag;
  556|  3.55M|  } else {
  557|  3.55M|    return false;
  558|  3.55M|  }
  559|  2.21M|  return (*tags)[(unsigned) token_tag] != 0u;
  560|  5.76M|}
parser.c:is_html_integration_point:
  797|   417k|static bool is_html_integration_point(const GumboNode* node) {
  798|   417k|  static const TagSet html_integration_point_svg_tags = {
  799|   417k|      TAG_SVG(FOREIGNOBJECT), TAG_SVG(DESC), TAG_SVG(TITLE)
  ------------------
  |  |   41|   417k|#define TAG_SVG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_SVG)
  ------------------
                    TAG_SVG(FOREIGNOBJECT), TAG_SVG(DESC), TAG_SVG(TITLE)
  ------------------
  |  |   41|   417k|#define TAG_SVG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_SVG)
  ------------------
                    TAG_SVG(FOREIGNOBJECT), TAG_SVG(DESC), TAG_SVG(TITLE)
  ------------------
  |  |   41|   417k|#define TAG_SVG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_SVG)
  ------------------
  800|   417k|  };
  801|   417k|  if (node_tag_in_set(node, &html_integration_point_svg_tags)) {
  ------------------
  |  Branch (801:7): [True: 11.8k, False: 405k]
  ------------------
  802|  11.8k|    return true;
  803|  11.8k|  }
  804|       |
  805|   405k|  const bool is_mathml_annotation_xml_element = node_qualified_tag_is (
  806|   405k|    node,
  807|   405k|    GUMBO_NAMESPACE_MATHML,
  808|   405k|    GUMBO_TAG_ANNOTATION_XML
  809|   405k|  );
  810|   405k|  const GumboVector* attributes = &node->v.element.attributes;
  811|   405k|  if (
  812|   405k|    is_mathml_annotation_xml_element
  ------------------
  |  Branch (812:5): [True: 7.98k, False: 397k]
  ------------------
  813|  7.98k|    && (
  814|  7.98k|      attribute_matches(attributes, "encoding", "text/html")
  ------------------
  |  Branch (814:7): [True: 0, False: 7.98k]
  ------------------
  815|  7.98k|      || attribute_matches(attributes, "encoding", "application/xhtml+xml")
  ------------------
  |  Branch (815:10): [True: 0, False: 7.98k]
  ------------------
  816|  7.98k|    )
  817|   405k|  ) {
  818|      0|    return true;
  819|      0|  }
  820|       |
  821|   405k|  return false;
  822|   405k|}
parser.c:attribute_matches:
  274|  17.7k|) {
  275|  17.7k|  const GumboAttribute* attr = gumbo_get_attribute(attributes, name);
  276|  17.7k|  return attr ? gumbo_ascii_strcasecmp(value, attr->value) == 0 : false;
  ------------------
  |  Branch (276:10): [True: 3.27k, False: 14.4k]
  ------------------
  277|  17.7k|}
parser.c:handle_html_content:
 4436|  9.15M|static void handle_html_content(GumboParser* parser, GumboToken* token) {
 4437|  9.15M|  const GumboInsertionMode mode = parser->_parser_state->_insertion_mode;
 4438|  9.15M|  const TokenHandler handler = kTokenHandlers[mode];
 4439|  9.15M|  handler(parser, token);
 4440|  9.15M|}
parser.c:handle_initial:
 2509|  30.3k|static void handle_initial(GumboParser* parser, GumboToken* token) {
 2510|  30.3k|  GumboDocument* document = &get_document_node(parser)->v.document;
 2511|  30.3k|  if (token->type == GUMBO_TOKEN_WHITESPACE) {
  ------------------
  |  Branch (2511:7): [True: 2.29k, False: 28.0k]
  ------------------
 2512|  2.29k|    ignore_token(parser);
 2513|  2.29k|    return;
 2514|  2.29k|  }
 2515|  28.0k|  if (token->type == GUMBO_TOKEN_COMMENT) {
  ------------------
  |  Branch (2515:7): [True: 1.24k, False: 26.7k]
  ------------------
 2516|  1.24k|    append_comment_node(parser, get_document_node(parser), token);
 2517|  1.24k|    return;
 2518|  1.24k|  }
 2519|  26.7k|  if (token->type == GUMBO_TOKEN_DOCTYPE) {
  ------------------
  |  Branch (2519:7): [True: 724, False: 26.0k]
  ------------------
 2520|    724|    document->has_doctype = true;
 2521|    724|    document->name = token->v.doc_type.name;
 2522|    724|    document->public_identifier = token->v.doc_type.public_identifier;
 2523|    724|    document->system_identifier = token->v.doc_type.system_identifier;
 2524|    724|    document->doc_type_quirks_mode = compute_quirks_mode(&token->v.doc_type);
 2525|    724|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_BEFORE_HTML);
 2526|    724|    maybe_add_doctype_error(parser, token);
 2527|    724|    return;
 2528|    724|  }
 2529|  26.0k|  parser_add_parse_error(parser, token);
 2530|  26.0k|  document->doc_type_quirks_mode = GUMBO_DOCTYPE_QUIRKS;
 2531|  26.0k|  set_insertion_mode(parser, GUMBO_INSERTION_MODE_BEFORE_HTML);
 2532|       |  parser->_parser_state->_reprocess_current_token = true;
 2533|  26.0k|}
parser.c:append_comment_node:
 1093|  26.7k|) {
 1094|  26.7k|  maybe_flush_text_node_buffer(parser);
 1095|  26.7k|  GumboNode* comment = create_node(GUMBO_NODE_COMMENT);
 1096|  26.7k|  comment->type = GUMBO_NODE_COMMENT;
 1097|  26.7k|  comment->parse_flags = GUMBO_INSERTION_NORMAL;
 1098|  26.7k|  comment->v.text.text = token->v.text;
 1099|  26.7k|  comment->v.text.original_text = token->original_text;
 1100|  26.7k|  comment->v.text.start_pos = token->position;
 1101|  26.7k|  append_node(node, comment);
 1102|  26.7k|}
parser.c:compute_quirks_mode:
 1590|    724|static GumboQuirksModeEnum compute_quirks_mode(const GumboTokenDocType* doctype) {
 1591|    724|  if (doctype->force_quirks)
  ------------------
  |  Branch (1591:7): [True: 542, False: 182]
  ------------------
 1592|    542|    return GUMBO_DOCTYPE_QUIRKS;
 1593|    182|  return gumbo_compute_quirks_mode (
 1594|    182|    doctype->name,
 1595|    182|    doctype->has_public_identifier? doctype->public_identifier : NULL,
  ------------------
  |  Branch (1595:5): [True: 63, False: 119]
  ------------------
 1596|    182|    doctype->has_system_identifier? doctype->system_identifier : NULL
  ------------------
  |  Branch (1596:5): [True: 64, False: 118]
  ------------------
 1597|    182|  );
 1598|    724|}
parser.c:maybe_add_doctype_error:
 2088|    724|) {
 2089|    724|  const GumboTokenDocType* doctype = &token->v.doc_type;
 2090|    724|  if (
 2091|    724|    strcmp(doctype->name, "html")
  ------------------
  |  Branch (2091:5): [True: 436, False: 288]
  ------------------
 2092|    288|    || doctype->has_public_identifier
  ------------------
  |  Branch (2092:8): [True: 93, False: 195]
  ------------------
 2093|    195|    || (doctype->has_system_identifier
  ------------------
  |  Branch (2093:9): [True: 167, False: 28]
  ------------------
 2094|    167|        && strcmp(doctype->system_identifier, "about:legacy-compat"))
  ------------------
  |  Branch (2094:12): [True: 166, False: 1]
  ------------------
 2095|    724|  ) {
 2096|    695|    parser_add_parse_error(parser, token);
 2097|    695|  }
 2098|    724|}
parser.c:parser_add_parse_error:
  741|  1.57M|) {
  742|  1.57M|  gumbo_debug("Adding parse error.\n");
  743|  1.57M|  GumboError* error = gumbo_add_error(parser);
  744|  1.57M|  if (!error) {
  ------------------
  |  Branch (744:7): [True: 0, False: 1.57M]
  ------------------
  745|      0|    return;
  746|      0|  }
  747|  1.57M|  error->type = GUMBO_ERR_PARSER;
  748|  1.57M|  error->position = token->position;
  749|  1.57M|  error->original_text = token->original_text;
  750|  1.57M|  GumboParserError* extra_data = &error->v.parser;
  751|  1.57M|  extra_data->input_type = token->type;
  752|  1.57M|  extra_data->input_tag = GUMBO_TAG_UNKNOWN;
  753|  1.57M|  extra_data->input_name = NULL;
  754|  1.57M|  if (token->type == GUMBO_TOKEN_START_TAG)
  ------------------
  |  Branch (754:7): [True: 142k, False: 1.43M]
  ------------------
  755|   142k|  {
  756|   142k|    extra_data->input_tag = token->v.start_tag.tag;
  757|   142k|    if (extra_data->input_tag == GUMBO_TAG_UNKNOWN && token->v.start_tag.name) {
  ------------------
  |  Branch (757:9): [True: 20.9k, False: 121k]
  |  Branch (757:55): [True: 20.9k, False: 0]
  ------------------
  758|  20.9k|      extra_data->input_name = gumbo_strdup(token->v.start_tag.name);
  759|  20.9k|    }
  760|   142k|  }
  761|  1.43M|  else if (token->type == GUMBO_TOKEN_END_TAG)
  ------------------
  |  Branch (761:12): [True: 44.1k, False: 1.39M]
  ------------------
  762|  44.1k|  {
  763|  44.1k|    extra_data->input_tag = token->v.end_tag.tag;
  764|  44.1k|    if (extra_data->input_tag == GUMBO_TAG_UNKNOWN && token->v.end_tag.name) {
  ------------------
  |  Branch (764:9): [True: 13.5k, False: 30.5k]
  |  Branch (764:55): [True: 13.5k, False: 0]
  ------------------
  765|  13.5k|      extra_data->input_name = gumbo_strdup(token->v.end_tag.name);
  766|  13.5k|    }
  767|  44.1k|  }
  768|  1.57M|  const GumboParserState* state = parser->_parser_state;
  769|  1.57M|  extra_data->parser_state = state->_insertion_mode;
  770|  1.57M|  gumbo_vector_init(state->_open_elements.length, &extra_data->tag_stack);
  771|  37.9M|  for (unsigned int i = 0; i < state->_open_elements.length; ++i) {
  ------------------
  |  Branch (771:28): [True: 36.4M, False: 1.57M]
  ------------------
  772|  36.4M|    const GumboNode* node = state->_open_elements.data[i];
  773|  36.4M|    assert (
  ------------------
  |  Branch (773:5): [True: 36.4M, False: 0]
  |  Branch (773:5): [True: 0, False: 0]
  |  Branch (773:5): [True: 34.4M, False: 1.92M]
  |  Branch (773:5): [True: 1.92M, False: 0]
  ------------------
  774|  36.4M|      node->type == GUMBO_NODE_ELEMENT
  775|  36.4M|      || node->type == GUMBO_NODE_TEMPLATE
  776|  36.4M|    );
  777|  36.4M|    void *tag;
  778|  36.4M|    if (node->v.element.tag == GUMBO_TAG_UNKNOWN && node->v.element.name) {
  ------------------
  |  Branch (778:9): [True: 12.0M, False: 24.3M]
  |  Branch (778:53): [True: 12.0M, False: 0]
  ------------------
  779|  12.0M|      tag = gumbo_strdup(node->v.element.name);
  780|  24.3M|    } else {
  781|  24.3M|      tag = (void *)(uintptr_t)node->v.element.tag;
  782|  24.3M|    }
  783|  36.4M|    gumbo_vector_add(tag, &extra_data->tag_stack);
  784|  36.4M|  }
  785|  1.57M|}
parser.c:handle_before_html:
 2536|  29.0k|static void handle_before_html(GumboParser* parser, GumboToken* token) {
 2537|  29.0k|  if (token->type == GUMBO_TOKEN_DOCTYPE) {
  ------------------
  |  Branch (2537:7): [True: 869, False: 28.1k]
  ------------------
 2538|    869|    parser_add_parse_error(parser, token);
 2539|    869|    ignore_token(parser);
 2540|    869|    return;
 2541|    869|  }
 2542|  28.1k|  if (token->type == GUMBO_TOKEN_COMMENT) {
  ------------------
  |  Branch (2542:7): [True: 269, False: 27.8k]
  ------------------
 2543|    269|    append_comment_node(parser, get_document_node(parser), token);
 2544|    269|    return;
 2545|    269|  }
 2546|  27.8k|  if (token->type == GUMBO_TOKEN_WHITESPACE) {
  ------------------
  |  Branch (2546:7): [True: 628, False: 27.2k]
  ------------------
 2547|    628|    ignore_token(parser);
 2548|    628|    return;
 2549|    628|  }
 2550|  27.2k|  if (tag_is(token, kStartTag, GUMBO_TAG_HTML)) {
  ------------------
  |  Branch (2550:7): [True: 109, False: 27.1k]
  ------------------
 2551|    109|    GumboNode* html_node = insert_element_from_token(parser, token);
 2552|    109|    parser->_output->root = html_node;
 2553|    109|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_BEFORE_HEAD);
 2554|    109|    return;
 2555|    109|  }
 2556|  27.1k|  if (
 2557|  27.1k|    token->type == GUMBO_TOKEN_END_TAG
  ------------------
  |  Branch (2557:5): [True: 637, False: 26.4k]
  ------------------
 2558|    637|    && !tag_in(token, false, &(const TagSet){TAG(HEAD), TAG(BODY), TAG(HTML), TAG(BR)})
  ------------------
  |  |   40|    637|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  && !tag_in(token, false, &(const TagSet){TAG(HEAD), TAG(BODY), TAG(HTML), TAG(BR)})
  ------------------
  |  |   40|    637|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  && !tag_in(token, false, &(const TagSet){TAG(HEAD), TAG(BODY), TAG(HTML), TAG(BR)})
  ------------------
  |  |   40|    637|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  && !tag_in(token, false, &(const TagSet){TAG(HEAD), TAG(BODY), TAG(HTML), TAG(BR)})
  ------------------
  |  |   40|    637|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
  |  Branch (2558:8): [True: 474, False: 163]
  ------------------
 2559|  27.1k|  ) {
 2560|    474|    parser_add_parse_error(parser, token);
 2561|    474|    ignore_token(parser);
 2562|    474|    return;
 2563|    474|  }
 2564|  26.6k|  GumboNode* html_node = insert_element_of_tag_type (
 2565|  26.6k|    parser,
 2566|  26.6k|    GUMBO_TAG_HTML,
 2567|  26.6k|    GUMBO_INSERTION_IMPLIED
 2568|  26.6k|  );
 2569|  26.6k|  assert(html_node);
  ------------------
  |  Branch (2569:3): [True: 0, False: 26.6k]
  |  Branch (2569:3): [True: 26.6k, False: 0]
  ------------------
 2570|  26.6k|  parser->_output->root = html_node;
 2571|  26.6k|  set_insertion_mode(parser, GUMBO_INSERTION_MODE_BEFORE_HEAD);
 2572|       |  parser->_parser_state->_reprocess_current_token = true;
 2573|  26.6k|}
parser.c:insert_element_from_token:
 1222|   230k|) {
 1223|   230k|  GumboNode* element = create_element_from_token(token, GUMBO_NAMESPACE_HTML);
 1224|       |  insert_element(parser, element, false);
 1225|   230k|  gumbo_debug (
 1226|   230k|    "Inserting <%s> element (@%p) from token.\n",
 1227|   230k|    gumbo_normalized_tagname(element->v.element.tag),
 1228|   230k|    (void*)element
 1229|   230k|  );
 1230|   230k|  return element;
 1231|   230k|}
parser.c:create_element_from_token:
 1156|   251k|) {
 1157|   251k|  assert(token->type == GUMBO_TOKEN_START_TAG);
  ------------------
  |  Branch (1157:3): [True: 0, False: 251k]
  |  Branch (1157:3): [True: 251k, False: 0]
  ------------------
 1158|   251k|  GumboTokenStartTag* start_tag = &token->v.start_tag;
 1159|       |
 1160|   251k|  GumboNodeType type =
 1161|   251k|    (
 1162|   251k|      tag_namespace == GUMBO_NAMESPACE_HTML
  ------------------
  |  Branch (1162:7): [True: 230k, False: 21.0k]
  ------------------
 1163|   230k|      && start_tag->tag == GUMBO_TAG_TEMPLATE
  ------------------
  |  Branch (1163:10): [True: 7.96k, False: 222k]
  ------------------
 1164|   251k|    )
 1165|   251k|    ? GUMBO_NODE_TEMPLATE
 1166|   251k|    : GUMBO_NODE_ELEMENT
 1167|   251k|  ;
 1168|       |
 1169|   251k|  GumboNode* node = create_node(type);
 1170|   251k|  GumboElement* element = &node->v.element;
 1171|   251k|  gumbo_vector_init(1, &element->children);
 1172|   251k|  element->attributes = start_tag->attributes;
 1173|   251k|  element->tag = start_tag->tag;
 1174|   251k|  element->name = start_tag->name ? start_tag->name : gumbo_normalized_tagname(start_tag->tag);
  ------------------
  |  Branch (1174:19): [True: 68.1k, False: 183k]
  ------------------
 1175|   251k|  element->tag_namespace = tag_namespace;
 1176|       |
 1177|   251k|  assert(token->original_text.length >= 2);
  ------------------
  |  Branch (1177:3): [True: 0, False: 251k]
  |  Branch (1177:3): [True: 251k, False: 0]
  ------------------
 1178|   251k|  assert(token->original_text.data[0] == '<');
  ------------------
  |  Branch (1178:3): [True: 0, False: 251k]
  |  Branch (1178:3): [True: 251k, False: 0]
  ------------------
 1179|   251k|  assert(token->original_text.data[token->original_text.length - 1] == '>');
  ------------------
  |  Branch (1179:3): [True: 0, False: 251k]
  |  Branch (1179:3): [True: 251k, False: 0]
  ------------------
 1180|   251k|  element->original_tag = token->original_text;
 1181|   251k|  element->start_pos = token->position;
 1182|   251k|  element->original_end_tag = kGumboEmptyString;
  ------------------
  |  |   69|   251k|#define kGumboEmptyString (const GumboStringPiece)GUMBO_EMPTY_STRING_INIT
  |  |  ------------------
  |  |  |  |   67|   251k|#define GUMBO_EMPTY_STRING_INIT { .data = NULL, .length = 0 }
  |  |  ------------------
  ------------------
 1183|   251k|  element->end_pos = kGumboEmptySourcePosition;
  ------------------
  |  |   45|   251k|#define kGumboEmptySourcePosition (const GumboSourcePosition) \
  |  |   46|   251k|  GUMBO_EMPTY_SOURCE_POSITION_INIT
  |  |  ------------------
  |  |  |  |   44|   251k|#define GUMBO_EMPTY_SOURCE_POSITION_INIT { .line = 0, .column = 0, .offset = 0 }
  |  |  ------------------
  ------------------
 1184|       |
 1185|       |  // The element takes ownership of the attributes and name from the token, so
 1186|       |  // any allocated-memory fields should be nulled out.
 1187|   251k|  start_tag->attributes = kGumboEmptyVector;
  ------------------
  |  |  123|   251k|#define kGumboEmptyVector (const GumboVector)GUMBO_EMPTY_VECTOR_INIT
  |  |  ------------------
  |  |  |  |  121|   251k|# define GUMBO_EMPTY_VECTOR_INIT { .data = NULL, .length = 0, .capacity = 0 }
  |  |  ------------------
  ------------------
 1188|       |  start_tag->name = NULL;
 1189|   251k|  return node;
 1190|   251k|}
parser.c:handle_before_head:
 2581|  28.5k|static void handle_before_head(GumboParser* parser, GumboToken* token) {
 2582|  28.5k|  if (token->type == GUMBO_TOKEN_WHITESPACE) {
  ------------------
  |  Branch (2582:7): [True: 591, False: 27.9k]
  ------------------
 2583|    591|    ignore_token(parser);
 2584|    591|    return;
 2585|    591|  }
 2586|  27.9k|  if (token->type == GUMBO_TOKEN_COMMENT) {
  ------------------
  |  Branch (2586:7): [True: 339, False: 27.6k]
  ------------------
 2587|    339|    append_comment_node(parser, get_current_node(parser), token);
 2588|    339|    return;
 2589|    339|  }
 2590|  27.6k|  if (token->type == GUMBO_TOKEN_DOCTYPE) {
  ------------------
  |  Branch (2590:7): [True: 227, False: 27.4k]
  ------------------
 2591|    227|    parser_add_parse_error(parser, token);
 2592|    227|    ignore_token(parser);
 2593|    227|    return;
 2594|    227|  }
 2595|  27.4k|  if (tag_is(token, kStartTag, GUMBO_TAG_HTML)) {
  ------------------
  |  Branch (2595:7): [True: 412, False: 26.9k]
  ------------------
 2596|    412|    handle_in_body(parser, token);
 2597|    412|    return;
 2598|    412|  }
 2599|  26.9k|  if (tag_is(token, kStartTag, GUMBO_TAG_HEAD)) {
  ------------------
  |  Branch (2599:7): [True: 44, False: 26.9k]
  ------------------
 2600|     44|    GumboNode* node = insert_element_from_token(parser, token);
 2601|     44|    parser->_parser_state->_head_element = node;
 2602|     44|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_HEAD);
 2603|     44|    return;
 2604|     44|  }
 2605|  26.9k|  if (
 2606|  26.9k|    token->type == GUMBO_TOKEN_END_TAG
  ------------------
  |  Branch (2606:5): [True: 394, False: 26.5k]
  ------------------
 2607|    394|    && !tag_in(token, kEndTag, &(const TagSet){TAG(HEAD), TAG(BODY), TAG(HTML), TAG(BR)})
  ------------------
  |  |   40|    394|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  && !tag_in(token, kEndTag, &(const TagSet){TAG(HEAD), TAG(BODY), TAG(HTML), TAG(BR)})
  ------------------
  |  |   40|    394|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  && !tag_in(token, kEndTag, &(const TagSet){TAG(HEAD), TAG(BODY), TAG(HTML), TAG(BR)})
  ------------------
  |  |   40|    394|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  && !tag_in(token, kEndTag, &(const TagSet){TAG(HEAD), TAG(BODY), TAG(HTML), TAG(BR)})
  ------------------
  |  |   40|    394|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
  |  Branch (2607:8): [True: 226, False: 168]
  ------------------
 2608|  26.9k|  ) {
 2609|    226|    parser_add_parse_error(parser, token);
 2610|    226|    ignore_token(parser);
 2611|    226|    return;
 2612|    226|  }
 2613|  26.7k|  GumboNode* node = insert_element_of_tag_type (
 2614|  26.7k|    parser,
 2615|  26.7k|    GUMBO_TAG_HEAD,
 2616|  26.7k|    GUMBO_INSERTION_IMPLIED
 2617|  26.7k|  );
 2618|  26.7k|  parser->_parser_state->_head_element = node;
 2619|  26.7k|  set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_HEAD);
 2620|       |  parser->_parser_state->_reprocess_current_token = true;
 2621|  26.7k|}
parser.c:handle_in_head:
 2624|  48.1k|static void handle_in_head(GumboParser* parser, GumboToken* token) {
 2625|  48.1k|  if (token->type == GUMBO_TOKEN_WHITESPACE) {
  ------------------
  |  Branch (2625:7): [True: 1.07k, False: 47.0k]
  ------------------
 2626|  1.07k|    insert_text_token(parser, token);
 2627|  1.07k|    return;
 2628|  1.07k|  }
 2629|  47.0k|  if (token->type == GUMBO_TOKEN_COMMENT) {
  ------------------
  |  Branch (2629:7): [True: 1.25k, False: 45.8k]
  ------------------
 2630|  1.25k|    append_comment_node(parser, get_current_node(parser), token);
 2631|  1.25k|    return;
 2632|  1.25k|  }
 2633|  45.8k|  if (token->type == GUMBO_TOKEN_DOCTYPE) {
  ------------------
  |  Branch (2633:7): [True: 198, False: 45.6k]
  ------------------
 2634|    198|    parser_add_parse_error(parser, token);
 2635|    198|    ignore_token(parser);
 2636|    198|    return;
 2637|    198|  }
 2638|  45.6k|  if (tag_is(token, kStartTag, GUMBO_TAG_HTML)) {
  ------------------
  |  Branch (2638:7): [True: 202, False: 45.4k]
  ------------------
 2639|    202|    return handle_in_body(parser, token);
 2640|    202|  }
 2641|  45.4k|  if (
 2642|  45.4k|    tag_in(token, kStartTag, &(const TagSet) {
  ------------------
  |  Branch (2642:5): [True: 1.21k, False: 44.1k]
  ------------------
 2643|  45.4k|      TAG(BASE), TAG(BASEFONT), TAG(BGSOUND), TAG(LINK)
  ------------------
  |  |   40|  45.4k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BASE), TAG(BASEFONT), TAG(BGSOUND), TAG(LINK)
  ------------------
  |  |   40|  45.4k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BASE), TAG(BASEFONT), TAG(BGSOUND), TAG(LINK)
  ------------------
  |  |   40|  45.4k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BASE), TAG(BASEFONT), TAG(BGSOUND), TAG(LINK)
  ------------------
  |  |   40|  45.4k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 2644|  45.4k|    })
 2645|  45.4k|  ) {
 2646|  1.21k|    insert_element_from_token(parser, token);
 2647|  1.21k|    pop_current_node(parser);
 2648|  1.21k|    acknowledge_self_closing_tag(parser);
 2649|  1.21k|    return;
 2650|  1.21k|  }
 2651|  44.1k|  if (tag_is(token, kStartTag, GUMBO_TAG_META)) {
  ------------------
  |  Branch (2651:7): [True: 671, False: 43.5k]
  ------------------
 2652|    671|    insert_element_from_token(parser, token);
 2653|    671|    pop_current_node(parser);
 2654|    671|    acknowledge_self_closing_tag(parser);
 2655|       |    // NOTE(jdtang): Gumbo handles only UTF-8, so the encoding clause of the
 2656|       |    // spec doesn't apply. If clients want to handle meta-tag re-encoding, they
 2657|       |    // should specifically look for that string in the document and re-encode it
 2658|       |    // before passing to Gumbo.
 2659|    671|    return;
 2660|    671|  }
 2661|  43.5k|  if (tag_is(token, kStartTag, GUMBO_TAG_TITLE)) {
  ------------------
  |  Branch (2661:7): [True: 1.12k, False: 42.3k]
  ------------------
 2662|  1.12k|    run_generic_parsing_algorithm(parser, token, GUMBO_LEX_RCDATA);
 2663|  1.12k|    return;
 2664|  1.12k|  }
 2665|  42.3k|  if (
 2666|  42.3k|    tag_in(token, kStartTag, &(const TagSet){TAG(NOFRAMES), TAG(STYLE)})
  ------------------
  |  |   40|  42.3k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  tag_in(token, kStartTag, &(const TagSet){TAG(NOFRAMES), TAG(STYLE)})
  ------------------
  |  |   40|  42.3k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
  |  Branch (2666:5): [True: 822, False: 41.5k]
  ------------------
 2667|  41.5k|    || (tag_is(token, kStartTag, GUMBO_TAG_NOSCRIPT) && parser->_options->parse_noscript_content_as_text)
  ------------------
  |  Branch (2667:9): [True: 358, False: 41.2k]
  |  Branch (2667:57): [True: 0, False: 358]
  ------------------
 2668|  42.3k|  ) {
 2669|    822|    run_generic_parsing_algorithm(parser, token, GUMBO_LEX_RAWTEXT);
 2670|    822|    return;
 2671|    822|  }
 2672|  41.5k|  if (tag_is(token, kStartTag, GUMBO_TAG_NOSCRIPT)) {
  ------------------
  |  Branch (2672:7): [True: 358, False: 41.2k]
  ------------------
 2673|    358|    insert_element_from_token(parser, token);
 2674|    358|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_HEAD_NOSCRIPT);
 2675|    358|    return;
 2676|    358|  }
 2677|  41.2k|  if (tag_is(token, kStartTag, GUMBO_TAG_SCRIPT)) {
  ------------------
  |  Branch (2677:7): [True: 2.67k, False: 38.5k]
  ------------------
 2678|  2.67k|    run_generic_parsing_algorithm(parser, token, GUMBO_LEX_SCRIPT_DATA);
 2679|  2.67k|    return;
 2680|  2.67k|  }
 2681|  38.5k|  if (tag_is(token, kEndTag, GUMBO_TAG_HEAD)) {
  ------------------
  |  Branch (2681:7): [True: 115, False: 38.4k]
  ------------------
 2682|    115|    GumboNode* head = pop_current_node(parser);
 2683|    115|    UNUSED_IF_NDEBUG(head);
 2684|    115|    assert(node_html_tag_is(head, GUMBO_TAG_HEAD));
  ------------------
  |  Branch (2684:5): [True: 0, False: 115]
  |  Branch (2684:5): [True: 115, False: 0]
  ------------------
 2685|    115|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_AFTER_HEAD);
 2686|    115|    return;
 2687|    115|  }
 2688|  38.4k|  if (
 2689|  38.4k|    tag_in(token, kEndTag, &(const TagSet){TAG(BODY), TAG(HTML), TAG(BR)})
  ------------------
  |  |   40|  38.4k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  tag_in(token, kEndTag, &(const TagSet){TAG(BODY), TAG(HTML), TAG(BR)})
  ------------------
  |  |   40|  38.4k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  tag_in(token, kEndTag, &(const TagSet){TAG(BODY), TAG(HTML), TAG(BR)})
  ------------------
  |  |   40|  38.4k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
  |  Branch (2689:5): [True: 60, False: 38.3k]
  ------------------
 2690|  38.4k|  ) {
 2691|     60|    pop_current_node(parser);
 2692|     60|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_AFTER_HEAD);
 2693|     60|    parser->_parser_state->_reprocess_current_token = true;
 2694|     60|    return;
 2695|     60|  }
 2696|  38.3k|  if (tag_is(token, kStartTag, GUMBO_TAG_TEMPLATE)) {
  ------------------
  |  Branch (2696:7): [True: 7.96k, False: 30.3k]
  ------------------
 2697|  7.96k|    insert_element_from_token(parser, token);
 2698|  7.96k|    add_formatting_element(parser, &kActiveFormattingScopeMarker);
 2699|  7.96k|    set_frameset_not_ok(parser);
 2700|  7.96k|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_TEMPLATE);
 2701|  7.96k|    push_template_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_TEMPLATE);
 2702|  7.96k|    return;
 2703|  7.96k|  }
 2704|  30.3k|  if (tag_is(token, kEndTag, GUMBO_TAG_TEMPLATE)) {
  ------------------
  |  Branch (2704:7): [True: 3.17k, False: 27.2k]
  ------------------
 2705|  3.17k|    if (!has_open_element(parser, GUMBO_TAG_TEMPLATE)) {
  ------------------
  |  Branch (2705:9): [True: 1.03k, False: 2.13k]
  ------------------
 2706|  1.03k|      parser_add_parse_error(parser, token);
 2707|  1.03k|      ignore_token(parser);
 2708|  1.03k|      return;
 2709|  1.03k|    }
 2710|  2.13k|    generate_all_implied_end_tags_thoroughly(parser);
 2711|  2.13k|    if (!node_html_tag_is(get_current_node(parser), GUMBO_TAG_TEMPLATE))
  ------------------
  |  Branch (2711:9): [True: 396, False: 1.74k]
  ------------------
 2712|    396|      parser_add_parse_error(parser, token);
 2713|  3.93k|    while (!node_html_tag_is(pop_current_node(parser), GUMBO_TAG_TEMPLATE))
  ------------------
  |  Branch (2713:12): [True: 1.79k, False: 2.13k]
  ------------------
 2714|  1.79k|      ;
 2715|  2.13k|    clear_active_formatting_elements(parser);
 2716|  2.13k|    pop_template_insertion_mode(parser);
 2717|  2.13k|    reset_insertion_mode_appropriately(parser);
 2718|  2.13k|    return;
 2719|  3.17k|  }
 2720|  27.2k|  if (
 2721|  27.2k|    tag_is(token, kStartTag, GUMBO_TAG_HEAD)
  ------------------
  |  Branch (2721:5): [True: 258, False: 26.9k]
  ------------------
 2722|  26.9k|    || (token->type == GUMBO_TOKEN_END_TAG)
  ------------------
  |  Branch (2722:8): [True: 375, False: 26.5k]
  ------------------
 2723|  27.2k|  ) {
 2724|    633|    parser_add_parse_error(parser, token);
 2725|    633|    ignore_token(parser);
 2726|    633|    return;
 2727|    633|  }
 2728|  26.5k|  pop_current_node(parser);
 2729|  26.5k|  set_insertion_mode(parser, GUMBO_INSERTION_MODE_AFTER_HEAD);
 2730|       |  parser->_parser_state->_reprocess_current_token = true;
 2731|  26.5k|  return;
 2732|  27.2k|}
parser.c:insert_text_token:
 1292|  8.29M|static void insert_text_token(GumboParser* parser, GumboToken* token) {
 1293|  8.29M|  assert (
  ------------------
  |  Branch (1293:3): [True: 8.29M, False: 0]
  |  Branch (1293:3): [True: 0, False: 0]
  |  Branch (1293:3): [True: 0, False: 0]
  |  Branch (1293:3): [True: 0, False: 0]
  |  Branch (1293:3): [True: 182k, False: 8.10M]
  |  Branch (1293:3): [True: 8.00M, False: 100k]
  |  Branch (1293:3): [True: 50.5k, False: 50.2k]
  |  Branch (1293:3): [True: 50.2k, False: 0]
  ------------------
 1294|  8.29M|    token->type == GUMBO_TOKEN_WHITESPACE
 1295|  8.29M|    || token->type == GUMBO_TOKEN_CHARACTER
 1296|  8.29M|    || token->type == GUMBO_TOKEN_NULL
 1297|  8.29M|    || token->type == GUMBO_TOKEN_CDATA
 1298|  8.29M|  );
 1299|  8.29M|  TextNodeBufferState* buffer_state = &parser->_parser_state->_text_node;
 1300|  8.29M|  if (buffer_state->_buffer.length == 0) {
  ------------------
  |  Branch (1300:7): [True: 130k, False: 8.16M]
  ------------------
 1301|       |    // Initialize position fields.
 1302|   130k|    buffer_state->_start_original_text = token->original_text.data;
 1303|   130k|    buffer_state->_start_position = token->position;
 1304|   130k|  }
 1305|  8.29M|  gumbo_string_buffer_append_codepoint (
 1306|  8.29M|    token->v.character,
 1307|  8.29M|    &buffer_state->_buffer
 1308|  8.29M|  );
 1309|  8.29M|  if (token->type == GUMBO_TOKEN_CHARACTER) {
  ------------------
  |  Branch (1309:7): [True: 8.00M, False: 283k]
  ------------------
 1310|  8.00M|    buffer_state->_type = GUMBO_NODE_TEXT;
 1311|  8.00M|  } else if (token->type == GUMBO_TOKEN_CDATA) {
  ------------------
  |  Branch (1311:14): [True: 50.2k, False: 233k]
  ------------------
 1312|  50.2k|    buffer_state->_type = GUMBO_NODE_CDATA;
 1313|  50.2k|  }
 1314|  8.29M|  gumbo_debug("Inserting text token '%c'.\n", token->v.character);
 1315|  8.29M|}
parser.c:pop_current_node:
 1026|   406k|static GumboNode* pop_current_node(GumboParser* parser) {
 1027|   406k|  GumboParserState* state = parser->_parser_state;
 1028|   406k|  maybe_flush_text_node_buffer(parser);
 1029|   406k|  if (state->_open_elements.length > 0) {
  ------------------
  |  Branch (1029:7): [True: 353k, False: 53.5k]
  ------------------
 1030|   353k|    assert(node_html_tag_is(state->_open_elements.data[0], GUMBO_TAG_HTML));
  ------------------
  |  Branch (1030:5): [True: 0, False: 353k]
  |  Branch (1030:5): [True: 353k, False: 0]
  ------------------
 1031|   353k|    gumbo_debug (
 1032|   353k|      "Popping %s node.\n",
 1033|   353k|      gumbo_normalized_tagname(get_current_node(parser)->v.element.tag)
 1034|   353k|    );
 1035|   353k|  }
 1036|   406k|  GumboNode* current_node = gumbo_vector_pop(&state->_open_elements);
 1037|   406k|  if (!current_node) {
  ------------------
  |  Branch (1037:7): [True: 53.5k, False: 353k]
  ------------------
 1038|  53.5k|    assert(state->_open_elements.length == 0);
  ------------------
  |  Branch (1038:5): [True: 0, False: 53.5k]
  |  Branch (1038:5): [True: 53.5k, False: 0]
  ------------------
 1039|  53.5k|    return NULL;
 1040|  53.5k|  }
 1041|   406k|  assert (
  ------------------
  |  Branch (1041:3): [True: 353k, False: 0]
  |  Branch (1041:3): [True: 0, False: 0]
  |  Branch (1041:3): [True: 345k, False: 7.96k]
  |  Branch (1041:3): [True: 7.96k, False: 0]
  ------------------
 1042|   353k|    current_node->type == GUMBO_NODE_ELEMENT
 1043|   353k|    || current_node->type == GUMBO_NODE_TEMPLATE
 1044|   353k|  );
 1045|   353k|  bool is_closed_body_or_html_tag =
 1046|   353k|    (
 1047|   353k|      node_html_tag_is(current_node, GUMBO_TAG_BODY)
  ------------------
  |  Branch (1047:7): [True: 26.5k, False: 326k]
  ------------------
 1048|  26.5k|      && state->_closed_body_tag
  ------------------
  |  Branch (1048:10): [True: 152, False: 26.3k]
  ------------------
 1049|   353k|    ) || (
 1050|   352k|      node_html_tag_is(current_node, GUMBO_TAG_HTML)
  ------------------
  |  Branch (1050:7): [True: 26.7k, False: 326k]
  ------------------
 1051|  26.7k|      && state->_closed_html_tag
  ------------------
  |  Branch (1051:10): [True: 229, False: 26.5k]
  ------------------
 1052|   352k|    )
 1053|   353k|  ;
 1054|       |  // The tree construction loop frees an unknown end tag's name once it is done
 1055|       |  // with the token, so the current token can be an end tag that no longer names
 1056|       |  // anything. That happens when stop_on_first_error ends the loop on the same
 1057|       |  // iteration that freed the name, leaving this token current for
 1058|       |  // finish_parsing. Such a token cannot match any node, and passing it on would
 1059|       |  // break node_qualified_tagname_is's precondition that an unknown tag carries
 1060|       |  // a name.
 1061|   353k|  const GumboToken* current_token = state->_current_token;
 1062|   353k|  const bool current_token_names_an_end_tag =
 1063|   353k|    current_token->type == GUMBO_TOKEN_END_TAG
  ------------------
  |  Branch (1063:5): [True: 35.3k, False: 317k]
  ------------------
 1064|  35.3k|    && (
 1065|  35.3k|      current_token->v.end_tag.tag != GUMBO_TAG_UNKNOWN
  ------------------
  |  Branch (1065:7): [True: 33.7k, False: 1.68k]
  ------------------
 1066|  1.68k|      || current_token->v.end_tag.name
  ------------------
  |  Branch (1066:10): [True: 1.68k, False: 0]
  ------------------
 1067|  35.3k|    )
 1068|   353k|  ;
 1069|   353k|  if (
 1070|   353k|    (
 1071|   353k|      !current_token_names_an_end_tag
  ------------------
  |  Branch (1071:7): [True: 317k, False: 35.3k]
  ------------------
 1072|  35.3k|      || !node_qualified_tagname_is (
  ------------------
  |  Branch (1072:10): [True: 15.3k, False: 20.0k]
  ------------------
 1073|  35.3k|        current_node,
 1074|  35.3k|        GUMBO_NAMESPACE_HTML,
 1075|  35.3k|        current_token->v.end_tag.tag,
 1076|  35.3k|        current_token->v.end_tag.name
 1077|  35.3k|      )
 1078|   353k|    )
 1079|   333k|    && !is_closed_body_or_html_tag
  ------------------
  |  Branch (1079:8): [True: 332k, False: 381]
  ------------------
 1080|   353k|  ) {
 1081|   332k|    current_node->parse_flags |= GUMBO_INSERTION_IMPLICIT_END_TAG;
 1082|   332k|  }
 1083|   353k|  if (!is_closed_body_or_html_tag) {
  ------------------
  |  Branch (1083:7): [True: 352k, False: 381]
  ------------------
 1084|   352k|    record_end_of_element(state->_current_token, &current_node->v.element);
 1085|   352k|  }
 1086|   353k|  return current_node;
 1087|   353k|}
parser.c:node_qualified_tagname_is:
  599|   379k|) {
  600|   379k|  assert(node);
  ------------------
  |  Branch (600:3): [True: 0, False: 379k]
  |  Branch (600:3): [True: 379k, False: 0]
  ------------------
  601|   379k|  assert(node->type == GUMBO_NODE_ELEMENT || node->type == GUMBO_NODE_TEMPLATE);
  ------------------
  |  Branch (601:3): [True: 379k, False: 0]
  |  Branch (601:3): [True: 0, False: 0]
  |  Branch (601:3): [True: 375k, False: 3.54k]
  |  Branch (601:3): [True: 3.54k, False: 0]
  ------------------
  602|   379k|  assert(node->v.element.name);
  ------------------
  |  Branch (602:3): [True: 0, False: 379k]
  |  Branch (602:3): [True: 379k, False: 0]
  ------------------
  603|   379k|  assert(tag != GUMBO_TAG_UNKNOWN || name);
  ------------------
  |  Branch (603:3): [True: 379k, False: 0]
  |  Branch (603:3): [True: 0, False: 0]
  |  Branch (603:3): [True: 300k, False: 78.6k]
  |  Branch (603:3): [True: 78.6k, False: 0]
  ------------------
  604|   379k|  GumboTag element_tag = node->v.element.tag;
  605|   379k|  const char *element_name = node->v.element.name;
  606|   379k|  assert(element_tag != GUMBO_TAG_UNKNOWN || element_name);
  ------------------
  |  Branch (606:3): [True: 379k, False: 0]
  |  Branch (606:3): [True: 0, False: 0]
  |  Branch (606:3): [True: 288k, False: 90.9k]
  |  Branch (606:3): [True: 90.9k, False: 0]
  ------------------
  607|   379k|  if (node->v.element.tag_namespace != ns || element_tag != tag)
  ------------------
  |  Branch (607:7): [True: 8.35k, False: 370k]
  |  Branch (607:46): [True: 193k, False: 177k]
  ------------------
  608|   201k|    return false;
  609|   177k|  if (tag != GUMBO_TAG_UNKNOWN)
  ------------------
  |  Branch (609:7): [True: 128k, False: 48.7k]
  ------------------
  610|   128k|    return true;
  611|  48.7k|  return !gumbo_ascii_strcasecmp(element_name, name);
  612|   177k|}
parser.c:record_end_of_element:
 1018|   355k|) {
 1019|   355k|  element->end_pos = current_token->position;
 1020|   355k|  element->original_end_tag =
 1021|   355k|    (current_token->type == GUMBO_TOKEN_END_TAG)
  ------------------
  |  Branch (1021:5): [True: 38.3k, False: 317k]
  ------------------
 1022|   355k|      ? current_token->original_text
 1023|       |      : kGumboEmptyString;
  ------------------
  |  |   69|   672k|#define kGumboEmptyString (const GumboStringPiece)GUMBO_EMPTY_STRING_INIT
  |  |  ------------------
  |  |  |  |   67|   672k|#define GUMBO_EMPTY_STRING_INIT { .data = NULL, .length = 0 }
  |  |  ------------------
  ------------------
 1024|   355k|}
parser.c:acknowledge_self_closing_tag:
 1330|  12.6k|static void acknowledge_self_closing_tag(GumboParser* parser) {
 1331|       |  parser->_parser_state->_self_closing_flag_acknowledged = true;
 1332|  12.6k|}
parser.c:run_generic_parsing_algorithm:
 1322|  6.46k|) {
 1323|  6.46k|  insert_element_from_token(parser, token);
 1324|  6.46k|  gumbo_tokenizer_set_state(parser, lexer_state);
 1325|  6.46k|  GumboParserState* parser_state = parser->_parser_state;
 1326|  6.46k|  parser_state->_original_insertion_mode = parser_state->_insertion_mode;
 1327|  6.46k|  parser_state->_insertion_mode = GUMBO_INSERTION_MODE_TEXT;
 1328|  6.46k|}
parser.c:add_formatting_element:
 1386|  91.2k|static void add_formatting_element(GumboParser* parser, const GumboNode* node) {
 1387|  91.2k|  assert (
  ------------------
  |  Branch (1387:3): [True: 91.2k, False: 0]
  |  Branch (1387:3): [True: 0, False: 0]
  |  Branch (1387:3): [True: 23.2k, False: 67.9k]
  |  Branch (1387:3): [True: 67.9k, False: 0]
  ------------------
 1388|  91.2k|    node == &kActiveFormattingScopeMarker
 1389|  91.2k|    || node->type == GUMBO_NODE_ELEMENT
 1390|  91.2k|  );
 1391|  91.2k|  GumboVector* elements = &parser->_parser_state->_active_formatting_elements;
 1392|  91.2k|  if (node == &kActiveFormattingScopeMarker) {
  ------------------
  |  Branch (1392:7): [True: 23.2k, False: 67.9k]
  ------------------
 1393|  23.2k|    gumbo_debug("Adding a scope marker.\n");
 1394|  67.9k|  } else {
 1395|  67.9k|    gumbo_debug("Adding a formatting element.\n");
 1396|  67.9k|  }
 1397|       |
 1398|       |  // Hunt for identical elements.
 1399|  91.2k|  int earliest_identical_element = elements->length;
 1400|  91.2k|  int num_identical_elements = count_formatting_elements_of_tag (
 1401|  91.2k|    parser,
 1402|  91.2k|    node,
 1403|  91.2k|    &earliest_identical_element
 1404|  91.2k|  );
 1405|       |
 1406|       |  // Noah's Ark clause: if there're at least 3, remove the earliest.
 1407|  91.2k|  if (num_identical_elements >= 3) {
  ------------------
  |  Branch (1407:7): [True: 19.4k, False: 71.8k]
  ------------------
 1408|  19.4k|    gumbo_debug (
 1409|  19.4k|      "Noah's ark clause: removing element at %d.\n",
 1410|  19.4k|      earliest_identical_element
 1411|  19.4k|    );
 1412|  19.4k|    gumbo_vector_remove_at(earliest_identical_element, elements);
 1413|  19.4k|  }
 1414|       |
 1415|  91.2k|  gumbo_vector_add((void*) node, elements);
 1416|  91.2k|}
parser.c:count_formatting_elements_of_tag:
 1359|  91.2k|) {
 1360|  91.2k|  const GumboElement* desired_element = &desired_node->v.element;
 1361|  91.2k|  GumboVector* elements = &parser->_parser_state->_active_formatting_elements;
 1362|  91.2k|  int num_identical_elements = 0;
 1363|   289k|  for (int i = elements->length; --i >= 0;) {
  ------------------
  |  Branch (1363:34): [True: 245k, False: 43.9k]
  ------------------
 1364|   245k|    GumboNode* node = elements->data[i];
 1365|   245k|    if (node == &kActiveFormattingScopeMarker) {
  ------------------
  |  Branch (1365:9): [True: 47.2k, False: 198k]
  ------------------
 1366|  47.2k|      break;
 1367|  47.2k|    }
 1368|   245k|    assert(node->type == GUMBO_NODE_ELEMENT);
  ------------------
  |  Branch (1368:5): [True: 0, False: 198k]
  |  Branch (1368:5): [True: 198k, False: 0]
  ------------------
 1369|   198k|    if (
 1370|   198k|      node_qualified_tagname_is (
  ------------------
  |  Branch (1370:7): [True: 97.8k, False: 100k]
  ------------------
 1371|   198k|        node,
 1372|   198k|        desired_element->tag_namespace,
 1373|   198k|        desired_element->tag,
 1374|   198k|        desired_element->name
 1375|   198k|      )
 1376|  97.8k|      && all_attributes_match(&node->v.element.attributes, &desired_element->attributes)
  ------------------
  |  Branch (1376:10): [True: 72.7k, False: 25.0k]
  ------------------
 1377|   198k|    ) {
 1378|  72.7k|      num_identical_elements++;
 1379|  72.7k|      *earliest_matching_index = i;
 1380|  72.7k|    }
 1381|   198k|  }
 1382|  91.2k|  return num_identical_elements;
 1383|  91.2k|}
parser.c:all_attributes_match:
  294|  97.8k|) {
  295|  97.8k|  unsigned int num_unmatched_attr2_elements = attr2->length;
  296|   107k|  for (unsigned int i = 0; i < attr1->length; ++i) {
  ------------------
  |  Branch (296:28): [True: 32.0k, False: 75.7k]
  ------------------
  297|  32.0k|    const GumboAttribute* attr = attr1->data[i];
  298|  32.0k|    if (attribute_matches_case_sensitive(attr2, attr->name, attr->value)) {
  ------------------
  |  Branch (298:9): [True: 9.98k, False: 22.0k]
  ------------------
  299|  9.98k|      --num_unmatched_attr2_elements;
  300|  22.0k|    } else {
  301|  22.0k|      return false;
  302|  22.0k|    }
  303|  32.0k|  }
  304|  75.7k|  return num_unmatched_attr2_elements == 0;
  305|  97.8k|}
parser.c:attribute_matches_case_sensitive:
  285|  32.0k|) {
  286|  32.0k|  const GumboAttribute* attr = gumbo_get_attribute(attributes, name);
  287|  32.0k|  return attr ? strcmp(value, attr->value) == 0 : false;
  ------------------
  |  Branch (287:10): [True: 12.8k, False: 19.1k]
  ------------------
  288|  32.0k|}
parser.c:set_frameset_not_ok:
  307|  6.40M|static void set_frameset_not_ok(GumboParser* parser) {
  308|  6.40M|  gumbo_debug("Setting frameset_ok to false.\n");
  309|       |  parser->_parser_state->_frameset_ok = false;
  310|  6.40M|}
parser.c:has_open_element:
 1642|  21.7k|static bool has_open_element(const GumboParser* parser, GumboTag tag) {
 1643|  21.7k|  static const TagSet tags = {TAG(HTML)};
  ------------------
  |  |   40|  21.7k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1644|       |  return has_an_element_in_specific_scope(parser, 1, &tag, false, &tags);
 1645|  21.7k|}
parser.c:has_an_element_in_specific_scope:
 1617|   133k|) {
 1618|   133k|  const GumboVector* open_elements = &parser->_parser_state->_open_elements;
 1619|  1.26M|  for (int i = open_elements->length; --i >= 0;) {
  ------------------
  |  Branch (1619:39): [True: 1.26M, False: 0]
  ------------------
 1620|  1.26M|    const GumboNode* node = open_elements->data[i];
 1621|  1.26M|    if (node->type != GUMBO_NODE_ELEMENT && node->type != GUMBO_NODE_TEMPLATE) {
  ------------------
  |  Branch (1621:9): [True: 26.1k, False: 1.24M]
  |  Branch (1621:45): [True: 0, False: 26.1k]
  ------------------
 1622|      0|      continue;
 1623|      0|    }
 1624|       |
 1625|  1.26M|    GumboTag node_tag = node->v.element.tag;
 1626|  1.26M|    GumboNamespaceEnum node_ns = node->v.element.tag_namespace;
 1627|  2.48M|    for (int j = 0; j < expected_size; ++j) {
  ------------------
  |  Branch (1627:21): [True: 1.29M, False: 1.18M]
  ------------------
 1628|  1.29M|      if (node_tag == expected[j] && node_ns == GUMBO_NAMESPACE_HTML) {
  ------------------
  |  Branch (1628:11): [True: 78.3k, False: 1.21M]
  |  Branch (1628:38): [True: 78.1k, False: 205]
  ------------------
 1629|  78.1k|        return true;
 1630|  78.1k|      }
 1631|  1.29M|    }
 1632|       |
 1633|  1.26M|    bool found = tagset_includes(tags, node_ns, node_tag);
 1634|  1.18M|    if (negate != found) {
  ------------------
  |  Branch (1634:9): [True: 55.2k, False: 1.13M]
  ------------------
 1635|  55.2k|      return false;
 1636|  55.2k|    }
 1637|  1.18M|  }
 1638|      0|  return false;
 1639|   133k|}
parser.c:generate_all_implied_end_tags_thoroughly:
 1769|  2.13k|static void generate_all_implied_end_tags_thoroughly(GumboParser* parser) {
 1770|  2.13k|  static const TagSet tags = {
 1771|  2.13k|    TAG(CAPTION), TAG(COLGROUP), TAG(DD), TAG(DT), TAG(LI), TAG(OPTGROUP),
  ------------------
  |  |   40|  2.13k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(CAPTION), TAG(COLGROUP), TAG(DD), TAG(DT), TAG(LI), TAG(OPTGROUP),
  ------------------
  |  |   40|  2.13k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(CAPTION), TAG(COLGROUP), TAG(DD), TAG(DT), TAG(LI), TAG(OPTGROUP),
  ------------------
  |  |   40|  2.13k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(CAPTION), TAG(COLGROUP), TAG(DD), TAG(DT), TAG(LI), TAG(OPTGROUP),
  ------------------
  |  |   40|  2.13k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(CAPTION), TAG(COLGROUP), TAG(DD), TAG(DT), TAG(LI), TAG(OPTGROUP),
  ------------------
  |  |   40|  2.13k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(CAPTION), TAG(COLGROUP), TAG(DD), TAG(DT), TAG(LI), TAG(OPTGROUP),
  ------------------
  |  |   40|  2.13k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1772|  2.13k|    TAG(OPTION), TAG(P), TAG(RB), TAG(RP), TAG(RT), TAG(RTC), TAG(TBODY),
  ------------------
  |  |   40|  2.13k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(OPTION), TAG(P), TAG(RB), TAG(RP), TAG(RT), TAG(RTC), TAG(TBODY),
  ------------------
  |  |   40|  2.13k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(OPTION), TAG(P), TAG(RB), TAG(RP), TAG(RT), TAG(RTC), TAG(TBODY),
  ------------------
  |  |   40|  2.13k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(OPTION), TAG(P), TAG(RB), TAG(RP), TAG(RT), TAG(RTC), TAG(TBODY),
  ------------------
  |  |   40|  2.13k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(OPTION), TAG(P), TAG(RB), TAG(RP), TAG(RT), TAG(RTC), TAG(TBODY),
  ------------------
  |  |   40|  2.13k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(OPTION), TAG(P), TAG(RB), TAG(RP), TAG(RT), TAG(RTC), TAG(TBODY),
  ------------------
  |  |   40|  2.13k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(OPTION), TAG(P), TAG(RB), TAG(RP), TAG(RT), TAG(RTC), TAG(TBODY),
  ------------------
  |  |   40|  2.13k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1773|  2.13k|    TAG(TD), TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  2.13k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(TD), TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  2.13k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(TD), TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  2.13k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(TD), TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  2.13k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(TD), TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  2.13k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1774|  2.13k|  };
 1775|  2.37k|  while (node_tag_in_set(get_current_node(parser), &tags)) {
  ------------------
  |  Branch (1775:10): [True: 241, False: 2.13k]
  ------------------
 1776|    241|    pop_current_node(parser);
 1777|    241|  }
 1778|  2.13k|}
parser.c:clear_active_formatting_elements:
 1533|  14.0k|static void clear_active_formatting_elements(GumboParser* parser) {
 1534|  14.0k|  GumboVector* elements = &parser->_parser_state->_active_formatting_elements;
 1535|  14.0k|  int num_elements_cleared = 0;
 1536|  14.0k|  const GumboNode* node;
 1537|  17.3k|  do {
 1538|  17.3k|    node = gumbo_vector_pop(elements);
 1539|  17.3k|    ++num_elements_cleared;
 1540|  17.3k|  } while (node && node != &kActiveFormattingScopeMarker);
  ------------------
  |  Branch (1540:12): [True: 17.2k, False: 75]
  |  Branch (1540:20): [True: 3.26k, False: 13.9k]
  ------------------
 1541|  14.0k|  gumbo_debug (
 1542|  14.0k|    "Cleared %d elements from active formatting list.\n",
 1543|  14.0k|    num_elements_cleared
 1544|  14.0k|  );
 1545|  14.0k|}
parser.c:pop_template_insertion_mode:
  528|  12.4k|static void pop_template_insertion_mode(GumboParser* parser) {
  529|  12.4k|  gumbo_vector_pop(&parser->_parser_state->_template_insertion_modes);
  530|  12.4k|}
parser.c:handle_in_head_noscript:
 2735|  3.34k|static void handle_in_head_noscript(GumboParser* parser, GumboToken* token) {
 2736|  3.34k|  if (token->type == GUMBO_TOKEN_DOCTYPE) {
  ------------------
  |  Branch (2736:7): [True: 226, False: 3.11k]
  ------------------
 2737|    226|    parser_add_parse_error(parser, token);
 2738|    226|    ignore_token(parser);
 2739|    226|    return;
 2740|    226|  }
 2741|  3.11k|  if (tag_is(token, kStartTag, GUMBO_TAG_HTML)) {
  ------------------
  |  Branch (2741:7): [True: 291, False: 2.82k]
  ------------------
 2742|    291|    handle_in_body(parser, token);
 2743|    291|    return;
 2744|    291|  }
 2745|  2.82k|  if (tag_is(token, kEndTag, GUMBO_TAG_NOSCRIPT)) {
  ------------------
  |  Branch (2745:7): [True: 202, False: 2.62k]
  ------------------
 2746|    202|    const GumboNode* node = pop_current_node(parser);
 2747|    202|    assert(node_html_tag_is(node, GUMBO_TAG_NOSCRIPT));
  ------------------
  |  Branch (2747:5): [True: 0, False: 202]
  |  Branch (2747:5): [True: 202, False: 0]
  ------------------
 2748|    202|    UNUSED_IF_NDEBUG(node);
 2749|    202|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_HEAD);
 2750|    202|    return;
 2751|    202|  }
 2752|  2.62k|  if (
 2753|  2.62k|    token->type == GUMBO_TOKEN_WHITESPACE
  ------------------
  |  Branch (2753:5): [True: 418, False: 2.20k]
  ------------------
 2754|  2.20k|    || token->type == GUMBO_TOKEN_COMMENT
  ------------------
  |  Branch (2754:8): [True: 985, False: 1.22k]
  ------------------
 2755|  1.22k|    || tag_in (token, kStartTag, &(const TagSet) {
  ------------------
  |  Branch (2755:8): [True: 267, False: 955]
  ------------------
 2756|  1.22k|      TAG(BASEFONT), TAG(BGSOUND), TAG(LINK),
  ------------------
  |  |   40|  1.22k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BASEFONT), TAG(BGSOUND), TAG(LINK),
  ------------------
  |  |   40|  1.22k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BASEFONT), TAG(BGSOUND), TAG(LINK),
  ------------------
  |  |   40|  1.22k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 2757|  1.22k|      TAG(META), TAG(NOFRAMES), TAG(STYLE)
  ------------------
  |  |   40|  1.22k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(META), TAG(NOFRAMES), TAG(STYLE)
  ------------------
  |  |   40|  1.22k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(META), TAG(NOFRAMES), TAG(STYLE)
  ------------------
  |  |   40|  1.22k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 2758|  1.22k|    })
 2759|  2.62k|  ) {
 2760|  1.67k|    handle_in_head(parser, token);
 2761|  1.67k|    return;
 2762|  1.67k|  }
 2763|    955|  if (
 2764|    955|    tag_in(token, kStartTag, &(const TagSet){TAG(HEAD), TAG(NOSCRIPT)})
  ------------------
  |  |   40|    955|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  tag_in(token, kStartTag, &(const TagSet){TAG(HEAD), TAG(NOSCRIPT)})
  ------------------
  |  |   40|    955|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
  |  Branch (2764:5): [True: 369, False: 586]
  ------------------
 2765|    586|    || (
 2766|    586|      token->type == GUMBO_TOKEN_END_TAG
  ------------------
  |  Branch (2766:7): [True: 431, False: 155]
  ------------------
 2767|    431|      && !tag_is(token, kEndTag, GUMBO_TAG_BR)
  ------------------
  |  Branch (2767:10): [True: 430, False: 1]
  ------------------
 2768|    586|    )
 2769|    955|  ) {
 2770|    799|    parser_add_parse_error(parser, token);
 2771|    799|    ignore_token(parser);
 2772|    799|    return;
 2773|    799|  }
 2774|    156|  parser_add_parse_error(parser, token);
 2775|    156|  const GumboNode* node = pop_current_node(parser);
 2776|    156|  assert(node_html_tag_is(node, GUMBO_TAG_NOSCRIPT));
  ------------------
  |  Branch (2776:3): [True: 0, False: 156]
  |  Branch (2776:3): [True: 156, False: 0]
  ------------------
 2777|    156|  UNUSED_IF_NDEBUG(node);
 2778|    156|  set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_HEAD);
 2779|       |  parser->_parser_state->_reprocess_current_token = true;
 2780|    156|}
parser.c:handle_after_head:
 2783|  29.9k|static void handle_after_head(GumboParser* parser, GumboToken* token) {
 2784|  29.9k|  GumboParserState* state = parser->_parser_state;
 2785|  29.9k|  if (token->type == GUMBO_TOKEN_WHITESPACE) {
  ------------------
  |  Branch (2785:7): [True: 816, False: 29.1k]
  ------------------
 2786|    816|    insert_text_token(parser, token);
 2787|    816|    return;
 2788|    816|  }
 2789|  29.1k|  if (token->type == GUMBO_TOKEN_COMMENT) {
  ------------------
  |  Branch (2789:7): [True: 566, False: 28.5k]
  ------------------
 2790|    566|    append_comment_node(parser, get_current_node(parser), token);
 2791|    566|    return;
 2792|    566|  }
 2793|  28.5k|  if (token->type == GUMBO_TOKEN_DOCTYPE) {
  ------------------
  |  Branch (2793:7): [True: 196, False: 28.3k]
  ------------------
 2794|    196|    parser_add_parse_error(parser, token);
 2795|    196|    ignore_token(parser);
 2796|    196|    return;
 2797|    196|  }
 2798|  28.3k|  if (tag_is(token, kStartTag, GUMBO_TAG_HTML)) {
  ------------------
  |  Branch (2798:7): [True: 227, False: 28.1k]
  ------------------
 2799|    227|    handle_in_body(parser, token);
 2800|    227|    return;
 2801|    227|  }
 2802|  28.1k|  if (tag_is(token, kStartTag, GUMBO_TAG_BODY)) {
  ------------------
  |  Branch (2802:7): [True: 13, False: 28.1k]
  ------------------
 2803|     13|    insert_element_from_token(parser, token);
 2804|     13|    set_frameset_not_ok(parser);
 2805|     13|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_BODY);
 2806|     13|    return;
 2807|     13|  }
 2808|  28.1k|  if (tag_is(token, kStartTag, GUMBO_TAG_FRAMESET)) {
  ------------------
  |  Branch (2808:7): [True: 250, False: 27.8k]
  ------------------
 2809|    250|    insert_element_from_token(parser, token);
 2810|    250|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_FRAMESET);
 2811|    250|    return;
 2812|    250|  }
 2813|  27.8k|  if (
 2814|  27.8k|    tag_in(token, kStartTag, &(const TagSet) {
  ------------------
  |  Branch (2814:5): [True: 277, False: 27.6k]
  ------------------
 2815|  27.8k|      TAG(BASE), TAG(BASEFONT), TAG(BGSOUND), TAG(LINK), TAG(META),
  ------------------
  |  |   40|  27.8k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BASE), TAG(BASEFONT), TAG(BGSOUND), TAG(LINK), TAG(META),
  ------------------
  |  |   40|  27.8k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BASE), TAG(BASEFONT), TAG(BGSOUND), TAG(LINK), TAG(META),
  ------------------
  |  |   40|  27.8k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BASE), TAG(BASEFONT), TAG(BGSOUND), TAG(LINK), TAG(META),
  ------------------
  |  |   40|  27.8k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BASE), TAG(BASEFONT), TAG(BGSOUND), TAG(LINK), TAG(META),
  ------------------
  |  |   40|  27.8k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 2816|  27.8k|      TAG(NOFRAMES), TAG(SCRIPT), TAG(STYLE), TAG(TEMPLATE), TAG(TITLE)
  ------------------
  |  |   40|  27.8k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(NOFRAMES), TAG(SCRIPT), TAG(STYLE), TAG(TEMPLATE), TAG(TITLE)
  ------------------
  |  |   40|  27.8k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(NOFRAMES), TAG(SCRIPT), TAG(STYLE), TAG(TEMPLATE), TAG(TITLE)
  ------------------
  |  |   40|  27.8k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(NOFRAMES), TAG(SCRIPT), TAG(STYLE), TAG(TEMPLATE), TAG(TITLE)
  ------------------
  |  |   40|  27.8k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(NOFRAMES), TAG(SCRIPT), TAG(STYLE), TAG(TEMPLATE), TAG(TITLE)
  ------------------
  |  |   40|  27.8k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 2817|  27.8k|    })
 2818|  27.8k|  ) {
 2819|    277|    parser_add_parse_error(parser, token);
 2820|    277|    assert(state->_head_element != NULL);
  ------------------
  |  Branch (2820:5): [True: 0, False: 277]
  |  Branch (2820:5): [True: 277, False: 0]
  ------------------
 2821|       |    // This must be flushed before we push the head element on, as there may be
 2822|       |    // pending character tokens that should be attached to the root.
 2823|    277|    maybe_flush_text_node_buffer(parser);
 2824|    277|    gumbo_vector_add(state->_head_element, &state->_open_elements);
 2825|    277|    handle_in_head(parser, token);
 2826|    277|    gumbo_vector_remove(state->_head_element, &state->_open_elements);
 2827|    277|    return;
 2828|    277|  }
 2829|  27.6k|  if (tag_is(token, kEndTag, GUMBO_TAG_TEMPLATE)) {
  ------------------
  |  Branch (2829:7): [True: 202, False: 27.4k]
  ------------------
 2830|    202|    handle_in_head(parser, token);
 2831|    202|    return;
 2832|    202|  }
 2833|  27.4k|  if (
 2834|  27.4k|    tag_is(token, kStartTag, GUMBO_TAG_HEAD)
  ------------------
  |  Branch (2834:5): [True: 545, False: 26.8k]
  ------------------
 2835|  26.8k|    || (
 2836|  26.8k|      token->type == GUMBO_TOKEN_END_TAG
  ------------------
  |  Branch (2836:7): [True: 430, False: 26.4k]
  ------------------
 2837|    430|      && !tag_in(token, kEndTag, &(const TagSet){TAG(BODY), TAG(HTML), TAG(BR)})
  ------------------
  |  |   40|    430|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    && !tag_in(token, kEndTag, &(const TagSet){TAG(BODY), TAG(HTML), TAG(BR)})
  ------------------
  |  |   40|    430|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    && !tag_in(token, kEndTag, &(const TagSet){TAG(BODY), TAG(HTML), TAG(BR)})
  ------------------
  |  |   40|    430|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
  |  Branch (2837:10): [True: 369, False: 61]
  ------------------
 2838|  26.8k|    )
 2839|  27.4k|  ) {
 2840|    914|    parser_add_parse_error(parser, token);
 2841|    914|    ignore_token(parser);
 2842|    914|    return;
 2843|    914|  }
 2844|  26.5k|  insert_element_of_tag_type(parser, GUMBO_TAG_BODY, GUMBO_INSERTION_IMPLIED);
 2845|  26.5k|  set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_BODY);
 2846|       |  state->_reprocess_current_token = true;
 2847|  26.5k|}
parser.c:handle_in_body:
 2850|  6.92M|static void handle_in_body(GumboParser* parser, GumboToken* token) {
 2851|  6.92M|  GumboParserState* state = parser->_parser_state;
 2852|  6.92M|  assert(state->_open_elements.length > 0);
  ------------------
  |  Branch (2852:3): [True: 0, False: 6.92M]
  |  Branch (2852:3): [True: 6.92M, False: 0]
  ------------------
 2853|  6.92M|  if (token->type == GUMBO_TOKEN_NULL) {
  ------------------
  |  Branch (2853:7): [True: 491k, False: 6.43M]
  ------------------
 2854|   491k|    parser_add_parse_error(parser, token);
 2855|   491k|    ignore_token(parser);
 2856|   491k|    return;
 2857|   491k|  }
 2858|  6.43M|  if (token->type == GUMBO_TOKEN_WHITESPACE) {
  ------------------
  |  Branch (2858:7): [True: 94.8k, False: 6.34M]
  ------------------
 2859|  94.8k|    reconstruct_active_formatting_elements(parser);
 2860|  94.8k|    insert_text_token(parser, token);
 2861|  94.8k|    return;
 2862|  94.8k|  }
 2863|  6.34M|  if (
 2864|  6.34M|    token->type == GUMBO_TOKEN_CHARACTER
  ------------------
  |  Branch (2864:5): [True: 6.03M, False: 305k]
  ------------------
 2865|   305k|    || token->type == GUMBO_TOKEN_CDATA
  ------------------
  |  Branch (2865:8): [True: 0, False: 305k]
  ------------------
 2866|  6.34M|  ) {
 2867|  6.03M|    reconstruct_active_formatting_elements(parser);
 2868|  6.03M|    insert_text_token(parser, token);
 2869|  6.03M|    set_frameset_not_ok(parser);
 2870|  6.03M|    return;
 2871|  6.03M|  }
 2872|   305k|  if (token->type == GUMBO_TOKEN_COMMENT) {
  ------------------
  |  Branch (2872:7): [True: 14.5k, False: 291k]
  ------------------
 2873|  14.5k|    append_comment_node(parser, get_current_node(parser), token);
 2874|  14.5k|    return;
 2875|  14.5k|  }
 2876|   291k|  if (token->type == GUMBO_TOKEN_DOCTYPE) {
  ------------------
  |  Branch (2876:7): [True: 15.3k, False: 276k]
  ------------------
 2877|  15.3k|    parser_add_parse_error(parser, token);
 2878|  15.3k|    ignore_token(parser);
 2879|  15.3k|    return;
 2880|  15.3k|  }
 2881|   276k|  if (tag_is(token, kStartTag, GUMBO_TAG_HTML)) {
  ------------------
  |  Branch (2881:7): [True: 4.54k, False: 271k]
  ------------------
 2882|  4.54k|    parser_add_parse_error(parser, token);
 2883|  4.54k|    if (has_open_element(parser, GUMBO_TAG_TEMPLATE)) {
  ------------------
  |  Branch (2883:9): [True: 329, False: 4.22k]
  ------------------
 2884|    329|      ignore_token(parser);
 2885|    329|      return;
 2886|    329|    }
 2887|  4.54k|    assert(parser->_output->root != NULL);
  ------------------
  |  Branch (2887:5): [True: 0, False: 4.22k]
  |  Branch (2887:5): [True: 4.22k, False: 0]
  ------------------
 2888|  4.22k|    assert(parser->_output->root->type == GUMBO_NODE_ELEMENT);
  ------------------
  |  Branch (2888:5): [True: 0, False: 4.22k]
  |  Branch (2888:5): [True: 4.22k, False: 0]
  ------------------
 2889|  4.22k|    merge_attributes(token, parser->_output->root);
 2890|  4.22k|    return;
 2891|  4.22k|  }
 2892|   271k|  if (
 2893|   271k|    tag_in(token, kStartTag, &(const TagSet) {
  ------------------
  |  Branch (2893:5): [True: 7.07k, False: 264k]
  ------------------
 2894|   271k|      TAG(BASE), TAG(BASEFONT), TAG(BGSOUND), TAG(LINK),
  ------------------
  |  |   40|   271k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BASE), TAG(BASEFONT), TAG(BGSOUND), TAG(LINK),
  ------------------
  |  |   40|   271k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BASE), TAG(BASEFONT), TAG(BGSOUND), TAG(LINK),
  ------------------
  |  |   40|   271k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BASE), TAG(BASEFONT), TAG(BGSOUND), TAG(LINK),
  ------------------
  |  |   40|   271k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 2895|   271k|      TAG(META), TAG(NOFRAMES), TAG(SCRIPT), TAG(STYLE), TAG(TEMPLATE),
  ------------------
  |  |   40|   271k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(META), TAG(NOFRAMES), TAG(SCRIPT), TAG(STYLE), TAG(TEMPLATE),
  ------------------
  |  |   40|   271k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(META), TAG(NOFRAMES), TAG(SCRIPT), TAG(STYLE), TAG(TEMPLATE),
  ------------------
  |  |   40|   271k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(META), TAG(NOFRAMES), TAG(SCRIPT), TAG(STYLE), TAG(TEMPLATE),
  ------------------
  |  |   40|   271k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(META), TAG(NOFRAMES), TAG(SCRIPT), TAG(STYLE), TAG(TEMPLATE),
  ------------------
  |  |   40|   271k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 2896|   271k|      TAG(TITLE)
  ------------------
  |  |   40|   271k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 2897|   271k|    })
 2898|   264k|    || tag_is(token, kEndTag, GUMBO_TAG_TEMPLATE)
  ------------------
  |  Branch (2898:8): [True: 737, False: 263k]
  ------------------
 2899|   271k|  ) {
 2900|  7.81k|    handle_in_head(parser, token);
 2901|  7.81k|    return;
 2902|  7.81k|  }
 2903|   263k|  if (tag_is(token, kStartTag, GUMBO_TAG_BODY)) {
  ------------------
  |  Branch (2903:7): [True: 2.01k, False: 261k]
  ------------------
 2904|  2.01k|    parser_add_parse_error(parser, token);
 2905|  2.01k|    if (
 2906|  2.01k|      state->_open_elements.length < 2
  ------------------
  |  Branch (2906:7): [True: 0, False: 2.01k]
  ------------------
 2907|  2.01k|      || !node_html_tag_is(state->_open_elements.data[1], GUMBO_TAG_BODY)
  ------------------
  |  Branch (2907:10): [True: 223, False: 1.79k]
  ------------------
 2908|  1.79k|      || has_open_element(parser, GUMBO_TAG_TEMPLATE)
  ------------------
  |  Branch (2908:10): [True: 374, False: 1.41k]
  ------------------
 2909|  2.01k|    ) {
 2910|    597|      ignore_token(parser);
 2911|  1.41k|    } else {
 2912|  1.41k|      set_frameset_not_ok(parser);
 2913|  1.41k|      merge_attributes(token, state->_open_elements.data[1]);
 2914|  1.41k|    }
 2915|  2.01k|    return;
 2916|  2.01k|  }
 2917|   261k|  if (tag_is(token, kStartTag, GUMBO_TAG_FRAMESET)) {
  ------------------
  |  Branch (2917:7): [True: 644, False: 261k]
  ------------------
 2918|    644|    parser_add_parse_error(parser, token);
 2919|    644|    if (
 2920|    644|      state->_open_elements.length < 2
  ------------------
  |  Branch (2920:7): [True: 0, False: 644]
  ------------------
 2921|    644|      || !node_html_tag_is(state->_open_elements.data[1], GUMBO_TAG_BODY)
  ------------------
  |  Branch (2921:10): [True: 207, False: 437]
  ------------------
 2922|    437|      || !state->_frameset_ok
  ------------------
  |  Branch (2922:10): [True: 362, False: 75]
  ------------------
 2923|    644|    ) {
 2924|    569|      ignore_token(parser);
 2925|    569|      return;
 2926|    569|    }
 2927|       |    // Save the body node for later removal.
 2928|     75|    GumboNode* body_node = state->_open_elements.data[1];
 2929|       |
 2930|       |    // Pop all nodes except root HTML element.
 2931|     75|    GumboNode* node;
 2932|    468|    do {
 2933|    468|      node = pop_current_node(parser);
 2934|    468|    } while (node != state->_open_elements.data[1]);
  ------------------
  |  Branch (2934:14): [True: 393, False: 75]
  ------------------
 2935|       |
 2936|       |    // Removing & destroying the body node is going to kill any nodes that have
 2937|       |    // been added to the list of active formatting elements, and so we should
 2938|       |    // clear it to prevent a use-after-free if the list of active formatting
 2939|       |    // elements is reconstructed afterwards. This may happen if whitespace
 2940|       |    // follows the </frameset>.
 2941|     75|    clear_active_formatting_elements(parser);
 2942|       |
 2943|     75|    remove_from_parent(body_node);
 2944|     75|    destroy_node(body_node);
 2945|       |
 2946|       |    // Insert the <frameset>, and switch the insertion mode.
 2947|     75|    insert_element_from_token(parser, token);
 2948|     75|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_FRAMESET);
 2949|     75|    return;
 2950|    644|  }
 2951|   261k|  if (token->type == GUMBO_TOKEN_EOF) {
  ------------------
  |  Branch (2951:7): [True: 30.2k, False: 230k]
  ------------------
 2952|  30.2k|    if (get_current_template_insertion_mode(parser) !=
  ------------------
  |  Branch (2952:9): [True: 3.85k, False: 26.3k]
  ------------------
 2953|  30.2k|        GUMBO_INSERTION_MODE_INITIAL) {
 2954|  3.85k|      handle_in_template(parser, token);
 2955|  3.85k|      return;
 2956|  3.85k|    }
 2957|  26.3k|    if (stack_contains_nonclosable_element(parser))
  ------------------
  |  Branch (2957:9): [True: 7.79k, False: 18.5k]
  ------------------
 2958|  7.79k|      parser_add_parse_error(parser, token);
 2959|  26.3k|    return;
 2960|  30.2k|  }
 2961|   230k|  if (tag_is(token, kEndTag, GUMBO_TAG_BODY)) {
  ------------------
  |  Branch (2961:7): [True: 1.63k, False: 229k]
  ------------------
 2962|  1.63k|    if (!has_an_element_in_scope(parser, GUMBO_TAG_BODY)) {
  ------------------
  |  Branch (2962:9): [True: 265, False: 1.36k]
  ------------------
 2963|    265|      parser_add_parse_error(parser, token);
 2964|    265|      ignore_token(parser);
 2965|    265|      return;
 2966|    265|    }
 2967|  1.36k|    if (stack_contains_nonclosable_element(parser))
  ------------------
  |  Branch (2967:9): [True: 931, False: 435]
  ------------------
 2968|    931|      parser_add_parse_error(parser, token);
 2969|  1.36k|    GumboNode* body = state->_open_elements.data[1];
 2970|  1.36k|    assert(node_html_tag_is(body, GUMBO_TAG_BODY));
  ------------------
  |  Branch (2970:5): [True: 0, False: 1.36k]
  |  Branch (2970:5): [True: 1.36k, False: 0]
  ------------------
 2971|  1.36k|    record_end_of_element(state->_current_token, &body->v.element);
 2972|  1.36k|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_AFTER_BODY);
 2973|  1.36k|    return;
 2974|  1.36k|  }
 2975|   229k|  if (tag_is(token, kEndTag, GUMBO_TAG_HTML)) {
  ------------------
  |  Branch (2975:7): [True: 1.47k, False: 227k]
  ------------------
 2976|  1.47k|    if (!has_an_element_in_scope(parser, GUMBO_TAG_BODY)) {
  ------------------
  |  Branch (2976:9): [True: 223, False: 1.25k]
  ------------------
 2977|    223|      parser_add_parse_error(parser, token);
 2978|    223|      ignore_token(parser);
 2979|    223|      return;
 2980|    223|    }
 2981|  1.25k|    if (stack_contains_nonclosable_element(parser))
  ------------------
  |  Branch (2981:9): [True: 715, False: 541]
  ------------------
 2982|    715|      parser_add_parse_error(parser, token);
 2983|  1.25k|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_AFTER_BODY);
 2984|  1.25k|    parser->_parser_state->_reprocess_current_token = true;
 2985|  1.25k|    return;
 2986|  1.47k|  }
 2987|   227k|  if (
 2988|   227k|    tag_in(token, kStartTag, &(const TagSet) {
  ------------------
  |  Branch (2988:5): [True: 15.4k, False: 212k]
  ------------------
 2989|   227k|      TAG(ADDRESS), TAG(ARTICLE), TAG(ASIDE), TAG(BLOCKQUOTE), TAG(CENTER),
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(ADDRESS), TAG(ARTICLE), TAG(ASIDE), TAG(BLOCKQUOTE), TAG(CENTER),
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(ADDRESS), TAG(ARTICLE), TAG(ASIDE), TAG(BLOCKQUOTE), TAG(CENTER),
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(ADDRESS), TAG(ARTICLE), TAG(ASIDE), TAG(BLOCKQUOTE), TAG(CENTER),
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(ADDRESS), TAG(ARTICLE), TAG(ASIDE), TAG(BLOCKQUOTE), TAG(CENTER),
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 2990|   227k|      TAG(DETAILS), TAG(DIALOG), TAG(DIR), TAG(DIV), TAG(DL), TAG(FIELDSET),
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(DETAILS), TAG(DIALOG), TAG(DIR), TAG(DIV), TAG(DL), TAG(FIELDSET),
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(DETAILS), TAG(DIALOG), TAG(DIR), TAG(DIV), TAG(DL), TAG(FIELDSET),
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(DETAILS), TAG(DIALOG), TAG(DIR), TAG(DIV), TAG(DL), TAG(FIELDSET),
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(DETAILS), TAG(DIALOG), TAG(DIR), TAG(DIV), TAG(DL), TAG(FIELDSET),
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(DETAILS), TAG(DIALOG), TAG(DIR), TAG(DIV), TAG(DL), TAG(FIELDSET),
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 2991|   227k|      TAG(FIGCAPTION), TAG(FIGURE), TAG(FOOTER), TAG(HEADER), TAG(HGROUP),
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(FIGCAPTION), TAG(FIGURE), TAG(FOOTER), TAG(HEADER), TAG(HGROUP),
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(FIGCAPTION), TAG(FIGURE), TAG(FOOTER), TAG(HEADER), TAG(HGROUP),
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(FIGCAPTION), TAG(FIGURE), TAG(FOOTER), TAG(HEADER), TAG(HGROUP),
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(FIGCAPTION), TAG(FIGURE), TAG(FOOTER), TAG(HEADER), TAG(HGROUP),
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 2992|   227k|      TAG(MAIN), TAG(MENU), TAG(NAV), TAG(OL), TAG(P), TAG(SECTION),
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(MAIN), TAG(MENU), TAG(NAV), TAG(OL), TAG(P), TAG(SECTION),
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(MAIN), TAG(MENU), TAG(NAV), TAG(OL), TAG(P), TAG(SECTION),
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(MAIN), TAG(MENU), TAG(NAV), TAG(OL), TAG(P), TAG(SECTION),
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(MAIN), TAG(MENU), TAG(NAV), TAG(OL), TAG(P), TAG(SECTION),
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(MAIN), TAG(MENU), TAG(NAV), TAG(OL), TAG(P), TAG(SECTION),
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 2993|   227k|      TAG(SUMMARY), TAG(UL), TAG(SEARCH)
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(SUMMARY), TAG(UL), TAG(SEARCH)
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(SUMMARY), TAG(UL), TAG(SEARCH)
  ------------------
  |  |   40|   227k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 2994|   227k|    })
 2995|   227k|  ) {
 2996|  15.4k|    maybe_implicitly_close_p_tag(parser, token);
 2997|  15.4k|    insert_element_from_token(parser, token);
 2998|  15.4k|    return;
 2999|  15.4k|  }
 3000|   212k|  if (tag_in(token, kStartTag, &heading_tags)) {
  ------------------
  |  Branch (3000:7): [True: 4.03k, False: 208k]
  ------------------
 3001|  4.03k|    maybe_implicitly_close_p_tag(parser, token);
 3002|  4.03k|    if (node_tag_in_set(get_current_node(parser), &heading_tags)) {
  ------------------
  |  Branch (3002:9): [True: 1.98k, False: 2.04k]
  ------------------
 3003|  1.98k|      parser_add_parse_error(parser, token);
 3004|  1.98k|      pop_current_node(parser);
 3005|  1.98k|    }
 3006|  4.03k|    insert_element_from_token(parser, token);
 3007|  4.03k|    return;
 3008|  4.03k|  }
 3009|   208k|  if (tag_in(token, kStartTag, &(const TagSet){TAG(PRE), TAG(LISTING)})) {
  ------------------
  |  |   40|   208k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                if (tag_in(token, kStartTag, &(const TagSet){TAG(PRE), TAG(LISTING)})) {
  ------------------
  |  |   40|   208k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
  |  Branch (3009:7): [True: 1.48k, False: 206k]
  ------------------
 3010|  1.48k|    maybe_implicitly_close_p_tag(parser, token);
 3011|  1.48k|    insert_element_from_token(parser, token);
 3012|  1.48k|    state->_ignore_next_linefeed = true;
 3013|  1.48k|    set_frameset_not_ok(parser);
 3014|  1.48k|    return;
 3015|  1.48k|  }
 3016|   206k|  if (tag_is(token, kStartTag, GUMBO_TAG_FORM)) {
  ------------------
  |  Branch (3016:7): [True: 2.87k, False: 203k]
  ------------------
 3017|  2.87k|    if (
 3018|  2.87k|      state->_form_element != NULL
  ------------------
  |  Branch (3018:7): [True: 1.28k, False: 1.59k]
  ------------------
 3019|  1.28k|      && !has_open_element(parser, GUMBO_TAG_TEMPLATE)
  ------------------
  |  Branch (3019:10): [True: 728, False: 556]
  ------------------
 3020|  2.87k|    ) {
 3021|    728|      gumbo_debug("Ignoring nested form.\n");
 3022|    728|      parser_add_parse_error(parser, token);
 3023|    728|      ignore_token(parser);
 3024|    728|      return;
 3025|    728|    }
 3026|  2.14k|    maybe_implicitly_close_p_tag(parser, token);
 3027|  2.14k|    GumboNode* form_element = insert_element_from_token(parser, token);
 3028|  2.14k|    if (!has_open_element(parser, GUMBO_TAG_TEMPLATE)) {
  ------------------
  |  Branch (3028:9): [True: 719, False: 1.42k]
  ------------------
 3029|    719|      state->_form_element = form_element;
 3030|    719|    }
 3031|  2.14k|    return;
 3032|  2.87k|  }
 3033|   203k|  if (tag_is(token, kStartTag, GUMBO_TAG_LI)) {
  ------------------
  |  Branch (3033:7): [True: 2.99k, False: 200k]
  ------------------
 3034|  2.99k|    maybe_implicitly_close_list_tag(parser, token, true);
 3035|  2.99k|    maybe_implicitly_close_p_tag(parser, token);
 3036|  2.99k|    insert_element_from_token(parser, token);
 3037|  2.99k|    return;
 3038|  2.99k|  }
 3039|   200k|  if (tag_in(token, kStartTag, &dd_dt_tags)) {
  ------------------
  |  Branch (3039:7): [True: 2.16k, False: 198k]
  ------------------
 3040|  2.16k|    maybe_implicitly_close_list_tag(parser, token, false);
 3041|  2.16k|    maybe_implicitly_close_p_tag(parser, token);
 3042|  2.16k|    insert_element_from_token(parser, token);
 3043|  2.16k|    return;
 3044|  2.16k|  }
 3045|   198k|  if (tag_is(token, kStartTag, GUMBO_TAG_PLAINTEXT)) {
  ------------------
  |  Branch (3045:7): [True: 106, False: 198k]
  ------------------
 3046|    106|    maybe_implicitly_close_p_tag(parser, token);
 3047|    106|    insert_element_from_token(parser, token);
 3048|    106|    gumbo_tokenizer_set_state(parser, GUMBO_LEX_PLAINTEXT);
 3049|    106|    return;
 3050|    106|  }
 3051|   198k|  if (tag_is(token, kStartTag, GUMBO_TAG_BUTTON)) {
  ------------------
  |  Branch (3051:7): [True: 947, False: 197k]
  ------------------
 3052|    947|    if (has_an_element_in_scope(parser, GUMBO_TAG_BUTTON)) {
  ------------------
  |  Branch (3052:9): [True: 647, False: 300]
  ------------------
 3053|    647|      parser_add_parse_error(parser, token);
 3054|       |      // We don't want to use implicitly_close_tags here because it may add an
 3055|       |      // error and we've already added the only error the standard specifies.
 3056|    647|      generate_implied_end_tags(parser, GUMBO_TAG_LAST, NULL);
 3057|  1.57k|      while (!node_html_tag_is(pop_current_node(parser), GUMBO_TAG_BUTTON))
  ------------------
  |  Branch (3057:14): [True: 930, False: 647]
  ------------------
 3058|    930|        ;
 3059|    647|    }
 3060|    947|    reconstruct_active_formatting_elements(parser);
 3061|    947|    insert_element_from_token(parser, token);
 3062|    947|    set_frameset_not_ok(parser);
 3063|    947|    return;
 3064|    947|  }
 3065|   197k|  if (
 3066|   197k|    tag_in(token, kEndTag, &(const TagSet) {
  ------------------
  |  Branch (3066:5): [True: 516, False: 197k]
  ------------------
 3067|   197k|      TAG(ADDRESS), TAG(ARTICLE), TAG(ASIDE), TAG(BLOCKQUOTE), TAG(BUTTON),
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(ADDRESS), TAG(ARTICLE), TAG(ASIDE), TAG(BLOCKQUOTE), TAG(BUTTON),
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(ADDRESS), TAG(ARTICLE), TAG(ASIDE), TAG(BLOCKQUOTE), TAG(BUTTON),
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(ADDRESS), TAG(ARTICLE), TAG(ASIDE), TAG(BLOCKQUOTE), TAG(BUTTON),
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(ADDRESS), TAG(ARTICLE), TAG(ASIDE), TAG(BLOCKQUOTE), TAG(BUTTON),
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3068|   197k|      TAG(CENTER), TAG(DETAILS), TAG(DIALOG), TAG(DIR), TAG(DIV), TAG(DL),
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CENTER), TAG(DETAILS), TAG(DIALOG), TAG(DIR), TAG(DIV), TAG(DL),
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CENTER), TAG(DETAILS), TAG(DIALOG), TAG(DIR), TAG(DIV), TAG(DL),
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CENTER), TAG(DETAILS), TAG(DIALOG), TAG(DIR), TAG(DIV), TAG(DL),
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CENTER), TAG(DETAILS), TAG(DIALOG), TAG(DIR), TAG(DIV), TAG(DL),
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CENTER), TAG(DETAILS), TAG(DIALOG), TAG(DIR), TAG(DIV), TAG(DL),
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3069|   197k|      TAG(FIELDSET), TAG(FIGCAPTION), TAG(FIGURE), TAG(FOOTER), TAG(HEADER),
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(FIELDSET), TAG(FIGCAPTION), TAG(FIGURE), TAG(FOOTER), TAG(HEADER),
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(FIELDSET), TAG(FIGCAPTION), TAG(FIGURE), TAG(FOOTER), TAG(HEADER),
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(FIELDSET), TAG(FIGCAPTION), TAG(FIGURE), TAG(FOOTER), TAG(HEADER),
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(FIELDSET), TAG(FIGCAPTION), TAG(FIGURE), TAG(FOOTER), TAG(HEADER),
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3070|   197k|      TAG(HGROUP), TAG(LISTING), TAG(MAIN), TAG(MENU), TAG(NAV), TAG(OL),
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(HGROUP), TAG(LISTING), TAG(MAIN), TAG(MENU), TAG(NAV), TAG(OL),
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(HGROUP), TAG(LISTING), TAG(MAIN), TAG(MENU), TAG(NAV), TAG(OL),
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(HGROUP), TAG(LISTING), TAG(MAIN), TAG(MENU), TAG(NAV), TAG(OL),
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(HGROUP), TAG(LISTING), TAG(MAIN), TAG(MENU), TAG(NAV), TAG(OL),
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(HGROUP), TAG(LISTING), TAG(MAIN), TAG(MENU), TAG(NAV), TAG(OL),
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3071|   197k|      TAG(PRE), TAG(SECTION), TAG(SUMMARY), TAG(UL), TAG(SEARCH)
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(PRE), TAG(SECTION), TAG(SUMMARY), TAG(UL), TAG(SEARCH)
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(PRE), TAG(SECTION), TAG(SUMMARY), TAG(UL), TAG(SEARCH)
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(PRE), TAG(SECTION), TAG(SUMMARY), TAG(UL), TAG(SEARCH)
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(PRE), TAG(SECTION), TAG(SUMMARY), TAG(UL), TAG(SEARCH)
  ------------------
  |  |   40|   197k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3072|   197k|    })
 3073|   197k|  ) {
 3074|    516|    GumboTag tag = token->v.end_tag.tag;
 3075|    516|    if (!has_an_element_in_scope(parser, tag)) {
  ------------------
  |  Branch (3075:9): [True: 267, False: 249]
  ------------------
 3076|    267|      parser_add_parse_error(parser, token);
 3077|    267|      ignore_token(parser);
 3078|    267|      return;
 3079|    267|    }
 3080|    249|    return implicitly_close_tags (
 3081|    249|      parser,
 3082|    249|      token,
 3083|    249|      GUMBO_NAMESPACE_HTML,
 3084|    249|      token->v.end_tag.tag
 3085|    249|    );
 3086|    516|  }
 3087|   197k|  if (tag_is(token, kEndTag, GUMBO_TAG_FORM)) {
  ------------------
  |  Branch (3087:7): [True: 2.48k, False: 194k]
  ------------------
 3088|  2.48k|    if (has_open_element(parser, GUMBO_TAG_TEMPLATE)) {
  ------------------
  |  Branch (3088:9): [True: 1.11k, False: 1.36k]
  ------------------
 3089|  1.11k|      if (!has_an_element_in_scope(parser, GUMBO_TAG_FORM)) {
  ------------------
  |  Branch (3089:11): [True: 285, False: 830]
  ------------------
 3090|    285|        parser_add_parse_error(parser, token);
 3091|    285|        ignore_token(parser);
 3092|    285|        return;
 3093|    285|      }
 3094|    830|      generate_implied_end_tags(parser, GUMBO_TAG_LAST, NULL);
 3095|    830|      if (!node_html_tag_is(get_current_node(parser), GUMBO_TAG_FORM))
  ------------------
  |  Branch (3095:11): [True: 465, False: 365]
  ------------------
 3096|    465|        parser_add_parse_error(parser, token);
 3097|  1.84k|      while (!node_html_tag_is(pop_current_node(parser), GUMBO_TAG_FORM))
  ------------------
  |  Branch (3097:14): [True: 1.01k, False: 830]
  ------------------
 3098|  1.01k|        ;
 3099|    830|      return;
 3100|  1.36k|    } else {
 3101|  1.36k|      GumboNode* node = state->_form_element;
 3102|  1.36k|      assert(!node || node->type == GUMBO_NODE_ELEMENT);
  ------------------
  |  Branch (3102:7): [True: 1.36k, False: 0]
  |  Branch (3102:7): [True: 0, False: 0]
  |  Branch (3102:7): [True: 506, False: 859]
  |  Branch (3102:7): [True: 859, False: 0]
  ------------------
 3103|  1.36k|      state->_form_element = NULL;
 3104|  1.36k|      if (!node || !has_node_in_scope(parser, node)) {
  ------------------
  |  Branch (3104:11): [True: 506, False: 859]
  |  Branch (3104:20): [True: 250, False: 609]
  ------------------
 3105|    756|        gumbo_debug("Closing an unopened form.\n");
 3106|    756|        parser_add_parse_error(parser, token);
 3107|    756|        ignore_token(parser);
 3108|    756|        return;
 3109|    756|      }
 3110|       |      // Since we remove the form node without popping, we need to make sure
 3111|       |      // that we flush any text nodes at the end of the form.
 3112|    609|      maybe_flush_text_node_buffer(parser);
 3113|       |      // This differs from implicitly_close_tags because we remove *only* the
 3114|       |      // <form> element; other nodes are left in scope.
 3115|    609|      generate_implied_end_tags(parser, GUMBO_TAG_LAST, NULL);
 3116|    609|      if (get_current_node(parser) != node)
  ------------------
  |  Branch (3116:11): [True: 330, False: 279]
  ------------------
 3117|    330|        parser_add_parse_error(parser, token);
 3118|    279|      else
 3119|    279|        record_end_of_element(token, &node->v.element);
 3120|       |
 3121|    609|      GumboVector* open_elements = &state->_open_elements;
 3122|    609|      int index = gumbo_vector_index_of(open_elements, node);
 3123|    609|      assert(index >= 0);
  ------------------
  |  Branch (3123:7): [True: 0, False: 609]
  |  Branch (3123:7): [True: 609, False: 0]
  ------------------
 3124|    609|      gumbo_vector_remove_at(index, open_elements);
 3125|    609|      return;
 3126|    609|    }
 3127|  2.48k|  }
 3128|   194k|  if (tag_is(token, kEndTag, GUMBO_TAG_P)) {
  ------------------
  |  Branch (3128:7): [True: 3.08k, False: 191k]
  ------------------
 3129|  3.08k|    if (!has_an_element_in_button_scope(parser, GUMBO_TAG_P)) {
  ------------------
  |  Branch (3129:9): [True: 2.30k, False: 782]
  ------------------
 3130|  2.30k|      parser_add_parse_error(parser, token);
 3131|       |      // reconstruct_active_formatting_elements(parser);
 3132|  2.30k|      insert_element_of_tag_type (
 3133|  2.30k|        parser,
 3134|  2.30k|        GUMBO_TAG_P,
 3135|  2.30k|        GUMBO_INSERTION_CONVERTED_FROM_END_TAG
 3136|  2.30k|      );
 3137|  2.30k|    }
 3138|  3.08k|    implicitly_close_tags (
 3139|  3.08k|      parser,
 3140|  3.08k|      token,
 3141|  3.08k|      GUMBO_NAMESPACE_HTML,
 3142|  3.08k|      GUMBO_TAG_P
 3143|  3.08k|    );
 3144|  3.08k|    return;
 3145|  3.08k|  }
 3146|   191k|  if (tag_is(token, kEndTag, GUMBO_TAG_LI)) {
  ------------------
  |  Branch (3146:7): [True: 1.16k, False: 190k]
  ------------------
 3147|  1.16k|    if (!has_an_element_in_list_scope(parser, GUMBO_TAG_LI)) {
  ------------------
  |  Branch (3147:9): [True: 622, False: 542]
  ------------------
 3148|    622|      parser_add_parse_error(parser, token);
 3149|    622|      ignore_token(parser);
 3150|    622|      return;
 3151|    622|    }
 3152|    542|    implicitly_close_tags (
 3153|    542|      parser,
 3154|    542|      token,
 3155|    542|      GUMBO_NAMESPACE_HTML,
 3156|    542|      GUMBO_TAG_LI
 3157|    542|    );
 3158|    542|    return;
 3159|  1.16k|  }
 3160|   190k|  if (tag_in(token, kEndTag, &dd_dt_tags)) {
  ------------------
  |  Branch (3160:7): [True: 734, False: 189k]
  ------------------
 3161|    734|    GumboTag token_tag = token->v.end_tag.tag;
 3162|    734|    if (!has_an_element_in_scope(parser, token_tag)) {
  ------------------
  |  Branch (3162:9): [True: 313, False: 421]
  ------------------
 3163|    313|      parser_add_parse_error(parser, token);
 3164|    313|      ignore_token(parser);
 3165|    313|      return;
 3166|    313|    }
 3167|    421|    implicitly_close_tags (
 3168|    421|      parser,
 3169|    421|      token,
 3170|    421|      GUMBO_NAMESPACE_HTML,
 3171|    421|      token_tag
 3172|    421|    );
 3173|    421|    return;
 3174|    734|  }
 3175|   189k|  if (tag_in(token, kEndTag, &heading_tags)) {
  ------------------
  |  Branch (3175:7): [True: 1.85k, False: 187k]
  ------------------
 3176|  1.85k|    if (
 3177|  1.85k|      !has_an_element_in_scope_with_tagname(parser, 6, (GumboTag[]) {
  ------------------
  |  Branch (3177:7): [True: 864, False: 990]
  ------------------
 3178|  1.85k|        GUMBO_TAG_H1, GUMBO_TAG_H2, GUMBO_TAG_H3, GUMBO_TAG_H4,
 3179|  1.85k|        GUMBO_TAG_H5, GUMBO_TAG_H6
 3180|  1.85k|      })
 3181|  1.85k|    ) {
 3182|       |      // No heading open; ignore the token entirely.
 3183|    864|      parser_add_parse_error(parser, token);
 3184|    864|      ignore_token(parser);
 3185|    864|      return;
 3186|    864|    }
 3187|    990|    generate_implied_end_tags(parser, GUMBO_TAG_LAST, NULL);
 3188|    990|    const GumboNode* current_node = get_current_node(parser);
 3189|    990|    if (!node_html_tag_is(current_node, token->v.end_tag.tag)) {
  ------------------
  |  Branch (3189:9): [True: 589, False: 401]
  ------------------
 3190|       |      // There're children of the heading currently open; close them below and
 3191|       |      // record a parse error.
 3192|       |      // TODO(jdtang): Add a way to distinguish this error case from the one
 3193|       |      // above.
 3194|    589|      parser_add_parse_error(parser, token);
 3195|    589|    }
 3196|  1.92k|    do {
 3197|  1.92k|      current_node = pop_current_node(parser);
 3198|  1.92k|    } while (!node_tag_in_set(current_node, &heading_tags));
  ------------------
  |  Branch (3198:14): [True: 932, False: 990]
  ------------------
 3199|    990|    return;
 3200|  1.85k|  }
 3201|   187k|  if (tag_is(token, kStartTag, GUMBO_TAG_A)) {
  ------------------
  |  Branch (3201:7): [True: 18.8k, False: 169k]
  ------------------
 3202|  18.8k|    int last_a;
 3203|  18.8k|    int has_matching_a = find_last_anchor_index(parser, &last_a);
 3204|  18.8k|    if (has_matching_a) {
  ------------------
  |  Branch (3204:9): [True: 17.1k, False: 1.70k]
  ------------------
 3205|  17.1k|      assert(has_matching_a == 1);
  ------------------
  |  Branch (3205:7): [True: 0, False: 17.1k]
  |  Branch (3205:7): [True: 17.1k, False: 0]
  ------------------
 3206|  17.1k|      parser_add_parse_error(parser, token);
 3207|  17.1k|      (void)adoption_agency_algorithm(parser, token);
 3208|       |      // The adoption agency algorithm usually removes all instances of <a>
 3209|       |      // from the list of active formatting elements, but in case it doesn't,
 3210|       |      // we're supposed to do this. (The conditions where it might not are
 3211|       |      // listed in the spec.)
 3212|  17.1k|      if (find_last_anchor_index(parser, &last_a)) {
  ------------------
  |  Branch (3212:11): [True: 507, False: 16.5k]
  ------------------
 3213|    507|        void* last_element = gumbo_vector_remove_at (
 3214|    507|          last_a,
 3215|    507|          &state->_active_formatting_elements
 3216|    507|        );
 3217|    507|        gumbo_vector_remove(last_element, &state->_open_elements);
 3218|    507|      }
 3219|  17.1k|    }
 3220|  18.8k|    reconstruct_active_formatting_elements(parser);
 3221|  18.8k|    add_formatting_element(parser, insert_element_from_token(parser, token));
 3222|  18.8k|    return;
 3223|  18.8k|  }
 3224|   169k|  if (
 3225|   169k|    tag_in(token, kStartTag, &(const TagSet) {
  ------------------
  |  Branch (3225:5): [True: 46.0k, False: 122k]
  ------------------
 3226|   169k|      TAG(B), TAG(BIG), TAG(CODE), TAG(EM), TAG(FONT), TAG(I), TAG(S),
  ------------------
  |  |   40|   169k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(B), TAG(BIG), TAG(CODE), TAG(EM), TAG(FONT), TAG(I), TAG(S),
  ------------------
  |  |   40|   169k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(B), TAG(BIG), TAG(CODE), TAG(EM), TAG(FONT), TAG(I), TAG(S),
  ------------------
  |  |   40|   169k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(B), TAG(BIG), TAG(CODE), TAG(EM), TAG(FONT), TAG(I), TAG(S),
  ------------------
  |  |   40|   169k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(B), TAG(BIG), TAG(CODE), TAG(EM), TAG(FONT), TAG(I), TAG(S),
  ------------------
  |  |   40|   169k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(B), TAG(BIG), TAG(CODE), TAG(EM), TAG(FONT), TAG(I), TAG(S),
  ------------------
  |  |   40|   169k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(B), TAG(BIG), TAG(CODE), TAG(EM), TAG(FONT), TAG(I), TAG(S),
  ------------------
  |  |   40|   169k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3227|   169k|      TAG(SMALL), TAG(STRIKE), TAG(STRONG), TAG(TT), TAG(U)
  ------------------
  |  |   40|   169k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(SMALL), TAG(STRIKE), TAG(STRONG), TAG(TT), TAG(U)
  ------------------
  |  |   40|   169k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(SMALL), TAG(STRIKE), TAG(STRONG), TAG(TT), TAG(U)
  ------------------
  |  |   40|   169k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(SMALL), TAG(STRIKE), TAG(STRONG), TAG(TT), TAG(U)
  ------------------
  |  |   40|   169k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(SMALL), TAG(STRIKE), TAG(STRONG), TAG(TT), TAG(U)
  ------------------
  |  |   40|   169k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3228|   169k|    })
 3229|   169k|  ) {
 3230|  46.0k|    reconstruct_active_formatting_elements(parser);
 3231|  46.0k|    add_formatting_element(parser, insert_element_from_token(parser, token));
 3232|  46.0k|    return;
 3233|  46.0k|  }
 3234|   122k|  if (tag_is(token, kStartTag, GUMBO_TAG_NOBR)) {
  ------------------
  |  Branch (3234:7): [True: 3.01k, False: 119k]
  ------------------
 3235|  3.01k|    reconstruct_active_formatting_elements(parser);
 3236|  3.01k|    if (has_an_element_in_scope(parser, GUMBO_TAG_NOBR)) {
  ------------------
  |  Branch (3236:9): [True: 2.03k, False: 982]
  ------------------
 3237|  2.03k|      parser_add_parse_error(parser, token);
 3238|  2.03k|      adoption_agency_algorithm(parser, token);
 3239|  2.03k|      reconstruct_active_formatting_elements(parser);
 3240|  2.03k|    }
 3241|  3.01k|    insert_element_from_token(parser, token);
 3242|  3.01k|    add_formatting_element(parser, get_current_node(parser));
 3243|  3.01k|    return;
 3244|  3.01k|  }
 3245|   119k|  if (
 3246|   119k|    tag_in(token, kEndTag, &(const TagSet) {
  ------------------
  |  Branch (3246:5): [True: 4.40k, False: 115k]
  ------------------
 3247|   119k|      TAG(A), TAG(B), TAG(BIG), TAG(CODE), TAG(EM), TAG(FONT), TAG(I),
  ------------------
  |  |   40|   119k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(A), TAG(B), TAG(BIG), TAG(CODE), TAG(EM), TAG(FONT), TAG(I),
  ------------------
  |  |   40|   119k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(A), TAG(B), TAG(BIG), TAG(CODE), TAG(EM), TAG(FONT), TAG(I),
  ------------------
  |  |   40|   119k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(A), TAG(B), TAG(BIG), TAG(CODE), TAG(EM), TAG(FONT), TAG(I),
  ------------------
  |  |   40|   119k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(A), TAG(B), TAG(BIG), TAG(CODE), TAG(EM), TAG(FONT), TAG(I),
  ------------------
  |  |   40|   119k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(A), TAG(B), TAG(BIG), TAG(CODE), TAG(EM), TAG(FONT), TAG(I),
  ------------------
  |  |   40|   119k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(A), TAG(B), TAG(BIG), TAG(CODE), TAG(EM), TAG(FONT), TAG(I),
  ------------------
  |  |   40|   119k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3248|   119k|      TAG(NOBR), TAG(S), TAG(SMALL), TAG(STRIKE), TAG(STRONG), TAG(TT),
  ------------------
  |  |   40|   119k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(NOBR), TAG(S), TAG(SMALL), TAG(STRIKE), TAG(STRONG), TAG(TT),
  ------------------
  |  |   40|   119k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(NOBR), TAG(S), TAG(SMALL), TAG(STRIKE), TAG(STRONG), TAG(TT),
  ------------------
  |  |   40|   119k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(NOBR), TAG(S), TAG(SMALL), TAG(STRIKE), TAG(STRONG), TAG(TT),
  ------------------
  |  |   40|   119k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(NOBR), TAG(S), TAG(SMALL), TAG(STRIKE), TAG(STRONG), TAG(TT),
  ------------------
  |  |   40|   119k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(NOBR), TAG(S), TAG(SMALL), TAG(STRIKE), TAG(STRONG), TAG(TT),
  ------------------
  |  |   40|   119k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3249|   119k|      TAG(U)
  ------------------
  |  |   40|   119k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3250|   119k|    })
 3251|   119k|  ) {
 3252|  4.40k|    adoption_agency_algorithm(parser, token);
 3253|  4.40k|    return;
 3254|  4.40k|  }
 3255|   115k|  if (
 3256|   115k|    tag_in(token, kStartTag, &(const TagSet){TAG(APPLET), TAG(MARQUEE), TAG(OBJECT)})
  ------------------
  |  |   40|   115k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  tag_in(token, kStartTag, &(const TagSet){TAG(APPLET), TAG(MARQUEE), TAG(OBJECT)})
  ------------------
  |  |   40|   115k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  tag_in(token, kStartTag, &(const TagSet){TAG(APPLET), TAG(MARQUEE), TAG(OBJECT)})
  ------------------
  |  |   40|   115k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
  |  Branch (3256:5): [True: 7.17k, False: 108k]
  ------------------
 3257|   115k|  ) {
 3258|  7.17k|    reconstruct_active_formatting_elements(parser);
 3259|  7.17k|    insert_element_from_token(parser, token);
 3260|  7.17k|    add_formatting_element(parser, &kActiveFormattingScopeMarker);
 3261|  7.17k|    set_frameset_not_ok(parser);
 3262|  7.17k|    return;
 3263|  7.17k|  }
 3264|   108k|  if (
 3265|   108k|    tag_in(token, kEndTag, &(const TagSet){TAG(APPLET), TAG(MARQUEE), TAG(OBJECT)})
  ------------------
  |  |   40|   108k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  tag_in(token, kEndTag, &(const TagSet){TAG(APPLET), TAG(MARQUEE), TAG(OBJECT)})
  ------------------
  |  |   40|   108k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  tag_in(token, kEndTag, &(const TagSet){TAG(APPLET), TAG(MARQUEE), TAG(OBJECT)})
  ------------------
  |  |   40|   108k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
  |  Branch (3265:5): [True: 540, False: 107k]
  ------------------
 3266|   108k|  ) {
 3267|    540|    GumboTag token_tag = token->v.end_tag.tag;
 3268|    540|    if (!has_an_element_in_scope(parser, token_tag)) {
  ------------------
  |  Branch (3268:9): [True: 255, False: 285]
  ------------------
 3269|    255|      parser_add_parse_error(parser, token);
 3270|    255|      ignore_token(parser);
 3271|    255|      return;
 3272|    255|    }
 3273|    285|    implicitly_close_tags(parser, token, GUMBO_NAMESPACE_HTML, token_tag);
 3274|    285|    clear_active_formatting_elements(parser);
 3275|    285|    return;
 3276|    540|  }
 3277|   107k|  if (tag_is(token, kStartTag, GUMBO_TAG_TABLE)) {
  ------------------
  |  Branch (3277:7): [True: 8.37k, False: 99.4k]
  ------------------
 3278|  8.37k|    if (
 3279|  8.37k|      get_document_node(parser)->v.document.doc_type_quirks_mode
  ------------------
  |  Branch (3279:7): [True: 194, False: 8.18k]
  ------------------
 3280|  8.37k|        != GUMBO_DOCTYPE_QUIRKS
 3281|  8.37k|    ) {
 3282|    194|      maybe_implicitly_close_p_tag(parser, token);
 3283|    194|    }
 3284|  8.37k|    insert_element_from_token(parser, token);
 3285|  8.37k|    set_frameset_not_ok(parser);
 3286|  8.37k|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_TABLE);
 3287|  8.37k|    return;
 3288|  8.37k|  }
 3289|  99.4k|  if (tag_is(token, kEndTag, GUMBO_TAG_BR)) {
  ------------------
  |  Branch (3289:7): [True: 251, False: 99.1k]
  ------------------
 3290|    251|    parser_add_parse_error(parser, token);
 3291|    251|    reconstruct_active_formatting_elements(parser);
 3292|    251|    insert_element_of_tag_type (
 3293|    251|      parser,
 3294|    251|      GUMBO_TAG_BR,
 3295|    251|      GUMBO_INSERTION_CONVERTED_FROM_END_TAG
 3296|    251|    );
 3297|    251|    pop_current_node(parser);
 3298|    251|    acknowledge_self_closing_tag(parser);
 3299|    251|    set_frameset_not_ok(parser);
 3300|    251|    return;
 3301|    251|  }
 3302|  99.1k|  if (
 3303|  99.1k|    tag_in(token, kStartTag, &(const TagSet) {
  ------------------
  |  Branch (3303:5): [True: 1.92k, False: 97.2k]
  ------------------
 3304|  99.1k|      TAG(AREA), TAG(BR), TAG(EMBED), TAG(IMG), TAG(IMAGE), TAG(KEYGEN),
  ------------------
  |  |   40|  99.1k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(AREA), TAG(BR), TAG(EMBED), TAG(IMG), TAG(IMAGE), TAG(KEYGEN),
  ------------------
  |  |   40|  99.1k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(AREA), TAG(BR), TAG(EMBED), TAG(IMG), TAG(IMAGE), TAG(KEYGEN),
  ------------------
  |  |   40|  99.1k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(AREA), TAG(BR), TAG(EMBED), TAG(IMG), TAG(IMAGE), TAG(KEYGEN),
  ------------------
  |  |   40|  99.1k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(AREA), TAG(BR), TAG(EMBED), TAG(IMG), TAG(IMAGE), TAG(KEYGEN),
  ------------------
  |  |   40|  99.1k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(AREA), TAG(BR), TAG(EMBED), TAG(IMG), TAG(IMAGE), TAG(KEYGEN),
  ------------------
  |  |   40|  99.1k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3305|  99.1k|      TAG(WBR)
  ------------------
  |  |   40|  99.1k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3306|  99.1k|    })
 3307|  99.1k|  ) {
 3308|  1.92k|    bool is_image = tag_is(token, kStartTag, GUMBO_TAG_IMAGE);
 3309|  1.92k|    if (is_image) {
  ------------------
  |  Branch (3309:9): [True: 683, False: 1.24k]
  ------------------
 3310|    683|      parser_add_parse_error(parser, token);
 3311|    683|      token->v.start_tag.tag = GUMBO_TAG_IMG;
 3312|    683|    }
 3313|  1.92k|    reconstruct_active_formatting_elements(parser);
 3314|  1.92k|    GumboNode* node = insert_element_from_token(parser, token);
 3315|  1.92k|    if (is_image)
  ------------------
  |  Branch (3315:9): [True: 683, False: 1.24k]
  ------------------
 3316|    683|      node->parse_flags |= GUMBO_INSERTION_FROM_IMAGE;
 3317|  1.92k|    pop_current_node(parser);
 3318|  1.92k|    acknowledge_self_closing_tag(parser);
 3319|  1.92k|    set_frameset_not_ok(parser);
 3320|  1.92k|    return;
 3321|  1.92k|  }
 3322|  97.2k|  if (tag_is(token, kStartTag, GUMBO_TAG_INPUT)) {
  ------------------
  |  Branch (3322:7): [True: 1.22k, False: 96.0k]
  ------------------
 3323|  1.22k|    reconstruct_active_formatting_elements(parser);
 3324|  1.22k|    GumboNode *input = insert_element_from_token(parser, token);
 3325|  1.22k|    pop_current_node(parser);
 3326|  1.22k|    acknowledge_self_closing_tag(parser);
 3327|  1.22k|    if (!attribute_matches(&input->v.element.attributes, "type", "hidden"))
  ------------------
  |  Branch (3327:9): [True: 1.00k, False: 227]
  ------------------
 3328|  1.00k|      set_frameset_not_ok(parser);
 3329|  1.22k|    return;
 3330|  1.22k|  }
 3331|  96.0k|  if (
 3332|  96.0k|    tag_in(token, kStartTag, &(const TagSet){TAG(PARAM), TAG(SOURCE), TAG(TRACK)})
  ------------------
  |  |   40|  96.0k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  tag_in(token, kStartTag, &(const TagSet){TAG(PARAM), TAG(SOURCE), TAG(TRACK)})
  ------------------
  |  |   40|  96.0k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  tag_in(token, kStartTag, &(const TagSet){TAG(PARAM), TAG(SOURCE), TAG(TRACK)})
  ------------------
  |  |   40|  96.0k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
  |  Branch (3332:5): [True: 742, False: 95.3k]
  ------------------
 3333|  96.0k|  ) {
 3334|    742|    insert_element_from_token(parser, token);
 3335|    742|    pop_current_node(parser);
 3336|    742|    acknowledge_self_closing_tag(parser);
 3337|    742|    return;
 3338|    742|  }
 3339|  95.3k|  if (tag_is(token, kStartTag, GUMBO_TAG_HR)) {
  ------------------
  |  Branch (3339:7): [True: 2.23k, False: 93.0k]
  ------------------
 3340|  2.23k|    maybe_implicitly_close_p_tag(parser, token);
 3341|  2.23k|    insert_element_from_token(parser, token);
 3342|  2.23k|    pop_current_node(parser);
 3343|  2.23k|    acknowledge_self_closing_tag(parser);
 3344|  2.23k|    set_frameset_not_ok(parser);
 3345|  2.23k|    return;
 3346|  2.23k|  }
 3347|  93.0k|  if (tag_is(token, kStartTag, GUMBO_TAG_TEXTAREA)) {
  ------------------
  |  Branch (3347:7): [True: 298, False: 92.7k]
  ------------------
 3348|    298|    run_generic_parsing_algorithm(parser, token, GUMBO_LEX_RCDATA);
 3349|    298|    parser->_parser_state->_ignore_next_linefeed = true;
 3350|    298|    set_frameset_not_ok(parser);
 3351|    298|    return;
 3352|    298|  }
 3353|  92.7k|  if (tag_is(token, kStartTag, GUMBO_TAG_XMP)) {
  ------------------
  |  Branch (3353:7): [True: 1.04k, False: 91.7k]
  ------------------
 3354|  1.04k|    maybe_implicitly_close_p_tag(parser, token);
 3355|  1.04k|    reconstruct_active_formatting_elements(parser);
 3356|  1.04k|    set_frameset_not_ok(parser);
 3357|  1.04k|    run_generic_parsing_algorithm(parser, token, GUMBO_LEX_RAWTEXT);
 3358|  1.04k|    return;
 3359|  1.04k|  }
 3360|  91.7k|  if (tag_is(token, kStartTag, GUMBO_TAG_IFRAME)) {
  ------------------
  |  Branch (3360:7): [True: 267, False: 91.4k]
  ------------------
 3361|    267|    set_frameset_not_ok(parser);
 3362|    267|    run_generic_parsing_algorithm(parser, token, GUMBO_LEX_RAWTEXT);
 3363|    267|    return;
 3364|    267|  }
 3365|  91.4k|  if (
 3366|  91.4k|    tag_is(token, kStartTag, GUMBO_TAG_NOEMBED)
  ------------------
  |  Branch (3366:5): [True: 235, False: 91.2k]
  ------------------
 3367|  91.2k|    || (tag_is(token, kStartTag, GUMBO_TAG_NOSCRIPT) && parser->_options->parse_noscript_content_as_text)
  ------------------
  |  Branch (3367:9): [True: 330, False: 90.8k]
  |  Branch (3367:57): [True: 0, False: 330]
  ------------------
 3368|  91.4k|  ) {
 3369|    235|    run_generic_parsing_algorithm(parser, token, GUMBO_LEX_RAWTEXT);
 3370|    235|    return;
 3371|    235|  }
 3372|  91.2k|  if (tag_is(token, kStartTag, GUMBO_TAG_SELECT)) {
  ------------------
  |  Branch (3372:7): [True: 3.93k, False: 87.2k]
  ------------------
 3373|  3.93k|    reconstruct_active_formatting_elements(parser);
 3374|  3.93k|    insert_element_from_token(parser, token);
 3375|  3.93k|    set_frameset_not_ok(parser);
 3376|  3.93k|    GumboInsertionMode state = parser->_parser_state->_insertion_mode;
 3377|  3.93k|    if (
 3378|  3.93k|      state == GUMBO_INSERTION_MODE_IN_TABLE
  ------------------
  |  Branch (3378:7): [True: 363, False: 3.57k]
  ------------------
 3379|  3.57k|      || state == GUMBO_INSERTION_MODE_IN_CAPTION
  ------------------
  |  Branch (3379:10): [True: 198, False: 3.37k]
  ------------------
 3380|  3.37k|      || state == GUMBO_INSERTION_MODE_IN_TABLE_BODY
  ------------------
  |  Branch (3380:10): [True: 628, False: 2.75k]
  ------------------
 3381|  2.75k|      || state == GUMBO_INSERTION_MODE_IN_ROW
  ------------------
  |  Branch (3381:10): [True: 588, False: 2.16k]
  ------------------
 3382|  2.16k|      || state == GUMBO_INSERTION_MODE_IN_CELL
  ------------------
  |  Branch (3382:10): [True: 328, False: 1.83k]
  ------------------
 3383|  3.93k|    ) {
 3384|  2.10k|      set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_SELECT_IN_TABLE);
 3385|  2.10k|    } else {
 3386|  1.83k|      set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_SELECT);
 3387|  1.83k|    }
 3388|  3.93k|    return;
 3389|  3.93k|  }
 3390|  87.2k|  if (
 3391|  87.2k|    tag_in(token, kStartTag, &(const TagSet){TAG(OPTGROUP), TAG(OPTION)})
  ------------------
  |  |   40|  87.2k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  tag_in(token, kStartTag, &(const TagSet){TAG(OPTGROUP), TAG(OPTION)})
  ------------------
  |  |   40|  87.2k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
  |  Branch (3391:5): [True: 795, False: 86.4k]
  ------------------
 3392|  87.2k|  ) {
 3393|    795|    if (node_html_tag_is(get_current_node(parser), GUMBO_TAG_OPTION)) {
  ------------------
  |  Branch (3393:9): [True: 350, False: 445]
  ------------------
 3394|    350|      pop_current_node(parser);
 3395|    350|    }
 3396|    795|    reconstruct_active_formatting_elements(parser);
 3397|    795|    insert_element_from_token(parser, token);
 3398|    795|    return;
 3399|    795|  }
 3400|  86.4k|  if (tag_in(token, kStartTag, &(const TagSet){TAG(RB), TAG(RTC)})) {
  ------------------
  |  |   40|  86.4k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                if (tag_in(token, kStartTag, &(const TagSet){TAG(RB), TAG(RTC)})) {
  ------------------
  |  |   40|  86.4k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
  |  Branch (3400:7): [True: 1.60k, False: 84.8k]
  ------------------
 3401|  1.60k|    if (has_an_element_in_scope(parser, GUMBO_TAG_RUBY)) {
  ------------------
  |  Branch (3401:9): [True: 478, False: 1.12k]
  ------------------
 3402|    478|      generate_implied_end_tags(parser, GUMBO_TAG_LAST, NULL);
 3403|    478|      if (!node_html_tag_is(get_current_node(parser), GUMBO_TAG_RUBY))
  ------------------
  |  Branch (3403:11): [True: 276, False: 202]
  ------------------
 3404|    276|        parser_add_parse_error(parser, token);
 3405|    478|    }
 3406|  1.60k|    insert_element_from_token(parser, token);
 3407|  1.60k|    return;
 3408|  1.60k|  }
 3409|  84.8k|  if (tag_in(token, kStartTag, &(const TagSet){TAG(RP), TAG(RT)})) {
  ------------------
  |  |   40|  84.8k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                if (tag_in(token, kStartTag, &(const TagSet){TAG(RP), TAG(RT)})) {
  ------------------
  |  |   40|  84.8k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
  |  Branch (3409:7): [True: 2.19k, False: 82.6k]
  ------------------
 3410|  2.19k|    if (has_an_element_in_scope(parser, GUMBO_TAG_RUBY)) {
  ------------------
  |  Branch (3410:9): [True: 997, False: 1.19k]
  ------------------
 3411|    997|      generate_implied_end_tags(parser, GUMBO_TAG_RTC, NULL);
 3412|    997|      GumboNode* current = get_current_node(parser);
 3413|    997|      if (!node_html_tag_is(current, GUMBO_TAG_RUBY) &&
  ------------------
  |  Branch (3413:11): [True: 713, False: 284]
  ------------------
 3414|    713|          !node_html_tag_is(current, GUMBO_TAG_RTC)) {
  ------------------
  |  Branch (3414:11): [True: 509, False: 204]
  ------------------
 3415|    509|        parser_add_parse_error(parser, token);
 3416|    509|      }
 3417|    997|    }
 3418|  2.19k|    insert_element_from_token(parser, token);
 3419|  2.19k|    return;
 3420|  2.19k|  }
 3421|  82.6k|  if (tag_is(token, kStartTag, GUMBO_TAG_MATH)) {
  ------------------
  |  Branch (3421:7): [True: 1.41k, False: 81.2k]
  ------------------
 3422|  1.41k|    reconstruct_active_formatting_elements(parser);
 3423|  1.41k|    adjust_mathml_attributes(token);
 3424|  1.41k|    adjust_foreign_attributes(token);
 3425|  1.41k|    insert_foreign_element(parser, token, GUMBO_NAMESPACE_MATHML);
 3426|  1.41k|    if (token->v.start_tag.is_self_closing) {
  ------------------
  |  Branch (3426:9): [True: 250, False: 1.16k]
  ------------------
 3427|    250|      pop_current_node(parser);
 3428|    250|      acknowledge_self_closing_tag(parser);
 3429|    250|    }
 3430|  1.41k|    return;
 3431|  1.41k|  }
 3432|  81.2k|  if (tag_is(token, kStartTag, GUMBO_TAG_SVG)) {
  ------------------
  |  Branch (3432:7): [True: 2.76k, False: 78.5k]
  ------------------
 3433|  2.76k|    reconstruct_active_formatting_elements(parser);
 3434|  2.76k|    adjust_svg_attributes(token);
 3435|  2.76k|    adjust_foreign_attributes(token);
 3436|  2.76k|    insert_foreign_element(parser, token, GUMBO_NAMESPACE_SVG);
 3437|  2.76k|    if (token->v.start_tag.is_self_closing) {
  ------------------
  |  Branch (3437:9): [True: 508, False: 2.25k]
  ------------------
 3438|    508|      pop_current_node(parser);
 3439|    508|      acknowledge_self_closing_tag(parser);
 3440|    508|    }
 3441|  2.76k|    return;
 3442|  2.76k|  }
 3443|  78.5k|  if (
 3444|  78.5k|    tag_in(token, kStartTag, &(const TagSet) {
  ------------------
  |  Branch (3444:5): [True: 4.09k, False: 74.4k]
  ------------------
 3445|  78.5k|      TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(FRAME), TAG(HEAD),
  ------------------
  |  |   40|  78.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(FRAME), TAG(HEAD),
  ------------------
  |  |   40|  78.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(FRAME), TAG(HEAD),
  ------------------
  |  |   40|  78.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(FRAME), TAG(HEAD),
  ------------------
  |  |   40|  78.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(FRAME), TAG(HEAD),
  ------------------
  |  |   40|  78.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3446|  78.5k|      TAG(TBODY), TAG(TD), TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  78.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TBODY), TAG(TD), TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  78.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TBODY), TAG(TD), TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  78.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TBODY), TAG(TD), TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  78.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TBODY), TAG(TD), TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  78.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TBODY), TAG(TD), TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  78.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3447|  78.5k|    })
 3448|  78.5k|  ) {
 3449|  4.09k|    parser_add_parse_error(parser, token);
 3450|  4.09k|    ignore_token(parser);
 3451|  4.09k|    return;
 3452|  4.09k|  }
 3453|  74.4k|  if (token->type == GUMBO_TOKEN_START_TAG) {
  ------------------
  |  Branch (3453:7): [True: 64.0k, False: 10.3k]
  ------------------
 3454|  64.0k|    reconstruct_active_formatting_elements(parser);
 3455|  64.0k|    insert_element_from_token(parser, token);
 3456|  64.0k|    return;
 3457|  64.0k|  }
 3458|  10.3k|  in_body_any_other_end_tag(parser, token);
 3459|  10.3k|}
parser.c:reconstruct_active_formatting_elements:
 1467|  6.29M|static void reconstruct_active_formatting_elements(GumboParser* parser) {
 1468|  6.29M|  GumboVector* elements = &parser->_parser_state->_active_formatting_elements;
 1469|       |  // Step 1
 1470|  6.29M|  if (elements->length == 0) {
  ------------------
  |  Branch (1470:7): [True: 4.58M, False: 1.70M]
  ------------------
 1471|  4.58M|    return;
 1472|  4.58M|  }
 1473|       |
 1474|       |  // Step 2 & 3
 1475|  1.70M|  unsigned int i = elements->length - 1;
 1476|  1.70M|  GumboNode* element = elements->data[i];
 1477|  1.70M|  if (
 1478|  1.70M|    element == &kActiveFormattingScopeMarker
  ------------------
  |  Branch (1478:5): [True: 373k, False: 1.33M]
  ------------------
 1479|  1.33M|    || is_open_element(parser, element)
  ------------------
  |  Branch (1479:8): [True: 1.32M, False: 5.95k]
  ------------------
 1480|  1.70M|  ) {
 1481|  1.70M|    return;
 1482|  1.70M|  }
 1483|       |
 1484|       |  // Step 6
 1485|  20.3k|  do {
 1486|  20.3k|    if (i == 0) {
  ------------------
  |  Branch (1486:9): [True: 2.58k, False: 17.7k]
  ------------------
 1487|       |      // Step 4
 1488|  2.58k|      i = -1;  // Incremented to 0 below.
 1489|  2.58k|      break;
 1490|  2.58k|    }
 1491|       |    // Step 5
 1492|  17.7k|    element = elements->data[--i];
 1493|  17.7k|  } while (
 1494|  17.7k|    element != &kActiveFormattingScopeMarker
  ------------------
  |  Branch (1494:5): [True: 16.9k, False: 792]
  ------------------
 1495|  16.9k|    && !is_open_element(parser, element)
  ------------------
  |  Branch (1495:8): [True: 14.3k, False: 2.57k]
  ------------------
 1496|  5.95k|  );
 1497|       |
 1498|  5.95k|  ++i;
 1499|  5.95k|  gumbo_debug (
 1500|  5.95k|    "Reconstructing elements from %u on %s parent.\n",
 1501|  5.95k|    i,
 1502|  5.95k|    gumbo_normalized_tagname(get_current_node(parser)->v.element.tag)
 1503|  5.95k|  );
 1504|  26.2k|  for (; i < elements->length; ++i) {
  ------------------
  |  Branch (1504:10): [True: 20.3k, False: 5.95k]
  ------------------
 1505|       |    // Step 7 & 8.
 1506|  20.3k|    assert(elements->length > 0);
  ------------------
  |  Branch (1506:5): [True: 0, False: 20.3k]
  |  Branch (1506:5): [True: 20.3k, False: 0]
  ------------------
 1507|  20.3k|    assert(i < elements->length);
  ------------------
  |  Branch (1507:5): [True: 0, False: 20.3k]
  |  Branch (1507:5): [True: 20.3k, False: 0]
  ------------------
 1508|  20.3k|    element = elements->data[i];
 1509|  20.3k|    assert(element != &kActiveFormattingScopeMarker);
  ------------------
  |  Branch (1509:5): [True: 0, False: 20.3k]
  |  Branch (1509:5): [True: 20.3k, False: 0]
  ------------------
 1510|  20.3k|    GumboNode* clone = clone_node (
 1511|  20.3k|      element,
 1512|  20.3k|      GUMBO_INSERTION_RECONSTRUCTED_FORMATTING_ELEMENT
 1513|  20.3k|    );
 1514|       |    // Step 9.
 1515|  20.3k|    InsertionLocation location =
 1516|  20.3k|        get_appropriate_insertion_location(parser, NULL);
 1517|  20.3k|    insert_node(clone, location);
 1518|  20.3k|    gumbo_vector_add (
 1519|  20.3k|      (void*) clone,
 1520|  20.3k|      &parser->_parser_state->_open_elements
 1521|  20.3k|    );
 1522|       |
 1523|       |    // Step 10.
 1524|  20.3k|    elements->data[i] = clone;
 1525|  20.3k|    gumbo_debug (
 1526|  20.3k|      "Reconstructed %s element at %u.\n",
 1527|  20.3k|      gumbo_normalized_tagname(clone->v.element.tag),
 1528|  20.3k|      i
 1529|  20.3k|    );
 1530|  20.3k|  }
 1531|  5.95k|}
parser.c:is_open_element:
 1418|  1.35M|static bool is_open_element(const GumboParser* parser, const GumboNode* node) {
 1419|  1.35M|  const GumboVector* open_elements = &parser->_parser_state->_open_elements;
 1420|  40.1M|  for (unsigned int i = 0; i < open_elements->length; ++i) {
  ------------------
  |  Branch (1420:28): [True: 40.1M, False: 20.3k]
  ------------------
 1421|  40.1M|    if (open_elements->data[i] == node) {
  ------------------
  |  Branch (1421:9): [True: 1.33M, False: 38.7M]
  ------------------
 1422|  1.33M|      return true;
 1423|  1.33M|    }
 1424|  40.1M|  }
 1425|  20.3k|  return false;
 1426|  1.35M|}
parser.c:clone_node:
 1436|  30.0k|) {
 1437|  30.0k|  assert(node->type == GUMBO_NODE_ELEMENT || node->type == GUMBO_NODE_TEMPLATE);
  ------------------
  |  Branch (1437:3): [True: 30.0k, False: 0]
  |  Branch (1437:3): [True: 0, False: 0]
  |  Branch (1437:3): [True: 30.0k, False: 0]
  |  Branch (1437:3): [True: 0, False: 0]
  ------------------
 1438|  30.0k|  assert(node->v.element.tag != GUMBO_TAG_UNKNOWN);
  ------------------
  |  Branch (1438:3): [True: 0, False: 30.0k]
  |  Branch (1438:3): [True: 30.0k, False: 0]
  ------------------
 1439|  30.0k|  GumboNode* new_node = gumbo_alloc(sizeof(GumboNode));
 1440|  30.0k|  *new_node = *node;
 1441|  30.0k|  new_node->parent = NULL;
 1442|  30.0k|  new_node->index_within_parent = -1;
 1443|       |  // Clear the GUMBO_INSERTION_IMPLICIT_END_TAG flag, as the cloned node may
 1444|       |  // have a separate end tag.
 1445|  30.0k|  new_node->parse_flags &= ~GUMBO_INSERTION_IMPLICIT_END_TAG;
 1446|  30.0k|  new_node->parse_flags |= reason | GUMBO_INSERTION_BY_PARSER;
 1447|  30.0k|  GumboElement* element = &new_node->v.element;
 1448|  30.0k|  gumbo_vector_init(1, &element->children);
 1449|       |
 1450|  30.0k|  const GumboVector* old_attributes = &node->v.element.attributes;
 1451|  30.0k|  gumbo_vector_init(old_attributes->length, &element->attributes);
 1452|  35.2k|  for (unsigned int i = 0; i < old_attributes->length; ++i) {
  ------------------
  |  Branch (1452:28): [True: 5.19k, False: 30.0k]
  ------------------
 1453|  5.19k|    const GumboAttribute* old_attr = old_attributes->data[i];
 1454|  5.19k|    GumboAttribute* attr = gumbo_alloc(sizeof(GumboAttribute));
 1455|  5.19k|    *attr = *old_attr;
 1456|  5.19k|    attr->name = gumbo_strdup(old_attr->name);
 1457|  5.19k|    attr->value = gumbo_strdup(old_attr->value);
 1458|  5.19k|    gumbo_vector_add(attr, &element->attributes);
 1459|  5.19k|  }
 1460|  30.0k|  return new_node;
 1461|  30.0k|}
parser.c:merge_attributes:
 1980|  5.63k|) {
 1981|  5.63k|  assert(token->type == GUMBO_TOKEN_START_TAG);
  ------------------
  |  Branch (1981:3): [True: 0, False: 5.63k]
  |  Branch (1981:3): [True: 5.63k, False: 0]
  ------------------
 1982|  5.63k|  assert(node->type == GUMBO_NODE_ELEMENT);
  ------------------
  |  Branch (1982:3): [True: 0, False: 5.63k]
  |  Branch (1982:3): [True: 5.63k, False: 0]
  ------------------
 1983|  5.63k|  const GumboVector* token_attr = &token->v.start_tag.attributes;
 1984|  5.63k|  GumboVector* node_attr = &node->v.element.attributes;
 1985|       |
 1986|  21.7k|  for (unsigned int i = 0; i < token_attr->length; ++i) {
  ------------------
  |  Branch (1986:28): [True: 16.1k, False: 5.63k]
  ------------------
 1987|  16.1k|    GumboAttribute* attr = token_attr->data[i];
 1988|  16.1k|    if (!gumbo_get_attribute(node_attr, attr->name)) {
  ------------------
  |  Branch (1988:9): [True: 3.38k, False: 12.7k]
  ------------------
 1989|       |      // Ownership of the attribute is transferred by this gumbo_vector_add,
 1990|       |      // so it has to be nulled out of the original token so it doesn't get
 1991|       |      // double-deleted.
 1992|  3.38k|      gumbo_vector_add(attr, node_attr);
 1993|  3.38k|      token_attr->data[i] = NULL;
 1994|  3.38k|    }
 1995|  16.1k|  }
 1996|       |  // When attributes are merged, it means the token has been ignored and merged
 1997|       |  // with another token, so we need to free its memory. The attributes that are
 1998|       |  // transferred need to be nulled-out in the vector above so that they aren't
 1999|       |  // double-deleted.
 2000|  5.63k|  gumbo_token_destroy(token);
 2001|       |
 2002|  5.63k|#ifndef NDEBUG
 2003|       |  // Mark this sentinel so the assertion in the main loop knows it's been
 2004|       |  // destroyed.
 2005|       |  token->v.start_tag.attributes = kGumboEmptyVector;
  ------------------
  |  |  123|  5.63k|#define kGumboEmptyVector (const GumboVector)GUMBO_EMPTY_VECTOR_INIT
  |  |  ------------------
  |  |  |  |  121|  5.63k|# define GUMBO_EMPTY_VECTOR_INIT { .data = NULL, .length = 0, .capacity = 0 }
  |  |  ------------------
  ------------------
 2006|  5.63k|#endif
 2007|  5.63k|}
parser.c:remove_from_parent:
 2100|  9.78k|static void remove_from_parent(GumboNode* node) {
 2101|  9.78k|  if (!node->parent) {
  ------------------
  |  Branch (2101:7): [True: 3.10k, False: 6.68k]
  ------------------
 2102|       |    // The node may not have a parent if, for example, it is a newly-cloned copy
 2103|       |    // of an active formatting element. DOM manipulations continue with the
 2104|       |    // orphaned fragment of the DOM tree until it's appended/foster-parented to
 2105|       |    // the common ancestor at the end of the adoption agency algorithm.
 2106|  3.10k|    return;
 2107|  3.10k|  }
 2108|  9.78k|  assert(node->parent->type == GUMBO_NODE_ELEMENT);
  ------------------
  |  Branch (2108:3): [True: 0, False: 6.68k]
  |  Branch (2108:3): [True: 6.68k, False: 0]
  ------------------
 2109|  6.68k|  GumboVector* children = &node->parent->v.element.children;
 2110|  6.68k|  int index = gumbo_vector_index_of(children, node);
 2111|  6.68k|  assert(index != -1);
  ------------------
  |  Branch (2111:3): [True: 0, False: 6.68k]
  |  Branch (2111:3): [True: 6.68k, False: 0]
  ------------------
 2112|       |
 2113|  6.68k|  gumbo_vector_remove_at(index, children);
 2114|  6.68k|  node->parent = NULL;
 2115|  6.68k|  node->index_within_parent = -1;
 2116|  7.24k|  for (unsigned int i = index; i < children->length; ++i) {
  ------------------
  |  Branch (2116:32): [True: 556, False: 6.68k]
  ------------------
 2117|    556|    GumboNode* child = children->data[i];
 2118|    556|    child->index_within_parent = i;
 2119|    556|  }
 2120|  6.68k|}
parser.c:stack_contains_nonclosable_element:
 1787|  28.9k|) {
 1788|  28.9k|  static const TagSet tags = {
 1789|  28.9k|    TAG(DD), TAG(DT), TAG(LI), TAG(OPTGROUP), TAG(OPTION), TAG(P), TAG(RB),
  ------------------
  |  |   40|  28.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(DD), TAG(DT), TAG(LI), TAG(OPTGROUP), TAG(OPTION), TAG(P), TAG(RB),
  ------------------
  |  |   40|  28.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(DD), TAG(DT), TAG(LI), TAG(OPTGROUP), TAG(OPTION), TAG(P), TAG(RB),
  ------------------
  |  |   40|  28.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(DD), TAG(DT), TAG(LI), TAG(OPTGROUP), TAG(OPTION), TAG(P), TAG(RB),
  ------------------
  |  |   40|  28.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(DD), TAG(DT), TAG(LI), TAG(OPTGROUP), TAG(OPTION), TAG(P), TAG(RB),
  ------------------
  |  |   40|  28.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(DD), TAG(DT), TAG(LI), TAG(OPTGROUP), TAG(OPTION), TAG(P), TAG(RB),
  ------------------
  |  |   40|  28.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(DD), TAG(DT), TAG(LI), TAG(OPTGROUP), TAG(OPTION), TAG(P), TAG(RB),
  ------------------
  |  |   40|  28.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1790|  28.9k|    TAG(RP), TAG(RT), TAG(RTC), TAG(TBODY), TAG(TD), TAG(TFOOT), TAG(TH),
  ------------------
  |  |   40|  28.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(RP), TAG(RT), TAG(RTC), TAG(TBODY), TAG(TD), TAG(TFOOT), TAG(TH),
  ------------------
  |  |   40|  28.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(RP), TAG(RT), TAG(RTC), TAG(TBODY), TAG(TD), TAG(TFOOT), TAG(TH),
  ------------------
  |  |   40|  28.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(RP), TAG(RT), TAG(RTC), TAG(TBODY), TAG(TD), TAG(TFOOT), TAG(TH),
  ------------------
  |  |   40|  28.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(RP), TAG(RT), TAG(RTC), TAG(TBODY), TAG(TD), TAG(TFOOT), TAG(TH),
  ------------------
  |  |   40|  28.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(RP), TAG(RT), TAG(RTC), TAG(TBODY), TAG(TD), TAG(TFOOT), TAG(TH),
  ------------------
  |  |   40|  28.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(RP), TAG(RT), TAG(RTC), TAG(TBODY), TAG(TD), TAG(TFOOT), TAG(TH),
  ------------------
  |  |   40|  28.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1791|  28.9k|    TAG(THEAD), TAG(TR), TAG(BODY), TAG(HTML),
  ------------------
  |  |   40|  28.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(THEAD), TAG(TR), TAG(BODY), TAG(HTML),
  ------------------
  |  |   40|  28.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(THEAD), TAG(TR), TAG(BODY), TAG(HTML),
  ------------------
  |  |   40|  28.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(THEAD), TAG(TR), TAG(BODY), TAG(HTML),
  ------------------
  |  |   40|  28.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1792|  28.9k|  };
 1793|  28.9k|  GumboVector* open_elements = &parser->_parser_state->_open_elements;
 1794|  87.9k|  for (size_t i = 0; i < open_elements->length; ++i) {
  ------------------
  |  Branch (1794:22): [True: 68.3k, False: 19.5k]
  ------------------
 1795|  68.3k|    if (!node_tag_in_set(open_elements->data[i], &tags))
  ------------------
  |  Branch (1795:9): [True: 9.43k, False: 58.9k]
  ------------------
 1796|  9.43k|      return true;
 1797|  68.3k|  }
 1798|  19.5k|  return false;
 1799|  28.9k|}
parser.c:has_an_element_in_scope:
 1681|  39.5k|static bool has_an_element_in_scope(const GumboParser* parser, GumboTag tag) {
 1682|  39.5k|  static const TagSet tags = {DEFAULT_SCOPE_TAGS};
  ------------------
  |  | 1649|  39.5k|  TAG(APPLET), \
  |  |  ------------------
  |  |  |  |   40|  39.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1650|  39.5k|  TAG(CAPTION), \
  |  |  ------------------
  |  |  |  |   40|  39.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1651|  39.5k|  TAG(HTML), \
  |  |  ------------------
  |  |  |  |   40|  39.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1652|  39.5k|  TAG(TABLE), \
  |  |  ------------------
  |  |  |  |   40|  39.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1653|  39.5k|  TAG(TD), \
  |  |  ------------------
  |  |  |  |   40|  39.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1654|  39.5k|  TAG(TH), \
  |  |  ------------------
  |  |  |  |   40|  39.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1655|  39.5k|  TAG(MARQUEE), \
  |  |  ------------------
  |  |  |  |   40|  39.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1656|  39.5k|  TAG(OBJECT), \
  |  |  ------------------
  |  |  |  |   40|  39.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1657|  39.5k|  TAG(TEMPLATE), \
  |  |  ------------------
  |  |  |  |   40|  39.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1658|  39.5k|  TAG_MATHML(MI), \
  |  |  ------------------
  |  |  |  |   42|  39.5k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1659|  39.5k|  TAG_MATHML(MO), \
  |  |  ------------------
  |  |  |  |   42|  39.5k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1660|  39.5k|  TAG_MATHML(MN), \
  |  |  ------------------
  |  |  |  |   42|  39.5k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1661|  39.5k|  TAG_MATHML(MS), \
  |  |  ------------------
  |  |  |  |   42|  39.5k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1662|  39.5k|  TAG_MATHML(MTEXT), \
  |  |  ------------------
  |  |  |  |   42|  39.5k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1663|  39.5k|  TAG_MATHML(ANNOTATION_XML), \
  |  |  ------------------
  |  |  |  |   42|  39.5k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1664|  39.5k|  TAG_SVG(FOREIGNOBJECT), \
  |  |  ------------------
  |  |  |  |   41|  39.5k|#define TAG_SVG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_SVG)
  |  |  ------------------
  |  | 1665|  39.5k|  TAG_SVG(DESC), \
  |  |  ------------------
  |  |  |  |   41|  39.5k|#define TAG_SVG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_SVG)
  |  |  ------------------
  |  | 1666|  39.5k|  TAG_SVG(TITLE)
  |  |  ------------------
  |  |  |  |   41|  39.5k|#define TAG_SVG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_SVG)
  |  |  ------------------
  ------------------
 1683|       |  return has_an_element_in_specific_scope(parser, 1, &tag, false, &tags);
 1684|  39.5k|}
parser.c:maybe_implicitly_close_p_tag:
 1932|  31.8k|) {
 1933|  31.8k|  if (has_an_element_in_button_scope(parser, GUMBO_TAG_P)) {
  ------------------
  |  Branch (1933:7): [True: 7.09k, False: 24.7k]
  ------------------
 1934|  7.09k|    implicitly_close_tags (
 1935|  7.09k|      parser,
 1936|  7.09k|      token,
 1937|  7.09k|      GUMBO_NAMESPACE_HTML,
 1938|  7.09k|      GUMBO_TAG_P
 1939|  7.09k|    );
 1940|  7.09k|  }
 1941|  31.8k|}
parser.c:maybe_implicitly_close_list_tag:
 1949|  5.16k|) {
 1950|  5.16k|  GumboParserState* state = parser->_parser_state;
 1951|  5.16k|  set_frameset_not_ok(parser);
 1952|  21.1k|  for (int i = state->_open_elements.length; --i >= 0;) {
  ------------------
  |  Branch (1952:46): [True: 21.1k, False: 0]
  ------------------
 1953|  21.1k|    const GumboNode* node = state->_open_elements.data[i];
 1954|  21.1k|    bool is_list_tag = is_li
  ------------------
  |  Branch (1954:24): [True: 12.8k, False: 8.29k]
  ------------------
 1955|  21.1k|      ? node_html_tag_is(node, GUMBO_TAG_LI)
 1956|  21.1k|      : node_tag_in_set(node, &dd_dt_tags)
 1957|  21.1k|    ;
 1958|  21.1k|    if (is_list_tag) {
  ------------------
  |  Branch (1958:9): [True: 3.01k, False: 18.1k]
  ------------------
 1959|  3.01k|      implicitly_close_tags (
 1960|  3.01k|        parser,
 1961|  3.01k|        token,
 1962|  3.01k|        node->v.element.tag_namespace,
 1963|  3.01k|        node->v.element.tag
 1964|  3.01k|      );
 1965|  3.01k|      return;
 1966|  3.01k|    }
 1967|       |
 1968|  18.1k|    if (
 1969|  18.1k|      is_special_node(node)
  ------------------
  |  Branch (1969:7): [True: 2.67k, False: 15.4k]
  ------------------
 1970|  2.67k|      && !node_tag_in_set(node, &(const TagSet){TAG(ADDRESS), TAG(DIV), TAG(P)})
  ------------------
  |  |   40|  2.67k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    && !node_tag_in_set(node, &(const TagSet){TAG(ADDRESS), TAG(DIV), TAG(P)})
  ------------------
  |  |   40|  2.67k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    && !node_tag_in_set(node, &(const TagSet){TAG(ADDRESS), TAG(DIV), TAG(P)})
  ------------------
  |  |   40|  2.67k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
  |  Branch (1970:10): [True: 2.14k, False: 530]
  ------------------
 1971|  18.1k|    ) {
 1972|  2.14k|      return;
 1973|  2.14k|    }
 1974|  18.1k|  }
 1975|  5.16k|}
parser.c:is_special_node:
 1865|   181k|static bool is_special_node(const GumboNode* node) {
 1866|   181k|  assert(node->type == GUMBO_NODE_ELEMENT || node->type == GUMBO_NODE_TEMPLATE);
  ------------------
  |  Branch (1866:3): [True: 181k, False: 0]
  |  Branch (1866:3): [True: 0, False: 0]
  |  Branch (1866:3): [True: 179k, False: 2.01k]
  |  Branch (1866:3): [True: 2.01k, False: 0]
  ------------------
 1867|   181k|  return node_tag_in_set(node, &(const TagSet) {
 1868|   181k|      TAG(ADDRESS), TAG(APPLET), TAG(AREA), TAG(ARTICLE),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(ADDRESS), TAG(APPLET), TAG(AREA), TAG(ARTICLE),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(ADDRESS), TAG(APPLET), TAG(AREA), TAG(ARTICLE),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(ADDRESS), TAG(APPLET), TAG(AREA), TAG(ARTICLE),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1869|   181k|      TAG(ASIDE), TAG(BASE), TAG(BASEFONT), TAG(BGSOUND), TAG(BLOCKQUOTE),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(ASIDE), TAG(BASE), TAG(BASEFONT), TAG(BGSOUND), TAG(BLOCKQUOTE),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(ASIDE), TAG(BASE), TAG(BASEFONT), TAG(BGSOUND), TAG(BLOCKQUOTE),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(ASIDE), TAG(BASE), TAG(BASEFONT), TAG(BGSOUND), TAG(BLOCKQUOTE),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(ASIDE), TAG(BASE), TAG(BASEFONT), TAG(BGSOUND), TAG(BLOCKQUOTE),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1870|   181k|      TAG(BODY), TAG(BR), TAG(BUTTON), TAG(CAPTION), TAG(CENTER), TAG(COL),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(BR), TAG(BUTTON), TAG(CAPTION), TAG(CENTER), TAG(COL),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(BR), TAG(BUTTON), TAG(CAPTION), TAG(CENTER), TAG(COL),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(BR), TAG(BUTTON), TAG(CAPTION), TAG(CENTER), TAG(COL),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(BR), TAG(BUTTON), TAG(CAPTION), TAG(CENTER), TAG(COL),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(BR), TAG(BUTTON), TAG(CAPTION), TAG(CENTER), TAG(COL),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1871|   181k|      TAG(COLGROUP), TAG(DD), TAG(DETAILS), TAG(DIR),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(COLGROUP), TAG(DD), TAG(DETAILS), TAG(DIR),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(COLGROUP), TAG(DD), TAG(DETAILS), TAG(DIR),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(COLGROUP), TAG(DD), TAG(DETAILS), TAG(DIR),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1872|   181k|      TAG(DIV), TAG(DL), TAG(DT), TAG(EMBED), TAG(FIELDSET),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(DIV), TAG(DL), TAG(DT), TAG(EMBED), TAG(FIELDSET),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(DIV), TAG(DL), TAG(DT), TAG(EMBED), TAG(FIELDSET),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(DIV), TAG(DL), TAG(DT), TAG(EMBED), TAG(FIELDSET),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(DIV), TAG(DL), TAG(DT), TAG(EMBED), TAG(FIELDSET),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1873|   181k|      TAG(FIGCAPTION), TAG(FIGURE), TAG(FOOTER), TAG(FORM), TAG(FRAME),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(FIGCAPTION), TAG(FIGURE), TAG(FOOTER), TAG(FORM), TAG(FRAME),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(FIGCAPTION), TAG(FIGURE), TAG(FOOTER), TAG(FORM), TAG(FRAME),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(FIGCAPTION), TAG(FIGURE), TAG(FOOTER), TAG(FORM), TAG(FRAME),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(FIGCAPTION), TAG(FIGURE), TAG(FOOTER), TAG(FORM), TAG(FRAME),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1874|   181k|      TAG(FRAMESET), TAG(H1), TAG(H2), TAG(H3), TAG(H4), TAG(H5), TAG(H6),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(FRAMESET), TAG(H1), TAG(H2), TAG(H3), TAG(H4), TAG(H5), TAG(H6),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(FRAMESET), TAG(H1), TAG(H2), TAG(H3), TAG(H4), TAG(H5), TAG(H6),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(FRAMESET), TAG(H1), TAG(H2), TAG(H3), TAG(H4), TAG(H5), TAG(H6),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(FRAMESET), TAG(H1), TAG(H2), TAG(H3), TAG(H4), TAG(H5), TAG(H6),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(FRAMESET), TAG(H1), TAG(H2), TAG(H3), TAG(H4), TAG(H5), TAG(H6),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(FRAMESET), TAG(H1), TAG(H2), TAG(H3), TAG(H4), TAG(H5), TAG(H6),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1875|   181k|      TAG(HEAD), TAG(HEADER), TAG(HGROUP), TAG(HR), TAG(HTML), TAG(IFRAME),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(HEAD), TAG(HEADER), TAG(HGROUP), TAG(HR), TAG(HTML), TAG(IFRAME),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(HEAD), TAG(HEADER), TAG(HGROUP), TAG(HR), TAG(HTML), TAG(IFRAME),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(HEAD), TAG(HEADER), TAG(HGROUP), TAG(HR), TAG(HTML), TAG(IFRAME),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(HEAD), TAG(HEADER), TAG(HGROUP), TAG(HR), TAG(HTML), TAG(IFRAME),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(HEAD), TAG(HEADER), TAG(HGROUP), TAG(HR), TAG(HTML), TAG(IFRAME),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1876|   181k|      TAG(IMG), TAG(INPUT), TAG(LI), TAG(LINK), TAG(LISTING),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(IMG), TAG(INPUT), TAG(LI), TAG(LINK), TAG(LISTING),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(IMG), TAG(INPUT), TAG(LI), TAG(LINK), TAG(LISTING),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(IMG), TAG(INPUT), TAG(LI), TAG(LINK), TAG(LISTING),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(IMG), TAG(INPUT), TAG(LI), TAG(LINK), TAG(LISTING),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1877|   181k|      TAG(MARQUEE), TAG(MENU), TAG(META), TAG(NAV), TAG(NOEMBED),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(MARQUEE), TAG(MENU), TAG(META), TAG(NAV), TAG(NOEMBED),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(MARQUEE), TAG(MENU), TAG(META), TAG(NAV), TAG(NOEMBED),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(MARQUEE), TAG(MENU), TAG(META), TAG(NAV), TAG(NOEMBED),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(MARQUEE), TAG(MENU), TAG(META), TAG(NAV), TAG(NOEMBED),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1878|   181k|      TAG(NOFRAMES), TAG(NOSCRIPT), TAG(OBJECT), TAG(OL), TAG(P),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(NOFRAMES), TAG(NOSCRIPT), TAG(OBJECT), TAG(OL), TAG(P),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(NOFRAMES), TAG(NOSCRIPT), TAG(OBJECT), TAG(OL), TAG(P),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(NOFRAMES), TAG(NOSCRIPT), TAG(OBJECT), TAG(OL), TAG(P),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(NOFRAMES), TAG(NOSCRIPT), TAG(OBJECT), TAG(OL), TAG(P),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1879|   181k|      TAG(PARAM), TAG(PLAINTEXT), TAG(PRE), TAG(SCRIPT), TAG(SECTION),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(PARAM), TAG(PLAINTEXT), TAG(PRE), TAG(SCRIPT), TAG(SECTION),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(PARAM), TAG(PLAINTEXT), TAG(PRE), TAG(SCRIPT), TAG(SECTION),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(PARAM), TAG(PLAINTEXT), TAG(PRE), TAG(SCRIPT), TAG(SECTION),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(PARAM), TAG(PLAINTEXT), TAG(PRE), TAG(SCRIPT), TAG(SECTION),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1880|   181k|      TAG(SELECT), TAG(STYLE), TAG(SUMMARY), TAG(TABLE), TAG(TBODY),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(SELECT), TAG(STYLE), TAG(SUMMARY), TAG(TABLE), TAG(TBODY),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(SELECT), TAG(STYLE), TAG(SUMMARY), TAG(TABLE), TAG(TBODY),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(SELECT), TAG(STYLE), TAG(SUMMARY), TAG(TABLE), TAG(TBODY),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(SELECT), TAG(STYLE), TAG(SUMMARY), TAG(TABLE), TAG(TBODY),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1881|   181k|      TAG(TD), TAG(TEMPLATE), TAG(TEXTAREA), TAG(TFOOT), TAG(TH),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TD), TAG(TEMPLATE), TAG(TEXTAREA), TAG(TFOOT), TAG(TH),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TD), TAG(TEMPLATE), TAG(TEXTAREA), TAG(TFOOT), TAG(TH),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TD), TAG(TEMPLATE), TAG(TEXTAREA), TAG(TFOOT), TAG(TH),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TD), TAG(TEMPLATE), TAG(TEXTAREA), TAG(TFOOT), TAG(TH),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1882|   181k|      TAG(THEAD), TAG(TR), TAG(UL), TAG(WBR), TAG(XMP),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(THEAD), TAG(TR), TAG(UL), TAG(WBR), TAG(XMP),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(THEAD), TAG(TR), TAG(UL), TAG(WBR), TAG(XMP),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(THEAD), TAG(TR), TAG(UL), TAG(WBR), TAG(XMP),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(THEAD), TAG(TR), TAG(UL), TAG(WBR), TAG(XMP),
  ------------------
  |  |   40|   181k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1883|       |
 1884|   181k|      TAG_MATHML(MI), TAG_MATHML(MO), TAG_MATHML(MN), TAG_MATHML(MS),
  ------------------
  |  |   42|   181k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  ------------------
                    TAG_MATHML(MI), TAG_MATHML(MO), TAG_MATHML(MN), TAG_MATHML(MS),
  ------------------
  |  |   42|   181k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  ------------------
                    TAG_MATHML(MI), TAG_MATHML(MO), TAG_MATHML(MN), TAG_MATHML(MS),
  ------------------
  |  |   42|   181k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  ------------------
                    TAG_MATHML(MI), TAG_MATHML(MO), TAG_MATHML(MN), TAG_MATHML(MS),
  ------------------
  |  |   42|   181k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  ------------------
 1885|   181k|      TAG_MATHML(MTEXT), TAG_MATHML(ANNOTATION_XML),
  ------------------
  |  |   42|   181k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  ------------------
                    TAG_MATHML(MTEXT), TAG_MATHML(ANNOTATION_XML),
  ------------------
  |  |   42|   181k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  ------------------
 1886|       |
 1887|   181k|      TAG_SVG(FOREIGNOBJECT), TAG_SVG(DESC),
  ------------------
  |  |   41|   181k|#define TAG_SVG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_SVG)
  ------------------
                    TAG_SVG(FOREIGNOBJECT), TAG_SVG(DESC),
  ------------------
  |  |   41|   181k|#define TAG_SVG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_SVG)
  ------------------
 1888|       |
 1889|       |      // This TagSet needs to include the "title" element in both the
 1890|       |      // HTML and SVG namespaces. Using both TAG(TITLE) and TAG_SVG(TITLE)
 1891|       |      // won't work, due to the simplistic way in which the TAG macros are
 1892|       |      // implemented, so we do it like this instead:
 1893|   181k|      [GUMBO_TAG_TITLE] =
 1894|   181k|          (1 << GUMBO_NAMESPACE_HTML) |
 1895|   181k|          (1 << GUMBO_NAMESPACE_SVG)
 1896|   181k|    }
 1897|   181k|  );
 1898|   181k|}
parser.c:generate_implied_end_tags:
 1754|  26.2k|) {
 1755|  26.2k|  static const TagSet tags = {
 1756|  26.2k|    TAG(DD), TAG(DT), TAG(LI), TAG(OPTGROUP), TAG(OPTION),
  ------------------
  |  |   40|  26.2k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(DD), TAG(DT), TAG(LI), TAG(OPTGROUP), TAG(OPTION),
  ------------------
  |  |   40|  26.2k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(DD), TAG(DT), TAG(LI), TAG(OPTGROUP), TAG(OPTION),
  ------------------
  |  |   40|  26.2k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(DD), TAG(DT), TAG(LI), TAG(OPTGROUP), TAG(OPTION),
  ------------------
  |  |   40|  26.2k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(DD), TAG(DT), TAG(LI), TAG(OPTGROUP), TAG(OPTION),
  ------------------
  |  |   40|  26.2k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1757|  26.2k|    TAG(P), TAG(RB), TAG(RP), TAG(RT), TAG(RTC)
  ------------------
  |  |   40|  26.2k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(P), TAG(RB), TAG(RP), TAG(RT), TAG(RTC)
  ------------------
  |  |   40|  26.2k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(P), TAG(RB), TAG(RP), TAG(RT), TAG(RTC)
  ------------------
  |  |   40|  26.2k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(P), TAG(RB), TAG(RP), TAG(RT), TAG(RTC)
  ------------------
  |  |   40|  26.2k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(P), TAG(RB), TAG(RP), TAG(RT), TAG(RTC)
  ------------------
  |  |   40|  26.2k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1758|  26.2k|  };
 1759|  26.2k|  while (
 1760|  27.9k|    node_tag_in_set(get_current_node(parser), &tags)
  ------------------
  |  Branch (1760:5): [True: 12.6k, False: 15.3k]
  ------------------
 1761|  12.6k|    && !node_html_tagname_is(get_current_node(parser), exception, exception_name)
  ------------------
  |  Branch (1761:8): [True: 1.67k, False: 10.9k]
  ------------------
 1762|  26.2k|  ) {
 1763|  1.67k|    pop_current_node(parser);
 1764|  1.67k|  }
 1765|  26.2k|}
parser.c:node_html_tagname_is:
  618|  12.6k|) {
  619|  12.6k|  return node_qualified_tagname_is(node, GUMBO_NAMESPACE_HTML, tag, name);
  620|  12.6k|}
parser.c:implicitly_close_tags:
 1910|  14.6k|) {
 1911|  14.6k|  assert(target != GUMBO_TAG_UNKNOWN);
  ------------------
  |  Branch (1911:3): [True: 0, False: 14.6k]
  |  Branch (1911:3): [True: 14.6k, False: 0]
  ------------------
 1912|  14.6k|  generate_implied_end_tags(parser, target, NULL);
 1913|  14.6k|  if (!node_qualified_tag_is(get_current_node(parser), target_ns, target)) {
  ------------------
  |  Branch (1913:7): [True: 3.51k, False: 11.1k]
  ------------------
 1914|  3.51k|    parser_add_parse_error(parser, token);
 1915|  3.51k|    while (
 1916|  17.2k|      !node_qualified_tag_is(get_current_node(parser), target_ns, target)
  ------------------
  |  Branch (1916:7): [True: 13.7k, False: 3.51k]
  ------------------
 1917|  13.7k|    ) {
 1918|  13.7k|      pop_current_node(parser);
 1919|  13.7k|    }
 1920|  3.51k|  }
 1921|  14.6k|  assert(node_qualified_tag_is(get_current_node(parser), target_ns, target));
  ------------------
  |  Branch (1921:3): [True: 0, False: 14.6k]
  |  Branch (1921:3): [True: 14.6k, False: 0]
  ------------------
 1922|  14.6k|  pop_current_node(parser);
 1923|  14.6k|}
parser.c:has_node_in_scope:
 1692|    859|static bool has_node_in_scope(const GumboParser* parser, const GumboNode* node) {
 1693|    859|  static const TagSet tags = {DEFAULT_SCOPE_TAGS};
  ------------------
  |  | 1649|    859|  TAG(APPLET), \
  |  |  ------------------
  |  |  |  |   40|    859|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1650|    859|  TAG(CAPTION), \
  |  |  ------------------
  |  |  |  |   40|    859|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1651|    859|  TAG(HTML), \
  |  |  ------------------
  |  |  |  |   40|    859|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1652|    859|  TAG(TABLE), \
  |  |  ------------------
  |  |  |  |   40|    859|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1653|    859|  TAG(TD), \
  |  |  ------------------
  |  |  |  |   40|    859|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1654|    859|  TAG(TH), \
  |  |  ------------------
  |  |  |  |   40|    859|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1655|    859|  TAG(MARQUEE), \
  |  |  ------------------
  |  |  |  |   40|    859|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1656|    859|  TAG(OBJECT), \
  |  |  ------------------
  |  |  |  |   40|    859|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1657|    859|  TAG(TEMPLATE), \
  |  |  ------------------
  |  |  |  |   40|    859|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1658|    859|  TAG_MATHML(MI), \
  |  |  ------------------
  |  |  |  |   42|    859|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1659|    859|  TAG_MATHML(MO), \
  |  |  ------------------
  |  |  |  |   42|    859|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1660|    859|  TAG_MATHML(MN), \
  |  |  ------------------
  |  |  |  |   42|    859|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1661|    859|  TAG_MATHML(MS), \
  |  |  ------------------
  |  |  |  |   42|    859|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1662|    859|  TAG_MATHML(MTEXT), \
  |  |  ------------------
  |  |  |  |   42|    859|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1663|    859|  TAG_MATHML(ANNOTATION_XML), \
  |  |  ------------------
  |  |  |  |   42|    859|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1664|    859|  TAG_SVG(FOREIGNOBJECT), \
  |  |  ------------------
  |  |  |  |   41|    859|#define TAG_SVG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_SVG)
  |  |  ------------------
  |  | 1665|    859|  TAG_SVG(DESC), \
  |  |  ------------------
  |  |  |  |   41|    859|#define TAG_SVG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_SVG)
  |  |  ------------------
  |  | 1666|    859|  TAG_SVG(TITLE)
  |  |  ------------------
  |  |  |  |   41|    859|#define TAG_SVG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_SVG)
  |  |  ------------------
  ------------------
 1694|    859|  const GumboVector* open_elements = &parser->_parser_state->_open_elements;
 1695|  3.51k|  for (int i = open_elements->length; --i >= 0;) {
  ------------------
  |  Branch (1695:39): [True: 3.51k, False: 0]
  ------------------
 1696|  3.51k|    const GumboNode* current = open_elements->data[i];
 1697|  3.51k|    const GumboNodeType type = current->type;
 1698|  3.51k|    if (current == node) {
  ------------------
  |  Branch (1698:9): [True: 609, False: 2.90k]
  ------------------
 1699|    609|      return true;
 1700|    609|    }
 1701|  2.90k|    if (type != GUMBO_NODE_ELEMENT && type != GUMBO_NODE_TEMPLATE) {
  ------------------
  |  Branch (1701:9): [True: 0, False: 2.90k]
  |  Branch (1701:39): [True: 0, False: 0]
  ------------------
 1702|      0|      continue;
 1703|      0|    }
 1704|  2.90k|    if (node_tag_in_set(current, &tags)) {
  ------------------
  |  Branch (1704:9): [True: 250, False: 2.65k]
  ------------------
 1705|    250|      return false;
 1706|    250|    }
 1707|  2.90k|  }
 1708|    859|  assert(false);
  ------------------
  |  Branch (1708:3): [Folded, False: 0]
  |  Branch (1708:3): [Folded, False: 0]
  ------------------
 1709|      0|  return false;
 1710|      0|}
parser.c:has_an_element_in_button_scope:
 1730|  34.9k|static bool has_an_element_in_button_scope(const GumboParser* parser, GumboTag tag) {
 1731|  34.9k|  static const TagSet tags = {DEFAULT_SCOPE_TAGS, TAG(BUTTON)};
  ------------------
  |  | 1649|  34.9k|  TAG(APPLET), \
  |  |  ------------------
  |  |  |  |   40|  34.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1650|  69.9k|  TAG(CAPTION), \
  |  |  ------------------
  |  |  |  |   40|  34.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1651|  69.9k|  TAG(HTML), \
  |  |  ------------------
  |  |  |  |   40|  34.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1652|  69.9k|  TAG(TABLE), \
  |  |  ------------------
  |  |  |  |   40|  34.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1653|  69.9k|  TAG(TD), \
  |  |  ------------------
  |  |  |  |   40|  34.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1654|  69.9k|  TAG(TH), \
  |  |  ------------------
  |  |  |  |   40|  34.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1655|  69.9k|  TAG(MARQUEE), \
  |  |  ------------------
  |  |  |  |   40|  34.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1656|  69.9k|  TAG(OBJECT), \
  |  |  ------------------
  |  |  |  |   40|  34.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1657|  69.9k|  TAG(TEMPLATE), \
  |  |  ------------------
  |  |  |  |   40|  34.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1658|  69.9k|  TAG_MATHML(MI), \
  |  |  ------------------
  |  |  |  |   42|  34.9k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1659|  69.9k|  TAG_MATHML(MO), \
  |  |  ------------------
  |  |  |  |   42|  34.9k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1660|  69.9k|  TAG_MATHML(MN), \
  |  |  ------------------
  |  |  |  |   42|  34.9k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1661|  69.9k|  TAG_MATHML(MS), \
  |  |  ------------------
  |  |  |  |   42|  34.9k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1662|  69.9k|  TAG_MATHML(MTEXT), \
  |  |  ------------------
  |  |  |  |   42|  34.9k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1663|  69.9k|  TAG_MATHML(ANNOTATION_XML), \
  |  |  ------------------
  |  |  |  |   42|  34.9k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1664|  69.9k|  TAG_SVG(FOREIGNOBJECT), \
  |  |  ------------------
  |  |  |  |   41|  34.9k|#define TAG_SVG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_SVG)
  |  |  ------------------
  |  | 1665|  69.9k|  TAG_SVG(DESC), \
  |  |  ------------------
  |  |  |  |   41|  34.9k|#define TAG_SVG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_SVG)
  |  |  ------------------
  |  | 1666|  69.9k|  TAG_SVG(TITLE)
  |  |  ------------------
  |  |  |  |   41|  34.9k|#define TAG_SVG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_SVG)
  |  |  ------------------
  ------------------
                static const TagSet tags = {DEFAULT_SCOPE_TAGS, TAG(BUTTON)};
  ------------------
  |  |   40|  34.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1732|       |  return has_an_element_in_specific_scope(parser, 1, &tag, false, &tags);
 1733|  34.9k|}
parser.c:has_an_element_in_list_scope:
 1724|  1.16k|static bool has_an_element_in_list_scope(const GumboParser* parser, GumboTag tag) {
 1725|  1.16k|  static const TagSet tags = {DEFAULT_SCOPE_TAGS, TAG(OL), TAG(UL)};
  ------------------
  |  | 1649|  1.16k|  TAG(APPLET), \
  |  |  ------------------
  |  |  |  |   40|  1.16k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1650|  2.32k|  TAG(CAPTION), \
  |  |  ------------------
  |  |  |  |   40|  1.16k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1651|  2.32k|  TAG(HTML), \
  |  |  ------------------
  |  |  |  |   40|  1.16k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1652|  2.32k|  TAG(TABLE), \
  |  |  ------------------
  |  |  |  |   40|  1.16k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1653|  2.32k|  TAG(TD), \
  |  |  ------------------
  |  |  |  |   40|  1.16k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1654|  2.32k|  TAG(TH), \
  |  |  ------------------
  |  |  |  |   40|  1.16k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1655|  2.32k|  TAG(MARQUEE), \
  |  |  ------------------
  |  |  |  |   40|  1.16k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1656|  2.32k|  TAG(OBJECT), \
  |  |  ------------------
  |  |  |  |   40|  1.16k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1657|  2.32k|  TAG(TEMPLATE), \
  |  |  ------------------
  |  |  |  |   40|  1.16k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1658|  2.32k|  TAG_MATHML(MI), \
  |  |  ------------------
  |  |  |  |   42|  1.16k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1659|  2.32k|  TAG_MATHML(MO), \
  |  |  ------------------
  |  |  |  |   42|  1.16k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1660|  2.32k|  TAG_MATHML(MN), \
  |  |  ------------------
  |  |  |  |   42|  1.16k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1661|  2.32k|  TAG_MATHML(MS), \
  |  |  ------------------
  |  |  |  |   42|  1.16k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1662|  2.32k|  TAG_MATHML(MTEXT), \
  |  |  ------------------
  |  |  |  |   42|  1.16k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1663|  2.32k|  TAG_MATHML(ANNOTATION_XML), \
  |  |  ------------------
  |  |  |  |   42|  1.16k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1664|  2.32k|  TAG_SVG(FOREIGNOBJECT), \
  |  |  ------------------
  |  |  |  |   41|  1.16k|#define TAG_SVG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_SVG)
  |  |  ------------------
  |  | 1665|  2.32k|  TAG_SVG(DESC), \
  |  |  ------------------
  |  |  |  |   41|  1.16k|#define TAG_SVG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_SVG)
  |  |  ------------------
  |  | 1666|  2.32k|  TAG_SVG(TITLE)
  |  |  ------------------
  |  |  |  |   41|  1.16k|#define TAG_SVG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_SVG)
  |  |  ------------------
  ------------------
                static const TagSet tags = {DEFAULT_SCOPE_TAGS, TAG(OL), TAG(UL)};
  ------------------
  |  |   40|  1.16k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                static const TagSet tags = {DEFAULT_SCOPE_TAGS, TAG(OL), TAG(UL)};
  ------------------
  |  |   40|  1.16k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1726|       |  return has_an_element_in_specific_scope(parser, 1, &tag, false, &tags);
 1727|  1.16k|}
parser.c:has_an_element_in_scope_with_tagname:
 1718|  1.85k|) {
 1719|  1.85k|  static const TagSet tags = {DEFAULT_SCOPE_TAGS};
  ------------------
  |  | 1649|  1.85k|  TAG(APPLET), \
  |  |  ------------------
  |  |  |  |   40|  1.85k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1650|  1.85k|  TAG(CAPTION), \
  |  |  ------------------
  |  |  |  |   40|  1.85k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1651|  1.85k|  TAG(HTML), \
  |  |  ------------------
  |  |  |  |   40|  1.85k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1652|  1.85k|  TAG(TABLE), \
  |  |  ------------------
  |  |  |  |   40|  1.85k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1653|  1.85k|  TAG(TD), \
  |  |  ------------------
  |  |  |  |   40|  1.85k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1654|  1.85k|  TAG(TH), \
  |  |  ------------------
  |  |  |  |   40|  1.85k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1655|  1.85k|  TAG(MARQUEE), \
  |  |  ------------------
  |  |  |  |   40|  1.85k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1656|  1.85k|  TAG(OBJECT), \
  |  |  ------------------
  |  |  |  |   40|  1.85k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1657|  1.85k|  TAG(TEMPLATE), \
  |  |  ------------------
  |  |  |  |   40|  1.85k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  |  |  ------------------
  |  | 1658|  1.85k|  TAG_MATHML(MI), \
  |  |  ------------------
  |  |  |  |   42|  1.85k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1659|  1.85k|  TAG_MATHML(MO), \
  |  |  ------------------
  |  |  |  |   42|  1.85k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1660|  1.85k|  TAG_MATHML(MN), \
  |  |  ------------------
  |  |  |  |   42|  1.85k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1661|  1.85k|  TAG_MATHML(MS), \
  |  |  ------------------
  |  |  |  |   42|  1.85k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1662|  1.85k|  TAG_MATHML(MTEXT), \
  |  |  ------------------
  |  |  |  |   42|  1.85k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1663|  1.85k|  TAG_MATHML(ANNOTATION_XML), \
  |  |  ------------------
  |  |  |  |   42|  1.85k|#define TAG_MATHML(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_MATHML)
  |  |  ------------------
  |  | 1664|  1.85k|  TAG_SVG(FOREIGNOBJECT), \
  |  |  ------------------
  |  |  |  |   41|  1.85k|#define TAG_SVG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_SVG)
  |  |  ------------------
  |  | 1665|  1.85k|  TAG_SVG(DESC), \
  |  |  ------------------
  |  |  |  |   41|  1.85k|#define TAG_SVG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_SVG)
  |  |  ------------------
  |  | 1666|  1.85k|  TAG_SVG(TITLE)
  |  |  ------------------
  |  |  |  |   41|  1.85k|#define TAG_SVG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_SVG)
  |  |  ------------------
  ------------------
 1720|       |  return has_an_element_in_specific_scope(parser, len, expected, false, &tags);
 1721|  1.85k|}
parser.c:find_last_anchor_index:
 1336|  35.9k|static bool find_last_anchor_index(GumboParser* parser, int* anchor_index) {
 1337|  35.9k|  GumboVector* elements = &parser->_parser_state->_active_formatting_elements;
 1338|  64.9k|  for (int i = elements->length; --i >= 0;) {
  ------------------
  |  Branch (1338:34): [True: 48.3k, False: 16.6k]
  ------------------
 1339|  48.3k|    GumboNode* node = elements->data[i];
 1340|  48.3k|    if (node == &kActiveFormattingScopeMarker) {
  ------------------
  |  Branch (1340:9): [True: 1.68k, False: 46.6k]
  ------------------
 1341|  1.68k|      return false;
 1342|  1.68k|    }
 1343|  46.6k|    if (node_html_tag_is(node, GUMBO_TAG_A)) {
  ------------------
  |  Branch (1343:9): [True: 17.6k, False: 29.0k]
  ------------------
 1344|  17.6k|      *anchor_index = i;
 1345|  17.6k|      return true;
 1346|  17.6k|    }
 1347|  46.6k|  }
 1348|  16.6k|  return false;
 1349|  35.9k|}
parser.c:adoption_agency_algorithm:
 2194|  23.5k|{
 2195|  23.5k|  GumboParserState* state = parser->_parser_state;
 2196|  23.5k|  gumbo_debug("Entering adoption agency algorithm.\n");
 2197|       |  // Step 1.
 2198|  23.5k|  GumboTag subject;
 2199|  23.5k|  if (token->type == GUMBO_TOKEN_START_TAG) {
  ------------------
  |  Branch (2199:7): [True: 19.1k, False: 4.40k]
  ------------------
 2200|  19.1k|    subject = token->v.start_tag.tag;
 2201|  19.1k|  } else {
 2202|  4.40k|    assert(token->type == GUMBO_TOKEN_END_TAG);
  ------------------
  |  Branch (2202:5): [True: 0, False: 4.40k]
  |  Branch (2202:5): [True: 4.40k, False: 0]
  ------------------
 2203|  4.40k|    subject = token->v.end_tag.tag;
 2204|  4.40k|  }
 2205|  23.5k|  assert(subject != GUMBO_TAG_UNKNOWN);
  ------------------
  |  Branch (2205:3): [True: 0, False: 23.5k]
  |  Branch (2205:3): [True: 23.5k, False: 0]
  ------------------
 2206|       |
 2207|       |  // Step 2.
 2208|  23.5k|  GumboNode* current_node = get_current_node(parser);
 2209|  23.5k|  if (
 2210|  23.5k|    node_html_tag_is(current_node, subject)
  ------------------
  |  Branch (2210:5): [True: 15.4k, False: 8.13k]
  ------------------
 2211|  15.4k|    && -1 == gumbo_vector_index_of (
  ------------------
  |  Branch (2211:8): [True: 462, False: 14.9k]
  ------------------
 2212|  15.4k|      &state->_active_formatting_elements,
 2213|  15.4k|      current_node
 2214|  15.4k|    )
 2215|  23.5k|  ) {
 2216|    462|    pop_current_node(parser);
 2217|    462|    return;
 2218|    462|  }
 2219|       |
 2220|       |  // Steps 3-5 & 21:
 2221|  29.6k|  for (unsigned int i = 0; i < 8; ++i) {
  ------------------
  |  Branch (2221:28): [True: 29.3k, False: 324]
  ------------------
 2222|       |    // Step 6.
 2223|  29.3k|    GumboNode* formatting_node = NULL;
 2224|  29.3k|    int formatting_node_in_open_elements = -1;
 2225|  51.6k|    for (int j = state->_active_formatting_elements.length; --j >= 0;) {
  ------------------
  |  Branch (2225:61): [True: 49.7k, False: 1.91k]
  ------------------
 2226|  49.7k|      GumboNode* current_node = state->_active_formatting_elements.data[j];
 2227|  49.7k|      if (current_node == &kActiveFormattingScopeMarker) {
  ------------------
  |  Branch (2227:11): [True: 874, False: 48.8k]
  ------------------
 2228|    874|        gumbo_debug("Broke on scope marker; aborting.\n");
 2229|       |        // Last scope marker; abort the algorithm and handle according to "any
 2230|       |        // other end tag" (below).
 2231|    874|        break;
 2232|    874|      }
 2233|  48.8k|      if (node_html_tag_is(current_node, subject)) {
  ------------------
  |  Branch (2233:11): [True: 26.5k, False: 22.2k]
  ------------------
 2234|       |        // Found it.
 2235|  26.5k|        formatting_node = current_node;
 2236|  26.5k|        formatting_node_in_open_elements = gumbo_vector_index_of (
 2237|  26.5k|          &state->_open_elements,
 2238|  26.5k|          formatting_node
 2239|  26.5k|        );
 2240|  26.5k|        gumbo_debug (
 2241|  26.5k|          "Formatting element of tag %s at %d.\n",
 2242|  26.5k|          gumbo_normalized_tagname(subject),
 2243|  26.5k|          formatting_node_in_open_elements
 2244|  26.5k|        );
 2245|  26.5k|        break;
 2246|  26.5k|      }
 2247|  48.8k|    }
 2248|  29.3k|    if (!formatting_node) {
  ------------------
  |  Branch (2248:9): [True: 2.79k, False: 26.5k]
  ------------------
 2249|       |      // No matching tag; not a parse error outright, but fall through to the
 2250|       |      // "any other end tag" clause (which may potentially add a parse error,
 2251|       |      // but not always).
 2252|  2.79k|      gumbo_debug("No active formatting elements; aborting.\n");
 2253|  2.79k|      in_body_any_other_end_tag(parser, token);
 2254|  2.79k|      return;
 2255|  2.79k|    }
 2256|       |
 2257|       |    // Step 7
 2258|  26.5k|    if (formatting_node_in_open_elements == -1) {
  ------------------
  |  Branch (2258:9): [True: 829, False: 25.7k]
  ------------------
 2259|    829|      gumbo_debug("Formatting node not on stack of open elements.\n");
 2260|    829|      parser_add_parse_error(parser, token);
 2261|    829|      gumbo_vector_remove (
 2262|    829|        formatting_node,
 2263|    829|        &state->_active_formatting_elements
 2264|    829|      );
 2265|    829|      return;
 2266|    829|    }
 2267|       |
 2268|       |    // Step 8
 2269|  25.7k|    if (!has_an_element_in_scope(parser, formatting_node->v.element.tag)) {
  ------------------
  |  Branch (2269:9): [True: 429, False: 25.3k]
  ------------------
 2270|    429|      parser_add_parse_error(parser, token);
 2271|    429|      gumbo_debug("Element not in scope.\n");
 2272|    429|      return;
 2273|    429|    }
 2274|       |
 2275|       |    // Step 9
 2276|  25.3k|    if (formatting_node != get_current_node(parser))
  ------------------
  |  Branch (2276:9): [True: 9.02k, False: 16.2k]
  ------------------
 2277|  9.02k|      parser_add_parse_error(parser, token);  // But continue onwards.
 2278|  25.3k|    assert(formatting_node);
  ------------------
  |  Branch (2278:5): [True: 0, False: 25.3k]
  |  Branch (2278:5): [True: 25.3k, False: 0]
  ------------------
 2279|  25.3k|    assert(!node_html_tag_is(formatting_node, GUMBO_TAG_HTML));
  ------------------
  |  Branch (2279:5): [True: 0, False: 25.3k]
  |  Branch (2279:5): [True: 25.3k, False: 0]
  ------------------
 2280|  25.3k|    assert(!node_html_tag_is(formatting_node, GUMBO_TAG_BODY));
  ------------------
  |  Branch (2280:5): [True: 0, False: 25.3k]
  |  Branch (2280:5): [True: 25.3k, False: 0]
  ------------------
 2281|       |
 2282|       |    // Step 10
 2283|  25.3k|    GumboNode* furthest_block = NULL;
 2284|  25.3k|    for (
 2285|  25.3k|      unsigned int j = formatting_node_in_open_elements;
 2286|  66.2k|      j < state->_open_elements.length;
  ------------------
  |  Branch (2286:7): [True: 47.5k, False: 18.7k]
  ------------------
 2287|  40.9k|      ++j
 2288|  47.5k|    ) {
 2289|  47.5k|      assert(j > 0);
  ------------------
  |  Branch (2289:7): [True: 0, False: 47.5k]
  |  Branch (2289:7): [True: 47.5k, False: 0]
  ------------------
 2290|  47.5k|      GumboNode* current = state->_open_elements.data[j];
 2291|  47.5k|      if (is_special_node(current)) {
  ------------------
  |  Branch (2291:11): [True: 6.60k, False: 40.9k]
  ------------------
 2292|  6.60k|        furthest_block = current;
 2293|  6.60k|        break;
 2294|  6.60k|      }
 2295|  47.5k|    }
 2296|       |    // Step 11.
 2297|  25.3k|    if (!furthest_block) {
  ------------------
  |  Branch (2297:9): [True: 18.7k, False: 6.60k]
  ------------------
 2298|  23.9k|      while (pop_current_node(parser) != formatting_node)
  ------------------
  |  Branch (2298:14): [True: 5.29k, False: 18.7k]
  ------------------
 2299|  5.29k|        ;
 2300|  18.7k|      gumbo_vector_remove (
 2301|  18.7k|        formatting_node,
 2302|  18.7k|        &state->_active_formatting_elements
 2303|  18.7k|      );
 2304|  18.7k|      return;
 2305|  18.7k|    }
 2306|  25.3k|    assert(!node_html_tag_is(furthest_block, GUMBO_TAG_HTML));
  ------------------
  |  Branch (2306:5): [True: 0, False: 6.60k]
  |  Branch (2306:5): [True: 6.60k, False: 0]
  ------------------
 2307|       |
 2308|       |    // Step 12.
 2309|       |    // Elements may be moved and reparented by this algorithm, so
 2310|       |    // common_ancestor is not necessarily the same as formatting_node->parent.
 2311|  6.60k|    GumboNode* common_ancestor = state->_open_elements.data [
 2312|  6.60k|      formatting_node_in_open_elements - 1
 2313|  6.60k|    ];
 2314|  6.60k|    gumbo_debug (
 2315|  6.60k|      "Common ancestor tag = %s, furthest block tag = %s.\n",
 2316|  6.60k|      gumbo_normalized_tagname(common_ancestor->v.element.tag),
 2317|  6.60k|      gumbo_normalized_tagname(furthest_block->v.element.tag)
 2318|  6.60k|    );
 2319|       |
 2320|       |    // Step 13.
 2321|  6.60k|    int bookmark = 1 + gumbo_vector_index_of (
 2322|  6.60k|      &state->_active_formatting_elements,
 2323|  6.60k|      formatting_node
 2324|  6.60k|    );
 2325|  6.60k|    gumbo_debug("Bookmark at %d.\n", bookmark);
 2326|       |    // Step 14.
 2327|  6.60k|    GumboNode* node = furthest_block;
 2328|  6.60k|    GumboNode* last_node = furthest_block;
 2329|       |    // Must be stored explicitly, in case node is removed from the stack of open
 2330|       |    // elements, to handle step 14.3.
 2331|  6.60k|    int saved_node_index = gumbo_vector_index_of(&state->_open_elements, node);
 2332|  6.60k|    assert(saved_node_index > 0);
  ------------------
  |  Branch (2332:5): [True: 0, False: 6.60k]
  |  Branch (2332:5): [True: 6.60k, False: 0]
  ------------------
 2333|       |    // Step 14.1.
 2334|  16.9k|    for (int j = 0;;) {
 2335|       |      // Step 14.2.
 2336|  16.9k|      ++j;
 2337|       |      // Step 14.3.
 2338|  16.9k|      int node_index = gumbo_vector_index_of(&state->_open_elements, node);
 2339|  16.9k|      gumbo_debug (
 2340|  16.9k|        "Current index: %d, last index: %d.\n",
 2341|  16.9k|        node_index,
 2342|  16.9k|        saved_node_index
 2343|  16.9k|      );
 2344|  16.9k|      if (node_index == -1) {
  ------------------
  |  Branch (2344:11): [True: 5.92k, False: 11.0k]
  ------------------
 2345|  5.92k|        node_index = saved_node_index;
 2346|  5.92k|      }
 2347|  16.9k|      saved_node_index = --node_index;
 2348|  16.9k|      assert(node_index > 0);
  ------------------
  |  Branch (2348:7): [True: 0, False: 16.9k]
  |  Branch (2348:7): [True: 16.9k, False: 0]
  ------------------
 2349|  16.9k|      assert((unsigned int) node_index < state->_open_elements.capacity);
  ------------------
  |  Branch (2349:7): [True: 0, False: 16.9k]
  |  Branch (2349:7): [True: 16.9k, False: 0]
  ------------------
 2350|  16.9k|      node = state->_open_elements.data[node_index];
 2351|  16.9k|      assert(node->parent);
  ------------------
  |  Branch (2351:7): [True: 0, False: 16.9k]
  |  Branch (2351:7): [True: 16.9k, False: 0]
  ------------------
 2352|       |      // Step 14.4.
 2353|  16.9k|      if (node == formatting_node) {
  ------------------
  |  Branch (2353:11): [True: 6.60k, False: 10.3k]
  ------------------
 2354|  6.60k|        break;
 2355|  6.60k|      }
 2356|  10.3k|      int formatting_index = gumbo_vector_index_of (
 2357|  10.3k|        &state->_active_formatting_elements,
 2358|  10.3k|        node
 2359|  10.3k|      );
 2360|       |      // Step 14.5.
 2361|  10.3k|      if (j > 3 && formatting_index != -1) {
  ------------------
  |  Branch (2361:11): [True: 4.17k, False: 6.19k]
  |  Branch (2361:20): [True: 1.33k, False: 2.83k]
  ------------------
 2362|  1.33k|        gumbo_debug("Removing formatting element at %d.\n", formatting_index);
 2363|  1.33k|        gumbo_vector_remove_at (
 2364|  1.33k|          formatting_index,
 2365|  1.33k|          &state->_active_formatting_elements
 2366|  1.33k|        );
 2367|       |        // Removing the element shifts all indices over by one, so we may need
 2368|       |        // to move the bookmark.
 2369|  1.33k|        if (formatting_index < bookmark) {
  ------------------
  |  Branch (2369:13): [True: 774, False: 562]
  ------------------
 2370|    774|          --bookmark;
 2371|    774|          gumbo_debug("Moving bookmark to %d.\n", bookmark);
 2372|    774|        }
 2373|  1.33k|        continue;
 2374|  1.33k|      }
 2375|  9.02k|      if (formatting_index == -1) {
  ------------------
  |  Branch (2375:11): [True: 5.92k, False: 3.10k]
  ------------------
 2376|       |        // Step 14.6.
 2377|  5.92k|        gumbo_vector_remove_at(node_index, &state->_open_elements);
 2378|  5.92k|        continue;
 2379|  5.92k|      }
 2380|       |      // Step 14.7.
 2381|       |      // "common ancestor as the intended parent" doesn't actually mean insert
 2382|       |      // it into the common ancestor; that happens below.
 2383|  3.10k|      node = clone_node(node, GUMBO_INSERTION_ADOPTION_AGENCY_CLONED);
 2384|  3.10k|      assert(formatting_index >= 0);
  ------------------
  |  Branch (2384:7): [True: 0, False: 3.10k]
  |  Branch (2384:7): [True: 3.10k, False: 0]
  ------------------
 2385|  3.10k|      state->_active_formatting_elements.data[formatting_index] = node;
 2386|  3.10k|      assert(node_index >= 0);
  ------------------
  |  Branch (2386:7): [True: 0, False: 3.10k]
  |  Branch (2386:7): [True: 3.10k, False: 0]
  ------------------
 2387|  3.10k|      state->_open_elements.data[node_index] = node;
 2388|       |      // Step 14.8.
 2389|  3.10k|      if (last_node == furthest_block) {
  ------------------
  |  Branch (2389:11): [True: 1.98k, False: 1.12k]
  ------------------
 2390|  1.98k|        bookmark = formatting_index + 1;
 2391|  1.98k|        gumbo_debug("Bookmark moved to %d.\n", bookmark);
 2392|  1.98k|        assert((unsigned int) bookmark <= state->_active_formatting_elements.length);
  ------------------
  |  Branch (2392:9): [True: 0, False: 1.98k]
  |  Branch (2392:9): [True: 1.98k, False: 0]
  ------------------
 2393|  1.98k|      }
 2394|       |      // Step 14.9.
 2395|  3.10k|      last_node->parse_flags |= GUMBO_INSERTION_ADOPTION_AGENCY_MOVED;
 2396|  3.10k|      remove_from_parent(last_node);
 2397|  3.10k|      append_node(node, last_node);
 2398|       |      // Step 14.10.
 2399|  3.10k|      last_node = node;
 2400|  3.10k|    }  // Step 14.11.
 2401|       |
 2402|       |    // Step 15.
 2403|  6.60k|    gumbo_debug (
 2404|  6.60k|      "Removing %s node from parent ",
 2405|  6.60k|      gumbo_normalized_tagname(last_node->v.element.tag)
 2406|  6.60k|    );
 2407|  6.60k|    remove_from_parent(last_node);
 2408|  6.60k|    last_node->parse_flags |= GUMBO_INSERTION_ADOPTION_AGENCY_MOVED;
 2409|  6.60k|    InsertionLocation location = get_appropriate_insertion_location (
 2410|  6.60k|      parser,
 2411|  6.60k|      common_ancestor
 2412|  6.60k|    );
 2413|  6.60k|    gumbo_debug (
 2414|  6.60k|      "and inserting it into %s.\n",
 2415|  6.60k|      gumbo_normalized_tagname(location.target->v.element.tag)
 2416|  6.60k|    );
 2417|  6.60k|    insert_node(last_node, location);
 2418|       |
 2419|       |    // Step 16.
 2420|  6.60k|    GumboNode* new_formatting_node = clone_node (
 2421|  6.60k|      formatting_node,
 2422|  6.60k|      GUMBO_INSERTION_ADOPTION_AGENCY_CLONED
 2423|  6.60k|    );
 2424|  6.60k|    formatting_node->parse_flags |= GUMBO_INSERTION_IMPLICIT_END_TAG;
 2425|       |
 2426|       |    // Step 17. Instead of appending nodes one-by-one, we swap the children
 2427|       |    // vector of furthest_block with the empty children of new_formatting_node,
 2428|       |    // reducing memory traffic and allocations. We still have to reset their
 2429|       |    // parent pointers, though.
 2430|  6.60k|    GumboVector temp = new_formatting_node->v.element.children;
 2431|  6.60k|    new_formatting_node->v.element.children = furthest_block->v.element.children;
 2432|  6.60k|    furthest_block->v.element.children = temp;
 2433|       |
 2434|  6.60k|    temp = new_formatting_node->v.element.children;
 2435|  18.1k|    for (unsigned int i = 0; i < temp.length; ++i) {
  ------------------
  |  Branch (2435:30): [True: 11.5k, False: 6.60k]
  ------------------
 2436|  11.5k|      GumboNode* child = temp.data[i];
 2437|  11.5k|      child->parent = new_formatting_node;
 2438|  11.5k|    }
 2439|       |
 2440|       |    // Step 18.
 2441|  6.60k|    append_node(furthest_block, new_formatting_node);
 2442|       |
 2443|       |    // Step 19.
 2444|       |    // If the formatting node was before the bookmark, it may shift over all
 2445|       |    // indices after it, so we need to explicitly find the index and possibly
 2446|       |    // adjust the bookmark.
 2447|  6.60k|    int formatting_node_index = gumbo_vector_index_of (
 2448|  6.60k|      &state->_active_formatting_elements,
 2449|  6.60k|      formatting_node
 2450|  6.60k|    );
 2451|  6.60k|    assert(formatting_node_index != -1);
  ------------------
  |  Branch (2451:5): [True: 0, False: 6.60k]
  |  Branch (2451:5): [True: 6.60k, False: 0]
  ------------------
 2452|  6.60k|    if (formatting_node_index < bookmark) {
  ------------------
  |  Branch (2452:9): [True: 6.60k, False: 0]
  ------------------
 2453|  6.60k|      gumbo_debug (
 2454|  6.60k|        "Formatting node at %d is before bookmark at %d; decrementing.\n",
 2455|  6.60k|        formatting_node_index, bookmark
 2456|  6.60k|      );
 2457|  6.60k|      --bookmark;
 2458|  6.60k|    }
 2459|  6.60k|    gumbo_vector_remove_at (
 2460|  6.60k|      formatting_node_index,
 2461|  6.60k|      &state->_active_formatting_elements
 2462|  6.60k|    );
 2463|  6.60k|    assert(bookmark >= 0);
  ------------------
  |  Branch (2463:5): [True: 0, False: 6.60k]
  |  Branch (2463:5): [True: 6.60k, False: 0]
  ------------------
 2464|  6.60k|    assert((unsigned int) bookmark <= state->_active_formatting_elements.length);
  ------------------
  |  Branch (2464:5): [True: 0, False: 6.60k]
  |  Branch (2464:5): [True: 6.60k, False: 0]
  ------------------
 2465|  6.60k|    gumbo_vector_insert_at (
 2466|  6.60k|      new_formatting_node,
 2467|  6.60k|      bookmark,
 2468|  6.60k|      &state->_active_formatting_elements
 2469|  6.60k|    );
 2470|       |
 2471|       |    // Step 20.
 2472|  6.60k|    gumbo_vector_remove(formatting_node, &state->_open_elements);
 2473|  6.60k|    int insert_at = 1 + gumbo_vector_index_of (
 2474|  6.60k|      &state->_open_elements,
 2475|  6.60k|      furthest_block
 2476|  6.60k|    );
 2477|  6.60k|    assert(insert_at >= 0);
  ------------------
  |  Branch (2477:5): [True: 0, False: 6.60k]
  |  Branch (2477:5): [True: 6.60k, False: 0]
  ------------------
 2478|  6.60k|    assert((unsigned int) insert_at <= state->_open_elements.length);
  ------------------
  |  Branch (2478:5): [True: 0, False: 6.60k]
  |  Branch (2478:5): [True: 6.60k, False: 0]
  ------------------
 2479|  6.60k|    gumbo_vector_insert_at (
 2480|  6.60k|      new_formatting_node,
 2481|  6.60k|      insert_at,
 2482|  6.60k|      &state->_open_elements
 2483|  6.60k|    );
 2484|  6.60k|  }  // Step 21.
 2485|  23.0k|}
parser.c:adjust_mathml_attributes:
 2072|  5.13k|static void adjust_mathml_attributes(GumboToken* token) {
 2073|  5.13k|  assert(token->type == GUMBO_TOKEN_START_TAG);
  ------------------
  |  Branch (2073:3): [True: 0, False: 5.13k]
  |  Branch (2073:3): [True: 5.13k, False: 0]
  ------------------
 2074|  5.13k|  GumboAttribute* attr = gumbo_get_attribute (
 2075|  5.13k|    &token->v.start_tag.attributes,
 2076|  5.13k|    "definitionurl"
 2077|  5.13k|  );
 2078|  5.13k|  if (!attr) {
  ------------------
  |  Branch (2078:7): [True: 5.13k, False: 0]
  ------------------
 2079|  5.13k|    return;
 2080|  5.13k|  }
 2081|      0|  gumbo_free((void*) attr->name);
 2082|      0|  attr->name = gumbo_strdup("definitionURL");
 2083|      0|}
parser.c:adjust_foreign_attributes:
 2012|  21.0k|static void adjust_foreign_attributes(GumboToken* token) {
 2013|  21.0k|  assert(token->type == GUMBO_TOKEN_START_TAG);
  ------------------
  |  Branch (2013:3): [True: 0, False: 21.0k]
  |  Branch (2013:3): [True: 21.0k, False: 0]
  ------------------
 2014|  21.0k|  const GumboVector* attributes = &token->v.start_tag.attributes;
 2015|  32.9k|  for (unsigned int i = 0, n = attributes->length; i < n; ++i) {
  ------------------
  |  Branch (2015:52): [True: 11.8k, False: 21.0k]
  ------------------
 2016|  11.8k|    GumboAttribute* attr = attributes->data[i];
 2017|  11.8k|    const ForeignAttrReplacement* entry = gumbo_get_foreign_attr_replacement (
 2018|  11.8k|      attr->name,
 2019|  11.8k|      strlen(attr->name)
 2020|  11.8k|    );
 2021|  11.8k|    if (!entry) {
  ------------------
  |  Branch (2021:9): [True: 11.6k, False: 223]
  ------------------
 2022|  11.6k|      continue;
 2023|  11.6k|    }
 2024|    223|    gumbo_free((void*) attr->name);
 2025|    223|    attr->attr_namespace = entry->attr_namespace;
 2026|    223|    attr->name = gumbo_strdup(entry->local_name);
 2027|    223|  }
 2028|  21.0k|}
parser.c:insert_foreign_element:
 1258|  21.0k|) {
 1259|  21.0k|  assert(token->type == GUMBO_TOKEN_START_TAG);
  ------------------
  |  Branch (1259:3): [True: 0, False: 21.0k]
  |  Branch (1259:3): [True: 21.0k, False: 0]
  ------------------
 1260|  21.0k|  GumboNode* element = create_element_from_token(token, tag_namespace);
 1261|  21.0k|  insert_element(parser, element, false);
 1262|  21.0k|  gumbo_debug (
 1263|  21.0k|    "Inserting <%s> foreign element (@%p).\n",
 1264|  21.0k|    gumbo_normalized_tagname(element->v.element.tag),
 1265|  21.0k|    (void*)element
 1266|  21.0k|  );
 1267|  21.0k|  if (
 1268|  21.0k|    token_has_attribute(token, "xmlns")
  ------------------
  |  Branch (1268:5): [True: 0, False: 21.0k]
  ------------------
 1269|      0|    && !attribute_matches_case_sensitive (
  ------------------
  |  Branch (1269:8): [True: 0, False: 0]
  ------------------
 1270|      0|      &token->v.start_tag.attributes,
 1271|      0|      "xmlns",
 1272|      0|      kLegalXmlns[tag_namespace]
 1273|      0|    )
 1274|  21.0k|  ) {
 1275|       |    // TODO(jdtang): Since there're multiple possible error codes here, we
 1276|       |    // eventually need reason codes to differentiate them.
 1277|      0|    parser_add_parse_error(parser, token);
 1278|      0|  }
 1279|  21.0k|  if (
 1280|  21.0k|    token_has_attribute(token, "xmlns:xlink")
  ------------------
  |  Branch (1280:5): [True: 0, False: 21.0k]
  ------------------
 1281|      0|    && !attribute_matches_case_sensitive (
  ------------------
  |  Branch (1281:8): [True: 0, False: 0]
  ------------------
 1282|      0|      &token->v.start_tag.attributes,
 1283|      0|      "xmlns:xlink",
 1284|      0|      "http://www.w3.org/1999/xlink"
 1285|      0|    )
 1286|  21.0k|  ) {
 1287|      0|    parser_add_parse_error(parser, token);
 1288|      0|  }
 1289|  21.0k|  return element;
 1290|  21.0k|}
parser.c:token_has_attribute:
  263|  44.1k|static bool token_has_attribute(const GumboToken* token, const char* name) {
  264|  44.1k|  assert(token->type == GUMBO_TOKEN_START_TAG);
  ------------------
  |  Branch (264:3): [True: 0, False: 44.1k]
  |  Branch (264:3): [True: 44.1k, False: 0]
  ------------------
  265|  44.1k|  return gumbo_get_attribute(&token->v.start_tag.attributes, name) != NULL;
  266|  44.1k|}
parser.c:adjust_svg_attributes:
 2052|  15.8k|static void adjust_svg_attributes(GumboToken* token) {
 2053|  15.8k|  assert(token->type == GUMBO_TOKEN_START_TAG);
  ------------------
  |  Branch (2053:3): [True: 0, False: 15.8k]
  |  Branch (2053:3): [True: 15.8k, False: 0]
  ------------------
 2054|  15.8k|  const GumboVector* attributes = &token->v.start_tag.attributes;
 2055|  27.2k|  for (unsigned int i = 0, n = attributes->length; i < n; i++) {
  ------------------
  |  Branch (2055:52): [True: 11.3k, False: 15.8k]
  ------------------
 2056|  11.3k|    GumboAttribute* attr = (GumboAttribute*) attributes->data[i];
 2057|  11.3k|    const StringReplacement* replacement = gumbo_get_svg_attr_replacement (
 2058|  11.3k|      attr->name,
 2059|  11.3k|      attr->original_name.length
 2060|  11.3k|    );
 2061|  11.3k|    if (!replacement) {
  ------------------
  |  Branch (2061:9): [True: 11.1k, False: 201]
  ------------------
 2062|  11.1k|      continue;
 2063|  11.1k|    }
 2064|    201|    gumbo_free((void*) attr->name);
 2065|    201|    attr->name = gumbo_strdup(replacement->to);
 2066|    201|  }
 2067|  15.8k|}
parser.c:in_body_any_other_end_tag:
 2145|  13.1k|{
 2146|  13.1k|  GumboParserState* state = parser->_parser_state;
 2147|  13.1k|  GumboTag tag;
 2148|  13.1k|  const char* tagname;
 2149|       |
 2150|  13.1k|  if (token->type == GUMBO_TOKEN_END_TAG) {
  ------------------
  |  Branch (2150:7): [True: 12.9k, False: 198]
  ------------------
 2151|  12.9k|    tag = token->v.end_tag.tag;
 2152|  12.9k|    tagname = token->v.end_tag.name;
 2153|  12.9k|  } else {
 2154|    198|    assert(token->type == GUMBO_TOKEN_START_TAG);
  ------------------
  |  Branch (2154:5): [True: 0, False: 198]
  |  Branch (2154:5): [True: 198, False: 0]
  ------------------
 2155|    198|    tag = token->v.start_tag.tag;
 2156|    198|    tagname = token->v.start_tag.name;
 2157|    198|  }
 2158|       |
 2159|  13.1k|  assert(state->_open_elements.length > 0);
  ------------------
  |  Branch (2159:3): [True: 0, False: 13.1k]
  |  Branch (2159:3): [True: 13.1k, False: 0]
  ------------------
 2160|  13.1k|  assert(node_html_tag_is(state->_open_elements.data[0], GUMBO_TAG_HTML));
  ------------------
  |  Branch (2160:3): [True: 0, False: 13.1k]
  |  Branch (2160:3): [True: 13.1k, False: 0]
  ------------------
 2161|       |  // Walk up the stack of open elements until we find one that either:
 2162|       |  // a) Matches the tag name we saw
 2163|       |  // b) Is in the "special" category.
 2164|       |  // If we see a), implicitly close everything up to and including it. If we
 2165|       |  // see b), then record a parse error, don't close anything (except the
 2166|       |  // implied end tags) and ignore the end tag token.
 2167|   117k|  for (int i = state->_open_elements.length; --i >= 0;) {
  ------------------
  |  Branch (2167:46): [True: 117k, False: 0]
  ------------------
 2168|   117k|    const GumboNode* node = state->_open_elements.data[i];
 2169|   117k|    if (node_qualified_tagname_is(node, GUMBO_NAMESPACE_HTML, tag, tagname)) {
  ------------------
  |  Branch (2169:9): [True: 1.30k, False: 115k]
  ------------------
 2170|  1.30k|      generate_implied_end_tags(parser, tag, tagname);
 2171|       |      // <!DOCTYPE><body><sarcasm><foo></sarcasm> is an example of an error.
 2172|       |      // foo is the "current node" but sarcasm is node.
 2173|       |      // XXX: Write a test for this.
 2174|  1.30k|      if (node != get_current_node(parser)) {
  ------------------
  |  Branch (2174:11): [True: 310, False: 994]
  ------------------
 2175|    310|        parser_add_parse_error(parser, token);
 2176|    310|      }
 2177|  1.93k|      while (node != pop_current_node(parser))
  ------------------
  |  Branch (2177:14): [True: 634, False: 1.30k]
  ------------------
 2178|    634|        ;  // Pop everything.
 2179|  1.30k|      return;
 2180|   115k|    } else if (is_special_node(node)) {
  ------------------
  |  Branch (2180:16): [True: 11.8k, False: 103k]
  ------------------
 2181|  11.8k|      parser_add_parse_error(parser, token);
 2182|  11.8k|      ignore_token(parser);
 2183|  11.8k|      return;
 2184|  11.8k|    }
 2185|   117k|  }
 2186|       |  // <html> is in the special category, so we should never get here.
 2187|  13.1k|  assert(0 && "unreachable");
  ------------------
  |  Branch (2187:3): [Folded, False: 0]
  |  Branch (2187:3): [True: 0, False: 0]
  |  Branch (2187:3): [Folded, False: 0]
  |  Branch (2187:3): [True: 0, False: 0]
  ------------------
 2188|      0|}
parser.c:handle_text:
 3462|  1.35M|static void handle_text(GumboParser* parser, GumboToken* token) {
 3463|  1.35M|  if (
 3464|  1.35M|    token->type == GUMBO_TOKEN_CHARACTER
  ------------------
  |  Branch (3464:5): [True: 1.29M, False: 53.8k]
  ------------------
 3465|  53.8k|    || token->type == GUMBO_TOKEN_WHITESPACE
  ------------------
  |  Branch (3465:8): [True: 47.3k, False: 6.46k]
  ------------------
 3466|  1.35M|  ) {
 3467|  1.34M|    insert_text_token(parser, token);
 3468|  1.34M|    return;
 3469|  1.34M|  }
 3470|       |  // We provide only bare-bones script handling that doesn't involve any of
 3471|       |  // the parser-pause/already-started/script-nesting flags or re-entrant
 3472|       |  // invocations of the tokenizer. Because the intended usage of this library
 3473|       |  // is mostly for templating, refactoring, and static-analysis libraries, we
 3474|       |  // provide the script body as a text-node child of the <script> element.
 3475|       |  // This behavior doesn't support document.write of partial HTML elements,
 3476|       |  // but should be adequate for almost all other scripting support.
 3477|  6.46k|  if (token->type == GUMBO_TOKEN_EOF) {
  ------------------
  |  Branch (3477:7): [True: 2.26k, False: 4.20k]
  ------------------
 3478|  2.26k|    parser_add_parse_error(parser, token);
 3479|       |    parser->_parser_state->_reprocess_current_token = true;
 3480|  2.26k|  }
 3481|  6.46k|  pop_current_node(parser);
 3482|  6.46k|  set_insertion_mode(parser, parser->_parser_state->_original_insertion_mode);
 3483|  6.46k|}
parser.c:handle_in_table:
 3486|   444k|static void handle_in_table(GumboParser* parser, GumboToken* token) {
 3487|   444k|  GumboParserState* state = parser->_parser_state;
 3488|   444k|  if (
 3489|   444k|    (token->type == GUMBO_TOKEN_CHARACTER
  ------------------
  |  Branch (3489:6): [True: 308k, False: 135k]
  ------------------
 3490|   135k|     || token->type == GUMBO_TOKEN_WHITESPACE
  ------------------
  |  Branch (3490:9): [True: 5.39k, False: 130k]
  ------------------
 3491|   130k|     || token->type == GUMBO_TOKEN_NULL)
  ------------------
  |  Branch (3491:9): [True: 44.0k, False: 85.9k]
  ------------------
 3492|   358k|    && node_tag_in_set(get_current_node(parser), &(const TagSet) {
  ------------------
  |  Branch (3492:8): [True: 6.45k, False: 351k]
  ------------------
 3493|   358k|      TAG(TABLE), TAG(TBODY), TAG(TEMPLATE), TAG(TFOOT), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|   358k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TABLE), TAG(TBODY), TAG(TEMPLATE), TAG(TFOOT), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|   358k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TABLE), TAG(TBODY), TAG(TEMPLATE), TAG(TFOOT), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|   358k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TABLE), TAG(TBODY), TAG(TEMPLATE), TAG(TFOOT), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|   358k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TABLE), TAG(TBODY), TAG(TEMPLATE), TAG(TFOOT), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|   358k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TABLE), TAG(TBODY), TAG(TEMPLATE), TAG(TFOOT), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|   358k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3494|   358k|    })
 3495|   444k|  ) {
 3496|       |    // The "pending table character tokens" list described in the spec is
 3497|       |    // nothing more than the TextNodeBufferState. We accumulate text tokens as
 3498|       |    // normal, except that when we go to flush them in the handle_in_table_text,
 3499|       |    // we set _foster_parent_insertions if there're non-whitespace characters in
 3500|       |    // the buffer.
 3501|  6.45k|    assert(state->_text_node._buffer.length == 0);
  ------------------
  |  Branch (3501:5): [True: 0, False: 6.45k]
  |  Branch (3501:5): [True: 6.45k, False: 0]
  ------------------
 3502|  6.45k|    assert(state->_table_character_tokens.length == 0);
  ------------------
  |  Branch (3502:5): [True: 0, False: 6.45k]
  |  Branch (3502:5): [True: 6.45k, False: 0]
  ------------------
 3503|  6.45k|    state->_original_insertion_mode = state->_insertion_mode;
 3504|  6.45k|    state->_reprocess_current_token = true;
 3505|  6.45k|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_TABLE_TEXT);
 3506|  6.45k|    return;
 3507|  6.45k|  }
 3508|   437k|  if (token->type == GUMBO_TOKEN_COMMENT) {
  ------------------
  |  Branch (3508:7): [True: 1.27k, False: 436k]
  ------------------
 3509|  1.27k|    append_comment_node(parser, get_current_node(parser), token);
 3510|  1.27k|    return;
 3511|  1.27k|  }
 3512|   436k|  if (token->type == GUMBO_TOKEN_DOCTYPE) {
  ------------------
  |  Branch (3512:7): [True: 1.22k, False: 435k]
  ------------------
 3513|  1.22k|    parser_add_parse_error(parser, token);
 3514|  1.22k|    ignore_token(parser);
 3515|  1.22k|    return;
 3516|  1.22k|  }
 3517|   435k|  if (tag_is(token, kStartTag, GUMBO_TAG_CAPTION)) {
  ------------------
  |  Branch (3517:7): [True: 2.29k, False: 433k]
  ------------------
 3518|  2.29k|    clear_stack_to_table_context(parser);
 3519|  2.29k|    add_formatting_element(parser, &kActiveFormattingScopeMarker);
 3520|  2.29k|    insert_element_from_token(parser, token);
 3521|  2.29k|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_CAPTION);
 3522|  2.29k|    return;
 3523|  2.29k|  }
 3524|   433k|  if (tag_is(token, kStartTag, GUMBO_TAG_COLGROUP)) {
  ------------------
  |  Branch (3524:7): [True: 629, False: 432k]
  ------------------
 3525|    629|    clear_stack_to_table_context(parser);
 3526|    629|    insert_element_from_token(parser, token);
 3527|    629|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_COLUMN_GROUP);
 3528|    629|    return;
 3529|    629|  }
 3530|   432k|  if (tag_is(token, kStartTag, GUMBO_TAG_COL)) {
  ------------------
  |  Branch (3530:7): [True: 298, False: 432k]
  ------------------
 3531|    298|    clear_stack_to_table_context(parser);
 3532|    298|    insert_element_of_tag_type (
 3533|    298|      parser,
 3534|    298|      GUMBO_TAG_COLGROUP,
 3535|    298|      GUMBO_INSERTION_IMPLIED
 3536|    298|    );
 3537|    298|    state->_reprocess_current_token = true;
 3538|    298|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_COLUMN_GROUP);
 3539|    298|    return;
 3540|    298|  }
 3541|   432k|  if (
 3542|   432k|    tag_in(token, kStartTag, &(const TagSet) {
  ------------------
  |  Branch (3542:5): [True: 2.12k, False: 429k]
  ------------------
 3543|   432k|      TAG(TBODY), TAG(TFOOT), TAG(THEAD)
  ------------------
  |  |   40|   432k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TBODY), TAG(TFOOT), TAG(THEAD)
  ------------------
  |  |   40|   432k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TBODY), TAG(TFOOT), TAG(THEAD)
  ------------------
  |  |   40|   432k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3544|   432k|    })
 3545|   432k|  ) {
 3546|  2.12k|    clear_stack_to_table_context(parser);
 3547|  2.12k|    insert_element_from_token(parser, token);
 3548|  2.12k|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_TABLE_BODY);
 3549|  2.12k|    return;
 3550|  2.12k|  }
 3551|   429k|  if (
 3552|   429k|    tag_in(token, kStartTag, &(const TagSet) {
  ------------------
  |  Branch (3552:5): [True: 2.77k, False: 427k]
  ------------------
 3553|   429k|      TAG(TD), TAG(TH), TAG(TR)
  ------------------
  |  |   40|   429k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TD), TAG(TH), TAG(TR)
  ------------------
  |  |   40|   429k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TD), TAG(TH), TAG(TR)
  ------------------
  |  |   40|   429k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3554|   429k|    })
 3555|   429k|  ) {
 3556|  2.77k|    clear_stack_to_table_context(parser);
 3557|  2.77k|    insert_element_of_tag_type (
 3558|  2.77k|      parser,
 3559|  2.77k|      GUMBO_TAG_TBODY,
 3560|  2.77k|      GUMBO_INSERTION_IMPLIED
 3561|  2.77k|    );
 3562|  2.77k|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_TABLE_BODY);
 3563|  2.77k|    state->_reprocess_current_token = true;
 3564|  2.77k|    return;
 3565|  2.77k|  }
 3566|   427k|  if (tag_is(token, kStartTag, GUMBO_TAG_TABLE)) {
  ------------------
  |  Branch (3566:7): [True: 5.01k, False: 422k]
  ------------------
 3567|  5.01k|    parser_add_parse_error(parser, token);
 3568|  5.01k|    if (close_table(parser)) {
  ------------------
  |  Branch (3568:9): [True: 4.57k, False: 436]
  ------------------
 3569|  4.57k|      state->_reprocess_current_token = true;
 3570|  4.57k|    } else {
 3571|    436|      ignore_token(parser);
 3572|    436|    }
 3573|  5.01k|    return;
 3574|  5.01k|  }
 3575|   422k|  if (tag_is(token, kEndTag, GUMBO_TAG_TABLE)) {
  ------------------
  |  Branch (3575:7): [True: 946, False: 421k]
  ------------------
 3576|    946|    if (!close_table(parser)) {
  ------------------
  |  Branch (3576:9): [True: 390, False: 556]
  ------------------
 3577|    390|      parser_add_parse_error(parser, token);
 3578|    390|      return;
 3579|    390|    }
 3580|    556|    return;
 3581|    946|  }
 3582|   421k|  if (
 3583|   421k|    tag_in(token, kEndTag, &(const TagSet) {
  ------------------
  |  Branch (3583:5): [True: 570, False: 420k]
  ------------------
 3584|   421k|      TAG(BODY), TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(HTML),
  ------------------
  |  |   40|   421k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(HTML),
  ------------------
  |  |   40|   421k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(HTML),
  ------------------
  |  |   40|   421k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(HTML),
  ------------------
  |  |   40|   421k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(HTML),
  ------------------
  |  |   40|   421k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3585|   421k|      TAG(TBODY), TAG(TD), TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|   421k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TBODY), TAG(TD), TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|   421k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TBODY), TAG(TD), TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|   421k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TBODY), TAG(TD), TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|   421k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TBODY), TAG(TD), TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|   421k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TBODY), TAG(TD), TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|   421k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3586|   421k|    })
 3587|   421k|  ) {
 3588|    570|    parser_add_parse_error(parser, token);
 3589|    570|    ignore_token(parser);
 3590|    570|    return;
 3591|    570|  }
 3592|   420k|  if (
 3593|   420k|    tag_in(token, kStartTag, &(const TagSet){TAG(STYLE), TAG(SCRIPT), TAG(TEMPLATE)})
  ------------------
  |  |   40|   420k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  tag_in(token, kStartTag, &(const TagSet){TAG(STYLE), TAG(SCRIPT), TAG(TEMPLATE)})
  ------------------
  |  |   40|   420k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  tag_in(token, kStartTag, &(const TagSet){TAG(STYLE), TAG(SCRIPT), TAG(TEMPLATE)})
  ------------------
  |  |   40|   420k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
  |  Branch (3593:5): [True: 959, False: 419k]
  ------------------
 3594|   419k|    || (tag_is(token, kEndTag, GUMBO_TAG_TEMPLATE))
  ------------------
  |  Branch (3594:8): [True: 240, False: 419k]
  ------------------
 3595|   420k|  ) {
 3596|  1.19k|    handle_in_head(parser, token);
 3597|  1.19k|    return;
 3598|  1.19k|  }
 3599|   419k|  if (
 3600|   419k|    tag_is(token, kStartTag, GUMBO_TAG_INPUT)
  ------------------
  |  Branch (3600:5): [True: 586, False: 418k]
  ------------------
 3601|    586|    && attribute_matches(&token->v.start_tag.attributes, "type", "hidden")
  ------------------
  |  Branch (3601:8): [True: 217, False: 369]
  ------------------
 3602|   419k|  ) {
 3603|    217|    parser_add_parse_error(parser, token);
 3604|    217|    insert_element_from_token(parser, token);
 3605|    217|    pop_current_node(parser);
 3606|    217|    acknowledge_self_closing_tag(parser);
 3607|    217|    return;
 3608|    217|  }
 3609|   419k|  if (tag_is(token, kStartTag, GUMBO_TAG_FORM)) {
  ------------------
  |  Branch (3609:7): [True: 743, False: 418k]
  ------------------
 3610|    743|    parser_add_parse_error(parser, token);
 3611|    743|    if (state->_form_element || has_open_element(parser, GUMBO_TAG_TEMPLATE)) {
  ------------------
  |  Branch (3611:9): [True: 282, False: 461]
  |  Branch (3611:33): [True: 219, False: 242]
  ------------------
 3612|    501|      ignore_token(parser);
 3613|    501|      return;
 3614|    501|    }
 3615|    242|    state->_form_element = insert_element_from_token(parser, token);
 3616|    242|    pop_current_node(parser);
 3617|    242|    return;
 3618|    743|  }
 3619|   418k|  if (token->type == GUMBO_TOKEN_EOF) {
  ------------------
  |  Branch (3619:7): [True: 2.12k, False: 416k]
  ------------------
 3620|  2.12k|    handle_in_body(parser, token);
 3621|  2.12k|    return;
 3622|  2.12k|  }
 3623|       |  // foster-parenting-start-tag or foster-parenting-end-tag error
 3624|   416k|  parser_add_parse_error(parser, token);
 3625|   416k|  state->_foster_parent_insertions = true;
 3626|   416k|  handle_in_body(parser, token);
 3627|       |  state->_foster_parent_insertions = false;
 3628|   416k|}
parser.c:clear_stack_to_table_context:
 1113|  8.12k|static void clear_stack_to_table_context(GumboParser* parser) {
 1114|  8.12k|  static const TagSet tags = {TAG(HTML), TAG(TABLE), TAG(TEMPLATE)};
  ------------------
  |  |   40|  8.12k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                static const TagSet tags = {TAG(HTML), TAG(TABLE), TAG(TEMPLATE)};
  ------------------
  |  |   40|  8.12k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                static const TagSet tags = {TAG(HTML), TAG(TABLE), TAG(TEMPLATE)};
  ------------------
  |  |   40|  8.12k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1115|  12.2k|  while (!node_tag_in_set(get_current_node(parser), &tags)) {
  ------------------
  |  Branch (1115:10): [True: 4.07k, False: 8.12k]
  ------------------
 1116|  4.07k|    pop_current_node(parser);
 1117|  4.07k|  }
 1118|  8.12k|}
parser.c:close_table:
 1805|  5.96k|static bool close_table(GumboParser* parser) {
 1806|  5.96k|  if (!has_an_element_in_table_scope(parser, GUMBO_TAG_TABLE)) {
  ------------------
  |  Branch (1806:7): [True: 826, False: 5.13k]
  ------------------
 1807|    826|    return false;
 1808|    826|  }
 1809|       |
 1810|  5.13k|  GumboNode* node = pop_current_node(parser);
 1811|  11.2k|  while (!node_html_tag_is(node, GUMBO_TAG_TABLE)) {
  ------------------
  |  Branch (1811:10): [True: 6.14k, False: 5.13k]
  ------------------
 1812|  6.14k|    node = pop_current_node(parser);
 1813|  6.14k|  }
 1814|  5.13k|  reset_insertion_mode_appropriately(parser);
 1815|       |  return true;
 1816|  5.96k|}
parser.c:has_an_element_in_table_scope:
 1736|  31.7k|static bool has_an_element_in_table_scope(const GumboParser* parser, GumboTag tag) {
 1737|  31.7k|  static const TagSet tags = {TAG(HTML), TAG(TABLE), TAG(TEMPLATE)};
  ------------------
  |  |   40|  31.7k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                static const TagSet tags = {TAG(HTML), TAG(TABLE), TAG(TEMPLATE)};
  ------------------
  |  |   40|  31.7k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                static const TagSet tags = {TAG(HTML), TAG(TABLE), TAG(TEMPLATE)};
  ------------------
  |  |   40|  31.7k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1738|       |  return has_an_element_in_specific_scope(parser, 1, &tag, false, &tags);
 1739|  31.7k|}
parser.c:handle_in_table_text:
 3631|   287k|static void handle_in_table_text(GumboParser* parser, GumboToken* token) {
 3632|   287k|  if (token->type == GUMBO_TOKEN_NULL) {
  ------------------
  |  Branch (3632:7): [True: 14.0k, False: 273k]
  ------------------
 3633|  14.0k|    parser_add_parse_error(parser, token);
 3634|  14.0k|    ignore_token(parser);
 3635|  14.0k|    return;
 3636|  14.0k|  }
 3637|   273k|  GumboParserState* state = parser->_parser_state;
 3638|       |  // Non-whitespace tokens will cause parse errors later.
 3639|       |  // It's not entirely clear from the spec how this is supposed to work.
 3640|       |  // https://github.com/whatwg/html/issues/4046
 3641|   273k|  if (token->type == GUMBO_TOKEN_WHITESPACE
  ------------------
  |  Branch (3641:7): [True: 2.49k, False: 270k]
  ------------------
 3642|   270k|      || token->type == GUMBO_TOKEN_CHARACTER) {
  ------------------
  |  Branch (3642:10): [True: 264k, False: 6.45k]
  ------------------
 3643|   266k|    insert_text_token(parser, token);
 3644|   266k|    gumbo_character_token_buffer_append(token, &state->_table_character_tokens);
 3645|   266k|    return;
 3646|   266k|  }
 3647|       |
 3648|  6.45k|  GumboCharacterTokenBuffer* buffer = &state->_table_character_tokens;
 3649|  6.45k|  if (state->_text_node._type != GUMBO_NODE_WHITESPACE) {
  ------------------
  |  Branch (3649:7): [True: 5.96k, False: 493]
  ------------------
 3650|       |    // Each character in buffer is an error. Unfortunately, that means we need
 3651|       |    // to emit a bunch of errors at the appropriate locations.
 3652|   272k|    for (size_t i = 0, n = buffer->length; i < n; ++i) {
  ------------------
  |  Branch (3652:44): [True: 266k, False: 5.96k]
  ------------------
 3653|   266k|      GumboToken tok;
 3654|   266k|      gumbo_character_token_buffer_get(buffer, i, &tok);
 3655|       |      // foster-parenting-character error
 3656|   266k|      parser_add_parse_error(parser, &tok);
 3657|   266k|    }
 3658|  5.96k|    state->_foster_parent_insertions = true;
 3659|  5.96k|    set_frameset_not_ok(parser);
 3660|  5.96k|    reconstruct_active_formatting_elements(parser);
 3661|  5.96k|  }
 3662|  6.45k|  maybe_flush_text_node_buffer(parser);
 3663|  6.45k|  gumbo_character_token_buffer_clear(buffer);
 3664|  6.45k|  state->_foster_parent_insertions = false;
 3665|       |  state->_reprocess_current_token = true;
 3666|  6.45k|  state->_insertion_mode = state->_original_insertion_mode;
 3667|  6.45k|}
parser.c:handle_in_caption:
 3670|  27.1k|static void handle_in_caption(GumboParser* parser, GumboToken* token) {
 3671|  27.1k|  if (tag_is(token, kEndTag, GUMBO_TAG_CAPTION)) {
  ------------------
  |  Branch (3671:7): [True: 558, False: 26.5k]
  ------------------
 3672|    558|    if (!has_an_element_in_table_scope(parser, GUMBO_TAG_CAPTION)) {
  ------------------
  |  Branch (3672:9): [True: 0, False: 558]
  ------------------
 3673|      0|      parser_add_parse_error(parser, token);
 3674|      0|      ignore_token(parser);
 3675|      0|      return;
 3676|      0|    }
 3677|    558|    generate_implied_end_tags(parser, GUMBO_TAG_LAST, NULL);
 3678|    558|    if (!node_html_tag_is(get_current_node(parser), GUMBO_TAG_CAPTION))
  ------------------
  |  Branch (3678:9): [True: 344, False: 214]
  ------------------
 3679|    344|      parser_add_parse_error(parser, token);
 3680|  1.95k|    while (!node_html_tag_is(pop_current_node(parser), GUMBO_TAG_CAPTION))
  ------------------
  |  Branch (3680:12): [True: 1.39k, False: 558]
  ------------------
 3681|  1.39k|      ;
 3682|    558|    clear_active_formatting_elements(parser);
 3683|    558|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_TABLE);
 3684|    558|    return;
 3685|    558|  }
 3686|  26.5k|  if (
 3687|  26.5k|    tag_in(token, kStartTag, &(const TagSet) {
  ------------------
  |  Branch (3687:5): [True: 1.36k, False: 25.2k]
  ------------------
 3688|  26.5k|      TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(TBODY), TAG(TD),
  ------------------
  |  |   40|  26.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(TBODY), TAG(TD),
  ------------------
  |  |   40|  26.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(TBODY), TAG(TD),
  ------------------
  |  |   40|  26.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(TBODY), TAG(TD),
  ------------------
  |  |   40|  26.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(TBODY), TAG(TD),
  ------------------
  |  |   40|  26.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3689|  26.5k|      TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  26.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  26.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  26.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  26.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3690|  26.5k|    })
 3691|  25.2k|    || (tag_is(token, kEndTag, GUMBO_TAG_TABLE))
  ------------------
  |  Branch (3691:8): [True: 227, False: 24.9k]
  ------------------
 3692|  26.5k|  ) {
 3693|  1.59k|    if (!has_an_element_in_table_scope(parser, GUMBO_TAG_CAPTION)) {
  ------------------
  |  Branch (3693:9): [True: 0, False: 1.59k]
  ------------------
 3694|      0|      parser_add_parse_error(parser, token);
 3695|      0|      ignore_token(parser);
 3696|      0|      return;
 3697|      0|    }
 3698|  1.59k|    generate_implied_end_tags(parser, GUMBO_TAG_LAST, NULL);
 3699|  1.59k|    if (!node_html_tag_is(get_current_node(parser), GUMBO_TAG_CAPTION))
  ------------------
  |  Branch (3699:9): [True: 559, False: 1.03k]
  ------------------
 3700|    559|      parser_add_parse_error(parser, token);
 3701|  2.95k|    while (!node_html_tag_is(pop_current_node(parser), GUMBO_TAG_CAPTION))
  ------------------
  |  Branch (3701:12): [True: 1.35k, False: 1.59k]
  ------------------
 3702|  1.35k|      ;
 3703|  1.59k|    clear_active_formatting_elements(parser);
 3704|  1.59k|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_TABLE);
 3705|  1.59k|    parser->_parser_state->_reprocess_current_token = true;
 3706|  1.59k|    return;
 3707|  1.59k|  }
 3708|  24.9k|  if (
 3709|  24.9k|    tag_in(token, kEndTag, &(const TagSet) {
  ------------------
  |  Branch (3709:5): [True: 200, False: 24.7k]
  ------------------
 3710|  24.9k|      TAG(BODY), TAG(COL), TAG(COLGROUP), TAG(HTML), TAG(TBODY), TAG(TD),
  ------------------
  |  |   40|  24.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(COL), TAG(COLGROUP), TAG(HTML), TAG(TBODY), TAG(TD),
  ------------------
  |  |   40|  24.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(COL), TAG(COLGROUP), TAG(HTML), TAG(TBODY), TAG(TD),
  ------------------
  |  |   40|  24.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(COL), TAG(COLGROUP), TAG(HTML), TAG(TBODY), TAG(TD),
  ------------------
  |  |   40|  24.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(COL), TAG(COLGROUP), TAG(HTML), TAG(TBODY), TAG(TD),
  ------------------
  |  |   40|  24.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(COL), TAG(COLGROUP), TAG(HTML), TAG(TBODY), TAG(TD),
  ------------------
  |  |   40|  24.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3711|  24.9k|      TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  24.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  24.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  24.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  24.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3712|  24.9k|    })
 3713|  24.9k|  ) {
 3714|    200|    parser_add_parse_error(parser, token);
 3715|    200|    ignore_token(parser);
 3716|    200|    return;
 3717|    200|  }
 3718|  24.7k|  handle_in_body(parser, token);
 3719|  24.7k|}
parser.c:handle_in_column_group:
 3722|  53.6k|static void handle_in_column_group(GumboParser* parser, GumboToken* token) {
 3723|  53.6k|  if (token->type == GUMBO_TOKEN_WHITESPACE) {
  ------------------
  |  Branch (3723:7): [True: 9.11k, False: 44.5k]
  ------------------
 3724|  9.11k|    insert_text_token(parser, token);
 3725|  9.11k|    return;
 3726|  9.11k|  }
 3727|  44.5k|  if (token->type == GUMBO_TOKEN_COMMENT) {
  ------------------
  |  Branch (3727:7): [True: 443, False: 44.1k]
  ------------------
 3728|    443|    append_comment_node(parser, get_current_node(parser), token);
 3729|    443|    return;
 3730|    443|  }
 3731|  44.1k|  if (token->type == GUMBO_TOKEN_DOCTYPE) {
  ------------------
  |  Branch (3731:7): [True: 217, False: 43.9k]
  ------------------
 3732|    217|    parser_add_parse_error(parser, token);
 3733|    217|    ignore_token(parser);
 3734|    217|    return;
 3735|    217|  }
 3736|  43.9k|  if (tag_is(token, kStartTag, GUMBO_TAG_HTML)) {
  ------------------
  |  Branch (3736:7): [True: 197, False: 43.7k]
  ------------------
 3737|    197|    handle_in_body(parser, token);
 3738|    197|    return;
 3739|    197|  }
 3740|  43.7k|  if (tag_is(token, kStartTag, GUMBO_TAG_COL)) {
  ------------------
  |  Branch (3740:7): [True: 1.57k, False: 42.1k]
  ------------------
 3741|  1.57k|    insert_element_from_token(parser, token);
 3742|  1.57k|    pop_current_node(parser);
 3743|  1.57k|    acknowledge_self_closing_tag(parser);
 3744|  1.57k|    return;
 3745|  1.57k|  }
 3746|  42.1k|  if (tag_is(token, kEndTag, GUMBO_TAG_COLGROUP)) {
  ------------------
  |  Branch (3746:7): [True: 441, False: 41.6k]
  ------------------
 3747|    441|    if (!node_html_tag_is(get_current_node(parser), GUMBO_TAG_COLGROUP)) {
  ------------------
  |  Branch (3747:9): [True: 230, False: 211]
  ------------------
 3748|    230|      parser_add_parse_error(parser, token);
 3749|    230|      ignore_token(parser);
 3750|    230|      return;
 3751|    230|    }
 3752|    211|    pop_current_node(parser);
 3753|    211|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_TABLE);
 3754|    211|    return;
 3755|    441|  }
 3756|  41.6k|  if (tag_is(token, kEndTag, GUMBO_TAG_COL)) {
  ------------------
  |  Branch (3756:7): [True: 420, False: 41.2k]
  ------------------
 3757|    420|    parser_add_parse_error(parser, token);
 3758|    420|    ignore_token(parser);
 3759|    420|    return;
 3760|    420|  }
 3761|  41.2k|  if (
 3762|  41.2k|    tag_is(token, kStartTag, GUMBO_TAG_TEMPLATE)
  ------------------
  |  Branch (3762:5): [True: 679, False: 40.5k]
  ------------------
 3763|  40.5k|    || tag_is(token, kEndTag, GUMBO_TAG_TEMPLATE)
  ------------------
  |  Branch (3763:8): [True: 219, False: 40.3k]
  ------------------
 3764|  41.2k|  ) {
 3765|    898|    handle_in_head(parser, token);
 3766|    898|    return;
 3767|    898|  }
 3768|  40.3k|  if (token->type == GUMBO_TOKEN_EOF) {
  ------------------
  |  Branch (3768:7): [True: 548, False: 39.8k]
  ------------------
 3769|    548|    handle_in_body(parser, token);
 3770|    548|    return;
 3771|    548|  }
 3772|  39.8k|  if (!node_html_tag_is(get_current_node(parser), GUMBO_TAG_COLGROUP)) {
  ------------------
  |  Branch (3772:7): [True: 39.2k, False: 610]
  ------------------
 3773|  39.2k|    parser_add_parse_error(parser, token);
 3774|  39.2k|    ignore_token(parser);
 3775|  39.2k|    return;
 3776|  39.2k|  }
 3777|    610|  pop_current_node(parser);
 3778|    610|  set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_TABLE);
 3779|       |  parser->_parser_state->_reprocess_current_token = true;
 3780|    610|}
parser.c:handle_in_table_body:
 3783|  40.2k|static void handle_in_table_body(GumboParser* parser, GumboToken* token) {
 3784|  40.2k|  if (tag_is(token, kStartTag, GUMBO_TAG_TR)) {
  ------------------
  |  Branch (3784:7): [True: 3.71k, False: 36.5k]
  ------------------
 3785|  3.71k|    clear_stack_to_table_body_context(parser);
 3786|  3.71k|    insert_element_from_token(parser, token);
 3787|  3.71k|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_ROW);
 3788|  3.71k|    return;
 3789|  3.71k|  }
 3790|  36.5k|  if (tag_in(token, kStartTag, &td_th_tags)) {
  ------------------
  |  Branch (3790:7): [True: 2.45k, False: 34.0k]
  ------------------
 3791|  2.45k|    parser_add_parse_error(parser, token);
 3792|  2.45k|    clear_stack_to_table_body_context(parser);
 3793|  2.45k|    insert_element_of_tag_type(parser, GUMBO_TAG_TR, GUMBO_INSERTION_IMPLIED);
 3794|  2.45k|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_ROW);
 3795|  2.45k|    parser->_parser_state->_reprocess_current_token = true;
 3796|  2.45k|    return;
 3797|  2.45k|  }
 3798|  34.0k|  if (
 3799|  34.0k|    tag_in(token, kEndTag, &(const TagSet){TAG(TBODY), TAG(TFOOT), TAG(THEAD)})
  ------------------
  |  |   40|  34.0k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  tag_in(token, kEndTag, &(const TagSet){TAG(TBODY), TAG(TFOOT), TAG(THEAD)})
  ------------------
  |  |   40|  34.0k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  tag_in(token, kEndTag, &(const TagSet){TAG(TBODY), TAG(TFOOT), TAG(THEAD)})
  ------------------
  |  |   40|  34.0k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
  |  Branch (3799:5): [True: 808, False: 33.2k]
  ------------------
 3800|  34.0k|  ) {
 3801|    808|    if (!has_an_element_in_table_scope(parser, token->v.end_tag.tag)) {
  ------------------
  |  Branch (3801:9): [True: 237, False: 571]
  ------------------
 3802|    237|      parser_add_parse_error(parser, token);
 3803|    237|      ignore_token(parser);
 3804|    237|      return;
 3805|    237|    }
 3806|    571|    clear_stack_to_table_body_context(parser);
 3807|    571|    pop_current_node(parser);
 3808|    571|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_TABLE);
 3809|    571|    return;
 3810|    808|  }
 3811|  33.2k|  if (
 3812|  33.2k|    tag_in(token, kStartTag, &(const TagSet) {
  ------------------
  |  Branch (3812:5): [True: 1.82k, False: 31.4k]
  ------------------
 3813|  33.2k|      TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(TBODY), TAG(TFOOT),
  ------------------
  |  |   40|  33.2k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(TBODY), TAG(TFOOT),
  ------------------
  |  |   40|  33.2k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(TBODY), TAG(TFOOT),
  ------------------
  |  |   40|  33.2k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(TBODY), TAG(TFOOT),
  ------------------
  |  |   40|  33.2k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(TBODY), TAG(TFOOT),
  ------------------
  |  |   40|  33.2k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3814|  33.2k|      TAG(THEAD)
  ------------------
  |  |   40|  33.2k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3815|  33.2k|    })
 3816|  31.4k|    || tag_is(token, kEndTag, GUMBO_TAG_TABLE)
  ------------------
  |  Branch (3816:8): [True: 363, False: 31.0k]
  ------------------
 3817|  33.2k|  ) {
 3818|  2.18k|    if (
 3819|  2.18k|      !(
 3820|  2.18k|        has_an_element_in_table_scope(parser, GUMBO_TAG_TBODY)
  ------------------
  |  Branch (3820:9): [True: 600, False: 1.58k]
  ------------------
 3821|  1.58k|        || has_an_element_in_table_scope(parser, GUMBO_TAG_THEAD)
  ------------------
  |  Branch (3821:12): [True: 609, False: 978]
  ------------------
 3822|    978|        || has_an_element_in_table_scope(parser, GUMBO_TAG_TFOOT)
  ------------------
  |  Branch (3822:12): [True: 486, False: 492]
  ------------------
 3823|  2.18k|      )
 3824|  2.18k|    ) {
 3825|    492|      parser_add_parse_error(parser, token);
 3826|    492|      ignore_token(parser);
 3827|    492|      return;
 3828|    492|    }
 3829|  1.69k|    clear_stack_to_table_body_context(parser);
 3830|  1.69k|    pop_current_node(parser);
 3831|  1.69k|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_TABLE);
 3832|  1.69k|    parser->_parser_state->_reprocess_current_token = true;
 3833|  1.69k|    return;
 3834|  2.18k|  }
 3835|  31.0k|  if (
 3836|  31.0k|    tag_in(token, kEndTag, &(const TagSet) {
  ------------------
  |  Branch (3836:5): [True: 312, False: 30.7k]
  ------------------
 3837|  31.0k|      TAG(BODY), TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(HTML), TAG(TD),
  ------------------
  |  |   40|  31.0k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(HTML), TAG(TD),
  ------------------
  |  |   40|  31.0k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(HTML), TAG(TD),
  ------------------
  |  |   40|  31.0k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(HTML), TAG(TD),
  ------------------
  |  |   40|  31.0k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(HTML), TAG(TD),
  ------------------
  |  |   40|  31.0k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(HTML), TAG(TD),
  ------------------
  |  |   40|  31.0k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3838|  31.0k|      TAG(TH), TAG(TR)
  ------------------
  |  |   40|  31.0k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TH), TAG(TR)
  ------------------
  |  |   40|  31.0k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3839|  31.0k|    })
 3840|  31.0k|  ) {
 3841|    312|    parser_add_parse_error(parser, token);
 3842|    312|    ignore_token(parser);
 3843|    312|    return;
 3844|    312|  }
 3845|  30.7k|  handle_in_table(parser, token);
 3846|  30.7k|}
parser.c:clear_stack_to_table_body_context:
 1121|  8.43k|static void clear_stack_to_table_body_context(GumboParser* parser) {
 1122|  8.43k|  static const TagSet tags = {
 1123|  8.43k|    TAG(HTML), TAG(TBODY), TAG(TFOOT), TAG(THEAD), TAG(TEMPLATE)
  ------------------
  |  |   40|  8.43k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(HTML), TAG(TBODY), TAG(TFOOT), TAG(THEAD), TAG(TEMPLATE)
  ------------------
  |  |   40|  8.43k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(HTML), TAG(TBODY), TAG(TFOOT), TAG(THEAD), TAG(TEMPLATE)
  ------------------
  |  |   40|  8.43k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(HTML), TAG(TBODY), TAG(TFOOT), TAG(THEAD), TAG(TEMPLATE)
  ------------------
  |  |   40|  8.43k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(HTML), TAG(TBODY), TAG(TFOOT), TAG(THEAD), TAG(TEMPLATE)
  ------------------
  |  |   40|  8.43k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1124|  8.43k|  };
 1125|  11.2k|  while (!node_tag_in_set(get_current_node(parser), &tags)) {
  ------------------
  |  Branch (1125:10): [True: 2.77k, False: 8.43k]
  ------------------
 1126|  2.77k|    pop_current_node(parser);
 1127|  2.77k|  }
 1128|  8.43k|}
parser.c:handle_in_row:
 3849|   131k|static void handle_in_row(GumboParser* parser, GumboToken* token) {
 3850|   131k|  if (tag_in(token, kStartTag, &td_th_tags)) {
  ------------------
  |  Branch (3850:7): [True: 5.86k, False: 125k]
  ------------------
 3851|  5.86k|    clear_stack_to_table_row_context(parser);
 3852|  5.86k|    insert_element_from_token(parser, token);
 3853|  5.86k|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_CELL);
 3854|  5.86k|    add_formatting_element(parser, &kActiveFormattingScopeMarker);
 3855|  5.86k|    return;
 3856|  5.86k|  }
 3857|   125k|  if (tag_is(token, kEndTag, GUMBO_TAG_TR)) {
  ------------------
  |  Branch (3857:7): [True: 1.01k, False: 124k]
  ------------------
 3858|  1.01k|    if (!has_an_element_in_table_scope(parser, GUMBO_TAG_TR)) {
  ------------------
  |  Branch (3858:9): [True: 260, False: 754]
  ------------------
 3859|    260|      parser_add_parse_error(parser, token);
 3860|    260|      ignore_token(parser);
 3861|    260|      return;
 3862|    260|    }
 3863|    754|    clear_stack_to_table_row_context(parser);
 3864|    754|    pop_current_node(parser);
 3865|    754|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_TABLE_BODY);
 3866|    754|    return;
 3867|  1.01k|  }
 3868|   124k|  if (
 3869|   124k|    tag_in(token, kStartTag, &(const TagSet) {
  ------------------
  |  Branch (3869:5): [True: 2.61k, False: 121k]
  ------------------
 3870|   124k|      TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(TBODY), TAG(TFOOT),
  ------------------
  |  |   40|   124k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(TBODY), TAG(TFOOT),
  ------------------
  |  |   40|   124k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(TBODY), TAG(TFOOT),
  ------------------
  |  |   40|   124k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(TBODY), TAG(TFOOT),
  ------------------
  |  |   40|   124k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(TBODY), TAG(TFOOT),
  ------------------
  |  |   40|   124k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3871|   124k|      TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|   124k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|   124k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3872|   124k|    })
 3873|   121k|    || tag_is(token, kEndTag, GUMBO_TAG_TABLE)
  ------------------
  |  Branch (3873:8): [True: 349, False: 121k]
  ------------------
 3874|   124k|  ) {
 3875|  2.96k|    if (!has_an_element_in_table_scope(parser, GUMBO_TAG_TR)) {
  ------------------
  |  Branch (3875:9): [True: 655, False: 2.30k]
  ------------------
 3876|    655|      parser_add_parse_error(parser, token);
 3877|    655|      ignore_token(parser);
 3878|    655|      return;
 3879|    655|    }
 3880|  2.30k|    clear_stack_to_table_row_context(parser);
 3881|  2.30k|    pop_current_node(parser);
 3882|  2.30k|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_TABLE_BODY);
 3883|  2.30k|    parser->_parser_state->_reprocess_current_token = true;
 3884|  2.30k|    return;
 3885|  2.96k|  }
 3886|   121k|  if (
 3887|   121k|    tag_in(token, kEndTag, &(const TagSet) {TAG(TBODY), TAG(TFOOT), TAG(THEAD)})
  ------------------
  |  |   40|   121k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  tag_in(token, kEndTag, &(const TagSet) {TAG(TBODY), TAG(TFOOT), TAG(THEAD)})
  ------------------
  |  |   40|   121k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  tag_in(token, kEndTag, &(const TagSet) {TAG(TBODY), TAG(TFOOT), TAG(THEAD)})
  ------------------
  |  |   40|   121k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
  |  Branch (3887:5): [True: 644, False: 120k]
  ------------------
 3888|   121k|  ) {
 3889|    644|    if (!has_an_element_in_table_scope(parser, token->v.end_tag.tag)) {
  ------------------
  |  Branch (3889:9): [True: 268, False: 376]
  ------------------
 3890|    268|      parser_add_parse_error(parser, token);
 3891|    268|      ignore_token(parser);
 3892|    268|      return;
 3893|    268|    }
 3894|    376|    if (!has_an_element_in_table_scope(parser, GUMBO_TAG_TR)) {
  ------------------
  |  Branch (3894:9): [True: 0, False: 376]
  ------------------
 3895|      0|      ignore_token(parser);
 3896|      0|      return;
 3897|      0|    }
 3898|    376|    clear_stack_to_table_row_context(parser);
 3899|    376|    pop_current_node(parser);
 3900|    376|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_TABLE_BODY);
 3901|    376|    parser->_parser_state->_reprocess_current_token = true;
 3902|    376|    return;
 3903|    376|  }
 3904|   120k|  if (
 3905|   120k|    tag_in(token, kEndTag, &(const TagSet) {
  ------------------
  |  Branch (3905:5): [True: 345, False: 120k]
  ------------------
 3906|   120k|      TAG(BODY), TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(HTML),
  ------------------
  |  |   40|   120k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(HTML),
  ------------------
  |  |   40|   120k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(HTML),
  ------------------
  |  |   40|   120k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(HTML),
  ------------------
  |  |   40|   120k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(HTML),
  ------------------
  |  |   40|   120k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3907|   120k|      TAG(TD), TAG(TH)
  ------------------
  |  |   40|   120k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TD), TAG(TH)
  ------------------
  |  |   40|   120k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3908|   120k|    })
 3909|   120k|  ) {
 3910|    345|    parser_add_parse_error(parser, token);
 3911|    345|    ignore_token(parser);
 3912|    345|    return;
 3913|    345|  }
 3914|   120k|  handle_in_table(parser, token);
 3915|   120k|}
parser.c:clear_stack_to_table_row_context:
 1105|  9.30k|static void clear_stack_to_table_row_context(GumboParser* parser) {
 1106|  9.30k|  static const TagSet tags = {TAG(HTML), TAG(TR), TAG(TEMPLATE)};
  ------------------
  |  |   40|  9.30k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                static const TagSet tags = {TAG(HTML), TAG(TR), TAG(TEMPLATE)};
  ------------------
  |  |   40|  9.30k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                static const TagSet tags = {TAG(HTML), TAG(TR), TAG(TEMPLATE)};
  ------------------
  |  |   40|  9.30k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1107|  41.3k|  while (!node_tag_in_set(get_current_node(parser), &tags)) {
  ------------------
  |  Branch (1107:10): [True: 32.0k, False: 9.30k]
  ------------------
 1108|  32.0k|    pop_current_node(parser);
 1109|  32.0k|  }
 1110|  9.30k|}
parser.c:handle_in_cell:
 3918|  83.2k|static void handle_in_cell(GumboParser* parser, GumboToken* token) {
 3919|  83.2k|  if (tag_in(token, kEndTag, &td_th_tags)) {
  ------------------
  |  Branch (3919:7): [True: 683, False: 82.5k]
  ------------------
 3920|    683|    GumboTag token_tag = token->v.end_tag.tag;
 3921|    683|    if (!has_an_element_in_table_scope(parser, token_tag)) {
  ------------------
  |  Branch (3921:9): [True: 246, False: 437]
  ------------------
 3922|    246|      parser_add_parse_error(parser, token);
 3923|    246|      ignore_token(parser);
 3924|    246|      return;
 3925|    246|    }
 3926|    437|    close_table_cell(parser, token, token_tag);
 3927|    437|    return;
 3928|    683|  }
 3929|  82.5k|  if (
 3930|  82.5k|    tag_in(token, kStartTag, &(const TagSet) {
  ------------------
  |  Branch (3930:5): [True: 2.78k, False: 79.7k]
  ------------------
 3931|  82.5k|      TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(TBODY), TAG(TD),
  ------------------
  |  |   40|  82.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(TBODY), TAG(TD),
  ------------------
  |  |   40|  82.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(TBODY), TAG(TD),
  ------------------
  |  |   40|  82.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(TBODY), TAG(TD),
  ------------------
  |  |   40|  82.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(TBODY), TAG(TD),
  ------------------
  |  |   40|  82.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3932|  82.5k|      TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  82.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  82.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  82.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TFOOT), TAG(TH), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  82.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3933|  82.5k|    })
 3934|  82.5k|  ) {
 3935|  2.78k|    gumbo_debug("Handling <td> in cell.\n");
 3936|  2.78k|    if (
 3937|  2.78k|      !has_an_element_in_table_scope(parser, GUMBO_TAG_TH)
  ------------------
  |  Branch (3937:7): [True: 1.87k, False: 901]
  ------------------
 3938|  1.87k|      && !has_an_element_in_table_scope(parser, GUMBO_TAG_TD)
  ------------------
  |  Branch (3938:10): [True: 0, False: 1.87k]
  ------------------
 3939|  2.78k|    ) {
 3940|      0|      gumbo_debug("Bailing out because there's no <td> or <th> in scope.\n");
 3941|      0|      parser_add_parse_error(parser, token);
 3942|      0|      ignore_token(parser);
 3943|      0|      return;
 3944|      0|    }
 3945|  2.78k|    parser->_parser_state->_reprocess_current_token = true;
 3946|  2.78k|    close_current_cell(parser, token);
 3947|  2.78k|    return;
 3948|  2.78k|  }
 3949|  79.7k|  if (
 3950|  79.7k|    tag_in(token, kEndTag, &(const TagSet) {
  ------------------
  |  Branch (3950:5): [True: 243, False: 79.5k]
  ------------------
 3951|  79.7k|      TAG(BODY), TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(HTML)
  ------------------
  |  |   40|  79.7k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(HTML)
  ------------------
  |  |   40|  79.7k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(HTML)
  ------------------
  |  |   40|  79.7k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(HTML)
  ------------------
  |  |   40|  79.7k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BODY), TAG(CAPTION), TAG(COL), TAG(COLGROUP), TAG(HTML)
  ------------------
  |  |   40|  79.7k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3952|  79.7k|    })
 3953|  79.7k|  ) {
 3954|    243|    parser_add_parse_error(parser, token);
 3955|    243|    ignore_token(parser);
 3956|    243|    return;
 3957|    243|  }
 3958|  79.5k|  if (
 3959|  79.5k|    tag_in(token, kEndTag, &(const TagSet) {
  ------------------
  |  Branch (3959:5): [True: 774, False: 78.7k]
  ------------------
 3960|  79.5k|      TAG(TABLE), TAG(TBODY), TAG(TFOOT), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  79.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TABLE), TAG(TBODY), TAG(TFOOT), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  79.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TABLE), TAG(TBODY), TAG(TFOOT), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  79.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TABLE), TAG(TBODY), TAG(TFOOT), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  79.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TABLE), TAG(TBODY), TAG(TFOOT), TAG(THEAD), TAG(TR)
  ------------------
  |  |   40|  79.5k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 3961|  79.5k|    })
 3962|  79.5k|  ) {
 3963|    774|    if (!has_an_element_in_table_scope(parser, token->v.end_tag.tag)) {
  ------------------
  |  Branch (3963:9): [True: 419, False: 355]
  ------------------
 3964|    419|      parser_add_parse_error(parser, token);
 3965|    419|      ignore_token(parser);
 3966|    419|      return;
 3967|    419|    }
 3968|    355|    parser->_parser_state->_reprocess_current_token = true;
 3969|    355|    close_current_cell(parser, token);
 3970|    355|    return;
 3971|    774|  }
 3972|  78.7k|  handle_in_body(parser, token);
 3973|  78.7k|}
parser.c:close_table_cell:
 1824|  3.57k|) {
 1825|  3.57k|  generate_implied_end_tags(parser, GUMBO_TAG_LAST, NULL);
 1826|  3.57k|  const GumboNode* node = get_current_node(parser);
 1827|  3.57k|  if (!node_html_tag_is(node, cell_tag))
  ------------------
  |  Branch (1827:7): [True: 776, False: 2.79k]
  ------------------
 1828|    776|    parser_add_parse_error(parser, token);
 1829|  5.83k|  do {
 1830|  5.83k|    node = pop_current_node(parser);
 1831|  5.83k|  } while (!node_html_tag_is(node, cell_tag));
  ------------------
  |  Branch (1831:12): [True: 2.26k, False: 3.57k]
  ------------------
 1832|       |
 1833|  3.57k|  clear_active_formatting_elements(parser);
 1834|  3.57k|  set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_ROW);
 1835|  3.57k|}
parser.c:close_current_cell:
 1839|  3.13k|static void close_current_cell(GumboParser* parser, const GumboToken* token) {
 1840|  3.13k|  GumboTag cell_tag;
 1841|  3.13k|  if (has_an_element_in_table_scope(parser, GUMBO_TAG_TD)) {
  ------------------
  |  Branch (1841:7): [True: 2.11k, False: 1.01k]
  ------------------
 1842|  2.11k|    assert(!has_an_element_in_table_scope(parser, GUMBO_TAG_TH));
  ------------------
  |  Branch (1842:5): [True: 0, False: 2.11k]
  |  Branch (1842:5): [True: 2.11k, False: 0]
  ------------------
 1843|  2.11k|    cell_tag = GUMBO_TAG_TD;
 1844|  2.11k|  } else {
 1845|  1.01k|    assert(has_an_element_in_table_scope(parser, GUMBO_TAG_TH));
  ------------------
  |  Branch (1845:5): [True: 0, False: 1.01k]
  |  Branch (1845:5): [True: 1.01k, False: 0]
  ------------------
 1846|  1.01k|    cell_tag = GUMBO_TAG_TH;
 1847|  1.01k|  }
 1848|  3.13k|  close_table_cell(parser, token, cell_tag);
 1849|  3.13k|}
parser.c:handle_in_select:
 3976|   180k|static void handle_in_select(GumboParser* parser, GumboToken* token) {
 3977|   180k|  if (token->type == GUMBO_TOKEN_NULL) {
  ------------------
  |  Branch (3977:7): [True: 11.5k, False: 168k]
  ------------------
 3978|  11.5k|    parser_add_parse_error(parser, token);
 3979|  11.5k|    ignore_token(parser);
 3980|  11.5k|    return;
 3981|  11.5k|  }
 3982|   168k|  if (
 3983|   168k|    token->type == GUMBO_TOKEN_CHARACTER
  ------------------
  |  Branch (3983:5): [True: 146k, False: 22.5k]
  ------------------
 3984|  22.5k|    || token->type == GUMBO_TOKEN_WHITESPACE
  ------------------
  |  Branch (3984:8): [True: 1.69k, False: 20.9k]
  ------------------
 3985|   168k|  ) {
 3986|   147k|    insert_text_token(parser, token);
 3987|   147k|    return;
 3988|   147k|  }
 3989|  20.9k|  if (token->type == GUMBO_TOKEN_COMMENT) {
  ------------------
  |  Branch (3989:7): [True: 598, False: 20.3k]
  ------------------
 3990|    598|    append_comment_node(parser, get_current_node(parser), token);
 3991|    598|    return;
 3992|    598|  }
 3993|  20.3k|  if (token->type == GUMBO_TOKEN_DOCTYPE) {
  ------------------
  |  Branch (3993:7): [True: 398, False: 19.9k]
  ------------------
 3994|    398|    parser_add_parse_error(parser, token);
 3995|    398|    ignore_token(parser);
 3996|    398|    return;
 3997|    398|  }
 3998|  19.9k|  if (tag_is(token, kStartTag, GUMBO_TAG_HTML)) {
  ------------------
  |  Branch (3998:7): [True: 527, False: 19.3k]
  ------------------
 3999|    527|    handle_in_body(parser, token);
 4000|    527|    return;
 4001|    527|  }
 4002|  19.3k|  if (tag_is(token, kStartTag, GUMBO_TAG_OPTION)) {
  ------------------
  |  Branch (4002:7): [True: 1.80k, False: 17.5k]
  ------------------
 4003|  1.80k|    if (node_html_tag_is(get_current_node(parser), GUMBO_TAG_OPTION)) {
  ------------------
  |  Branch (4003:9): [True: 543, False: 1.26k]
  ------------------
 4004|    543|      pop_current_node(parser);
 4005|    543|    }
 4006|  1.80k|    insert_element_from_token(parser, token);
 4007|  1.80k|    return;
 4008|  1.80k|  }
 4009|  17.5k|  if (tag_is(token, kStartTag, GUMBO_TAG_OPTGROUP)) {
  ------------------
  |  Branch (4009:7): [True: 1.57k, False: 15.9k]
  ------------------
 4010|  1.57k|    if (node_html_tag_is(get_current_node(parser), GUMBO_TAG_OPTION)) {
  ------------------
  |  Branch (4010:9): [True: 391, False: 1.18k]
  ------------------
 4011|    391|      pop_current_node(parser);
 4012|    391|    }
 4013|  1.57k|    if (node_html_tag_is(get_current_node(parser), GUMBO_TAG_OPTGROUP)) {
  ------------------
  |  Branch (4013:9): [True: 759, False: 816]
  ------------------
 4014|    759|      pop_current_node(parser);
 4015|    759|    }
 4016|  1.57k|    insert_element_from_token(parser, token);
 4017|  1.57k|    return;
 4018|  1.57k|  }
 4019|  15.9k|  if (tag_is(token, kStartTag, GUMBO_TAG_HR)) {
  ------------------
  |  Branch (4019:7): [True: 875, False: 15.1k]
  ------------------
 4020|    875|    if (node_html_tag_is(get_current_node(parser), GUMBO_TAG_OPTION)) {
  ------------------
  |  Branch (4020:9): [True: 215, False: 660]
  ------------------
 4021|    215|      pop_current_node(parser);
 4022|    215|    }
 4023|    875|    if (node_html_tag_is(get_current_node(parser), GUMBO_TAG_OPTGROUP)) {
  ------------------
  |  Branch (4023:9): [True: 220, False: 655]
  ------------------
 4024|    220|      pop_current_node(parser);
 4025|    220|    }
 4026|    875|    insert_element_from_token(parser, token);
 4027|    875|    pop_current_node(parser);
 4028|    875|    acknowledge_self_closing_tag(parser);
 4029|    875|    return;
 4030|    875|  }
 4031|  15.1k|  if (tag_is(token, kEndTag, GUMBO_TAG_OPTGROUP)) {
  ------------------
  |  Branch (4031:7): [True: 1.27k, False: 13.8k]
  ------------------
 4032|  1.27k|    GumboVector* open_elements = &parser->_parser_state->_open_elements;
 4033|  1.27k|    if (
 4034|  1.27k|      node_html_tag_is(get_current_node(parser), GUMBO_TAG_OPTION)
  ------------------
  |  Branch (4034:7): [True: 436, False: 836]
  ------------------
 4035|    436|      && node_html_tag_is (
  ------------------
  |  Branch (4035:10): [True: 227, False: 209]
  ------------------
 4036|    436|        open_elements->data[open_elements->length - 2],
 4037|    436|        GUMBO_TAG_OPTGROUP
 4038|    436|      )
 4039|  1.27k|    ) {
 4040|    227|      pop_current_node(parser);
 4041|    227|    }
 4042|  1.27k|    if (node_html_tag_is(get_current_node(parser), GUMBO_TAG_OPTGROUP)) {
  ------------------
  |  Branch (4042:9): [True: 444, False: 828]
  ------------------
 4043|    444|      pop_current_node(parser);
 4044|    444|      return;
 4045|    444|    }
 4046|    828|    parser_add_parse_error(parser, token);
 4047|    828|    ignore_token(parser);
 4048|    828|    return;
 4049|  1.27k|  }
 4050|  13.8k|  if (tag_is(token, kEndTag, GUMBO_TAG_OPTION)) {
  ------------------
  |  Branch (4050:7): [True: 476, False: 13.3k]
  ------------------
 4051|    476|    if (node_html_tag_is(get_current_node(parser), GUMBO_TAG_OPTION)) {
  ------------------
  |  Branch (4051:9): [True: 198, False: 278]
  ------------------
 4052|    198|      pop_current_node(parser);
 4053|    198|      return;
 4054|    198|    }
 4055|    278|    parser_add_parse_error(parser, token);
 4056|    278|    ignore_token(parser);
 4057|    278|    return;
 4058|    476|  }
 4059|  13.3k|  if (tag_is(token, kEndTag, GUMBO_TAG_SELECT)) {
  ------------------
  |  Branch (4059:7): [True: 203, False: 13.1k]
  ------------------
 4060|    203|    if (!has_an_element_in_select_scope(parser, GUMBO_TAG_SELECT)) {
  ------------------
  |  Branch (4060:9): [True: 0, False: 203]
  ------------------
 4061|      0|      parser_add_parse_error(parser, token);
 4062|      0|      ignore_token(parser);
 4063|      0|      return;
 4064|      0|    }
 4065|    203|    close_current_select(parser);
 4066|    203|    return;
 4067|    203|  }
 4068|  13.1k|  if (tag_is(token, kStartTag, GUMBO_TAG_SELECT)) {
  ------------------
  |  Branch (4068:7): [True: 2.05k, False: 11.1k]
  ------------------
 4069|  2.05k|    parser_add_parse_error(parser, token);
 4070|  2.05k|    ignore_token(parser);
 4071|  2.05k|    if (has_an_element_in_select_scope(parser, GUMBO_TAG_SELECT)) {
  ------------------
  |  Branch (4071:9): [True: 2.05k, False: 0]
  ------------------
 4072|  2.05k|      close_current_select(parser);
 4073|  2.05k|    }
 4074|  2.05k|    return;
 4075|  2.05k|  }
 4076|  11.1k|  if (
 4077|  11.1k|    tag_in(token, kStartTag, &(const TagSet) {TAG(INPUT), TAG(KEYGEN), TAG(TEXTAREA)})
  ------------------
  |  |   40|  11.1k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  tag_in(token, kStartTag, &(const TagSet) {TAG(INPUT), TAG(KEYGEN), TAG(TEXTAREA)})
  ------------------
  |  |   40|  11.1k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  tag_in(token, kStartTag, &(const TagSet) {TAG(INPUT), TAG(KEYGEN), TAG(TEXTAREA)})
  ------------------
  |  |   40|  11.1k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
  |  Branch (4077:5): [True: 225, False: 10.8k]
  ------------------
 4078|  11.1k|  ) {
 4079|    225|    parser_add_parse_error(parser, token);
 4080|    225|    if (!has_an_element_in_select_scope(parser, GUMBO_TAG_SELECT)) {
  ------------------
  |  Branch (4080:9): [True: 0, False: 225]
  ------------------
 4081|      0|      ignore_token(parser);
 4082|    225|    } else {
 4083|    225|      close_current_select(parser);
 4084|    225|      parser->_parser_state->_reprocess_current_token = true;
 4085|    225|    }
 4086|    225|    return;
 4087|    225|  }
 4088|  10.8k|  if (
 4089|  10.8k|    tag_in(token, kStartTag, &(const TagSet){TAG(SCRIPT), TAG(TEMPLATE)})
  ------------------
  |  |   40|  10.8k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  tag_in(token, kStartTag, &(const TagSet){TAG(SCRIPT), TAG(TEMPLATE)})
  ------------------
  |  |   40|  10.8k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
  |  Branch (4089:5): [True: 1.07k, False: 9.82k]
  ------------------
 4090|  9.82k|    || tag_is(token, kEndTag, GUMBO_TAG_TEMPLATE)
  ------------------
  |  Branch (4090:8): [True: 238, False: 9.58k]
  ------------------
 4091|  10.8k|  ) {
 4092|  1.30k|    handle_in_head(parser, token);
 4093|  1.30k|    return;
 4094|  1.30k|  }
 4095|  9.58k|  if (token->type == GUMBO_TOKEN_EOF) {
  ------------------
  |  Branch (4095:7): [True: 646, False: 8.94k]
  ------------------
 4096|    646|    handle_in_body(parser, token);
 4097|    646|    return;
 4098|    646|  }
 4099|  8.94k|  parser_add_parse_error(parser, token);
 4100|  8.94k|  ignore_token(parser);
 4101|  8.94k|}
parser.c:has_an_element_in_select_scope:
 1742|  2.47k|static bool has_an_element_in_select_scope(const GumboParser* parser, GumboTag tag) {
 1743|  2.47k|  static const TagSet tags = {TAG(OPTGROUP), TAG(OPTION)};
  ------------------
  |  |   40|  2.47k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                static const TagSet tags = {TAG(OPTGROUP), TAG(OPTION)};
  ------------------
  |  |   40|  2.47k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 1744|       |  return has_an_element_in_specific_scope(parser, 1, &tag, true, &tags);
 1745|  2.47k|}
parser.c:close_current_select:
 1855|  3.27k|static void close_current_select(GumboParser* parser) {
 1856|  3.27k|  GumboNode* node = pop_current_node(parser);
 1857|  3.61k|  while (!node_html_tag_is(node, GUMBO_TAG_SELECT)) {
  ------------------
  |  Branch (1857:10): [True: 335, False: 3.27k]
  ------------------
 1858|    335|    node = pop_current_node(parser);
 1859|    335|  }
 1860|  3.27k|  reset_insertion_mode_appropriately(parser);
 1861|  3.27k|}
parser.c:handle_in_select_in_table:
 4104|  25.1k|static void handle_in_select_in_table(GumboParser* parser, GumboToken* token) {
 4105|  25.1k|  static const TagSet tags = {
 4106|  25.1k|    TAG(CAPTION), TAG(TABLE), TAG(TBODY), TAG(TFOOT), TAG(THEAD),
  ------------------
  |  |   40|  25.1k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(CAPTION), TAG(TABLE), TAG(TBODY), TAG(TFOOT), TAG(THEAD),
  ------------------
  |  |   40|  25.1k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(CAPTION), TAG(TABLE), TAG(TBODY), TAG(TFOOT), TAG(THEAD),
  ------------------
  |  |   40|  25.1k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(CAPTION), TAG(TABLE), TAG(TBODY), TAG(TFOOT), TAG(THEAD),
  ------------------
  |  |   40|  25.1k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(CAPTION), TAG(TABLE), TAG(TBODY), TAG(TFOOT), TAG(THEAD),
  ------------------
  |  |   40|  25.1k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 4107|  25.1k|    TAG(TR), TAG(TD), TAG(TH)
  ------------------
  |  |   40|  25.1k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(TR), TAG(TD), TAG(TH)
  ------------------
  |  |   40|  25.1k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  TAG(TR), TAG(TD), TAG(TH)
  ------------------
  |  |   40|  25.1k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 4108|  25.1k|  };
 4109|  25.1k|  if (tag_in(token, kStartTag, &tags)) {
  ------------------
  |  Branch (4109:7): [True: 469, False: 24.7k]
  ------------------
 4110|    469|    parser_add_parse_error(parser, token);
 4111|    469|    close_current_select(parser);
 4112|    469|    parser->_parser_state->_reprocess_current_token = true;
 4113|    469|    return;
 4114|    469|  }
 4115|  24.7k|  if (tag_in(token, kEndTag, &tags)) {
  ------------------
  |  Branch (4115:7): [True: 650, False: 24.0k]
  ------------------
 4116|    650|    parser_add_parse_error(parser, token);
 4117|    650|    if (!has_an_element_in_table_scope(parser, token->v.end_tag.tag)) {
  ------------------
  |  Branch (4117:9): [True: 321, False: 329]
  ------------------
 4118|    321|      ignore_token(parser);
 4119|    321|      return;
 4120|    321|    }
 4121|    329|    close_current_select(parser);
 4122|    329|    parser->_parser_state->_reprocess_current_token = true;
 4123|    329|    return;
 4124|    650|  }
 4125|  24.0k|  handle_in_select(parser, token);
 4126|  24.0k|}
parser.c:handle_in_template:
 4129|  68.0k|static void handle_in_template(GumboParser* parser, GumboToken* token) {
 4130|  68.0k|  GumboParserState* state = parser->_parser_state;
 4131|  68.0k|  switch (token->type) {
 4132|  1.14k|    case GUMBO_TOKEN_WHITESPACE:
  ------------------
  |  Branch (4132:5): [True: 1.14k, False: 66.9k]
  ------------------
 4133|  47.6k|    case GUMBO_TOKEN_CHARACTER:
  ------------------
  |  Branch (4133:5): [True: 46.4k, False: 21.5k]
  ------------------
 4134|  48.0k|    case GUMBO_TOKEN_COMMENT:
  ------------------
  |  Branch (4134:5): [True: 436, False: 67.6k]
  ------------------
 4135|  52.9k|    case GUMBO_TOKEN_NULL:
  ------------------
  |  Branch (4135:5): [True: 4.86k, False: 63.1k]
  ------------------
 4136|  53.3k|    case GUMBO_TOKEN_DOCTYPE:
  ------------------
  |  Branch (4136:5): [True: 391, False: 67.6k]
  ------------------
 4137|  53.3k|      handle_in_body(parser, token);
 4138|  53.3k|      return;
 4139|  14.7k|    default:
  ------------------
  |  Branch (4139:5): [True: 14.7k, False: 53.3k]
  ------------------
 4140|  14.7k|      break;
 4141|  68.0k|  }
 4142|  14.7k|  if (
 4143|  14.7k|    tag_in(token, kStartTag, &(const TagSet) {
  ------------------
  |  Branch (4143:5): [True: 2.18k, False: 12.5k]
  ------------------
 4144|  14.7k|      TAG(BASE), TAG(BASEFONT), TAG(BGSOUND), TAG(LINK), TAG(META),
  ------------------
  |  |   40|  14.7k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BASE), TAG(BASEFONT), TAG(BGSOUND), TAG(LINK), TAG(META),
  ------------------
  |  |   40|  14.7k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BASE), TAG(BASEFONT), TAG(BGSOUND), TAG(LINK), TAG(META),
  ------------------
  |  |   40|  14.7k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BASE), TAG(BASEFONT), TAG(BGSOUND), TAG(LINK), TAG(META),
  ------------------
  |  |   40|  14.7k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(BASE), TAG(BASEFONT), TAG(BGSOUND), TAG(LINK), TAG(META),
  ------------------
  |  |   40|  14.7k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 4145|  14.7k|      TAG(NOFRAMES), TAG(SCRIPT), TAG(STYLE), TAG(TEMPLATE), TAG(TITLE)
  ------------------
  |  |   40|  14.7k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(NOFRAMES), TAG(SCRIPT), TAG(STYLE), TAG(TEMPLATE), TAG(TITLE)
  ------------------
  |  |   40|  14.7k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(NOFRAMES), TAG(SCRIPT), TAG(STYLE), TAG(TEMPLATE), TAG(TITLE)
  ------------------
  |  |   40|  14.7k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(NOFRAMES), TAG(SCRIPT), TAG(STYLE), TAG(TEMPLATE), TAG(TITLE)
  ------------------
  |  |   40|  14.7k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(NOFRAMES), TAG(SCRIPT), TAG(STYLE), TAG(TEMPLATE), TAG(TITLE)
  ------------------
  |  |   40|  14.7k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 4146|  14.7k|    })
 4147|  12.5k|    || tag_is(token, kEndTag, GUMBO_TAG_TEMPLATE)
  ------------------
  |  Branch (4147:8): [True: 1.48k, False: 11.0k]
  ------------------
 4148|  14.7k|  ) {
 4149|  3.67k|    handle_in_head(parser, token);
 4150|  3.67k|    return;
 4151|  3.67k|  }
 4152|  11.0k|  if (
 4153|  11.0k|    tag_in(token, kStartTag, &(const TagSet) {
  ------------------
  |  Branch (4153:5): [True: 514, False: 10.5k]
  ------------------
 4154|  11.0k|      TAG(CAPTION), TAG(COLGROUP), TAG(TBODY), TAG(TFOOT), TAG(THEAD)
  ------------------
  |  |   40|  11.0k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COLGROUP), TAG(TBODY), TAG(TFOOT), TAG(THEAD)
  ------------------
  |  |   40|  11.0k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COLGROUP), TAG(TBODY), TAG(TFOOT), TAG(THEAD)
  ------------------
  |  |   40|  11.0k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COLGROUP), TAG(TBODY), TAG(TFOOT), TAG(THEAD)
  ------------------
  |  |   40|  11.0k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CAPTION), TAG(COLGROUP), TAG(TBODY), TAG(TFOOT), TAG(THEAD)
  ------------------
  |  |   40|  11.0k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 4155|  11.0k|    })
 4156|  11.0k|  ) {
 4157|    514|    pop_template_insertion_mode(parser);
 4158|    514|    push_template_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_TABLE);
 4159|    514|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_TABLE);
 4160|    514|    state->_reprocess_current_token = true;
 4161|    514|    return;
 4162|    514|  }
 4163|  10.5k|  if (tag_is(token, kStartTag, GUMBO_TAG_COL)) {
  ------------------
  |  Branch (4163:7): [True: 650, False: 9.90k]
  ------------------
 4164|    650|    pop_template_insertion_mode(parser);
 4165|    650|    push_template_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_COLUMN_GROUP);
 4166|    650|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_COLUMN_GROUP);
 4167|    650|    state->_reprocess_current_token = true;
 4168|    650|    return;
 4169|    650|  }
 4170|  9.90k|  if (tag_is(token, kStartTag, GUMBO_TAG_TR)) {
  ------------------
  |  Branch (4170:7): [True: 554, False: 9.35k]
  ------------------
 4171|    554|    pop_template_insertion_mode(parser);
 4172|    554|    push_template_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_TABLE_BODY);
 4173|    554|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_TABLE_BODY);
 4174|    554|    state->_reprocess_current_token = true;
 4175|    554|    return;
 4176|    554|  }
 4177|  9.35k|  if (tag_in(token, kStartTag, &td_th_tags)) {
  ------------------
  |  Branch (4177:7): [True: 452, False: 8.90k]
  ------------------
 4178|    452|    pop_template_insertion_mode(parser);
 4179|    452|    push_template_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_ROW);
 4180|    452|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_ROW);
 4181|    452|    state->_reprocess_current_token = true;
 4182|    452|    return;
 4183|    452|  }
 4184|  8.90k|  if (token->type == GUMBO_TOKEN_START_TAG) {
  ------------------
  |  Branch (4184:7): [True: 2.33k, False: 6.56k]
  ------------------
 4185|  2.33k|    pop_template_insertion_mode(parser);
 4186|  2.33k|    push_template_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_BODY);
 4187|  2.33k|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_BODY);
 4188|  2.33k|    state->_reprocess_current_token = true;
 4189|  2.33k|    return;
 4190|  2.33k|  }
 4191|  6.56k|  if (token->type == GUMBO_TOKEN_END_TAG) {
  ------------------
  |  Branch (4191:7): [True: 742, False: 5.82k]
  ------------------
 4192|    742|    parser_add_parse_error(parser, token);
 4193|    742|    ignore_token(parser);
 4194|    742|    return;
 4195|    742|  }
 4196|  5.82k|  if (token->type == GUMBO_TOKEN_EOF) {
  ------------------
  |  Branch (4196:7): [True: 5.82k, False: 0]
  ------------------
 4197|  5.82k|    if (!has_open_element(parser, GUMBO_TAG_TEMPLATE)) {
  ------------------
  |  Branch (4197:9): [True: 0, False: 5.82k]
  ------------------
 4198|       |      // Stop parsing.
 4199|      0|      return;
 4200|      0|    }
 4201|  5.82k|    parser_add_parse_error(parser, token);
 4202|  21.0k|    while (!node_html_tag_is(pop_current_node(parser), GUMBO_TAG_TEMPLATE))
  ------------------
  |  Branch (4202:12): [True: 15.2k, False: 5.82k]
  ------------------
 4203|  15.2k|      ;
 4204|  5.82k|    clear_active_formatting_elements(parser);
 4205|  5.82k|    pop_template_insertion_mode(parser);
 4206|  5.82k|    reset_insertion_mode_appropriately(parser);
 4207|  5.82k|    state->_reprocess_current_token = true;
 4208|  5.82k|    return;
 4209|  5.82k|  }
 4210|  5.82k|  assert(0 && "unreachable");
  ------------------
  |  Branch (4210:3): [Folded, False: 0]
  |  Branch (4210:3): [True: 0, False: 0]
  |  Branch (4210:3): [Folded, False: 0]
  |  Branch (4210:3): [True: 0, False: 0]
  ------------------
 4211|      0|}
parser.c:handle_after_body:
 4214|  3.96k|static void handle_after_body(GumboParser* parser, GumboToken* token) {
 4215|  3.96k|  if (
 4216|  3.96k|    token->type == GUMBO_TOKEN_WHITESPACE
  ------------------
  |  Branch (4216:5): [True: 488, False: 3.47k]
  ------------------
 4217|  3.47k|    || tag_is(token, kStartTag, GUMBO_TAG_HTML)
  ------------------
  |  Branch (4217:8): [True: 224, False: 3.25k]
  ------------------
 4218|  3.96k|  ) {
 4219|    712|    handle_in_body(parser, token);
 4220|    712|    return;
 4221|    712|  }
 4222|  3.25k|  if (token->type == GUMBO_TOKEN_COMMENT) {
  ------------------
  |  Branch (4222:7): [True: 437, False: 2.81k]
  ------------------
 4223|    437|    GumboNode* html_node = parser->_output->root;
 4224|    437|    assert(html_node != NULL);
  ------------------
  |  Branch (4224:5): [True: 0, False: 437]
  |  Branch (4224:5): [True: 437, False: 0]
  ------------------
 4225|    437|    append_comment_node(parser, html_node, token);
 4226|    437|    return;
 4227|    437|  }
 4228|  2.81k|  if (token->type == GUMBO_TOKEN_DOCTYPE) {
  ------------------
  |  Branch (4228:7): [True: 194, False: 2.62k]
  ------------------
 4229|    194|    parser_add_parse_error(parser, token);
 4230|    194|    ignore_token(parser);
 4231|    194|    return;
 4232|    194|  }
 4233|  2.62k|  if (tag_is(token, kStartTag, GUMBO_TAG_HTML)) {
  ------------------
  |  Branch (4233:7): [True: 0, False: 2.62k]
  ------------------
 4234|      0|    handle_in_body(parser, token);
 4235|      0|    return;
 4236|      0|  }
 4237|  2.62k|  if (tag_is(token, kEndTag, GUMBO_TAG_HTML)) {
  ------------------
  |  Branch (4237:7): [True: 1.25k, False: 1.36k]
  ------------------
 4238|       |    /* fragment case: ignore the closing HTML token */
 4239|  1.25k|    if (is_fragment_parser(parser)) {
  ------------------
  |  Branch (4239:9): [True: 0, False: 1.25k]
  ------------------
 4240|      0|      parser_add_parse_error(parser, token);
 4241|      0|      ignore_token(parser);
 4242|      0|      return;
 4243|      0|    }
 4244|  1.25k|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_AFTER_AFTER_BODY);
 4245|  1.25k|    GumboNode* html = parser->_parser_state->_open_elements.data[0];
 4246|  1.25k|    assert(node_html_tag_is(html, GUMBO_TAG_HTML));
  ------------------
  |  Branch (4246:5): [True: 0, False: 1.25k]
  |  Branch (4246:5): [True: 1.25k, False: 0]
  ------------------
 4247|  1.25k|    record_end_of_element (
 4248|  1.25k|      parser->_parser_state->_current_token,
 4249|  1.25k|      &html->v.element
 4250|  1.25k|    );
 4251|  1.25k|    return;
 4252|  1.25k|  }
 4253|  1.36k|  if (token->type == GUMBO_TOKEN_EOF) {
  ------------------
  |  Branch (4253:7): [True: 44, False: 1.32k]
  ------------------
 4254|     44|    return;
 4255|     44|  }
 4256|  1.32k|  parser_add_parse_error(parser, token);
 4257|  1.32k|  set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_BODY);
 4258|       |  parser->_parser_state->_reprocess_current_token = true;
 4259|  1.32k|}
parser.c:handle_in_frameset:
 4262|  90.2k|static void handle_in_frameset(GumboParser* parser, GumboToken* token) {
 4263|  90.2k|  if (token->type == GUMBO_TOKEN_WHITESPACE) {
  ------------------
  |  Branch (4263:7): [True: 9.84k, False: 80.3k]
  ------------------
 4264|  9.84k|    insert_text_token(parser, token);
 4265|  9.84k|    return;
 4266|  9.84k|  }
 4267|  80.3k|  if (token->type == GUMBO_TOKEN_COMMENT) {
  ------------------
  |  Branch (4267:7): [True: 320, False: 80.0k]
  ------------------
 4268|    320|    append_comment_node(parser, get_current_node(parser), token);
 4269|    320|    return;
 4270|    320|  }
 4271|  80.0k|  if (token->type == GUMBO_TOKEN_DOCTYPE) {
  ------------------
  |  Branch (4271:7): [True: 303, False: 79.7k]
  ------------------
 4272|    303|    parser_add_parse_error(parser, token);
 4273|    303|    ignore_token(parser);
 4274|    303|    return;
 4275|    303|  }
 4276|  79.7k|  if (tag_is(token, kStartTag, GUMBO_TAG_HTML)) {
  ------------------
  |  Branch (4276:7): [True: 236, False: 79.5k]
  ------------------
 4277|    236|    handle_in_body(parser, token);
 4278|    236|    return;
 4279|    236|  }
 4280|  79.5k|  if (tag_is(token, kStartTag, GUMBO_TAG_FRAMESET)) {
  ------------------
  |  Branch (4280:7): [True: 746, False: 78.7k]
  ------------------
 4281|    746|    insert_element_from_token(parser, token);
 4282|    746|    return;
 4283|    746|  }
 4284|  78.7k|  if (tag_is(token, kEndTag, GUMBO_TAG_FRAMESET)) {
  ------------------
  |  Branch (4284:7): [True: 358, False: 78.4k]
  ------------------
 4285|    358|    if (node_html_tag_is(get_current_node(parser), GUMBO_TAG_HTML)) {
  ------------------
  |  Branch (4285:9): [True: 0, False: 358]
  ------------------
 4286|      0|      parser_add_parse_error(parser, token);
 4287|      0|      ignore_token(parser);
 4288|      0|      return;
 4289|      0|    }
 4290|    358|    pop_current_node(parser);
 4291|    358|    if (
 4292|    358|      !is_fragment_parser(parser)
  ------------------
  |  Branch (4292:7): [True: 358, False: 0]
  ------------------
 4293|    358|      && !node_html_tag_is(get_current_node(parser), GUMBO_TAG_FRAMESET)
  ------------------
  |  Branch (4293:10): [True: 154, False: 204]
  ------------------
 4294|    358|    ) {
 4295|    154|      set_insertion_mode(parser, GUMBO_INSERTION_MODE_AFTER_FRAMESET);
 4296|    154|    }
 4297|    358|    return;
 4298|    358|  }
 4299|  78.4k|  if (tag_is(token, kStartTag, GUMBO_TAG_FRAME)) {
  ------------------
  |  Branch (4299:7): [True: 212, False: 78.1k]
  ------------------
 4300|    212|    insert_element_from_token(parser, token);
 4301|    212|    pop_current_node(parser);
 4302|    212|    acknowledge_self_closing_tag(parser);
 4303|    212|    return;
 4304|    212|  }
 4305|  78.1k|  if (tag_is(token, kStartTag, GUMBO_TAG_NOFRAMES)) {
  ------------------
  |  Branch (4305:7): [True: 194, False: 77.9k]
  ------------------
 4306|    194|    handle_in_head(parser, token);
 4307|    194|    return;
 4308|    194|  }
 4309|  77.9k|  if (token->type == GUMBO_TOKEN_EOF) {
  ------------------
  |  Branch (4309:7): [True: 171, False: 77.8k]
  ------------------
 4310|    171|    if (!node_html_tag_is(get_current_node(parser), GUMBO_TAG_HTML))
  ------------------
  |  Branch (4310:9): [True: 171, False: 0]
  ------------------
 4311|    171|      parser_add_parse_error(parser, token);
 4312|    171|    return;
 4313|    171|  }
 4314|  77.8k|  parser_add_parse_error(parser, token);
 4315|  77.8k|  ignore_token(parser);
 4316|  77.8k|}
parser.c:handle_after_frameset:
 4319|  43.8k|static void handle_after_frameset(GumboParser* parser, GumboToken* token) {
 4320|  43.8k|  if (token->type == GUMBO_TOKEN_WHITESPACE) {
  ------------------
  |  Branch (4320:7): [True: 9.39k, False: 34.4k]
  ------------------
 4321|  9.39k|    insert_text_token(parser, token);
 4322|  9.39k|    return;
 4323|  9.39k|  }
 4324|  34.4k|  if (token->type == GUMBO_TOKEN_COMMENT) {
  ------------------
  |  Branch (4324:7): [True: 588, False: 33.8k]
  ------------------
 4325|    588|    append_comment_node(parser, get_current_node(parser), token);
 4326|    588|    return;
 4327|    588|  }
 4328|  33.8k|  if (token->type == GUMBO_TOKEN_DOCTYPE) {
  ------------------
  |  Branch (4328:7): [True: 269, False: 33.6k]
  ------------------
 4329|    269|    parser_add_parse_error(parser, token);
 4330|    269|    ignore_token(parser);
 4331|    269|    return;
 4332|    269|  }
 4333|  33.6k|  if (tag_is(token, kStartTag, GUMBO_TAG_HTML)) {
  ------------------
  |  Branch (4333:7): [True: 323, False: 33.2k]
  ------------------
 4334|    323|    handle_in_body(parser, token);
 4335|    323|    return;
 4336|    323|  }
 4337|  33.2k|  if (tag_is(token, kEndTag, GUMBO_TAG_HTML)) {
  ------------------
  |  Branch (4337:7): [True: 70, False: 33.2k]
  ------------------
 4338|     70|    GumboNode* html = parser->_parser_state->_open_elements.data[0];
 4339|     70|    assert(node_html_tag_is(html, GUMBO_TAG_HTML));
  ------------------
  |  Branch (4339:5): [True: 0, False: 70]
  |  Branch (4339:5): [True: 70, False: 0]
  ------------------
 4340|     70|    record_end_of_element (
 4341|     70|      parser->_parser_state->_current_token,
 4342|     70|      &html->v.element
 4343|     70|    );
 4344|     70|    set_insertion_mode(parser, GUMBO_INSERTION_MODE_AFTER_AFTER_FRAMESET);
 4345|     70|    return;
 4346|     70|  }
 4347|  33.2k|  if (tag_is(token, kStartTag, GUMBO_TAG_NOFRAMES)) {
  ------------------
  |  Branch (4347:7): [True: 199, False: 33.0k]
  ------------------
 4348|    199|    return handle_in_head(parser, token);
 4349|    199|  }
 4350|  33.0k|  if (token->type == GUMBO_TOKEN_EOF) {
  ------------------
  |  Branch (4350:7): [True: 84, False: 32.9k]
  ------------------
 4351|     84|    return;
 4352|     84|  }
 4353|  32.9k|  parser_add_parse_error(parser, token);
 4354|  32.9k|  ignore_token(parser);
 4355|  32.9k|}
parser.c:handle_after_after_body:
 4358|  2.38k|static void handle_after_after_body(GumboParser* parser, GumboToken* token) {
 4359|  2.38k|  if (token->type == GUMBO_TOKEN_COMMENT) {
  ------------------
  |  Branch (4359:7): [True: 327, False: 2.06k]
  ------------------
 4360|    327|    append_comment_node(parser, get_document_node(parser), token);
 4361|    327|    return;
 4362|    327|  }
 4363|  2.06k|  if (
 4364|  2.06k|    token->type == GUMBO_TOKEN_DOCTYPE
  ------------------
  |  Branch (4364:5): [True: 234, False: 1.82k]
  ------------------
 4365|  1.82k|    || token->type == GUMBO_TOKEN_WHITESPACE
  ------------------
  |  Branch (4365:8): [True: 270, False: 1.55k]
  ------------------
 4366|  1.55k|    || tag_is(token, kStartTag, GUMBO_TAG_HTML)
  ------------------
  |  Branch (4366:8): [True: 299, False: 1.25k]
  ------------------
 4367|  2.06k|  ) {
 4368|    803|    handle_in_body(parser, token);
 4369|    803|    return;
 4370|    803|  }
 4371|  1.25k|  if (token->type == GUMBO_TOKEN_EOF) {
  ------------------
  |  Branch (4371:7): [True: 37, False: 1.22k]
  ------------------
 4372|     37|    return;
 4373|     37|  }
 4374|  1.22k|  parser_add_parse_error(parser, token);
 4375|  1.22k|  set_insertion_mode(parser, GUMBO_INSERTION_MODE_IN_BODY);
 4376|       |  parser->_parser_state->_reprocess_current_token = true;
 4377|  1.22k|}
parser.c:handle_after_after_frameset:
 4383|  6.76k|) {
 4384|  6.76k|  if (token->type == GUMBO_TOKEN_COMMENT) {
  ------------------
  |  Branch (4384:7): [True: 400, False: 6.36k]
  ------------------
 4385|    400|    append_comment_node(parser, get_document_node(parser), token);
 4386|    400|    return;
 4387|    400|  }
 4388|  6.36k|  if (
 4389|  6.36k|    token->type == GUMBO_TOKEN_DOCTYPE
  ------------------
  |  Branch (4389:5): [True: 199, False: 6.16k]
  ------------------
 4390|  6.16k|    || token->type == GUMBO_TOKEN_WHITESPACE
  ------------------
  |  Branch (4390:8): [True: 557, False: 5.60k]
  ------------------
 4391|  5.60k|    || tag_is(token, kStartTag, GUMBO_TAG_HTML)
  ------------------
  |  Branch (4391:8): [True: 243, False: 5.36k]
  ------------------
 4392|  6.36k|  ) {
 4393|    999|    handle_in_body(parser, token);
 4394|    999|    return;
 4395|    999|  }
 4396|  5.36k|  if (token->type == GUMBO_TOKEN_EOF) {
  ------------------
  |  Branch (4396:7): [True: 70, False: 5.29k]
  ------------------
 4397|     70|    return;
 4398|     70|  }
 4399|  5.29k|  if (tag_is(token, kStartTag, GUMBO_TAG_NOFRAMES)) {
  ------------------
  |  Branch (4399:7): [True: 194, False: 5.10k]
  ------------------
 4400|    194|    handle_in_head(parser, token);
 4401|    194|    return;
 4402|    194|  }
 4403|  5.10k|  parser_add_parse_error(parser, token);
 4404|  5.10k|  ignore_token(parser);
 4405|  5.10k|}
parser.c:handle_in_foreign_content:
 4443|   397k|static void handle_in_foreign_content(GumboParser* parser, GumboToken* token) {
 4444|   397k|  gumbo_debug("Handling foreign content.\n");
 4445|   397k|  switch (token->type) {
 4446|  50.5k|    case GUMBO_TOKEN_NULL:
  ------------------
  |  Branch (4446:5): [True: 50.5k, False: 346k]
  ------------------
 4447|  50.5k|      parser_add_parse_error(parser, token);
 4448|  50.5k|      token->v.character = kUtf8ReplacementChar;
  ------------------
  |  |   33|  50.5k|#define kUtf8ReplacementChar 0xFFFD
  ------------------
 4449|  50.5k|      insert_text_token(parser, token);
 4450|  50.5k|      return;
 4451|  5.90k|    case GUMBO_TOKEN_WHITESPACE:
  ------------------
  |  Branch (4451:5): [True: 5.90k, False: 391k]
  ------------------
 4452|  5.90k|      insert_text_token(parser, token);
 4453|  5.90k|      return;
 4454|  50.2k|    case GUMBO_TOKEN_CDATA:
  ------------------
  |  Branch (4454:5): [True: 50.2k, False: 346k]
  ------------------
 4455|   314k|    case GUMBO_TOKEN_CHARACTER:
  ------------------
  |  Branch (4455:5): [True: 264k, False: 132k]
  ------------------
 4456|   314k|      insert_text_token(parser, token);
 4457|   314k|      set_frameset_not_ok(parser);
 4458|   314k|      return;
 4459|  4.20k|    case GUMBO_TOKEN_COMMENT:
  ------------------
  |  Branch (4459:5): [True: 4.20k, False: 392k]
  ------------------
 4460|  4.20k|      append_comment_node(parser, get_current_node(parser), token);
 4461|  4.20k|      return;
 4462|    498|    case GUMBO_TOKEN_DOCTYPE:
  ------------------
  |  Branch (4462:5): [True: 498, False: 396k]
  ------------------
 4463|    498|      parser_add_parse_error(parser, token);
 4464|    498|      ignore_token(parser);
 4465|    498|      return;
 4466|  20.9k|    default:
  ------------------
  |  Branch (4466:5): [True: 20.9k, False: 376k]
  ------------------
 4467|       |      // Fall through to the if-statements below.
 4468|  20.9k|      break;
 4469|   397k|  }
 4470|       |  // Order matters for these clauses.
 4471|  20.9k|  if (
 4472|  20.9k|    tag_in(token, kStartTag, &(const TagSet) {
  ------------------
  |  Branch (4472:5): [True: 1.29k, False: 19.6k]
  ------------------
 4473|  20.9k|      TAG(B), TAG(BIG), TAG(BLOCKQUOTE), TAG(BODY), TAG(BR), TAG(CENTER),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(B), TAG(BIG), TAG(BLOCKQUOTE), TAG(BODY), TAG(BR), TAG(CENTER),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(B), TAG(BIG), TAG(BLOCKQUOTE), TAG(BODY), TAG(BR), TAG(CENTER),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(B), TAG(BIG), TAG(BLOCKQUOTE), TAG(BODY), TAG(BR), TAG(CENTER),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(B), TAG(BIG), TAG(BLOCKQUOTE), TAG(BODY), TAG(BR), TAG(CENTER),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(B), TAG(BIG), TAG(BLOCKQUOTE), TAG(BODY), TAG(BR), TAG(CENTER),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 4474|  20.9k|      TAG(CODE), TAG(DD), TAG(DIV), TAG(DL), TAG(DT), TAG(EM), TAG(EMBED),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CODE), TAG(DD), TAG(DIV), TAG(DL), TAG(DT), TAG(EM), TAG(EMBED),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CODE), TAG(DD), TAG(DIV), TAG(DL), TAG(DT), TAG(EM), TAG(EMBED),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CODE), TAG(DD), TAG(DIV), TAG(DL), TAG(DT), TAG(EM), TAG(EMBED),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CODE), TAG(DD), TAG(DIV), TAG(DL), TAG(DT), TAG(EM), TAG(EMBED),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CODE), TAG(DD), TAG(DIV), TAG(DL), TAG(DT), TAG(EM), TAG(EMBED),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(CODE), TAG(DD), TAG(DIV), TAG(DL), TAG(DT), TAG(EM), TAG(EMBED),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 4475|  20.9k|      TAG(H1), TAG(H2), TAG(H3), TAG(H4), TAG(H5), TAG(H6), TAG(HEAD),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(H1), TAG(H2), TAG(H3), TAG(H4), TAG(H5), TAG(H6), TAG(HEAD),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(H1), TAG(H2), TAG(H3), TAG(H4), TAG(H5), TAG(H6), TAG(HEAD),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(H1), TAG(H2), TAG(H3), TAG(H4), TAG(H5), TAG(H6), TAG(HEAD),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(H1), TAG(H2), TAG(H3), TAG(H4), TAG(H5), TAG(H6), TAG(HEAD),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(H1), TAG(H2), TAG(H3), TAG(H4), TAG(H5), TAG(H6), TAG(HEAD),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(H1), TAG(H2), TAG(H3), TAG(H4), TAG(H5), TAG(H6), TAG(HEAD),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 4476|  20.9k|      TAG(HR), TAG(I), TAG(IMG), TAG(LI), TAG(LISTING), TAG(MENU), TAG(META),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(HR), TAG(I), TAG(IMG), TAG(LI), TAG(LISTING), TAG(MENU), TAG(META),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(HR), TAG(I), TAG(IMG), TAG(LI), TAG(LISTING), TAG(MENU), TAG(META),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(HR), TAG(I), TAG(IMG), TAG(LI), TAG(LISTING), TAG(MENU), TAG(META),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(HR), TAG(I), TAG(IMG), TAG(LI), TAG(LISTING), TAG(MENU), TAG(META),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(HR), TAG(I), TAG(IMG), TAG(LI), TAG(LISTING), TAG(MENU), TAG(META),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(HR), TAG(I), TAG(IMG), TAG(LI), TAG(LISTING), TAG(MENU), TAG(META),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 4477|  20.9k|      TAG(NOBR), TAG(OL), TAG(P), TAG(PRE), TAG(RUBY), TAG(S), TAG(SMALL),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(NOBR), TAG(OL), TAG(P), TAG(PRE), TAG(RUBY), TAG(S), TAG(SMALL),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(NOBR), TAG(OL), TAG(P), TAG(PRE), TAG(RUBY), TAG(S), TAG(SMALL),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(NOBR), TAG(OL), TAG(P), TAG(PRE), TAG(RUBY), TAG(S), TAG(SMALL),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(NOBR), TAG(OL), TAG(P), TAG(PRE), TAG(RUBY), TAG(S), TAG(SMALL),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(NOBR), TAG(OL), TAG(P), TAG(PRE), TAG(RUBY), TAG(S), TAG(SMALL),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(NOBR), TAG(OL), TAG(P), TAG(PRE), TAG(RUBY), TAG(S), TAG(SMALL),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 4478|  20.9k|      TAG(SPAN), TAG(STRONG), TAG(STRIKE), TAG(SUB), TAG(SUP), TAG(TABLE),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(SPAN), TAG(STRONG), TAG(STRIKE), TAG(SUB), TAG(SUP), TAG(TABLE),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(SPAN), TAG(STRONG), TAG(STRIKE), TAG(SUB), TAG(SUP), TAG(TABLE),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(SPAN), TAG(STRONG), TAG(STRIKE), TAG(SUB), TAG(SUP), TAG(TABLE),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(SPAN), TAG(STRONG), TAG(STRIKE), TAG(SUB), TAG(SUP), TAG(TABLE),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(SPAN), TAG(STRONG), TAG(STRIKE), TAG(SUB), TAG(SUP), TAG(TABLE),
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 4479|  20.9k|      TAG(TT), TAG(U), TAG(UL), TAG(VAR)
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TT), TAG(U), TAG(UL), TAG(VAR)
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TT), TAG(U), TAG(UL), TAG(VAR)
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                    TAG(TT), TAG(U), TAG(UL), TAG(VAR)
  ------------------
  |  |   40|  20.9k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
 4480|  20.9k|    })
 4481|  19.6k|    || (
 4482|  19.6k|      tag_is(token, kStartTag, GUMBO_TAG_FONT)
  ------------------
  |  Branch (4482:7): [True: 880, False: 18.7k]
  ------------------
 4483|    880|      && (
 4484|    880|        token_has_attribute(token, "color")
  ------------------
  |  Branch (4484:9): [True: 196, False: 684]
  ------------------
 4485|    684|        || token_has_attribute(token, "face")
  ------------------
  |  Branch (4485:12): [True: 197, False: 487]
  ------------------
 4486|    487|        || token_has_attribute(token, "size")
  ------------------
  |  Branch (4486:12): [True: 221, False: 266]
  ------------------
 4487|    880|      )
 4488|  19.6k|    )
 4489|  19.0k|    || tag_in(token, kEndTag, &(const TagSet) { TAG(BR), TAG(P) })
  ------------------
  |  |   40|  19.0k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
                  || tag_in(token, kEndTag, &(const TagSet) { TAG(BR), TAG(P) })
  ------------------
  |  |   40|  19.0k|#define TAG(tag) [GUMBO_TAG_##tag] = (1 << GUMBO_NAMESPACE_HTML)
  ------------------
  |  Branch (4489:8): [True: 504, False: 18.4k]
  ------------------
 4490|  20.9k|  ) {
 4491|       |    /* Parse error */
 4492|  2.40k|    parser_add_parse_error(parser, token);
 4493|       |
 4494|  2.40k|    while (
 4495|  8.60k|      !(
 4496|  8.60k|        is_mathml_integration_point(get_current_node(parser))
  ------------------
  |  Branch (4496:9): [True: 377, False: 8.22k]
  ------------------
 4497|  8.22k|        || is_html_integration_point(get_current_node(parser))
  ------------------
  |  Branch (4497:12): [True: 343, False: 7.88k]
  ------------------
 4498|  7.88k|        || get_current_node(parser)->v.element.tag_namespace == GUMBO_NAMESPACE_HTML
  ------------------
  |  Branch (4498:12): [True: 1.68k, False: 6.19k]
  ------------------
 4499|  8.60k|      )
 4500|  6.19k|    ) {
 4501|  6.19k|      pop_current_node(parser);
 4502|  6.19k|    }
 4503|  2.40k|    handle_html_content(parser, token);
 4504|  2.40k|    return;
 4505|  2.40k|  }
 4506|       |
 4507|  18.4k|  if (token->type == GUMBO_TOKEN_START_TAG) {
  ------------------
  |  Branch (4507:7): [True: 16.8k, False: 1.65k]
  ------------------
 4508|  16.8k|    const GumboNamespaceEnum current_namespace =
 4509|  16.8k|        get_adjusted_current_node(parser)->v.element.tag_namespace;
 4510|  16.8k|    if (current_namespace == GUMBO_NAMESPACE_MATHML) {
  ------------------
  |  Branch (4510:9): [True: 3.72k, False: 13.1k]
  ------------------
 4511|  3.72k|      adjust_mathml_attributes(token);
 4512|  3.72k|    }
 4513|  16.8k|    if (current_namespace == GUMBO_NAMESPACE_SVG) {
  ------------------
  |  Branch (4513:9): [True: 13.1k, False: 3.72k]
  ------------------
 4514|  13.1k|      adjust_svg_tag(token);
 4515|  13.1k|      adjust_svg_attributes(token);
 4516|  13.1k|    }
 4517|  16.8k|    adjust_foreign_attributes(token);
 4518|  16.8k|    insert_foreign_element(parser, token, current_namespace);
 4519|  16.8k|    if (token->v.start_tag.is_self_closing) {
  ------------------
  |  Branch (4519:9): [True: 735, False: 16.1k]
  ------------------
 4520|    735|      pop_current_node(parser);
 4521|    735|      acknowledge_self_closing_tag(parser);
 4522|    735|    }
 4523|  16.8k|    return;
 4524|       |    // </script> tags are handled like any other end tag, putting the script's
 4525|       |    // text into a text node child and closing the current node.
 4526|  16.8k|  }
 4527|  18.4k|  assert(token->type == GUMBO_TOKEN_END_TAG);
  ------------------
  |  Branch (4527:3): [True: 0, False: 1.65k]
  |  Branch (4527:3): [True: 1.65k, False: 0]
  ------------------
 4528|  1.65k|  GumboNode* node = get_current_node(parser);
 4529|  1.65k|  GumboTag tag = token->v.end_tag.tag;
 4530|  1.65k|  const char* name = token->v.end_tag.name;
 4531|  1.65k|  assert(node != NULL);
  ------------------
  |  Branch (4531:3): [True: 0, False: 1.65k]
  |  Branch (4531:3): [True: 1.65k, False: 0]
  ------------------
 4532|       |
 4533|  1.65k|  if (!node_tagname_is(node, tag, name))
  ------------------
  |  Branch (4533:7): [True: 1.16k, False: 487]
  ------------------
 4534|  1.16k|    parser_add_parse_error(parser, token);
 4535|  1.65k|  int i = parser->_parser_state->_open_elements.length;
 4536|  13.8k|  for (--i; i > 0;) {
  ------------------
  |  Branch (4536:13): [True: 13.8k, False: 0]
  ------------------
 4537|       |    // Here we move up the stack until we find an HTML element (in which
 4538|       |    // case we do nothing) or we find the element that we're about to
 4539|       |    // close (in which case we pop everything we've seen until that
 4540|       |    // point.)
 4541|  13.8k|    gumbo_debug("Foreign %s node at %d.\n", node->v.element.name, i);
 4542|  13.8k|    if (node_tagname_is(node, tag, name)) {
  ------------------
  |  Branch (4542:9): [True: 562, False: 13.3k]
  ------------------
 4543|    562|      gumbo_debug("Matches.\n");
 4544|    894|      while (node != pop_current_node(parser)) {
  ------------------
  |  Branch (4544:14): [True: 332, False: 562]
  ------------------
 4545|       |        // Pop all the nodes below the current one. Node is guaranteed to
 4546|       |        // be an element on the stack of open elements (set below), so
 4547|       |        // this loop is guaranteed to terminate.
 4548|    332|      }
 4549|    562|      return;
 4550|    562|    }
 4551|  13.3k|    --i;
 4552|  13.3k|    node = parser->_parser_state->_open_elements.data[i];
 4553|  13.3k|    if (node->v.element.tag_namespace == GUMBO_NAMESPACE_HTML) {
  ------------------
  |  Branch (4553:9): [True: 1.09k, False: 12.2k]
  ------------------
 4554|       |      // The loop continues only in foreign namespaces.
 4555|  1.09k|      break;
 4556|  1.09k|    }
 4557|  13.3k|  }
 4558|  1.65k|  assert(node->v.element.tag_namespace == GUMBO_NAMESPACE_HTML);
  ------------------
  |  Branch (4558:3): [True: 0, False: 1.09k]
  |  Branch (4558:3): [True: 1.09k, False: 0]
  ------------------
 4559|  1.09k|  if (i == 0)
  ------------------
  |  Branch (4559:7): [True: 0, False: 1.09k]
  ------------------
 4560|      0|    return;
 4561|       |  // We can't call handle_token directly because the current node is still in
 4562|       |  // a foreign namespace, so it would re-enter this and result in infinite
 4563|       |  // recursion.
 4564|  1.09k|  handle_html_content(parser, token);
 4565|  1.09k|}
parser.c:adjust_svg_tag:
 2032|  13.1k|static void adjust_svg_tag(GumboToken* token) {
 2033|  13.1k|  assert(token->type == GUMBO_TOKEN_START_TAG);
  ------------------
  |  Branch (2033:3): [True: 0, False: 13.1k]
  |  Branch (2033:3): [True: 13.1k, False: 0]
  ------------------
 2034|  13.1k|  if (token->v.start_tag.tag == GUMBO_TAG_FOREIGNOBJECT) {
  ------------------
  |  Branch (2034:7): [True: 207, False: 12.9k]
  ------------------
 2035|    207|    assert(token->v.start_tag.name == NULL);
  ------------------
  |  Branch (2035:5): [True: 0, False: 207]
  |  Branch (2035:5): [True: 207, False: 0]
  ------------------
 2036|    207|    token->v.start_tag.name = (char *)"foreignObject";
 2037|  12.9k|  } else if (token->v.start_tag.tag == GUMBO_TAG_UNKNOWN) {
  ------------------
  |  Branch (2037:14): [True: 8.00k, False: 4.91k]
  ------------------
 2038|  8.00k|    assert(token->v.start_tag.name);
  ------------------
  |  Branch (2038:5): [True: 0, False: 8.00k]
  |  Branch (2038:5): [True: 8.00k, False: 0]
  ------------------
 2039|  8.00k|    const StringReplacement *replacement = gumbo_get_svg_tag_replacement(
 2040|  8.00k|      token->v.start_tag.name,
 2041|  8.00k|      strlen(token->v.start_tag.name)
 2042|  8.00k|    );
 2043|  8.00k|    if (replacement) {
  ------------------
  |  Branch (2043:9): [True: 391, False: 7.61k]
  ------------------
 2044|       |      // This cast is safe because we allocated this memory and we'll free it.
 2045|    391|      strcpy((char *)token->v.start_tag.name, replacement->to);
 2046|    391|    }
 2047|  8.00k|  }
 2048|  13.1k|}
parser.c:node_tagname_is:
  626|  15.5k|) {
  627|  15.5k|  assert(node->type == GUMBO_NODE_ELEMENT || node->type == GUMBO_NODE_TEMPLATE);
  ------------------
  |  Branch (627:3): [True: 15.5k, False: 0]
  |  Branch (627:3): [True: 0, False: 0]
  |  Branch (627:3): [True: 15.5k, False: 0]
  |  Branch (627:3): [True: 0, False: 0]
  ------------------
  628|  15.5k|  return node_qualified_tagname_is(node, node->v.element.tag_namespace, tag, name);
  629|  15.5k|}
parser.c:finish_parsing:
 2488|  26.7k|static void finish_parsing(GumboParser* parser) {
 2489|  26.7k|  gumbo_debug("Finishing parsing\n");
 2490|  26.7k|  maybe_flush_text_node_buffer(parser);
 2491|  26.7k|  GumboParserState* state = parser->_parser_state;
 2492|  26.7k|  for (
 2493|  26.7k|    GumboNode* node = pop_current_node(parser);
 2494|   161k|    node;
  ------------------
  |  Branch (2494:5): [True: 135k, False: 26.7k]
  ------------------
 2495|   135k|    node = pop_current_node(parser)
 2496|   135k|  ) {
 2497|   135k|    if (
 2498|   135k|      (node_html_tag_is(node, GUMBO_TAG_BODY) && state->_closed_body_tag)
  ------------------
  |  Branch (2498:8): [True: 26.4k, False: 108k]
  |  Branch (2498:50): [True: 148, False: 26.2k]
  ------------------
 2499|   134k|      || (node_html_tag_is(node, GUMBO_TAG_HTML) && state->_closed_html_tag)
  ------------------
  |  Branch (2499:11): [True: 26.7k, False: 108k]
  |  Branch (2499:53): [True: 229, False: 26.5k]
  ------------------
 2500|   135k|    ) {
 2501|    377|      continue;
 2502|    377|    }
 2503|   134k|    node->parse_flags |= GUMBO_INSERTION_IMPLICIT_END_TAG;
 2504|   134k|  }
 2505|  26.7k|  while (pop_current_node(parser))
  ------------------
  |  Branch (2505:10): [True: 0, False: 26.7k]
  ------------------
 2506|      0|    ;  // Pop them all.
 2507|  26.7k|}
parser.c:parser_state_destroy:
  446|  26.7k|static void parser_state_destroy(GumboParser* parser) {
  447|  26.7k|  GumboParserState* state = parser->_parser_state;
  448|  26.7k|  if (state->_fragment_ctx) {
  ------------------
  |  Branch (448:7): [True: 0, False: 26.7k]
  ------------------
  449|      0|    destroy_fragment_ctx_element(state->_fragment_ctx);
  450|      0|  }
  451|  26.7k|  gumbo_vector_destroy(&state->_active_formatting_elements);
  452|  26.7k|  gumbo_vector_destroy(&state->_open_elements);
  453|  26.7k|  gumbo_vector_destroy(&state->_template_insertion_modes);
  454|  26.7k|  gumbo_string_buffer_destroy(&state->_text_node._buffer);
  455|  26.7k|  gumbo_character_token_buffer_destroy(&state->_table_character_tokens);
  456|  26.7k|  gumbo_free(state);
  457|  26.7k|}
parser.c:destroy_node:
  440|  29.0k|static void destroy_node(GumboNode* node) {
  441|  29.0k|  tree_traverse(node, &destroy_node_callback);
  442|  29.0k|}
parser.c:tree_traverse:
  371|  29.0k|static void tree_traverse(GumboNode* node, TreeTraversalCallback callback) {
  372|  29.0k|  GumboNode* current_node = node;
  373|  29.0k|  unsigned int offset = 0;
  374|       |
  375|  1.07M|tailcall:
  376|  1.07M|  switch (current_node->type) {
  ------------------
  |  Branch (376:11): [True: 1.07M, False: 0]
  ------------------
  377|  55.7k|    case GUMBO_NODE_DOCUMENT:
  ------------------
  |  Branch (377:5): [True: 55.7k, False: 1.02M]
  ------------------
  378|  85.4k|    case GUMBO_NODE_TEMPLATE:
  ------------------
  |  Branch (378:5): [True: 29.6k, False: 1.04M]
  ------------------
  379|   920k|    case GUMBO_NODE_ELEMENT: {
  ------------------
  |  Branch (379:5): [True: 835k, False: 242k]
  ------------------
  380|   920k|      GumboVector* children = (current_node->type == GUMBO_NODE_DOCUMENT)
  ------------------
  |  Branch (380:31): [True: 55.7k, False: 864k]
  ------------------
  381|   920k|        ? &current_node->v.document.children
  382|   920k|        : &current_node->v.element.children
  383|   920k|      ;
  384|   920k|      if (offset >= children->length) {
  ------------------
  |  Branch (384:11): [True: 396k, False: 524k]
  ------------------
  385|   396k|        assert(offset == children->length);
  ------------------
  |  Branch (385:9): [True: 0, False: 396k]
  |  Branch (385:9): [True: 396k, False: 0]
  ------------------
  386|   396k|        break;
  387|   524k|      } else {
  388|   524k|        current_node = children->data[offset];
  389|   524k|        offset = 0;
  390|   524k|        goto tailcall;
  391|   524k|      }
  392|   920k|    }
  393|   124k|    case GUMBO_NODE_TEXT:
  ------------------
  |  Branch (393:5): [True: 124k, False: 953k]
  ------------------
  394|   124k|    case GUMBO_NODE_CDATA:
  ------------------
  |  Branch (394:5): [True: 472, False: 1.07M]
  ------------------
  395|   151k|    case GUMBO_NODE_COMMENT:
  ------------------
  |  Branch (395:5): [True: 26.7k, False: 1.05M]
  ------------------
  396|   157k|    case GUMBO_NODE_WHITESPACE:
  ------------------
  |  Branch (396:5): [True: 5.62k, False: 1.07M]
  ------------------
  397|   157k|      assert(offset == 0);
  ------------------
  |  Branch (397:7): [True: 0, False: 157k]
  |  Branch (397:7): [True: 157k, False: 0]
  ------------------
  398|   157k|      break;
  399|  1.07M|  }
  400|       |
  401|   553k|  offset = current_node->index_within_parent + 1;
  402|   553k|  GumboNode* next_node = current_node->parent;
  403|   553k|  callback(current_node);
  404|   553k|  if (current_node == node) {
  ------------------
  |  Branch (404:7): [True: 29.0k, False: 524k]
  ------------------
  405|  29.0k|    return;
  406|  29.0k|  }
  407|   524k|  current_node = next_node;
  408|   524k|  goto tailcall;
  409|   553k|}
parser.c:destroy_node_callback:
  411|   553k|static void destroy_node_callback(GumboNode* node) {
  412|   553k|  switch (node->type) {
  ------------------
  |  Branch (412:11): [True: 553k, False: 0]
  ------------------
  413|  26.7k|    case GUMBO_NODE_DOCUMENT: {
  ------------------
  |  Branch (413:5): [True: 26.7k, False: 526k]
  ------------------
  414|  26.7k|      GumboDocument* doc = &node->v.document;
  415|  26.7k|      gumbo_free((void*) doc->children.data);
  416|  26.7k|      gumbo_free((void*) doc->name);
  417|  26.7k|      gumbo_free((void*) doc->public_identifier);
  418|  26.7k|      gumbo_free((void*) doc->system_identifier);
  419|  26.7k|    } break;
  420|  7.96k|    case GUMBO_NODE_TEMPLATE:
  ------------------
  |  Branch (420:5): [True: 7.96k, False: 545k]
  ------------------
  421|   369k|    case GUMBO_NODE_ELEMENT:
  ------------------
  |  Branch (421:5): [True: 361k, False: 191k]
  ------------------
  422|   418k|      for (unsigned int i = 0; i < node->v.element.attributes.length; ++i) {
  ------------------
  |  Branch (422:32): [True: 49.4k, False: 369k]
  ------------------
  423|  49.4k|        gumbo_destroy_attribute(node->v.element.attributes.data[i]);
  424|  49.4k|      }
  425|   369k|      gumbo_free(node->v.element.attributes.data);
  426|   369k|      gumbo_free(node->v.element.children.data);
  427|   369k|      if (node->v.element.tag == GUMBO_TAG_UNKNOWN)
  ------------------
  |  Branch (427:11): [True: 67.9k, False: 301k]
  ------------------
  428|  67.9k|        gumbo_free((void *)node->v.element.name);
  429|   369k|      break;
  430|   124k|    case GUMBO_NODE_TEXT:
  ------------------
  |  Branch (430:5): [True: 124k, False: 429k]
  ------------------
  431|   124k|    case GUMBO_NODE_CDATA:
  ------------------
  |  Branch (431:5): [True: 472, False: 552k]
  ------------------
  432|   151k|    case GUMBO_NODE_COMMENT:
  ------------------
  |  Branch (432:5): [True: 26.7k, False: 526k]
  ------------------
  433|   157k|    case GUMBO_NODE_WHITESPACE:
  ------------------
  |  Branch (433:5): [True: 5.62k, False: 547k]
  ------------------
  434|   157k|      gumbo_free((void*) node->v.text.text);
  435|   157k|      break;
  436|   553k|  }
  437|   553k|  gumbo_free(node);
  438|   553k|}

gumbo_string_buffer_init:
   40|  1.10M|void gumbo_string_buffer_init(GumboStringBuffer* output) {
   41|  1.10M|  output->data = gumbo_alloc(kDefaultStringBufferSize);
   42|  1.10M|  output->length = 0;
   43|  1.10M|  output->capacity = kDefaultStringBufferSize;
   44|  1.10M|}
gumbo_string_buffer_reserve:
   49|   547k|) {
   50|   547k|  maybe_resize_string_buffer(min_capacity - output->length, output);
   51|   547k|}
gumbo_string_buffer_append_codepoint:
   56|  12.5M|) {
   57|       |  // num_bytes is actually the number of continuation bytes, 1 less than the
   58|       |  // total number of bytes. This is done to keep the loop below simple and
   59|       |  // should probably change if we unroll it.
   60|  12.5M|  int num_bytes, prefix;
   61|  12.5M|  if (c <= 0x7f) {
  ------------------
  |  Branch (61:7): [True: 9.89M, False: 2.70M]
  ------------------
   62|  9.89M|    num_bytes = 0;
   63|  9.89M|    prefix = 0;
   64|  9.89M|  } else if (c <= 0x7ff) {
  ------------------
  |  Branch (64:14): [True: 175k, False: 2.53M]
  ------------------
   65|   175k|    num_bytes = 1;
   66|   175k|    prefix = 0xc0;
   67|  2.53M|  } else if (c <= 0xffff) {
  ------------------
  |  Branch (67:14): [True: 2.47M, False: 53.7k]
  ------------------
   68|  2.47M|    num_bytes = 2;
   69|  2.47M|    prefix = 0xe0;
   70|  2.47M|  } else {
   71|  53.7k|    num_bytes = 3;
   72|  53.7k|    prefix = 0xf0;
   73|  53.7k|  }
   74|  12.5M|  maybe_resize_string_buffer(num_bytes + 1, output);
   75|  12.5M|  output->data[output->length++] = prefix | (c >> (num_bytes * 6));
   76|  17.8M|  for (int i = num_bytes - 1; i >= 0; --i) {
  ------------------
  |  Branch (76:31): [True: 5.29M, False: 12.5M]
  ------------------
   77|  5.29M|    output->data[output->length++] = 0x80 | (0x3f & (c >> (i * 6)));
   78|  5.29M|  }
   79|  12.5M|}
gumbo_string_buffer_append_string:
   84|   293k|) {
   85|   293k|  maybe_resize_string_buffer(str->length, output);
   86|   293k|  memcpy(output->data + output->length, str->data, str->length);
   87|   293k|  output->length += str->length;
   88|   293k|}
gumbo_string_buffer_to_string:
   90|   280k|char* gumbo_string_buffer_to_string(const GumboStringBuffer* input) {
   91|   280k|  char* buffer = gumbo_alloc(input->length + 1);
   92|   280k|  memcpy(buffer, input->data, input->length);
   93|   280k|  buffer[input->length] = '\0';
   94|   280k|  return buffer;
   95|   280k|}
gumbo_string_buffer_clear:
   97|   269k|void gumbo_string_buffer_clear(GumboStringBuffer* input) {
   98|   269k|  input->length = 0;
   99|   269k|}
gumbo_string_buffer_destroy:
  101|   399k|void gumbo_string_buffer_destroy(GumboStringBuffer* buffer) {
  102|   399k|  gumbo_free(buffer->data);
  103|   399k|}
string_buffer.c:maybe_resize_string_buffer:
   28|  13.4M|) {
   29|  13.4M|  size_t new_length = buffer->length + additional_chars;
   30|  13.4M|  size_t new_capacity = buffer->capacity;
   31|  15.3M|  while (new_capacity < new_length) {
  ------------------
  |  Branch (31:10): [True: 1.95M, False: 13.4M]
  ------------------
   32|  1.95M|    new_capacity *= 2;
   33|  1.95M|  }
   34|  13.4M|  if (new_capacity != buffer->capacity) {
  ------------------
  |  Branch (34:7): [True: 881k, False: 12.5M]
  ------------------
   35|   881k|    buffer->data = gumbo_realloc(buffer->data, new_capacity);
   36|   881k|    buffer->capacity = new_capacity;
   37|   881k|  }
   38|  13.4M|}

gumbo_string_equals:
   26|  6.41k|) {
   27|  6.41k|  return
   28|  6.41k|    str1->length == str2->length
  ------------------
  |  Branch (28:5): [True: 1.40k, False: 5.01k]
  ------------------
   29|  1.40k|    && !memcmp(str1->data, str2->data, str1->length);
  ------------------
  |  Branch (29:8): [True: 931, False: 471]
  ------------------
   30|  6.41k|}
gumbo_string_equals_ignore_case:
   35|    213|) {
   36|    213|  return
   37|    213|    str1->length == str2->length
  ------------------
  |  Branch (37:5): [True: 8, False: 205]
  ------------------
   38|      8|    && !gumbo_ascii_strncasecmp(str1->data, str2->data, str1->length);
  ------------------
  |  Branch (38:8): [True: 1, False: 7]
  ------------------
   39|    213|}
gumbo_string_prefix_ignore_case:
   44|  3.35k|) {
   45|  3.35k|  return
   46|  3.35k|    prefix->length <= str->length
  ------------------
  |  Branch (46:5): [True: 1.69k, False: 1.66k]
  ------------------
   47|  1.69k|    && !gumbo_ascii_strncasecmp(prefix->data, str->data, prefix->length);
  ------------------
  |  Branch (47:8): [True: 0, False: 1.69k]
  ------------------
   48|  3.35k|}

gumbo_string_set_new:
   22|  1.32k|{
   23|  1.32k|  return hashmap_new(sizeof(char *), cap, SEED0, SEED1, string_hash, string_compare, NULL, NULL);
  ------------------
  |  |    6|  1.32k|#define SEED0 0xf00ba2
  ------------------
                return hashmap_new(sizeof(char *), cap, SEED0, SEED1, string_hash, string_compare, NULL, NULL);
  ------------------
  |  |    7|  1.32k|#define SEED1 0xfa1afe1
  ------------------
   24|  1.32k|}
gumbo_string_set_free:
   27|   345k|{
   28|   345k|  hashmap_free(set);
   29|   345k|}
gumbo_string_set_insert:
   33|  44.0k|{
   34|  44.0k|  hashmap_set(set, &str);
   35|  44.0k|}
gumbo_string_set_contains:
   39|  32.6k|{
   40|  32.6k|  return hashmap_get(set, &str) == NULL ? 0 : 1;
  ------------------
  |  Branch (40:10): [True: 22.8k, False: 9.74k]
  ------------------
   41|  32.6k|}
string_set.c:string_hash:
   15|  76.6k|string_hash(const void *item, uint64_t seed0, uint64_t seed1) {
   16|  76.6k|  const char *str = *(const char **)item;
   17|  76.6k|  return hashmap_xxhash3(str, strlen(str), seed0, seed1);
   18|  76.6k|}
string_set.c:string_compare:
   10|  9.74k|string_compare(const void *a, const void *b, void *udata) {
   11|  9.74k|  return strcmp(*(const char **)a, *(const char **)b);
   12|  9.74k|}

gumbo_get_svg_attr_replacement:
   76|  11.3k|{
   77|  11.3k|  static const unsigned char lengthtable[] =
   78|  11.3k|    {
   79|  11.3k|       0,  0,  0,  0,  0,  4,  0,  7,  7,  0,  8,  9, 10, 11,
   80|  11.3k|      11, 11, 11, 10, 16, 18, 16, 12, 16, 11, 13, 11, 12, 11,
   81|  11.3k|      16,  0, 17,  9,  9,  8,  9, 10, 13, 10, 12, 14,  8,  4,
   82|  11.3k|      12, 19,  7,  9, 12, 12, 11, 14, 10, 19,  8, 16, 13, 16,
   83|  11.3k|      16, 15, 10, 12,  0,  0, 13, 13, 13,  0,  0,  9, 16,  0,
   84|  11.3k|       0,  0,  0,  0,  0,  0,  0, 17
   85|  11.3k|    };
   86|  11.3k|  static const StringReplacement wordlist[] =
   87|  11.3k|    {
   88|  11.3k|      {(char*)0,(char*)0}, {(char*)0,(char*)0},
   89|  11.3k|      {(char*)0,(char*)0}, {(char*)0,(char*)0},
   90|  11.3k|      {(char*)0,(char*)0},
   91|  11.3k|      {"refx", "refX"},
   92|  11.3k|      {(char*)0,(char*)0},
   93|  11.3k|      {"viewbox", "viewBox"},
   94|  11.3k|      {"targetx", "targetX"},
   95|  11.3k|      {(char*)0,(char*)0},
   96|  11.3k|      {"calcmode", "calcMode"},
   97|  11.3k|      {"maskunits", "maskUnits"},
   98|  11.3k|      {"viewtarget", "viewTarget"},
   99|  11.3k|      {"tablevalues", "tableValues"},
  100|  11.3k|      {"markerunits", "markerUnits"},
  101|  11.3k|      {"stitchtiles", "stitchTiles"},
  102|  11.3k|      {"startoffset", "startOffset"},
  103|  11.3k|      {"numoctaves", "numOctaves"},
  104|  11.3k|      {"requiredfeatures", "requiredFeatures"},
  105|  11.3k|      {"requiredextensions", "requiredExtensions"},
  106|  11.3k|      {"specularexponent", "specularExponent"},
  107|  11.3k|      {"surfacescale", "surfaceScale"},
  108|  11.3k|      {"specularconstant", "specularConstant"},
  109|  11.3k|      {"repeatcount", "repeatCount"},
  110|  11.3k|      {"clippathunits", "clipPathUnits"},
  111|  11.3k|      {"filterunits", "filterUnits"},
  112|  11.3k|      {"lengthadjust", "lengthAdjust"},
  113|  11.3k|      {"markerwidth", "markerWidth"},
  114|  11.3k|      {"maskcontentunits", "maskContentUnits"},
  115|  11.3k|      {(char*)0,(char*)0},
  116|  11.3k|      {"limitingconeangle", "limitingConeAngle"},
  117|  11.3k|      {"pointsatx", "pointsAtX"},
  118|  11.3k|      {"repeatdur", "repeatDur"},
  119|  11.3k|      {"keytimes", "keyTimes"},
  120|  11.3k|      {"keypoints", "keyPoints"},
  121|  11.3k|      {"keysplines", "keySplines"},
  122|  11.3k|      {"gradientunits", "gradientUnits"},
  123|  11.3k|      {"textlength", "textLength"},
  124|  11.3k|      {"stddeviation", "stdDeviation"},
  125|  11.3k|      {"primitiveunits", "primitiveUnits"},
  126|  11.3k|      {"edgemode", "edgeMode"},
  127|  11.3k|      {"refy", "refY"},
  128|  11.3k|      {"spreadmethod", "spreadMethod"},
  129|  11.3k|      {"preserveaspectratio", "preserveAspectRatio"},
  130|  11.3k|      {"targety", "targetY"},
  131|  11.3k|      {"pointsatz", "pointsAtZ"},
  132|  11.3k|      {"markerheight", "markerHeight"},
  133|  11.3k|      {"patternunits", "patternUnits"},
  134|  11.3k|      {"baseprofile", "baseProfile"},
  135|  11.3k|      {"systemlanguage", "systemLanguage"},
  136|  11.3k|      {"zoomandpan", "zoomAndPan"},
  137|  11.3k|      {"patterncontentunits", "patternContentUnits"},
  138|  11.3k|      {"glyphref", "glyphRef"},
  139|  11.3k|      {"xchannelselector", "xChannelSelector"},
  140|  11.3k|      {"attributetype", "attributeType"},
  141|  11.3k|      {"kernelunitlength", "kernelUnitLength"},
  142|  11.3k|      {"ychannelselector", "yChannelSelector"},
  143|  11.3k|      {"diffuseconstant", "diffuseConstant"},
  144|  11.3k|      {"pathlength", "pathLength"},
  145|  11.3k|      {"kernelmatrix", "kernelMatrix"},
  146|  11.3k|      {(char*)0,(char*)0}, {(char*)0,(char*)0},
  147|  11.3k|      {"preservealpha", "preserveAlpha"},
  148|  11.3k|      {"attributename", "attributeName"},
  149|  11.3k|      {"basefrequency", "baseFrequency"},
  150|  11.3k|      {(char*)0,(char*)0}, {(char*)0,(char*)0},
  151|  11.3k|      {"pointsaty", "pointsAtY"},
  152|  11.3k|      {"patterntransform", "patternTransform"},
  153|  11.3k|      {(char*)0,(char*)0}, {(char*)0,(char*)0},
  154|  11.3k|      {(char*)0,(char*)0}, {(char*)0,(char*)0},
  155|  11.3k|      {(char*)0,(char*)0}, {(char*)0,(char*)0},
  156|  11.3k|      {(char*)0,(char*)0}, {(char*)0,(char*)0},
  157|  11.3k|      {"gradienttransform", "gradientTransform"}
  158|  11.3k|    };
  159|       |
  160|  11.3k|  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  ------------------
  |  |   13|  22.7k|#define MAX_WORD_LENGTH 19
  ------------------
                if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  ------------------
  |  |   12|  10.8k|#define MIN_WORD_LENGTH 4
  ------------------
  |  Branch (160:7): [True: 10.8k, False: 513]
  |  Branch (160:33): [True: 6.28k, False: 4.56k]
  ------------------
  161|  6.28k|    {
  162|  6.28k|      register unsigned int key = hash (str, len);
  163|       |
  164|  6.28k|      if (key <= MAX_HASH_VALUE)
  ------------------
  |  |   15|  6.28k|#define MAX_HASH_VALUE 77
  ------------------
  |  Branch (164:11): [True: 2.02k, False: 4.25k]
  ------------------
  165|  2.02k|        if (len == lengthtable[key])
  ------------------
  |  Branch (165:13): [True: 803, False: 1.22k]
  ------------------
  166|    803|          {
  167|    803|            register const char *s = wordlist[key].from;
  168|       |
  169|    803|            if (s && (((unsigned char)*str ^ (unsigned char)*s) & ~32) == 0 && !gumbo_ascii_strncasecmp(str, s, len))
  ------------------
  |  Branch (169:17): [True: 803, False: 0]
  |  Branch (169:22): [True: 432, False: 371]
  |  Branch (169:80): [True: 201, False: 231]
  ------------------
  170|    201|              return &wordlist[key];
  171|    803|          }
  172|  6.28k|    }
  173|  11.1k|  return 0;
  174|  11.3k|}
svg_attrs.c:hash:
   22|  6.28k|{
   23|  6.28k|  static const unsigned char asso_values[] =
   24|  6.28k|    {
   25|  6.28k|      78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
   26|  6.28k|      78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
   27|  6.28k|      78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
   28|  6.28k|      78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
   29|  6.28k|      78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
   30|  6.28k|      78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
   31|  6.28k|      78, 78, 78, 78, 78,  5, 78, 39, 14,  1,
   32|  6.28k|      31, 31, 13, 13, 78, 78, 22, 25, 10,  2,
   33|  6.28k|       7, 78, 22,  0,  1,  3,  1, 78,  0, 36,
   34|  6.28k|      14, 17, 20, 78, 78, 78, 78,  5, 78, 39,
   35|  6.28k|      14,  1, 31, 31, 13, 13, 78, 78, 22, 25,
   36|  6.28k|      10,  2,  7, 78, 22,  0,  1,  3,  1, 78,
   37|  6.28k|       0, 36, 14, 17, 20, 78, 78, 78, 78, 78,
   38|  6.28k|      78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
   39|  6.28k|      78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
   40|  6.28k|      78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
   41|  6.28k|      78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
   42|  6.28k|      78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
   43|  6.28k|      78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
   44|  6.28k|      78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
   45|  6.28k|      78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
   46|  6.28k|      78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
   47|  6.28k|      78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
   48|  6.28k|      78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
   49|  6.28k|      78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
   50|  6.28k|      78, 78, 78, 78, 78, 78, 78, 78
   51|  6.28k|    };
   52|  6.28k|  register unsigned int hval = len;
   53|       |
   54|  6.28k|  switch (hval)
   55|  6.28k|    {
   56|  1.08k|      default:
  ------------------
  |  Branch (56:7): [True: 1.08k, False: 5.20k]
  ------------------
   57|  1.08k|        hval += asso_values[(unsigned char)str[9]];
   58|       |      /*FALLTHROUGH*/
   59|  1.45k|      case 9:
  ------------------
  |  Branch (59:7): [True: 375, False: 5.90k]
  ------------------
   60|  2.15k|      case 8:
  ------------------
  |  Branch (60:7): [True: 700, False: 5.58k]
  ------------------
   61|  3.14k|      case 7:
  ------------------
  |  Branch (61:7): [True: 984, False: 5.29k]
  ------------------
   62|  3.97k|      case 6:
  ------------------
  |  Branch (62:7): [True: 831, False: 5.45k]
  ------------------
   63|  5.09k|      case 5:
  ------------------
  |  Branch (63:7): [True: 1.12k, False: 5.15k]
  ------------------
   64|  6.28k|      case 4:
  ------------------
  |  Branch (64:7): [True: 1.18k, False: 5.09k]
  ------------------
   65|  6.28k|      case 3:
  ------------------
  |  Branch (65:7): [True: 0, False: 6.28k]
  ------------------
   66|  6.28k|      case 2:
  ------------------
  |  Branch (66:7): [True: 0, False: 6.28k]
  ------------------
   67|  6.28k|      case 1:
  ------------------
  |  Branch (67:7): [True: 0, False: 6.28k]
  ------------------
   68|  6.28k|        hval += asso_values[(unsigned char)str[0]+2];
   69|  6.28k|        break;
   70|  6.28k|    }
   71|  6.28k|  return hval + asso_values[(unsigned char)str[len - 1]];
   72|  6.28k|}

gumbo_get_svg_tag_replacement:
   71|  8.00k|{
   72|  8.00k|  static const unsigned char lengthtable[] =
   73|  8.00k|    {
   74|  8.00k|       0,  0,  0,  0,  0,  0,  6,  0,  7,  7,  7,  8, 11, 12,
   75|  8.00k|      12, 13, 11, 12, 16,  7,  7, 16, 11,  7, 19,  8, 13, 17,
   76|  8.00k|      11, 12,  7,  8, 17,  8, 18,  8, 14, 12, 14, 14, 13,  7,
   77|  8.00k|      14
   78|  8.00k|    };
   79|  8.00k|  static const StringReplacement wordlist[] =
   80|  8.00k|    {
   81|  8.00k|      {(char*)0,(char*)0}, {(char*)0,(char*)0},
   82|  8.00k|      {(char*)0,(char*)0}, {(char*)0,(char*)0},
   83|  8.00k|      {(char*)0,(char*)0}, {(char*)0,(char*)0},
   84|  8.00k|      {"fetile", "feTile"},
   85|  8.00k|      {(char*)0,(char*)0},
   86|  8.00k|      {"femerge", "feMerge"},
   87|  8.00k|      {"feimage", "feImage"},
   88|  8.00k|      {"fefuncb", "feFuncB"},
   89|  8.00k|      {"glyphref", "glyphRef"},
   90|  8.00k|      {"femergenode", "feMergeNode"},
   91|  8.00k|      {"femorphology", "feMorphology"},
   92|  8.00k|      {"animatecolor", "animateColor"},
   93|  8.00k|      {"animatemotion", "animateMotion"},
   94|  8.00k|      {"fecomposite", "feComposite"},
   95|  8.00k|      {"feturbulence", "feTurbulence"},
   96|  8.00k|      {"animatetransform", "animateTransform"},
   97|  8.00k|      {"fefuncr", "feFuncR"},
   98|  8.00k|      {"fefunca", "feFuncA"},
   99|  8.00k|      {"feconvolvematrix", "feConvolveMatrix"},
  100|  8.00k|      {"fespotlight", "feSpotLight"},
  101|  8.00k|      {"fefuncg", "feFuncG"},
  102|  8.00k|      {"fecomponenttransfer", "feComponentTransfer"},
  103|  8.00k|      {"altglyph", "altGlyph"},
  104|  8.00k|      {"fecolormatrix", "feColorMatrix"},
  105|  8.00k|      {"fedisplacementmap", "feDisplacementMap"},
  106|  8.00k|      {"altglyphdef", "altGlyphDef"},
  107|  8.00k|      {"altglyphitem", "altGlyphItem"},
  108|  8.00k|      {"feflood", "feFlood"},
  109|  8.00k|      {"clippath", "clipPath"},
  110|  8.00k|      {"fediffuselighting", "feDiffuseLighting"},
  111|  8.00k|      {"textpath", "textPath"},
  112|  8.00k|      {"fespecularlighting", "feSpecularLighting"},
  113|  8.00k|      {"feoffset", "feOffset"},
  114|  8.00k|      {"fedistantlight", "feDistantLight"},
  115|  8.00k|      {"fepointlight", "fePointLight"},
  116|  8.00k|      {"lineargradient", "linearGradient"},
  117|  8.00k|      {"radialgradient", "radialGradient"},
  118|  8.00k|      {"foreignobject", "foreignObject"},
  119|  8.00k|      {"feblend", "feBlend"},
  120|  8.00k|      {"fegaussianblur", "feGaussianBlur"}
  121|  8.00k|    };
  122|       |
  123|  8.00k|  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  ------------------
  |  |   13|  16.0k|#define MAX_WORD_LENGTH 19
  ------------------
                if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  ------------------
  |  |   12|  6.97k|#define MIN_WORD_LENGTH 6
  ------------------
  |  Branch (123:7): [True: 6.97k, False: 1.03k]
  |  Branch (123:33): [True: 3.60k, False: 3.36k]
  ------------------
  124|  3.60k|    {
  125|  3.60k|      register unsigned int key = hash (str, len);
  126|       |
  127|  3.60k|      if (key <= MAX_HASH_VALUE)
  ------------------
  |  |   15|  3.60k|#define MAX_HASH_VALUE 42
  ------------------
  |  Branch (127:11): [True: 2.24k, False: 1.36k]
  ------------------
  128|  2.24k|        if (len == lengthtable[key])
  ------------------
  |  Branch (128:13): [True: 1.07k, False: 1.17k]
  ------------------
  129|  1.07k|          {
  130|  1.07k|            register const char *s = wordlist[key].from;
  131|       |
  132|  1.07k|            if (s && (((unsigned char)*str ^ (unsigned char)*s) & ~32) == 0 && !gumbo_ascii_strncasecmp(str, s, len))
  ------------------
  |  Branch (132:17): [True: 1.07k, False: 0]
  |  Branch (132:22): [True: 711, False: 362]
  |  Branch (132:80): [True: 391, False: 320]
  ------------------
  133|    391|              return &wordlist[key];
  134|  1.07k|          }
  135|  3.60k|    }
  136|  7.61k|  return 0;
  137|  8.00k|}
svg_tags.c:hash:
   22|  3.60k|{
   23|  3.60k|  static const unsigned char asso_values[] =
   24|  3.60k|    {
   25|  3.60k|      43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
   26|  3.60k|      43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
   27|  3.60k|      43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
   28|  3.60k|      43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
   29|  3.60k|      43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
   30|  3.60k|      43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
   31|  3.60k|      43, 43, 43, 43, 43, 43, 12,  2, 10, 22,
   32|  3.60k|       1, 28, 15,  1, 43, 43, 43,  0,  9, 26,
   33|  3.60k|       3, 17,  1, 11,  0, 22,  5, 43,  3,  2,
   34|  3.60k|      43, 43, 43, 43, 43, 43, 43, 43, 12,  2,
   35|  3.60k|      10, 22,  1, 28, 15,  1, 43, 43, 43,  0,
   36|  3.60k|       9, 26,  3, 17,  1, 11,  0, 22,  5, 43,
   37|  3.60k|       3,  2, 43, 43, 43, 43, 43, 43, 43, 43,
   38|  3.60k|      43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
   39|  3.60k|      43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
   40|  3.60k|      43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
   41|  3.60k|      43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
   42|  3.60k|      43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
   43|  3.60k|      43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
   44|  3.60k|      43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
   45|  3.60k|      43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
   46|  3.60k|      43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
   47|  3.60k|      43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
   48|  3.60k|      43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
   49|  3.60k|      43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
   50|  3.60k|      43, 43, 43, 43, 43, 43, 43
   51|  3.60k|    };
   52|  3.60k|  register unsigned int hval = len;
   53|       |
   54|  3.60k|  switch (hval)
   55|  3.60k|    {
   56|  2.27k|      default:
  ------------------
  |  Branch (56:7): [True: 2.27k, False: 1.33k]
  ------------------
   57|  2.27k|        hval += asso_values[(unsigned char)str[6]+1];
   58|       |      /*FALLTHROUGH*/
   59|  3.60k|      case 6:
  ------------------
  |  Branch (59:7): [True: 1.33k, False: 2.27k]
  ------------------
   60|  3.60k|      case 5:
  ------------------
  |  Branch (60:7): [True: 0, False: 3.60k]
  ------------------
   61|  3.60k|      case 4:
  ------------------
  |  Branch (61:7): [True: 0, False: 3.60k]
  ------------------
   62|  3.60k|      case 3:
  ------------------
  |  Branch (62:7): [True: 0, False: 3.60k]
  ------------------
   63|  3.60k|        hval += asso_values[(unsigned char)str[2]];
   64|  3.60k|        break;
   65|  3.60k|    }
   66|  3.60k|  return hval;
   67|  3.60k|}

gumbo_normalized_tagname:
  181|  1.77M|const char* gumbo_normalized_tagname(GumboTag tag) {
  182|  1.77M|  assert(tag <= GUMBO_TAG_LAST);
  ------------------
  |  Branch (182:3): [True: 0, False: 1.77M]
  |  Branch (182:3): [True: 1.77M, False: 0]
  ------------------
  183|  1.77M|  const char *tagname = kGumboTagNames[tag];
  184|  1.77M|  assert(tagname);
  ------------------
  |  Branch (184:3): [True: 0, False: 1.77M]
  |  Branch (184:3): [True: 1.77M, False: 0]
  ------------------
  185|  1.77M|  return tagname;
  186|  1.77M|}
gumbo_tagn_enum:
  220|   345k|GumboTag gumbo_tagn_enum(const char *tagname, size_t tagname_length) {
  221|   345k|    const TagHashSlot *slot = gumbo_tag_lookup(tagname, tagname_length);
  222|   345k|    return slot ? slot->tag : GUMBO_TAG_UNKNOWN;
  ------------------
  |  Branch (222:12): [True: 254k, False: 90.7k]
  ------------------
  223|   345k|}

gumbo_tag_lookup:
   68|   345k|{
   69|   345k|  static const unsigned char lengthtable[] =
   70|   345k|    {
   71|   345k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  2,
   72|   345k|       2,  2,  2,  6,  2,  6,  6,  4,  2,  7,  6,  3,  0,  3,
   73|   345k|       0,  6,  6,  8,  5,  0,  0,  4,  5,  5,  8,  0,  2,  4,
   74|   345k|       5,  2,  0,  5,  4,  2,  0,  7,  0,  8,  5,  0,  0,  0,
   75|   345k|       0,  0,  0,  5,  3,  4,  5,  1,  4,  0,  4,  1,  2,  8,
   76|   345k|       7,  7,  6,  6,  8,  2,  8,  4,  2,  0,  6,  0,  0,  3,
   77|   345k|       4,  6, 13,  4,  4,  6,  8,  0,  8,  4,  0,  6,  0,  8,
   78|   345k|       4,  5,  0,  2,  2,  9,  2,  4,  0,  8,  4,  2,  4,  8,
   79|   345k|       7,  0,  2,  5,  2,  0,  6,  0,  3,  2,  2,  6,  3,  8,
   80|   345k|       7,  2,  5,  7,  0,  2,  6,  2,  4,  3,  0, 10,  5,  6,
   81|   345k|       3,  1,  2,  0,  6,  0,  5,  5,  0,  3,  0,  3,  3,  1,
   82|   345k|       4,  6,  4,  7,  3,  0,  0,  2, 10, 10,  0,  0,  6,  1,
   83|   345k|       4,  6,  3,  0,  2,  5,  6,  4,  3,  4,  0,  7,  3,  0,
   84|   345k|       0,  0,  4,  0,  0,  5,  0,  0,  0,  6,  0, 14,  8,  1,
   85|   345k|       3,  0,  0,  7,  3,  0,  0,  0,  0,  0,  0,  5,  3,  0,
   86|   345k|       0,  0,  0,  0,  0,  5,  0,  0,  0,  0,  7,  6,  0,  0,
   87|   345k|       0,  0,  0,  5,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,
   88|   345k|       3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   89|   345k|       0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,
   90|   345k|       0,  0,  5,  0,  0,  3
   91|   345k|    };
   92|   345k|  static const TagHashSlot wordlist[] =
   93|   345k|    {
   94|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
   95|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
   96|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
   97|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
   98|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
   99|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  100|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  101|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  102|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  103|   345k|      {"s", GUMBO_TAG_S},
  104|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  105|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  106|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  107|   345k|      {"h6", GUMBO_TAG_H6},
  108|   345k|      {"h5", GUMBO_TAG_H5},
  109|   345k|      {"h4", GUMBO_TAG_H4},
  110|   345k|      {"h3", GUMBO_TAG_H3},
  111|   345k|      {"spacer", GUMBO_TAG_SPACER},
  112|   345k|      {"h2", GUMBO_TAG_H2},
  113|   345k|      {"header", GUMBO_TAG_HEADER},
  114|   345k|      {"search", GUMBO_TAG_SEARCH},
  115|   345k|      {"head", GUMBO_TAG_HEAD},
  116|   345k|      {"h1", GUMBO_TAG_H1},
  117|   345k|      {"details", GUMBO_TAG_DETAILS},
  118|   345k|      {"select", GUMBO_TAG_SELECT},
  119|   345k|      {"dir", GUMBO_TAG_DIR},
  120|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  121|   345k|      {"del", GUMBO_TAG_DEL},
  122|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  123|   345k|      {"source", GUMBO_TAG_SOURCE},
  124|   345k|      {"legend", GUMBO_TAG_LEGEND},
  125|   345k|      {"datalist", GUMBO_TAG_DATALIST},
  126|   345k|      {"meter", GUMBO_TAG_METER},
  127|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  128|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  129|   345k|      {"math", GUMBO_TAG_MATH},
  130|   345k|      {"label", GUMBO_TAG_LABEL},
  131|   345k|      {"table", GUMBO_TAG_TABLE},
  132|   345k|      {"template", GUMBO_TAG_TEMPLATE},
  133|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  134|   345k|      {"rp", GUMBO_TAG_RP},
  135|   345k|      {"time", GUMBO_TAG_TIME},
  136|   345k|      {"title", GUMBO_TAG_TITLE},
  137|   345k|      {"hr", GUMBO_TAG_HR},
  138|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  139|   345k|      {"tbody", GUMBO_TAG_TBODY},
  140|   345k|      {"samp", GUMBO_TAG_SAMP},
  141|   345k|      {"tr", GUMBO_TAG_TR},
  142|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  143|   345k|      {"marquee", GUMBO_TAG_MARQUEE},
  144|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  145|   345k|      {"menuitem", GUMBO_TAG_MENUITEM},
  146|   345k|      {"small", GUMBO_TAG_SMALL},
  147|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  148|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  149|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  150|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  151|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  152|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  153|   345k|      {"embed", GUMBO_TAG_EMBED},
  154|   345k|      {"map", GUMBO_TAG_MAP},
  155|   345k|      {"menu", GUMBO_TAG_MENU},
  156|   345k|      {"param", GUMBO_TAG_PARAM},
  157|   345k|      {"p", GUMBO_TAG_P},
  158|   345k|      {"nobr", GUMBO_TAG_NOBR},
  159|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  160|   345k|      {"span", GUMBO_TAG_SPAN},
  161|   345k|      {"u", GUMBO_TAG_U},
  162|   345k|      {"em", GUMBO_TAG_EM},
  163|   345k|      {"noframes", GUMBO_TAG_NOFRAMES},
  164|   345k|      {"section", GUMBO_TAG_SECTION},
  165|   345k|      {"noembed", GUMBO_TAG_NOEMBED},
  166|   345k|      {"nextid", GUMBO_TAG_NEXTID},
  167|   345k|      {"footer", GUMBO_TAG_FOOTER},
  168|   345k|      {"noscript", GUMBO_TAG_NOSCRIPT},
  169|   345k|      {"dl", GUMBO_TAG_DL},
  170|   345k|      {"progress", GUMBO_TAG_PROGRESS},
  171|   345k|      {"font", GUMBO_TAG_FONT},
  172|   345k|      {"mo", GUMBO_TAG_MO},
  173|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  174|   345k|      {"script", GUMBO_TAG_SCRIPT},
  175|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  176|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  177|   345k|      {"pre", GUMBO_TAG_PRE},
  178|   345k|      {"main", GUMBO_TAG_MAIN},
  179|   345k|      {"object", GUMBO_TAG_OBJECT},
  180|   345k|      {"foreignobject", GUMBO_TAG_FOREIGNOBJECT},
  181|   345k|      {"form", GUMBO_TAG_FORM},
  182|   345k|      {"data", GUMBO_TAG_DATA},
  183|   345k|      {"applet", GUMBO_TAG_APPLET},
  184|   345k|      {"fieldset", GUMBO_TAG_FIELDSET},
  185|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  186|   345k|      {"textarea", GUMBO_TAG_TEXTAREA},
  187|   345k|      {"abbr", GUMBO_TAG_ABBR},
  188|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  189|   345k|      {"figure", GUMBO_TAG_FIGURE},
  190|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  191|   345k|      {"optgroup", GUMBO_TAG_OPTGROUP},
  192|   345k|      {"meta", GUMBO_TAG_META},
  193|   345k|      {"tfoot", GUMBO_TAG_TFOOT},
  194|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  195|   345k|      {"ul", GUMBO_TAG_UL},
  196|   345k|      {"li", GUMBO_TAG_LI},
  197|   345k|      {"plaintext", GUMBO_TAG_PLAINTEXT},
  198|   345k|      {"rb", GUMBO_TAG_RB},
  199|   345k|      {"body", GUMBO_TAG_BODY},
  200|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  201|   345k|      {"basefont", GUMBO_TAG_BASEFONT},
  202|   345k|      {"ruby", GUMBO_TAG_RUBY},
  203|   345k|      {"mi", GUMBO_TAG_MI},
  204|   345k|      {"base", GUMBO_TAG_BASE},
  205|   345k|      {"frameset", GUMBO_TAG_FRAMESET},
  206|   345k|      {"summary", GUMBO_TAG_SUMMARY},
  207|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  208|   345k|      {"dd", GUMBO_TAG_DD},
  209|   345k|      {"frame", GUMBO_TAG_FRAME},
  210|   345k|      {"td", GUMBO_TAG_TD},
  211|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  212|   345k|      {"option", GUMBO_TAG_OPTION},
  213|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  214|   345k|      {"svg", GUMBO_TAG_SVG},
  215|   345k|      {"br", GUMBO_TAG_BR},
  216|   345k|      {"ol", GUMBO_TAG_OL},
  217|   345k|      {"dialog", GUMBO_TAG_DIALOG},
  218|   345k|      {"sup", GUMBO_TAG_SUP},
  219|   345k|      {"multicol", GUMBO_TAG_MULTICOL},
  220|   345k|      {"article", GUMBO_TAG_ARTICLE},
  221|   345k|      {"rt", GUMBO_TAG_RT},
  222|   345k|      {"image", GUMBO_TAG_IMAGE},
  223|   345k|      {"listing", GUMBO_TAG_LISTING},
  224|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  225|   345k|      {"dt", GUMBO_TAG_DT},
  226|   345k|      {"mglyph", GUMBO_TAG_MGLYPH},
  227|   345k|      {"tt", GUMBO_TAG_TT},
  228|   345k|      {"html", GUMBO_TAG_HTML},
  229|   345k|      {"wbr", GUMBO_TAG_WBR},
  230|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  231|   345k|      {"figcaption", GUMBO_TAG_FIGCAPTION},
  232|   345k|      {"style", GUMBO_TAG_STYLE},
  233|   345k|      {"strike", GUMBO_TAG_STRIKE},
  234|   345k|      {"dfn", GUMBO_TAG_DFN},
  235|   345k|      {"a", GUMBO_TAG_A},
  236|   345k|      {"th", GUMBO_TAG_TH},
  237|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  238|   345k|      {"hgroup", GUMBO_TAG_HGROUP},
  239|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  240|   345k|      {"mtext", GUMBO_TAG_MTEXT},
  241|   345k|      {"thead", GUMBO_TAG_THEAD},
  242|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  243|   345k|      {"var", GUMBO_TAG_VAR},
  244|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  245|   345k|      {"xmp", GUMBO_TAG_XMP},
  246|   345k|      {"kbd", GUMBO_TAG_KBD},
  247|   345k|      {"i", GUMBO_TAG_I},
  248|   345k|      {"link", GUMBO_TAG_LINK},
  249|   345k|      {"output", GUMBO_TAG_OUTPUT},
  250|   345k|      {"mark", GUMBO_TAG_MARK},
  251|   345k|      {"acronym", GUMBO_TAG_ACRONYM},
  252|   345k|      {"div", GUMBO_TAG_DIV},
  253|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  254|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  255|   345k|      {"ms", GUMBO_TAG_MS},
  256|   345k|      {"malignmark", GUMBO_TAG_MALIGNMARK},
  257|   345k|      {"blockquote", GUMBO_TAG_BLOCKQUOTE},
  258|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  259|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  260|   345k|      {"center", GUMBO_TAG_CENTER},
  261|   345k|      {"b", GUMBO_TAG_B},
  262|   345k|      {"desc", GUMBO_TAG_DESC},
  263|   345k|      {"canvas", GUMBO_TAG_CANVAS},
  264|   345k|      {"col", GUMBO_TAG_COL},
  265|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  266|   345k|      {"mn", GUMBO_TAG_MN},
  267|   345k|      {"track", GUMBO_TAG_TRACK},
  268|   345k|      {"iframe", GUMBO_TAG_IFRAME},
  269|   345k|      {"code", GUMBO_TAG_CODE},
  270|   345k|      {"sub", GUMBO_TAG_SUB},
  271|   345k|      {"area", GUMBO_TAG_AREA},
  272|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  273|   345k|      {"address", GUMBO_TAG_ADDRESS},
  274|   345k|      {"ins", GUMBO_TAG_INS},
  275|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  276|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  277|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  278|   345k|      {"cite", GUMBO_TAG_CITE},
  279|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  280|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  281|   345k|      {"input", GUMBO_TAG_INPUT},
  282|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  283|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  284|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  285|   345k|      {"keygen", GUMBO_TAG_KEYGEN},
  286|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  287|   345k|      {"annotation-xml", GUMBO_TAG_ANNOTATION_XML},
  288|   345k|      {"colgroup", GUMBO_TAG_COLGROUP},
  289|   345k|      {"q", GUMBO_TAG_Q},
  290|   345k|      {"big", GUMBO_TAG_BIG},
  291|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  292|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  293|   345k|      {"bgsound", GUMBO_TAG_BGSOUND},
  294|   345k|      {"nav", GUMBO_TAG_NAV},
  295|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  296|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  297|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  298|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  299|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  300|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  301|   345k|      {"video", GUMBO_TAG_VIDEO},
  302|   345k|      {"img", GUMBO_TAG_IMG},
  303|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  304|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  305|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  306|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  307|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  308|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  309|   345k|      {"audio", GUMBO_TAG_AUDIO},
  310|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  311|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  312|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  313|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  314|   345k|      {"caption", GUMBO_TAG_CAPTION},
  315|   345k|      {"strong", GUMBO_TAG_STRONG},
  316|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  317|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  318|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  319|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  320|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  321|   345k|      {"aside", GUMBO_TAG_ASIDE},
  322|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  323|   345k|      {"button", GUMBO_TAG_BUTTON},
  324|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  325|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  326|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  327|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  328|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  329|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  330|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  331|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  332|   345k|      {"bdo", GUMBO_TAG_BDO},
  333|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  334|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  335|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  336|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  337|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  338|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  339|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  340|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  341|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  342|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  343|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  344|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  345|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  346|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  347|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  348|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  349|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  350|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  351|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  352|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  353|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  354|   345k|      {"bdi", GUMBO_TAG_BDI},
  355|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  356|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  357|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  358|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  359|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  360|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  361|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  362|   345k|      {"blink", GUMBO_TAG_BLINK},
  363|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  364|   345k|      {(char*)0,GUMBO_TAG_UNKNOWN},
  365|   345k|      {"rtc", GUMBO_TAG_RTC}
  366|   345k|    };
  367|       |
  368|   345k|  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  ------------------
  |  |   13|   690k|#define MAX_WORD_LENGTH 14
  ------------------
                if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  ------------------
  |  |   12|   330k|#define MIN_WORD_LENGTH 1
  ------------------
  |  Branch (368:7): [True: 330k, False: 14.5k]
  |  Branch (368:33): [True: 330k, False: 0]
  ------------------
  369|   330k|    {
  370|   330k|      register unsigned int key = hash (str, len);
  371|       |
  372|   330k|      if (key <= MAX_HASH_VALUE)
  ------------------
  |  |   15|   330k|#define MAX_HASH_VALUE 271
  ------------------
  |  Branch (372:11): [True: 311k, False: 19.2k]
  ------------------
  373|   311k|        if (len == lengthtable[key])
  ------------------
  |  Branch (373:13): [True: 258k, False: 52.8k]
  ------------------
  374|   258k|          {
  375|   258k|            register const char *s = wordlist[key].key;
  376|       |
  377|   258k|            if (s && (((unsigned char)*str ^ (unsigned char)*s) & ~32) == 0 && !gumbo_ascii_strncasecmp(str, s, len))
  ------------------
  |  Branch (377:17): [True: 258k, False: 0]
  |  Branch (377:22): [True: 256k, False: 1.87k]
  |  Branch (377:80): [True: 254k, False: 2.22k]
  ------------------
  378|   254k|              return &wordlist[key];
  379|   258k|          }
  380|   330k|    }
  381|  90.7k|  return 0;
  382|   345k|}
tag_lookup.c:hash:
   22|   330k|{
   23|   330k|  static const unsigned short asso_values[] =
   24|   330k|    {
   25|   330k|      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
   26|   330k|      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
   27|   330k|      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
   28|   330k|      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
   29|   330k|      272, 272, 272, 272, 272, 272, 272, 272, 272,  11,
   30|   330k|        7,   6,   4,   4,   3,   4,   3,   3, 272, 272,
   31|   330k|      272, 272, 272, 272, 272,  70,  83, 152,   7,  16,
   32|   330k|       61,  98,   5,  76, 102, 126,  12,  19,  54,  54,
   33|   330k|       31,  97,   3,   4,   9,  33, 136, 113,  86,  15,
   34|   330k|      272, 272, 272, 272, 272, 272, 272,  70,  83, 152,
   35|   330k|        7,  16,  61,  98,   5,  76, 102, 126,  12,  19,
   36|   330k|       54,  54,  31,  97,   3,   4,   9,  33, 136, 113,
   37|   330k|       86,  15, 272, 272, 272, 272, 272, 272, 272, 272,
   38|   330k|      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
   39|   330k|      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
   40|   330k|      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
   41|   330k|      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
   42|   330k|      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
   43|   330k|      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
   44|   330k|      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
   45|   330k|      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
   46|   330k|      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
   47|   330k|      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
   48|   330k|      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
   49|   330k|      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
   50|   330k|      272, 272, 272, 272, 272, 272, 272, 272, 272
   51|   330k|    };
   52|   330k|  register unsigned int hval = len;
   53|       |
   54|   330k|  switch (hval)
   55|   330k|    {
   56|   220k|      default:
  ------------------
  |  Branch (56:7): [True: 220k, False: 110k]
  ------------------
   57|   220k|        hval += asso_values[(unsigned char)str[1]+3];
   58|       |      /*FALLTHROUGH*/
   59|   330k|      case 1:
  ------------------
  |  Branch (59:7): [True: 110k, False: 220k]
  ------------------
   60|   330k|        hval += asso_values[(unsigned char)str[0]];
   61|   330k|        break;
   62|   330k|    }
   63|   330k|  return hval + asso_values[(unsigned char)str[len - 1]];
   64|   330k|}

gumbo_character_token_buffer_init:
   30|  26.7k|void gumbo_character_token_buffer_init(GumboCharacterTokenBuffer* buffer) {
   31|       |  buffer->data = NULL;
   32|  26.7k|  buffer->length = 0;
   33|  26.7k|  buffer->capacity = 0;
   34|  26.7k|}
gumbo_character_token_buffer_append:
   39|   266k|) {
   40|   266k|  assert(token->type == GUMBO_TOKEN_WHITESPACE
  ------------------
  |  Branch (40:3): [True: 266k, False: 0]
  |  Branch (40:3): [True: 0, False: 0]
  |  Branch (40:3): [True: 2.49k, False: 264k]
  |  Branch (40:3): [True: 264k, False: 0]
  ------------------
   41|   266k|         || token->type == GUMBO_TOKEN_CHARACTER);
   42|   266k|  if (buffer->length == buffer->capacity) {
  ------------------
  |  Branch (42:7): [True: 2.35k, False: 264k]
  ------------------
   43|  2.35k|    if (buffer->capacity == 0)
  ------------------
  |  Branch (43:9): [True: 1.16k, False: 1.19k]
  ------------------
   44|  1.16k|      buffer->capacity = 10;
   45|  1.19k|    else
   46|  1.19k|      buffer->capacity *= 2;
   47|  2.35k|    size_t bytes = sizeof(*buffer->data) * buffer->capacity;
   48|  2.35k|    buffer->data = gumbo_realloc(buffer->data, bytes);
   49|  2.35k|  }
   50|   266k|  size_t index = buffer->length++;
   51|   266k|  buffer->data[index].position = token->position;
   52|   266k|  buffer->data[index].original_text = token->original_text;
   53|   266k|  buffer->data[index].c = token->v.character;
   54|   266k|}
gumbo_character_token_buffer_get:
   60|   266k|) {
   61|   266k|  assert(index < buffer->length);
  ------------------
  |  Branch (61:3): [True: 0, False: 266k]
  |  Branch (61:3): [True: 266k, False: 0]
  ------------------
   62|   266k|  int c = buffer->data[index].c;
   63|   266k|  output->type = gumbo_ascii_isspace(c)?
  ------------------
  |  Branch (63:18): [True: 2.04k, False: 264k]
  ------------------
   64|   264k|    GUMBO_TOKEN_WHITESPACE : GUMBO_TOKEN_CHARACTER;
   65|   266k|  output->position = buffer->data[index].position;
   66|   266k|  output->original_text = buffer->data[index].original_text;
   67|   266k|  output->v.character = c;
   68|   266k|}
gumbo_character_token_buffer_clear:
   70|  6.45k|void gumbo_character_token_buffer_clear(GumboCharacterTokenBuffer* buffer) {
   71|  6.45k|  buffer->length = 0;
   72|  6.45k|}
gumbo_character_token_buffer_destroy:
   74|  26.7k|void gumbo_character_token_buffer_destroy(GumboCharacterTokenBuffer* buffer) {
   75|  26.7k|  gumbo_free(buffer->data);
   76|       |  buffer->data = NULL;
   77|  26.7k|  buffer->length = 0;
   78|  26.7k|  buffer->capacity = 0;
   79|  26.7k|}

gumbo_tokenizer_state_init:
  906|  26.7k|) {
  907|  26.7k|  GumboTokenizerState* tokenizer = gumbo_alloc(sizeof(GumboTokenizerState));
  908|  26.7k|  parser->_tokenizer_state = tokenizer;
  909|  26.7k|  gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
  910|  26.7k|  tokenizer->_return_state = GUMBO_LEX_DATA;
  911|  26.7k|  tokenizer->_character_reference_code = 0;
  912|  26.7k|  tokenizer->_reconsume_current_input = false;
  913|  26.7k|  tokenizer->_is_adjusted_current_node_foreign = false;
  914|  26.7k|  tokenizer->_is_in_cdata = false;
  915|  26.7k|  tokenizer->_tag_state._last_start_tag = GUMBO_TAG_LAST;
  916|  26.7k|  tokenizer->_tag_state._name = NULL;
  917|       |
  918|  26.7k|  tokenizer->_buffered_emit_char = kGumboNoChar;
  ------------------
  |  |   11|  26.7k|#define kGumboNoChar (-1)
  ------------------
  919|  26.7k|  gumbo_string_buffer_init(&tokenizer->_temporary_buffer);
  920|  26.7k|  tokenizer->_resume_pos = NULL;
  921|       |
  922|  26.7k|  mark_tag_state_as_empty(&tokenizer->_tag_state);
  923|       |
  924|  26.7k|  utf8iterator_init(parser, text, text_length, &tokenizer->_input);
  925|  26.7k|  utf8iterator_get_position(&tokenizer->_input, &tokenizer->_token_start_pos);
  926|  26.7k|  tokenizer->_token_start = utf8iterator_get_char_pointer(&tokenizer->_input);
  927|  26.7k|  doc_type_state_init(parser);
  928|  26.7k|}
gumbo_tokenizer_state_destroy:
  930|  26.7k|void gumbo_tokenizer_state_destroy(GumboParser* parser) {
  931|  26.7k|  GumboTokenizerState* tokenizer = parser->_tokenizer_state;
  932|  26.7k|  assert(tokenizer->_doc_type_state.name == NULL);
  ------------------
  |  Branch (932:3): [True: 0, False: 26.7k]
  |  Branch (932:3): [True: 26.7k, False: 0]
  ------------------
  933|  26.7k|  assert(tokenizer->_doc_type_state.public_identifier == NULL);
  ------------------
  |  Branch (933:3): [True: 0, False: 26.7k]
  |  Branch (933:3): [True: 26.7k, False: 0]
  ------------------
  934|  26.7k|  assert(tokenizer->_doc_type_state.system_identifier == NULL);
  ------------------
  |  Branch (934:3): [True: 0, False: 26.7k]
  |  Branch (934:3): [True: 26.7k, False: 0]
  ------------------
  935|  26.7k|  gumbo_string_buffer_destroy(&tokenizer->_temporary_buffer);
  936|  26.7k|  assert(tokenizer->_tag_state._name == NULL);
  ------------------
  |  Branch (936:3): [True: 0, False: 26.7k]
  |  Branch (936:3): [True: 26.7k, False: 0]
  ------------------
  937|  26.7k|  assert(tokenizer->_tag_state._attributes.data == NULL);
  ------------------
  |  Branch (937:3): [True: 0, False: 26.7k]
  |  Branch (937:3): [True: 26.7k, False: 0]
  ------------------
  938|  26.7k|  gumbo_free(tokenizer);
  939|  26.7k|}
gumbo_tokenizer_set_state:
  941|  2.39M|void gumbo_tokenizer_set_state(GumboParser* parser, GumboTokenizerEnum state) {
  942|  2.39M|  parser->_tokenizer_state->_state = state;
  943|  2.39M|}
gumbo_tokenizer_set_is_adjusted_current_node_foreign:
  948|  9.36M|) {
  949|  9.36M|  if (is_foreign != parser->_tokenizer_state->_is_adjusted_current_node_foreign) {
  ------------------
  |  Branch (949:7): [True: 5.42k, False: 9.36M]
  ------------------
  950|  5.42k|    gumbo_debug (
  951|  5.42k|      "Toggling is_current_node_foreign to %s.\n",
  952|  5.42k|      is_foreign ? "true" : "false"
  ------------------
  |  Branch (952:7): [True: 3.16k, False: 2.25k]
  ------------------
  953|  5.42k|    );
  954|  5.42k|  }
  955|  9.36M|  parser->_tokenizer_state->_is_adjusted_current_node_foreign = is_foreign;
  956|  9.36M|}
gumbo_lex:
 3406|  9.36M|void gumbo_lex(GumboParser* parser, GumboToken* output) {
 3407|       |  // Because of the spec requirements that...
 3408|       |  //
 3409|       |  // 1. Tokens be handled immediately by the parser upon emission.
 3410|       |  // 2. Some states (eg. CDATA, or various error conditions) require the
 3411|       |  // emission of multiple tokens in the same states.
 3412|       |  // 3. The tokenizer often has to reconsume the same character in a different
 3413|       |  // state.
 3414|       |  //
 3415|       |  // ...all state must be held in the GumboTokenizer struct instead of in local
 3416|       |  // variables in this function. That allows us to return from this method with
 3417|       |  // a token, and then immediately jump back to the same state with the same
 3418|       |  // input if we need to return a different token. The various emit_* functions
 3419|       |  // are responsible for changing state (eg. flushing the chardata buffer,
 3420|       |  // reading the next input character) to avoid an infinite loop.
 3421|  9.36M|  GumboTokenizerState* tokenizer = parser->_tokenizer_state;
 3422|       |
 3423|  9.36M|  if (tokenizer->_buffered_emit_char != kGumboNoChar) {
  ------------------
  |  |   11|  9.36M|#define kGumboNoChar (-1)
  ------------------
  |  Branch (3423:7): [True: 18.7k, False: 9.35M]
  ------------------
 3424|  18.7k|    tokenizer->_reconsume_current_input = true;
 3425|  18.7k|    emit_char(parser, tokenizer->_buffered_emit_char, output);
 3426|       |    // And now that we've avoided advancing the input, make sure we set
 3427|       |    // _reconsume_current_input back to false to make sure the *next* character
 3428|       |    // isn't consumed twice.
 3429|  18.7k|    tokenizer->_reconsume_current_input = false;
 3430|  18.7k|    tokenizer->_buffered_emit_char = kGumboNoChar;
  ------------------
  |  |   11|  18.7k|#define kGumboNoChar (-1)
  ------------------
 3431|  18.7k|    return;
 3432|  18.7k|  }
 3433|       |
 3434|  9.35M|  if (maybe_emit_from_mark(parser, output) == EMIT_TOKEN) {
  ------------------
  |  Branch (3434:7): [True: 103k, False: 9.24M]
  ------------------
 3435|   103k|    return;
 3436|   103k|  }
 3437|       |
 3438|  16.5M|  while (1) {
  ------------------
  |  Branch (3438:10): [True: 16.5M, Folded]
  ------------------
 3439|  16.5M|    assert(!tokenizer->_resume_pos);
  ------------------
  |  Branch (3439:5): [True: 0, False: 16.5M]
  |  Branch (3439:5): [True: 16.5M, False: 0]
  ------------------
 3440|  16.5M|    assert(tokenizer->_buffered_emit_char == kGumboNoChar);
  ------------------
  |  Branch (3440:5): [True: 0, False: 16.5M]
  |  Branch (3440:5): [True: 16.5M, False: 0]
  ------------------
 3441|  16.5M|    int c = utf8iterator_current(&tokenizer->_input);
 3442|  16.5M|    GumboTokenizerEnum state = tokenizer->_state;
 3443|  16.5M|    gumbo_debug("Lexing character '%c' (%d) in state %u.\n", c, c, state);
 3444|  16.5M|    StateResult result = dispatch_table[state](parser, tokenizer, c, output);
 3445|       |    // We need to clear reconsume_current_input before returning to prevent
 3446|       |    // certain infinite loop states.
 3447|  16.5M|    bool should_advance = !tokenizer->_reconsume_current_input;
 3448|  16.5M|    tokenizer->_reconsume_current_input = false;
 3449|       |
 3450|  16.5M|    if (result == EMIT_TOKEN)
  ------------------
  |  Branch (3450:9): [True: 9.24M, False: 7.27M]
  ------------------
 3451|  9.24M|      return;
 3452|       |
 3453|  7.27M|    if (should_advance) {
  ------------------
  |  Branch (3453:9): [True: 5.26M, False: 2.00M]
  ------------------
 3454|  5.26M|      utf8iterator_next(&tokenizer->_input);
 3455|  5.26M|    }
 3456|  7.27M|  }
 3457|  9.24M|}
gumbo_token_destroy:
 3459|   746k|void gumbo_token_destroy(GumboToken* token) {
 3460|   746k|  if (!token) return;
  ------------------
  |  Branch (3460:7): [True: 0, False: 746k]
  ------------------
 3461|       |
 3462|   746k|  switch (token->type) {
 3463|  20.1k|    case GUMBO_TOKEN_DOCTYPE:
  ------------------
  |  Branch (3463:5): [True: 20.1k, False: 726k]
  ------------------
 3464|  20.1k|      gumbo_free((void*) token->v.doc_type.name);
 3465|  20.1k|      gumbo_free((void*) token->v.doc_type.public_identifier);
 3466|  20.1k|      gumbo_free((void*) token->v.doc_type.system_identifier);
 3467|  20.1k|      return;
 3468|  28.0k|    case GUMBO_TOKEN_START_TAG:
  ------------------
  |  Branch (3468:5): [True: 28.0k, False: 718k]
  ------------------
 3469|  47.6k|      for (unsigned int i = 0; i < token->v.start_tag.attributes.length; ++i) {
  ------------------
  |  Branch (3469:32): [True: 19.6k, False: 28.0k]
  ------------------
 3470|  19.6k|        GumboAttribute* attr = token->v.start_tag.attributes.data[i];
 3471|  19.6k|        if (attr) {
  ------------------
  |  Branch (3471:13): [True: 16.2k, False: 3.38k]
  ------------------
 3472|       |          // May have been nulled out if this token was merged with another.
 3473|  16.2k|          gumbo_destroy_attribute(attr);
 3474|  16.2k|        }
 3475|  19.6k|      }
 3476|  28.0k|      gumbo_free((void*) token->v.start_tag.attributes.data);
 3477|  28.0k|      if (token->v.start_tag.tag == GUMBO_TAG_UNKNOWN) {
  ------------------
  |  Branch (3477:11): [True: 6.23k, False: 21.7k]
  ------------------
 3478|  6.23k|        gumbo_free(token->v.start_tag.name);
 3479|  6.23k|        token->v.start_tag.name = NULL;
 3480|  6.23k|      }
 3481|  28.0k|      return;
 3482|  28.0k|    case GUMBO_TOKEN_END_TAG:
  ------------------
  |  Branch (3482:5): [True: 28.0k, False: 718k]
  ------------------
 3483|  28.0k|      if (token->v.end_tag.tag == GUMBO_TAG_UNKNOWN) {
  ------------------
  |  Branch (3483:11): [True: 10.9k, False: 17.0k]
  ------------------
 3484|  10.9k|        gumbo_free(token->v.end_tag.name);
 3485|  10.9k|        token->v.end_tag.name = NULL;
 3486|  10.9k|      }
 3487|  28.0k|      break;
 3488|      0|    case GUMBO_TOKEN_COMMENT:
  ------------------
  |  Branch (3488:5): [True: 0, False: 746k]
  ------------------
 3489|      0|      gumbo_free((void*) token->v.text);
 3490|      0|      return;
 3491|   670k|    default:
  ------------------
  |  Branch (3491:5): [True: 670k, False: 76.1k]
  ------------------
 3492|   670k|      return;
 3493|   746k|  }
 3494|   746k|}
tokenizer.c:mark_tag_state_as_empty:
  448|   372k|static void mark_tag_state_as_empty(GumboTagState* tag_state) {
  449|   372k|  tag_state->_name = NULL;
  450|   372k|  tag_state->_attributes_lookup = NULL;
  451|   372k|#ifndef NDEBUG
  452|       |  tag_state->_attributes = kGumboEmptyVector;
  ------------------
  |  |  123|   372k|#define kGumboEmptyVector (const GumboVector)GUMBO_EMPTY_VECTOR_INIT
  |  |  ------------------
  |  |  |  |  121|   372k|# define GUMBO_EMPTY_VECTOR_INIT { .data = NULL, .length = 0, .capacity = 0 }
  |  |  ------------------
  ------------------
  453|   372k|#endif
  454|   372k|}
tokenizer.c:doc_type_state_init:
  322|  47.6k|static void doc_type_state_init(GumboParser* parser) {
  323|  47.6k|  GumboTokenDocType* doc_type_state =
  324|  47.6k|      &parser->_tokenizer_state->_doc_type_state;
  325|       |  // We initialize these to NULL here so that we don't end up leaking memory if
  326|       |  // we never see a doctype token. When we do see a doctype token, we reset
  327|       |  // them to a freshly-allocated empty string so that we can present a uniform
  328|       |  // interface to client code and not make them check for null. Ownership is
  329|       |  // transferred to the doctype token when it's emitted.
  330|  47.6k|  doc_type_state->name = NULL;
  331|  47.6k|  doc_type_state->public_identifier = NULL;
  332|  47.6k|  doc_type_state->system_identifier = NULL;
  333|  47.6k|  doc_type_state->force_quirks = false;
  334|  47.6k|  doc_type_state->has_public_identifier = false;
  335|       |  doc_type_state->has_system_identifier = false;
  336|  47.6k|}
tokenizer.c:emit_char:
  417|  8.98M|static StateResult emit_char(GumboParser* parser, int c, GumboToken* output) {
  418|  8.98M|  output->type = get_char_token_type(parser->_tokenizer_state->_is_in_cdata, c);
  419|  8.98M|  output->v.character = c;
  420|  8.98M|  finish_token(parser, output);
  421|  8.98M|  return EMIT_TOKEN;
  422|  8.98M|}
tokenizer.c:get_char_token_type:
  268|  8.98M|static GumboTokenType get_char_token_type(bool is_in_cdata, int c) {
  269|  8.98M|  if (is_in_cdata && c > 0) {
  ------------------
  |  Branch (269:7): [True: 74.3k, False: 8.91M]
  |  Branch (269:22): [True: 50.2k, False: 24.1k]
  ------------------
  270|  50.2k|    return GUMBO_TOKEN_CDATA;
  271|  50.2k|  }
  272|       |
  273|  8.93M|  switch (c) {
  274|  47.1k|    case '\t':
  ------------------
  |  Branch (274:5): [True: 47.1k, False: 8.89M]
  ------------------
  275|   123k|    case '\n':
  ------------------
  |  Branch (275:5): [True: 75.9k, False: 8.86M]
  ------------------
  276|   123k|    case '\r':
  ------------------
  |  Branch (276:5): [True: 408, False: 8.93M]
  ------------------
  277|   147k|    case '\f':
  ------------------
  |  Branch (277:5): [True: 24.0k, False: 8.91M]
  ------------------
  278|   186k|    case ' ':
  ------------------
  |  Branch (278:5): [True: 38.6k, False: 8.90M]
  ------------------
  279|   186k|      return GUMBO_TOKEN_WHITESPACE;
  280|   579k|    case 0:
  ------------------
  |  Branch (280:5): [True: 579k, False: 8.35M]
  ------------------
  281|   579k|      gumbo_debug("Emitted null byte.\n");
  282|   579k|      return GUMBO_TOKEN_NULL;
  283|  26.7k|    case -1:
  ------------------
  |  Branch (283:5): [True: 26.7k, False: 8.91M]
  ------------------
  284|  26.7k|      return GUMBO_TOKEN_EOF;
  285|  8.14M|    default:
  ------------------
  |  Branch (285:5): [True: 8.14M, False: 792k]
  ------------------
  286|  8.14M|      return GUMBO_TOKEN_CHARACTER;
  287|  8.93M|  }
  288|  8.93M|}
tokenizer.c:finish_token:
  374|  9.36M|static void finish_token(GumboParser* parser, GumboToken* token) {
  375|  9.36M|  GumboTokenizerState* tokenizer = parser->_tokenizer_state;
  376|  9.36M|  if (!tokenizer->_reconsume_current_input) {
  ------------------
  |  Branch (376:7): [True: 8.84M, False: 521k]
  ------------------
  377|  8.84M|    utf8iterator_next(&tokenizer->_input);
  378|  8.84M|  }
  379|       |
  380|  9.36M|  token->position = tokenizer->_token_start_pos;
  381|  9.36M|  token->original_text.data = tokenizer->_token_start;
  382|  9.36M|  reset_token_start_point(tokenizer);
  383|  9.36M|  token->original_text.length =
  384|  9.36M|      tokenizer->_token_start - token->original_text.data;
  385|  9.36M|  if (token->original_text.length > 0 &&
  ------------------
  |  Branch (385:7): [True: 9.32M, False: 42.3k]
  ------------------
  386|  9.32M|      token->original_text.data[token->original_text.length - 1] == '\r') {
  ------------------
  |  Branch (386:7): [True: 40.6k, False: 9.28M]
  ------------------
  387|       |    // The UTF8 iterator will ignore carriage returns in the input stream, which
  388|       |    // means that the next token may start one past a \r character. The pointer
  389|       |    // arithmetic above results in that \r being appended to the original text
  390|       |    // of the preceding token, so we have to adjust its length here to chop the
  391|       |    // \r off.
  392|  40.6k|    --token->original_text.length;
  393|  40.6k|  }
  394|  9.36M|}
tokenizer.c:reset_token_start_point:
  341|  9.37M|static void reset_token_start_point(GumboTokenizerState* tokenizer) {
  342|  9.37M|  tokenizer->_token_start = utf8iterator_get_char_pointer(&tokenizer->_input);
  343|  9.37M|  utf8iterator_get_position(&tokenizer->_input, &tokenizer->_token_start_pos);
  344|  9.37M|}
tokenizer.c:maybe_emit_from_mark:
  544|  10.0M|) {
  545|  10.0M|  GumboTokenizerState* tokenizer = parser->_tokenizer_state;
  546|  10.0M|  const char* pos = tokenizer->_resume_pos;
  547|       |
  548|  10.0M|  if (!pos)
  ------------------
  |  Branch (548:7): [True: 8.57M, False: 1.45M]
  ------------------
  549|  8.57M|    return CONTINUE;
  550|  1.45M|  if (utf8iterator_get_char_pointer(&tokenizer->_input) >= pos) {
  ------------------
  |  Branch (550:7): [True: 673k, False: 778k]
  ------------------
  551|   673k|    tokenizer->_resume_pos = NULL;
  552|   673k|    return CONTINUE;
  553|   673k|  }
  554|       |
  555|       |  // emit_char advances the input stream. _reconsume_current_input should
  556|       |  // *never* be set when emitting from the mark since those characters have
  557|       |  // already been advanced past.
  558|  1.45M|  assert(!tokenizer->_reconsume_current_input);
  ------------------
  |  Branch (558:3): [True: 0, False: 778k]
  |  Branch (558:3): [True: 778k, False: 0]
  ------------------
  559|   778k|  return emit_char(parser, utf8iterator_current(&tokenizer->_input), output);
  560|   778k|}
tokenizer.c:handle_data_state:
  970|  6.68M|) {
  971|  6.68M|  switch (c) {
  972|   957k|    case '&':
  ------------------
  |  Branch (972:5): [True: 957k, False: 5.72M]
  ------------------
  973|   957k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_CHARACTER_REFERENCE);
  974|   957k|      set_mark(parser);
  975|   957k|      tokenizer->_return_state = GUMBO_LEX_DATA;
  976|   957k|      return CONTINUE;
  977|   460k|    case '<':
  ------------------
  |  Branch (977:5): [True: 460k, False: 6.22M]
  ------------------
  978|   460k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_TAG_OPEN);
  979|   460k|      set_mark(parser);
  980|   460k|      return CONTINUE;
  981|   555k|    case '\0':
  ------------------
  |  Branch (981:5): [True: 555k, False: 6.13M]
  ------------------
  982|   555k|      tokenizer_add_parse_error(parser, GUMBO_ERR_UNEXPECTED_NULL_CHARACTER);
  983|   555k|      return emit_char(parser, c, output);
  984|  21.1k|    case -1:
  ------------------
  |  Branch (984:5): [True: 21.1k, False: 6.66M]
  ------------------
  985|  21.1k|      return emit_eof(parser, output);
  986|  4.69M|    default:
  ------------------
  |  Branch (986:5): [True: 4.69M, False: 1.99M]
  ------------------
  987|  4.69M|      return emit_char(parser, c, output);
  988|  6.68M|  }
  989|  6.68M|}
tokenizer.c:set_mark:
  532|  1.60M|static void set_mark(GumboParser* parser) {
  533|  1.60M|  GumboTokenizerState* tokenizer = parser->_tokenizer_state;
  534|  1.60M|  utf8iterator_mark(&tokenizer->_input);
  535|  1.60M|}
tokenizer.c:tokenizer_add_parse_error:
  206|  1.23M|) {
  207|  1.23M|  GumboTokenizerState* tokenizer = parser->_tokenizer_state;
  208|  1.23M|  GumboError* error = gumbo_add_error(parser);
  209|  1.23M|  if (!error) {
  ------------------
  |  Branch (209:7): [True: 0, False: 1.23M]
  ------------------
  210|      0|    return;
  211|      0|  }
  212|  1.23M|  const Utf8Iterator* input = &tokenizer->_input;
  213|  1.23M|  utf8iterator_get_position(input, &error->position);
  214|  1.23M|  error->original_text.data = utf8iterator_get_char_pointer(input);
  215|  1.23M|  error->original_text.length = utf8iterator_get_width(input);
  216|  1.23M|  error->type = type;
  217|  1.23M|  error->v.tokenizer.state = tokenizer->_state;
  218|  1.23M|  error->v.tokenizer.codepoint = utf8iterator_current(input);
  219|  1.23M|}
tokenizer.c:emit_eof:
  435|  26.7k|static StateResult emit_eof(GumboParser* parser, GumboToken* output) {
  436|  26.7k|  return emit_char(parser, -1, output);
  437|  26.7k|}
tokenizer.c:handle_rcdata_state:
  997|   654k|) {
  998|   654k|  switch (c) {
  999|  77.7k|    case '&':
  ------------------
  |  Branch (999:5): [True: 77.7k, False: 576k]
  ------------------
 1000|  77.7k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_CHARACTER_REFERENCE);
 1001|  77.7k|      set_mark(parser);
 1002|  77.7k|      tokenizer->_return_state = GUMBO_LEX_RCDATA;
 1003|  77.7k|      return CONTINUE;
 1004|  25.8k|    case '<':
  ------------------
  |  Branch (1004:5): [True: 25.8k, False: 628k]
  ------------------
 1005|  25.8k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_RCDATA_LT);
 1006|  25.8k|      set_mark(parser);
 1007|  25.8k|      return CONTINUE;
 1008|  60.5k|    case '\0':
  ------------------
  |  Branch (1008:5): [True: 60.5k, False: 593k]
  ------------------
 1009|  60.5k|      return emit_replacement_char(parser, output);
 1010|    513|    case -1:
  ------------------
  |  Branch (1010:5): [True: 513, False: 653k]
  ------------------
 1011|    513|      return emit_eof(parser, output);
 1012|   489k|    default:
  ------------------
  |  Branch (1012:5): [True: 489k, False: 164k]
  ------------------
 1013|   489k|      return emit_char(parser, c, output);
 1014|   654k|  }
 1015|   654k|}
tokenizer.c:emit_replacement_char:
  427|   102k|    GumboParser* parser, GumboToken* output) {
  428|       |  // In all cases, this is because of a null byte in the input stream.
  429|   102k|  tokenizer_add_parse_error(parser, GUMBO_ERR_UNEXPECTED_NULL_CHARACTER);
  430|   102k|  emit_char(parser, kUtf8ReplacementChar, output);
  ------------------
  |  |   33|   102k|#define kUtf8ReplacementChar 0xFFFD
  ------------------
  431|   102k|  return EMIT_TOKEN;
  432|   102k|}
tokenizer.c:handle_rawtext_state:
 1023|  58.4k|) {
 1024|  58.4k|  switch (c) {
 1025|  8.15k|    case '<':
  ------------------
  |  Branch (1025:5): [True: 8.15k, False: 50.2k]
  ------------------
 1026|  8.15k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_RAWTEXT_LT);
 1027|  8.15k|      set_mark(parser);
 1028|  8.15k|      return CONTINUE;
 1029|  2.54k|    case '\0':
  ------------------
  |  Branch (1029:5): [True: 2.54k, False: 55.8k]
  ------------------
 1030|  2.54k|      return emit_replacement_char(parser, output);
 1031|    331|    case -1:
  ------------------
  |  Branch (1031:5): [True: 331, False: 58.1k]
  ------------------
 1032|    331|      return emit_eof(parser, output);
 1033|  47.4k|    default:
  ------------------
  |  Branch (1033:5): [True: 47.4k, False: 11.0k]
  ------------------
 1034|  47.4k|      return emit_char(parser, c, output);
 1035|  58.4k|  }
 1036|  58.4k|}
tokenizer.c:handle_script_data_state:
 1044|  79.6k|) {
 1045|  79.6k|  switch (c) {
 1046|  11.6k|    case '<':
  ------------------
  |  Branch (1046:5): [True: 11.6k, False: 68.0k]
  ------------------
 1047|  11.6k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA_LT);
 1048|  11.6k|      set_mark(parser);
 1049|  11.6k|      return CONTINUE;
 1050|  4.81k|    case '\0':
  ------------------
  |  Branch (1050:5): [True: 4.81k, False: 74.8k]
  ------------------
 1051|  4.81k|      return emit_replacement_char(parser, output);
 1052|    341|    case -1:
  ------------------
  |  Branch (1052:5): [True: 341, False: 79.2k]
  ------------------
 1053|    341|      return emit_eof(parser, output);
 1054|  62.8k|    default:
  ------------------
  |  Branch (1054:5): [True: 62.8k, False: 16.7k]
  ------------------
 1055|  62.8k|      return emit_char(parser, c, output);
 1056|  79.6k|  }
 1057|  79.6k|}
tokenizer.c:handle_plaintext_state:
 1065|  44.8k|) {
 1066|  44.8k|  switch (c) {
 1067|  5.81k|    case '\0':
  ------------------
  |  Branch (1067:5): [True: 5.81k, False: 39.0k]
  ------------------
 1068|  5.81k|      return emit_replacement_char(parser, output);
 1069|    106|    case -1:
  ------------------
  |  Branch (1069:5): [True: 106, False: 44.7k]
  ------------------
 1070|    106|      return emit_eof(parser, output);
 1071|  38.9k|    default:
  ------------------
  |  Branch (1071:5): [True: 38.9k, False: 5.92k]
  ------------------
 1072|  38.9k|      return emit_char(parser, c, output);
 1073|  44.8k|  }
 1074|  44.8k|}
tokenizer.c:handle_tag_open_state:
 1082|   460k|) {
 1083|   460k|  switch (c) {
 1084|  41.3k|    case '!':
  ------------------
  |  Branch (1084:5): [True: 41.3k, False: 418k]
  ------------------
 1085|  41.3k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_MARKUP_DECLARATION_OPEN);
 1086|  41.3k|      clear_temporary_buffer(parser);
 1087|  41.3k|      return CONTINUE;
 1088|  55.7k|    case '/':
  ------------------
  |  Branch (1088:5): [True: 55.7k, False: 404k]
  ------------------
 1089|  55.7k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_END_TAG_OPEN);
 1090|  55.7k|      return CONTINUE;
 1091|  1.03k|    case '?':
  ------------------
  |  Branch (1091:5): [True: 1.03k, False: 459k]
  ------------------
 1092|  1.03k|      tokenizer_add_parse_error(parser, GUMBO_ERR_UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME);
 1093|  1.03k|      clear_temporary_buffer(parser);
 1094|  1.03k|      reconsume_in_state(parser, GUMBO_LEX_BOGUS_COMMENT);
 1095|  1.03k|      return CONTINUE;
 1096|    744|    case -1:
  ------------------
  |  Branch (1096:5): [True: 744, False: 459k]
  ------------------
 1097|    744|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_BEFORE_TAG_NAME);
 1098|       |      // Switch to data to emit EOF.
 1099|    744|      reconsume_in_state(parser, GUMBO_LEX_DATA);
 1100|    744|      return emit_from_mark(parser, output);
 1101|   361k|    default:
  ------------------
  |  Branch (1101:5): [True: 361k, False: 98.8k]
  ------------------
 1102|   361k|      if (is_alpha(c)) {
  ------------------
  |  Branch (1102:11): [True: 282k, False: 79.1k]
  ------------------
 1103|   282k|        reconsume_in_state(parser, GUMBO_LEX_TAG_NAME);
 1104|   282k|        start_new_tag(parser, true);
 1105|   282k|        return CONTINUE;
 1106|   282k|      }
 1107|  79.1k|      tokenizer_add_parse_error(parser, GUMBO_ERR_INVALID_FIRST_CHARACTER_OF_TAG_NAME);
 1108|  79.1k|      reconsume_in_state(parser, GUMBO_LEX_DATA);
 1109|  79.1k|      return emit_from_mark(parser, output);
 1110|   460k|  }
 1111|   460k|}
tokenizer.c:clear_temporary_buffer:
  291|   139k|static void clear_temporary_buffer(GumboParser* parser) {
  292|   139k|  GumboTokenizerState* tokenizer = parser->_tokenizer_state;
  293|   139k|  gumbo_string_buffer_clear(&tokenizer->_temporary_buffer);
  294|   139k|}
tokenizer.c:reconsume_in_state:
  958|  3.69M|static void reconsume_in_state(GumboParser* parser, GumboTokenizerEnum state) {
  959|  3.69M|  GumboTokenizerState* tokenizer = parser->_tokenizer_state;
  960|       |  tokenizer->_reconsume_current_input = true;
  961|  3.69M|  tokenizer->_state = state;
  962|  3.69M|}
tokenizer.c:emit_from_mark:
  566|   674k|static StateResult emit_from_mark(GumboParser* parser, GumboToken* output) {
  567|   674k|  GumboTokenizerState* tokenizer = parser->_tokenizer_state;
  568|   674k|  tokenizer->_resume_pos = utf8iterator_get_char_pointer(&tokenizer->_input);
  569|   674k|  utf8iterator_reset(&tokenizer->_input);
  570|       |  // Now that we have reset the input, we need to advance through it.
  571|   674k|  tokenizer->_reconsume_current_input = false;
  572|   674k|  StateResult result = maybe_emit_from_mark(parser, output);
  573|   674k|  assert(result == EMIT_TOKEN);
  ------------------
  |  Branch (573:3): [True: 0, False: 674k]
  |  Branch (573:3): [True: 674k, False: 0]
  ------------------
  574|   674k|  return result;
  575|   674k|}
tokenizer.c:is_alpha:
  260|  1.29M|static bool is_alpha(int c) {
  261|  1.29M|  return gumbo_ascii_isalpha(c);
  262|  1.29M|}
tokenizer.c:start_new_tag:
  684|   345k|static void start_new_tag(GumboParser* parser, bool is_start_tag) {
  685|   345k|  GumboTokenizerState* tokenizer = parser->_tokenizer_state;
  686|   345k|  GumboTagState* tag_state = &tokenizer->_tag_state;
  687|   345k|  int c = utf8iterator_current(&tokenizer->_input);
  688|   345k|  assert(is_alpha(c));
  ------------------
  |  Branch (688:3): [True: 0, False: 345k]
  |  Branch (688:3): [True: 345k, False: 0]
  ------------------
  689|   345k|  c = ensure_lowercase(c);
  690|   345k|  assert(is_alpha(c));
  ------------------
  |  Branch (690:3): [True: 0, False: 345k]
  |  Branch (690:3): [True: 345k, False: 0]
  ------------------
  691|       |
  692|   345k|  initialize_tag_buffer(parser);
  693|       |
  694|   345k|  assert(tag_state->_name == NULL);
  ------------------
  |  Branch (694:3): [True: 0, False: 345k]
  |  Branch (694:3): [True: 345k, False: 0]
  ------------------
  695|   345k|  assert(tag_state->_attributes.data == NULL);
  ------------------
  |  Branch (695:3): [True: 0, False: 345k]
  |  Branch (695:3): [True: 345k, False: 0]
  ------------------
  696|       |  // Initial size chosen by statistical analysis of a corpus of 60k webpages.
  697|       |  // 99.5% of elements have 0 attributes, 93% of the remainder have 1. These
  698|       |  // numbers are a bit higher for more modern websites (eg. ~45% = 0, ~40% = 1
  699|       |  // for the HTML5 Spec), but still have basically 99% of nodes with <= 2 attrs.
  700|   345k|  gumbo_vector_init(1, &tag_state->_attributes);
  701|   345k|  tag_state->_drop_next_attr_value = false;
  702|   345k|  tag_state->_is_start_tag = is_start_tag;
  703|       |  tag_state->_is_self_closing = false;
  704|   345k|  gumbo_debug("Starting new tag.\n");
  705|   345k|}
tokenizer.c:ensure_lowercase:
  264|  2.50M|static int ensure_lowercase(int c) {
  265|  2.50M|  return gumbo_ascii_tolower(c);
  266|  2.50M|}
tokenizer.c:initialize_tag_buffer:
  609|   787k|static void initialize_tag_buffer(GumboParser* parser) {
  610|   787k|  GumboTokenizerState* tokenizer = parser->_tokenizer_state;
  611|   787k|  GumboTagState* tag_state = &tokenizer->_tag_state;
  612|       |
  613|   787k|  gumbo_string_buffer_init(&tag_state->_buffer);
  614|   787k|  reset_tag_buffer_start_point(parser);
  615|   787k|}
tokenizer.c:reset_tag_buffer_start_point:
  350|  1.24M|static void reset_tag_buffer_start_point(GumboParser* parser) {
  351|  1.24M|  GumboTokenizerState* tokenizer = parser->_tokenizer_state;
  352|  1.24M|  GumboTagState* tag_state = &tokenizer->_tag_state;
  353|       |
  354|  1.24M|  utf8iterator_get_position(&tokenizer->_input, &tag_state->_start_pos);
  355|  1.24M|  tag_state->_original_text = utf8iterator_get_char_pointer(&tokenizer->_input);
  356|  1.24M|}
tokenizer.c:handle_end_tag_open_state:
 1119|  55.7k|) {
 1120|  55.7k|  switch (c) {
 1121|    835|    case '>':
  ------------------
  |  Branch (1121:5): [True: 835, False: 54.9k]
  ------------------
 1122|    835|      tokenizer_add_parse_error(parser, GUMBO_ERR_MISSING_END_TAG_NAME);
 1123|    835|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 1124|    835|      return CONTINUE;
 1125|     55|    case -1:
  ------------------
  |  Branch (1125:5): [True: 55, False: 55.7k]
  ------------------
 1126|     55|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_BEFORE_TAG_NAME);
 1127|       |      // Similar to the tag open state except we need to emit '<' and '/'
 1128|       |      // before the EOF.
 1129|     55|      reconsume_in_state(parser, GUMBO_LEX_DATA);
 1130|     55|      return emit_from_mark(parser, output);
 1131|  54.8k|    default:
  ------------------
  |  Branch (1131:5): [True: 54.8k, False: 890]
  ------------------
 1132|  54.8k|      if (is_alpha(c)) {
  ------------------
  |  Branch (1132:11): [True: 49.0k, False: 5.79k]
  ------------------
 1133|  49.0k|        reconsume_in_state(parser, GUMBO_LEX_TAG_NAME);
 1134|  49.0k|        start_new_tag(parser, false);
 1135|  49.0k|      } else {
 1136|  5.79k|        tokenizer_add_parse_error(parser, GUMBO_ERR_INVALID_FIRST_CHARACTER_OF_TAG_NAME);
 1137|  5.79k|        reconsume_in_state(parser, GUMBO_LEX_BOGUS_COMMENT);
 1138|  5.79k|        clear_temporary_buffer(parser);
 1139|  5.79k|      }
 1140|  54.8k|      return CONTINUE;
 1141|  55.7k|  }
 1142|  55.7k|}
tokenizer.c:handle_tag_name_state:
 1150|  1.90M|) {
 1151|  1.90M|  switch (c) {
 1152|  2.06k|    case '\t':
  ------------------
  |  Branch (1152:5): [True: 2.06k, False: 1.90M]
  ------------------
 1153|  5.83k|    case '\n':
  ------------------
  |  Branch (1153:5): [True: 3.77k, False: 1.90M]
  ------------------
 1154|  7.58k|    case '\f':
  ------------------
  |  Branch (1154:5): [True: 1.75k, False: 1.90M]
  ------------------
 1155|  19.2k|    case ' ':
  ------------------
  |  Branch (1155:5): [True: 11.7k, False: 1.89M]
  ------------------
 1156|  19.2k|      finish_tag_name(parser);
 1157|  19.2k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_BEFORE_ATTR_NAME);
 1158|  19.2k|      return CONTINUE;
 1159|  7.23k|    case '/':
  ------------------
  |  Branch (1159:5): [True: 7.23k, False: 1.89M]
  ------------------
 1160|  7.23k|      finish_tag_name(parser);
 1161|  7.23k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SELF_CLOSING_START_TAG);
 1162|  7.23k|      return CONTINUE;
 1163|   303k|    case '>':
  ------------------
  |  Branch (1163:5): [True: 303k, False: 1.60M]
  ------------------
 1164|   303k|      finish_tag_name(parser);
 1165|   303k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 1166|   303k|      return emit_current_tag(parser, output);
 1167|  56.6k|    case '\0':
  ------------------
  |  Branch (1167:5): [True: 56.6k, False: 1.85M]
  ------------------
 1168|  56.6k|      tokenizer_add_parse_error(parser, GUMBO_ERR_UNEXPECTED_NULL_CHARACTER);
 1169|  56.6k|      append_char_to_tag_buffer(parser, kUtf8ReplacementChar, true);
  ------------------
  |  |   33|  56.6k|#define kUtf8ReplacementChar 0xFFFD
  ------------------
 1170|  56.6k|      return CONTINUE;
 1171|  1.58k|    case -1:
  ------------------
  |  Branch (1171:5): [True: 1.58k, False: 1.90M]
  ------------------
 1172|  1.58k|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_TAG);
 1173|  1.58k|      abandon_current_tag(parser);
 1174|  1.58k|      return emit_eof(parser, output);
 1175|  1.51M|    default:
  ------------------
  |  Branch (1175:5): [True: 1.51M, False: 387k]
  ------------------
 1176|       |      append_char_to_tag_buffer(parser, ensure_lowercase(c), true);
 1177|  1.51M|      return CONTINUE;
 1178|  1.90M|  }
 1179|  1.90M|}
tokenizer.c:finish_tag_name:
  754|   333k|static void finish_tag_name(GumboParser* parser) {
  755|   333k|  GumboTokenizerState* tokenizer = parser->_tokenizer_state;
  756|   333k|  GumboTagState* tag_state = &tokenizer->_tag_state;
  757|       |
  758|   333k|  const char *data = tag_state->_buffer.data;
  759|   333k|  size_t length = tag_state->_buffer.length;
  760|   333k|  tag_state->_tag = gumbo_tagn_enum(data, length);
  761|   333k|  if (tag_state->_tag == GUMBO_TAG_UNKNOWN) {
  ------------------
  |  Branch (761:7): [True: 87.4k, False: 246k]
  ------------------
  762|  87.4k|    char *name = gumbo_alloc(length + 1);
  763|  87.4k|    memcpy(name, data, length);
  764|  87.4k|    name[length] = 0;
  765|  87.4k|    tag_state->_name = name;
  766|  87.4k|  }
  767|   333k|  reinitialize_tag_buffer(parser);
  768|   333k|}
tokenizer.c:reinitialize_tag_buffer:
  747|   441k|static void reinitialize_tag_buffer(GumboParser* parser) {
  748|   441k|  gumbo_free(parser->_tokenizer_state->_tag_state._buffer.data);
  749|   441k|  initialize_tag_buffer(parser);
  750|   441k|}
tokenizer.c:emit_current_tag:
  458|   332k|static StateResult emit_current_tag(GumboParser* parser, GumboToken* output) {
  459|   332k|  GumboTagState* tag_state = &parser->_tokenizer_state->_tag_state;
  460|   332k|  if (tag_state->_is_start_tag) {
  ------------------
  |  Branch (460:7): [True: 279k, False: 53.0k]
  ------------------
  461|   279k|    output->type = GUMBO_TOKEN_START_TAG;
  462|   279k|    output->v.start_tag.tag = tag_state->_tag;
  463|   279k|    output->v.start_tag.name = tag_state->_name;
  464|   279k|    output->v.start_tag.attributes = tag_state->_attributes;
  465|   279k|    output->v.start_tag.is_self_closing = tag_state->_is_self_closing;
  466|   279k|    tag_state->_last_start_tag = tag_state->_tag;
  467|   279k|    gumbo_string_set_free(tag_state->_attributes_lookup);
  468|   279k|    mark_tag_state_as_empty(tag_state);
  469|   279k|    gumbo_debug(
  470|   279k|        "Emitted start tag %s.\n", gumbo_normalized_tagname(tag_state->_tag));
  471|   279k|  } else {
  472|  53.0k|    output->type = GUMBO_TOKEN_END_TAG;
  473|  53.0k|    output->v.end_tag.tag = tag_state->_tag;
  474|  53.0k|    output->v.end_tag.name = tag_state->_name;
  475|  53.0k|    if (tag_state->_is_self_closing)
  ------------------
  |  Branch (475:9): [True: 1.26k, False: 51.7k]
  ------------------
  476|  1.26k|      tokenizer_add_token_parse_error(parser, GUMBO_ERR_END_TAG_WITH_TRAILING_SOLIDUS);
  477|  53.0k|    if (tag_state->_attributes.length > 0)
  ------------------
  |  Branch (477:9): [True: 3.58k, False: 49.4k]
  ------------------
  478|  3.58k|      tokenizer_add_token_parse_error(parser, GUMBO_ERR_END_TAG_WITH_ATTRIBUTES);
  479|       |    // In end tags, ownership of the attributes vector is not transferred to the
  480|       |    // token, but it's still initialized as normal, so it must be manually
  481|       |    // deallocated. There may also be attributes to destroy, in certain broken
  482|       |    // cases like </div</th> (the "th" is an attribute there).
  483|  59.4k|    for (unsigned int i = 0; i < tag_state->_attributes.length; ++i) {
  ------------------
  |  Branch (483:30): [True: 6.44k, False: 53.0k]
  ------------------
  484|  6.44k|      gumbo_destroy_attribute(tag_state->_attributes.data[i]);
  485|  6.44k|    }
  486|  53.0k|    gumbo_free(tag_state->_attributes.data);
  487|  53.0k|    gumbo_string_set_free(tag_state->_attributes_lookup);
  488|  53.0k|    mark_tag_state_as_empty(tag_state);
  489|  53.0k|    gumbo_debug(
  490|  53.0k|        "Emitted end tag %s.\n", gumbo_normalized_tagname(tag_state->_tag));
  491|  53.0k|  }
  492|   332k|  gumbo_string_buffer_destroy(&tag_state->_buffer);
  493|   332k|  finish_token(parser, output);
  494|   332k|  gumbo_debug (
  495|   332k|    "Original text = %.*s.\n",
  496|   332k|    (int) output->original_text.length,
  497|   332k|    output->original_text.data
  498|   332k|  );
  499|   332k|  assert(output->original_text.length >= 2);
  ------------------
  |  Branch (499:3): [True: 0, False: 332k]
  |  Branch (499:3): [True: 332k, False: 0]
  ------------------
  500|   332k|  assert(output->original_text.data[0] == '<');
  ------------------
  |  Branch (500:3): [True: 0, False: 332k]
  |  Branch (500:3): [True: 332k, False: 0]
  ------------------
  501|   332k|  assert(output->original_text.data[output->original_text.length - 1] == '>');
  ------------------
  |  Branch (501:3): [True: 0, False: 332k]
  |  Branch (501:3): [True: 332k, False: 0]
  ------------------
  502|   332k|  return EMIT_TOKEN;
  503|   332k|}
tokenizer.c:tokenizer_add_token_parse_error:
  245|  5.11k|) {
  246|  5.11k|  GumboTokenizerState* tokenizer = parser->_tokenizer_state;
  247|  5.11k|  GumboError* error = gumbo_add_error(parser);
  248|  5.11k|  if (!error)
  ------------------
  |  Branch (248:7): [True: 0, False: 5.11k]
  ------------------
  249|      0|    return;
  250|  5.11k|  Utf8Iterator* input = &tokenizer->_input;
  251|  5.11k|  error->type = type;
  252|  5.11k|  error->position = tokenizer->_token_start_pos;
  253|  5.11k|  error->original_text.data = tokenizer->_token_start;
  254|  5.11k|  error->original_text.length =
  255|  5.11k|    utf8iterator_get_char_pointer(input) - tokenizer->_token_start;
  256|  5.11k|  error->v.tokenizer.state = tokenizer->_state;
  257|  5.11k|  error->v.tokenizer.codepoint = 0;
  258|  5.11k|}
tokenizer.c:append_char_to_tag_buffer:
  586|  2.68M|) {
  587|  2.68M|  GumboStringBuffer* buffer = &parser->_tokenizer_state->_tag_state._buffer;
  588|  2.68M|  if (buffer->length == 0 && reinitialize_position_on_first) {
  ------------------
  |  Branch (588:7): [True: 451k, False: 2.23M]
  |  Branch (588:30): [True: 448k, False: 2.61k]
  ------------------
  589|   448k|    reset_tag_buffer_start_point(parser);
  590|   448k|  }
  591|  2.68M|  gumbo_string_buffer_append_codepoint(codepoint, buffer);
  592|  2.68M|}
tokenizer.c:abandon_current_tag:
  509|  13.2k|static void abandon_current_tag(GumboParser* parser) {
  510|  13.2k|  GumboTagState* tag_state = &parser->_tokenizer_state->_tag_state;
  511|  24.6k|  for (unsigned int i = 0; i < tag_state->_attributes.length; ++i) {
  ------------------
  |  Branch (511:28): [True: 11.3k, False: 13.2k]
  ------------------
  512|  11.3k|    gumbo_destroy_attribute(tag_state->_attributes.data[i]);
  513|  11.3k|  }
  514|  13.2k|  gumbo_free(tag_state->_name);
  515|  13.2k|  gumbo_free(tag_state->_attributes.data);
  516|  13.2k|  gumbo_string_set_free(tag_state->_attributes_lookup);
  517|  13.2k|  mark_tag_state_as_empty(tag_state);
  518|  13.2k|  gumbo_string_buffer_destroy(&tag_state->_buffer);
  519|  13.2k|  gumbo_debug("Abandoning current tag.\n");
  520|  13.2k|}
tokenizer.c:handle_rcdata_lt_state:
 1187|  25.8k|) {
 1188|  25.8k|  if (c == '/') {
  ------------------
  |  Branch (1188:7): [True: 6.27k, False: 19.5k]
  ------------------
 1189|  6.27k|    gumbo_tokenizer_set_state(parser, GUMBO_LEX_RCDATA_END_TAG_OPEN);
 1190|  6.27k|    return CONTINUE;
 1191|  19.5k|  } else {
 1192|  19.5k|    reconsume_in_state(parser, GUMBO_LEX_RCDATA);
 1193|  19.5k|    return emit_from_mark(parser, output);
 1194|  19.5k|  }
 1195|  25.8k|}
tokenizer.c:handle_rcdata_end_tag_open_state:
 1203|  6.27k|) {
 1204|  6.27k|  if (is_alpha(c)) {
  ------------------
  |  Branch (1204:7): [True: 4.73k, False: 1.53k]
  ------------------
 1205|  4.73k|    reconsume_in_state(parser, GUMBO_LEX_RCDATA_END_TAG_NAME);
 1206|  4.73k|    start_new_tag(parser, false);
 1207|  4.73k|    return CONTINUE;
 1208|  4.73k|  }
 1209|  1.53k|  reconsume_in_state(parser, GUMBO_LEX_RCDATA);
 1210|  1.53k|  return emit_from_mark(parser, output);
 1211|  6.27k|}
tokenizer.c:handle_rcdata_end_tag_name_state:
 1219|  49.1k|) {
 1220|  49.1k|  UNUSED_IF_NDEBUG(tokenizer);
 1221|  49.1k|  if (is_alpha(c)) {
  ------------------
  |  Branch (1221:7): [True: 44.4k, False: 4.73k]
  ------------------
 1222|  44.4k|    append_char_to_tag_buffer(parser, ensure_lowercase(c), true);
 1223|  44.4k|    return CONTINUE;
 1224|  44.4k|  }
 1225|  4.73k|  switch (c) {
  ------------------
  |  Branch (1225:11): [True: 3.33k, False: 1.40k]
  ------------------
 1226|    231|  case '\t':
  ------------------
  |  Branch (1226:3): [True: 231, False: 4.50k]
  ------------------
 1227|    531|  case '\n':
  ------------------
  |  Branch (1227:3): [True: 300, False: 4.43k]
  ------------------
 1228|    754|  case '\f':
  ------------------
  |  Branch (1228:3): [True: 223, False: 4.51k]
  ------------------
 1229|  1.20k|  case ' ':
  ------------------
  |  Branch (1229:3): [True: 446, False: 4.29k]
  ------------------
 1230|  1.20k|    if (is_appropriate_end_tag(parser)) {
  ------------------
  |  Branch (1230:9): [True: 208, False: 992]
  ------------------
 1231|    208|      finish_tag_name(parser);
 1232|    208|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_BEFORE_ATTR_NAME);
 1233|    208|      return CONTINUE;
 1234|    208|    }
 1235|    992|    break;
 1236|    992|  case '/':
  ------------------
  |  Branch (1236:3): [True: 515, False: 4.22k]
  ------------------
 1237|    515|    if (is_appropriate_end_tag(parser)) {
  ------------------
  |  Branch (1237:9): [True: 199, False: 316]
  ------------------
 1238|    199|      finish_tag_name(parser);
 1239|    199|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SELF_CLOSING_START_TAG);
 1240|    199|      return CONTINUE;
 1241|    199|    }
 1242|    316|    break;
 1243|  1.61k|  case '>':
  ------------------
  |  Branch (1243:3): [True: 1.61k, False: 3.12k]
  ------------------
 1244|  1.61k|    if (is_appropriate_end_tag(parser)) {
  ------------------
  |  Branch (1244:9): [True: 504, False: 1.11k]
  ------------------
 1245|    504|      finish_tag_name(parser);
 1246|    504|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 1247|    504|      return emit_current_tag(parser, output);
 1248|    504|    }
 1249|  1.11k|    break;
 1250|  4.73k|  }
 1251|  3.82k|  abandon_current_tag(parser);
 1252|  3.82k|  reconsume_in_state(parser, GUMBO_LEX_RCDATA);
 1253|  3.82k|  return emit_from_mark(parser, output);
 1254|  4.73k|}
tokenizer.c:is_appropriate_end_tag:
  894|  11.4k|static bool is_appropriate_end_tag(GumboParser* parser) {
  895|  11.4k|  GumboTagState* tag_state = &parser->_tokenizer_state->_tag_state;
  896|  11.4k|  assert(!tag_state->_is_start_tag);
  ------------------
  |  Branch (896:3): [True: 0, False: 11.4k]
  |  Branch (896:3): [True: 11.4k, False: 0]
  ------------------
  897|  11.4k|  return tag_state->_last_start_tag != GUMBO_TAG_LAST &&
  ------------------
  |  Branch (897:10): [True: 11.4k, False: 0]
  ------------------
  898|  11.4k|         tag_state->_last_start_tag == gumbo_tagn_enum(tag_state->_buffer.data,
  ------------------
  |  Branch (898:10): [True: 4.23k, False: 7.22k]
  ------------------
  899|  11.4k|                                           tag_state->_buffer.length);
  900|  11.4k|}
tokenizer.c:handle_rawtext_lt_state:
 1262|  8.15k|) {
 1263|  8.15k|  if (c == '/') {
  ------------------
  |  Branch (1263:7): [True: 4.99k, False: 3.16k]
  ------------------
 1264|  4.99k|    gumbo_tokenizer_set_state(parser, GUMBO_LEX_RAWTEXT_END_TAG_OPEN);
 1265|  4.99k|    return CONTINUE;
 1266|  4.99k|  } else {
 1267|  3.16k|    reconsume_in_state(parser, GUMBO_LEX_RAWTEXT);
 1268|  3.16k|    return emit_from_mark(parser, output);
 1269|  3.16k|  }
 1270|  8.15k|}
tokenizer.c:handle_rawtext_end_tag_open_state:
 1278|  4.99k|) {
 1279|  4.99k|  if (is_alpha(c)) {
  ------------------
  |  Branch (1279:7): [True: 4.29k, False: 694]
  ------------------
 1280|  4.29k|    reconsume_in_state(parser, GUMBO_LEX_RAWTEXT_END_TAG_NAME);
 1281|  4.29k|    start_new_tag(parser, false);
 1282|  4.29k|    return CONTINUE;
 1283|  4.29k|  } else {
 1284|    694|    reconsume_in_state(parser, GUMBO_LEX_RAWTEXT);
 1285|    694|    return emit_from_mark(parser, output);
 1286|    694|  }
 1287|  4.99k|}
tokenizer.c:handle_rawtext_end_tag_name_state:
 1295|  29.5k|) {
 1296|  29.5k|  if (is_alpha(c)) {
  ------------------
  |  Branch (1296:7): [True: 25.2k, False: 4.29k]
  ------------------
 1297|  25.2k|    append_char_to_tag_buffer(parser, ensure_lowercase(c), true);
 1298|  25.2k|    return CONTINUE;
 1299|  25.2k|  }
 1300|  4.29k|  switch (c) {
  ------------------
  |  Branch (1300:11): [True: 3.70k, False: 596]
  ------------------
 1301|    280|  case '\t':
  ------------------
  |  Branch (1301:3): [True: 280, False: 4.01k]
  ------------------
 1302|    499|  case '\n':
  ------------------
  |  Branch (1302:3): [True: 219, False: 4.07k]
  ------------------
 1303|  1.03k|  case '\f':
  ------------------
  |  Branch (1303:3): [True: 533, False: 3.76k]
  ------------------
 1304|  1.25k|  case ' ':
  ------------------
  |  Branch (1304:3): [True: 219, False: 4.07k]
  ------------------
 1305|  1.25k|    if (is_appropriate_end_tag(parser)) {
  ------------------
  |  Branch (1305:9): [True: 329, False: 922]
  ------------------
 1306|    329|      finish_tag_name(parser);
 1307|    329|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_BEFORE_ATTR_NAME);
 1308|    329|      return CONTINUE;
 1309|    329|    }
 1310|    922|    break;
 1311|    922|  case '/':
  ------------------
  |  Branch (1311:3): [True: 645, False: 3.65k]
  ------------------
 1312|    645|    if (is_appropriate_end_tag(parser)) {
  ------------------
  |  Branch (1312:9): [True: 384, False: 261]
  ------------------
 1313|    384|      finish_tag_name(parser);
 1314|    384|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SELF_CLOSING_START_TAG);
 1315|    384|      return CONTINUE;
 1316|    384|    }
 1317|    261|    break;
 1318|  1.80k|  case '>':
  ------------------
  |  Branch (1318:3): [True: 1.80k, False: 2.49k]
  ------------------
 1319|  1.80k|    if (is_appropriate_end_tag(parser)) {
  ------------------
  |  Branch (1319:9): [True: 1.32k, False: 478]
  ------------------
 1320|  1.32k|      finish_tag_name(parser);
 1321|  1.32k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 1322|  1.32k|      return emit_current_tag(parser, output);
 1323|  1.32k|    }
 1324|    478|    break;
 1325|  4.29k|  }
 1326|  2.25k|  abandon_current_tag(parser);
 1327|  2.25k|  reconsume_in_state(parser, GUMBO_LEX_RAWTEXT);
 1328|  2.25k|  return emit_from_mark(parser, output);
 1329|  4.29k|}
tokenizer.c:handle_script_data_lt_state:
 1337|  11.6k|) {
 1338|  11.6k|  if (c == '/') {
  ------------------
  |  Branch (1338:7): [True: 3.25k, False: 8.35k]
  ------------------
 1339|  3.25k|    gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA_END_TAG_OPEN);
 1340|  3.25k|    return CONTINUE;
 1341|  3.25k|  }
 1342|  8.35k|  if (c == '!') {
  ------------------
  |  Branch (1342:7): [True: 3.96k, False: 4.39k]
  ------------------
 1343|       |    // This is the only place we don't reconsume the input before emitting the
 1344|       |    // temporary buffer. Since the current position is stored and the current
 1345|       |    // character is not emitted, we need to advance the input and then
 1346|       |    // reconsume.
 1347|  3.96k|    utf8iterator_next(&tokenizer->_input);
 1348|  3.96k|    reconsume_in_state(parser, GUMBO_LEX_SCRIPT_DATA_ESCAPED_START);
 1349|  3.96k|    return emit_from_mark(parser, output);
 1350|  3.96k|  }
 1351|  4.39k|  reconsume_in_state(parser, GUMBO_LEX_SCRIPT_DATA);
 1352|  4.39k|  return emit_from_mark(parser, output);
 1353|  8.35k|}
tokenizer.c:handle_script_data_end_tag_open_state:
 1361|  3.25k|) {
 1362|  3.25k|  if (is_alpha(c)) {
  ------------------
  |  Branch (1362:7): [True: 2.51k, False: 745]
  ------------------
 1363|  2.51k|    reconsume_in_state(parser, GUMBO_LEX_SCRIPT_DATA_END_TAG_NAME);
 1364|  2.51k|    start_new_tag(parser, false);
 1365|  2.51k|    return CONTINUE;
 1366|  2.51k|  }
 1367|    745|  reconsume_in_state(parser, GUMBO_LEX_SCRIPT_DATA);
 1368|    745|  return emit_from_mark(parser, output);
 1369|  3.25k|}
tokenizer.c:handle_script_data_end_tag_name_state:
 1377|  26.6k|) {
 1378|  26.6k|  if (is_alpha(c)) {
  ------------------
  |  Branch (1378:7): [True: 24.1k, False: 2.51k]
  ------------------
 1379|  24.1k|    append_char_to_tag_buffer(parser, ensure_lowercase(c), true);
 1380|  24.1k|    return CONTINUE;
 1381|  24.1k|  }
 1382|  2.51k|  switch (c) {
  ------------------
  |  Branch (1382:11): [True: 2.06k, False: 446]
  ------------------
 1383|    412|  case '\t':
  ------------------
  |  Branch (1383:3): [True: 412, False: 2.10k]
  ------------------
 1384|    619|  case '\n':
  ------------------
  |  Branch (1384:3): [True: 207, False: 2.30k]
  ------------------
 1385|    818|  case '\f':
  ------------------
  |  Branch (1385:3): [True: 199, False: 2.31k]
  ------------------
 1386|  1.03k|  case ' ':
  ------------------
  |  Branch (1386:3): [True: 212, False: 2.30k]
  ------------------
 1387|  1.03k|    if (is_appropriate_end_tag(parser)) {
  ------------------
  |  Branch (1387:9): [True: 202, False: 828]
  ------------------
 1388|    202|      finish_tag_name(parser);
 1389|    202|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_BEFORE_ATTR_NAME);
 1390|    202|      return CONTINUE;
 1391|    202|    }
 1392|    828|    break;
 1393|    828|  case '/':
  ------------------
  |  Branch (1393:3): [True: 439, False: 2.07k]
  ------------------
 1394|    439|    if (is_appropriate_end_tag(parser)) {
  ------------------
  |  Branch (1394:9): [True: 223, False: 216]
  ------------------
 1395|    223|      finish_tag_name(parser);
 1396|    223|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SELF_CLOSING_START_TAG);
 1397|    223|      return CONTINUE;
 1398|    223|    }
 1399|    216|    break;
 1400|    597|  case '>':
  ------------------
  |  Branch (1400:3): [True: 597, False: 1.91k]
  ------------------
 1401|    597|    if (is_appropriate_end_tag(parser)) {
  ------------------
  |  Branch (1401:9): [True: 266, False: 331]
  ------------------
 1402|    266|      finish_tag_name(parser);
 1403|    266|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 1404|    266|      return emit_current_tag(parser, output);
 1405|    266|    }
 1406|    331|    break;
 1407|  2.51k|  }
 1408|  1.82k|  abandon_current_tag(parser);
 1409|  1.82k|  reconsume_in_state(parser, GUMBO_LEX_SCRIPT_DATA);
 1410|  1.82k|  return emit_from_mark(parser, output);
 1411|  2.51k|}
tokenizer.c:handle_script_data_escaped_start_state:
 1419|  3.96k|) {
 1420|  3.96k|  if (c == '-') {
  ------------------
  |  Branch (1420:7): [True: 3.48k, False: 480]
  ------------------
 1421|  3.48k|    gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA_ESCAPED_START_DASH);
 1422|  3.48k|    return emit_char(parser, c, output);
 1423|  3.48k|  }
 1424|    480|  reconsume_in_state(parser, GUMBO_LEX_SCRIPT_DATA);
 1425|    480|  return CONTINUE;
 1426|  3.96k|}
tokenizer.c:handle_script_data_escaped_start_dash_state:
 1434|  3.48k|) {
 1435|  3.48k|  if (c == '-') {
  ------------------
  |  Branch (1435:7): [True: 2.73k, False: 749]
  ------------------
 1436|  2.73k|    gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA_ESCAPED_DASH_DASH);
 1437|  2.73k|    return emit_char(parser, c, output);
 1438|  2.73k|  } else {
 1439|    749|    reconsume_in_state(parser, GUMBO_LEX_SCRIPT_DATA);
 1440|    749|    return CONTINUE;
 1441|    749|  }
 1442|  3.48k|}
tokenizer.c:handle_script_data_escaped_state:
 1450|   126k|) {
 1451|   126k|  switch (c) {
 1452|  9.07k|    case '-':
  ------------------
  |  Branch (1452:5): [True: 9.07k, False: 117k]
  ------------------
 1453|  9.07k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA_ESCAPED_DASH);
 1454|  9.07k|      return emit_char(parser, c, output);
 1455|  14.1k|    case '<':
  ------------------
  |  Branch (1455:5): [True: 14.1k, False: 111k]
  ------------------
 1456|  14.1k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA_ESCAPED_LT);
 1457|  14.1k|      clear_temporary_buffer(parser);
 1458|  14.1k|      set_mark(parser);
 1459|  14.1k|      return CONTINUE;
 1460|  11.8k|    case '\0':
  ------------------
  |  Branch (1460:5): [True: 11.8k, False: 114k]
  ------------------
 1461|  11.8k|      return emit_replacement_char(parser, output);
 1462|    506|    case -1:
  ------------------
  |  Branch (1462:5): [True: 506, False: 125k]
  ------------------
 1463|    506|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT);
 1464|    506|      return emit_eof(parser, output);
 1465|  90.5k|    default:
  ------------------
  |  Branch (1465:5): [True: 90.5k, False: 35.5k]
  ------------------
 1466|  90.5k|      return emit_char(parser, c, output);
 1467|   126k|  }
 1468|   126k|}
tokenizer.c:handle_script_data_escaped_dash_state:
 1476|  9.07k|) {
 1477|  9.07k|  switch (c) {
 1478|  3.62k|    case '-':
  ------------------
  |  Branch (1478:5): [True: 3.62k, False: 5.44k]
  ------------------
 1479|  3.62k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA_ESCAPED_DASH_DASH);
 1480|  3.62k|      return emit_char(parser, c, output);
 1481|    870|    case '<':
  ------------------
  |  Branch (1481:5): [True: 870, False: 8.20k]
  ------------------
 1482|    870|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA_ESCAPED_LT);
 1483|    870|      clear_temporary_buffer(parser);
 1484|    870|      set_mark(parser);
 1485|    870|      return CONTINUE;
 1486|    590|    case '\0':
  ------------------
  |  Branch (1486:5): [True: 590, False: 8.48k]
  ------------------
 1487|    590|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA_ESCAPED);
 1488|    590|      return emit_replacement_char(parser, output);
 1489|     54|    case -1:
  ------------------
  |  Branch (1489:5): [True: 54, False: 9.01k]
  ------------------
 1490|     54|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT);
 1491|     54|      return emit_eof(parser, output);
 1492|  3.93k|    default:
  ------------------
  |  Branch (1492:5): [True: 3.93k, False: 5.13k]
  ------------------
 1493|  3.93k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA_ESCAPED);
 1494|  3.93k|      return emit_char(parser, c, output);
 1495|  9.07k|  }
 1496|  9.07k|}
tokenizer.c:handle_script_data_escaped_dash_dash_state:
 1504|  8.04k|) {
 1505|  8.04k|  switch (c) {
 1506|  1.68k|    case '-':
  ------------------
  |  Branch (1506:5): [True: 1.68k, False: 6.35k]
  ------------------
 1507|  1.68k|      return emit_char(parser, c, output);
 1508|  1.07k|    case '<':
  ------------------
  |  Branch (1508:5): [True: 1.07k, False: 6.97k]
  ------------------
 1509|  1.07k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA_ESCAPED_LT);
 1510|  1.07k|      clear_temporary_buffer(parser);
 1511|  1.07k|      set_mark(parser);
 1512|  1.07k|      return CONTINUE;
 1513|    676|    case '>':
  ------------------
  |  Branch (1513:5): [True: 676, False: 7.36k]
  ------------------
 1514|    676|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA);
 1515|    676|      return emit_char(parser, c, output);
 1516|    822|    case '\0':
  ------------------
  |  Branch (1516:5): [True: 822, False: 7.22k]
  ------------------
 1517|    822|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA_ESCAPED);
 1518|    822|      return emit_replacement_char(parser, output);
 1519|     18|    case -1:
  ------------------
  |  Branch (1519:5): [True: 18, False: 8.02k]
  ------------------
 1520|     18|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT);
 1521|     18|      return emit_eof(parser, output);
 1522|  3.76k|    default:
  ------------------
  |  Branch (1522:5): [True: 3.76k, False: 4.27k]
  ------------------
 1523|  3.76k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA_ESCAPED);
 1524|  3.76k|      return emit_char(parser, c, output);
 1525|  8.04k|  }
 1526|  8.04k|}
tokenizer.c:handle_script_data_escaped_lt_state:
 1534|  16.1k|) {
 1535|  16.1k|  assert(temporary_buffer_is_empty(parser));
  ------------------
  |  Branch (1535:3): [True: 0, False: 16.1k]
  |  Branch (1535:3): [True: 16.1k, False: 0]
  ------------------
 1536|  16.1k|  if (c == '/') {
  ------------------
  |  Branch (1536:7): [True: 3.79k, False: 12.3k]
  ------------------
 1537|  3.79k|    gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA_ESCAPED_END_TAG_OPEN);
 1538|  3.79k|    return CONTINUE;
 1539|  3.79k|  }
 1540|  12.3k|  if (is_alpha(c)) {
  ------------------
  |  Branch (1540:7): [True: 6.15k, False: 6.15k]
  ------------------
 1541|  6.15k|    reconsume_in_state(parser, GUMBO_LEX_SCRIPT_DATA_DOUBLE_ESCAPED_START);
 1542|  6.15k|    return emit_from_mark(parser, output);
 1543|  6.15k|  }
 1544|  6.15k|  reconsume_in_state(parser, GUMBO_LEX_SCRIPT_DATA_ESCAPED);
 1545|  6.15k|  return emit_from_mark(parser, output);
 1546|  12.3k|}
tokenizer.c:temporary_buffer_is_empty:
  318|  46.5k|static bool temporary_buffer_is_empty(const GumboParser* parser) {
  319|  46.5k|  return parser->_tokenizer_state->_temporary_buffer.length == 0;
  320|  46.5k|}
tokenizer.c:handle_script_data_escaped_end_tag_open_state:
 1554|  3.79k|) {
 1555|  3.79k|  if (is_alpha(c)) {
  ------------------
  |  Branch (1555:7): [True: 2.84k, False: 953]
  ------------------
 1556|  2.84k|    reconsume_in_state(parser, GUMBO_LEX_SCRIPT_DATA_ESCAPED_END_TAG_NAME);
 1557|  2.84k|    start_new_tag(parser, false);
 1558|  2.84k|    return CONTINUE;
 1559|  2.84k|  }
 1560|    953|  reconsume_in_state(parser, GUMBO_LEX_SCRIPT_DATA_ESCAPED);
 1561|    953|  return emit_from_mark(parser, output);
 1562|  3.79k|}
tokenizer.c:handle_script_data_escaped_end_tag_name_state:
 1570|  12.1k|) {
 1571|  12.1k|  if (is_alpha(c)) {
  ------------------
  |  Branch (1571:7): [True: 9.27k, False: 2.84k]
  ------------------
 1572|  9.27k|    append_char_to_tag_buffer(parser, ensure_lowercase(c), true);
 1573|  9.27k|    return CONTINUE;
 1574|  9.27k|  }
 1575|  2.84k|  switch (c) {
  ------------------
  |  Branch (1575:11): [True: 2.35k, False: 486]
  ------------------
 1576|    405|  case '\t':
  ------------------
  |  Branch (1576:3): [True: 405, False: 2.43k]
  ------------------
 1577|    669|  case '\n':
  ------------------
  |  Branch (1577:3): [True: 264, False: 2.57k]
  ------------------
 1578|    884|  case '\f':
  ------------------
  |  Branch (1578:3): [True: 215, False: 2.62k]
  ------------------
 1579|  1.08k|  case ' ':
  ------------------
  |  Branch (1579:3): [True: 202, False: 2.64k]
  ------------------
 1580|  1.08k|    if (is_appropriate_end_tag(parser)) {
  ------------------
  |  Branch (1580:9): [True: 197, False: 889]
  ------------------
 1581|    197|      finish_tag_name(parser);
 1582|    197|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_BEFORE_ATTR_NAME);
 1583|    197|      return CONTINUE;
 1584|    197|    }
 1585|    889|    break;
 1586|    889|  case '/':
  ------------------
  |  Branch (1586:3): [True: 439, False: 2.40k]
  ------------------
 1587|    439|    if (is_appropriate_end_tag(parser)) {
  ------------------
  |  Branch (1587:9): [True: 195, False: 244]
  ------------------
 1588|    195|      finish_tag_name(parser);
 1589|    195|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SELF_CLOSING_START_TAG);
 1590|    195|      return CONTINUE;
 1591|    195|    }
 1592|    244|    break;
 1593|    831|  case '>':
  ------------------
  |  Branch (1593:3): [True: 831, False: 2.01k]
  ------------------
 1594|    831|    if (is_appropriate_end_tag(parser)) {
  ------------------
  |  Branch (1594:9): [True: 198, False: 633]
  ------------------
 1595|    198|      finish_tag_name(parser);
 1596|    198|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 1597|    198|      return emit_current_tag(parser, output);
 1598|    198|    }
 1599|    633|    break;
 1600|  2.84k|  }
 1601|  2.25k|  abandon_current_tag(parser);
 1602|  2.25k|  reconsume_in_state(parser, GUMBO_LEX_SCRIPT_DATA_ESCAPED);
 1603|  2.25k|  return emit_from_mark(parser, output);
 1604|  2.84k|}
tokenizer.c:handle_script_data_double_escaped_start_state:
 1612|  28.0k|) {
 1613|  28.0k|  switch (c) {
  ------------------
  |  Branch (1613:11): [True: 3.96k, False: 24.0k]
  ------------------
 1614|    207|    case '\t':
  ------------------
  |  Branch (1614:5): [True: 207, False: 27.8k]
  ------------------
 1615|    834|    case '\n':
  ------------------
  |  Branch (1615:5): [True: 627, False: 27.3k]
  ------------------
 1616|  1.05k|    case '\f':
  ------------------
  |  Branch (1616:5): [True: 217, False: 27.8k]
  ------------------
 1617|  1.31k|    case ' ':
  ------------------
  |  Branch (1617:5): [True: 259, False: 27.7k]
  ------------------
 1618|  1.59k|    case '/':
  ------------------
  |  Branch (1618:5): [True: 287, False: 27.7k]
  ------------------
 1619|  3.96k|    case '>':
  ------------------
  |  Branch (1619:5): [True: 2.37k, False: 25.6k]
  ------------------
 1620|  3.96k|      gumbo_tokenizer_set_state (
 1621|  3.96k|        parser,
 1622|  3.96k|        gumbo_string_equals (
  ------------------
  |  Branch (1622:9): [True: 910, False: 3.05k]
  ------------------
 1623|  3.96k|          &kScriptTag,
 1624|  3.96k|          (GumboStringPiece*) &tokenizer->_temporary_buffer
 1625|  3.96k|        )
 1626|  3.96k|        ? GUMBO_LEX_SCRIPT_DATA_DOUBLE_ESCAPED
 1627|  3.96k|        : GUMBO_LEX_SCRIPT_DATA_ESCAPED
 1628|  3.96k|      );
 1629|  3.96k|      return emit_char(parser, c, output);
 1630|  28.0k|  }
 1631|  24.0k|  if (is_alpha(c)) {
  ------------------
  |  Branch (1631:7): [True: 21.8k, False: 2.18k]
  ------------------
 1632|  21.8k|    append_char_to_temporary_buffer(parser, ensure_lowercase(c));
 1633|  21.8k|    return emit_char(parser, c, output);
 1634|  21.8k|  }
 1635|  2.18k|  reconsume_in_state(parser, GUMBO_LEX_SCRIPT_DATA_ESCAPED);
 1636|  2.18k|  return CONTINUE;
 1637|  24.0k|}
tokenizer.c:append_char_to_temporary_buffer:
  300|   553k|) {
  301|   553k|  gumbo_string_buffer_append_codepoint (
  302|   553k|   codepoint,
  303|   553k|   &parser->_tokenizer_state->_temporary_buffer
  304|   553k|  );
  305|   553k|}
tokenizer.c:handle_script_data_double_escaped_state:
 1645|   131k|) {
 1646|   131k|  switch (c) {
 1647|  9.63k|    case '-':
  ------------------
  |  Branch (1647:5): [True: 9.63k, False: 122k]
  ------------------
 1648|  9.63k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA_DOUBLE_ESCAPED_DASH);
 1649|  9.63k|      return emit_char(parser, c, output);
 1650|  10.7k|    case '<':
  ------------------
  |  Branch (1650:5): [True: 10.7k, False: 121k]
  ------------------
 1651|  10.7k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA_DOUBLE_ESCAPED_LT);
 1652|  10.7k|      return emit_char(parser, c, output);
 1653|  13.8k|    case '\0':
  ------------------
  |  Branch (1653:5): [True: 13.8k, False: 118k]
  ------------------
 1654|  13.8k|      return emit_replacement_char(parser, output);
 1655|    393|    case -1:
  ------------------
  |  Branch (1655:5): [True: 393, False: 131k]
  ------------------
 1656|    393|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT);
 1657|    393|      return emit_eof(parser, output);
 1658|  97.3k|    default:
  ------------------
  |  Branch (1658:5): [True: 97.3k, False: 34.6k]
  ------------------
 1659|  97.3k|      return emit_char(parser, c, output);
 1660|   131k|  }
 1661|   131k|}
tokenizer.c:handle_script_data_double_escaped_dash_state:
 1669|  9.63k|) {
 1670|  9.63k|  switch (c) {
 1671|  4.69k|    case '-':
  ------------------
  |  Branch (1671:5): [True: 4.69k, False: 4.93k]
  ------------------
 1672|  4.69k|      gumbo_tokenizer_set_state(
 1673|  4.69k|          parser, GUMBO_LEX_SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH);
 1674|  4.69k|      return emit_char(parser, c, output);
 1675|    904|    case '<':
  ------------------
  |  Branch (1675:5): [True: 904, False: 8.72k]
  ------------------
 1676|    904|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA_DOUBLE_ESCAPED_LT);
 1677|    904|      return emit_char(parser, c, output);
 1678|    501|    case '\0':
  ------------------
  |  Branch (1678:5): [True: 501, False: 9.12k]
  ------------------
 1679|    501|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA_DOUBLE_ESCAPED);
 1680|    501|      return emit_replacement_char(parser, output);
 1681|     69|    case -1:
  ------------------
  |  Branch (1681:5): [True: 69, False: 9.56k]
  ------------------
 1682|     69|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT);
 1683|     69|      return emit_eof(parser, output);
 1684|  3.46k|    default:
  ------------------
  |  Branch (1684:5): [True: 3.46k, False: 6.16k]
  ------------------
 1685|  3.46k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA_DOUBLE_ESCAPED);
 1686|  3.46k|      return emit_char(parser, c, output);
 1687|  9.63k|  }
 1688|  9.63k|}
tokenizer.c:handle_script_data_double_escaped_dash_dash_state:
 1696|  6.16k|) {
 1697|  6.16k|  switch (c) {
 1698|  1.47k|    case '-':
  ------------------
  |  Branch (1698:5): [True: 1.47k, False: 4.69k]
  ------------------
 1699|  1.47k|      return emit_char(parser, c, output);
 1700|    738|    case '<':
  ------------------
  |  Branch (1700:5): [True: 738, False: 5.43k]
  ------------------
 1701|    738|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA_DOUBLE_ESCAPED_LT);
 1702|    738|      return emit_char(parser, c, output);
 1703|    415|    case '>':
  ------------------
  |  Branch (1703:5): [True: 415, False: 5.75k]
  ------------------
 1704|    415|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA);
 1705|    415|      return emit_char(parser, c, output);
 1706|    686|    case '\0':
  ------------------
  |  Branch (1706:5): [True: 686, False: 5.48k]
  ------------------
 1707|    686|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA_DOUBLE_ESCAPED);
 1708|    686|      return emit_replacement_char(parser, output);
 1709|     12|    case -1:
  ------------------
  |  Branch (1709:5): [True: 12, False: 6.15k]
  ------------------
 1710|     12|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT);
 1711|     12|      return emit_eof(parser, output);
 1712|  2.84k|    default:
  ------------------
  |  Branch (1712:5): [True: 2.84k, False: 3.32k]
  ------------------
 1713|  2.84k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA_DOUBLE_ESCAPED);
 1714|  2.84k|      return emit_char(parser, c, output);
 1715|  6.16k|  }
 1716|  6.16k|}
tokenizer.c:handle_script_data_double_escaped_lt_state:
 1724|  12.3k|) {
 1725|  12.3k|  if (c == '/') {
  ------------------
  |  Branch (1725:7): [True: 3.12k, False: 9.27k]
  ------------------
 1726|  3.12k|    gumbo_tokenizer_set_state(parser, GUMBO_LEX_SCRIPT_DATA_DOUBLE_ESCAPED_END);
 1727|  3.12k|    clear_temporary_buffer(parser);
 1728|  3.12k|    return emit_char(parser, c, output);
 1729|  9.27k|  } else {
 1730|  9.27k|    reconsume_in_state(parser, GUMBO_LEX_SCRIPT_DATA_DOUBLE_ESCAPED);
 1731|  9.27k|    return CONTINUE;
 1732|  9.27k|  }
 1733|  12.3k|}
tokenizer.c:handle_script_data_double_escaped_end_state:
 1741|  15.6k|) {
 1742|  15.6k|  switch (c) {
  ------------------
  |  Branch (1742:11): [True: 2.44k, False: 13.1k]
  ------------------
 1743|    230|    case '\t':
  ------------------
  |  Branch (1743:5): [True: 230, False: 15.4k]
  ------------------
 1744|  1.09k|    case '\n':
  ------------------
  |  Branch (1744:5): [True: 865, False: 14.7k]
  ------------------
 1745|  1.31k|    case '\f':
  ------------------
  |  Branch (1745:5): [True: 224, False: 15.4k]
  ------------------
 1746|  1.55k|    case ' ':
  ------------------
  |  Branch (1746:5): [True: 235, False: 15.4k]
  ------------------
 1747|  1.93k|    case '/':
  ------------------
  |  Branch (1747:5): [True: 383, False: 15.2k]
  ------------------
 1748|  2.44k|    case '>':
  ------------------
  |  Branch (1748:5): [True: 512, False: 15.1k]
  ------------------
 1749|  2.44k|      gumbo_tokenizer_set_state(
 1750|  2.44k|          parser, gumbo_string_equals(&kScriptTag,
  ------------------
  |  Branch (1750:19): [True: 21, False: 2.42k]
  ------------------
 1751|  2.44k|                      (GumboStringPiece*) &tokenizer->_temporary_buffer)
 1752|  2.44k|                      ? GUMBO_LEX_SCRIPT_DATA_ESCAPED
 1753|  2.44k|                      : GUMBO_LEX_SCRIPT_DATA_DOUBLE_ESCAPED);
 1754|  2.44k|      return emit_char(parser, c, output);
 1755|  15.6k|  }
 1756|  13.1k|  if (is_alpha(c)) {
  ------------------
  |  Branch (1756:7): [True: 12.5k, False: 671]
  ------------------
 1757|  12.5k|    append_char_to_temporary_buffer(parser, ensure_lowercase(c));
 1758|  12.5k|    return emit_char(parser, c, output);
 1759|  12.5k|  }
 1760|    671|  reconsume_in_state(parser, GUMBO_LEX_SCRIPT_DATA_DOUBLE_ESCAPED);
 1761|    671|  return CONTINUE;
 1762|  13.1k|}
tokenizer.c:handle_before_attr_name_state:
 1770|  64.6k|) {
 1771|  64.6k|  switch (c) {
 1772|  1.11k|    case '\t':
  ------------------
  |  Branch (1772:5): [True: 1.11k, False: 63.5k]
  ------------------
 1773|  3.25k|    case '\n':
  ------------------
  |  Branch (1773:5): [True: 2.14k, False: 62.5k]
  ------------------
 1774|  4.25k|    case '\f':
  ------------------
  |  Branch (1774:5): [True: 993, False: 63.6k]
  ------------------
 1775|  5.08k|    case ' ':
  ------------------
  |  Branch (1775:5): [True: 831, False: 63.8k]
  ------------------
 1776|  5.08k|      return CONTINUE;
 1777|  5.67k|    case '/':
  ------------------
  |  Branch (1777:5): [True: 5.67k, False: 59.0k]
  ------------------
 1778|  7.38k|    case '>':
  ------------------
  |  Branch (1778:5): [True: 1.70k, False: 62.9k]
  ------------------
 1779|  7.45k|    case -1:
  ------------------
  |  Branch (1779:5): [True: 73, False: 64.6k]
  ------------------
 1780|  7.45k|      reconsume_in_state(parser, GUMBO_LEX_AFTER_ATTR_NAME);
 1781|  7.45k|      return CONTINUE;
 1782|  1.20k|    case '=':
  ------------------
  |  Branch (1782:5): [True: 1.20k, False: 63.4k]
  ------------------
 1783|  1.20k|      tokenizer_add_parse_error(parser, GUMBO_ERR_UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME);
 1784|  1.20k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_ATTR_NAME);
 1785|  1.20k|      append_char_to_tag_buffer(parser, c, true);
 1786|  1.20k|      return CONTINUE;
 1787|  50.9k|    default:
  ------------------
  |  Branch (1787:5): [True: 50.9k, False: 13.7k]
  ------------------
 1788|  50.9k|      reconsume_in_state(parser, GUMBO_LEX_ATTR_NAME);
 1789|  50.9k|      return CONTINUE;
 1790|  64.6k|  }
 1791|  64.6k|}
tokenizer.c:handle_attr_name_state:
 1799|   672k|) {
 1800|   672k|  switch (c) {
 1801|  18.8k|    case '\t':
  ------------------
  |  Branch (1801:5): [True: 18.8k, False: 653k]
  ------------------
 1802|  30.4k|    case '\n':
  ------------------
  |  Branch (1802:5): [True: 11.6k, False: 660k]
  ------------------
 1803|  35.7k|    case '\f':
  ------------------
  |  Branch (1803:5): [True: 5.22k, False: 667k]
  ------------------
 1804|  46.0k|    case ' ':
  ------------------
  |  Branch (1804:5): [True: 10.3k, False: 662k]
  ------------------
 1805|  67.2k|    case '/':
  ------------------
  |  Branch (1805:5): [True: 21.2k, False: 651k]
  ------------------
 1806|  83.4k|    case '>':
  ------------------
  |  Branch (1806:5): [True: 16.2k, False: 656k]
  ------------------
 1807|  84.2k|    case -1:
  ------------------
  |  Branch (1807:5): [True: 755, False: 671k]
  ------------------
 1808|  84.2k|      finish_attribute_name(parser);
 1809|  84.2k|      reconsume_in_state(parser, GUMBO_LEX_AFTER_ATTR_NAME);
 1810|  84.2k|      return CONTINUE;
 1811|  12.0k|    case '=':
  ------------------
  |  Branch (1811:5): [True: 12.0k, False: 660k]
  ------------------
 1812|  12.0k|      finish_attribute_name(parser);
 1813|  12.0k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_BEFORE_ATTR_VALUE);
 1814|  12.0k|      return CONTINUE;
 1815|   139k|    case '\0':
  ------------------
  |  Branch (1815:5): [True: 139k, False: 533k]
  ------------------
 1816|   139k|      tokenizer_add_parse_error(parser, GUMBO_ERR_UNEXPECTED_NULL_CHARACTER);
 1817|   139k|      append_char_to_tag_buffer(parser, kUtf8ReplacementChar, true);
  ------------------
  |  |   33|   139k|#define kUtf8ReplacementChar 0xFFFD
  ------------------
 1818|   139k|      return CONTINUE;
 1819|  2.15k|    case '"':
  ------------------
  |  Branch (1819:5): [True: 2.15k, False: 670k]
  ------------------
 1820|  3.58k|    case '\'':
  ------------------
  |  Branch (1820:5): [True: 1.42k, False: 671k]
  ------------------
 1821|  17.0k|    case '<':
  ------------------
  |  Branch (1821:5): [True: 13.4k, False: 659k]
  ------------------
 1822|  17.0k|      tokenizer_add_parse_error(parser, GUMBO_ERR_UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME);
 1823|       |    // Fall through.
 1824|   437k|    default:
  ------------------
  |  Branch (1824:5): [True: 420k, False: 252k]
  ------------------
 1825|       |      append_char_to_tag_buffer(parser, ensure_lowercase(c), true);
 1826|   437k|      return CONTINUE;
 1827|   672k|  }
 1828|   672k|}
tokenizer.c:finish_attribute_name:
  791|  96.2k|static void finish_attribute_name(GumboParser* parser) {
  792|  96.2k|  GumboTokenizerState* tokenizer = parser->_tokenizer_state;
  793|  96.2k|  GumboTagState* tag_state = &tokenizer->_tag_state;
  794|  96.2k|  GumboVector* /* GumboAttribute* */ attributes = &tag_state->_attributes;
  795|  96.2k|  GumboStringSet* attributes_lookup = tag_state->_attributes_lookup;
  796|  96.2k|  char* attr_name = NULL;
  797|       |
  798|  96.2k|  int max_attributes = parser->_options->max_attributes;
  799|  96.2k|  if (unlikely(max_attributes >= 0 && attributes->length >= (unsigned int) max_attributes)) {
  ------------------
  |  |   65|   192k|    #define unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (65:25): [True: 212, False: 96.0k]
  |  |  |  Branch (65:45): [True: 96.2k, False: 0]
  |  |  |  Branch (65:45): [True: 212, False: 96.0k]
  |  |  ------------------
  ------------------
  800|    212|    parser->_output->status = GUMBO_STATUS_TOO_MANY_ATTRIBUTES;
  801|    212|    gumbo_debug("Attributes limit exceeded.\n");
  802|    212|    reinitialize_tag_buffer(parser);
  803|    212|    tag_state->_drop_next_attr_value = true;
  804|    212|    return;
  805|    212|  }
  806|       |
  807|  96.0k|  if (attributes->length >= GUMBO_ATTRIBUTES_LOOKUP_MIN_SIZE && tag_state->_attributes_lookup == NULL) {
  ------------------
  |  |   64|   192k|#define GUMBO_ATTRIBUTES_LOOKUP_MIN_SIZE 16
  ------------------
  |  Branch (807:7): [True: 32.6k, False: 63.4k]
  |  Branch (807:65): [True: 1.32k, False: 31.2k]
  ------------------
  808|       |    // build the hash table of attributes
  809|  1.32k|    attributes_lookup = tag_state->_attributes_lookup = gumbo_string_set_new(GUMBO_ATTRIBUTES_LOOKUP_MIN_SIZE * 2);
  ------------------
  |  |   64|  1.32k|#define GUMBO_ATTRIBUTES_LOOKUP_MIN_SIZE 16
  ------------------
  810|  22.5k|    for (unsigned int i = 0; i < attributes->length; ++i) {
  ------------------
  |  Branch (810:30): [True: 21.2k, False: 1.32k]
  ------------------
  811|  21.2k|      GumboAttribute* attr = attributes->data[i];
  812|  21.2k|      gumbo_string_set_insert(attributes_lookup, attr->name);
  813|  21.2k|    }
  814|  1.32k|  }
  815|       |
  816|       |  // May've been set by a previous attribute without a value; reset it here.
  817|  96.0k|  tag_state->_drop_next_attr_value = false;
  818|  96.0k|  assert(tag_state->_attributes.data);
  ------------------
  |  Branch (818:3): [True: 0, False: 96.0k]
  |  Branch (818:3): [True: 96.0k, False: 0]
  ------------------
  819|  96.0k|  assert(tag_state->_attributes.capacity);
  ------------------
  |  Branch (819:3): [True: 0, False: 96.0k]
  |  Branch (819:3): [True: 96.0k, False: 0]
  ------------------
  820|       |
  821|  96.0k|  if (!attributes_lookup) {
  ------------------
  |  Branch (821:7): [True: 63.4k, False: 32.6k]
  ------------------
  822|   269k|    for (unsigned int i = 0; i < attributes->length; ++i) {
  ------------------
  |  Branch (822:30): [True: 214k, False: 55.4k]
  ------------------
  823|   214k|      GumboAttribute* attr = attributes->data[i];
  824|   214k|      if (strlen(attr->name) == tag_state->_buffer.length
  ------------------
  |  Branch (824:11): [True: 51.9k, False: 162k]
  ------------------
  825|  51.9k|          && 0 == memcmp(attr->name, tag_state->_buffer.data, tag_state->_buffer.length)) {
  ------------------
  |  Branch (825:14): [True: 7.99k, False: 43.9k]
  ------------------
  826|  7.99k|        goto duplicate_attribute;
  827|  7.99k|      }
  828|   214k|    }
  829|  63.4k|  } else {
  830|  32.6k|    attr_name = gumbo_string_buffer_to_string(&tag_state->_buffer);
  831|  32.6k|    if (gumbo_string_set_contains(attributes_lookup, attr_name)) {
  ------------------
  |  Branch (831:9): [True: 9.74k, False: 22.8k]
  ------------------
  832|  9.74k|      goto duplicate_attribute;
  833|  9.74k|    }
  834|  32.6k|  }
  835|       |
  836|  78.2k|  GumboAttribute* attr = gumbo_alloc(sizeof(GumboAttribute));
  837|  78.2k|  attr->attr_namespace = GUMBO_ATTR_NAMESPACE_NONE;
  838|  78.2k|  if (attr_name) {
  ------------------
  |  Branch (838:7): [True: 22.8k, False: 55.4k]
  ------------------
  839|  22.8k|    attr->name = attr_name;
  840|  55.4k|  } else {
  841|  55.4k|    copy_over_tag_buffer(parser, &attr->name);
  842|  55.4k|  }
  843|  78.2k|  copy_over_original_tag_text (
  844|  78.2k|    parser,
  845|  78.2k|    &attr->original_name,
  846|  78.2k|    &attr->name_start,
  847|  78.2k|    &attr->name_end
  848|  78.2k|  );
  849|  78.2k|  attr->value = gumbo_strdup("");
  850|  78.2k|  copy_over_original_tag_text (
  851|  78.2k|    parser,
  852|  78.2k|    &attr->original_value,
  853|  78.2k|    &attr->name_start,
  854|  78.2k|    &attr->name_end
  855|  78.2k|  );
  856|  78.2k|  gumbo_vector_add(attr, attributes);
  857|  78.2k|  if (attributes_lookup) {
  ------------------
  |  Branch (857:7): [True: 22.8k, False: 55.4k]
  ------------------
  858|  22.8k|    gumbo_string_set_insert(attributes_lookup, attr->name);
  859|  22.8k|  }
  860|  78.2k|  reinitialize_tag_buffer(parser);
  861|  78.2k|  return;
  862|       |
  863|  17.7k|duplicate_attribute:
  864|       |  // Identical attribute; bail.
  865|  17.7k|  gumbo_free(attr_name);
  866|  17.7k|  add_duplicate_attr_error(parser);
  867|  17.7k|  reinitialize_tag_buffer(parser);
  868|       |  tag_state->_drop_next_attr_value = true;
  869|  17.7k|  return;
  870|  96.0k|}
tokenizer.c:copy_over_tag_buffer:
  708|  62.2k|static void copy_over_tag_buffer(GumboParser* parser, const char** output) {
  709|  62.2k|  GumboTokenizerState* tokenizer = parser->_tokenizer_state;
  710|  62.2k|  GumboTagState* tag_state = &tokenizer->_tag_state;
  711|  62.2k|  *output = gumbo_string_buffer_to_string(&tag_state->_buffer);
  712|  62.2k|}
tokenizer.c:copy_over_original_tag_text:
  725|   163k|) {
  726|   163k|  GumboTokenizerState* tokenizer = parser->_tokenizer_state;
  727|   163k|  GumboTagState* tag_state = &tokenizer->_tag_state;
  728|       |
  729|   163k|  original_text->data = tag_state->_original_text;
  730|   163k|  original_text->length = utf8iterator_get_char_pointer(&tokenizer->_input) -
  731|   163k|                          tag_state->_original_text;
  732|   163k|  if (
  733|   163k|    original_text->length
  ------------------
  |  Branch (733:5): [True: 162k, False: 945]
  ------------------
  734|   162k|    && original_text->data[original_text->length - 1] == '\r'
  ------------------
  |  Branch (734:8): [True: 951, False: 161k]
  ------------------
  735|   163k|  ) {
  736|       |    // Since \r is skipped by the UTF-8 iterator, it can sometimes end up
  737|       |    // appended to the end of original text even when it's really the first part
  738|       |    // of the next character. If we detect this situation, shrink the length of
  739|       |    // the original text by 1 to remove the carriage return.
  740|    951|    --original_text->length;
  741|    951|  }
  742|   163k|  *start_pos = tag_state->_start_pos;
  743|   163k|  utf8iterator_get_position(&tokenizer->_input, end_pos);
  744|   163k|}
tokenizer.c:add_duplicate_attr_error:
  771|  17.7k|static void add_duplicate_attr_error(GumboParser* parser) {
  772|  17.7k|  GumboTokenizerState* tokenizer = parser->_tokenizer_state;
  773|  17.7k|  GumboError* error = gumbo_add_error(parser);
  774|  17.7k|  if (!error) {
  ------------------
  |  Branch (774:7): [True: 0, False: 17.7k]
  ------------------
  775|      0|    return;
  776|      0|  }
  777|  17.7k|  GumboTagState* tag_state = &parser->_tokenizer_state->_tag_state;
  778|  17.7k|  error->type = GUMBO_ERR_DUPLICATE_ATTRIBUTE;
  779|  17.7k|  error->position = tag_state->_start_pos;
  780|  17.7k|  error->original_text.data = tag_state->_original_text;
  781|  17.7k|  error->original_text.length =
  782|  17.7k|    utf8iterator_get_char_pointer(&tokenizer->_input) - error->original_text.data;
  783|  17.7k|  error->v.tokenizer.state = tokenizer->_state;
  784|  17.7k|}
tokenizer.c:handle_after_attr_name_state:
 1836|   151k|) {
 1837|   151k|  switch (c) {
 1838|  25.8k|    case '\t':
  ------------------
  |  Branch (1838:5): [True: 25.8k, False: 125k]
  ------------------
 1839|  41.0k|    case '\n':
  ------------------
  |  Branch (1839:5): [True: 15.2k, False: 135k]
  ------------------
 1840|  47.2k|    case '\f':
  ------------------
  |  Branch (1840:5): [True: 6.16k, False: 145k]
  ------------------
 1841|  59.5k|    case ' ':
  ------------------
  |  Branch (1841:5): [True: 12.2k, False: 138k]
  ------------------
 1842|  59.5k|      return CONTINUE;
 1843|  27.7k|    case '/':
  ------------------
  |  Branch (1843:5): [True: 27.7k, False: 123k]
  ------------------
 1844|  27.7k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SELF_CLOSING_START_TAG);
 1845|  27.7k|      return CONTINUE;
 1846|    484|    case '=':
  ------------------
  |  Branch (1846:5): [True: 484, False: 150k]
  ------------------
 1847|    484|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_BEFORE_ATTR_VALUE);
 1848|    484|      return CONTINUE;
 1849|  18.4k|    case '>':
  ------------------
  |  Branch (1849:5): [True: 18.4k, False: 132k]
  ------------------
 1850|  18.4k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 1851|  18.4k|      return emit_current_tag(parser, output);
 1852|    890|    case -1:
  ------------------
  |  Branch (1852:5): [True: 890, False: 150k]
  ------------------
 1853|    890|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_TAG);
 1854|    890|      abandon_current_tag(parser);
 1855|    890|      return emit_eof(parser, output);
 1856|  44.0k|    default:
  ------------------
  |  Branch (1856:5): [True: 44.0k, False: 107k]
  ------------------
 1857|  44.0k|      reconsume_in_state(parser, GUMBO_LEX_ATTR_NAME);
 1858|  44.0k|      return CONTINUE;
 1859|   151k|  }
 1860|   151k|}
tokenizer.c:handle_before_attr_value_state:
 1868|  14.2k|) {
 1869|  14.2k|  switch (c) {
  ------------------
  |  Branch (1869:11): [True: 6.37k, False: 7.88k]
  ------------------
 1870|    323|    case '\t':
  ------------------
  |  Branch (1870:5): [True: 323, False: 13.9k]
  ------------------
 1871|    833|    case '\n':
  ------------------
  |  Branch (1871:5): [True: 510, False: 13.7k]
  ------------------
 1872|  1.50k|    case '\f':
  ------------------
  |  Branch (1872:5): [True: 673, False: 13.5k]
  ------------------
 1873|  1.74k|    case ' ':
  ------------------
  |  Branch (1873:5): [True: 236, False: 14.0k]
  ------------------
 1874|  1.74k|      return CONTINUE;
 1875|  3.36k|    case '"':
  ------------------
  |  Branch (1875:5): [True: 3.36k, False: 10.8k]
  ------------------
 1876|  3.36k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_ATTR_VALUE_DOUBLE_QUOTED);
 1877|  3.36k|      reset_tag_buffer_start_point(parser);
 1878|  3.36k|      return CONTINUE;
 1879|    736|    case '\'':
  ------------------
  |  Branch (1879:5): [True: 736, False: 13.5k]
  ------------------
 1880|    736|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_ATTR_VALUE_SINGLE_QUOTED);
 1881|    736|      reset_tag_buffer_start_point(parser);
 1882|    736|      return CONTINUE;
 1883|    525|    case '>':
  ------------------
  |  Branch (1883:5): [True: 525, False: 13.7k]
  ------------------
 1884|    525|      tokenizer_add_parse_error(parser, GUMBO_ERR_MISSING_ATTRIBUTE_VALUE);
 1885|    525|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 1886|    525|      return emit_current_tag(parser, output);
 1887|  14.2k|  }
 1888|  7.88k|  reconsume_in_state(parser, GUMBO_LEX_ATTR_VALUE_UNQUOTED);
 1889|  7.88k|  return CONTINUE;
 1890|  14.2k|}
tokenizer.c:handle_attr_value_double_quoted_state:
 1898|   113k|) {
 1899|   113k|  switch (c) {
 1900|  3.24k|    case '"':
  ------------------
  |  Branch (1900:5): [True: 3.24k, False: 110k]
  ------------------
 1901|  3.24k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_AFTER_ATTR_VALUE_QUOTED);
 1902|  3.24k|      return CONTINUE;
 1903|  13.9k|    case '&':
  ------------------
  |  Branch (1903:5): [True: 13.9k, False: 99.3k]
  ------------------
 1904|  13.9k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_CHARACTER_REFERENCE);
 1905|  13.9k|      set_mark(parser);
 1906|  13.9k|      tokenizer->_return_state = GUMBO_LEX_ATTR_VALUE_DOUBLE_QUOTED;
 1907|  13.9k|      return CONTINUE;
 1908|  12.1k|    case '\0':
  ------------------
  |  Branch (1908:5): [True: 12.1k, False: 101k]
  ------------------
 1909|  12.1k|      tokenizer_add_parse_error(parser, GUMBO_ERR_UNEXPECTED_NULL_CHARACTER);
 1910|  12.1k|      append_char_to_tag_buffer(parser, kUtf8ReplacementChar, false);
  ------------------
  |  |   33|  12.1k|#define kUtf8ReplacementChar 0xFFFD
  ------------------
 1911|  12.1k|      return CONTINUE;
 1912|    125|    case -1:
  ------------------
  |  Branch (1912:5): [True: 125, False: 113k]
  ------------------
 1913|    125|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_TAG);
 1914|    125|      abandon_current_tag(parser);
 1915|    125|      return emit_eof(parser, output);
 1916|  83.8k|    default:
  ------------------
  |  Branch (1916:5): [True: 83.8k, False: 29.4k]
  ------------------
 1917|       |      append_char_to_tag_buffer(parser, c, false);
 1918|  83.8k|      return CONTINUE;
 1919|   113k|  }
 1920|   113k|}
tokenizer.c:handle_attr_value_single_quoted_state:
 1928|  76.9k|) {
 1929|  76.9k|  switch (c) {
 1930|    632|    case '\'':
  ------------------
  |  Branch (1930:5): [True: 632, False: 76.2k]
  ------------------
 1931|    632|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_AFTER_ATTR_VALUE_QUOTED);
 1932|    632|      return CONTINUE;
 1933|  7.81k|    case '&':
  ------------------
  |  Branch (1933:5): [True: 7.81k, False: 69.1k]
  ------------------
 1934|  7.81k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_CHARACTER_REFERENCE);
 1935|  7.81k|      set_mark(parser);
 1936|  7.81k|      tokenizer->_return_state = GUMBO_LEX_ATTR_VALUE_SINGLE_QUOTED;
 1937|  7.81k|      return CONTINUE;
 1938|  12.1k|    case '\0':
  ------------------
  |  Branch (1938:5): [True: 12.1k, False: 64.7k]
  ------------------
 1939|  12.1k|      tokenizer_add_parse_error(parser, GUMBO_ERR_UNEXPECTED_NULL_CHARACTER);
 1940|  12.1k|      append_char_to_tag_buffer(parser, kUtf8ReplacementChar, false);
  ------------------
  |  |   33|  12.1k|#define kUtf8ReplacementChar 0xFFFD
  ------------------
 1941|  12.1k|      return CONTINUE;
 1942|    104|    case -1:
  ------------------
  |  Branch (1942:5): [True: 104, False: 76.8k]
  ------------------
 1943|    104|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_TAG);
 1944|    104|      abandon_current_tag(parser);
 1945|    104|      return emit_eof(parser, output);
 1946|  56.2k|    default:
  ------------------
  |  Branch (1946:5): [True: 56.2k, False: 20.6k]
  ------------------
 1947|       |      append_char_to_tag_buffer(parser, c, false);
 1948|  56.2k|      return CONTINUE;
 1949|  76.9k|  }
 1950|  76.9k|}
tokenizer.c:handle_attr_value_unquoted_state:
 1958|   225k|) {
 1959|   225k|  switch (c) {
 1960|    970|    case '\t':
  ------------------
  |  Branch (1960:5): [True: 970, False: 224k]
  ------------------
 1961|  2.32k|    case '\n':
  ------------------
  |  Branch (1961:5): [True: 1.35k, False: 223k]
  ------------------
 1962|  2.97k|    case '\f':
  ------------------
  |  Branch (1962:5): [True: 643, False: 224k]
  ------------------
 1963|  4.41k|    case ' ':
  ------------------
  |  Branch (1963:5): [True: 1.44k, False: 223k]
  ------------------
 1964|  4.41k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_BEFORE_ATTR_NAME);
 1965|  4.41k|      finish_attribute_value(parser);
 1966|  4.41k|      return CONTINUE;
 1967|  25.3k|    case '&':
  ------------------
  |  Branch (1967:5): [True: 25.3k, False: 199k]
  ------------------
 1968|  25.3k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_CHARACTER_REFERENCE);
 1969|  25.3k|      set_mark(parser);
 1970|  25.3k|      tokenizer->_return_state = GUMBO_LEX_ATTR_VALUE_UNQUOTED;
 1971|  25.3k|      return CONTINUE;
 1972|  3.13k|    case '>':
  ------------------
  |  Branch (1972:5): [True: 3.13k, False: 222k]
  ------------------
 1973|  3.13k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 1974|  3.13k|      finish_attribute_value(parser);
 1975|  3.13k|      return emit_current_tag(parser, output);
 1976|  64.8k|    case '\0':
  ------------------
  |  Branch (1976:5): [True: 64.8k, False: 160k]
  ------------------
 1977|  64.8k|      tokenizer_add_parse_error(parser, GUMBO_ERR_UNEXPECTED_NULL_CHARACTER);
 1978|  64.8k|      append_char_to_tag_buffer(parser, kUtf8ReplacementChar, true);
  ------------------
  |  |   33|  64.8k|#define kUtf8ReplacementChar 0xFFFD
  ------------------
 1979|  64.8k|      return CONTINUE;
 1980|    337|    case -1:
  ------------------
  |  Branch (1980:5): [True: 337, False: 224k]
  ------------------
 1981|    337|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_TAG);
 1982|    337|      abandon_current_tag(parser);
 1983|    337|      return emit_eof(parser, output);
 1984|  1.80k|    case '"':
  ------------------
  |  Branch (1984:5): [True: 1.80k, False: 223k]
  ------------------
 1985|  2.62k|    case '\'':
  ------------------
  |  Branch (1985:5): [True: 823, False: 224k]
  ------------------
 1986|  6.85k|    case '<':
  ------------------
  |  Branch (1986:5): [True: 4.23k, False: 220k]
  ------------------
 1987|  9.67k|    case '=':
  ------------------
  |  Branch (1987:5): [True: 2.81k, False: 222k]
  ------------------
 1988|  10.4k|    case '`':
  ------------------
  |  Branch (1988:5): [True: 815, False: 224k]
  ------------------
 1989|  10.4k|      tokenizer_add_parse_error(parser, GUMBO_ERR_UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE);
 1990|       |    // Fall through.
 1991|   127k|    default:
  ------------------
  |  Branch (1991:5): [True: 116k, False: 108k]
  ------------------
 1992|       |      append_char_to_tag_buffer(parser, c, true);
 1993|   127k|      return CONTINUE;
 1994|   225k|  }
 1995|   225k|}
tokenizer.c:finish_attribute_value:
  874|  11.4k|static void finish_attribute_value(GumboParser* parser) {
  875|  11.4k|  GumboTagState* tag_state = &parser->_tokenizer_state->_tag_state;
  876|  11.4k|  if (tag_state->_drop_next_attr_value) {
  ------------------
  |  Branch (876:7): [True: 4.55k, False: 6.86k]
  ------------------
  877|       |    // Duplicate attribute name detected in an earlier state, so we have to
  878|       |    // ignore the value.
  879|  4.55k|    tag_state->_drop_next_attr_value = false;
  880|  4.55k|    reinitialize_tag_buffer(parser);
  881|  4.55k|    return;
  882|  4.55k|  }
  883|       |
  884|  6.86k|  GumboAttribute* attr =
  885|  6.86k|      tag_state->_attributes.data[tag_state->_attributes.length - 1];
  886|  6.86k|  gumbo_free((void*) attr->value);
  887|  6.86k|  copy_over_tag_buffer(parser, &attr->value);
  888|  6.86k|  copy_over_original_tag_text(
  889|  6.86k|      parser, &attr->original_value, &attr->value_start, &attr->value_end);
  890|  6.86k|  reinitialize_tag_buffer(parser);
  891|  6.86k|}
tokenizer.c:handle_after_attr_value_quoted_state:
 2003|  3.87k|) {
 2004|  3.87k|  finish_attribute_value(parser);
 2005|  3.87k|  switch (c) {
 2006|    455|    case '\t':
  ------------------
  |  Branch (2006:5): [True: 455, False: 3.42k]
  ------------------
 2007|    987|    case '\n':
  ------------------
  |  Branch (2007:5): [True: 532, False: 3.34k]
  ------------------
 2008|  1.32k|    case '\f':
  ------------------
  |  Branch (2008:5): [True: 333, False: 3.54k]
  ------------------
 2009|  1.55k|    case ' ':
  ------------------
  |  Branch (2009:5): [True: 239, False: 3.63k]
  ------------------
 2010|  1.55k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_BEFORE_ATTR_NAME);
 2011|  1.55k|      return CONTINUE;
 2012|    252|    case '/':
  ------------------
  |  Branch (2012:5): [True: 252, False: 3.62k]
  ------------------
 2013|    252|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_SELF_CLOSING_START_TAG);
 2014|    252|      return CONTINUE;
 2015|    686|    case '>':
  ------------------
  |  Branch (2015:5): [True: 686, False: 3.18k]
  ------------------
 2016|    686|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2017|    686|      return emit_current_tag(parser, output);
 2018|     20|    case -1:
  ------------------
  |  Branch (2018:5): [True: 20, False: 3.85k]
  ------------------
 2019|     20|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_TAG);
 2020|     20|      abandon_current_tag(parser);
 2021|     20|      return emit_eof(parser, output);
 2022|  1.35k|    default:
  ------------------
  |  Branch (2022:5): [True: 1.35k, False: 2.51k]
  ------------------
 2023|  1.35k|      tokenizer_add_parse_error(parser, GUMBO_ERR_MISSING_WHITESPACE_BETWEEN_ATTRIBUTES);
 2024|  1.35k|      reconsume_in_state(parser, GUMBO_LEX_BEFORE_ATTR_NAME);
 2025|  1.35k|      return CONTINUE;
 2026|  3.87k|  }
 2027|  3.87k|}
tokenizer.c:handle_self_closing_start_tag_state:
 2035|  36.2k|) {
 2036|  36.2k|  switch (c) {
 2037|  4.11k|    case '>':
  ------------------
  |  Branch (2037:5): [True: 4.11k, False: 32.1k]
  ------------------
 2038|  4.11k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2039|  4.11k|      tokenizer->_tag_state._is_self_closing = true;
 2040|  4.11k|      return emit_current_tag(parser, output);
 2041|     66|    case -1:
  ------------------
  |  Branch (2041:5): [True: 66, False: 36.1k]
  ------------------
 2042|     66|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_TAG);
 2043|     66|      abandon_current_tag(parser);
 2044|     66|      return emit_eof(parser, output);
 2045|  32.0k|    default:
  ------------------
  |  Branch (2045:5): [True: 32.0k, False: 4.17k]
  ------------------
 2046|  32.0k|      tokenizer_add_parse_error(parser, GUMBO_ERR_UNEXPECTED_SOLIDUS_IN_TAG);
 2047|  32.0k|      reconsume_in_state(parser, GUMBO_LEX_BEFORE_ATTR_NAME);
 2048|  32.0k|      return CONTINUE;
 2049|  36.2k|  }
 2050|  36.2k|}
tokenizer.c:handle_bogus_comment_state:
 2058|   260k|) {
 2059|   260k|  switch (c) {
 2060|  22.4k|  case '>':
  ------------------
  |  Branch (2060:3): [True: 22.4k, False: 238k]
  ------------------
 2061|  22.4k|    gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2062|  22.4k|    return emit_comment(parser, output);
 2063|    597|  case -1:
  ------------------
  |  Branch (2063:3): [True: 597, False: 260k]
  ------------------
 2064|       |    // We need to emit the comment and then the EOF, so reconsume in data
 2065|       |    // state.
 2066|    597|    reconsume_in_state(parser, GUMBO_LEX_DATA);
 2067|    597|    return emit_comment(parser, output);
 2068|  17.9k|  case '\0':
  ------------------
  |  Branch (2068:3): [True: 17.9k, False: 242k]
  ------------------
 2069|  17.9k|    tokenizer_add_parse_error(parser, GUMBO_ERR_UNEXPECTED_NULL_CHARACTER);
 2070|  17.9k|    append_char_to_temporary_buffer(parser, kUtf8ReplacementChar);
  ------------------
  |  |   33|  17.9k|#define kUtf8ReplacementChar 0xFFFD
  ------------------
 2071|  17.9k|    return CONTINUE;
 2072|   219k|  default:
  ------------------
  |  Branch (2072:3): [True: 219k, False: 40.9k]
  ------------------
 2073|   219k|    append_char_to_temporary_buffer(parser, c);
 2074|   219k|    return CONTINUE;
 2075|   260k|  }
 2076|   260k|}
tokenizer.c:emit_comment:
  525|  26.7k|static StateResult emit_comment(GumboParser* parser, GumboToken* output) {
  526|  26.7k|  output->type = GUMBO_TOKEN_COMMENT;
  527|  26.7k|  finish_temporary_buffer(parser, &output->v.text);
  528|  26.7k|  finish_token(parser, output);
  529|  26.7k|  return EMIT_TOKEN;
  530|  26.7k|}
tokenizer.c:finish_temporary_buffer:
  360|  55.5k|static void finish_temporary_buffer(GumboParser* parser, const char** output) {
  361|  55.5k|  GumboTokenizerState* tokenizer = parser->_tokenizer_state;
  362|  55.5k|  *output = gumbo_string_buffer_to_string(&tokenizer->_temporary_buffer);
  363|  55.5k|  clear_temporary_buffer(parser);
  364|  55.5k|}
tokenizer.c:handle_markup_declaration_open_state:
 2084|  41.3k|) {
 2085|  41.3k|  if (
 2086|  41.3k|    utf8iterator_maybe_consume_match (
  ------------------
  |  Branch (2086:5): [True: 3.70k, False: 37.6k]
  ------------------
 2087|  41.3k|      &tokenizer->_input,
 2088|  41.3k|      "--",
 2089|  41.3k|      sizeof("--") - 1,
 2090|  41.3k|      /* case sensitive */ true
 2091|  41.3k|    )
 2092|  41.3k|  ) {
 2093|  3.70k|    reconsume_in_state(parser, GUMBO_LEX_COMMENT_START);
 2094|  3.70k|    return CONTINUE;
 2095|  3.70k|  }
 2096|  37.6k|  if (
 2097|  37.6k|    utf8iterator_maybe_consume_match (
  ------------------
  |  Branch (2097:5): [True: 20.8k, False: 16.7k]
  ------------------
 2098|  37.6k|      &tokenizer->_input,
 2099|  37.6k|      "DOCTYPE",
 2100|  37.6k|      sizeof("DOCTYPE") - 1,
 2101|  37.6k|      /* case sensitive */ false
 2102|  37.6k|    )
 2103|  37.6k|  ) {
 2104|  20.8k|    reconsume_in_state(parser, GUMBO_LEX_DOCTYPE);
 2105|       |    // If we get here, we know we'll eventually emit a doctype token, so now is
 2106|       |    // the time to initialize the doctype strings. (Not in doctype_state_init,
 2107|       |    // since then they'll leak if ownership never gets transferred to the
 2108|       |    // doctype token.
 2109|  20.8k|    tokenizer->_doc_type_state.name = gumbo_strdup("");
 2110|  20.8k|    tokenizer->_doc_type_state.public_identifier = gumbo_strdup("");
 2111|  20.8k|    tokenizer->_doc_type_state.system_identifier = gumbo_strdup("");
 2112|  20.8k|    return CONTINUE;
 2113|  20.8k|  }
 2114|  16.7k|  if (
 2115|  16.7k|    utf8iterator_maybe_consume_match (
  ------------------
  |  Branch (2115:5): [True: 783, False: 15.9k]
  ------------------
 2116|  16.7k|      &tokenizer->_input,
 2117|  16.7k|      "[CDATA[", sizeof("[CDATA[") - 1,
 2118|  16.7k|      /* case sensitive */ true
 2119|  16.7k|    )
 2120|  16.7k|  ) {
 2121|    783|    if (tokenizer->_is_adjusted_current_node_foreign) {
  ------------------
  |  Branch (2121:9): [True: 517, False: 266]
  ------------------
 2122|    517|      reconsume_in_state(parser, GUMBO_LEX_CDATA_SECTION);
 2123|    517|      tokenizer->_is_in_cdata = true;
 2124|       |      // Start the token after the <![CDATA[.
 2125|    517|      reset_token_start_point(tokenizer);
 2126|    517|    } else {
 2127|    266|      tokenizer_add_token_parse_error(parser, GUMBO_ERR_CDATA_IN_HTML_CONTENT);
 2128|    266|      clear_temporary_buffer(parser);
 2129|    266|      append_string_to_temporary_buffer (
 2130|    266|        parser,
 2131|    266|        &(const GumboStringPiece) { .data = "[CDATA[", .length = 7 }
 2132|    266|      );
 2133|    266|      reconsume_in_state(parser, GUMBO_LEX_BOGUS_COMMENT);
 2134|    266|    }
 2135|    783|    return CONTINUE;
 2136|    783|  }
 2137|  15.9k|  tokenizer_add_parse_error(parser, GUMBO_ERR_INCORRECTLY_OPENED_COMMENT);
 2138|  15.9k|  reconsume_in_state(parser, GUMBO_LEX_BOGUS_COMMENT);
 2139|  15.9k|  clear_temporary_buffer(parser);
 2140|  15.9k|  return CONTINUE;
 2141|  16.7k|}
tokenizer.c:append_string_to_temporary_buffer:
  310|  1.98k|) {
  311|  1.98k|  gumbo_string_buffer_append_string (
  312|  1.98k|    str,
  313|  1.98k|    &parser->_tokenizer_state->_temporary_buffer
  314|  1.98k|  );
  315|  1.98k|}
tokenizer.c:handle_comment_start_state:
 2149|  3.70k|) {
 2150|  3.70k|  switch (c) {
 2151|  1.95k|    case '-':
  ------------------
  |  Branch (2151:5): [True: 1.95k, False: 1.75k]
  ------------------
 2152|  1.95k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_COMMENT_START_DASH);
 2153|  1.95k|      return CONTINUE;
 2154|    872|    case '>':
  ------------------
  |  Branch (2154:5): [True: 872, False: 2.83k]
  ------------------
 2155|    872|      tokenizer_add_parse_error(parser, GUMBO_ERR_ABRUPT_CLOSING_OF_EMPTY_COMMENT);
 2156|    872|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2157|    872|      return emit_comment(parser, output);
 2158|    883|    default:
  ------------------
  |  Branch (2158:5): [True: 883, False: 2.82k]
  ------------------
 2159|    883|      reconsume_in_state(parser, GUMBO_LEX_COMMENT);
 2160|    883|      return CONTINUE;
 2161|  3.70k|  }
 2162|  3.70k|}
tokenizer.c:handle_comment_start_dash_state:
 2170|  1.95k|) {
 2171|  1.95k|  switch (c) {
 2172|    782|    case '-':
  ------------------
  |  Branch (2172:5): [True: 782, False: 1.17k]
  ------------------
 2173|    782|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_COMMENT_END);
 2174|    782|      return CONTINUE;
 2175|    733|    case '>':
  ------------------
  |  Branch (2175:5): [True: 733, False: 1.22k]
  ------------------
 2176|    733|      tokenizer_add_parse_error(parser, GUMBO_ERR_ABRUPT_CLOSING_OF_EMPTY_COMMENT);
 2177|    733|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2178|    733|      return emit_comment(parser, output);
 2179|      3|    case -1:
  ------------------
  |  Branch (2179:5): [True: 3, False: 1.95k]
  ------------------
 2180|      3|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_COMMENT);
 2181|       |      // Switch to data to emit the EOF next.
 2182|      3|      reconsume_in_state(parser, GUMBO_LEX_DATA);
 2183|      3|      return emit_comment(parser, output);
 2184|    435|    default:
  ------------------
  |  Branch (2184:5): [True: 435, False: 1.51k]
  ------------------
 2185|    435|      reconsume_in_state(parser, GUMBO_LEX_COMMENT);
 2186|    435|      append_char_to_temporary_buffer(parser, '-');
 2187|    435|      return CONTINUE;
 2188|  1.95k|  }
 2189|  1.95k|}
tokenizer.c:handle_comment_state:
 2197|  22.8k|) {
 2198|  22.8k|  switch (c) {
 2199|  3.27k|    case '<':
  ------------------
  |  Branch (2199:5): [True: 3.27k, False: 19.6k]
  ------------------
 2200|  3.27k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_COMMENT_LT);
 2201|  3.27k|      append_char_to_temporary_buffer(parser, c);
 2202|  3.27k|      return CONTINUE;
 2203|  1.58k|    case '-':
  ------------------
  |  Branch (2203:5): [True: 1.58k, False: 21.3k]
  ------------------
 2204|  1.58k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_COMMENT_END_DASH);
 2205|  1.58k|      return CONTINUE;
 2206|  1.49k|    case '\0':
  ------------------
  |  Branch (2206:5): [True: 1.49k, False: 21.3k]
  ------------------
 2207|  1.49k|      tokenizer_add_parse_error(parser, GUMBO_ERR_UNEXPECTED_NULL_CHARACTER);
 2208|  1.49k|      append_char_to_temporary_buffer(parser, kUtf8ReplacementChar);
  ------------------
  |  |   33|  1.49k|#define kUtf8ReplacementChar 0xFFFD
  ------------------
 2209|  1.49k|      return CONTINUE;
 2210|    277|    case -1:
  ------------------
  |  Branch (2210:5): [True: 277, False: 22.6k]
  ------------------
 2211|    277|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_COMMENT);
 2212|       |      // Switch to data to emit the EOF token next.
 2213|    277|      reconsume_in_state(parser, GUMBO_LEX_DATA);
 2214|    277|      return emit_comment(parser, output);
 2215|  16.2k|    default:
  ------------------
  |  Branch (2215:5): [True: 16.2k, False: 6.62k]
  ------------------
 2216|  16.2k|      append_char_to_temporary_buffer(parser, c);
 2217|  16.2k|      return CONTINUE;
 2218|  22.8k|  }
 2219|  22.8k|}
tokenizer.c:handle_comment_lt_state:
 2227|  3.83k|) {
 2228|  3.83k|  switch (c) {
 2229|  2.38k|  case '!':
  ------------------
  |  Branch (2229:3): [True: 2.38k, False: 1.45k]
  ------------------
 2230|  2.38k|    gumbo_tokenizer_set_state(parser, GUMBO_LEX_COMMENT_LT_BANG);
 2231|  2.38k|    append_char_to_temporary_buffer(parser, c);
 2232|  2.38k|    return CONTINUE;
 2233|    564|  case '<':
  ------------------
  |  Branch (2233:3): [True: 564, False: 3.27k]
  ------------------
 2234|    564|    append_char_to_temporary_buffer(parser, c);
 2235|    564|    return CONTINUE;
 2236|    893|  default:
  ------------------
  |  Branch (2236:3): [True: 893, False: 2.94k]
  ------------------
 2237|    893|    reconsume_in_state(parser, GUMBO_LEX_COMMENT);
 2238|    893|    return CONTINUE;
 2239|  3.83k|  }
 2240|  3.83k|}
tokenizer.c:handle_comment_lt_bang_state:
 2248|  2.38k|) {
 2249|  2.38k|  switch (c) {
 2250|  2.01k|  case '-':
  ------------------
  |  Branch (2250:3): [True: 2.01k, False: 365]
  ------------------
 2251|  2.01k|    gumbo_tokenizer_set_state(parser, GUMBO_LEX_COMMENT_LT_BANG_DASH);
 2252|  2.01k|    return CONTINUE;
 2253|    365|  default:
  ------------------
  |  Branch (2253:3): [True: 365, False: 2.01k]
  ------------------
 2254|    365|    reconsume_in_state(parser, GUMBO_LEX_COMMENT);
 2255|    365|    return CONTINUE;
 2256|  2.38k|  }
 2257|  2.38k|}
tokenizer.c:handle_comment_lt_bang_dash_state:
 2265|  2.01k|) {
 2266|  2.01k|  switch (c) {
 2267|  1.31k|  case '-':
  ------------------
  |  Branch (2267:3): [True: 1.31k, False: 701]
  ------------------
 2268|  1.31k|    gumbo_tokenizer_set_state(parser, GUMBO_LEX_COMMENT_LT_BANG_DASH_DASH);
 2269|  1.31k|    return CONTINUE;
 2270|    701|  default:
  ------------------
  |  Branch (2270:3): [True: 701, False: 1.31k]
  ------------------
 2271|    701|    reconsume_in_state(parser, GUMBO_LEX_COMMENT_END_DASH);
 2272|    701|    return CONTINUE;
 2273|  2.01k|  }
 2274|  2.01k|}
tokenizer.c:handle_comment_lt_bang_dash_dash_state:
 2282|  1.31k|) {
 2283|  1.31k|  switch (c) {
 2284|    349|  case '>':
  ------------------
  |  Branch (2284:3): [True: 349, False: 965]
  ------------------
 2285|    350|  case -1:
  ------------------
  |  Branch (2285:3): [True: 1, False: 1.31k]
  ------------------
 2286|    350|    reconsume_in_state(parser, GUMBO_LEX_COMMENT_END);
 2287|    350|    return CONTINUE;
 2288|    964|  default:
  ------------------
  |  Branch (2288:3): [True: 964, False: 350]
  ------------------
 2289|    964|    tokenizer_add_parse_error(parser, GUMBO_ERR_NESTED_COMMENT);
 2290|    964|    reconsume_in_state(parser, GUMBO_LEX_COMMENT_END);
 2291|    964|    return CONTINUE;
 2292|  1.31k|  }
 2293|  1.31k|}
tokenizer.c:handle_comment_end_dash_state:
 2301|  2.64k|) {
 2302|  2.64k|  switch (c) {
 2303|  1.10k|  case '-':
  ------------------
  |  Branch (2303:3): [True: 1.10k, False: 1.54k]
  ------------------
 2304|  1.10k|    gumbo_tokenizer_set_state(parser, GUMBO_LEX_COMMENT_END);
 2305|  1.10k|    return CONTINUE;
 2306|     17|  case -1:
  ------------------
  |  Branch (2306:3): [True: 17, False: 2.63k]
  ------------------
 2307|     17|    tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_COMMENT);
 2308|       |    // Switch to data to emit EOF next.
 2309|     17|    gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2310|     17|    return emit_comment(parser, output);
 2311|  1.53k|  default:
  ------------------
  |  Branch (2311:3): [True: 1.53k, False: 1.11k]
  ------------------
 2312|  1.53k|    reconsume_in_state(parser, GUMBO_LEX_COMMENT);
 2313|  1.53k|    append_char_to_temporary_buffer(parser, '-');
 2314|  1.53k|    return CONTINUE;
 2315|  2.64k|  }
 2316|  2.64k|}
tokenizer.c:handle_comment_end_state:
 2324|  5.32k|) {
 2325|  5.32k|  switch (c) {
 2326|  1.38k|    case '>':
  ------------------
  |  Branch (2326:5): [True: 1.38k, False: 3.94k]
  ------------------
 2327|  1.38k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2328|  1.38k|      return emit_comment(parser, output);
 2329|  1.03k|    case '!':
  ------------------
  |  Branch (2329:5): [True: 1.03k, False: 4.29k]
  ------------------
 2330|  1.03k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_COMMENT_END_BANG);
 2331|  1.03k|      return CONTINUE;
 2332|  2.13k|    case '-':
  ------------------
  |  Branch (2332:5): [True: 2.13k, False: 3.19k]
  ------------------
 2333|  2.13k|      append_char_to_temporary_buffer(parser, '-');
 2334|  2.13k|      return CONTINUE;
 2335|     24|    case -1:
  ------------------
  |  Branch (2335:5): [True: 24, False: 5.30k]
  ------------------
 2336|     24|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_COMMENT);
 2337|       |      // Switch to data to emit EOF next.
 2338|     24|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2339|     24|      return emit_comment(parser, output);
 2340|    758|    default:
  ------------------
  |  Branch (2340:5): [True: 758, False: 4.57k]
  ------------------
 2341|    758|      reconsume_in_state(parser, GUMBO_LEX_COMMENT);
 2342|    758|      append_char_to_temporary_buffer(parser, '-');
 2343|    758|      append_char_to_temporary_buffer(parser, '-');
 2344|    758|      return CONTINUE;
 2345|  5.32k|  }
 2346|  5.32k|}
tokenizer.c:handle_comment_end_bang_state:
 2354|  1.03k|) {
 2355|  1.03k|  switch (c) {
 2356|    365|    case '-':
  ------------------
  |  Branch (2356:5): [True: 365, False: 671]
  ------------------
 2357|    365|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_COMMENT_END_DASH);
 2358|    365|      append_char_to_temporary_buffer(parser, '-');
 2359|    365|      append_char_to_temporary_buffer(parser, '-');
 2360|    365|      append_char_to_temporary_buffer(parser, '!');
 2361|    365|      return CONTINUE;
 2362|    398|    case '>':
  ------------------
  |  Branch (2362:5): [True: 398, False: 638]
  ------------------
 2363|    398|      tokenizer_add_parse_error(parser, GUMBO_ERR_INCORRECTLY_CLOSED_COMMENT);
 2364|    398|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2365|    398|      return emit_comment(parser, output);
 2366|      4|    case -1:
  ------------------
  |  Branch (2366:5): [True: 4, False: 1.03k]
  ------------------
 2367|      4|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_COMMENT);
 2368|       |      // Switch to data to emit EOF next.
 2369|      4|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2370|      4|      return emit_comment(parser, output);
 2371|    269|    default:
  ------------------
  |  Branch (2371:5): [True: 269, False: 767]
  ------------------
 2372|    269|      reconsume_in_state(parser, GUMBO_LEX_COMMENT);
 2373|    269|      append_char_to_temporary_buffer(parser, '-');
 2374|    269|      append_char_to_temporary_buffer(parser, '-');
 2375|    269|      append_char_to_temporary_buffer(parser, '!');
 2376|    269|      return CONTINUE;
 2377|  1.03k|  }
 2378|  1.03k|}
tokenizer.c:handle_doctype_state:
 2386|  20.8k|) {
 2387|  20.8k|  assert(temporary_buffer_is_empty(parser));
  ------------------
  |  Branch (2387:3): [True: 0, False: 20.8k]
  |  Branch (2387:3): [True: 20.8k, False: 0]
  ------------------
 2388|  20.8k|  switch (c) {
 2389|    579|    case '\t':
  ------------------
  |  Branch (2389:5): [True: 579, False: 20.2k]
  ------------------
 2390|  1.14k|    case '\n':
  ------------------
  |  Branch (2390:5): [True: 567, False: 20.3k]
  ------------------
 2391|  1.61k|    case '\f':
  ------------------
  |  Branch (2391:5): [True: 471, False: 20.3k]
  ------------------
 2392|  2.57k|    case ' ':
  ------------------
  |  Branch (2392:5): [True: 960, False: 19.9k]
  ------------------
 2393|  2.57k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_BEFORE_DOCTYPE_NAME);
 2394|  2.57k|      return CONTINUE;
 2395|    959|    case '>':
  ------------------
  |  Branch (2395:5): [True: 959, False: 19.9k]
  ------------------
 2396|    959|      reconsume_in_state(parser, GUMBO_LEX_BEFORE_DOCTYPE_NAME);
 2397|    959|      return CONTINUE;
 2398|     15|    case -1:
  ------------------
  |  Branch (2398:5): [True: 15, False: 20.8k]
  ------------------
 2399|     15|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_DOCTYPE);
 2400|     15|      tokenizer->_doc_type_state.force_quirks = true;
 2401|       |      // Switch to data to emit EOF next.
 2402|     15|      reconsume_in_state(parser, GUMBO_LEX_DATA);
 2403|     15|      return emit_doctype(parser, output);
 2404|  17.3k|    default:
  ------------------
  |  Branch (2404:5): [True: 17.3k, False: 3.55k]
  ------------------
 2405|  17.3k|      tokenizer_add_parse_error(parser, GUMBO_ERR_MISSING_WHITESPACE_BEFORE_DOCTYPE_NAME);
 2406|  17.3k|      reconsume_in_state(parser, GUMBO_LEX_BEFORE_DOCTYPE_NAME);
 2407|  17.3k|      return CONTINUE;
 2408|  20.8k|  }
 2409|  20.8k|}
tokenizer.c:emit_doctype:
  440|  20.8k|static StateResult emit_doctype(GumboParser* parser, GumboToken* output) {
  441|  20.8k|  output->type = GUMBO_TOKEN_DOCTYPE;
  442|  20.8k|  output->v.doc_type = parser->_tokenizer_state->_doc_type_state;
  443|  20.8k|  finish_token(parser, output);
  444|  20.8k|  doc_type_state_init(parser);
  445|  20.8k|  return EMIT_TOKEN;
  446|  20.8k|}
tokenizer.c:handle_before_doctype_name_state:
 2417|  25.2k|) {
 2418|  25.2k|  switch (c) {
 2419|    500|    case '\t':
  ------------------
  |  Branch (2419:5): [True: 500, False: 24.7k]
  ------------------
 2420|  1.70k|    case '\n':
  ------------------
  |  Branch (2420:5): [True: 1.20k, False: 24.0k]
  ------------------
 2421|  2.95k|    case '\f':
  ------------------
  |  Branch (2421:5): [True: 1.25k, False: 23.9k]
  ------------------
 2422|  4.35k|    case ' ':
  ------------------
  |  Branch (2422:5): [True: 1.39k, False: 23.8k]
  ------------------
 2423|  4.35k|      return CONTINUE;
 2424|    620|    case '\0':
  ------------------
  |  Branch (2424:5): [True: 620, False: 24.5k]
  ------------------
 2425|    620|      tokenizer_add_parse_error(parser, GUMBO_ERR_UNEXPECTED_NULL_CHARACTER);
 2426|    620|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DOCTYPE_NAME);
 2427|    620|      append_char_to_temporary_buffer(parser, kUtf8ReplacementChar);
  ------------------
  |  |   33|    620|#define kUtf8ReplacementChar 0xFFFD
  ------------------
 2428|    620|      return CONTINUE;
 2429|  1.59k|    case '>':
  ------------------
  |  Branch (2429:5): [True: 1.59k, False: 23.6k]
  ------------------
 2430|  1.59k|      tokenizer_add_parse_error(parser, GUMBO_ERR_MISSING_DOCTYPE_NAME);
 2431|  1.59k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2432|  1.59k|      tokenizer->_doc_type_state.force_quirks = true;
 2433|  1.59k|      return emit_doctype(parser, output);
 2434|     35|    case -1:
  ------------------
  |  Branch (2434:5): [True: 35, False: 25.1k]
  ------------------
 2435|     35|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_DOCTYPE);
 2436|     35|      tokenizer->_doc_type_state.force_quirks = true;
 2437|       |      // Switch to data to emit EOF next.
 2438|     35|      reconsume_in_state(parser, GUMBO_LEX_DATA);
 2439|     35|      return emit_doctype(parser, output);
 2440|  18.5k|    default:
  ------------------
  |  Branch (2440:5): [True: 18.5k, False: 6.60k]
  ------------------
 2441|  18.5k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DOCTYPE_NAME);
 2442|  18.5k|      append_char_to_temporary_buffer(parser, ensure_lowercase(c));
 2443|  18.5k|      return CONTINUE;
 2444|  25.2k|  }
 2445|  25.2k|}
tokenizer.c:handle_doctype_name_state:
 2453|  65.4k|) {
 2454|  65.4k|  switch (c) {
 2455|    452|    case '\t':
  ------------------
  |  Branch (2455:5): [True: 452, False: 65.0k]
  ------------------
 2456|  1.14k|    case '\n':
  ------------------
  |  Branch (2456:5): [True: 694, False: 64.7k]
  ------------------
 2457|  3.56k|    case '\f':
  ------------------
  |  Branch (2457:5): [True: 2.42k, False: 63.0k]
  ------------------
 2458|  15.6k|    case ' ':
  ------------------
  |  Branch (2458:5): [True: 12.0k, False: 53.3k]
  ------------------
 2459|  15.6k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_AFTER_DOCTYPE_NAME);
 2460|  15.6k|      gumbo_free((void*) tokenizer->_doc_type_state.name);
 2461|  15.6k|      finish_temporary_buffer(parser, &tokenizer->_doc_type_state.name);
 2462|  15.6k|      return CONTINUE;
 2463|  3.36k|    case '>':
  ------------------
  |  Branch (2463:5): [True: 3.36k, False: 62.1k]
  ------------------
 2464|  3.36k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2465|  3.36k|      gumbo_free((void*) tokenizer->_doc_type_state.name);
 2466|  3.36k|      finish_temporary_buffer(parser, &tokenizer->_doc_type_state.name);
 2467|  3.36k|      return emit_doctype(parser, output);
 2468|  2.62k|    case '\0':
  ------------------
  |  Branch (2468:5): [True: 2.62k, False: 62.8k]
  ------------------
 2469|  2.62k|      tokenizer_add_parse_error(parser, GUMBO_ERR_UNEXPECTED_NULL_CHARACTER);
 2470|  2.62k|      append_char_to_temporary_buffer(parser, kUtf8ReplacementChar);
  ------------------
  |  |   33|  2.62k|#define kUtf8ReplacementChar 0xFFFD
  ------------------
 2471|  2.62k|      return CONTINUE;
 2472|    194|    case -1:
  ------------------
  |  Branch (2472:5): [True: 194, False: 65.2k]
  ------------------
 2473|    194|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_DOCTYPE);
 2474|    194|      reconsume_in_state(parser, GUMBO_LEX_DATA);
 2475|    194|      tokenizer->_doc_type_state.force_quirks = true;
 2476|    194|      gumbo_free((void*) tokenizer->_doc_type_state.name);
 2477|    194|      finish_temporary_buffer(parser, &tokenizer->_doc_type_state.name);
 2478|    194|      return emit_doctype(parser, output);
 2479|  43.6k|    default:
  ------------------
  |  Branch (2479:5): [True: 43.6k, False: 21.8k]
  ------------------
 2480|  43.6k|      append_char_to_temporary_buffer(parser, ensure_lowercase(c));
 2481|  43.6k|      return CONTINUE;
 2482|  65.4k|  }
 2483|  65.4k|}
tokenizer.c:handle_after_doctype_name_state:
 2491|  20.3k|) {
 2492|  20.3k|  switch (c) {
 2493|    429|    case '\t':
  ------------------
  |  Branch (2493:5): [True: 429, False: 19.9k]
  ------------------
 2494|  2.19k|    case '\n':
  ------------------
  |  Branch (2494:5): [True: 1.76k, False: 18.6k]
  ------------------
 2495|  4.43k|    case '\f':
  ------------------
  |  Branch (2495:5): [True: 2.24k, False: 18.1k]
  ------------------
 2496|  4.71k|    case ' ':
  ------------------
  |  Branch (2496:5): [True: 279, False: 20.1k]
  ------------------
 2497|  4.71k|      return CONTINUE;
 2498|    744|    case '>':
  ------------------
  |  Branch (2498:5): [True: 744, False: 19.6k]
  ------------------
 2499|    744|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2500|    744|      return emit_doctype(parser, output);
 2501|     36|    case -1:
  ------------------
  |  Branch (2501:5): [True: 36, False: 20.3k]
  ------------------
 2502|     36|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_DOCTYPE);
 2503|     36|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2504|     36|      tokenizer->_doc_type_state.force_quirks = true;
 2505|     36|      return emit_doctype(parser, output);
 2506|  14.8k|    default:
  ------------------
  |  Branch (2506:5): [True: 14.8k, False: 5.49k]
  ------------------
 2507|  14.8k|      if (utf8iterator_maybe_consume_match(
  ------------------
  |  Branch (2507:11): [True: 6.73k, False: 8.14k]
  ------------------
 2508|  14.8k|              &tokenizer->_input, "PUBLIC", sizeof("PUBLIC") - 1, false)) {
 2509|  6.73k|        reconsume_in_state(parser, GUMBO_LEX_AFTER_DOCTYPE_PUBLIC_KEYWORD);
 2510|  8.14k|      } else if (utf8iterator_maybe_consume_match(&tokenizer->_input, "SYSTEM",
  ------------------
  |  Branch (2510:18): [True: 5.70k, False: 2.44k]
  ------------------
 2511|  8.14k|                     sizeof("SYSTEM") - 1, false)) {
 2512|  5.70k|        reconsume_in_state(parser, GUMBO_LEX_AFTER_DOCTYPE_SYSTEM_KEYWORD);
 2513|  5.70k|      } else {
 2514|  2.44k|        tokenizer_add_parse_error(
 2515|  2.44k|            parser, GUMBO_ERR_INVALID_CHARACTER_SEQUENCE_AFTER_DOCTYPE_NAME);
 2516|  2.44k|        reconsume_in_state(parser, GUMBO_LEX_BOGUS_DOCTYPE);
 2517|       |        tokenizer->_doc_type_state.force_quirks = true;
 2518|  2.44k|      }
 2519|  14.8k|      return CONTINUE;
 2520|  20.3k|  }
 2521|  20.3k|}
tokenizer.c:handle_after_doctype_public_keyword_state:
 2529|  6.73k|) {
 2530|  6.73k|  switch (c) {
 2531|    763|    case '\t':
  ------------------
  |  Branch (2531:5): [True: 763, False: 5.97k]
  ------------------
 2532|  1.48k|    case '\n':
  ------------------
  |  Branch (2532:5): [True: 719, False: 6.01k]
  ------------------
 2533|  1.71k|    case '\f':
  ------------------
  |  Branch (2533:5): [True: 234, False: 6.50k]
  ------------------
 2534|  2.70k|    case ' ':
  ------------------
  |  Branch (2534:5): [True: 984, False: 5.75k]
  ------------------
 2535|  2.70k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_BEFORE_DOCTYPE_PUBLIC_ID);
 2536|  2.70k|      return CONTINUE;
 2537|  1.00k|    case '"':
  ------------------
  |  Branch (2537:5): [True: 1.00k, False: 5.73k]
  ------------------
 2538|  1.00k|      tokenizer_add_parse_error(parser, GUMBO_ERR_MISSING_WHITESPACE_AFTER_DOCTYPE_PUBLIC_KEYWORD);
 2539|  1.00k|      assert(temporary_buffer_is_empty(parser));
  ------------------
  |  Branch (2539:7): [True: 0, False: 1.00k]
  |  Branch (2539:7): [True: 1.00k, False: 0]
  ------------------
 2540|  1.00k|      gumbo_tokenizer_set_state(
 2541|  1.00k|          parser, GUMBO_LEX_DOCTYPE_PUBLIC_ID_DOUBLE_QUOTED);
 2542|  1.00k|      return CONTINUE;
 2543|  2.21k|    case '\'':
  ------------------
  |  Branch (2543:5): [True: 2.21k, False: 4.52k]
  ------------------
 2544|  2.21k|      tokenizer_add_parse_error(parser, GUMBO_ERR_MISSING_WHITESPACE_AFTER_DOCTYPE_PUBLIC_KEYWORD);
 2545|  2.21k|      assert(temporary_buffer_is_empty(parser));
  ------------------
  |  Branch (2545:7): [True: 0, False: 2.21k]
  |  Branch (2545:7): [True: 2.21k, False: 0]
  ------------------
 2546|  2.21k|      gumbo_tokenizer_set_state(
 2547|  2.21k|          parser, GUMBO_LEX_DOCTYPE_PUBLIC_ID_SINGLE_QUOTED);
 2548|  2.21k|      return CONTINUE;
 2549|    417|    case '>':
  ------------------
  |  Branch (2549:5): [True: 417, False: 6.32k]
  ------------------
 2550|    417|      tokenizer_add_parse_error(parser, GUMBO_ERR_MISSING_DOCTYPE_PUBLIC_IDENTIFIER);
 2551|    417|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2552|    417|      tokenizer->_doc_type_state.force_quirks = true;
 2553|    417|      return emit_doctype(parser, output);
 2554|      3|    case -1:
  ------------------
  |  Branch (2554:5): [True: 3, False: 6.73k]
  ------------------
 2555|      3|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_DOCTYPE);
 2556|      3|      reconsume_in_state(parser, GUMBO_LEX_DATA);
 2557|      3|      tokenizer->_doc_type_state.force_quirks = true;
 2558|      3|      return emit_doctype(parser, output);
 2559|    404|    default:
  ------------------
  |  Branch (2559:5): [True: 404, False: 6.33k]
  ------------------
 2560|    404|      tokenizer_add_parse_error(parser, GUMBO_ERR_MISSING_QUOTE_BEFORE_DOCTYPE_PUBLIC_IDENTIFIER);
 2561|    404|      reconsume_in_state(parser, GUMBO_LEX_BOGUS_DOCTYPE);
 2562|       |      tokenizer->_doc_type_state.force_quirks = true;
 2563|    404|      return CONTINUE;
 2564|  6.73k|  }
 2565|  6.73k|}
tokenizer.c:handle_before_doctype_public_id_state:
 2573|  9.02k|) {
 2574|  9.02k|  switch (c) {
 2575|  1.67k|    case '\t':
  ------------------
  |  Branch (2575:5): [True: 1.67k, False: 7.35k]
  ------------------
 2576|  2.32k|    case '\n':
  ------------------
  |  Branch (2576:5): [True: 654, False: 8.37k]
  ------------------
 2577|  5.04k|    case '\f':
  ------------------
  |  Branch (2577:5): [True: 2.71k, False: 6.30k]
  ------------------
 2578|  6.32k|    case ' ':
  ------------------
  |  Branch (2578:5): [True: 1.28k, False: 7.74k]
  ------------------
 2579|  6.32k|      return CONTINUE;
 2580|  1.11k|    case '"':
  ------------------
  |  Branch (2580:5): [True: 1.11k, False: 7.90k]
  ------------------
 2581|  1.11k|      assert(temporary_buffer_is_empty(parser));
  ------------------
  |  Branch (2581:7): [True: 0, False: 1.11k]
  |  Branch (2581:7): [True: 1.11k, False: 0]
  ------------------
 2582|  1.11k|      gumbo_tokenizer_set_state(
 2583|  1.11k|          parser, GUMBO_LEX_DOCTYPE_PUBLIC_ID_DOUBLE_QUOTED);
 2584|  1.11k|      return CONTINUE;
 2585|    449|    case '\'':
  ------------------
  |  Branch (2585:5): [True: 449, False: 8.57k]
  ------------------
 2586|    449|      assert(temporary_buffer_is_empty(parser));
  ------------------
  |  Branch (2586:7): [True: 0, False: 449]
  |  Branch (2586:7): [True: 449, False: 0]
  ------------------
 2587|    449|      gumbo_tokenizer_set_state(
 2588|    449|          parser, GUMBO_LEX_DOCTYPE_PUBLIC_ID_SINGLE_QUOTED);
 2589|    449|      return CONTINUE;
 2590|    460|    case '>':
  ------------------
  |  Branch (2590:5): [True: 460, False: 8.56k]
  ------------------
 2591|    460|      tokenizer_add_parse_error(parser, GUMBO_ERR_MISSING_DOCTYPE_PUBLIC_IDENTIFIER);
 2592|    460|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2593|    460|      tokenizer->_doc_type_state.force_quirks = true;
 2594|    460|      return emit_doctype(parser, output);
 2595|     13|    case -1:
  ------------------
  |  Branch (2595:5): [True: 13, False: 9.01k]
  ------------------
 2596|     13|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_DOCTYPE);
 2597|     13|      reconsume_in_state(parser, GUMBO_LEX_DATA);
 2598|     13|      tokenizer->_doc_type_state.force_quirks = true;
 2599|     13|      return emit_doctype(parser, output);
 2600|    660|    default:
  ------------------
  |  Branch (2600:5): [True: 660, False: 8.36k]
  ------------------
 2601|    660|      tokenizer_add_parse_error(parser, GUMBO_ERR_MISSING_QUOTE_BEFORE_DOCTYPE_PUBLIC_IDENTIFIER);
 2602|    660|      reconsume_in_state(parser, GUMBO_LEX_BOGUS_DOCTYPE);
 2603|       |      tokenizer->_doc_type_state.force_quirks = true;
 2604|    660|      return CONTINUE;
 2605|  9.02k|  }
 2606|  9.02k|}
tokenizer.c:handle_doctype_public_id_double_quoted_state:
 2614|   113k|) {
 2615|   113k|  switch (c) {
 2616|  1.50k|    case '"':
  ------------------
  |  Branch (2616:5): [True: 1.50k, False: 111k]
  ------------------
 2617|  1.50k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_AFTER_DOCTYPE_PUBLIC_ID);
 2618|  1.50k|      finish_doctype_public_id(parser);
 2619|  1.50k|      return CONTINUE;
 2620|  39.4k|    case '\0':
  ------------------
  |  Branch (2620:5): [True: 39.4k, False: 73.7k]
  ------------------
 2621|  39.4k|      tokenizer_add_parse_error(parser, GUMBO_ERR_UNEXPECTED_NULL_CHARACTER);
 2622|  39.4k|      append_char_to_temporary_buffer(parser, kUtf8ReplacementChar);
  ------------------
  |  |   33|  39.4k|#define kUtf8ReplacementChar 0xFFFD
  ------------------
 2623|  39.4k|      return CONTINUE;
 2624|    569|    case '>':
  ------------------
  |  Branch (2624:5): [True: 569, False: 112k]
  ------------------
 2625|    569|      tokenizer_add_parse_error(parser, GUMBO_ERR_ABRUPT_DOCTYPE_PUBLIC_IDENTIFIER);
 2626|    569|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2627|    569|      tokenizer->_doc_type_state.force_quirks = true;
 2628|    569|      finish_doctype_public_id(parser);
 2629|    569|      return emit_doctype(parser, output);
 2630|     44|    case -1:
  ------------------
  |  Branch (2630:5): [True: 44, False: 113k]
  ------------------
 2631|     44|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_DOCTYPE);
 2632|     44|      reconsume_in_state(parser, GUMBO_LEX_DATA);
 2633|     44|      tokenizer->_doc_type_state.force_quirks = true;
 2634|     44|      finish_doctype_public_id(parser);
 2635|     44|      return emit_doctype(parser, output);
 2636|  71.6k|    default:
  ------------------
  |  Branch (2636:5): [True: 71.6k, False: 41.5k]
  ------------------
 2637|  71.6k|      append_char_to_temporary_buffer(parser, c);
 2638|  71.6k|      return CONTINUE;
 2639|   113k|  }
 2640|   113k|}
tokenizer.c:finish_doctype_public_id:
  398|  4.78k|static void finish_doctype_public_id(GumboParser* parser) {
  399|  4.78k|  GumboTokenDocType* doc_type_state =
  400|  4.78k|      &parser->_tokenizer_state->_doc_type_state;
  401|  4.78k|  gumbo_free((void*) doc_type_state->public_identifier);
  402|  4.78k|  finish_temporary_buffer(parser, &doc_type_state->public_identifier);
  403|       |  doc_type_state->has_public_identifier = true;
  404|  4.78k|}
tokenizer.c:handle_doctype_public_id_single_quoted_state:
 2648|  16.9k|) {
 2649|  16.9k|  switch (c) {
 2650|  1.97k|    case '\'':
  ------------------
  |  Branch (2650:5): [True: 1.97k, False: 14.9k]
  ------------------
 2651|  1.97k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_AFTER_DOCTYPE_PUBLIC_ID);
 2652|  1.97k|      finish_doctype_public_id(parser);
 2653|  1.97k|      return CONTINUE;
 2654|  3.33k|    case '\0':
  ------------------
  |  Branch (2654:5): [True: 3.33k, False: 13.6k]
  ------------------
 2655|  3.33k|      tokenizer_add_parse_error(parser, GUMBO_ERR_UNEXPECTED_NULL_CHARACTER);
 2656|  3.33k|      append_char_to_temporary_buffer(parser, kUtf8ReplacementChar);
  ------------------
  |  |   33|  3.33k|#define kUtf8ReplacementChar 0xFFFD
  ------------------
 2657|  3.33k|      return CONTINUE;
 2658|    641|    case '>':
  ------------------
  |  Branch (2658:5): [True: 641, False: 16.3k]
  ------------------
 2659|    641|      tokenizer_add_parse_error(parser, GUMBO_ERR_ABRUPT_DOCTYPE_PUBLIC_IDENTIFIER);
 2660|    641|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2661|    641|      tokenizer->_doc_type_state.force_quirks = true;
 2662|    641|      finish_doctype_public_id(parser);
 2663|    641|      return emit_doctype(parser, output);
 2664|     47|    case -1:
  ------------------
  |  Branch (2664:5): [True: 47, False: 16.8k]
  ------------------
 2665|     47|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_DOCTYPE);
 2666|     47|      reconsume_in_state(parser, GUMBO_LEX_DATA);
 2667|     47|      tokenizer->_doc_type_state.force_quirks = true;
 2668|     47|      finish_doctype_public_id(parser);
 2669|     47|      return emit_doctype(parser, output);
 2670|  10.9k|    default:
  ------------------
  |  Branch (2670:5): [True: 10.9k, False: 5.99k]
  ------------------
 2671|  10.9k|      append_char_to_temporary_buffer(parser, c);
 2672|  10.9k|      return CONTINUE;
 2673|  16.9k|  }
 2674|  16.9k|}
tokenizer.c:handle_after_doctype_public_id_state:
 2682|  3.47k|) {
 2683|  3.47k|  switch (c) {
 2684|    507|    case '\t':
  ------------------
  |  Branch (2684:5): [True: 507, False: 2.97k]
  ------------------
 2685|    726|    case '\n':
  ------------------
  |  Branch (2685:5): [True: 219, False: 3.26k]
  ------------------
 2686|  1.33k|    case '\f':
  ------------------
  |  Branch (2686:5): [True: 605, False: 2.87k]
  ------------------
 2687|  1.55k|    case ' ':
  ------------------
  |  Branch (2687:5): [True: 223, False: 3.25k]
  ------------------
 2688|  1.55k|      gumbo_tokenizer_set_state(
 2689|  1.55k|          parser, GUMBO_LEX_BETWEEN_DOCTYPE_PUBLIC_SYSTEM_ID);
 2690|  1.55k|      return CONTINUE;
 2691|    342|    case '>':
  ------------------
  |  Branch (2691:5): [True: 342, False: 3.13k]
  ------------------
 2692|    342|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2693|    342|      return emit_doctype(parser, output);
 2694|    542|    case '"':
  ------------------
  |  Branch (2694:5): [True: 542, False: 2.93k]
  ------------------
 2695|    542|      tokenizer_add_parse_error (
 2696|    542|        parser,
 2697|    542|        GUMBO_ERR_MISSING_WHITESPACE_BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS
 2698|    542|      );
 2699|    542|      assert(temporary_buffer_is_empty(parser));
  ------------------
  |  Branch (2699:7): [True: 0, False: 542]
  |  Branch (2699:7): [True: 542, False: 0]
  ------------------
 2700|    542|      gumbo_tokenizer_set_state(
 2701|    542|          parser, GUMBO_LEX_DOCTYPE_SYSTEM_ID_DOUBLE_QUOTED);
 2702|    542|      return CONTINUE;
 2703|    679|    case '\'':
  ------------------
  |  Branch (2703:5): [True: 679, False: 2.80k]
  ------------------
 2704|    679|      tokenizer_add_parse_error (
 2705|    679|        parser,
 2706|    679|        GUMBO_ERR_MISSING_WHITESPACE_BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS
 2707|    679|      );
 2708|    679|      assert(temporary_buffer_is_empty(parser));
  ------------------
  |  Branch (2708:7): [True: 0, False: 679]
  |  Branch (2708:7): [True: 679, False: 0]
  ------------------
 2709|    679|      gumbo_tokenizer_set_state(
 2710|    679|          parser, GUMBO_LEX_DOCTYPE_SYSTEM_ID_SINGLE_QUOTED);
 2711|    679|      return CONTINUE;
 2712|      6|    case -1:
  ------------------
  |  Branch (2712:5): [True: 6, False: 3.47k]
  ------------------
 2713|      6|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_DOCTYPE);
 2714|      6|      reconsume_in_state(parser, GUMBO_LEX_DATA);
 2715|      6|      tokenizer->_doc_type_state.force_quirks = true;
 2716|      6|      return emit_doctype(parser, output);
 2717|    356|    default:
  ------------------
  |  Branch (2717:5): [True: 356, False: 3.12k]
  ------------------
 2718|    356|      tokenizer_add_parse_error(parser, GUMBO_ERR_MISSING_QUOTE_BEFORE_DOCTYPE_SYSTEM_IDENTIFIER);
 2719|    356|      reconsume_in_state(parser, GUMBO_LEX_BOGUS_DOCTYPE);
 2720|       |      tokenizer->_doc_type_state.force_quirks = true;
 2721|    356|      return CONTINUE;
 2722|  3.47k|  }
 2723|  3.47k|}
tokenizer.c:handle_between_doctype_public_system_id_state:
 2731|  5.45k|) {
 2732|  5.45k|  switch (c) {
 2733|    990|    case '\t':
  ------------------
  |  Branch (2733:5): [True: 990, False: 4.46k]
  ------------------
 2734|  1.70k|    case '\n':
  ------------------
  |  Branch (2734:5): [True: 717, False: 4.74k]
  ------------------
 2735|  2.57k|    case '\f':
  ------------------
  |  Branch (2735:5): [True: 871, False: 4.58k]
  ------------------
 2736|  3.90k|    case ' ':
  ------------------
  |  Branch (2736:5): [True: 1.32k, False: 4.13k]
  ------------------
 2737|  3.90k|      return CONTINUE;
 2738|    552|    case '>':
  ------------------
  |  Branch (2738:5): [True: 552, False: 4.90k]
  ------------------
 2739|    552|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2740|    552|      return emit_doctype(parser, output);
 2741|    267|    case '"':
  ------------------
  |  Branch (2741:5): [True: 267, False: 5.19k]
  ------------------
 2742|    267|      assert(temporary_buffer_is_empty(parser));
  ------------------
  |  Branch (2742:7): [True: 0, False: 267]
  |  Branch (2742:7): [True: 267, False: 0]
  ------------------
 2743|    267|      gumbo_tokenizer_set_state(
 2744|    267|          parser, GUMBO_LEX_DOCTYPE_SYSTEM_ID_DOUBLE_QUOTED);
 2745|    267|      return CONTINUE;
 2746|    211|    case '\'':
  ------------------
  |  Branch (2746:5): [True: 211, False: 5.24k]
  ------------------
 2747|    211|      assert(temporary_buffer_is_empty(parser));
  ------------------
  |  Branch (2747:7): [True: 0, False: 211]
  |  Branch (2747:7): [True: 211, False: 0]
  ------------------
 2748|    211|      gumbo_tokenizer_set_state(
 2749|    211|          parser, GUMBO_LEX_DOCTYPE_SYSTEM_ID_SINGLE_QUOTED);
 2750|    211|      return CONTINUE;
 2751|     14|    case -1:
  ------------------
  |  Branch (2751:5): [True: 14, False: 5.44k]
  ------------------
 2752|     14|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_DOCTYPE);
 2753|     14|      reconsume_in_state(parser, GUMBO_LEX_DATA);
 2754|     14|      tokenizer->_doc_type_state.force_quirks = true;
 2755|     14|      return emit_doctype(parser, output);
 2756|    510|    default:
  ------------------
  |  Branch (2756:5): [True: 510, False: 4.94k]
  ------------------
 2757|    510|      tokenizer_add_parse_error(parser, GUMBO_ERR_MISSING_QUOTE_BEFORE_DOCTYPE_SYSTEM_IDENTIFIER);
 2758|    510|      reconsume_in_state(parser, GUMBO_LEX_BOGUS_DOCTYPE);
 2759|       |      tokenizer->_doc_type_state.force_quirks = true;
 2760|    510|      return CONTINUE;
 2761|  5.45k|  }
 2762|  5.45k|}
tokenizer.c:handle_after_doctype_system_keyword_state:
 2770|  5.70k|) {
 2771|  5.70k|  switch (c) {
 2772|    341|    case '\t':
  ------------------
  |  Branch (2772:5): [True: 341, False: 5.36k]
  ------------------
 2773|    782|    case '\n':
  ------------------
  |  Branch (2773:5): [True: 441, False: 5.26k]
  ------------------
 2774|    999|    case '\f':
  ------------------
  |  Branch (2774:5): [True: 217, False: 5.48k]
  ------------------
 2775|  3.23k|    case ' ':
  ------------------
  |  Branch (2775:5): [True: 2.23k, False: 3.46k]
  ------------------
 2776|  3.23k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_BEFORE_DOCTYPE_SYSTEM_ID);
 2777|  3.23k|      return CONTINUE;
 2778|    421|    case '"':
  ------------------
  |  Branch (2778:5): [True: 421, False: 5.28k]
  ------------------
 2779|    421|      tokenizer_add_parse_error(parser, GUMBO_ERR_MISSING_WHITESPACE_AFTER_DOCTYPE_SYSTEM_KEYWORD);
 2780|    421|      assert(temporary_buffer_is_empty(parser));
  ------------------
  |  Branch (2780:7): [True: 0, False: 421]
  |  Branch (2780:7): [True: 421, False: 0]
  ------------------
 2781|    421|      gumbo_tokenizer_set_state(
 2782|    421|          parser, GUMBO_LEX_DOCTYPE_SYSTEM_ID_DOUBLE_QUOTED);
 2783|    421|      return CONTINUE;
 2784|    990|    case '\'':
  ------------------
  |  Branch (2784:5): [True: 990, False: 4.71k]
  ------------------
 2785|    990|      tokenizer_add_parse_error(parser, GUMBO_ERR_MISSING_WHITESPACE_AFTER_DOCTYPE_SYSTEM_KEYWORD);
 2786|    990|      assert(temporary_buffer_is_empty(parser));
  ------------------
  |  Branch (2786:7): [True: 0, False: 990]
  |  Branch (2786:7): [True: 990, False: 0]
  ------------------
 2787|    990|      gumbo_tokenizer_set_state(
 2788|    990|          parser, GUMBO_LEX_DOCTYPE_SYSTEM_ID_SINGLE_QUOTED);
 2789|    990|      return CONTINUE;
 2790|    663|    case '>':
  ------------------
  |  Branch (2790:5): [True: 663, False: 5.04k]
  ------------------
 2791|    663|      tokenizer_add_parse_error(parser, GUMBO_ERR_MISSING_DOCTYPE_SYSTEM_IDENTIFIER);
 2792|    663|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2793|    663|      tokenizer->_doc_type_state.force_quirks = true;
 2794|    663|      return emit_doctype(parser, output);
 2795|      2|    case -1:
  ------------------
  |  Branch (2795:5): [True: 2, False: 5.70k]
  ------------------
 2796|      2|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_DOCTYPE);
 2797|      2|      reconsume_in_state(parser, GUMBO_LEX_DATA);
 2798|      2|      tokenizer->_doc_type_state.force_quirks = true;
 2799|      2|      return emit_doctype(parser, output);
 2800|    390|    default:
  ------------------
  |  Branch (2800:5): [True: 390, False: 5.31k]
  ------------------
 2801|    390|      tokenizer_add_parse_error(parser, GUMBO_ERR_MISSING_QUOTE_BEFORE_DOCTYPE_SYSTEM_IDENTIFIER);
 2802|    390|      reconsume_in_state(parser, GUMBO_LEX_BOGUS_DOCTYPE);
 2803|       |      tokenizer->_doc_type_state.force_quirks = true;
 2804|    390|      return CONTINUE;
 2805|  5.70k|  }
 2806|  5.70k|}
tokenizer.c:handle_before_doctype_system_id_state:
 2814|  5.63k|) {
 2815|  5.63k|  switch (c) {
 2816|  1.29k|    case '\t':
  ------------------
  |  Branch (2816:5): [True: 1.29k, False: 4.34k]
  ------------------
 2817|  1.55k|    case '\n':
  ------------------
  |  Branch (2817:5): [True: 265, False: 5.37k]
  ------------------
 2818|  2.00k|    case '\f':
  ------------------
  |  Branch (2818:5): [True: 449, False: 5.18k]
  ------------------
 2819|  2.40k|    case ' ':
  ------------------
  |  Branch (2819:5): [True: 396, False: 5.24k]
  ------------------
 2820|  2.40k|      return CONTINUE;
 2821|  1.21k|    case '"':
  ------------------
  |  Branch (2821:5): [True: 1.21k, False: 4.42k]
  ------------------
 2822|  1.21k|      assert(temporary_buffer_is_empty(parser));
  ------------------
  |  Branch (2822:7): [True: 0, False: 1.21k]
  |  Branch (2822:7): [True: 1.21k, False: 0]
  ------------------
 2823|  1.21k|      gumbo_tokenizer_set_state(
 2824|  1.21k|          parser, GUMBO_LEX_DOCTYPE_SYSTEM_ID_DOUBLE_QUOTED);
 2825|  1.21k|      return CONTINUE;
 2826|    486|    case '\'':
  ------------------
  |  Branch (2826:5): [True: 486, False: 5.15k]
  ------------------
 2827|    486|      assert(temporary_buffer_is_empty(parser));
  ------------------
  |  Branch (2827:7): [True: 0, False: 486]
  |  Branch (2827:7): [True: 486, False: 0]
  ------------------
 2828|    486|      gumbo_tokenizer_set_state(
 2829|    486|          parser, GUMBO_LEX_DOCTYPE_SYSTEM_ID_SINGLE_QUOTED);
 2830|    486|      return CONTINUE;
 2831|    833|    case '>':
  ------------------
  |  Branch (2831:5): [True: 833, False: 4.80k]
  ------------------
 2832|    833|      tokenizer_add_parse_error(parser, GUMBO_ERR_MISSING_DOCTYPE_SYSTEM_IDENTIFIER);
 2833|    833|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2834|    833|      tokenizer->_doc_type_state.force_quirks = true;
 2835|    833|      return emit_doctype(parser, output);
 2836|     22|    case -1:
  ------------------
  |  Branch (2836:5): [True: 22, False: 5.61k]
  ------------------
 2837|     22|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_DOCTYPE);
 2838|     22|      reconsume_in_state(parser, GUMBO_LEX_DATA);
 2839|     22|      tokenizer->_doc_type_state.force_quirks = true;
 2840|     22|      return emit_doctype(parser, output);
 2841|    686|    default:
  ------------------
  |  Branch (2841:5): [True: 686, False: 4.95k]
  ------------------
 2842|    686|      tokenizer_add_parse_error(parser, GUMBO_ERR_MISSING_QUOTE_BEFORE_DOCTYPE_SYSTEM_IDENTIFIER);
 2843|    686|      reconsume_in_state(parser, GUMBO_LEX_BOGUS_DOCTYPE);
 2844|       |      tokenizer->_doc_type_state.force_quirks = true;
 2845|    686|      return CONTINUE;
 2846|  5.63k|  }
 2847|  5.63k|}
tokenizer.c:handle_doctype_system_id_double_quoted_state:
 2855|  17.6k|) {
 2856|  17.6k|  switch (c) {
 2857|  1.13k|    case '"':
  ------------------
  |  Branch (2857:5): [True: 1.13k, False: 16.5k]
  ------------------
 2858|  1.13k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_AFTER_DOCTYPE_SYSTEM_ID);
 2859|  1.13k|      finish_doctype_system_id(parser);
 2860|  1.13k|      return CONTINUE;
 2861|    815|    case '\0':
  ------------------
  |  Branch (2861:5): [True: 815, False: 16.8k]
  ------------------
 2862|    815|      tokenizer_add_parse_error(parser, GUMBO_ERR_UNEXPECTED_NULL_CHARACTER);
 2863|    815|      append_char_to_temporary_buffer(parser, kUtf8ReplacementChar);
  ------------------
  |  |   33|    815|#define kUtf8ReplacementChar 0xFFFD
  ------------------
 2864|    815|      return CONTINUE;
 2865|  1.26k|    case '>':
  ------------------
  |  Branch (2865:5): [True: 1.26k, False: 16.4k]
  ------------------
 2866|  1.26k|      tokenizer_add_parse_error(parser, GUMBO_ERR_ABRUPT_DOCTYPE_SYSTEM_IDENTIFIER);
 2867|  1.26k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2868|  1.26k|      tokenizer->_doc_type_state.force_quirks = true;
 2869|  1.26k|      finish_doctype_system_id(parser);
 2870|  1.26k|      return emit_doctype(parser, output);
 2871|     48|    case -1:
  ------------------
  |  Branch (2871:5): [True: 48, False: 17.6k]
  ------------------
 2872|     48|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_DOCTYPE);
 2873|     48|      reconsume_in_state(parser, GUMBO_LEX_DATA);
 2874|     48|      tokenizer->_doc_type_state.force_quirks = true;
 2875|     48|      finish_doctype_system_id(parser);
 2876|     48|      return emit_doctype(parser, output);
 2877|  14.4k|    default:
  ------------------
  |  Branch (2877:5): [True: 14.4k, False: 3.25k]
  ------------------
 2878|  14.4k|      append_char_to_temporary_buffer(parser, c);
 2879|  14.4k|      return CONTINUE;
 2880|  17.6k|  }
 2881|  17.6k|}
tokenizer.c:finish_doctype_system_id:
  408|  4.80k|static void finish_doctype_system_id(GumboParser* parser) {
  409|  4.80k|  GumboTokenDocType* doc_type_state =
  410|  4.80k|      &parser->_tokenizer_state->_doc_type_state;
  411|  4.80k|  gumbo_free((void*) doc_type_state->system_identifier);
  412|  4.80k|  finish_temporary_buffer(parser, &doc_type_state->system_identifier);
  413|       |  doc_type_state->has_system_identifier = true;
  414|  4.80k|}
tokenizer.c:handle_doctype_system_id_single_quoted_state:
 2889|  46.4k|) {
 2890|  46.4k|  switch (c) {
 2891|  1.35k|    case '\'':
  ------------------
  |  Branch (2891:5): [True: 1.35k, False: 45.1k]
  ------------------
 2892|  1.35k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_AFTER_DOCTYPE_SYSTEM_ID);
 2893|  1.35k|      finish_doctype_system_id(parser);
 2894|  1.35k|      return CONTINUE;
 2895|  11.0k|    case '\0':
  ------------------
  |  Branch (2895:5): [True: 11.0k, False: 35.3k]
  ------------------
 2896|  11.0k|      tokenizer_add_parse_error(parser, GUMBO_ERR_UNEXPECTED_NULL_CHARACTER);
 2897|  11.0k|      append_char_to_temporary_buffer(parser, kUtf8ReplacementChar);
  ------------------
  |  |   33|  11.0k|#define kUtf8ReplacementChar 0xFFFD
  ------------------
 2898|  11.0k|      return CONTINUE;
 2899|    857|    case '>':
  ------------------
  |  Branch (2899:5): [True: 857, False: 45.6k]
  ------------------
 2900|    857|      tokenizer_add_parse_error(parser, GUMBO_ERR_ABRUPT_DOCTYPE_SYSTEM_IDENTIFIER);
 2901|    857|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2902|    857|      tokenizer->_doc_type_state.force_quirks = true;
 2903|    857|      finish_doctype_system_id(parser);
 2904|    857|      return emit_doctype(parser, output);
 2905|    151|    case -1:
  ------------------
  |  Branch (2905:5): [True: 151, False: 46.3k]
  ------------------
 2906|    151|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_DOCTYPE);
 2907|    151|      reconsume_in_state(parser, GUMBO_LEX_DATA);
 2908|    151|      tokenizer->_doc_type_state.force_quirks = true;
 2909|    151|      finish_doctype_system_id(parser);
 2910|    151|      return emit_doctype(parser, output);
 2911|  33.0k|    default:
  ------------------
  |  Branch (2911:5): [True: 33.0k, False: 13.4k]
  ------------------
 2912|  33.0k|      append_char_to_temporary_buffer(parser, c);
 2913|  33.0k|      return CONTINUE;
 2914|  46.4k|  }
 2915|  46.4k|}
tokenizer.c:handle_after_doctype_system_id_state:
 2923|  3.72k|) {
 2924|  3.72k|  switch (c) {
 2925|    303|    case '\t':
  ------------------
  |  Branch (2925:5): [True: 303, False: 3.42k]
  ------------------
 2926|    668|    case '\n':
  ------------------
  |  Branch (2926:5): [True: 365, False: 3.36k]
  ------------------
 2927|    914|    case '\f':
  ------------------
  |  Branch (2927:5): [True: 246, False: 3.47k]
  ------------------
 2928|  1.23k|    case ' ':
  ------------------
  |  Branch (2928:5): [True: 322, False: 3.40k]
  ------------------
 2929|  1.23k|      return CONTINUE;
 2930|  1.47k|    case '>':
  ------------------
  |  Branch (2930:5): [True: 1.47k, False: 2.24k]
  ------------------
 2931|  1.47k|      gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2932|  1.47k|      return emit_doctype(parser, output);
 2933|     19|    case -1:
  ------------------
  |  Branch (2933:5): [True: 19, False: 3.70k]
  ------------------
 2934|     19|      tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_DOCTYPE);
 2935|     19|      reconsume_in_state(parser, GUMBO_LEX_DATA);
 2936|     19|      tokenizer->_doc_type_state.force_quirks = true;
 2937|     19|      return emit_doctype(parser, output);
 2938|    991|    default:
  ------------------
  |  Branch (2938:5): [True: 991, False: 2.73k]
  ------------------
 2939|    991|      tokenizer_add_parse_error(parser, GUMBO_ERR_UNEXPECTED_CHARACTER_AFTER_DOCTYPE_SYSTEM_IDENTIFIER);
 2940|    991|      reconsume_in_state(parser, GUMBO_LEX_BOGUS_DOCTYPE);
 2941|    991|      return CONTINUE;
 2942|  3.72k|  }
 2943|  3.72k|}
tokenizer.c:handle_bogus_doctype_state:
 2951|  93.0k|) {
 2952|  93.0k|  switch (c) {
 2953|  6.05k|  case '>':
  ------------------
  |  Branch (2953:3): [True: 6.05k, False: 87.0k]
  ------------------
 2954|  6.05k|    gumbo_tokenizer_set_state(parser, GUMBO_LEX_DATA);
 2955|  6.05k|    return emit_doctype(parser, output);
 2956|  7.42k|  case '\0':
  ------------------
  |  Branch (2956:3): [True: 7.42k, False: 85.6k]
  ------------------
 2957|  7.42k|    tokenizer_add_parse_error(parser, GUMBO_ERR_UNEXPECTED_NULL_CHARACTER);
 2958|  7.42k|    return CONTINUE;
 2959|    384|  case -1:
  ------------------
  |  Branch (2959:3): [True: 384, False: 92.6k]
  ------------------
 2960|    384|    reconsume_in_state(parser, GUMBO_LEX_DATA);
 2961|    384|    return emit_doctype(parser, output);
 2962|  79.2k|  default:
  ------------------
  |  Branch (2962:3): [True: 79.2k, False: 13.8k]
  ------------------
 2963|  79.2k|    return CONTINUE;
 2964|  93.0k|  }
 2965|  93.0k|}
tokenizer.c:handle_cdata_section_state:
 2973|  74.1k|) {
 2974|  74.1k|  switch (c) {
 2975|  3.56k|  case ']':
  ------------------
  |  Branch (2975:3): [True: 3.56k, False: 70.5k]
  ------------------
 2976|  3.56k|    gumbo_tokenizer_set_state(parser, GUMBO_LEX_CDATA_SECTION_BRACKET);
 2977|  3.56k|    set_mark(parser);
 2978|  3.56k|    return CONTINUE;
 2979|    120|  case -1:
  ------------------
  |  Branch (2979:3): [True: 120, False: 74.0k]
  ------------------
 2980|    120|    tokenizer_add_parse_error(parser, GUMBO_ERR_EOF_IN_CDATA);
 2981|    120|    return emit_eof(parser, output);
 2982|  70.4k|  default:
  ------------------
  |  Branch (2982:3): [True: 70.4k, False: 3.68k]
  ------------------
 2983|  70.4k|    return emit_char(parser, c, output);
 2984|  74.1k|  }
 2985|  74.1k|}
tokenizer.c:handle_cdata_section_bracket_state:
 2993|  3.56k|) {
 2994|  3.56k|  switch (c) {
 2995|  2.44k|  case ']':
  ------------------
  |  Branch (2995:3): [True: 2.44k, False: 1.12k]
  ------------------
 2996|  2.44k|    gumbo_tokenizer_set_state(parser, GUMBO_LEX_CDATA_SECTION_END);
 2997|  2.44k|    return CONTINUE;
 2998|  1.12k|  default:
  ------------------
  |  Branch (2998:3): [True: 1.12k, False: 2.44k]
  ------------------
 2999|  1.12k|    reconsume_in_state(parser, GUMBO_LEX_CDATA_SECTION);
 3000|       |    // Emit the ].
 3001|  1.12k|    return emit_from_mark(parser, output);
 3002|  3.56k|  }
 3003|  3.56k|}
tokenizer.c:handle_cdata_section_end_state:
 3011|  2.44k|) {
 3012|  2.44k|  switch (c) {
 3013|  1.44k|  case ']':
  ------------------
  |  Branch (3013:3): [True: 1.44k, False: 999]
  ------------------
 3014|  1.44k|  {
 3015|       |    // XXX: This is terrible. We want to emit a ] corresponding to the first
 3016|       |    // of the three in a row we've seen. So let's emit one token from the
 3017|       |    // temporary buffer (which will rewind 3 characters, emit the ] and
 3018|       |    // advance one). Next, let's clear the temporary buffer which will set the
 3019|       |    // mark to the middle of the three brackets. Finally, let's move to the
 3020|       |    // appropriate state.
 3021|  1.44k|    StateResult result = emit_from_mark(parser, output);
 3022|  1.44k|    tokenizer->_resume_pos = NULL;
 3023|  1.44k|    set_mark(parser);
 3024|  1.44k|    gumbo_tokenizer_set_state(parser, GUMBO_LEX_CDATA_SECTION);
 3025|  1.44k|    return result;
 3026|      0|  }
 3027|    397|  case '>':
  ------------------
  |  Branch (3027:3): [True: 397, False: 2.04k]
  ------------------
 3028|       |    // We're done with CDATA so move past the >, reset the token start point
 3029|       |    // to point after the >, and then reconsume in the data state.
 3030|    397|    utf8iterator_next(&tokenizer->_input);
 3031|    397|    reset_token_start_point(tokenizer);
 3032|    397|    reconsume_in_state(parser, GUMBO_LEX_DATA);
 3033|    397|    tokenizer->_is_in_cdata = false;
 3034|    397|    return CONTINUE;
 3035|    602|  default:
  ------------------
  |  Branch (3035:3): [True: 602, False: 1.84k]
  ------------------
 3036|    602|    reconsume_in_state(parser, GUMBO_LEX_CDATA_SECTION);
 3037|    602|    return emit_from_mark(parser, output);
 3038|  2.44k|  }
 3039|  2.44k|}
tokenizer.c:handle_character_reference_state:
 3047|  1.08M|) {
 3048|  1.08M|  if (gumbo_ascii_isalnum(c)) {
  ------------------
  |  Branch (3048:7): [True: 885k, False: 197k]
  ------------------
 3049|   885k|    reconsume_in_state(parser, GUMBO_LEX_NAMED_CHARACTER_REFERENCE);
 3050|   885k|    return CONTINUE;
 3051|   885k|  }
 3052|   197k|  if (c == '#') {
  ------------------
  |  Branch (3052:7): [True: 12.6k, False: 184k]
  ------------------
 3053|  12.6k|    gumbo_tokenizer_set_state(parser, GUMBO_LEX_NUMERIC_CHARACTER_REFERENCE);
 3054|  12.6k|    return CONTINUE;
 3055|  12.6k|  }
 3056|   184k|  reconsume_in_state(parser, tokenizer->_return_state);
 3057|   184k|  return flush_code_points_consumed_as_character_reference(parser, output);
 3058|   197k|}
tokenizer.c:flush_code_points_consumed_as_character_reference:
  637|   563k|) {
  638|   563k|  GumboTokenizerState* tokenizer = parser->_tokenizer_state;
  639|   563k|  if (character_reference_part_of_attribute(parser)) {
  ------------------
  |  Branch (639:7): [True: 29.2k, False: 534k]
  ------------------
  640|  29.2k|    const char *start = utf8iterator_get_mark_pointer(&tokenizer->_input);
  641|  29.2k|    assert(start);
  ------------------
  |  Branch (641:5): [True: 0, False: 29.2k]
  |  Branch (641:5): [True: 29.2k, False: 0]
  ------------------
  642|  29.2k|    GumboStringPiece str = {
  643|  29.2k|      .data = start,
  644|  29.2k|      .length = utf8iterator_get_char_pointer(&tokenizer->_input) - start,
  645|  29.2k|    };
  646|  29.2k|    bool unquoted = tokenizer->_return_state == GUMBO_LEX_ATTR_VALUE_UNQUOTED;
  647|  29.2k|    append_string_to_tag_buffer(parser, &str, unquoted);
  648|  29.2k|    return CONTINUE;
  649|  29.2k|  }
  650|   534k|  return emit_from_mark(parser, output);
  651|   563k|}
tokenizer.c:character_reference_part_of_attribute:
  618|  2.96M|static bool character_reference_part_of_attribute(GumboParser* parser) {
  619|  2.96M|  GumboTokenizerState* tokenizer = parser->_tokenizer_state;
  620|  2.96M|  switch (tokenizer->_return_state) {
  621|  39.8k|  case GUMBO_LEX_ATTR_VALUE_DOUBLE_QUOTED:
  ------------------
  |  Branch (621:3): [True: 39.8k, False: 2.92M]
  ------------------
  622|  60.3k|  case GUMBO_LEX_ATTR_VALUE_SINGLE_QUOTED:
  ------------------
  |  Branch (622:3): [True: 20.5k, False: 2.94M]
  ------------------
  623|   123k|  case GUMBO_LEX_ATTR_VALUE_UNQUOTED:
  ------------------
  |  Branch (623:3): [True: 63.0k, False: 2.89M]
  ------------------
  624|   123k|    return true;
  625|  2.83M|  default:
  ------------------
  |  Branch (625:3): [True: 2.83M, False: 123k]
  ------------------
  626|       |    return false;
  627|  2.96M|  }
  628|  2.96M|}
tokenizer.c:append_string_to_tag_buffer:
  599|  29.2k|) {
  600|  29.2k|  GumboStringBuffer* buffer = &parser->_tokenizer_state->_tag_state._buffer;
  601|  29.2k|  if (buffer->length == 0 && reinitialize_position_on_first) {
  ------------------
  |  Branch (601:7): [True: 1.74k, False: 27.4k]
  |  Branch (601:30): [True: 1.26k, False: 479]
  ------------------
  602|  1.26k|    reset_tag_buffer_start_point(parser);
  603|  1.26k|  }
  604|  29.2k|  gumbo_string_buffer_append_string(str, buffer);
  605|  29.2k|}
tokenizer.c:handle_named_character_reference_state:
 3066|   885k|) {
 3067|   885k|  const char *cur = utf8iterator_get_char_pointer(&tokenizer->_input);
 3068|   885k|  const char *end = utf8iterator_get_end_pointer(&tokenizer->_input);
 3069|   885k|  int code_point[2];
 3070|   885k|  size_t size = match_named_char_ref(cur, end - cur, code_point);
 3071|       |
 3072|   885k|  if (size > 0) {
  ------------------
  |  Branch (3072:7): [True: 513k, False: 372k]
  ------------------
 3073|   513k|    utf8iterator_maybe_consume_match(&tokenizer->_input, cur, size, true);
 3074|   513k|    int next = utf8iterator_current(&tokenizer->_input);
 3075|   513k|    reconsume_in_state(parser, tokenizer->_return_state);
 3076|   513k|    if (character_reference_part_of_attribute(parser)
  ------------------
  |  Branch (3076:9): [True: 19.5k, False: 493k]
  ------------------
 3077|  19.5k|        && cur[size-1] != ';'
  ------------------
  |  Branch (3077:12): [True: 3.31k, False: 16.2k]
  ------------------
 3078|  3.31k|        && (next == '=' || gumbo_ascii_isalnum(next))) {
  ------------------
  |  Branch (3078:13): [True: 486, False: 2.83k]
  |  Branch (3078:28): [True: 1.23k, False: 1.59k]
  ------------------
 3079|  1.72k|      GumboStringPiece str = { .data = cur, .length = size };
 3080|  1.72k|      append_string_to_temporary_buffer(parser, &str);
 3081|  1.72k|      return flush_code_points_consumed_as_character_reference(parser, output);
 3082|  1.72k|    }
 3083|   511k|    if (cur[size-1] != ';')
  ------------------
  |  Branch (3083:9): [True: 39.6k, False: 471k]
  ------------------
 3084|  39.6k|      tokenizer_add_char_ref_error(parser, GUMBO_ERR_MISSING_SEMICOLON_AFTER_CHARACTER_REFERENCE, -1);
 3085|   511k|    reconsume_in_state(parser, tokenizer->_return_state);
 3086|   511k|    return flush_char_ref(parser, code_point[0], code_point[1], output);
 3087|   513k|  }
 3088|   372k|  reconsume_in_state(parser, GUMBO_LEX_AMBIGUOUS_AMPERSAND);
 3089|   372k|  return flush_code_points_consumed_as_character_reference(parser, output);
 3090|   885k|}
tokenizer.c:tokenizer_add_char_ref_error:
  226|   160k|) {
  227|   160k|  GumboTokenizerState* tokenizer = parser->_tokenizer_state;
  228|   160k|  GumboError* error = gumbo_add_error(parser);
  229|   160k|  if (!error)
  ------------------
  |  Branch (229:7): [True: 0, False: 160k]
  ------------------
  230|      0|    return;
  231|   160k|  Utf8Iterator* input = &tokenizer->_input;
  232|   160k|  error->type = type;
  233|   160k|  error->position = utf8iterator_get_mark_position(input);
  234|   160k|  const char* mark = utf8iterator_get_mark_pointer(input);
  235|   160k|  error->original_text.data = mark;
  236|   160k|  error->original_text.length = utf8iterator_get_char_pointer(input) - mark;
  237|   160k|  error->v.tokenizer.state = tokenizer->_state;
  238|   160k|  error->v.tokenizer.codepoint = codepoint;
  239|   160k|}
tokenizer.c:flush_char_ref:
  667|   519k|) {
  668|   519k|  GumboTokenizerState* tokenizer = parser->_tokenizer_state;
  669|   519k|  if (character_reference_part_of_attribute(parser)) {
  ------------------
  |  Branch (669:7): [True: 17.9k, False: 501k]
  ------------------
  670|  17.9k|    bool unquoted = tokenizer->_return_state == GUMBO_LEX_ATTR_VALUE_UNQUOTED;
  671|  17.9k|    append_char_to_tag_buffer(parser, first, unquoted);
  672|  17.9k|    if (second != kGumboNoChar)
  ------------------
  |  |   11|  17.9k|#define kGumboNoChar (-1)
  ------------------
  |  Branch (672:9): [True: 1.50k, False: 16.4k]
  ------------------
  673|  1.50k|      append_char_to_tag_buffer(parser, second, unquoted);
  674|  17.9k|    return CONTINUE;
  675|  17.9k|  }
  676|   501k|  tokenizer->_buffered_emit_char = second;
  677|   501k|  return emit_char(parser, first, output);
  678|   519k|}
tokenizer.c:handle_ambiguous_ampersand_state:
 3098|  1.73M|) {
 3099|  1.73M|  if (gumbo_ascii_isalnum(c)) {
  ------------------
  |  Branch (3099:7): [True: 1.36M, False: 372k]
  ------------------
 3100|  1.36M|    if (character_reference_part_of_attribute(parser)) {
  ------------------
  |  Branch (3100:9): [True: 56.7k, False: 1.30M]
  ------------------
 3101|  56.7k|      append_char_to_tag_buffer(parser, c, true);
 3102|  56.7k|      return CONTINUE;
 3103|  56.7k|    }
 3104|  1.30M|    return emit_char(parser, c, output);
 3105|  1.36M|  }
 3106|   372k|  if (c == ';') {
  ------------------
  |  Branch (3106:7): [True: 104k, False: 268k]
  ------------------
 3107|   104k|      tokenizer_add_char_ref_error(parser, GUMBO_ERR_UNKNOWN_NAMED_CHARACTER_REFERENCE, -1);
 3108|       |    // fall through
 3109|   104k|  }
 3110|   372k|  reconsume_in_state(parser, tokenizer->_return_state);
 3111|   372k|  return CONTINUE;
 3112|  1.73M|}
tokenizer.c:handle_numeric_character_reference_state:
 3120|  12.6k|) {
 3121|  12.6k|  tokenizer->_character_reference_code = 0;
 3122|  12.6k|  switch (c) {
 3123|  4.28k|  case 'x':
  ------------------
  |  Branch (3123:3): [True: 4.28k, False: 8.38k]
  ------------------
 3124|  5.55k|  case 'X':
  ------------------
  |  Branch (3124:3): [True: 1.26k, False: 11.4k]
  ------------------
 3125|  5.55k|    gumbo_tokenizer_set_state(parser, GUMBO_LEX_HEXADECIMAL_CHARACTER_REFERENCE_START);
 3126|  5.55k|    return CONTINUE;
 3127|  7.12k|  default:
  ------------------
  |  Branch (3127:3): [True: 7.12k, False: 5.55k]
  ------------------
 3128|  7.12k|    reconsume_in_state(parser, GUMBO_LEX_DECIMAL_CHARACTER_REFERENCE_START);
 3129|  7.12k|    return CONTINUE;
 3130|  12.6k|  }
 3131|  12.6k|}
tokenizer.c:handle_hexadecimal_character_reference_start_state:
 3139|  5.55k|) {
 3140|  5.55k|  if (gumbo_ascii_isxdigit(c)) {
  ------------------
  |  Branch (3140:7): [True: 4.84k, False: 710]
  ------------------
 3141|  4.84k|    reconsume_in_state(parser, GUMBO_LEX_HEXADECIMAL_CHARACTER_REFERENCE);
 3142|  4.84k|    return CONTINUE;
 3143|  4.84k|  }
 3144|    710|  tokenizer_add_char_ref_error (
 3145|    710|    parser,
 3146|    710|    GUMBO_ERR_ABSENCE_OF_DIGITS_IN_NUMERIC_CHARACTER_REFERENCE,
 3147|    710|    -1
 3148|    710|  );
 3149|    710|  reconsume_in_state(parser, tokenizer->_return_state);
 3150|    710|  return flush_code_points_consumed_as_character_reference(parser, output);
 3151|  5.55k|}
tokenizer.c:handle_decimal_character_reference_start_state:
 3159|  7.12k|) {
 3160|  7.12k|  if (gumbo_ascii_isdigit(c)) {
  ------------------
  |  Branch (3160:7): [True: 3.00k, False: 4.11k]
  ------------------
 3161|  3.00k|    reconsume_in_state(parser, GUMBO_LEX_DECIMAL_CHARACTER_REFERENCE);
 3162|  3.00k|    return CONTINUE;
 3163|  3.00k|  }
 3164|  4.11k|  tokenizer_add_char_ref_error (
 3165|  4.11k|    parser,
 3166|  4.11k|    GUMBO_ERR_ABSENCE_OF_DIGITS_IN_NUMERIC_CHARACTER_REFERENCE,
 3167|  4.11k|    -1
 3168|  4.11k|  );
 3169|  4.11k|  reconsume_in_state(parser, tokenizer->_return_state);
 3170|  4.11k|  return flush_code_points_consumed_as_character_reference(parser, output);
 3171|  7.12k|}
tokenizer.c:handle_hexadecimal_character_reference_state:
 3179|  21.2k|) {
 3180|  21.2k|  if (gumbo_ascii_isdigit(c)) {
  ------------------
  |  Branch (3180:7): [True: 4.28k, False: 16.9k]
  ------------------
 3181|  4.28k|    tokenizer->_character_reference_code =
 3182|  4.28k|      tokenizer->_character_reference_code * 16 + (c - 0x0030);
 3183|  4.28k|    if (tokenizer->_character_reference_code > kUtf8MaxChar)
  ------------------
  |  |   35|  4.28k|#define kUtf8MaxChar 0x10FFFF
  ------------------
  |  Branch (3183:9): [True: 480, False: 3.80k]
  ------------------
 3184|    480|      tokenizer->_character_reference_code = kUtf8MaxChar+1;
  ------------------
  |  |   35|    480|#define kUtf8MaxChar 0x10FFFF
  ------------------
 3185|  4.28k|    return CONTINUE;
 3186|  4.28k|  }
 3187|  16.9k|  if (gumbo_ascii_isupper_xdigit(c)) {
  ------------------
  |  Branch (3187:7): [True: 7.61k, False: 9.34k]
  ------------------
 3188|  7.61k|    tokenizer->_character_reference_code =
 3189|  7.61k|      tokenizer->_character_reference_code * 16 + (c - 0x0037);
 3190|  7.61k|    if (tokenizer->_character_reference_code > kUtf8MaxChar)
  ------------------
  |  |   35|  7.61k|#define kUtf8MaxChar 0x10FFFF
  ------------------
  |  Branch (3190:9): [True: 3.29k, False: 4.32k]
  ------------------
 3191|  3.29k|      tokenizer->_character_reference_code = kUtf8MaxChar+1;
  ------------------
  |  |   35|  3.29k|#define kUtf8MaxChar 0x10FFFF
  ------------------
 3192|  7.61k|    return CONTINUE;
 3193|  7.61k|  }
 3194|  9.34k|  if (gumbo_ascii_islower_xdigit(c)) {
  ------------------
  |  Branch (3194:7): [True: 4.49k, False: 4.84k]
  ------------------
 3195|  4.49k|    tokenizer->_character_reference_code =
 3196|  4.49k|      tokenizer->_character_reference_code * 16 + (c - 0x0057);
 3197|  4.49k|    if (tokenizer->_character_reference_code > kUtf8MaxChar)
  ------------------
  |  |   35|  4.49k|#define kUtf8MaxChar 0x10FFFF
  ------------------
  |  Branch (3197:9): [True: 337, False: 4.15k]
  ------------------
 3198|    337|      tokenizer->_character_reference_code = kUtf8MaxChar+1;
  ------------------
  |  |   35|    337|#define kUtf8MaxChar 0x10FFFF
  ------------------
 3199|  4.49k|    return CONTINUE;
 3200|  4.49k|  }
 3201|  4.84k|  if (c == ';') {
  ------------------
  |  Branch (3201:7): [True: 797, False: 4.05k]
  ------------------
 3202|    797|    gumbo_tokenizer_set_state(parser, GUMBO_LEX_NUMERIC_CHARACTER_REFERENCE_END);
 3203|    797|    return CONTINUE;
 3204|    797|  }
 3205|  4.05k|  tokenizer_add_char_ref_error(
 3206|  4.05k|    parser,
 3207|  4.05k|    GUMBO_ERR_MISSING_SEMICOLON_AFTER_CHARACTER_REFERENCE,
 3208|  4.05k|    tokenizer->_character_reference_code
 3209|  4.05k|  );
 3210|  4.05k|  reconsume_in_state(parser, GUMBO_LEX_NUMERIC_CHARACTER_REFERENCE_END);
 3211|  4.05k|  return CONTINUE;
 3212|  4.84k|}
tokenizer.c:handle_decimal_character_reference_state:
 3220|  11.0k|) {
 3221|  11.0k|  if (gumbo_ascii_isdigit(c)) {
  ------------------
  |  Branch (3221:7): [True: 8.09k, False: 3.00k]
  ------------------
 3222|  8.09k|    tokenizer->_character_reference_code =
 3223|  8.09k|      tokenizer->_character_reference_code * 10 + (c - 0x0030);
 3224|  8.09k|    if (tokenizer->_character_reference_code > kUtf8MaxChar)
  ------------------
  |  |   35|  8.09k|#define kUtf8MaxChar 0x10FFFF
  ------------------
  |  Branch (3224:9): [True: 830, False: 7.26k]
  ------------------
 3225|    830|      tokenizer->_character_reference_code = kUtf8MaxChar+1;
  ------------------
  |  |   35|    830|#define kUtf8MaxChar 0x10FFFF
  ------------------
 3226|  8.09k|    return CONTINUE;
 3227|  8.09k|  }
 3228|  3.00k|  if (c == ';') {
  ------------------
  |  Branch (3228:7): [True: 694, False: 2.30k]
  ------------------
 3229|    694|    gumbo_tokenizer_set_state(parser, GUMBO_LEX_NUMERIC_CHARACTER_REFERENCE_END);
 3230|    694|    return CONTINUE;
 3231|    694|  }
 3232|  2.30k|  tokenizer_add_char_ref_error(
 3233|  2.30k|    parser,
 3234|  2.30k|    GUMBO_ERR_MISSING_SEMICOLON_AFTER_CHARACTER_REFERENCE,
 3235|  2.30k|    tokenizer->_character_reference_code
 3236|  2.30k|  );
 3237|  2.30k|  reconsume_in_state(parser, GUMBO_LEX_NUMERIC_CHARACTER_REFERENCE_END);
 3238|  2.30k|  return CONTINUE;
 3239|  3.00k|}
tokenizer.c:handle_numeric_character_reference_end_state:
 3247|  7.84k|) {
 3248|  7.84k|  c = tokenizer->_character_reference_code;
 3249|  7.84k|  if (c == 0) {
  ------------------
  |  Branch (3249:7): [True: 868, False: 6.98k]
  ------------------
 3250|    868|    tokenizer_add_char_ref_error(
 3251|    868|      parser,
 3252|    868|      GUMBO_ERR_NULL_CHARACTER_REFERENCE,
 3253|    868|      c
 3254|    868|    );
 3255|    868|    c = kUtf8ReplacementChar;
  ------------------
  |  |   33|    868|#define kUtf8ReplacementChar 0xFFFD
  ------------------
 3256|  6.98k|  } else if (c > kUtf8MaxChar) {
  ------------------
  |  |   35|  6.98k|#define kUtf8MaxChar 0x10FFFF
  ------------------
  |  Branch (3256:14): [True: 417, False: 6.56k]
  ------------------
 3257|    417|    tokenizer_add_char_ref_error(
 3258|    417|      parser,
 3259|    417|      GUMBO_ERR_CHARACTER_REFERENCE_OUTSIDE_UNICODE_RANGE,
 3260|    417|      c
 3261|    417|    );
 3262|    417|    c = kUtf8ReplacementChar;
  ------------------
  |  |   33|    417|#define kUtf8ReplacementChar 0xFFFD
  ------------------
 3263|  6.56k|  } else if (utf8_is_surrogate(c)) {
  ------------------
  |  Branch (3263:14): [True: 351, False: 6.21k]
  ------------------
 3264|    351|    tokenizer_add_char_ref_error(
 3265|    351|      parser,
 3266|    351|      GUMBO_ERR_SURROGATE_CHARACTER_REFERENCE,
 3267|    351|      c
 3268|    351|    );
 3269|    351|    c = kUtf8ReplacementChar;
  ------------------
  |  |   33|    351|#define kUtf8ReplacementChar 0xFFFD
  ------------------
 3270|  6.21k|  } else if (utf8_is_noncharacter(c)) {
  ------------------
  |  Branch (3270:14): [True: 892, False: 5.32k]
  ------------------
 3271|    892|    tokenizer_add_char_ref_error(
 3272|    892|      parser,
 3273|    892|      GUMBO_ERR_NONCHARACTER_CHARACTER_REFERENCE,
 3274|    892|      c
 3275|    892|    );
 3276|  5.32k|  } else if (c == 0x0D || (utf8_is_control(c) && !gumbo_ascii_isspace(c))) {
  ------------------
  |  Branch (3276:14): [True: 408, False: 4.91k]
  |  Branch (3276:28): [True: 3.64k, False: 1.27k]
  |  Branch (3276:50): [True: 2.64k, False: 994]
  ------------------
 3277|  3.05k|    tokenizer_add_char_ref_error(
 3278|  3.05k|      parser,
 3279|  3.05k|      GUMBO_ERR_CONTROL_CHARACTER_REFERENCE,
 3280|  3.05k|      c
 3281|  3.05k|    );
 3282|  3.05k|    switch (c) {
  ------------------
  |  Branch (3282:13): [True: 1.07k, False: 1.98k]
  ------------------
 3283|    549|    case 0x80: c = 0x20AC; break;
  ------------------
  |  Branch (3283:5): [True: 549, False: 2.50k]
  ------------------
 3284|     86|    case 0x82: c = 0x201A; break;
  ------------------
  |  Branch (3284:5): [True: 86, False: 2.97k]
  ------------------
 3285|     19|    case 0x83: c = 0x0192; break;
  ------------------
  |  Branch (3285:5): [True: 19, False: 3.03k]
  ------------------
 3286|     19|    case 0x84: c = 0x201E; break;
  ------------------
  |  Branch (3286:5): [True: 19, False: 3.03k]
  ------------------
 3287|     58|    case 0x85: c = 0x2026; break;
  ------------------
  |  Branch (3287:5): [True: 58, False: 2.99k]
  ------------------
 3288|      1|    case 0x86: c = 0x2020; break;
  ------------------
  |  Branch (3288:5): [True: 1, False: 3.05k]
  ------------------
 3289|      0|    case 0x87: c = 0x2021; break;
  ------------------
  |  Branch (3289:5): [True: 0, False: 3.05k]
  ------------------
 3290|      4|    case 0x88: c = 0x02C6; break;
  ------------------
  |  Branch (3290:5): [True: 4, False: 3.05k]
  ------------------
 3291|      4|    case 0x89: c = 0x2030; break;
  ------------------
  |  Branch (3291:5): [True: 4, False: 3.05k]
  ------------------
 3292|      1|    case 0x8A: c = 0x0160; break;
  ------------------
  |  Branch (3292:5): [True: 1, False: 3.05k]
  ------------------
 3293|     16|    case 0x8B: c = 0x2039; break;
  ------------------
  |  Branch (3293:5): [True: 16, False: 3.04k]
  ------------------
 3294|      0|    case 0x8C: c = 0x0152; break;
  ------------------
  |  Branch (3294:5): [True: 0, False: 3.05k]
  ------------------
 3295|     16|    case 0x8E: c = 0x017D; break;
  ------------------
  |  Branch (3295:5): [True: 16, False: 3.04k]
  ------------------
 3296|    150|    case 0x91: c = 0x2018; break;
  ------------------
  |  Branch (3296:5): [True: 150, False: 2.90k]
  ------------------
 3297|      3|    case 0x92: c = 0x2019; break;
  ------------------
  |  Branch (3297:5): [True: 3, False: 3.05k]
  ------------------
 3298|      3|    case 0x93: c = 0x201C; break;
  ------------------
  |  Branch (3298:5): [True: 3, False: 3.05k]
  ------------------
 3299|      3|    case 0x94: c = 0x201D; break;
  ------------------
  |  Branch (3299:5): [True: 3, False: 3.05k]
  ------------------
 3300|      6|    case 0x95: c = 0x2022; break;
  ------------------
  |  Branch (3300:5): [True: 6, False: 3.05k]
  ------------------
 3301|     18|    case 0x96: c = 0x2013; break;
  ------------------
  |  Branch (3301:5): [True: 18, False: 3.03k]
  ------------------
 3302|      5|    case 0x97: c = 0x2014; break;
  ------------------
  |  Branch (3302:5): [True: 5, False: 3.05k]
  ------------------
 3303|      9|    case 0x98: c = 0x02DC; break;
  ------------------
  |  Branch (3303:5): [True: 9, False: 3.04k]
  ------------------
 3304|      3|    case 0x99: c = 0x2122; break;
  ------------------
  |  Branch (3304:5): [True: 3, False: 3.05k]
  ------------------
 3305|     23|    case 0x9A: c = 0x0161; break;
  ------------------
  |  Branch (3305:5): [True: 23, False: 3.03k]
  ------------------
 3306|      0|    case 0x9B: c = 0x203A; break;
  ------------------
  |  Branch (3306:5): [True: 0, False: 3.05k]
  ------------------
 3307|     48|    case 0x9C: c = 0x0153; break;
  ------------------
  |  Branch (3307:5): [True: 48, False: 3.00k]
  ------------------
 3308|      4|    case 0x9E: c = 0x017E; break;
  ------------------
  |  Branch (3308:5): [True: 4, False: 3.05k]
  ------------------
 3309|     23|    case 0x9F: c = 0x0178; break;
  ------------------
  |  Branch (3309:5): [True: 23, False: 3.03k]
  ------------------
 3310|  3.05k|    }
 3311|  3.05k|  }
 3312|  7.84k|  reconsume_in_state(parser, tokenizer->_return_state);
 3313|  7.84k|  return flush_char_ref(parser, c, kGumboNoChar, output);
  ------------------
  |  |   11|  7.84k|#define kGumboNoChar (-1)
  ------------------
 3314|  7.84k|}

utf8iterator_init:
  188|  26.7k|) {
  189|  26.7k|  iter->_start = source;
  190|  26.7k|  iter->_end = source + source_length;
  191|  26.7k|  iter->_pos.line = 1;
  192|  26.7k|  iter->_pos.column = 1;
  193|  26.7k|  iter->_pos.offset = 0;
  194|  26.7k|  iter->_parser = parser;
  195|  26.7k|  read_char(iter);
  196|  26.7k|  if (iter->_current == kUtf8BomChar) {
  ------------------
  |  |   34|  26.7k|#define kUtf8BomChar 0xFEFF
  ------------------
  |  Branch (196:7): [True: 3, False: 26.7k]
  ------------------
  197|      3|    iter->_start += iter->_width;
  198|      3|    iter->_pos.offset += iter->_width;
  199|      3|    read_char(iter);
  200|      3|  }
  201|  26.7k|}
utf8iterator_next:
  203|  17.4M|void utf8iterator_next(Utf8Iterator* iter) {
  204|       |  // We update positions based on the *last* character read, so that the first
  205|       |  // character following a newline is at column 1 in the next line.
  206|  17.4M|  update_position(iter);
  207|  17.4M|  iter->_start += iter->_width;
  208|  17.4M|  read_char(iter);
  209|  17.4M|}
utf8iterator_maybe_consume_match:
  216|   631k|) {
  217|   631k|  bool matched =
  218|   631k|    (iter->_start + length <= iter->_end)
  ------------------
  |  Branch (218:5): [True: 631k, False: 818]
  ------------------
  219|   631k|    && (
  ------------------
  |  Branch (219:8): [True: 550k, False: 80.1k]
  ------------------
  220|   631k|      case_sensitive
  ------------------
  |  Branch (220:7): [True: 570k, False: 60.2k]
  ------------------
  221|   631k|        ? !strncmp(iter->_start, prefix, length)
  222|   631k|        : !gumbo_ascii_strncasecmp(iter->_start, prefix, length)
  223|   631k|    )
  224|   631k|  ;
  225|   631k|  if (matched) {
  ------------------
  |  Branch (225:7): [True: 550k, False: 80.9k]
  ------------------
  226|  3.84M|    for (size_t i = 0; i < length; ++i) {
  ------------------
  |  Branch (226:24): [True: 3.29M, False: 550k]
  ------------------
  227|  3.29M|      utf8iterator_next(iter);
  228|  3.29M|    }
  229|   550k|    return true;
  230|   550k|  } else {
  231|       |    return false;
  232|  80.9k|  }
  233|   631k|}
utf8iterator_mark:
  235|  1.60M|void utf8iterator_mark(Utf8Iterator* iter) {
  236|  1.60M|  iter->_mark = iter->_start;
  237|  1.60M|  iter->_mark_pos = iter->_pos;
  238|  1.60M|}
utf8iterator_reset:
  241|   674k|void utf8iterator_reset(Utf8Iterator* iter) {
  242|   674k|  iter->_start = iter->_mark;
  243|   674k|  iter->_pos = iter->_mark_pos;
  244|   674k|  read_char(iter);
  245|   674k|}
utf8.c:read_char:
  110|  18.1M|static void read_char(Utf8Iterator* iter) {
  111|  18.1M|  if (iter->_start >= iter->_end) {
  ------------------
  |  Branch (111:7): [True: 55.7k, False: 18.0M]
  ------------------
  112|       |    // No input left to consume; emit an EOF and set width = 0.
  113|  55.7k|    iter->_current = -1;
  114|  55.7k|    iter->_width = 0;
  115|  55.7k|    return;
  116|  55.7k|  }
  117|       |
  118|  18.0M|  uint32_t code_point = 0;
  119|  18.0M|  uint32_t state = UTF8_ACCEPT;
  ------------------
  |  |   52|  18.0M|#define UTF8_ACCEPT 0
  ------------------
  120|  18.5M|  for (const char* c = iter->_start; c < iter->_end; ++c) {
  ------------------
  |  Branch (120:38): [True: 18.5M, False: 1.09k]
  ------------------
  121|  18.5M|    decode(&state, &code_point, (uint32_t)(unsigned char) (*c));
  122|  18.5M|    if (state == UTF8_ACCEPT) {
  ------------------
  |  |   52|  18.5M|#define UTF8_ACCEPT 0
  ------------------
  |  Branch (122:9): [True: 16.3M, False: 2.24M]
  ------------------
  123|  16.3M|      iter->_width = c - iter->_start + 1;
  124|       |      // This is the special handling for carriage returns that is mandated by
  125|       |      // the HTML5 spec. Since we're looking for particular 7-bit literal
  126|       |      // characters, we operate in terms of chars and only need a check for iter
  127|       |      // overrun, instead of having to read in a full next code point.
  128|       |      // https://html.spec.whatwg.org/multipage/parsing.html#preprocessing-the-input-stream
  129|  16.3M|      if (code_point == '\r') {
  ------------------
  |  Branch (129:11): [True: 63.0k, False: 16.2M]
  ------------------
  130|  63.0k|        assert(iter->_width == 1);
  ------------------
  |  Branch (130:9): [True: 0, False: 63.0k]
  |  Branch (130:9): [True: 63.0k, False: 0]
  ------------------
  131|  63.0k|        const char* next = c + 1;
  132|  63.0k|        if (next < iter->_end && *next == '\n') {
  ------------------
  |  Branch (132:13): [True: 62.8k, False: 178]
  |  Branch (132:34): [True: 17.2k, False: 45.5k]
  ------------------
  133|       |          // Advance the iter, as if the carriage return didn't exist.
  134|  17.2k|          ++iter->_start;
  135|       |          // Preserve the true offset, since other tools that look at it may be
  136|       |          // unaware of HTML5's rules for converting \r into \n.
  137|  17.2k|          ++iter->_pos.offset;
  138|  17.2k|        }
  139|  63.0k|        code_point = '\n';
  140|  63.0k|      }
  141|  16.3M|      iter->_current = code_point;
  142|  16.3M|      if (utf8_is_surrogate(code_point)) {
  ------------------
  |  Branch (142:11): [True: 0, False: 16.3M]
  ------------------
  143|      0|	add_error(iter, GUMBO_ERR_SURROGATE_IN_INPUT_STREAM);
  144|  16.3M|      } else if (utf8_is_noncharacter(code_point)) {
  ------------------
  |  Branch (144:18): [True: 1.94k, False: 16.3M]
  ------------------
  145|  1.94k|        add_error(iter, GUMBO_ERR_NONCHARACTER_IN_INPUT_STREAM);
  146|  16.3M|      } else if (utf8_is_control(code_point)
  ------------------
  |  Branch (146:18): [True: 1.61M, False: 14.7M]
  ------------------
  147|  1.61M|                 && !(gumbo_ascii_isspace(code_point) || code_point == 0)) {
  ------------------
  |  Branch (147:23): [True: 265k, False: 1.34M]
  |  Branch (147:58): [True: 1.06M, False: 279k]
  ------------------
  148|   279k|        add_error(iter, GUMBO_ERR_CONTROL_CHARACTER_IN_INPUT_STREAM);
  149|   279k|      }
  150|  16.3M|      return;
  151|  16.3M|    } else if (state == UTF8_REJECT) {
  ------------------
  |  |   53|  2.24M|#define UTF8_REJECT 12
  ------------------
  |  Branch (151:16): [True: 1.71M, False: 536k]
  ------------------
  152|       |      // We don't want to consume the invalid continuation byte of a multi-byte
  153|       |      // run, but we do want to skip past an invalid first byte.
  154|  1.71M|      iter->_width = c - iter->_start + (c == iter->_start);
  155|  1.71M|      iter->_current = kUtf8ReplacementChar;
  ------------------
  |  |   33|  1.71M|#define kUtf8ReplacementChar 0xFFFD
  ------------------
  156|  1.71M|      add_error(iter, GUMBO_ERR_UTF8_INVALID);
  157|  1.71M|      return;
  158|  1.71M|    }
  159|  18.5M|  }
  160|       |  // If we got here without exiting early, then we've reached the end of the
  161|       |  // iterator. Add an error for truncated input, set the width to consume the
  162|       |  // rest of the iterator, and emit a replacement character. The next time we
  163|       |  // enter this method, it will detect that there's no input to consume and
  164|       |  // output an EOF.
  165|  1.09k|  iter->_width = iter->_end - iter->_start;
  166|  1.09k|  iter->_current = kUtf8ReplacementChar;
  ------------------
  |  |   33|  1.09k|#define kUtf8ReplacementChar 0xFFFD
  ------------------
  167|  1.09k|  add_error(iter, GUMBO_ERR_UTF8_TRUNCATED);
  168|  1.09k|}
utf8.c:decode:
   76|  18.5M|static inline uint32_t decode(uint32_t* state, uint32_t* codep, uint32_t byte) {
   77|  18.5M|  uint32_t type = utf8d[byte];
   78|       |
   79|  18.5M|  *codep =
   80|  18.5M|    (*state != UTF8_ACCEPT)
  ------------------
  |  |   52|  18.5M|#define UTF8_ACCEPT 0
  ------------------
  |  Branch (80:5): [True: 535k, False: 18.0M]
  ------------------
   81|  18.5M|      ? (byte & 0x3fu) | (*codep << 6)
   82|  18.5M|      : (0xff >> type) & (byte);
   83|       |
   84|  18.5M|  *state = utf8d[256 + *state + type];
   85|  18.5M|  return *state;
   86|  18.5M|}
utf8.c:add_error:
   92|  1.99M|static void add_error(Utf8Iterator* iter, GumboErrorType type) {
   93|  1.99M|  GumboParser* parser = iter->_parser;
   94|       |
   95|  1.99M|  GumboError* error = gumbo_add_error(parser);
   96|  1.99M|  if (!error) {
  ------------------
  |  Branch (96:7): [True: 0, False: 1.99M]
  ------------------
   97|      0|    return;
   98|      0|  }
   99|  1.99M|  error->type = type;
  100|  1.99M|  error->position = iter->_pos;
  101|  1.99M|  error->original_text.data = iter->_start;
  102|  1.99M|  error->original_text.length = iter->_width;
  103|  1.99M|  error->v.tokenizer.codepoint = iter->_current;
  104|  1.99M|}
utf8.c:update_position:
  170|  17.4M|static void update_position(Utf8Iterator* iter) {
  171|  17.4M|  iter->_pos.offset += iter->_width;
  172|  17.4M|  if (iter->_current == '\n') {
  ------------------
  |  Branch (172:7): [True: 113k, False: 17.2M]
  ------------------
  173|   113k|    ++iter->_pos.line;
  174|   113k|    iter->_pos.column = 1;
  175|  17.2M|  } else if (iter->_current == '\t') {
  ------------------
  |  Branch (175:14): [True: 91.6k, False: 17.2M]
  ------------------
  176|  91.6k|    int tab_stop = iter->_parser->_options->tab_stop;
  177|  91.6k|    iter->_pos.column = ((iter->_pos.column / tab_stop) + 1) * tab_stop;
  178|  17.2M|  } else if (iter->_current != -1) {
  ------------------
  |  Branch (178:14): [True: 17.1M, False: 26.8k]
  ------------------
  179|  17.1M|    ++iter->_pos.column;
  180|  17.1M|  }
  181|  17.4M|}

tokenizer.c:utf8iterator_get_position:
  104|  12.0M|) {
  105|  12.0M|  *output = iter->_pos;
  106|  12.0M|}
tokenizer.c:utf8iterator_get_char_pointer:
  116|  15.2M|static inline const char* utf8iterator_get_char_pointer(const Utf8Iterator* iter) {
  117|  15.2M|  return iter->_start;
  118|  15.2M|}
tokenizer.c:utf8iterator_current:
   96|  19.3M|static inline int utf8iterator_current(const Utf8Iterator* iter) {
   97|  19.3M|  return iter->_current;
   98|  19.3M|}
tokenizer.c:utf8iterator_get_width:
  121|  1.23M|static inline size_t utf8iterator_get_width(const Utf8Iterator* iter) {
  122|  1.23M|  return iter->_width;
  123|  1.23M|}
tokenizer.c:utf8iterator_get_mark_pointer:
  134|   189k|static inline const char* utf8iterator_get_mark_pointer(const Utf8Iterator* iter) {
  135|   189k|  return iter->_mark;
  136|   189k|}
tokenizer.c:utf8iterator_get_end_pointer:
  129|   885k|static inline const char* utf8iterator_get_end_pointer(const Utf8Iterator* iter) {
  130|   885k|  return iter->_end;
  131|   885k|}
tokenizer.c:utf8iterator_get_mark_position:
  111|   160k|) {
  112|   160k|  return iter->_mark_pos;
  113|   160k|}
tokenizer.c:utf8_is_surrogate:
   66|  6.56k|CONST_FN static inline bool utf8_is_surrogate(int c) {
   67|  6.56k|  return c >= 0xD800 && c <= 0xDFFF;
  ------------------
  |  Branch (67:10): [True: 1.53k, False: 5.02k]
  |  Branch (67:25): [True: 351, False: 1.18k]
  ------------------
   68|  6.56k|}
tokenizer.c:utf8_is_noncharacter:
   71|  6.21k|CONST_FN static inline bool utf8_is_noncharacter(int c) {
   72|  6.21k|  return
   73|  6.21k|    (c >= 0xFDD0 && c <= 0xFDEF)
  ------------------
  |  Branch (73:6): [True: 1.15k, False: 5.05k]
  |  Branch (73:21): [True: 463, False: 696]
  ------------------
   74|  5.74k|    || ((c & 0xFFFF) == 0xFFFE)
  ------------------
  |  Branch (74:8): [True: 228, False: 5.52k]
  ------------------
   75|  5.52k|    || ((c & 0xFFFF) == 0xFFFF);
  ------------------
  |  Branch (75:8): [True: 201, False: 5.32k]
  ------------------
   76|  6.21k|}
tokenizer.c:utf8_is_control:
   79|  4.91k|CONST_FN static inline bool utf8_is_control(int c) {
   80|  4.91k|  return ((unsigned int)c < 0x1Fu) || (c >= 0x7F && c <= 0x9F);
  ------------------
  |  Branch (80:10): [True: 2.29k, False: 2.62k]
  |  Branch (80:40): [True: 2.07k, False: 547]
  |  Branch (80:53): [True: 1.35k, False: 723]
  ------------------
   81|  4.91k|}
utf8.c:utf8_is_surrogate:
   66|  16.3M|CONST_FN static inline bool utf8_is_surrogate(int c) {
   67|  16.3M|  return c >= 0xD800 && c <= 0xDFFF;
  ------------------
  |  Branch (67:10): [True: 35.1k, False: 16.3M]
  |  Branch (67:25): [True: 0, False: 35.1k]
  ------------------
   68|  16.3M|}
utf8.c:utf8_is_noncharacter:
   71|  16.3M|CONST_FN static inline bool utf8_is_noncharacter(int c) {
   72|  16.3M|  return
   73|  16.3M|    (c >= 0xFDD0 && c <= 0xFDEF)
  ------------------
  |  Branch (73:6): [True: 34.6k, False: 16.3M]
  |  Branch (73:21): [True: 597, False: 34.0k]
  ------------------
   74|  16.3M|    || ((c & 0xFFFF) == 0xFFFE)
  ------------------
  |  Branch (74:8): [True: 501, False: 16.3M]
  ------------------
   75|  16.3M|    || ((c & 0xFFFF) == 0xFFFF);
  ------------------
  |  Branch (75:8): [True: 842, False: 16.3M]
  ------------------
   76|  16.3M|}
utf8.c:utf8_is_control:
   79|  16.3M|CONST_FN static inline bool utf8_is_control(int c) {
   80|  16.3M|  return ((unsigned int)c < 0x1Fu) || (c >= 0x7F && c <= 0x9F);
  ------------------
  |  Branch (80:10): [True: 1.60M, False: 14.7M]
  |  Branch (80:40): [True: 80.1k, False: 14.6M]
  |  Branch (80:53): [True: 8.67k, False: 71.5k]
  ------------------
   81|  16.3M|}

gumbo_alloc:
   24|  21.9M|void* gumbo_alloc(size_t size) {
   25|  21.9M|  void* ptr = malloc(size);
   26|  21.9M|  if (unlikely(ptr == NULL)) {
  ------------------
  |  |   65|  21.9M|    #define unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (65:25): [True: 0, False: 21.9M]
  |  |  ------------------
  ------------------
   27|      0|    perror(__func__);
   28|      0|    abort();
   29|      0|  }
   30|  21.9M|  return ptr;
   31|  21.9M|}
gumbo_realloc:
   33|  1.10M|void* gumbo_realloc(void* ptr, size_t size) {
   34|  1.10M|  ptr = realloc(ptr, size);
   35|  1.10M|  if (unlikely(ptr == NULL)) {
  ------------------
  |  |   65|  1.10M|    #define unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (65:25): [True: 0, False: 1.10M]
  |  |  ------------------
  ------------------
   36|      0|    perror(__func__);
   37|      0|    abort();
   38|      0|  }
   39|  1.10M|  return ptr;
   40|  1.10M|}
gumbo_free:
   42|  21.8M|void gumbo_free(void* ptr) {
   43|  21.8M|  free(ptr);
   44|  21.8M|}
gumbo_strdup:
   46|  12.3M|char* gumbo_strdup(const char* str) {
   47|  12.3M|  const size_t size = strlen(str) + 1;
   48|       |  // The strdup(3) function isn't available in strict "-std=c99" mode
   49|       |  // (it's part of POSIX, not C99), so use malloc(3) and memcpy(3)
   50|       |  // instead:
   51|  12.3M|  char* buffer = gumbo_alloc(size);
   52|  12.3M|  return memcpy(buffer, str, size);
   53|  12.3M|}

parser.c:gumbo_debug:
   27|  37.6M|static inline void PRINTF(1) gumbo_debug(const char* UNUSED_ARG(format), ...) {};
tokenizer.c:gumbo_debug:
   27|  18.1M|static inline void PRINTF(1) gumbo_debug(const char* UNUSED_ARG(format), ...) {};

gumbo_vector_init:
   24|  2.54M|void gumbo_vector_init(unsigned int initial_capacity, GumboVector* vector) {
   25|  2.54M|  vector->length = 0;
   26|  2.54M|  vector->capacity = initial_capacity;
   27|  2.54M|  if (initial_capacity > 0) {
  ------------------
  |  Branch (27:7): [True: 2.40M, False: 142k]
  ------------------
   28|  2.40M|    vector->data = gumbo_alloc(sizeof(void*) * initial_capacity);
   29|  2.40M|  } else {
   30|       |    vector->data = NULL;
   31|   142k|  }
   32|  2.54M|}
gumbo_vector_destroy:
   34|  1.68M|void gumbo_vector_destroy(GumboVector* vector) {
   35|  1.68M|  if (vector->capacity > 0) {
  ------------------
  |  Branch (35:7): [True: 1.65M, False: 28.0k]
  ------------------
   36|  1.65M|    gumbo_free(vector->data);
   37|  1.65M|  }
   38|  1.68M|}
gumbo_vector_add:
   54|  42.4M|void gumbo_vector_add(void* element, GumboVector* vector) {
   55|  42.4M|  enlarge_vector_if_full(vector);
   56|  42.4M|  assert(vector->data);
  ------------------
  |  Branch (56:3): [True: 0, False: 42.4M]
  |  Branch (56:3): [True: 42.4M, False: 0]
  ------------------
   57|  42.4M|  assert(vector->length < vector->capacity);
  ------------------
  |  Branch (57:3): [True: 0, False: 42.4M]
  |  Branch (57:3): [True: 42.4M, False: 0]
  ------------------
   58|  42.4M|  vector->data[vector->length++] = element;
   59|  42.4M|}
gumbo_vector_pop:
   61|   436k|void* gumbo_vector_pop(GumboVector* vector) {
   62|   436k|  if (vector->length == 0) {
  ------------------
  |  Branch (62:7): [True: 53.6k, False: 382k]
  ------------------
   63|  53.6k|    return NULL;
   64|  53.6k|  }
   65|   382k|  return vector->data[--vector->length];
   66|   436k|}
gumbo_vector_index_of:
   68|   129k|int gumbo_vector_index_of(GumboVector* vector, const void* element) {
   69|  4.40M|  for (unsigned int i = 0; i < vector->length; ++i) {
  ------------------
  |  Branch (69:28): [True: 4.39M, False: 13.3k]
  ------------------
   70|  4.39M|    if (vector->data[i] == element) {
  ------------------
  |  Branch (70:9): [True: 116k, False: 4.27M]
  ------------------
   71|   116k|      return i;
   72|   116k|    }
   73|  4.39M|  }
   74|  13.3k|  return -1;
   75|   129k|}
gumbo_vector_insert_at:
   81|  31.0k|) {
   82|  31.0k|  assert(index <= vector->length);
  ------------------
  |  Branch (82:3): [True: 0, False: 31.0k]
  |  Branch (82:3): [True: 31.0k, False: 0]
  ------------------
   83|  31.0k|  enlarge_vector_if_full(vector);
   84|  31.0k|  ++vector->length;
   85|  31.0k|  memmove (
   86|  31.0k|    &vector->data[index + 1],
   87|  31.0k|    &vector->data[index],
   88|  31.0k|    sizeof(void*) * (vector->length - index - 1)
   89|  31.0k|  );
   90|  31.0k|  vector->data[index] = element;
   91|  31.0k|}
gumbo_vector_remove:
   93|  26.9k|void gumbo_vector_remove(void* node, GumboVector* vector) {
   94|  26.9k|  int index = gumbo_vector_index_of(vector, node);
   95|  26.9k|  if (index == -1) {
  ------------------
  |  Branch (95:7): [True: 194, False: 26.7k]
  ------------------
   96|    194|    return;
   97|    194|  }
   98|  26.7k|  gumbo_vector_remove_at(index, vector);
   99|  26.7k|}
gumbo_vector_remove_at:
  101|  67.8k|void* gumbo_vector_remove_at(unsigned int index, GumboVector* vector) {
  102|  67.8k|  assert(index < vector->length);
  ------------------
  |  Branch (102:3): [True: 0, False: 67.8k]
  |  Branch (102:3): [True: 67.8k, False: 0]
  ------------------
  103|  67.8k|  void* result = vector->data[index];
  104|  67.8k|  memmove (
  105|  67.8k|    &vector->data[index],
  106|  67.8k|    &vector->data[index + 1],
  107|  67.8k|    sizeof(void*) * (vector->length - index - 1)
  108|  67.8k|  );
  109|  67.8k|  --vector->length;
  110|  67.8k|  return result;
  111|  67.8k|}
vector.c:enlarge_vector_if_full:
   40|  42.4M|static void enlarge_vector_if_full(GumboVector* vector) {
   41|  42.4M|  if (vector->length >= vector->capacity) {
  ------------------
  |  Branch (41:7): [True: 219k, False: 42.2M]
  ------------------
   42|   219k|    if (vector->capacity) {
  ------------------
  |  Branch (42:9): [True: 219k, False: 91]
  ------------------
   43|   219k|      vector->capacity *= 2;
   44|   219k|      size_t num_bytes = sizeof(void*) * vector->capacity;
   45|   219k|      vector->data = gumbo_realloc(vector->data, num_bytes);
   46|   219k|    } else {
   47|       |      // 0-capacity vector; no previous array to deallocate.
   48|     91|      vector->capacity = 2;
   49|     91|      vector->data = gumbo_alloc(sizeof(void*) * vector->capacity);
   50|     91|    }
   51|   219k|  }
   52|  42.4M|}

