#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 */
unsigned int onecodepoint(unsigned char **);
void rescape(char **sourcep, char **targetp, char *endsource, char *endtarget) {
  unsigned char *s = (unsigned char *)*sourcep;
  unsigned char *t = (unsigned char *)*targetp;
  for (; *s && s < (unsigned char *)endsource && t < (unsigned char *)endtarget;
       ++s) {
    unsigned int c = *s;
    if (c == '\\') {
      switch (c = *(++s)) {
      case 'a':
        c = '\n';
        break;
      case 't':
        c = '\t';
        break;
      case 'r':
        c = '\r';
        break;
      case 'f':
        c = '\f';
        break;
      case 'n':
        c = '\n';
        break;
      case '0':
      case '1':
      case '2':
      case '3':
      case '4':
      case '5':
      case '6':
      case '7': {
        c = (*s - '0');
        unsigned char *e = s + 3;
        while (++s < e && '0' <= *s && *s <= '7')
          c = (c << 3) + (*s - '0');
        s--;
        break;
      }
      case 'u':
      case 'U': {
        unsigned char *e = s + (c == 'u' ? 5 : 9);
        c = 0;
        while (++s < e) {
          switch (*s) {
          case '0':
          case '1':
          case '2':
          case '3':
          case '4':
          case '5':
          case '6':
          case '7':
          case '8':
          case '9':
            c = (c << 4) + (*s - '0');
            break;
          case 'a':
          case 'b':
          case 'c':
          case 'd':
          case 'e':
          case 'f':
            c = (c << 4) + (*s - 'a' + 10);
            break;
          case 'A':
          case 'B':
          case 'C':
          case 'D':
          case 'E':
          case 'F':
            c = (c << 4) + (*s - 'A' + 10);
            break;
          default:
            e = s;
          }
        }
        s--;
        break;
      }
      default:
        c = onecodepoint(&s);
      }
    }
    if (c == 0) {
      *(t++) = 0xC0;
      *(t++) = 0x80;
    } else if (c <= 0x7F) {
      *(t++) = c;
    } else if (c <= 0x7FF) {
      *(t++) = 0xC0 | (c >> 6);
      *(t++) = 0x80 | (c & 0x3F);
    } else if (c <= 0xFFFF) {
      *(t++) = 0xE0 | (c >> 12);
      *(t++) = 0x80 | ((c >> 6) & 0x3F);
      *(t++) = 0x80 | (c & 0x3F);
    } else if (c <= 0x1FFFFF) {
      *(t++) = 0xF0 | (c >> 18);
      *(t++) = 0x80 | ((c >> 12) & 0x3F);
      *(t++) = 0x80 | ((c >> 6) & 0x3F);
      *(t++) = 0x80 | (c & 0x3F);
    } else if (c <= 0x3FFFFFF) {
      *(t++) = 0xF8 | (c >> 24);
      *(t++) = 0x80 | ((c >> 18) & 0x3F);
      *(t++) = 0x80 | ((c >> 12) & 0x3F);
      *(t++) = 0x80 | ((c >> 6) & 0x3F);
      *(t++) = 0x80 | (c & 0x3F);
    } else if (c <= 0x7FFFFFFF) {
      *(t++) = 0xFC | (c >> 30);
      *(t++) = 0x80 | ((c >> 24) & 0x3F);
      *(t++) = 0x80 | ((c >> 18) & 0x3F);
      *(t++) = 0x80 | ((c >> 12) & 0x3F);
      *(t++) = 0x80 | ((c >> 6) & 0x3F);
      *(t++) = 0x80 | (c & 0x3F);
    }
  }
  *sourcep = (char *)s;
  *targetp = (char *)t;
}


x86 assembly (clang, -O0):
<rescape>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x30(%rbp)
mov    -0x28(%rbp),%rax
movzbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x49(%rbp)
je     1174 <rescape+0x64>
mov    -0x28(%rbp),%rcx
xor    %eax,%eax
cmp    -0x18(%rbp),%rcx
mov    %al,-0x49(%rbp)
jae    1174 <rescape+0x64>
mov    -0x30(%rbp),%rax
cmp    -0x20(%rbp),%rax
setb   %al
mov    %al,-0x49(%rbp)
mov    -0x49(%rbp),%al
test   $0x1,%al
jne    1184 <rescape+0x74>
jmp    1703 <rescape+0x5f3>
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
mov    %eax,-0x34(%rbp)
cmpl   $0x5c,-0x34(%rbp)
jne    13ac <rescape+0x29c>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
movzbl 0x1(%rax),%eax
mov    %eax,-0x34(%rbp)
add    $0xffffffd0,%eax
mov    %eax,%ecx
mov    %rcx,-0x58(%rbp)
sub    $0x45,%eax
ja     139b <rescape+0x28b>
mov    -0x58(%rbp),%rax
lea    0xe35(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movl   $0xa,-0x34(%rbp)
jmp    13a7 <rescape+0x297>
movl   $0x9,-0x34(%rbp)
jmp    13a7 <rescape+0x297>
movl   $0xd,-0x34(%rbp)
jmp    13a7 <rescape+0x297>
movl   $0xc,-0x34(%rbp)
jmp    13a7 <rescape+0x297>
movl   $0xa,-0x34(%rbp)
jmp    13a7 <rescape+0x297>
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
sub    $0x30,%eax
mov    %eax,-0x34(%rbp)
mov    -0x28(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x40(%rbp)
mov    -0x28(%rbp),%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
xor    %eax,%eax
cmp    -0x40(%rbp),%rcx
mov    %al,-0x59(%rbp)
jae    126d <rescape+0x15d>
mov    -0x28(%rbp),%rax
movzbl (%rax),%edx
xor    %eax,%eax
mov    $0x30,%ecx
cmp    %edx,%ecx
mov    %al,-0x59(%rbp)
jg     126d <rescape+0x15d>
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x37,%eax
setle  %al
mov    %al,-0x59(%rbp)
mov    -0x59(%rbp),%al
test   $0x1,%al
jne    127d <rescape+0x16d>
jmp    1297 <rescape+0x187>
mov    -0x34(%rbp),%eax
shl    $0x3,%eax
mov    -0x28(%rbp),%rcx
movzbl (%rcx),%ecx
sub    $0x30,%ecx
add    %ecx,%eax
mov    %eax,-0x34(%rbp)
jmp    1229 <rescape+0x119>
mov    -0x28(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x28(%rbp)
jmp    13a7 <rescape+0x297>
mov    -0x28(%rbp),%rax
mov    -0x34(%rbp),%esi
mov    $0x9,%ecx
mov    $0x5,%edx
cmp    $0x75,%esi
cmove  %edx,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x48(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
cmp    -0x48(%rbp),%rax
jae    138a <rescape+0x27a>
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
mov    %eax,-0x60(%rbp)
add    $0xffffffd0,%eax
sub    $0xa,%eax
jb     1329 <rescape+0x219>
jmp    1301 <rescape+0x1f1>
mov    -0x60(%rbp),%eax
add    $0xffffffbf,%eax
sub    $0x6,%eax
jb     1360 <rescape+0x250>
jmp    1315 <rescape+0x205>
mov    -0x60(%rbp),%eax
add    $0xffffff9f,%eax
sub    $0x6,%eax
jb     1343 <rescape+0x233>
jmp    137d <rescape+0x26d>
mov    -0x34(%rbp),%eax
shl    $0x4,%eax
mov    -0x28(%rbp),%rcx
movzbl (%rcx),%ecx
sub    $0x30,%ecx
add    %ecx,%eax
mov    %eax,-0x34(%rbp)
jmp    1385 <rescape+0x275>
mov    -0x34(%rbp),%eax
shl    $0x4,%eax
mov    -0x28(%rbp),%rcx
movzbl (%rcx),%ecx
sub    $0x61,%ecx
add    $0xa,%ecx
add    %ecx,%eax
mov    %eax,-0x34(%rbp)
jmp    1385 <rescape+0x275>
mov    -0x34(%rbp),%eax
shl    $0x4,%eax
mov    -0x28(%rbp),%rcx
movzbl (%rcx),%ecx
sub    $0x41,%ecx
add    $0xa,%ecx
add    %ecx,%eax
mov    %eax,-0x34(%rbp)
jmp    1385 <rescape+0x275>
mov    -0x28(%rbp),%rax
mov    %rax,-0x48(%rbp)
jmp    12d0 <rescape+0x1c0>
mov    -0x28(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x28(%rbp)
jmp    13a7 <rescape+0x297>
lea    -0x28(%rbp),%rdi
call   1030 <onecodepoint@plt>
mov    %eax,-0x34(%rbp)
jmp    13ac <rescape+0x29c>
cmpl   $0x0,-0x34(%rbp)
jne    13df <rescape+0x2cf>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0xc0,(%rax)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x80,(%rax)
jmp    16ed <rescape+0x5dd>
cmpl   $0x7f,-0x34(%rbp)
ja     1404 <rescape+0x2f4>
mov    -0x34(%rbp),%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
jmp    16e8 <rescape+0x5d8>
cmpl   $0x7ff,-0x34(%rbp)
ja     1452 <rescape+0x342>
mov    -0x34(%rbp),%eax
shr    $0x6,%eax
or     $0xc0,%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
mov    -0x34(%rbp),%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
jmp    16e3 <rescape+0x5d3>
cmpl   $0xffff,-0x34(%rbp)
ja     14c1 <rescape+0x3b1>
mov    -0x34(%rbp),%eax
shr    $0xc,%eax
or     $0xe0,%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
mov    -0x34(%rbp),%eax
shr    $0x6,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
mov    -0x34(%rbp),%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
jmp    16de <rescape+0x5ce>
cmpl   $0x1fffff,-0x34(%rbp)
ja     1551 <rescape+0x441>
mov    -0x34(%rbp),%eax
shr    $0x12,%eax
or     $0xf0,%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
mov    -0x34(%rbp),%eax
shr    $0xc,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
mov    -0x34(%rbp),%eax
shr    $0x6,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
mov    -0x34(%rbp),%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
jmp    16d9 <rescape+0x5c9>
cmpl   $0x3ffffff,-0x34(%rbp)
ja     1602 <rescape+0x4f2>
mov    -0x34(%rbp),%eax
shr    $0x18,%eax
or     $0xf8,%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
mov    -0x34(%rbp),%eax
shr    $0x12,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
mov    -0x34(%rbp),%eax
shr    $0xc,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
mov    -0x34(%rbp),%eax
shr    $0x6,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
mov    -0x34(%rbp),%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
jmp    16d4 <rescape+0x5c4>
cmpl   $0x7fffffff,-0x34(%rbp)
ja     16cf <rescape+0x5bf>
mov    -0x34(%rbp),%eax
shr    $0x1e,%eax
or     $0xfc,%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
mov    -0x34(%rbp),%eax
shr    $0x18,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
mov    -0x34(%rbp),%eax
shr    $0x12,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
mov    -0x34(%rbp),%eax
shr    $0xc,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
mov    -0x34(%rbp),%eax
shr    $0x6,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
mov    -0x34(%rbp),%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
jmp    16d4 <rescape+0x5c4>
jmp    16d9 <rescape+0x5c9>
jmp    16de <rescape+0x5ce>
jmp    16e3 <rescape+0x5d3>
jmp    16e8 <rescape+0x5d8>
jmp    16ed <rescape+0x5dd>
jmp    16f2 <rescape+0x5e2>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    113e <rescape+0x2e>
mov    -0x28(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x30(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<rescape>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %rcx,%r12
mov    %rdi,%r8
mov    (%rdi),%rcx
mov    %rcx,0x8(%rsp)
mov    (%rsi),%r14
cmp    %rdx,%rcx
jae    1443 <rescape+0x333>
mov    (%rcx),%al
test   %al,%al
je     1443 <rescape+0x333>
cmp    %r12,%r14
jae    1443 <rescape+0x333>
mov    %rdx,%r15
lea    0xeab(%rip),%r10
movabs $0x7e0000007e03ff,%r13
lea    0xfb2(%rip),%r11
cs nopw 0x0(%rax,%rax,1)
cmp    $0x5c,%al
jne    11f0 <rescape+0xe0>
lea    0x1(%rcx),%rbp
mov    %rbp,0x8(%rsp)
movzbl 0x1(%rcx),%edx
lea    -0x30(%rdx),%edi
cmp    $0x45,%dil
ja     136a <rescape+0x25a>
mov    $0xa,%eax
movzbl %dil,%edi
movslq (%r10,%rdi,4),%rdi
add    %r10,%rdi
jmp    *%rdi
lea    0x2(%rcx),%rax
mov    %rax,0x8(%rsp)
add    $0xffffffd0,%edx
movzbl 0x2(%rcx),%edi
mov    %edi,%ebx
and    $0xf8,%bl
cmp    $0x30,%bl
jne    1258 <rescape+0x148>
lea    (%rdi,%rdx,8),%edx
add    $0xffffffd0,%edx
lea    0x3(%rcx),%rbp
mov    %rbp,0x8(%rsp)
movzbl 0x3(%rcx),%edi
mov    %edi,%ebx
and    $0xf8,%bl
cmp    $0x30,%bl
jne    1255 <rescape+0x145>
lea    (%rdi,%rdx,8),%edx
add    $0xffffffd0,%edx
add    $0x4,%rcx
mov    %rcx,0x8(%rsp)
jmp    1258 <rescape+0x148>
movzbl %al,%eax
jmp    1263 <rescape+0x153>
lea    0x2(%rcx),%rdi
mov    %rdi,0x8(%rsp)
xor    %eax,%eax
cmp    $0x75,%dl
setne  %al
lea    (%rcx,%rax,4),%rdx
add    $0x6,%rdx
xor    %eax,%eax
mov    %rdi,%rcx
movzbl (%rdi),%ebp
lea    -0x30(%rbp),%edi
cmp    $0x36,%dil
ja     1244 <rescape+0x134>
movzbl %dil,%ebx
bt     %rbx,%r13
jae    1244 <rescape+0x134>
movsbq %dil,%rdi
shl    $0x4,%eax
add    (%r11,%rdi,4),%eax
add    %ebp,%eax
lea    0x1(%rcx),%rdi
mov    %rdi,0x8(%rsp)
cmp    %rdx,%rdi
jb     1210 <rescape+0x100>
mov    %rcx,0x8(%rsp)
test   %eax,%eax
jne    1263 <rescape+0x153>
movw   $0x80c0,(%r14)
jmp    129a <rescape+0x18a>
mov    %rax,%rbp
mov    %rbp,0x8(%rsp)
mov    %edx,%eax
test   %eax,%eax
je     124d <rescape+0x13d>
cmp    $0x7f,%eax
ja     1280 <rescape+0x170>
mov    %al,(%r14)
add    $0x1,%r14
jmp    1420 <rescape+0x310>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cmp    $0x7ff,%eax
ja     12a3 <rescape+0x193>
mov    %eax,%ecx
shr    $0x6,%ecx
or     $0xc0,%cl
mov    %cl,(%r14)
and    $0x3f,%al
or     $0x80,%al
mov    %al,0x1(%r14)
add    $0x2,%r14
jmp    1420 <rescape+0x310>
cmp    $0xffff,%eax
ja     12d5 <rescape+0x1c5>
mov    %eax,%ecx
shr    $0xc,%ecx
or     $0xe0,%cl
mov    %cl,(%r14)
mov    %eax,%ecx
shr    $0x6,%ecx
and    $0x3f,%cl
or     $0x80,%cl
mov    %cl,0x1(%r14)
and    $0x3f,%al
or     $0x80,%al
mov    %al,0x2(%r14)
add    $0x3,%r14
jmp    1420 <rescape+0x310>
cmp    $0x1fffff,%eax
ja     1316 <rescape+0x206>
mov    %eax,%ecx
shr    $0x12,%ecx
or     $0xf0,%cl
mov    %cl,(%r14)
mov    %eax,%ecx
shr    $0xc,%ecx
and    $0x3f,%cl
or     $0x80,%cl
mov    %cl,0x1(%r14)
mov    %eax,%ecx
shr    $0x6,%ecx
and    $0x3f,%cl
or     $0x80,%cl
mov    %cl,0x2(%r14)
and    $0x3f,%al
or     $0x80,%al
mov    %al,0x3(%r14)
add    $0x4,%r14
jmp    1420 <rescape+0x310>
cmp    $0x3ffffff,%eax
ja     13bc <rescape+0x2ac>
mov    %eax,%ecx
shr    $0x18,%ecx
or     $0xf8,%cl
mov    %cl,(%r14)
mov    %eax,%ecx
shr    $0x12,%ecx
and    $0x3f,%cl
or     $0x80,%cl
mov    %cl,0x1(%r14)
mov    %eax,%ecx
shr    $0xc,%ecx
and    $0x3f,%cl
or     $0x80,%cl
mov    %cl,0x2(%r14)
mov    %eax,%ecx
shr    $0x6,%ecx
and    $0x3f,%cl
or     $0x80,%cl
mov    %cl,0x3(%r14)
and    $0x3f,%al
or     $0x80,%al
mov    %al,0x4(%r14)
add    $0x5,%r14
jmp    1420 <rescape+0x310>
lea    0x8(%rsp),%rdi
mov    %rsi,0x10(%rsp)
mov    %r8,%rbp
mov    %r10,%rbx
call   1030 <onecodepoint@plt>
lea    0xd92(%rip),%r11
mov    %rbx,%r10
mov    %rbp,%r8
mov    0x10(%rsp),%rsi
test   %eax,%eax
jne    1263 <rescape+0x153>
jmp    124d <rescape+0x13d>
mov    $0xc,%eax
jmp    1268 <rescape+0x158>
mov    $0xd,%eax
jmp    1268 <rescape+0x158>
mov    $0x9,%eax
jmp    1268 <rescape+0x158>
test   %eax,%eax
js     1420 <rescape+0x310>
mov    %eax,%ecx
shr    $0x1e,%ecx
or     $0xfc,%cl
mov    %cl,(%r14)
mov    %eax,%ecx
shr    $0x18,%ecx
and    $0x3f,%cl
or     $0x80,%cl
mov    %cl,0x1(%r14)
mov    %eax,%ecx
shr    $0x12,%ecx
and    $0x3f,%cl
or     $0x80,%cl
mov    %cl,0x2(%r14)
mov    %eax,%ecx
shr    $0xc,%ecx
and    $0x3f,%cl
or     $0x80,%cl
mov    %cl,0x3(%r14)
mov    %eax,%ecx
shr    $0x6,%ecx
and    $0x3f,%cl
or     $0x80,%cl
mov    %cl,0x4(%r14)
and    $0x3f,%al
or     $0x80,%al
mov    %al,0x5(%r14)
add    $0x6,%r14
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    0x8(%rsp),%rax
lea    0x1(%rax),%rcx
mov    %rcx,0x8(%rsp)
cmp    %r15,%rcx
jae    1443 <rescape+0x333>
mov    0x1(%rax),%al
test   %al,%al
je     1443 <rescape+0x333>
cmp    %r12,%r14
jb     1170 <rescape+0x60>
mov    %rcx,(%r8)
mov    %r14,(%rsi)
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@switch.table.rescape = [55 x i32] [i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -55, i32 -55, i32 -55, i32 -55, i32 -55, i32 -55, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -48, i32 -87, i32 -87, i32 -87, i32 -87, i32 -87, i32 -87]
define void @rescape(i8** nocapture %0, i8** nocapture %1, i8* readnone %2, i8* readnone %3) {
%5 = alloca i8*
%6 = bitcast i8** %5 to i8*
%7 = load i8*, i8** %0
store i8* %7, i8** %5
%8 = load i8*, i8** %1
%9 = load i8, i8* %7
%10 = icmp ne i8 %9, 0
%11 = icmp ult i8* %7, %2
%12 = and i1 %11, %10
%13 = icmp ult i8* %8, %3
%14 = select i1 %12, i1 %13, i1 false
br i1 %14, label %15, label %212
15: ; preds = %4, %202
%16 = phi i8 [ %206, %202 ], [ %9, %4 ]
%17 = phi i8* [ %205, %202 ], [ %7, %4 ]
%18 = phi i8* [ %203, %202 ], [ %8, %4 ]
%19 = zext i8 %16 to i32
%20 = icmp eq i8 %16, 92
br i1 %20, label %21, label %90
21: ; preds = %15
%22 = getelementptr inbounds i8, i8* %17, i64 1
store i8* %22, i8** %5
%23 = load i8, i8* %22
switch i8 %23, label %82 [
i8 97, label %93
i8 116, label %24
i8 114, label %25
i8 102, label %26
i8 110, label %93
i8 48, label %27
i8 49, label %27
i8 50, label %27
i8 51, label %27
i8 52, label %27
i8 53, label %27
i8 54, label %27
i8 55, label %27
i8 117, label %54
i8 85, label %54
]
24: ; preds = %21
br label %93
25: ; preds = %21
br label %93
26: ; preds = %21
br label %93
27: ; preds = %21, %21, %21, %21, %21, %21, %21, %21
%28 = getelementptr inbounds i8, i8* %17, i64 2
store i8* %28, i8** %5
%29 = zext i8 %23 to i32
%30 = add nsw i32 %29, -48
%31 = getelementptr inbounds i8, i8* %17, i64 2
%32 = load i8, i8* %31
%33 = and i8 %32, -8
%34 = icmp eq i8 %33, 48
br i1 %34, label %41, label %51
35: ; preds = %41
%36 = zext i8 %48 to i32
%37 = shl nsw i32 %45, 3
%38 = add nsw i32 %37, -48
%39 = add i32 %38, %36
%40 = getelementptr inbounds i8, i8* %17, i64 4
store i8* %40, i8** %5
br label %51
41: ; preds = %27
%42 = zext i8 %32 to i32
%43 = shl nsw i32 %30, 3
%44 = add nsw i32 %43, -48
%45 = add nsw i32 %44, %42
%46 = getelementptr inbounds i8, i8* %17, i64 3
store i8* %46, i8** %5
%47 = getelementptr inbounds i8, i8* %17, i64 3
%48 = load i8, i8* %47
%49 = and i8 %48, -8
%50 = icmp eq i8 %49, 48
br i1 %50, label %35, label %51
51: ; preds = %41, %35, %27
%52 = phi i32 [ %30, %27 ], [ %45, %41 ], [ %39, %35 ]
%53 = phi i8* [ %22, %27 ], [ %31, %41 ], [ %47, %35 ]
store i8* %53, i8** %5
br label %84
54: ; preds = %21, %21
%55 = getelementptr inbounds i8, i8* %17, i64 2
store i8* %55, i8** %5
%56 = icmp eq i8 %23, 117
%57 = select i1 %56, i64 6, i64 10
%58 = getelementptr inbounds i8, i8* %17, i64 %57
br label %59
59: ; preds = %54, %70
%60 = phi i8* [ %78, %70 ], [ %55, %54 ]
%61 = phi i32 [ %77, %70 ], [ 0, %54 ]
%62 = load i8, i8* %60
%63 = add i8 %62, -48
%64 = icmp ult i8 %63, 55
br i1 %64, label %65, label %80
65: ; preds = %59
%66 = zext i8 %63 to i64
%67 = lshr i64 35465847073801215, %66
%68 = and i64 %67, 1
%69 = icmp eq i64 %68, 0
br i1 %69, label %80, label %70
70: ; preds = %65
%71 = sext i8 %63 to i64
%72 = getelementptr inbounds [55 x i32], [55 x i32]* @switch.table.rescape, i64 0, i64 %71
%73 = load i32, i32* %72
%74 = shl i32 %61, 4
%75 = zext i8 %62 to i32
%76 = add i32 %74, %73
%77 = add i32 %76, %75
%78 = getelementptr inbounds i8, i8* %60, i64 1
store i8* %78, i8** %5
%79 = icmp ult i8* %78, %58
br i1 %79, label %59, label %80
80: ; preds = %65, %59, %70
%81 = phi i32 [ %61, %59 ], [ %77, %70 ], [ %61, %65 ]
store i8* %60, i8** %5
br label %84
82: ; preds = %21
%83 = call i32 @onecodepoint(i8** %5)
br label %84
84: ; preds = %51, %80, %82
%85 = phi i32 [ %83, %82 ], [ %81, %80 ], [ %52, %51 ]
%86 = icmp eq i32 %85, 0
br i1 %86, label %87, label %90
87: ; preds = %84
%88 = getelementptr inbounds i8, i8* %18, i64 1
store i8 -64, i8* %18
%89 = getelementptr inbounds i8, i8* %18, i64 2
store i8 -128, i8* %88
br label %202
90: ; preds = %15, %84
%91 = phi i32 [ %85, %84 ], [ %19, %15 ]
%92 = icmp ult i32 %91, 128
br i1 %92, label %93, label %97
93: ; preds = %26, %25, %24, %21, %21, %90
%94 = phi i32 [ %91, %90 ], [ 10, %21 ], [ 10, %21 ], [ 9, %24 ], [ 13, %25 ], [ 12, %26 ]
%95 = trunc i32 %94 to i8
%96 = getelementptr inbounds i8, i8* %18, i64 1
store i8 %95, i8* %18
br label %202
97: ; preds = %90
%98 = icmp ult i32 %91, 2048
br i1 %98, label %99, label %108
99: ; preds = %97
%100 = lshr i32 %91, 6
%101 = trunc i32 %100 to i8
%102 = or i8 %101, -64
%103 = getelementptr inbounds i8, i8* %18, i64 1
store i8 %102, i8* %18
%104 = trunc i32 %91 to i8
%105 = and i8 %104, 63
%106 = or i8 %105, -128
%107 = getelementptr inbounds i8, i8* %18, i64 2
store i8 %106, i8* %103
br label %202
108: ; preds = %97
%109 = icmp ult i32 %91, 65536
br i1 %109, label %110, label %124
110: ; preds = %108
%111 = lshr i32 %91, 12
%112 = trunc i32 %111 to i8
%113 = or i8 %112, -32
%114 = getelementptr inbounds i8, i8* %18, i64 1
store i8 %113, i8* %18
%115 = lshr i32 %91, 6
%116 = trunc i32 %115 to i8
%117 = and i8 %116, 63
%118 = or i8 %117, -128
%119 = getelementptr inbounds i8, i8* %18, i64 2
store i8 %118, i8* %114
%120 = trunc i32 %91 to i8
%121 = and i8 %120, 63
%122 = or i8 %121, -128
%123 = getelementptr inbounds i8, i8* %18, i64 3
store i8 %122, i8* %119
br label %202
124: ; preds = %108
%125 = icmp ult i32 %91, 2097152
br i1 %125, label %126, label %145
126: ; preds = %124
%127 = lshr i32 %91, 18
%128 = trunc i32 %127 to i8
%129 = or i8 %128, -16
%130 = getelementptr inbounds i8, i8* %18, i64 1
store i8 %129, i8* %18
%131 = lshr i32 %91, 12
%132 = trunc i32 %131 to i8
%133 = and i8 %132, 63
%134 = or i8 %133, -128
%135 = getelementptr inbounds i8, i8* %18, i64 2
store i8 %134, i8* %130
%136 = lshr i32 %91, 6
%137 = trunc i32 %136 to i8
%138 = and i8 %137, 63
%139 = or i8 %138, -128
%140 = getelementptr inbounds i8, i8* %18, i64 3
store i8 %139, i8* %135
%141 = trunc i32 %91 to i8
%142 = and i8 %141, 63
%143 = or i8 %142, -128
%144 = getelementptr inbounds i8, i8* %18, i64 4
store i8 %143, i8* %140
br label %202
145: ; preds = %124
%146 = icmp ult i32 %91, 67108864
br i1 %146, label %147, label %171
147: ; preds = %145
%148 = lshr i32 %91, 24
%149 = trunc i32 %148 to i8
%150 = or i8 %149, -8
%151 = getelementptr inbounds i8, i8* %18, i64 1
store i8 %150, i8* %18
%152 = lshr i32 %91, 18
%153 = trunc i32 %152 to i8
%154 = and i8 %153, 63
%155 = or i8 %154, -128
%156 = getelementptr inbounds i8, i8* %18, i64 2
store i8 %155, i8* %151
%157 = lshr i32 %91, 12
%158 = trunc i32 %157 to i8
%159 = and i8 %158, 63
%160 = or i8 %159, -128
%161 = getelementptr inbounds i8, i8* %18, i64 3
store i8 %160, i8* %156
%162 = lshr i32 %91, 6
%163 = trunc i32 %162 to i8
%164 = and i8 %163, 63
%165 = or i8 %164, -128
%166 = getelementptr inbounds i8, i8* %18, i64 4
store i8 %165, i8* %161
%167 = trunc i32 %91 to i8
%168 = and i8 %167, 63
%169 = or i8 %168, -128
%170 = getelementptr inbounds i8, i8* %18, i64 5
store i8 %169, i8* %166
br label %202
171: ; preds = %145
%172 = icmp sgt i32 %91, -1
br i1 %172, label %173, label %202
173: ; preds = %171
%174 = lshr i32 %91, 30
%175 = trunc i32 %174 to i8
%176 = or i8 %175, -4
%177 = getelementptr inbounds i8, i8* %18, i64 1
store i8 %176, i8* %18
%178 = lshr i32 %91, 24
%179 = trunc i32 %178 to i8
%180 = and i8 %179, 63
%181 = or i8 %180, -128
%182 = getelementptr inbounds i8, i8* %18, i64 2
store i8 %181, i8* %177
%183 = lshr i32 %91, 18
%184 = trunc i32 %183 to i8
%185 = and i8 %184, 63
%186 = or i8 %185, -128
%187 = getelementptr inbounds i8, i8* %18, i64 3
store i8 %186, i8* %182
%188 = lshr i32 %91, 12
%189 = trunc i32 %188 to i8
%190 = and i8 %189, 63
%191 = or i8 %190, -128
%192 = getelementptr inbounds i8, i8* %18, i64 4
store i8 %191, i8* %187
%193 = lshr i32 %91, 6
%194 = trunc i32 %193 to i8
%195 = and i8 %194, 63
%196 = or i8 %195, -128
%197 = getelementptr inbounds i8, i8* %18, i64 5
store i8 %196, i8* %192
%198 = trunc i32 %91 to i8
%199 = and i8 %198, 63
%200 = or i8 %199, -128
%201 = getelementptr inbounds i8, i8* %18, i64 6
store i8 %200, i8* %197
br label %202
202: ; preds = %93, %110, %147, %173, %171, %126, %99, %87
%203 = phi i8* [ %89, %87 ], [ %96, %93 ], [ %107, %99 ], [ %123, %110 ], [ %144, %126 ], [ %170, %147 ], [ %201, %173 ], [ %18, %171 ]
%204 = load i8*, i8** %5
%205 = getelementptr inbounds i8, i8* %204, i64 1
store i8* %205, i8** %5
%206 = load i8, i8* %205
%207 = icmp ne i8 %206, 0
%208 = icmp ult i8* %205, %2
%209 = and i1 %208, %207
%210 = icmp ult i8* %203, %3
%211 = select i1 %209, i1 %210, i1 false
br i1 %211, label %15, label %212
212: ; preds = %202, %4
%213 = phi i8* [ %8, %4 ], [ %203, %202 ]
%214 = phi i8* [ %7, %4 ], [ %205, %202 ]
store i8* %214, i8** %0
store i8* %213, i8** %1
ret void
}