#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ gui_color_attr_get_flag(unsigned char const);
int /*<<< orphan*/ isdigit(unsigned char const);
unsigned char *malloc(int);
int /*<<< orphan*/ memcpy(unsigned char *, unsigned char const *, int);
int strlen(char *);
int utf8_char_size(char *);
char *gui_color_decode(const char *string, const char *replacement) {
  const unsigned char *ptr_string;
  unsigned char *out;
  int out_length, out_pos, length;
  if (!string)
    return NULL;
  out_length = (strlen((char *)string) * 2) + 1;
  out = malloc(out_length);
  if (!out)
    return NULL;
  ptr_string = (unsigned char *)string;
  out_pos = 0;
  while (ptr_string && ptr_string[0] && (out_pos < out_length - 1)) {
    switch (ptr_string[0]) {
    case '\x19':
      ptr_string++;
      switch (ptr_string[0]) {
      case 'F':
        ptr_string++;
        if (ptr_string[0] == '@') {
          ptr_string++;
          while (gui_color_attr_get_flag(ptr_string[0]) > 0) {
            ptr_string++;
          }
          if (ptr_string[0] && ptr_string[1] && ptr_string[2] &&
              ptr_string[3] && ptr_string[4]) {
            ptr_string += 5;
          }
        } else {
          while (gui_color_attr_get_flag(ptr_string[0]) > 0) {
            ptr_string++;
          }
          if (ptr_string[0] && ptr_string[1])
            ptr_string += 2;
        }
        break;
      case 'B':
        ptr_string++;
        if (ptr_string[0] == '@') {
          ptr_string++;
          if (ptr_string[0] && ptr_string[1] && ptr_string[2] &&
              ptr_string[3] && ptr_string[4]) {
            ptr_string += 5;
          }
        } else {
          if (ptr_string[0] && ptr_string[1])
            ptr_string += 2;
        }
        break;
      case '*':
        ptr_string++;
        if (ptr_string[0] == '@') {
          ptr_string++;
          while (gui_color_attr_get_flag(ptr_string[0]) > 0) {
            ptr_string++;
          }
          if (ptr_string[0] && ptr_string[1] && ptr_string[2] &&
              ptr_string[3] && ptr_string[4]) {
            ptr_string += 5;
          }
        } else {
          while (gui_color_attr_get_flag(ptr_string[0]) > 0) {
            ptr_string++;
          }
          if (ptr_string[0] && ptr_string[1])
            ptr_string += 2;
        }
        if ((ptr_string[0] == ',') || (ptr_string[0] == '~')) {
          if (ptr_string[1] == '@') {
            ptr_string += 2;
            if (ptr_string[0] && ptr_string[1] && ptr_string[2] &&
                ptr_string[3] && ptr_string[4]) {
              ptr_string += 5;
            }
          } else {
            ptr_string++;
            if (ptr_string[0] && ptr_string[1])
              ptr_string += 2;
          }
        }
        break;
      case '@':
        ptr_string++;
        if ((isdigit(ptr_string[0])) && (isdigit(ptr_string[1])) &&
            (isdigit(ptr_string[2])) && (isdigit(ptr_string[3])) &&
            (isdigit(ptr_string[4]))) {
          ptr_string += 5;
        }
        break;
      case 'E':
        ptr_string++;
        break;
      case 'b':
        ptr_string++;
        switch (ptr_string[0]) {
        case 'F':
        case 'B':
        case 'D':
        case '_':
        case '-':
        case '#':
        case 'i':
        case 'l':
          ptr_string++;
          break;
        }
        break;
      case '\x1C':
        ptr_string++;
        break;
      default:
        if (isdigit(ptr_string[0]) && isdigit(ptr_string[1]))
          ptr_string += 2;
        break;
      }
      if (replacement && replacement[0]) {
        out[out_pos] = replacement[0];
        out_pos++;
      }
      break;
    case '\x1A':
    case '\x1B':
      ptr_string++;
      if (ptr_string[0])
        ptr_string++;
      if (replacement && replacement[0]) {
        out[out_pos] = replacement[0];
        out_pos++;
      }
      break;
    case '\x1C':
      ptr_string++;
      if (replacement && replacement[0]) {
        out[out_pos] = replacement[0];
        out_pos++;
      }
      break;
    default:
      length = utf8_char_size((char *)ptr_string);
      if (length == 0)
        length = 1;
      memcpy(out + out_pos, ptr_string, length);
      out_pos += length;
      ptr_string += length;
      break;
    }
  }
  out[out_pos] = '\0';
  return (char *)out;
}


x86 assembly (clang, -O0):
<gui_color_decode>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
cmpq   $0x0,-0x10(%rbp)
jne    1188 <gui_color_decode+0x28>
movq   $0x0,-0x8(%rbp)
jmp    1925 <gui_color_decode+0x7c5>
mov    -0x10(%rbp),%rdi
call   1040 <strlen@plt>
shl    $0x1,%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%edi
call   1070 <malloc@plt>
mov    %rax,-0x28(%rbp)
cmpq   $0x0,-0x28(%rbp)
jne    11be <gui_color_decode+0x5e>
movq   $0x0,-0x8(%rbp)
jmp    1925 <gui_color_decode+0x7c5>
mov    -0x10(%rbp),%rax
mov    %rax,-0x20(%rbp)
movl   $0x0,-0x30(%rbp)
xor    %eax,%eax
cmpq   $0x0,-0x20(%rbp)
mov    %al,-0x35(%rbp)
je     1203 <gui_color_decode+0xa3>
mov    -0x20(%rbp),%rax
movzbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x35(%rbp)
je     1203 <gui_color_decode+0xa3>
mov    -0x30(%rbp),%eax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
setl   %al
mov    %al,-0x35(%rbp)
mov    -0x35(%rbp),%al
test   $0x1,%al
jne    1213 <gui_color_decode+0xb3>
jmp    1911 <gui_color_decode+0x7b1>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
mov    %eax,-0x3c(%rbp)
sub    $0x19,%eax
je     1250 <gui_color_decode+0xf0>
jmp    122b <gui_color_decode+0xcb>
mov    -0x3c(%rbp),%eax
add    $0xffffffe6,%eax
sub    $0x2,%eax
jb     1819 <gui_color_decode+0x6b9>
jmp    123f <gui_color_decode+0xdf>
mov    -0x3c(%rbp),%eax
sub    $0x1c,%eax
je     1878 <gui_color_decode+0x718>
jmp    18be <gui_color_decode+0x75e>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
mov    %eax,-0x40(%rbp)
sub    $0x1c,%eax
je     1792 <gui_color_decode+0x632>
jmp    1274 <gui_color_decode+0x114>
mov    -0x40(%rbp),%eax
sub    $0x2a,%eax
je     14b3 <gui_color_decode+0x353>
jmp    1285 <gui_color_decode+0x125>
mov    -0x40(%rbp),%eax
sub    $0x40,%eax
je     16ad <gui_color_decode+0x54d>
jmp    1296 <gui_color_decode+0x136>
mov    -0x40(%rbp),%eax
sub    $0x42,%eax
je     13ef <gui_color_decode+0x28f>
jmp    12a7 <gui_color_decode+0x147>
mov    -0x40(%rbp),%eax
sub    $0x45,%eax
je     1737 <gui_color_decode+0x5d7>
jmp    12b8 <gui_color_decode+0x158>
mov    -0x40(%rbp),%eax
sub    $0x46,%eax
je     12da <gui_color_decode+0x17a>
jmp    12c9 <gui_color_decode+0x169>
mov    -0x40(%rbp),%eax
sub    $0x62,%eax
je     1748 <gui_color_decode+0x5e8>
jmp    17a3 <gui_color_decode+0x643>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x40,%eax
jne    138d <gui_color_decode+0x22d>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movzbl (%rax),%edi
call   1050 <gui_color_attr_get_flag@plt>
cmp    $0x0,%eax
jle    1328 <gui_color_decode+0x1c8>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    1302 <gui_color_decode+0x1a2>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x0,%eax
je     1388 <gui_color_decode+0x228>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     1388 <gui_color_decode+0x228>
mov    -0x20(%rbp),%rax
movzbl 0x2(%rax),%eax
cmp    $0x0,%eax
je     1388 <gui_color_decode+0x228>
mov    -0x20(%rbp),%rax
movzbl 0x3(%rax),%eax
cmp    $0x0,%eax
je     1388 <gui_color_decode+0x228>
mov    -0x20(%rbp),%rax
movzbl 0x4(%rax),%eax
cmp    $0x0,%eax
je     1388 <gui_color_decode+0x228>
mov    -0x20(%rbp),%rax
add    $0x5,%rax
mov    %rax,-0x20(%rbp)
jmp    13ea <gui_color_decode+0x28a>
jmp    1392 <gui_color_decode+0x232>
mov    -0x20(%rbp),%rax
movzbl (%rax),%edi
call   1050 <gui_color_attr_get_flag@plt>
cmp    $0x0,%eax
jle    13b8 <gui_color_decode+0x258>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    1392 <gui_color_decode+0x232>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x0,%eax
je     13e5 <gui_color_decode+0x285>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     13e5 <gui_color_decode+0x285>
mov    -0x20(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x20(%rbp)
jmp    13ea <gui_color_decode+0x28a>
jmp    17df <gui_color_decode+0x67f>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x40,%eax
jne    147c <gui_color_decode+0x31c>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x0,%eax
je     1477 <gui_color_decode+0x317>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     1477 <gui_color_decode+0x317>
mov    -0x20(%rbp),%rax
movzbl 0x2(%rax),%eax
cmp    $0x0,%eax
je     1477 <gui_color_decode+0x317>
mov    -0x20(%rbp),%rax
movzbl 0x3(%rax),%eax
cmp    $0x0,%eax
je     1477 <gui_color_decode+0x317>
mov    -0x20(%rbp),%rax
movzbl 0x4(%rax),%eax
cmp    $0x0,%eax
je     1477 <gui_color_decode+0x317>
mov    -0x20(%rbp),%rax
add    $0x5,%rax
mov    %rax,-0x20(%rbp)
jmp    14ae <gui_color_decode+0x34e>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x0,%eax
je     14a9 <gui_color_decode+0x349>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     14a9 <gui_color_decode+0x349>
mov    -0x20(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x20(%rbp)
jmp    14ae <gui_color_decode+0x34e>
jmp    17df <gui_color_decode+0x67f>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x40,%eax
jne    1566 <gui_color_decode+0x406>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movzbl (%rax),%edi
call   1050 <gui_color_attr_get_flag@plt>
cmp    $0x0,%eax
jle    1501 <gui_color_decode+0x3a1>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    14db <gui_color_decode+0x37b>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x0,%eax
je     1561 <gui_color_decode+0x401>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     1561 <gui_color_decode+0x401>
mov    -0x20(%rbp),%rax
movzbl 0x2(%rax),%eax
cmp    $0x0,%eax
je     1561 <gui_color_decode+0x401>
mov    -0x20(%rbp),%rax
movzbl 0x3(%rax),%eax
cmp    $0x0,%eax
je     1561 <gui_color_decode+0x401>
mov    -0x20(%rbp),%rax
movzbl 0x4(%rax),%eax
cmp    $0x0,%eax
je     1561 <gui_color_decode+0x401>
mov    -0x20(%rbp),%rax
add    $0x5,%rax
mov    %rax,-0x20(%rbp)
jmp    15c3 <gui_color_decode+0x463>
jmp    156b <gui_color_decode+0x40b>
mov    -0x20(%rbp),%rax
movzbl (%rax),%edi
call   1050 <gui_color_attr_get_flag@plt>
cmp    $0x0,%eax
jle    1591 <gui_color_decode+0x431>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    156b <gui_color_decode+0x40b>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x0,%eax
je     15be <gui_color_decode+0x45e>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     15be <gui_color_decode+0x45e>
mov    -0x20(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x20(%rbp)
jmp    15c3 <gui_color_decode+0x463>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x2c,%eax
je     15e3 <gui_color_decode+0x483>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x7e,%eax
jne    16a8 <gui_color_decode+0x548>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x40,%eax
jne    1665 <gui_color_decode+0x505>
mov    -0x20(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x0,%eax
je     1660 <gui_color_decode+0x500>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     1660 <gui_color_decode+0x500>
mov    -0x20(%rbp),%rax
movzbl 0x2(%rax),%eax
cmp    $0x0,%eax
je     1660 <gui_color_decode+0x500>
mov    -0x20(%rbp),%rax
movzbl 0x3(%rax),%eax
cmp    $0x0,%eax
je     1660 <gui_color_decode+0x500>
mov    -0x20(%rbp),%rax
movzbl 0x4(%rax),%eax
cmp    $0x0,%eax
je     1660 <gui_color_decode+0x500>
mov    -0x20(%rbp),%rax
add    $0x5,%rax
mov    %rax,-0x20(%rbp)
jmp    16a3 <gui_color_decode+0x543>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x0,%eax
je     169e <gui_color_decode+0x53e>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     169e <gui_color_decode+0x53e>
mov    -0x20(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x20(%rbp)
jmp    16a3 <gui_color_decode+0x543>
jmp    16a8 <gui_color_decode+0x548>
jmp    17df <gui_color_decode+0x67f>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movzbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1732 <gui_color_decode+0x5d2>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1732 <gui_color_decode+0x5d2>
mov    -0x20(%rbp),%rax
movzbl 0x2(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1732 <gui_color_decode+0x5d2>
mov    -0x20(%rbp),%rax
movzbl 0x3(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1732 <gui_color_decode+0x5d2>
mov    -0x20(%rbp),%rax
movzbl 0x4(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1732 <gui_color_decode+0x5d2>
mov    -0x20(%rbp),%rax
add    $0x5,%rax
mov    %rax,-0x20(%rbp)
jmp    17df <gui_color_decode+0x67f>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    17df <gui_color_decode+0x67f>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
add    $0xffffffdd,%eax
mov    %eax,%ecx
mov    %rcx,-0x48(%rbp)
sub    $0x49,%eax
ja     178d <gui_color_decode+0x62d>
mov    -0x48(%rbp),%rax
lea    0x888(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    17df <gui_color_decode+0x67f>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    17df <gui_color_decode+0x67f>
mov    -0x20(%rbp),%rax
movzbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     17da <gui_color_decode+0x67a>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     17da <gui_color_decode+0x67a>
mov    -0x20(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x20(%rbp)
jmp    17df <gui_color_decode+0x67f>
cmpq   $0x0,-0x18(%rbp)
je     1814 <gui_color_decode+0x6b4>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     1814 <gui_color_decode+0x6b4>
mov    -0x18(%rbp),%rax
mov    (%rax),%dl
mov    -0x28(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    190c <gui_color_decode+0x7ac>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
cmpb   $0x0,(%rax)
je     183e <gui_color_decode+0x6de>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
cmpq   $0x0,-0x18(%rbp)
je     1873 <gui_color_decode+0x713>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     1873 <gui_color_decode+0x713>
mov    -0x18(%rbp),%rax
mov    (%rax),%dl
mov    -0x28(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    190c <gui_color_decode+0x7ac>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
cmpq   $0x0,-0x18(%rbp)
je     18b9 <gui_color_decode+0x759>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     18b9 <gui_color_decode+0x759>
mov    -0x18(%rbp),%rax
mov    (%rax),%dl
mov    -0x28(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    190c <gui_color_decode+0x7ac>
mov    -0x20(%rbp),%rdi
call   1080 <utf8_char_size@plt>
mov    %eax,-0x34(%rbp)
cmpl   $0x0,-0x34(%rbp)
jne    18db <gui_color_decode+0x77b>
movl   $0x1,-0x34(%rbp)
mov    -0x28(%rbp),%rdi
movslq -0x30(%rbp),%rax
add    %rax,%rdi
mov    -0x20(%rbp),%rsi
mov    -0x34(%rbp),%edx
call   1060 <memcpy@plt>
mov    -0x34(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%ecx
mov    -0x20(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
jmp    11cd <gui_color_decode+0x6d>
mov    -0x28(%rbp),%rax
movslq -0x30(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<gui_color_decode>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
test   %rdi,%rdi
je     1659 <gui_color_decode+0x4f9>
mov    %rsi,%r12
mov    %rdi,%r14
call   1040 <strlen@plt>
mov    %eax,%r15d
lea    (%r15,%r15,1),%edi
add    $0x1,%edi
call   1070 <malloc@plt>
xor    %r13d,%r13d
test   %rax,%rax
je     1659 <gui_color_decode+0x4f9>
mov    %rax,%rbx
mov    (%r14),%al
test   %al,%al
je     1650 <gui_color_decode+0x4f0>
test   %r15d,%r15d
jle    1650 <gui_color_decode+0x4f0>
add    %r15d,%r15d
xor    %r13d,%r13d
mov    %rbx,(%rsp)
nopl   0x0(%rax,%rax,1)
lea    -0x1a(%rax),%ecx
cmp    $0x2,%cl
jb     1270 <gui_color_decode+0x110>
cmp    $0x1c,%al
je     12b0 <gui_color_decode+0x150>
cmp    $0x19,%al
jne    12e0 <gui_color_decode+0x180>
mov    0x1(%r14),%al
lea    -0x2a(%rax),%ecx
cmp    $0x38,%cl
ja     1312 <gui_color_decode+0x1b2>
movzbl %cl,%ecx
lea    0xe0a(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
mov    0x2(%r14),%al
cmp    $0x40,%al
jne    14d1 <gui_color_decode+0x371>
add    $0x6,%r14
mov    %r14,%rbx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl -0x3(%rbx),%edi
call   1050 <gui_color_attr_get_flag@plt>
add    $0x1,%rbx
test   %eax,%eax
jg     1220 <gui_color_decode+0xc0>
lea    -0x4(%rbx),%rbp
mov    -0x4(%rbx),%al
test   %al,%al
je     1600 <gui_color_decode+0x4a0>
cmpb   $0x0,-0x3(%rbx)
je     1586 <gui_color_decode+0x426>
cmpb   $0x0,-0x2(%rbx)
je     1583 <gui_color_decode+0x423>
mov    $0x5,%eax
cmpb   $0x0,-0x1(%rbx)
jne    1574 <gui_color_decode+0x414>
jmp    1583 <gui_color_decode+0x423>
nopl   0x0(%rax,%rax,1)
lea    0x1(%r14),%rax
cmpb   $0x0,0x1(%r14)
lea    0x2(%r14),%r14
cmove  %rax,%r14
test   %r12,%r12
je     1640 <gui_color_decode+0x4e0>
mov    (%r12),%al
test   %al,%al
je     1640 <gui_color_decode+0x4e0>
movslq %r13d,%rcx
mov    %al,(%rbx,%rcx,1)
add    $0x1,%r13d
jmp    1640 <gui_color_decode+0x4e0>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%r14
test   %r12,%r12
je     1640 <gui_color_decode+0x4e0>
mov    (%r12),%al
test   %al,%al
je     1640 <gui_color_decode+0x4e0>
movslq %r13d,%r13
mov    %al,(%rbx,%r13,1)
add    $0x1,%r13d
jmp    1640 <gui_color_decode+0x4e0>
nopl   0x0(%rax)
mov    %r14,%rdi
call   1080 <utf8_char_size@plt>
mov    %eax,%ebp
test   %eax,%eax
mov    $0x1,%eax
cmove  %eax,%ebp
movslq %r13d,%rdi
add    %rbx,%rdi
mov    %r14,%rsi
mov    %ebp,%edx
call   1060 <memcpy@plt>
add    %ebp,%r13d
movslq %ebp,%rax
add    %rax,%r14
jmp    1640 <gui_color_decode+0x4e0>
cmp    $0x1c,%al
jne    132b <gui_color_decode+0x1cb>
add    $0x2,%r14
mov    %r14,%rbp
test   %r12,%r12
jne    1605 <gui_color_decode+0x4a5>
jmp    1631 <gui_color_decode+0x4d1>
lea    0x1(%r14),%rbp
movzbl %al,%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1600 <gui_color_decode+0x4a0>
movzbl 0x2(%r14),%edi
call   1030 <isdigit@plt>
add    $0x3,%r14
test   %eax,%eax
cmovne %r14,%rbp
test   %r12,%r12
jne    1605 <gui_color_decode+0x4a5>
jmp    1631 <gui_color_decode+0x4d1>
lea    0x2(%r14),%rbp
movzbl 0x2(%r14),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1600 <gui_color_decode+0x4a0>
movzbl 0x3(%r14),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1600 <gui_color_decode+0x4a0>
movzbl 0x4(%r14),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1600 <gui_color_decode+0x4a0>
movzbl 0x5(%r14),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1600 <gui_color_decode+0x4a0>
movzbl 0x6(%r14),%edi
call   1030 <isdigit@plt>
add    $0x7,%r14
jmp    134d <gui_color_decode+0x1ed>
lea    0x2(%r14),%rbp
mov    0x2(%r14),%al
test   %al,%al
je     1600 <gui_color_decode+0x4a0>
cmp    $0x40,%al
jne    1543 <gui_color_decode+0x3e3>
lea    0x3(%r14),%rbp
cmpb   $0x0,0x3(%r14)
je     1600 <gui_color_decode+0x4a0>
cmpb   $0x0,0x4(%r14)
je     1600 <gui_color_decode+0x4a0>
cmpb   $0x0,0x5(%r14)
je     1600 <gui_color_decode+0x4a0>
cmpb   $0x0,0x6(%r14)
je     1600 <gui_color_decode+0x4a0>
lea    0x8(%r14),%rax
cmpb   $0x0,0x7(%r14)
cmovne %rax,%rbp
test   %r12,%r12
jne    1605 <gui_color_decode+0x4a5>
jmp    1631 <gui_color_decode+0x4d1>
mov    0x2(%r14),%al
cmp    $0x40,%al
jne    1506 <gui_color_decode+0x3a6>
add    $0x2,%r14
mov    %r14,%rbp
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movzbl 0x1(%rbp),%edi
add    $0x1,%rbp
call   1050 <gui_color_attr_get_flag@plt>
test   %eax,%eax
jg     1440 <gui_color_decode+0x2e0>
cmpb   $0x0,0x0(%rbp)
je     1600 <gui_color_decode+0x4a0>
cmpb   $0x0,0x1(%rbp)
je     1600 <gui_color_decode+0x4a0>
cmpb   $0x0,0x2(%rbp)
je     1600 <gui_color_decode+0x4a0>
cmpb   $0x0,0x3(%rbp)
je     1600 <gui_color_decode+0x4a0>
xor    %eax,%eax
cmpb   $0x0,0x4(%rbp)
setne  %al
lea    (%rax,%rax,4),%rax
add    %rax,%rbp
test   %r12,%r12
jne    1605 <gui_color_decode+0x4a5>
jmp    1631 <gui_color_decode+0x4d1>
lea    0x2(%r14),%rbp
mov    0x2(%r14),%al
add    $0xdd,%al
cmp    $0x49,%al
ja     1600 <gui_color_decode+0x4a0>
movzbl %al,%eax
lea    0xc31(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
add    $0x3,%r14
mov    %r14,%rbp
test   %r12,%r12
jne    1605 <gui_color_decode+0x4a5>
jmp    1631 <gui_color_decode+0x4d1>
movzbl %al,%edi
call   1050 <gui_color_attr_get_flag@plt>
lea    0x3(%r14),%rbx
test   %eax,%eax
jle    155e <gui_color_decode+0x3fe>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movzbl (%rbx),%edi
call   1050 <gui_color_attr_get_flag@plt>
add    $0x1,%rbx
test   %eax,%eax
jg     14f0 <gui_color_decode+0x390>
lea    -0x1(%rbx),%rbp
jmp    1565 <gui_color_decode+0x405>
movzbl %al,%edi
call   1050 <gui_color_attr_get_flag@plt>
lea    0x3(%r14),%rbx
test   %eax,%eax
jle    15db <gui_color_decode+0x47b>
nopw   0x0(%rax,%rax,1)
movzbl (%rbx),%edi
call   1050 <gui_color_attr_get_flag@plt>
add    $0x1,%rbx
test   %eax,%eax
jg     1520 <gui_color_decode+0x3c0>
lea    -0x1(%rbx),%rbp
cmpb   $0x0,0x0(%rbp)
jne    15e8 <gui_color_decode+0x488>
jmp    1600 <gui_color_decode+0x4a0>
lea    0x4(%r14),%rax
cmpb   $0x0,0x3(%r14)
cmovne %rax,%rbp
test   %r12,%r12
jne    1605 <gui_color_decode+0x4a5>
jmp    1631 <gui_color_decode+0x4d1>
add    $0x2,%r14
mov    %r14,%rbp
mov    $0x2,%eax
cmpb   $0x0,0x0(%rbp)
je     1600 <gui_color_decode+0x4a0>
cmpb   $0x0,(%rbx)
mov    $0x0,%ecx
cmovne %rax,%rcx
add    %rcx,%rbp
mov    0x0(%rbp),%al
cmp    $0x7e,%al
je     158e <gui_color_decode+0x42e>
cmp    $0x2c,%al
jne    1600 <gui_color_decode+0x4a0>
lea    0x1(%rbp),%rax
mov    0x1(%rbp),%cl
test   %cl,%cl
je     15d1 <gui_color_decode+0x471>
cmp    $0x40,%cl
jne    1620 <gui_color_decode+0x4c0>
lea    0x2(%rbp),%rax
cmpb   $0x0,0x2(%rbp)
je     15d1 <gui_color_decode+0x471>
cmpb   $0x0,0x3(%rbp)
je     15d1 <gui_color_decode+0x471>
cmpb   $0x0,0x4(%rbp)
je     15d1 <gui_color_decode+0x471>
cmpb   $0x0,0x5(%rbp)
je     15d1 <gui_color_decode+0x471>
cmpb   $0x0,0x6(%rbp)
lea    0x7(%rbp),%rbp
cmove  %rax,%rbp
test   %r12,%r12
jne    1605 <gui_color_decode+0x4a5>
jmp    1631 <gui_color_decode+0x4d1>
mov    %rax,%rbp
test   %r12,%r12
jne    1605 <gui_color_decode+0x4a5>
jmp    1631 <gui_color_decode+0x4d1>
add    $0x2,%r14
mov    %r14,%rbp
cmpb   $0x0,0x0(%rbp)
je     1600 <gui_color_decode+0x4a0>
xor    %eax,%eax
cmpb   $0x0,(%rbx)
setne  %al
lea    0x0(%rbp,%rax,2),%rbp
cs nopw 0x0(%rax,%rax,1)
nop
test   %r12,%r12
je     1631 <gui_color_decode+0x4d1>
mov    (%r12),%al
test   %al,%al
mov    (%rsp),%rbx
je     161b <gui_color_decode+0x4bb>
movslq %r13d,%rcx
mov    %al,(%rbx,%rcx,1)
add    $0x1,%r13d
mov    %rbp,%r14
jmp    1640 <gui_color_decode+0x4e0>
cmpb   $0x0,0x2(%rbp)
lea    0x3(%rbp),%rbp
cmove  %rax,%rbp
test   %r12,%r12
jne    1605 <gui_color_decode+0x4a5>
mov    %rbp,%r14
mov    (%rsp),%rbx
nopl   0x0(%rax,%rax,1)
mov    (%r14),%al
test   %al,%al
je     1650 <gui_color_decode+0x4f0>
cmp    %r15d,%r13d
jl     11c0 <gui_color_decode+0x60>
movslq %r13d,%rax
movb   $0x0,(%rbx,%rax,1)
jmp    165b <gui_color_decode+0x4fb>
xor    %ebx,%ebx
mov    %rbx,%rax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i8* @gui_color_decode(i8* %0, i8* %1) {
%3 = alloca i8*
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i8*
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
store i8* %0, i8** %4
store i8* %1, i8** %5
%11 = load i8*, i8** %4
%12 = icmp ne i8* %11, null
br i1 %12, label %14, label %13
13: ; preds = %2
store i8* null, i8** %3
br label %519
14: ; preds = %2
%15 = load i8*, i8** %4
%16 = call i32 @strlen(i8* %15)
%17 = mul nsw i32 %16, 2
%18 = add nsw i32 %17, 1
store i32 %18, i32* %8
%19 = load i32, i32* %8
%20 = call i8* @malloc(i32 %19)
store i8* %20, i8** %7
%21 = load i8*, i8** %7
%22 = icmp ne i8* %21, null
br i1 %22, label %24, label %23
23: ; preds = %14
store i8* null, i8** %3
br label %519
24: ; preds = %14
%25 = load i8*, i8** %4
store i8* %25, i8** %6
store i32 0, i32* %9
br label %26
26: ; preds = %512, %24
%27 = load i8*, i8** %6
%28 = icmp ne i8* %27, null
br i1 %28, label %29, label %40
29: ; preds = %26
%30 = load i8*, i8** %6
%31 = getelementptr inbounds i8, i8* %30, i64 0
%32 = load i8, i8* %31
%33 = zext i8 %32 to i32
%34 = icmp ne i32 %33, 0
br i1 %34, label %35, label %40
35: ; preds = %29
%36 = load i32, i32* %9
%37 = load i32, i32* %8
%38 = sub nsw i32 %37, 1
%39 = icmp slt i32 %36, %38
br label %40
40: ; preds = %35, %29, %26
%41 = phi i1 [ false, %29 ], [ false, %26 ], [ %39, %35 ]
br i1 %41, label %42, label %513
42: ; preds = %40
%43 = load i8*, i8** %6
%44 = getelementptr inbounds i8, i8* %43, i64 0
%45 = load i8, i8* %44
%46 = zext i8 %45 to i32
switch i32 %46, label %491 [
i32 25, label %47
i32 26, label %439
i32 27, label %439
i32 28, label %469
]
47: ; preds = %42
%48 = load i8*, i8** %6
%49 = getelementptr inbounds i8, i8* %48, i32 1
store i8* %49, i8** %6
%50 = load i8*, i8** %6
%51 = getelementptr inbounds i8, i8* %50, i64 0
%52 = load i8, i8* %51
%53 = zext i8 %52 to i32
switch i32 %53, label %403 [
i32 70, label %54
i32 66, label %135
i32 42, label %196
i32 64, label %350
i32 69, label %386
i32 98, label %389
i32 28, label %400
]
54: ; preds = %47
%55 = load i8*, i8** %6
%56 = getelementptr inbounds i8, i8* %55, i32 1
store i8* %56, i8** %6
%57 = load i8*, i8** %6
%58 = getelementptr inbounds i8, i8* %57, i64 0
%59 = load i8, i8* %58
%60 = zext i8 %59 to i32
%61 = icmp eq i32 %60, 64
br i1 %61, label %62, label %108
62: ; preds = %54
%63 = load i8*, i8** %6
%64 = getelementptr inbounds i8, i8* %63, i32 1
store i8* %64, i8** %6
br label %65
65: ; preds = %71, %62
%66 = load i8*, i8** %6
%67 = getelementptr inbounds i8, i8* %66, i64 0
%68 = load i8, i8* %67
%69 = call i32 @gui_color_attr_get_flag(i8 zeroext %68)
%70 = icmp sgt i32 %69, 0
br i1 %70, label %71, label %74
71: ; preds = %65
%72 = load i8*, i8** %6
%73 = getelementptr inbounds i8, i8* %72, i32 1
store i8* %73, i8** %6
br label %65
74: ; preds = %65
%75 = load i8*, i8** %6
%76 = getelementptr inbounds i8, i8* %75, i64 0
%77 = load i8, i8* %76
%78 = zext i8 %77 to i32
%79 = icmp ne i32 %78, 0
br i1 %79, label %80, label %107
80: ; preds = %74
%81 = load i8*, i8** %6
%82 = getelementptr inbounds i8, i8* %81, i64 1
%83 = load i8, i8* %82
%84 = zext i8 %83 to i32
%85 = icmp ne i32 %84, 0
br i1 %85, label %86, label %107
86: ; preds = %80
%87 = load i8*, i8** %6
%88 = getelementptr inbounds i8, i8* %87, i64 2
%89 = load i8, i8* %88
%90 = zext i8 %89 to i32
%91 = icmp ne i32 %90, 0
br i1 %91, label %92, label %107
92: ; preds = %86
%93 = load i8*, i8** %6
%94 = getelementptr inbounds i8, i8* %93, i64 3
%95 = load i8, i8* %94
%96 = zext i8 %95 to i32
%97 = icmp ne i32 %96, 0
br i1 %97, label %98, label %107
98: ; preds = %92
%99 = load i8*, i8** %6
%100 = getelementptr inbounds i8, i8* %99, i64 4
%101 = load i8, i8* %100
%102 = zext i8 %101 to i32
%103 = icmp ne i32 %102, 0
br i1 %103, label %104, label %107
104: ; preds = %98
%105 = load i8*, i8** %6
%106 = getelementptr inbounds i8, i8* %105, i64 5
store i8* %106, i8** %6
br label %107
107: ; preds = %104, %98, %92, %86, %80, %74
br label %134
108: ; preds = %54
br label %109
109: ; preds = %115, %108
%110 = load i8*, i8** %6
%111 = getelementptr inbounds i8, i8* %110, i64 0
%112 = load i8, i8* %111
%113 = call i32 @gui_color_attr_get_flag(i8 zeroext %112)
%114 = icmp sgt i32 %113, 0
br i1 %114, label %115, label %118
115: ; preds = %109
%116 = load i8*, i8** %6
%117 = getelementptr inbounds i8, i8* %116, i32 1
store i8* %117, i8** %6
br label %109
118: ; preds = %109
%119 = load i8*, i8** %6
%120 = getelementptr inbounds i8, i8* %119, i64 0
%121 = load i8, i8* %120
%122 = zext i8 %121 to i32
%123 = icmp ne i32 %122, 0
br i1 %123, label %124, label %133
124: ; preds = %118
%125 = load i8*, i8** %6
%126 = getelementptr inbounds i8, i8* %125, i64 1
%127 = load i8, i8* %126
%128 = zext i8 %127 to i32
%129 = icmp ne i32 %128, 0
br i1 %129, label %130, label %133
130: ; preds = %124
%131 = load i8*, i8** %6
%132 = getelementptr inbounds i8, i8* %131, i64 2
store i8* %132, i8** %6
br label %133
133: ; preds = %130, %124, %118
br label %134
134: ; preds = %133, %107
br label %419
135: ; preds = %47
%136 = load i8*, i8** %6
%137 = getelementptr inbounds i8, i8* %136, i32 1
store i8* %137, i8** %6
%138 = load i8*, i8** %6
%139 = getelementptr inbounds i8, i8* %138, i64 0
%140 = load i8, i8* %139
%141 = zext i8 %140 to i32
%142 = icmp eq i32 %141, 64
br i1 %142, label %143, label %179
143: ; preds = %135
%144 = load i8*, i8** %6
%145 = getelementptr inbounds i8, i8* %144, i32 1
store i8* %145, i8** %6
%146 = load i8*, i8** %6
%147 = getelementptr inbounds i8, i8* %146, i64 0
%148 = load i8, i8* %147
%149 = zext i8 %148 to i32
%150 = icmp ne i32 %149, 0
br i1 %150, label %151, label %178
151: ; preds = %143
%152 = load i8*, i8** %6
%153 = getelementptr inbounds i8, i8* %152, i64 1
%154 = load i8, i8* %153
%155 = zext i8 %154 to i32
%156 = icmp ne i32 %155, 0
br i1 %156, label %157, label %178
157: ; preds = %151
%158 = load i8*, i8** %6
%159 = getelementptr inbounds i8, i8* %158, i64 2
%160 = load i8, i8* %159
%161 = zext i8 %160 to i32
%162 = icmp ne i32 %161, 0
br i1 %162, label %163, label %178
163: ; preds = %157
%164 = load i8*, i8** %6
%165 = getelementptr inbounds i8, i8* %164, i64 3
%166 = load i8, i8* %165
%167 = zext i8 %166 to i32
%168 = icmp ne i32 %167, 0
br i1 %168, label %169, label %178
169: ; preds = %163
%170 = load i8*, i8** %6
%171 = getelementptr inbounds i8, i8* %170, i64 4
%172 = load i8, i8* %171
%173 = zext i8 %172 to i32
%174 = icmp ne i32 %173, 0
br i1 %174, label %175, label %178
175: ; preds = %169
%176 = load i8*, i8** %6
%177 = getelementptr inbounds i8, i8* %176, i64 5
store i8* %177, i8** %6
br label %178
178: ; preds = %175, %169, %163, %157, %151, %143
br label %195
179: ; preds = %135
%180 = load i8*, i8** %6
%181 = getelementptr inbounds i8, i8* %180, i64 0
%182 = load i8, i8* %181
%183 = zext i8 %182 to i32
%184 = icmp ne i32 %183, 0
br i1 %184, label %185, label %194
185: ; preds = %179
%186 = load i8*, i8** %6
%187 = getelementptr inbounds i8, i8* %186, i64 1
%188 = load i8, i8* %187
%189 = zext i8 %188 to i32
%190 = icmp ne i32 %189, 0
br i1 %190, label %191, label %194
191: ; preds = %185
%192 = load i8*, i8** %6
%193 = getelementptr inbounds i8, i8* %192, i64 2
store i8* %193, i8** %6
br label %194
194: ; preds = %191, %185, %179
br label %195
195: ; preds = %194, %178
br label %419
196: ; preds = %47
%197 = load i8*, i8** %6
%198 = getelementptr inbounds i8, i8* %197, i32 1
store i8* %198, i8** %6
%199 = load i8*, i8** %6
%200 = getelementptr inbounds i8, i8* %199, i64 0
%201 = load i8, i8* %200
%202 = zext i8 %201 to i32
%203 = icmp eq i32 %202, 64
br i1 %203, label %204, label %250
204: ; preds = %196
%205 = load i8*, i8** %6
%206 = getelementptr inbounds i8, i8* %205, i32 1
store i8* %206, i8** %6
br label %207
207: ; preds = %213, %204
%208 = load i8*, i8** %6
%209 = getelementptr inbounds i8, i8* %208, i64 0
%210 = load i8, i8* %209
%211 = call i32 @gui_color_attr_get_flag(i8 zeroext %210)
%212 = icmp sgt i32 %211, 0
br i1 %212, label %213, label %216
213: ; preds = %207
%214 = load i8*, i8** %6
%215 = getelementptr inbounds i8, i8* %214, i32 1
store i8* %215, i8** %6
br label %207
216: ; preds = %207
%217 = load i8*, i8** %6
%218 = getelementptr inbounds i8, i8* %217, i64 0
%219 = load i8, i8* %218
%220 = zext i8 %219 to i32
%221 = icmp ne i32 %220, 0
br i1 %221, label %222, label %249
222: ; preds = %216
%223 = load i8*, i8** %6
%224 = getelementptr inbounds i8, i8* %223, i64 1
%225 = load i8, i8* %224
%226 = zext i8 %225 to i32
%227 = icmp ne i32 %226, 0
br i1 %227, label %228, label %249
228: ; preds = %222
%229 = load i8*, i8** %6
%230 = getelementptr inbounds i8, i8* %229, i64 2
%231 = load i8, i8* %230
%232 = zext i8 %231 to i32
%233 = icmp ne i32 %232, 0
br i1 %233, label %234, label %249
234: ; preds = %228
%235 = load i8*, i8** %6
%236 = getelementptr inbounds i8, i8* %235, i64 3
%237 = load i8, i8* %236
%238 = zext i8 %237 to i32
%239 = icmp ne i32 %238, 0
br i1 %239, label %240, label %249
240: ; preds = %234
%241 = load i8*, i8** %6
%242 = getelementptr inbounds i8, i8* %241, i64 4
%243 = load i8, i8* %242
%244 = zext i8 %243 to i32
%245 = icmp ne i32 %244, 0
br i1 %245, label %246, label %249
246: ; preds = %240
%247 = load i8*, i8** %6
%248 = getelementptr inbounds i8, i8* %247, i64 5
store i8* %248, i8** %6
br label %249
249: ; preds = %246, %240, %234, %228, %222, %216
br label %276
250: ; preds = %196
br label %251
251: ; preds = %257, %250
%252 = load i8*, i8** %6
%253 = getelementptr inbounds i8, i8* %252, i64 0
%254 = load i8, i8* %253
%255 = call i32 @gui_color_attr_get_flag(i8 zeroext %254)
%256 = icmp sgt i32 %255, 0
br i1 %256, label %257, label %260
257: ; preds = %251
%258 = load i8*, i8** %6
%259 = getelementptr inbounds i8, i8* %258, i32 1
store i8* %259, i8** %6
br label %251
260: ; preds = %251
%261 = load i8*, i8** %6
%262 = getelementptr inbounds i8, i8* %261, i64 0
%263 = load i8, i8* %262
%264 = zext i8 %263 to i32
%265 = icmp ne i32 %264, 0
br i1 %265, label %266, label %275
266: ; preds = %260
%267 = load i8*, i8** %6
%268 = getelementptr inbounds i8, i8* %267, i64 1
%269 = load i8, i8* %268
%270 = zext i8 %269 to i32
%271 = icmp ne i32 %270, 0
br i1 %271, label %272, label %275
272: ; preds = %266
%273 = load i8*, i8** %6
%274 = getelementptr inbounds i8, i8* %273, i64 2
store i8* %274, i8** %6
br label %275
275: ; preds = %272, %266, %260
br label %276
276: ; preds = %275, %249
%277 = load i8*, i8** %6
%278 = getelementptr inbounds i8, i8* %277, i64 0
%279 = load i8, i8* %278
%280 = zext i8 %279 to i32
%281 = icmp eq i32 %280, 44
br i1 %281, label %288, label %282
282: ; preds = %276
%283 = load i8*, i8** %6
%284 = getelementptr inbounds i8, i8* %283, i64 0
%285 = load i8, i8* %284
%286 = zext i8 %285 to i32
%287 = icmp eq i32 %286, 126
br i1 %287, label %288, label %349
288: ; preds = %282, %276
%289 = load i8*, i8** %6
%290 = getelementptr inbounds i8, i8* %289, i64 1
%291 = load i8, i8* %290
%292 = zext i8 %291 to i32
%293 = icmp eq i32 %292, 64
br i1 %293, label %294, label %330
294: ; preds = %288
%295 = load i8*, i8** %6
%296 = getelementptr inbounds i8, i8* %295, i64 2
store i8* %296, i8** %6
%297 = load i8*, i8** %6
%298 = getelementptr inbounds i8, i8* %297, i64 0
%299 = load i8, i8* %298
%300 = zext i8 %299 to i32
%301 = icmp ne i32 %300, 0
br i1 %301, label %302, label %329
302: ; preds = %294
%303 = load i8*, i8** %6
%304 = getelementptr inbounds i8, i8* %303, i64 1
%305 = load i8, i8* %304
%306 = zext i8 %305 to i32
%307 = icmp ne i32 %306, 0
br i1 %307, label %308, label %329
308: ; preds = %302
%309 = load i8*, i8** %6
%310 = getelementptr inbounds i8, i8* %309, i64 2
%311 = load i8, i8* %310
%312 = zext i8 %311 to i32
%313 = icmp ne i32 %312, 0
br i1 %313, label %314, label %329
314: ; preds = %308
%315 = load i8*, i8** %6
%316 = getelementptr inbounds i8, i8* %315, i64 3
%317 = load i8, i8* %316
%318 = zext i8 %317 to i32
%319 = icmp ne i32 %318, 0
br i1 %319, label %320, label %329
320: ; preds = %314
%321 = load i8*, i8** %6
%322 = getelementptr inbounds i8, i8* %321, i64 4
%323 = load i8, i8* %322
%324 = zext i8 %323 to i32
%325 = icmp ne i32 %324, 0
br i1 %325, label %326, label %329
326: ; preds = %320
%327 = load i8*, i8** %6
%328 = getelementptr inbounds i8, i8* %327, i64 5
store i8* %328, i8** %6
br label %329
329: ; preds = %326, %320, %314, %308, %302, %294
br label %348
330: ; preds = %288
%331 = load i8*, i8** %6
%332 = getelementptr inbounds i8, i8* %331, i32 1
store i8* %332, i8** %6
%333 = load i8*, i8** %6
%334 = getelementptr inbounds i8, i8* %333, i64 0
%335 = load i8, i8* %334
%336 = zext i8 %335 to i32
%337 = icmp ne i32 %336, 0
br i1 %337, label %338, label %347
338: ; preds = %330
%339 = load i8*, i8** %6
%340 = getelementptr inbounds i8, i8* %339, i64 1
%341 = load i8, i8* %340
%342 = zext i8 %341 to i32
%343 = icmp ne i32 %342, 0
br i1 %343, label %344, label %347
344: ; preds = %338
%345 = load i8*, i8** %6
%346 = getelementptr inbounds i8, i8* %345, i64 2
store i8* %346, i8** %6
br label %347
347: ; preds = %344, %338, %330
br label %348
348: ; preds = %347, %329
br label %349
349: ; preds = %348, %282
br label %419
350: ; preds = %47
%351 = load i8*, i8** %6
%352 = getelementptr inbounds i8, i8* %351, i32 1
store i8* %352, i8** %6
%353 = load i8*, i8** %6
%354 = getelementptr inbounds i8, i8* %353, i64 0
%355 = load i8, i8* %354
%356 = call i32 @isdigit(i8 zeroext %355)
%357 = icmp ne i32 %356, 0
br i1 %357, label %358, label %385
358: ; preds = %350
%359 = load i8*, i8** %6
%360 = getelementptr inbounds i8, i8* %359, i64 1
%361 = load i8, i8* %360
%362 = call i32 @isdigit(i8 zeroext %361)
%363 = icmp ne i32 %362, 0
br i1 %363, label %364, label %385
364: ; preds = %358
%365 = load i8*, i8** %6
%366 = getelementptr inbounds i8, i8* %365, i64 2
%367 = load i8, i8* %366
%368 = call i32 @isdigit(i8 zeroext %367)
%369 = icmp ne i32 %368, 0
br i1 %369, label %370, label %385
370: ; preds = %364
%371 = load i8*, i8** %6
%372 = getelementptr inbounds i8, i8* %371, i64 3
%373 = load i8, i8* %372
%374 = call i32 @isdigit(i8 zeroext %373)
%375 = icmp ne i32 %374, 0
br i1 %375, label %376, label %385
376: ; preds = %370
%377 = load i8*, i8** %6
%378 = getelementptr inbounds i8, i8* %377, i64 4
%379 = load i8, i8* %378
%380 = call i32 @isdigit(i8 zeroext %379)
%381 = icmp ne i32 %380, 0
br i1 %381, label %382, label %385
382: ; preds = %376
%383 = load i8*, i8** %6
%384 = getelementptr inbounds i8, i8* %383, i64 5
store i8* %384, i8** %6
br label %385
385: ; preds = %382, %376, %370, %364, %358, %350
br label %419
386: ; preds = %47
%387 = load i8*, i8** %6
%388 = getelementptr inbounds i8, i8* %387, i32 1
store i8* %388, i8** %6
br label %419
389: ; preds = %47
%390 = load i8*, i8** %6
%391 = getelementptr inbounds i8, i8* %390, i32 1
store i8* %391, i8** %6
%392 = load i8*, i8** %6
%393 = getelementptr inbounds i8, i8* %392, i64 0
%394 = load i8, i8* %393
%395 = zext i8 %394 to i32
switch i32 %395, label %399 [
i32 70, label %396
i32 66, label %396
i32 68, label %396
i32 95, label %396
i32 45, label %396
i32 35, label %396
i32 105, label %396
i32 108, label %396
]
396: ; preds = %389, %389, %389, %389, %389, %389, %389, %389
%397 = load i8*, i8** %6
%398 = getelementptr inbounds i8, i8* %397, i32 1
store i8* %398, i8** %6
br label %399
399: ; preds = %389, %396
br label %419
400: ; preds = %47
%401 = load i8*, i8** %6
%402 = getelementptr inbounds i8, i8* %401, i32 1
store i8* %402, i8** %6
br label %419
403: ; preds = %47
%404 = load i8*, i8** %6
%405 = getelementptr inbounds i8, i8* %404, i64 0
%406 = load i8, i8* %405
%407 = call i32 @isdigit(i8 zeroext %406)
%408 = icmp ne i32 %407, 0
br i1 %408, label %409, label %418
409: ; preds = %403
%410 = load i8*, i8** %6
%411 = getelementptr inbounds i8, i8* %410, i64 1
%412 = load i8, i8* %411
%413 = call i32 @isdigit(i8 zeroext %412)
%414 = icmp ne i32 %413, 0
br i1 %414, label %415, label %418
415: ; preds = %409
%416 = load i8*, i8** %6
%417 = getelementptr inbounds i8, i8* %416, i64 2
store i8* %417, i8** %6
br label %418
418: ; preds = %415, %409, %403
br label %419
419: ; preds = %418, %400, %399, %386, %385, %349, %195, %134
%420 = load i8*, i8** %5
%421 = icmp ne i8* %420, null
br i1 %421, label %422, label %438
422: ; preds = %419
%423 = load i8*, i8** %5
%424 = getelementptr inbounds i8, i8* %423, i64 0
%425 = load i8, i8* %424
%426 = sext i8 %425 to i32
%427 = icmp ne i32 %426, 0
br i1 %427, label %428, label %438
428: ; preds = %422
%429 = load i8*, i8** %5
%430 = getelementptr inbounds i8, i8* %429, i64 0
%431 = load i8, i8* %430
%432 = load i8*, i8** %7
%433 = load i32, i32* %9
%434 = sext i32 %433 to i64
%435 = getelementptr inbounds i8, i8* %432, i64 %434
store i8 %431, i8* %435
%436 = load i32, i32* %9
%437 = add nsw i32 %436, 1
store i32 %437, i32* %9
br label %438
438: ; preds = %428, %422, %419
br label %512
439: ; preds = %42, %42
%440 = load i8*, i8** %6
%441 = getelementptr inbounds i8, i8* %440, i32 1
store i8* %441, i8** %6
%442 = load i8*, i8** %6
%443 = getelementptr inbounds i8, i8* %442, i64 0
%444 = load i8, i8* %443
%445 = icmp ne i8 %444, 0
br i1 %445, label %446, label %449
446: ; preds = %439
%447 = load i8*, i8** %6
%448 = getelementptr inbounds i8, i8* %447, i32 1
store i8* %448, i8** %6
br label %449
449: ; preds = %446, %439
%450 = load i8*, i8** %5
%451 = icmp ne i8* %450, null
br i1 %451, label %452, label %468
452: ; preds = %449
%453 = load i8*, i8** %5
%454 = getelementptr inbounds i8, i8* %453, i64 0
%455 = load i8, i8* %454
%456 = sext i8 %455 to i32
%457 = icmp ne i32 %456, 0
br i1 %457, label %458, label %468
458: ; preds = %452
%459 = load i8*, i8** %5
%460 = getelementptr inbounds i8, i8* %459, i64 0
%461 = load i8, i8* %460
%462 = load i8*, i8** %7
%463 = load i32, i32* %9
%464 = sext i32 %463 to i64
%465 = getelementptr inbounds i8, i8* %462, i64 %464
store i8 %461, i8* %465
%466 = load i32, i32* %9
%467 = add nsw i32 %466, 1
store i32 %467, i32* %9
br label %468
468: ; preds = %458, %452, %449
br label %512
469: ; preds = %42
%470 = load i8*, i8** %6
%471 = getelementptr inbounds i8, i8* %470, i32 1
store i8* %471, i8** %6
%472 = load i8*, i8** %5
%473 = icmp ne i8* %472, null
br i1 %473, label %474, label %490
474: ; preds = %469
%475 = load i8*, i8** %5
%476 = getelementptr inbounds i8, i8* %475, i64 0
%477 = load i8, i8* %476
%478 = sext i8 %477 to i32
%479 = icmp ne i32 %478, 0
br i1 %479, label %480, label %490
480: ; preds = %474
%481 = load i8*, i8** %5
%482 = getelementptr inbounds i8, i8* %481, i64 0
%483 = load i8, i8* %482
%484 = load i8*, i8** %7
%485 = load i32, i32* %9
%486 = sext i32 %485 to i64
%487 = getelementptr inbounds i8, i8* %484, i64 %486
store i8 %483, i8* %487
%488 = load i32, i32* %9
%489 = add nsw i32 %488, 1
store i32 %489, i32* %9
br label %490
490: ; preds = %480, %474, %469
br label %512
491: ; preds = %42
%492 = load i8*, i8** %6
%493 = call i32 @utf8_char_size(i8* %492)
store i32 %493, i32* %10
%494 = load i32, i32* %10
%495 = icmp eq i32 %494, 0
br i1 %495, label %496, label %497
496: ; preds = %491
store i32 1, i32* %10
br label %497
497: ; preds = %496, %491
%498 = load i8*, i8** %7
%499 = load i32, i32* %9
%500 = sext i32 %499 to i64
%501 = getelementptr inbounds i8, i8* %498, i64 %500
%502 = load i8*, i8** %6
%503 = load i32, i32* %10
%504 = call i32 @memcpy(i8* %501, i8* %502, i32 %503)
%505 = load i32, i32* %10
%506 = load i32, i32* %9
%507 = add nsw i32 %506, %505
store i32 %507, i32* %9
%508 = load i32, i32* %10
%509 = load i8*, i8** %6
%510 = sext i32 %508 to i64
%511 = getelementptr inbounds i8, i8* %509, i64 %510
store i8* %511, i8** %6
br label %512
512: ; preds = %497, %490, %468, %438
br label %26
513: ; preds = %40
%514 = load i8*, i8** %7
%515 = load i32, i32* %9
%516 = sext i32 %515 to i64
%517 = getelementptr inbounds i8, i8* %514, i64 %516
store i8 0, i8* %517
%518 = load i8*, i8** %7
store i8* %518, i8** %3
br label %519
519: ; preds = %513, %23, %13
%520 = load i8*, i8** %3
ret i8* %520
}

LLVM IR (-O2):
define i8* @gui_color_decode(i8* %0, i8* %1) {
%3 = icmp eq i8* %0, null
br i1 %3, label %293, label %4
4: ; preds = %2
%5 = tail call i32 @strlen(i8* %0)
%6 = shl nsw i32 %5, 1
%7 = or i32 %6, 1
%8 = tail call i8* @malloc(i32 %7)
%9 = icmp eq i8* %8, null
br i1 %9, label %293, label %10
10: ; preds = %4
%11 = load i8, i8* %0
%12 = icmp ne i8 %11, 0
%13 = icmp sgt i32 %5, 0
%14 = select i1 %12, i1 %13, i1 false
br i1 %14, label %15, label %289
15: ; preds = %10
%16 = icmp eq i8* %1, null
br label %17
17: ; preds = %15, %282
%18 = phi i8 [ %11, %15 ], [ %285, %282 ]
%19 = phi i32 [ 0, %15 ], [ %284, %282 ]
%20 = phi i8* [ %0, %15 ], [ %283, %282 ]
switch i8 %18, label %272 [
i8 25, label %21
i8 26, label %250
i8 27, label %250
i8 28, label %263
]
21: ; preds = %17
%22 = getelementptr inbounds i8, i8* %20, i64 1
%23 = load i8, i8* %22
switch i8 %23, label %231 [
i8 70, label %24
i8 66, label %76
i8 42, label %107
i8 64, label %195
i8 69, label %222
i8 98, label %224
i8 28, label %229
]
24: ; preds = %21
%25 = getelementptr inbounds i8, i8* %20, i64 2
%26 = load i8, i8* %25
%27 = icmp eq i8 %26, 64
br i1 %27, label %32, label %28
28: ; preds = %24
%29 = tail call i32 @gui_color_attr_get_flag(i8 zeroext %26)
%30 = icmp sgt i32 %29, 0
%31 = getelementptr inbounds i8, i8* %20, i64 3
br i1 %30, label %60, label %66
32: ; preds = %24
%33 = getelementptr inbounds i8, i8* %20, i64 3
br label %34
34: ; preds = %34, %32
%35 = phi i8* [ %33, %32 ], [ %39, %34 ]
%36 = load i8, i8* %35
%37 = tail call i32 @gui_color_attr_get_flag(i8 zeroext %36)
%38 = icmp sgt i32 %37, 0
%39 = getelementptr inbounds i8, i8* %35, i64 1
br i1 %38, label %34, label %40
40: ; preds = %34
%41 = load i8, i8* %35
%42 = icmp eq i8 %41, 0
br i1 %42, label %241, label %43
43: ; preds = %40
%44 = load i8, i8* %39
%45 = icmp eq i8 %44, 0
br i1 %45, label %241, label %46
46: ; preds = %43
%47 = getelementptr inbounds i8, i8* %35, i64 2
%48 = load i8, i8* %47
%49 = icmp eq i8 %48, 0
br i1 %49, label %241, label %50
50: ; preds = %46
%51 = getelementptr inbounds i8, i8* %35, i64 3
%52 = load i8, i8* %51
%53 = icmp eq i8 %52, 0
br i1 %53, label %241, label %54
54: ; preds = %50
%55 = getelementptr inbounds i8, i8* %35, i64 4
%56 = load i8, i8* %55
%57 = icmp eq i8 %56, 0
%58 = select i1 %57, i64 0, i64 5
%59 = getelementptr i8, i8* %35, i64 %58
br label %241
60: ; preds = %28, %60
%61 = phi i8* [ %65, %60 ], [ %31, %28 ]
%62 = load i8, i8* %61
%63 = tail call i32 @gui_color_attr_get_flag(i8 zeroext %62)
%64 = icmp sgt i32 %63, 0
%65 = getelementptr inbounds i8, i8* %61, i64 1
br i1 %64, label %60, label %66
66: ; preds = %60, %28
%67 = phi i8* [ %25, %28 ], [ %61, %60 ]
%68 = phi i8* [ %31, %28 ], [ %65, %60 ]
%69 = load i8, i8* %67
%70 = icmp eq i8 %69, 0
br i1 %70, label %241, label %71
71: ; preds = %66
%72 = load i8, i8* %68
%73 = icmp eq i8 %72, 0
%74 = select i1 %73, i64 0, i64 2
%75 = getelementptr i8, i8* %67, i64 %74
br label %241
76: ; preds = %21
%77 = getelementptr inbounds i8, i8* %20, i64 2
%78 = load i8, i8* %77
switch i8 %78, label %101 [
i8 64, label %79
i8 0, label %241
]
79: ; preds = %76
%80 = getelementptr inbounds i8, i8* %20, i64 3
%81 = load i8, i8* %80
%82 = icmp eq i8 %81, 0
br i1 %82, label %241, label %83
83: ; preds = %79
%84 = getelementptr inbounds i8, i8* %20, i64 4
%85 = load i8, i8* %84
%86 = icmp eq i8 %85, 0
br i1 %86, label %241, label %87
87: ; preds = %83
%88 = getelementptr inbounds i8, i8* %20, i64 5
%89 = load i8, i8* %88
%90 = icmp eq i8 %89, 0
br i1 %90, label %241, label %91
91: ; preds = %87
%92 = getelementptr inbounds i8, i8* %20, i64 6
%93 = load i8, i8* %92
%94 = icmp eq i8 %93, 0
br i1 %94, label %241, label %95
95: ; preds = %91
%96 = getelementptr inbounds i8, i8* %20, i64 7
%97 = load i8, i8* %96
%98 = icmp eq i8 %97, 0
%99 = getelementptr inbounds i8, i8* %20, i64 8
%100 = select i1 %98, i8* %80, i8* %99
br label %241
101: ; preds = %76
%102 = getelementptr inbounds i8, i8* %20, i64 3
%103 = load i8, i8* %102
%104 = icmp eq i8 %103, 0
%105 = getelementptr inbounds i8, i8* %20, i64 4
%106 = select i1 %104, i8* %77, i8* %105
br label %241
107: ; preds = %21
%108 = getelementptr inbounds i8, i8* %20, i64 2
%109 = load i8, i8* %108
%110 = icmp eq i8 %109, 64
br i1 %110, label %115, label %111
111: ; preds = %107
%112 = tail call i32 @gui_color_attr_get_flag(i8 zeroext %109)
%113 = icmp sgt i32 %112, 0
%114 = getelementptr inbounds i8, i8* %20, i64 3
br i1 %113, label %139, label %145
115: ; preds = %107
%116 = getelementptr inbounds i8, i8* %20, i64 3
br label %117
117: ; preds = %117, %115
%118 = phi i8* [ %116, %115 ], [ %122, %117 ]
%119 = load i8, i8* %118
%120 = tail call i32 @gui_color_attr_get_flag(i8 zeroext %119)
%121 = icmp sgt i32 %120, 0
%122 = getelementptr inbounds i8, i8* %118, i64 1
br i1 %121, label %117, label %123
123: ; preds = %117
%124 = load i8, i8* %118
%125 = icmp eq i8 %124, 0
br i1 %125, label %241, label %126
126: ; preds = %123
%127 = load i8, i8* %122
%128 = icmp eq i8 %127, 0
br i1 %128, label %161, label %129
129: ; preds = %126
%130 = getelementptr inbounds i8, i8* %118, i64 2
%131 = load i8, i8* %130
%132 = icmp eq i8 %131, 0
br i1 %132, label %158, label %133
133: ; preds = %129
%134 = getelementptr inbounds i8, i8* %118, i64 3
%135 = load i8, i8* %134
%136 = icmp eq i8 %135, 0
br i1 %136, label %158, label %137
137: ; preds = %133
%138 = getelementptr inbounds i8, i8* %118, i64 4
br label %150
139: ; preds = %111, %139
%140 = phi i8* [ %144, %139 ], [ %114, %111 ]
%141 = load i8, i8* %140
%142 = tail call i32 @gui_color_attr_get_flag(i8 zeroext %141)
%143 = icmp sgt i32 %142, 0
%144 = getelementptr inbounds i8, i8* %140, i64 1
br i1 %143, label %139, label %145
145: ; preds = %139, %111
%146 = phi i8* [ %108, %111 ], [ %140, %139 ]
%147 = phi i8* [ %114, %111 ], [ %144, %139 ]
%148 = load i8, i8* %146
%149 = icmp eq i8 %148, 0
br i1 %149, label %241, label %150
150: ; preds = %145, %137
%151 = phi i8* [ %138, %137 ], [ %147, %145 ]
%152 = phi i64 [ 5, %137 ], [ 2, %145 ]
%153 = phi i8* [ %118, %137 ], [ %146, %145 ]
%154 = load i8, i8* %151
%155 = icmp eq i8 %154, 0
%156 = select i1 %155, i64 0, i64 %152
%157 = getelementptr i8, i8* %153, i64 %156
br label %158
158: ; preds = %150, %133, %129
%159 = phi i8* [ %118, %133 ], [ %118, %129 ], [ %157, %150 ]
%160 = load i8, i8* %159
br label %161
161: ; preds = %158, %126
%162 = phi i8 [ %160, %158 ], [ %124, %126 ]
%163 = phi i8* [ %159, %158 ], [ %118, %126 ]
switch i8 %162, label %241 [
i8 44, label %164
i8 126, label %164
]
164: ; preds = %161, %161
%165 = getelementptr inbounds i8, i8* %163, i64 1
%166 = load i8, i8* %165
switch i8 %166, label %189 [
i8 64, label %167
i8 0, label %241
]
167: ; preds = %164
%168 = getelementptr inbounds i8, i8* %163, i64 2
%169 = load i8, i8* %168
%170 = icmp eq i8 %169, 0
br i1 %170, label %241, label %171
171: ; preds = %167
%172 = getelementptr inbounds i8, i8* %163, i64 3
%173 = load i8, i8* %172
%174 = icmp eq i8 %173, 0
br i1 %174, label %241, label %175
175: ; preds = %171
%176 = getelementptr inbounds i8, i8* %163, i64 4
%177 = load i8, i8* %176
%178 = icmp eq i8 %177, 0
br i1 %178, label %241, label %179
179: ; preds = %175
%180 = getelementptr inbounds i8, i8* %163, i64 5
%181 = load i8, i8* %180
%182 = icmp eq i8 %181, 0
br i1 %182, label %241, label %183
183: ; preds = %179
%184 = getelementptr inbounds i8, i8* %163, i64 6
%185 = load i8, i8* %184
%186 = icmp eq i8 %185, 0
%187 = getelementptr inbounds i8, i8* %163, i64 7
%188 = select i1 %186, i8* %168, i8* %187
br label %241
189: ; preds = %164
%190 = getelementptr inbounds i8, i8* %163, i64 2
%191 = load i8, i8* %190
%192 = icmp eq i8 %191, 0
%193 = getelementptr inbounds i8, i8* %163, i64 3
%194 = select i1 %192, i8* %165, i8* %193
br label %241
195: ; preds = %21
%196 = getelementptr inbounds i8, i8* %20, i64 2
%197 = load i8, i8* %196
%198 = tail call i32 @isdigit(i8 zeroext %197)
%199 = icmp eq i32 %198, 0
br i1 %199, label %241, label %200
200: ; preds = %195
%201 = getelementptr inbounds i8, i8* %20, i64 3
%202 = load i8, i8* %201
%203 = tail call i32 @isdigit(i8 zeroext %202)
%204 = icmp eq i32 %203, 0
br i1 %204, label %241, label %205
205: ; preds = %200
%206 = getelementptr inbounds i8, i8* %20, i64 4
%207 = load i8, i8* %206
%208 = tail call i32 @isdigit(i8 zeroext %207)
%209 = icmp eq i32 %208, 0
br i1 %209, label %241, label %210
210: ; preds = %205
%211 = getelementptr inbounds i8, i8* %20, i64 5
%212 = load i8, i8* %211
%213 = tail call i32 @isdigit(i8 zeroext %212)
%214 = icmp eq i32 %213, 0
br i1 %214, label %241, label %215
215: ; preds = %210
%216 = getelementptr inbounds i8, i8* %20, i64 6
%217 = load i8, i8* %216
%218 = tail call i32 @isdigit(i8 zeroext %217)
%219 = icmp eq i32 %218, 0
%220 = getelementptr inbounds i8, i8* %20, i64 7
%221 = select i1 %219, i8* %196, i8* %220
br label %241
222: ; preds = %21
%223 = getelementptr inbounds i8, i8* %20, i64 2
br label %241
224: ; preds = %21
%225 = getelementptr inbounds i8, i8* %20, i64 2
%226 = load i8, i8* %225
switch i8 %226, label %241 [
i8 70, label %227
i8 66, label %227
i8 68, label %227
i8 95, label %227
i8 45, label %227
i8 35, label %227
i8 105, label %227
i8 108, label %227
]
227: ; preds = %224, %224, %224, %224, %224, %224, %224, %224
%228 = getelementptr inbounds i8, i8* %20, i64 3
br label %241
229: ; preds = %21
%230 = getelementptr inbounds i8, i8* %20, i64 2
br label %241
231: ; preds = %21
%232 = tail call i32 @isdigit(i8 zeroext %23)
%233 = icmp eq i32 %232, 0
br i1 %233, label %241, label %234
234: ; preds = %231
%235 = getelementptr inbounds i8, i8* %20, i64 2
%236 = load i8, i8* %235
%237 = tail call i32 @isdigit(i8 zeroext %236)
%238 = icmp eq i32 %237, 0
%239 = getelementptr inbounds i8, i8* %20, i64 3
%240 = select i1 %238, i8* %22, i8* %239
br label %241
241: ; preds = %164, %123, %145, %234, %215, %189, %183, %101, %95, %71, %54, %161, %76, %231, %227, %224, %195, %200, %205, %210, %167, %171, %175, %179, %91, %87, %83, %79, %50, %46, %43, %40, %66, %229, %222
%242 = phi i8* [ %22, %231 ], [ %230, %229 ], [ %225, %224 ], [ %228, %227 ], [ %223, %222 ], [ %196, %210 ], [ %196, %205 ], [ %196, %200 ], [ %196, %195 ], [ %168, %179 ], [ %168, %175 ], [ %168, %171 ], [ %168, %167 ], [ %80, %91 ], [ %80, %87 ], [ %80, %83 ], [ %80, %79 ], [ %35, %50 ], [ %35, %46 ], [ %35, %43 ], [ %35, %40 ], [ %67, %66 ], [ %59, %54 ], [ %75, %71 ], [ %100, %95 ], [ %77, %76 ], [ %106, %101 ], [ %163, %161 ], [ %188, %183 ], [ %194, %189 ], [ %221, %215 ], [ %240, %234 ], [ %146, %145 ], [ %118, %123 ], [ %165, %164 ]
br i1 %16, label %282, label %243
243: ; preds = %241
%244 = load i8, i8* %1
%245 = icmp eq i8 %244, 0
br i1 %245, label %282, label %246
246: ; preds = %243
%247 = sext i32 %19 to i64
%248 = getelementptr inbounds i8, i8* %8, i64 %247
store i8 %244, i8* %248
%249 = add nsw i32 %19, 1
br label %282
250: ; preds = %17, %17
%251 = getelementptr inbounds i8, i8* %20, i64 1
%252 = load i8, i8* %251
%253 = icmp eq i8 %252, 0
%254 = getelementptr inbounds i8, i8* %20, i64 2
%255 = select i1 %253, i8* %251, i8* %254
br i1 %16, label %282, label %256
256: ; preds = %250
%257 = load i8, i8* %1
%258 = icmp eq i8 %257, 0
br i1 %258, label %282, label %259
259: ; preds = %256
%260 = sext i32 %19 to i64
%261 = getelementptr inbounds i8, i8* %8, i64 %260
store i8 %257, i8* %261
%262 = add nsw i32 %19, 1
br label %282
263: ; preds = %17
%264 = getelementptr inbounds i8, i8* %20, i64 1
br i1 %16, label %282, label %265
265: ; preds = %263
%266 = load i8, i8* %1
%267 = icmp eq i8 %266, 0
br i1 %267, label %282, label %268
268: ; preds = %265
%269 = sext i32 %19 to i64
%270 = getelementptr inbounds i8, i8* %8, i64 %269
store i8 %266, i8* %270
%271 = add nsw i32 %19, 1
br label %282
272: ; preds = %17
%273 = tail call i32 @utf8_char_size(i8* %20)
%274 = icmp eq i32 %273, 0
%275 = select i1 %274, i32 1, i32 %273
%276 = sext i32 %19 to i64
%277 = getelementptr inbounds i8, i8* %8, i64 %276
%278 = tail call i32 @memcpy(i8* %277, i8* %20, i32 %275)
%279 = add nsw i32 %275, %19
%280 = sext i32 %275 to i64
%281 = getelementptr inbounds i8, i8* %20, i64 %280
br label %282
282: ; preds = %263, %265, %268, %250, %256, %259, %241, %243, %246, %272
%283 = phi i8* [ %281, %272 ], [ %264, %268 ], [ %264, %265 ], [ %264, %263 ], [ %255, %259 ], [ %255, %256 ], [ %255, %250 ], [ %242, %246 ], [ %242, %243 ], [ %242, %241 ]
%284 = phi i32 [ %279, %272 ], [ %271, %268 ], [ %19, %265 ], [ %19, %263 ], [ %262, %259 ], [ %19, %256 ], [ %19, %250 ], [ %249, %246 ], [ %19, %243 ], [ %19, %241 ]
%285 = load i8, i8* %283
%286 = icmp ne i8 %285, 0
%287 = icmp slt i32 %284, %6
%288 = select i1 %286, i1 %287, i1 false
br i1 %288, label %17, label %289
289: ; preds = %282, %10
%290 = phi i32 [ 0, %10 ], [ %284, %282 ]
%291 = sext i32 %290 to i64
%292 = getelementptr inbounds i8, i8* %8, i64 %291
store i8 0, i8* %292
br label %293
293: ; preds = %4, %2, %289
%294 = phi i8* [ %8, %289 ], [ null, %2 ], [ null, %4 ]
ret i8* %294
}