char *tparam1(string, outstring, len, up, left, argp)
char *string;
char *outstring;
int len;
char *up, *left;
int *argp;
{
  int c;
  char *p = string;
  char *op = outstring;
  char *outend;
  int outlen = 0;
  int tem;
  int *old_argp = argp;
  int doleft = 0;
  int doup = 0;
  outend = outstring + len;
  while (1) {
    if (op + 5 >= outend) {
      char *new;
      if (outlen == 0) {
        outlen = len + 40;
        new = (char *)xmalloc(outlen);
        outend += 40;
        memcpy((new), (outstring), (op - outstring));
      } else {
        outend += outlen;
        outlen *= 2;
        new = (char *)xrealloc(outstring, outlen);
      }
      op += new - outstring;
      outend += new - outstring;
      outstring = new;
    }
    c = *p++;
    if (!c)
      break;
    if (c == '%') {
      c = *p++;
      tem = *argp;
      switch (c) {
      case 'd':
        if (tem < 10)
          goto onedigit;
        if (tem < 100)
          goto twodigit;
      case '3':
        if (tem > 999) {
          *op++ = tem / 1000 + '0';
          tem %= 1000;
        }
        *op++ = tem / 100 + '0';
      case '2':
      twodigit:
        tem %= 100;
        *op++ = tem / 10 + '0';
      onedigit:
        *op++ = tem % 10 + '0';
        argp++;
        break;
      case 'C':
        if (tem >= 96) {
          *op++ = tem / 96;
          tem %= 96;
        }
      case '+':
        tem += *p++;
      case '.':
        if (left) {
          while (tem == 0 || tem == '\n' || tem == '\t') {
            tem++;
            if (argp == old_argp)
              doup++, outend -= strlen(up);
            else
              doleft++, outend -= strlen(left);
          }
        }
        *op++ = tem ? tem : 0200;
      case 'f':
        argp++;
        break;
      case 'b':
        argp--;
        break;
      case 'r':
        argp[0] = argp[1];
        argp[1] = tem;
        old_argp++;
        break;
      case '>':
        if (argp[0] > *p++)
          argp[0] += *p;
        p++;
        break;
      case 'a':
        tem = p[2] & 0177;
        if (p[1] == 'p')
          tem = argp[tem - 0100];
        if (p[0] == '-')
          argp[0] -= tem;
        else if (p[0] == '+')
          argp[0] += tem;
        else if (p[0] == '*')
          argp[0] *= tem;
        else if (p[0] == '/')
          argp[0] /= tem;
        else
          argp[0] = tem;
        p += 3;
        break;
      case 'i':
        argp[0]++;
        argp[1]++;
        break;
      case '%':
        goto ordinary;
      case 'n':
        argp[0] ^= 0140;
        argp[1] ^= 0140;
        break;
      case 'm':
        argp[0] ^= 0177;
        argp[1] ^= 0177;
        break;
      case 'B':
        argp[0] += 6 * (tem / 10);
        break;
      case 'D':
        argp[0] -= 2 * (tem % 16);
        break;
      }
    } else
    ordinary:
      *op++ = c;
  }
  *op = 0;
  while (doup-- > 0)
    strcat(op, up);
  while (doleft-- > 0)
    strcat(op, left);
  return outstring;
}


x86 assembly (clang, -O0):
<tparam1>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x48(%rbp)
movl   $0x0,-0x54(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,-0x60(%rbp)
movl   $0x0,-0x64(%rbp)
movl   $0x0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
mov    -0x48(%rbp),%rax
add    $0x5,%rax
cmp    -0x50(%rbp),%rax
jb     1268 <tparam1+0x118>
cmpl   $0x0,-0x54(%rbp)
jne    120c <tparam1+0xbc>
mov    -0x14(%rbp),%eax
add    $0x28,%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%edi
mov    $0x0,%al
call   1050 <xmalloc@plt>
cltq
mov    %rax,-0x70(%rbp)
mov    -0x50(%rbp),%rax
add    $0x28,%rax
mov    %rax,-0x50(%rbp)
mov    -0x70(%rbp),%rdi
mov    -0x10(%rbp),%rsi
mov    -0x48(%rbp),%rdx
mov    -0x10(%rbp),%rax
sub    %rax,%rdx
call   1060 <memcpy@plt>
jmp    123a <tparam1+0xea>
mov    -0x54(%rbp),%ecx
mov    -0x50(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
mov    -0x54(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x54(%rbp)
mov    -0x10(%rbp),%rdi
mov    -0x54(%rbp),%esi
mov    $0x0,%al
call   1040 <xrealloc@plt>
cltq
mov    %rax,-0x70(%rbp)
mov    -0x70(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
add    -0x48(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x70(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x70(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x40(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x34(%rbp)
cmpl   $0x0,-0x34(%rbp)
jne    128c <tparam1+0x13c>
jmp    1735 <tparam1+0x5e5>
cmpl   $0x25,-0x34(%rbp)
jne    1715 <tparam1+0x5c5>
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x40(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x58(%rbp)
mov    -0x34(%rbp),%eax
add    $0xffffffdb,%eax
mov    %eax,%ecx
mov    %rcx,-0x78(%rbp)
sub    $0x4d,%eax
ja     1710 <tparam1+0x5c0>
mov    -0x78(%rbp),%rax
lea    0xd2c(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
cmpl   $0xa,-0x58(%rbp)
jge    12ec <tparam1+0x19c>
jmp    1391 <tparam1+0x241>
cmpl   $0x64,-0x58(%rbp)
jge    12fb <tparam1+0x1ab>
jmp    1362 <tparam1+0x212>
jmp    1300 <tparam1+0x1b0>
cmpl   $0x3e7,-0x58(%rbp)
jle    133c <tparam1+0x1ec>
mov    -0x58(%rbp),%eax
mov    $0x3e8,%ecx
cltd
idiv   %ecx
add    $0x30,%eax
mov    %al,%cl
mov    -0x48(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x48(%rbp)
mov    %cl,(%rax)
mov    -0x58(%rbp),%eax
mov    $0x3e8,%ecx
cltd
idiv   %ecx
mov    %edx,-0x58(%rbp)
mov    -0x58(%rbp),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
add    $0x30,%eax
mov    %al,%cl
mov    -0x48(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x48(%rbp)
mov    %cl,(%rax)
jmp    1362 <tparam1+0x212>
mov    -0x58(%rbp),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
mov    %edx,-0x58(%rbp)
mov    -0x58(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
add    $0x30,%eax
mov    %al,%cl
mov    -0x48(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x48(%rbp)
mov    %cl,(%rax)
mov    -0x58(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
add    $0x30,%edx
mov    %dl,%cl
mov    -0x48(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x48(%rbp)
mov    %cl,(%rax)
mov    -0x30(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x30(%rbp)
jmp    1710 <tparam1+0x5c0>
cmpl   $0x60,-0x58(%rbp)
jl     13f9 <tparam1+0x2a9>
mov    -0x58(%rbp),%eax
mov    $0x60,%ecx
cltd
idiv   %ecx
mov    %al,%cl
mov    -0x48(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x48(%rbp)
mov    %cl,(%rax)
mov    -0x58(%rbp),%eax
mov    $0x60,%ecx
cltd
idiv   %ecx
mov    %edx,-0x58(%rbp)
jmp    13fe <tparam1+0x2ae>
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x40(%rbp)
movsbl (%rax),%eax
add    -0x58(%rbp),%eax
mov    %eax,-0x58(%rbp)
cmpq   $0x0,-0x28(%rbp)
je     14ce <tparam1+0x37e>
jmp    1426 <tparam1+0x2d6>
mov    $0x1,%al
cmpl   $0x0,-0x58(%rbp)
mov    %al,-0x79(%rbp)
je     144e <tparam1+0x2fe>
mov    $0x1,%al
cmpl   $0xa,-0x58(%rbp)
mov    %al,-0x79(%rbp)
je     144e <tparam1+0x2fe>
cmpl   $0x9,-0x58(%rbp)
sete   %al
mov    %al,-0x79(%rbp)
mov    -0x79(%rbp),%al
test   $0x1,%al
jne    145e <tparam1+0x30e>
jmp    14c9 <tparam1+0x379>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
mov    -0x30(%rbp),%rax
cmp    -0x60(%rbp),%rax
jne    149f <tparam1+0x34f>
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
mov    -0x20(%rbp),%rdi
call   1030 <strlen@plt>
mov    %rax,%rdx
mov    -0x50(%rbp),%rax
xor    %ecx,%ecx
sub    %rdx,%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
jmp    14c4 <tparam1+0x374>
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
mov    -0x28(%rbp),%rdi
call   1030 <strlen@plt>
mov    %rax,%rdx
mov    -0x50(%rbp),%rax
xor    %ecx,%ecx
sub    %rdx,%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
jmp    1426 <tparam1+0x2d6>
jmp    14ce <tparam1+0x37e>
cmpl   $0x0,-0x58(%rbp)
je     14e3 <tparam1+0x393>
mov    -0x58(%rbp),%eax
mov    %eax,-0x80(%rbp)
jmp    14f0 <tparam1+0x3a0>
mov    $0x80,%eax
mov    %eax,-0x80(%rbp)
jmp    14f0 <tparam1+0x3a0>
mov    -0x80(%rbp),%eax
mov    %al,%cl
mov    -0x48(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x48(%rbp)
mov    %cl,(%rax)
mov    -0x30(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x30(%rbp)
jmp    1710 <tparam1+0x5c0>
mov    -0x30(%rbp),%rax
add    $0xfffffffffffffffc,%rax
mov    %rax,-0x30(%rbp)
jmp    1710 <tparam1+0x5c0>
mov    -0x30(%rbp),%rax
mov    0x4(%rax),%ecx
mov    -0x30(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x58(%rbp),%ecx
mov    -0x30(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x60(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x60(%rbp)
jmp    1710 <tparam1+0x5c0>
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
mov    -0x40(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x40(%rbp)
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jle    157f <tparam1+0x42f>
mov    -0x40(%rbp),%rax
movsbl (%rax),%ecx
mov    -0x30(%rbp),%rax
add    (%rax),%ecx
mov    %ecx,(%rax)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
jmp    1710 <tparam1+0x5c0>
mov    -0x40(%rbp),%rax
movsbl 0x2(%rax),%eax
and    $0x7f,%eax
mov    %eax,-0x58(%rbp)
mov    -0x40(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x70,%eax
jne    15c2 <tparam1+0x472>
mov    -0x30(%rbp),%rax
mov    -0x58(%rbp),%ecx
sub    $0x40,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x58(%rbp)
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    15e4 <tparam1+0x494>
mov    -0x58(%rbp),%edx
mov    -0x30(%rbp),%rax
mov    (%rax),%ecx
sub    %edx,%ecx
mov    %ecx,(%rax)
jmp    1670 <tparam1+0x520>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2b,%eax
jne    1604 <tparam1+0x4b4>
mov    -0x58(%rbp),%ecx
mov    -0x30(%rbp),%rax
add    (%rax),%ecx
mov    %ecx,(%rax)
jmp    166b <tparam1+0x51b>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
jne    1625 <tparam1+0x4d5>
mov    -0x58(%rbp),%ecx
mov    -0x30(%rbp),%rax
imul   (%rax),%ecx
mov    %ecx,(%rax)
jmp    1666 <tparam1+0x516>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    1658 <tparam1+0x508>
mov    -0x58(%rbp),%ecx
mov    -0x30(%rbp),%rax
mov    %rax,-0x88(%rbp)
mov    (%rax),%eax
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x88(%rbp),%rax
mov    %ecx,(%rax)
jmp    1661 <tparam1+0x511>
mov    -0x58(%rbp),%ecx
mov    -0x30(%rbp),%rax
mov    %ecx,(%rax)
jmp    1666 <tparam1+0x516>
jmp    166b <tparam1+0x51b>
jmp    1670 <tparam1+0x520>
mov    -0x40(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x40(%rbp)
jmp    1710 <tparam1+0x5c0>
mov    -0x30(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    -0x30(%rbp),%rax
mov    0x4(%rax),%ecx
add    $0x1,%ecx
mov    %ecx,0x4(%rax)
jmp    1710 <tparam1+0x5c0>
jmp    171a <tparam1+0x5ca>
mov    -0x30(%rbp),%rax
mov    (%rax),%ecx
xor    $0x60,%ecx
mov    %ecx,(%rax)
mov    -0x30(%rbp),%rax
mov    0x4(%rax),%ecx
xor    $0x60,%ecx
mov    %ecx,0x4(%rax)
jmp    1710 <tparam1+0x5c0>
mov    -0x30(%rbp),%rax
mov    (%rax),%ecx
xor    $0x7f,%ecx
mov    %ecx,(%rax)
mov    -0x30(%rbp),%rax
mov    0x4(%rax),%ecx
xor    $0x7f,%ecx
mov    %ecx,0x4(%rax)
jmp    1710 <tparam1+0x5c0>
mov    -0x58(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
imul   $0x6,%eax,%ecx
mov    -0x30(%rbp),%rax
add    (%rax),%ecx
mov    %ecx,(%rax)
jmp    1710 <tparam1+0x5c0>
mov    -0x58(%rbp),%eax
mov    $0x10,%ecx
cltd
idiv   %ecx
shl    $0x1,%edx
mov    -0x30(%rbp),%rax
mov    (%rax),%ecx
sub    %edx,%ecx
mov    %ecx,(%rax)
jmp    1730 <tparam1+0x5e0>
jmp    171a <tparam1+0x5ca>
mov    -0x34(%rbp),%eax
mov    %al,%cl
mov    -0x48(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x48(%rbp)
mov    %cl,(%rax)
jmp    11ae <tparam1+0x5e>
mov    -0x48(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x68(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x68(%rbp)
cmp    $0x0,%eax
jle    1762 <tparam1+0x612>
mov    -0x48(%rbp),%rdi
mov    -0x20(%rbp),%rsi
call   1070 <strcat@plt>
jmp    173c <tparam1+0x5ec>
jmp    1767 <tparam1+0x617>
mov    -0x64(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x64(%rbp)
cmp    $0x0,%eax
jle    178d <tparam1+0x63d>
mov    -0x48(%rbp),%rdi
mov    -0x28(%rbp),%rsi
call   1070 <strcat@plt>
jmp    1767 <tparam1+0x617>
mov    -0x10(%rbp),%rax
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<tparam1>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %r8,0x18(%rsp)
mov    %rcx,0x28(%rsp)
mov    %rsi,%r8
movslq %edx,%rax
lea    (%rsi,%rax,1),%r15
add    $0x28,%eax
mov    %rax,0x20(%rsp)
mov    %rsi,%rbx
movl   $0x0,0x8(%rsp)
mov    %r9,(%rsp)
mov    %r9,0x30(%rsp)
xor    %r14d,%r14d
movl   $0x0,0xc(%rsp)
jmp    11c0 <tparam1+0x70>
lea    0xf(%rbp),%eax
test   %ebp,%ebp
cmovns %ebp,%eax
and    $0x7ffffff0,%eax
mov    %ebp,%ecx
sub    %eax,%ecx
add    %ecx,%ecx
sub    %ecx,%ebp
mov    (%rsp),%rax
mov    %ebp,(%rax)
cs nopw 0x0(%rax,%rax,1)
mov    %rdi,%r13
lea    0x5(%rbx),%rax
cmp    %r15,%rax
jb     1243 <tparam1+0xf3>
mov    0x8(%rsp),%esi
test   %esi,%esi
je     11f2 <tparam1+0xa2>
movslq %esi,%r12
add    %esi,%esi
mov    %r8,%rdi
mov    %esi,0x8(%rsp)
xor    %eax,%eax
mov    %r8,%rbp
call   1040 <xrealloc@plt>
mov    %rbp,%rcx
movslq %eax,%r8
jmp    1234 <tparam1+0xe4>
mov    %r14d,0x10(%rsp)
mov    0x20(%rsp),%rdi
xor    %eax,%eax
mov    %r8,%r14
call   1050 <xmalloc@plt>
movslq %eax,%rbp
mov    %rbx,%rdx
sub    %r14,%rdx
mov    %rbp,%rdi
mov    %r14,%rsi
call   1060 <memcpy@plt>
mov    $0x28,%r12d
mov    %r14,%rcx
mov    0x20(%rsp),%rax
mov    %eax,0x8(%rsp)
mov    0x10(%rsp),%r14d
mov    %rbp,%r8
add    %r12,%r15
mov    %r8,%rax
sub    %rcx,%rax
add    %rax,%rbx
add    %rax,%r15
mov    0x0(%r13),%al
cmp    $0x25,%al
je     1270 <tparam1+0x120>
test   %al,%al
je     1505 <tparam1+0x3b5>
add    $0x1,%r13
mov    %r13,%rdi
mov    %al,(%rbx)
add    $0x1,%rbx
jmp    11c0 <tparam1+0x70>
cs nopw 0x0(%rax,%rax,1)
nop
lea    0x2(%r13),%rdi
movsbl 0x1(%r13),%ecx
add    $0xffffffdb,%ecx
cmp    $0x4d,%ecx
ja     11c0 <tparam1+0x70>
mov    (%rsp),%rdx
mov    (%rdx),%ebp
lea    0xd6e(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
movsbl (%rdi),%eax
cmp    %eax,%ebp
jle    12af <tparam1+0x15f>
movsbl 0x3(%r13),%eax
add    %eax,%ebp
mov    (%rsp),%rax
mov    %ebp,(%rax)
add    $0x4,%r13
mov    %r13,%rdi
jmp    11c0 <tparam1+0x70>
movslq %ebp,%rax
imul   $0x66666667,%rax,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
sar    $0x22,%rax
add    %ecx,%eax
lea    (%rax,%rax,2),%eax
lea    0x0(%rbp,%rax,2),%eax
mov    (%rsp),%rcx
mov    %eax,(%rcx)
jmp    11c0 <tparam1+0x70>
addq   $0xfffffffffffffffc,(%rsp)
jmp    11c0 <tparam1+0x70>
cmp    $0xa,%ebp
jl     137b <tparam1+0x22b>
cmp    $0x64,%ebp
jb     1341 <tparam1+0x1f1>
cmp    $0x3e8,%ebp
jl     1322 <tparam1+0x1d2>
mov    %ebp,%eax
imul   $0x10624dd3,%rax,%rax
shr    $0x26,%rax
lea    0x30(%rax),%ecx
mov    %cl,(%rbx)
add    $0x1,%rbx
imul   $0x3e8,%eax,%eax
sub    %eax,%ebp
movslq %ebp,%rax
imul   $0x51eb851f,%rax,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
shr    $0x25,%rax
add    %ecx,%eax
add    $0x30,%al
mov    %al,(%rbx)
add    $0x1,%rbx
movslq %ebp,%rbp
imul   $0x51eb851f,%rbp,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
sar    $0x25,%rax
add    %ecx,%eax
imul   $0x64,%eax,%eax
sub    %eax,%ebp
movsbl %bpl,%eax
imul   $0x67,%eax,%eax
movzwl %ax,%eax
movswl %ax,%ecx
shr    $0xf,%eax
shr    $0xa,%ecx
add    %al,%cl
add    $0x30,%cl
mov    %cl,(%rbx)
add    $0x1,%rbx
movslq %ebp,%rax
imul   $0x66666667,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
shr    $0x22,%rcx
add    %edx,%ecx
add    %ecx,%ecx
lea    (%rcx,%rcx,4),%ecx
sub    %ecx,%eax
add    $0x30,%al
mov    %al,(%rbx)
add    $0x1,%rbx
addq   $0x4,(%rsp)
jmp    11c0 <tparam1+0x70>
add    $0x1,%ebp
mov    (%rsp),%rax
mov    %ebp,(%rax)
addl   $0x1,0x4(%rax)
jmp    11c0 <tparam1+0x70>
xor    $0x7f,%ebp
mov    (%rsp),%rax
mov    %ebp,(%rax)
xorb   $0x7f,0x4(%rax)
jmp    11c0 <tparam1+0x70>
xor    $0x60,%ebp
mov    (%rsp),%rax
mov    %ebp,(%rax)
xorb   $0x60,0x4(%rax)
jmp    11c0 <tparam1+0x70>
mov    (%rsp),%rcx
mov    0x4(%rcx),%eax
mov    %eax,(%rcx)
mov    %ebp,0x4(%rcx)
addq   $0x4,0x30(%rsp)
jmp    11c0 <tparam1+0x70>
cmp    $0x60,%ebp
jl     141a <tparam1+0x2ca>
mov    %ebp,%eax
mov    $0xaaaaaaab,%ecx
imul   %rcx,%rax
shr    $0x26,%rax
mov    %al,(%rbx)
add    $0x1,%rbx
shl    $0x5,%eax
lea    (%rax,%rax,2),%eax
sub    %eax,%ebp
movsbl 0x2(%r13),%eax
add    $0x3,%r13
add    %ebp,%eax
mov    %r13,%rdi
mov    %eax,%ebp
mov    %rdi,0x10(%rsp)
mov    %rbx,%r13
mov    %r8,%r12
mov    0x18(%rsp),%rbx
test   %rbx,%rbx
jne    1482 <tparam1+0x332>
test   %ebp,%ebp
mov    $0x80,%eax
cmove  %eax,%ebp
mov    %r13,%rbx
mov    %bpl,0x0(%r13)
add    $0x1,%rbx
mov    %r12,%r8
mov    0x10(%rsp),%rdi
addq   $0x4,(%rsp)
jmp    11c0 <tparam1+0x70>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%r14d
mov    %rbx,%rdi
call   1030 <strlen@plt>
sub    %rax,%r15
add    $0x1,%ebp
cmp    $0xa,%ebp
ja     143f <tparam1+0x2ef>
mov    $0x601,%eax
bt     %ebp,%eax
jae    143f <tparam1+0x2ef>
mov    0x30(%rsp),%rax
cmp    %rax,(%rsp)
jne    1470 <tparam1+0x320>
addl   $0x1,0xc(%rsp)
mov    0x28(%rsp),%rdi
jmp    1477 <tparam1+0x327>
movzbl 0x4(%r13),%ecx
and    $0x7f,%ecx
cmpb   $0x70,0x3(%r13)
jne    14c2 <tparam1+0x372>
mov    (%rsp),%rax
mov    -0x100(%rax,%rcx,4),%ecx
mov    (%rdi),%al
add    $0xd6,%al
cmp    $0x5,%al
ja     14f3 <tparam1+0x3a3>
movzbl %al,%eax
lea    0xc64(%rip),%rdx
movslq (%rdx,%rax,4),%rax
add    %rdx,%rax
jmp    *%rax
imul   %ebp,%ecx
jmp    14f3 <tparam1+0x3a3>
add    %ebp,%ecx
jmp    14f3 <tparam1+0x3a3>
sub    %ecx,%ebp
mov    %ebp,%ecx
jmp    14f3 <tparam1+0x3a3>
mov    %ebp,%eax
cltd
idiv   %ecx
mov    %eax,%ecx
mov    (%rsp),%rax
mov    %ecx,(%rax)
add    $0x5,%r13
mov    %r13,%rdi
jmp    11c0 <tparam1+0x70>
mov    %r8,%r15
movb   $0x0,(%rbx)
mov    0xc(%rsp),%ebp
test   %ebp,%ebp
mov    0x28(%rsp),%r12
jle    1533 <tparam1+0x3e3>
add    $0x1,%ebp
nopl   0x0(%rax,%rax,1)
mov    %rbx,%rdi
mov    %r12,%rsi
call   1070 <strcat@plt>
add    $0xffffffff,%ebp
cmp    $0x1,%ebp
ja     1520 <tparam1+0x3d0>
test   %r14d,%r14d
mov    0x18(%rsp),%rbp
jle    1565 <tparam1+0x415>
add    $0x1,%r14d
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %rbx,%rdi
mov    %rbp,%rsi
call   1070 <strcat@plt>
add    $0xffffffff,%r14d
cmp    $0x1,%r14d
ja     1550 <tparam1+0x400>
mov    %r15,%rax
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i8* @tparam1(i8* %0, i8* %1, i32 %2, i8* %3, i8* %4, i32* %5) {
%7 = alloca i8*
%8 = alloca i8*
%9 = alloca i32
%10 = alloca i8*
%11 = alloca i8*
%12 = alloca i32*
%13 = alloca i32
%14 = alloca i8*
%15 = alloca i8*
%16 = alloca i8*
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32*
%20 = alloca i32
%21 = alloca i32
%22 = alloca i8*
store i8* %0, i8** %7
store i8* %1, i8** %8
store i32 %2, i32* %9
store i8* %3, i8** %10
store i8* %4, i8** %11
store i32* %5, i32** %12
%23 = load i8*, i8** %7
store i8* %23, i8** %14
%24 = load i8*, i8** %8
store i8* %24, i8** %15
store i32 0, i32* %17
%25 = load i32*, i32** %12
store i32* %25, i32** %19
store i32 0, i32* %20
store i32 0, i32* %21
%26 = load i8*, i8** %8
%27 = load i32, i32* %9
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds i8, i8* %26, i64 %28
store i8* %29, i8** %16
br label %30
30: ; preds = %6, %381
%31 = load i8*, i8** %15
%32 = getelementptr inbounds i8, i8* %31, i64 5
%33 = load i8*, i8** %16
%34 = icmp uge i8* %32, %33
br i1 %34, label %35, label %82
35: ; preds = %30
%36 = load i32, i32* %17
%37 = icmp eq i32 %36, 0
br i1 %37, label %38, label %54
38: ; preds = %35
%39 = load i32, i32* %9
%40 = add nsw i32 %39, 40
store i32 %40, i32* %17
%41 = load i32, i32* %17
%42 = call i32 (i32, ...) bitcast (i32 (...)* @xmalloc to i32 (i32, ...)*)(i32 %41)
%43 = sext i32 %42 to i64
%44 = inttoptr i64 %43 to i8*
store i8* %44, i8** %22
%45 = load i8*, i8** %16
%46 = getelementptr inbounds i8, i8* %45, i64 40
store i8* %46, i8** %16
%47 = load i8*, i8** %22
%48 = load i8*, i8** %8
%49 = load i8*, i8** %15
%50 = load i8*, i8** %8
%51 = ptrtoint i8* %49 to i64
%52 = ptrtoint i8* %50 to i64
%53 = sub i64 %51, %52
br label %66
54: ; preds = %35
%55 = load i32, i32* %17
%56 = load i8*, i8** %16
%57 = sext i32 %55 to i64
%58 = getelementptr inbounds i8, i8* %56, i64 %57
store i8* %58, i8** %16
%59 = load i32, i32* %17
%60 = mul nsw i32 %59, 2
store i32 %60, i32* %17
%61 = load i8*, i8** %8
%62 = load i32, i32* %17
%63 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @xrealloc to i32 (i8*, i32, ...)*)(i8* %61, i32 %62)
%64 = sext i32 %63 to i64
%65 = inttoptr i64 %64 to i8*
store i8* %65, i8** %22
br label %66
66: ; preds = %54, %38
%67 = load i8*, i8** %22
%68 = load i8*, i8** %8
%69 = ptrtoint i8* %67 to i64
%70 = ptrtoint i8* %68 to i64
%71 = sub i64 %69, %70
%72 = load i8*, i8** %15
%73 = getelementptr inbounds i8, i8* %72, i64 %71
store i8* %73, i8** %15
%74 = load i8*, i8** %22
%75 = load i8*, i8** %8
%76 = ptrtoint i8* %74 to i64
%77 = ptrtoint i8* %75 to i64
%78 = sub i64 %76, %77
%79 = load i8*, i8** %16
%80 = getelementptr inbounds i8, i8* %79, i64 %78
store i8* %80, i8** %16
%81 = load i8*, i8** %22
store i8* %81, i8** %8
br label %82
82: ; preds = %66, %30
%83 = load i8*, i8** %14
%84 = getelementptr inbounds i8, i8* %83, i32 1
store i8* %84, i8** %14
%85 = load i8, i8* %83
%86 = sext i8 %85 to i32
store i32 %86, i32* %13
%87 = load i32, i32* %13
%88 = icmp ne i32 %87, 0
br i1 %88, label %90, label %89
89: ; preds = %82
br label %382
90: ; preds = %82
%91 = load i32, i32* %13
%92 = icmp eq i32 %91, 37
br i1 %92, label %93, label %375
93: ; preds = %90
%94 = load i8*, i8** %14
%95 = getelementptr inbounds i8, i8* %94, i32 1
store i8* %95, i8** %14
%96 = load i8, i8* %94
%97 = sext i8 %96 to i32
store i32 %97, i32* %13
%98 = load i32*, i32** %12
%99 = load i32, i32* %98
store i32 %99, i32* %18
%100 = load i32, i32* %13
switch i32 %100, label %374 [
i32 100, label %101
i32 51, label %110
i32 50, label %129
i32 67, label %148
i32 43, label %160
i32 46, label %167
i32 102, label %217
i32 98, label %220
i32 114, label %223
i32 62, label %234
i32 97, label %254
i32 105, label %330
i32 37, label %339
i32 110, label %340
i32 109, label %349
i32 66, label %358
i32 68, label %366
]
101: ; preds = %93
%102 = load i32, i32* %18
%103 = icmp slt i32 %102, 10
br i1 %103, label %104, label %105
104: ; preds = %101
br label %139
105: ; preds = %101
%106 = load i32, i32* %18
%107 = icmp slt i32 %106, 100
br i1 %107, label %108, label %109
108: ; preds = %105
br label %130
109: ; preds = %105
br label %110
110: ; preds = %93, %109
%111 = load i32, i32* %18
%112 = icmp sgt i32 %111, 999
br i1 %112, label %113, label %122
113: ; preds = %110
%114 = load i32, i32* %18
%115 = sdiv i32 %114, 1000
%116 = add nsw i32 %115, 48
%117 = trunc i32 %116 to i8
%118 = load i8*, i8** %15
%119 = getelementptr inbounds i8, i8* %118, i32 1
store i8* %119, i8** %15
store i8 %117, i8* %118
%120 = load i32, i32* %18
%121 = srem i32 %120, 1000
store i32 %121, i32* %18
br label %122
122: ; preds = %113, %110
%123 = load i32, i32* %18
%124 = sdiv i32 %123, 100
%125 = add nsw i32 %124, 48
%126 = trunc i32 %125 to i8
%127 = load i8*, i8** %15
%128 = getelementptr inbounds i8, i8* %127, i32 1
store i8* %128, i8** %15
store i8 %126, i8* %127
br label %129
129: ; preds = %93, %122
br label %130
130: ; preds = %129, %108
%131 = load i32, i32* %18
%132 = srem i32 %131, 100
store i32 %132, i32* %18
%133 = load i32, i32* %18
%134 = sdiv i32 %133, 10
%135 = add nsw i32 %134, 48
%136 = trunc i32 %135 to i8
%137 = load i8*, i8** %15
%138 = getelementptr inbounds i8, i8* %137, i32 1
store i8* %138, i8** %15
store i8 %136, i8* %137
br label %139
139: ; preds = %130, %104
%140 = load i32, i32* %18
%141 = srem i32 %140, 10
%142 = add nsw i32 %141, 48
%143 = trunc i32 %142 to i8
%144 = load i8*, i8** %15
%145 = getelementptr inbounds i8, i8* %144, i32 1
store i8* %145, i8** %15
store i8 %143, i8* %144
%146 = load i32*, i32** %12
%147 = getelementptr inbounds i32, i32* %146, i32 1
store i32* %147, i32** %12
br label %374
148: ; preds = %93
%149 = load i32, i32* %18
%150 = icmp sge i32 %149, 96
br i1 %150, label %151, label %159
151: ; preds = %148
%152 = load i32, i32* %18
%153 = sdiv i32 %152, 96
%154 = trunc i32 %153 to i8
%155 = load i8*, i8** %15
%156 = getelementptr inbounds i8, i8* %155, i32 1
store i8* %156, i8** %15
store i8 %154, i8* %155
%157 = load i32, i32* %18
%158 = srem i32 %157, 96
store i32 %158, i32* %18
br label %159
159: ; preds = %151, %148
br label %160
160: ; preds = %93, %159
%161 = load i8*, i8** %14
%162 = getelementptr inbounds i8, i8* %161, i32 1
store i8* %162, i8** %14
%163 = load i8, i8* %161
%164 = sext i8 %163 to i32
%165 = load i32, i32* %18
%166 = add nsw i32 %165, %164
store i32 %166, i32* %18
br label %167
167: ; preds = %93, %160
%168 = load i8*, i8** %11
%169 = icmp ne i8* %168, null
br i1 %169, label %170, label %206
170: ; preds = %167
br label %171
171: ; preds = %204, %170
%172 = load i32, i32* %18
%173 = icmp eq i32 %172, 0
br i1 %173, label %180, label %174
174: ; preds = %171
%175 = load i32, i32* %18
%176 = icmp eq i32 %175, 10
br i1 %176, label %180, label %177
177: ; preds = %174
%178 = load i32, i32* %18
%179 = icmp eq i32 %178, 9
br label %180
180: ; preds = %177, %174, %171
%181 = phi i1 [ true, %174 ], [ true, %171 ], [ %179, %177 ]
br i1 %181, label %182, label %205
182: ; preds = %180
%183 = load i32, i32* %18
%184 = add nsw i32 %183, 1
store i32 %184, i32* %18
%185 = load i32*, i32** %12
%186 = load i32*, i32** %19
%187 = icmp eq i32* %185, %186
br i1 %187, label %188, label %196
188: ; preds = %182
%189 = load i32, i32* %21
%190 = add nsw i32 %189, 1
store i32 %190, i32* %21
%191 = load i8*, i8** %10
%192 = call i64 @strlen(i8* %191)
%193 = load i8*, i8** %16
%194 = sub i64 0, %192
%195 = getelementptr inbounds i8, i8* %193, i64 %194
store i8* %195, i8** %16
br label %204
196: ; preds = %182
%197 = load i32, i32* %20
%198 = add nsw i32 %197, 1
store i32 %198, i32* %20
%199 = load i8*, i8** %11
%200 = call i64 @strlen(i8* %199)
%201 = load i8*, i8** %16
%202 = sub i64 0, %200
%203 = getelementptr inbounds i8, i8* %201, i64 %202
store i8* %203, i8** %16
br label %204
204: ; preds = %196, %188
br label %171
205: ; preds = %180
br label %206
206: ; preds = %205, %167
%207 = load i32, i32* %18
%208 = icmp ne i32 %207, 0
br i1 %208, label %209, label %211
209: ; preds = %206
%210 = load i32, i32* %18
br label %212
211: ; preds = %206
br label %212
212: ; preds = %211, %209
%213 = phi i32 [ %210, %209 ], [ 128, %211 ]
%214 = trunc i32 %213 to i8
%215 = load i8*, i8** %15
%216 = getelementptr inbounds i8, i8* %215, i32 1
store i8* %216, i8** %15
store i8 %214, i8* %215
br label %217
217: ; preds = %93, %212
%218 = load i32*, i32** %12
%219 = getelementptr inbounds i32, i32* %218, i32 1
store i32* %219, i32** %12
br label %374
220: ; preds = %93
%221 = load i32*, i32** %12
%222 = getelementptr inbounds i32, i32* %221, i32 -1
store i32* %222, i32** %12
br label %374
223: ; preds = %93
%224 = load i32*, i32** %12
%225 = getelementptr inbounds i32, i32* %224, i64 1
%226 = load i32, i32* %225
%227 = load i32*, i32** %12
%228 = getelementptr inbounds i32, i32* %227, i64 0
store i32 %226, i32* %228
%229 = load i32, i32* %18
%230 = load i32*, i32** %12
%231 = getelementptr inbounds i32, i32* %230, i64 1
store i32 %229, i32* %231
%232 = load i32*, i32** %19
%233 = getelementptr inbounds i32, i32* %232, i32 1
store i32* %233, i32** %19
br label %374
234: ; preds = %93
%235 = load i32*, i32** %12
%236 = getelementptr inbounds i32, i32* %235, i64 0
%237 = load i32, i32* %236
%238 = load i8*, i8** %14
%239 = getelementptr inbounds i8, i8* %238, i32 1
store i8* %239, i8** %14
%240 = load i8, i8* %238
%241 = sext i8 %240 to i32
%242 = icmp sgt i32 %237, %241
br i1 %242, label %243, label %251
243: ; preds = %234
%244 = load i8*, i8** %14
%245 = load i8, i8* %244
%246 = sext i8 %245 to i32
%247 = load i32*, i32** %12
%248 = getelementptr inbounds i32, i32* %247, i64 0
%249 = load i32, i32* %248
%250 = add nsw i32 %249, %246
store i32 %250, i32* %248
br label %251
251: ; preds = %243, %234
%252 = load i8*, i8** %14
%253 = getelementptr inbounds i8, i8* %252, i32 1
store i8* %253, i8** %14
br label %374
254: ; preds = %93
%255 = load i8*, i8** %14
%256 = getelementptr inbounds i8, i8* %255, i64 2
%257 = load i8, i8* %256
%258 = sext i8 %257 to i32
%259 = and i32 %258, 127
store i32 %259, i32* %18
%260 = load i8*, i8** %14
%261 = getelementptr inbounds i8, i8* %260, i64 1
%262 = load i8, i8* %261
%263 = sext i8 %262 to i32
%264 = icmp eq i32 %263, 112
br i1 %264, label %265, label %272
265: ; preds = %254
%266 = load i32*, i32** %12
%267 = load i32, i32* %18
%268 = sub nsw i32 %267, 64
%269 = sext i32 %268 to i64
%270 = getelementptr inbounds i32, i32* %266, i64 %269
%271 = load i32, i32* %270
store i32 %271, i32* %18
br label %272
272: ; preds = %265, %254
%273 = load i8*, i8** %14
%274 = getelementptr inbounds i8, i8* %273, i64 0
%275 = load i8, i8* %274
%276 = sext i8 %275 to i32
%277 = icmp eq i32 %276, 45
br i1 %277, label %278, label %284
278: ; preds = %272
%279 = load i32, i32* %18
%280 = load i32*, i32** %12
%281 = getelementptr inbounds i32, i32* %280, i64 0
%282 = load i32, i32* %281
%283 = sub nsw i32 %282, %279
store i32 %283, i32* %281
br label %327
284: ; preds = %272
%285 = load i8*, i8** %14
%286 = getelementptr inbounds i8, i8* %285, i64 0
%287 = load i8, i8* %286
%288 = sext i8 %287 to i32
%289 = icmp eq i32 %288, 43
br i1 %289, label %290, label %296
290: ; preds = %284
%291 = load i32, i32* %18
%292 = load i32*, i32** %12
%293 = getelementptr inbounds i32, i32* %292, i64 0
%294 = load i32, i32* %293
%295 = add nsw i32 %294, %291
store i32 %295, i32* %293
br label %326
296: ; preds = %284
%297 = load i8*, i8** %14
%298 = getelementptr inbounds i8, i8* %297, i64 0
%299 = load i8, i8* %298
%300 = sext i8 %299 to i32
%301 = icmp eq i32 %300, 42
br i1 %301, label %302, label %308
302: ; preds = %296
%303 = load i32, i32* %18
%304 = load i32*, i32** %12
%305 = getelementptr inbounds i32, i32* %304, i64 0
%306 = load i32, i32* %305
%307 = mul nsw i32 %306, %303
store i32 %307, i32* %305
br label %325
308: ; preds = %296
%309 = load i8*, i8** %14
%310 = getelementptr inbounds i8, i8* %309, i64 0
%311 = load i8, i8* %310
%312 = sext i8 %311 to i32
%313 = icmp eq i32 %312, 47
br i1 %313, label %314, label %320
314: ; preds = %308
%315 = load i32, i32* %18
%316 = load i32*, i32** %12
%317 = getelementptr inbounds i32, i32* %316, i64 0
%318 = load i32, i32* %317
%319 = sdiv i32 %318, %315
store i32 %319, i32* %317
br label %324
320: ; preds = %308
%321 = load i32, i32* %18
%322 = load i32*, i32** %12
%323 = getelementptr inbounds i32, i32* %322, i64 0
store i32 %321, i32* %323
br label %324
324: ; preds = %320, %314
br label %325
325: ; preds = %324, %302
br label %326
326: ; preds = %325, %290
br label %327
327: ; preds = %326, %278
%328 = load i8*, i8** %14
%329 = getelementptr inbounds i8, i8* %328, i64 3
store i8* %329, i8** %14
br label %374
330: ; preds = %93
%331 = load i32*, i32** %12
%332 = getelementptr inbounds i32, i32* %331, i64 0
%333 = load i32, i32* %332
%334 = add nsw i32 %333, 1
store i32 %334, i32* %332
%335 = load i32*, i32** %12
%336 = getelementptr inbounds i32, i32* %335, i64 1
%337 = load i32, i32* %336
%338 = add nsw i32 %337, 1
store i32 %338, i32* %336
br label %374
339: ; preds = %93
br label %376
340: ; preds = %93
%341 = load i32*, i32** %12
%342 = getelementptr inbounds i32, i32* %341, i64 0
%343 = load i32, i32* %342
%344 = xor i32 %343, 96
store i32 %344, i32* %342
%345 = load i32*, i32** %12
%346 = getelementptr inbounds i32, i32* %345, i64 1
%347 = load i32, i32* %346
%348 = xor i32 %347, 96
store i32 %348, i32* %346
br label %374
349: ; preds = %93
%350 = load i32*, i32** %12
%351 = getelementptr inbounds i32, i32* %350, i64 0
%352 = load i32, i32* %351
%353 = xor i32 %352, 127
store i32 %353, i32* %351
%354 = load i32*, i32** %12
%355 = getelementptr inbounds i32, i32* %354, i64 1
%356 = load i32, i32* %355
%357 = xor i32 %356, 127
store i32 %357, i32* %355
br label %374
358: ; preds = %93
%359 = load i32, i32* %18
%360 = sdiv i32 %359, 10
%361 = mul nsw i32 6, %360
%362 = load i32*, i32** %12
%363 = getelementptr inbounds i32, i32* %362, i64 0
%364 = load i32, i32* %363
%365 = add nsw i32 %364, %361
store i32 %365, i32* %363
br label %374
366: ; preds = %93
%367 = load i32, i32* %18
%368 = srem i32 %367, 16
%369 = mul nsw i32 2, %368
%370 = load i32*, i32** %12
%371 = getelementptr inbounds i32, i32* %370, i64 0
%372 = load i32, i32* %371
%373 = sub nsw i32 %372, %369
store i32 %373, i32* %371
br label %374
374: ; preds = %93, %366, %358, %349, %340, %330, %327, %251, %223, %220, %217, %139
br label %381
375: ; preds = %90
br label %376
376: ; preds = %375, %339
%377 = load i32, i32* %13
%378 = trunc i32 %377 to i8
%379 = load i8*, i8** %15
%380 = getelementptr inbounds i8, i8* %379, i32 1
store i8* %380, i8** %15
store i8 %378, i8* %379
br label %381
381: ; preds = %376, %374
br label %30
382: ; preds = %89
%383 = load i8*, i8** %15
store i8 0, i8* %383
br label %384
384: ; preds = %388, %382
%385 = load i32, i32* %21
%386 = add nsw i32 %385, -1
store i32 %386, i32* %21
%387 = icmp sgt i32 %385, 0
br i1 %387, label %388, label %392
388: ; preds = %384
%389 = load i8*, i8** %15
%390 = load i8*, i8** %10
%391 = call i8* @strcat(i8* %389, i8* %390)
br label %384
392: ; preds = %384
br label %393
393: ; preds = %397, %392
%394 = load i32, i32* %20
%395 = add nsw i32 %394, -1
store i32 %395, i32* %20
%396 = icmp sgt i32 %394, 0
br i1 %396, label %397, label %401
397: ; preds = %393
%398 = load i8*, i8** %15
%399 = load i8*, i8** %11
%400 = call i8* @strcat(i8* %398, i8* %399)
br label %393
401: ; preds = %393
%402 = load i8*, i8** %8
ret i8* %402
}

LLVM IR (-O2):
define i8* @tparam1(i8* nocapture %0, i8* %1, i32 %2, i8* nocapture %3, i8* %4, i32* %5) {
%7 = sext i32 %2 to i64
%8 = getelementptr inbounds i8, i8* %1, i64 %7
%9 = add nsw i32 %2, 40
%10 = icmp eq i8* %4, null
br label %11
11: ; preds = %96, %6
%12 = phi i8* [ %1, %6 ], [ %50, %96 ]
%13 = phi i32* [ %5, %6 ], [ %97, %96 ]
%14 = phi i8* [ %0, %6 ], [ %98, %96 ]
%15 = phi i8* [ %1, %6 ], [ %99, %96 ]
%16 = phi i8* [ %8, %6 ], [ %100, %96 ]
%17 = phi i32 [ 0, %6 ], [ %53, %96 ]
%18 = phi i32* [ %5, %6 ], [ %101, %96 ]
%19 = phi i32 [ 0, %6 ], [ %102, %96 ]
%20 = phi i32 [ 0, %6 ], [ %103, %96 ]
%21 = getelementptr inbounds i8, i8* %15, i64 5
%22 = icmp ult i8* %21, %16
br i1 %22, label %49, label %23
23: ; preds = %11
%24 = icmp eq i32 %17, 0
br i1 %24, label %25, label %32
25: ; preds = %23
%26 = tail call i32 (i32, ...) bitcast (i32 (...)* @xmalloc to i32 (i32, ...)*)(i32 %9)
%27 = sext i32 %26 to i64
%28 = inttoptr i64 %27 to i8*
%29 = ptrtoint i8* %15 to i64
%30 = ptrtoint i8* %12 to i64
%31 = sub i64 %29, %30
tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %28, i8* align 1 %12, i64 %31, i1 false)
br label %39
32: ; preds = %23
%33 = sext i32 %17 to i64
%34 = shl nsw i32 %17, 1
%35 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @xrealloc to i32 (i8*, i32, ...)*)(i8* %12, i32 %34)
%36 = sext i32 %35 to i64
%37 = inttoptr i64 %36 to i8*
%38 = ptrtoint i8* %12 to i64
br label %39
39: ; preds = %32, %25
%40 = phi i64 [ %38, %32 ], [ %30, %25 ]
%41 = phi i64 [ %33, %32 ], [ 40, %25 ]
%42 = phi i32 [ %34, %32 ], [ %9, %25 ]
%43 = phi i8* [ %37, %32 ], [ %28, %25 ]
%44 = getelementptr inbounds i8, i8* %16, i64 %41
%45 = ptrtoint i8* %43 to i64
%46 = sub i64 %45, %40
%47 = getelementptr inbounds i8, i8* %15, i64 %46
%48 = getelementptr inbounds i8, i8* %44, i64 %46
br label %49
49: ; preds = %39, %11
%50 = phi i8* [ %43, %39 ], [ %12, %11 ]
%51 = phi i8* [ %47, %39 ], [ %15, %11 ]
%52 = phi i8* [ %48, %39 ], [ %16, %11 ]
%53 = phi i32 [ %42, %39 ], [ %17, %11 ]
%54 = getelementptr inbounds i8, i8* %14, i64 1
%55 = load i8, i8* %14
switch i8 %55, label %226 [
i8 0, label %229
i8 37, label %56
]
56: ; preds = %49
%57 = getelementptr inbounds i8, i8* %14, i64 2
%58 = load i8, i8* %54
%59 = sext i8 %58 to i32
%60 = load i32, i32* %13
switch i32 %59, label %96 [
i32 100, label %61
i32 51, label %65
i32 50, label %80
i32 67, label %104
i32 43, label %111
i32 46, label %118
i32 102, label %152
i32 98, label %159
i32 114, label %161
i32 62, label %165
i32 97, label %176
i32 105, label %203
i32 37, label %226
i32 110, label %208
i32 109, label %213
i32 66, label %218
i32 68, label %222
]
61: ; preds = %56
%62 = icmp slt i32 %60, 10
br i1 %62, label %88, label %63
63: ; preds = %61
%64 = icmp ult i32 %60, 100
br i1 %64, label %80, label %65
65: ; preds = %63, %56
%66 = icmp sgt i32 %60, 999
br i1 %66, label %67, label %73
67: ; preds = %65
%68 = udiv i32 %60, 1000
%69 = trunc i32 %68 to i8
%70 = add i8 %69, 48
%71 = getelementptr inbounds i8, i8* %51, i64 1
store i8 %70, i8* %51
%72 = urem i32 %60, 1000
br label %73
73: ; preds = %67, %65
%74 = phi i8* [ %71, %67 ], [ %51, %65 ]
%75 = phi i32 [ %72, %67 ], [ %60, %65 ]
%76 = sdiv i32 %75, 100
%77 = trunc i32 %76 to i8
%78 = add i8 %77, 48
%79 = getelementptr inbounds i8, i8* %74, i64 1
store i8 %78, i8* %74
br label %80
80: ; preds = %73, %56, %63
%81 = phi i8* [ %51, %56 ], [ %79, %73 ], [ %51, %63 ]
%82 = phi i32 [ %60, %56 ], [ %75, %73 ], [ %60, %63 ]
%83 = srem i32 %82, 100
%84 = trunc i32 %83 to i8
%85 = sdiv i8 %84, 10
%86 = add nsw i8 %85, 48
%87 = getelementptr inbounds i8, i8* %81, i64 1
store i8 %86, i8* %81
br label %88
88: ; preds = %61, %80
%89 = phi i8* [ %87, %80 ], [ %51, %61 ]
%90 = phi i32 [ %83, %80 ], [ %60, %61 ]
%91 = srem i32 %90, 10
%92 = trunc i32 %91 to i8
%93 = add nsw i8 %92, 48
%94 = getelementptr inbounds i8, i8* %89, i64 1
store i8 %93, i8* %89
%95 = getelementptr inbounds i32, i32* %13, i64 1
br label %96
96: ; preds = %88, %152, %159, %161, %174, %200, %203, %208, %213, %218, %222, %56, %226
%97 = phi i32* [ %95, %88 ], [ %158, %152 ], [ %160, %159 ], [ %13, %161 ], [ %13, %174 ], [ %13, %200 ], [ %13, %203 ], [ %13, %208 ], [ %13, %213 ], [ %13, %218 ], [ %13, %222 ], [ %13, %56 ], [ %13, %226 ]
%98 = phi i8* [ %57, %88 ], [ %153, %152 ], [ %57, %159 ], [ %57, %161 ], [ %175, %174 ], [ %202, %200 ], [ %57, %203 ], [ %57, %208 ], [ %57, %213 ], [ %57, %218 ], [ %57, %222 ], [ %57, %56 ], [ %227, %226 ]
%99 = phi i8* [ %94, %88 ], [ %154, %152 ], [ %51, %159 ], [ %51, %161 ], [ %51, %174 ], [ %51, %200 ], [ %51, %203 ], [ %51, %208 ], [ %51, %213 ], [ %51, %218 ], [ %51, %222 ], [ %51, %56 ], [ %228, %226 ]
%100 = phi i8* [ %52, %88 ], [ %155, %152 ], [ %52, %159 ], [ %52, %161 ], [ %52, %174 ], [ %52, %200 ], [ %52, %203 ], [ %52, %208 ], [ %52, %213 ], [ %52, %218 ], [ %52, %222 ], [ %52, %56 ], [ %52, %226 ]
%101 = phi i32* [ %18, %88 ], [ %18, %152 ], [ %18, %159 ], [ %164, %161 ], [ %18, %174 ], [ %18, %200 ], [ %18, %203 ], [ %18, %208 ], [ %18, %213 ], [ %18, %218 ], [ %18, %222 ], [ %18, %56 ], [ %18, %226 ]
%102 = phi i32 [ %19, %88 ], [ %156, %152 ], [ %19, %159 ], [ %19, %161 ], [ %19, %174 ], [ %19, %200 ], [ %19, %203 ], [ %19, %208 ], [ %19, %213 ], [ %19, %218 ], [ %19, %222 ], [ %19, %56 ], [ %19, %226 ]
%103 = phi i32 [ %20, %88 ], [ %157, %152 ], [ %20, %159 ], [ %20, %161 ], [ %20, %174 ], [ %20, %200 ], [ %20, %203 ], [ %20, %208 ], [ %20, %213 ], [ %20, %218 ], [ %20, %222 ], [ %20, %56 ], [ %20, %226 ]
br label %11
104: ; preds = %56
%105 = icmp sgt i32 %60, 95
br i1 %105, label %106, label %111
106: ; preds = %104
%107 = udiv i32 %60, 96
%108 = trunc i32 %107 to i8
%109 = getelementptr inbounds i8, i8* %51, i64 1
store i8 %108, i8* %51
%110 = urem i32 %60, 96
br label %111
111: ; preds = %104, %106, %56
%112 = phi i8* [ %51, %56 ], [ %109, %106 ], [ %51, %104 ]
%113 = phi i32 [ %60, %56 ], [ %110, %106 ], [ %60, %104 ]
%114 = getelementptr inbounds i8, i8* %14, i64 3
%115 = load i8, i8* %57
%116 = sext i8 %115 to i32
%117 = add nsw i32 %113, %116
br label %118
118: ; preds = %56, %111
%119 = phi i8* [ %57, %56 ], [ %114, %111 ]
%120 = phi i8* [ %51, %56 ], [ %112, %111 ]
%121 = phi i32 [ %60, %56 ], [ %117, %111 ]
br i1 %10, label %143, label %122
122: ; preds = %118
%123 = icmp eq i32* %13, %18
br label %124
124: ; preds = %122, %137
%125 = phi i8* [ %142, %137 ], [ %52, %122 ]
%126 = phi i32 [ %130, %137 ], [ %121, %122 ]
%127 = phi i32 [ %139, %137 ], [ %19, %122 ]
%128 = phi i32 [ %140, %137 ], [ %20, %122 ]
switch i32 %126, label %143 [
i32 10, label %129
i32 9, label %129
i32 0, label %129
]
129: ; preds = %124, %124, %124
%130 = add nuw nsw i32 %126, 1
br i1 %123, label %131, label %134
131: ; preds = %129
%132 = add nsw i32 %128, 1
%133 = tail call i64 @strlen(i8* dereferenceable(1) %3)
br label %137
134: ; preds = %129
%135 = add nsw i32 %127, 1
%136 = tail call i64 @strlen(i8* %4)
br label %137
137: ; preds = %134, %131
%138 = phi i64 [ %133, %131 ], [ %136, %134 ]
%139 = phi i32 [ %127, %131 ], [ %135, %134 ]
%140 = phi i32 [ %132, %131 ], [ %128, %134 ]
%141 = sub i64 0, %138
%142 = getelementptr inbounds i8, i8* %125, i64 %141
br label %124
143: ; preds = %124, %118
%144 = phi i8* [ %52, %118 ], [ %125, %124 ]
%145 = phi i32 [ %121, %118 ], [ %126, %124 ]
%146 = phi i32 [ %19, %118 ], [ %127, %124 ]
%147 = phi i32 [ %20, %118 ], [ %128, %124 ]
%148 = icmp eq i32 %145, 0
%149 = trunc i32 %145 to i8
%150 = select i1 %148, i8 -128, i8 %149
%151 = getelementptr inbounds i8, i8* %120, i64 1
store i8 %150, i8* %120
br label %152
152: ; preds = %56, %143
%153 = phi i8* [ %57, %56 ], [ %119, %143 ]
%154 = phi i8* [ %51, %56 ], [ %151, %143 ]
%155 = phi i8* [ %52, %56 ], [ %144, %143 ]
%156 = phi i32 [ %19, %56 ], [ %146, %143 ]
%157 = phi i32 [ %20, %56 ], [ %147, %143 ]
%158 = getelementptr inbounds i32, i32* %13, i64 1
br label %96
159: ; preds = %56
%160 = getelementptr inbounds i32, i32* %13, i64 -1
br label %96
161: ; preds = %56
%162 = getelementptr inbounds i32, i32* %13, i64 1
%163 = load i32, i32* %162
store i32 %163, i32* %13
store i32 %60, i32* %162
%164 = getelementptr inbounds i32, i32* %18, i64 1
br label %96
165: ; preds = %56
%166 = load i8, i8* %57
%167 = sext i8 %166 to i32
%168 = icmp sgt i32 %60, %167
br i1 %168, label %169, label %174
169: ; preds = %165
%170 = getelementptr inbounds i8, i8* %14, i64 3
%171 = load i8, i8* %170
%172 = sext i8 %171 to i32
%173 = add nsw i32 %60, %172
store i32 %173, i32* %13
br label %174
174: ; preds = %169, %165
%175 = getelementptr inbounds i8, i8* %14, i64 4
br label %96
176: ; preds = %56
%177 = getelementptr inbounds i8, i8* %14, i64 4
%178 = load i8, i8* %177
%179 = and i8 %178, 127
%180 = zext i8 %179 to i32
%181 = getelementptr inbounds i8, i8* %14, i64 3
%182 = load i8, i8* %181
%183 = icmp eq i8 %182, 112
br i1 %183, label %184, label %189
184: ; preds = %176
%185 = add nsw i32 %180, -64
%186 = sext i32 %185 to i64
%187 = getelementptr inbounds i32, i32* %13, i64 %186
%188 = load i32, i32* %187
br label %189
189: ; preds = %184, %176
%190 = phi i32 [ %188, %184 ], [ %180, %176 ]
%191 = load i8, i8* %57
switch i8 %191, label %200 [
i8 45, label %192
i8 43, label %194
i8 42, label %196
i8 47, label %198
]
192: ; preds = %189
%193 = sub nsw i32 %60, %190
br label %200
194: ; preds = %189
%195 = add nsw i32 %190, %60
br label %200
196: ; preds = %189
%197 = mul nsw i32 %190, %60
br label %200
198: ; preds = %189
%199 = sdiv i32 %60, %190
br label %200
200: ; preds = %189, %194, %198, %196, %192
%201 = phi i32 [ %195, %194 ], [ %199, %198 ], [ %197, %196 ], [ %193, %192 ], [ %190, %189 ]
store i32 %201, i32* %13
%202 = getelementptr inbounds i8, i8* %14, i64 5
br label %96
203: ; preds = %56
%204 = add nsw i32 %60, 1
store i32 %204, i32* %13
%205 = getelementptr inbounds i32, i32* %13, i64 1
%206 = load i32, i32* %205
%207 = add nsw i32 %206, 1
store i32 %207, i32* %205
br label %96
208: ; preds = %56
%209 = xor i32 %60, 96
store i32 %209, i32* %13
%210 = getelementptr inbounds i32, i32* %13, i64 1
%211 = load i32, i32* %210
%212 = xor i32 %211, 96
store i32 %212, i32* %210
br label %96
213: ; preds = %56
%214 = xor i32 %60, 127
store i32 %214, i32* %13
%215 = getelementptr inbounds i32, i32* %13, i64 1
%216 = load i32, i32* %215
%217 = xor i32 %216, 127
store i32 %217, i32* %215
br label %96
218: ; preds = %56
%219 = sdiv i32 %60, 10
%220 = mul nsw i32 %219, 6
%221 = add nsw i32 %220, %60
store i32 %221, i32* %13
br label %96
222: ; preds = %56
%223 = srem i32 %60, 16
%224 = mul nsw i32 %223, -2
%225 = add i32 %224, %60
store i32 %225, i32* %13
br label %96
226: ; preds = %49, %56
%227 = phi i8* [ %57, %56 ], [ %54, %49 ]
%228 = getelementptr inbounds i8, i8* %51, i64 1
store i8 %55, i8* %51
br label %96
229: ; preds = %49
store i8 0, i8* %51
%230 = icmp sgt i32 %20, 0
br i1 %230, label %233, label %231
231: ; preds = %233, %229
%232 = icmp sgt i32 %19, 0
br i1 %232, label %238, label %243
233: ; preds = %229, %233
%234 = phi i32 [ %235, %233 ], [ %20, %229 ]
%235 = add nsw i32 %234, -1
%236 = tail call i8* @strcat(i8* %51, i8* dereferenceable(1) %3)
%237 = icmp ugt i32 %234, 1
br i1 %237, label %233, label %231
238: ; preds = %231, %238
%239 = phi i32 [ %240, %238 ], [ %19, %231 ]
%240 = add nsw i32 %239, -1
%241 = tail call i8* @strcat(i8* %51, i8* dereferenceable(1) %4)
%242 = icmp ugt i32 %239, 1
br i1 %242, label %238, label %243
243: ; preds = %238, %231
ret i8* %50
}