#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 api_alloctimer();
int /*<<< orphan*/ api_beep(int);
int /*<<< orphan*/ api_boxfilwin(int, int, int, int, int, int);
int /*<<< orphan*/ api_cmdline(char *, int);
int /*<<< orphan*/ api_fclose(int);
int api_fopen(char *);
int /*<<< orphan*/ api_fread(char *, int, int);
int api_fsize(int, int /*<<< orphan*/);
int /*<<< orphan*/ api_inittimer(int, int);
int api_openwin(char *, int, int, int, char *);
int /*<<< orphan*/ api_putstrwin(int, int, int, int, int, char *);
int /*<<< orphan*/ api_refreshwin(int, int, int, int, int);
int /*<<< orphan*/ end(char *);
int strlen(char *);
int strtol(char *, char **, int);
int /*<<< orphan*/ waittimer(int, int);
void HariMain(void) {
  char winbuf[256 * 112], txtbuf[100 * 1024];
  char s[32], *p, *r;
  int win, timer, i, j, t = 120, l = 192 / 4, o = 4, q = 7, note_old = 0;
  static int tonetable[12] = {1071618315, 1135340056, 1202850889, 1274376125,
                              1350154473, 1430438836, 1515497155, 1605613306,
                              1701088041, 1802240000, 1909406767, 2022946002};
  static int notetable[7] = {+9, +11, +0, +2, +4, +5, +7};
  api_cmdline(s, 30);
  for (p = s; *p > ' '; p++) {
  }
  for (; *p == ' '; p++) {
  }
  i = strlen(p);
  if (i > 12) {
  file_error:
    end("file open error.\n");
  }
  if (i == 0) {
    end(0);
  }
  win = api_openwin(winbuf, 256, 112, -1, "mmlplay");
  api_putstrwin(win, 128, 32, 0, i, p);
  api_boxfilwin(win, 8, 60, 247, 76, 7);
  api_boxfilwin(win, 6, 86, 249, 105, 7);
  i = api_fopen(p);
  if (i == 0) {
    goto file_error;
  }
  j = api_fsize(i, 0);
  if (j >= 100 * 1024) {
    j = 100 * 1024 - 1;
  }
  api_fread(txtbuf, j, i);
  api_fclose(i);
  txtbuf[j] = 0;
  r = txtbuf;
  i = 0;
  for (p = txtbuf; *p != 0; p++) {
    if (i == 0 && *p > ' ') {
      if (*p == '/') {
        if (p[1] == '*') {
          i = 1;
        } else if (p[1] == '/') {
          i = 2;
        } else {
          *r = *p;
          if ('a' <= *p && *p <= 'z') {
            *r += 'A' - 'a';
          }
          r++;
        }
      } else if (*p == 0x22) {
        *r = *p;
        r++;
        i = 3;
      } else {
        *r = *p;
        r++;
      }
    } else if (i == 1 && *p == '*' && p[1] == '/') {
      p++;
      i = 0;
    } else if (i == 2 && *p == 0x0a) {
      i = 0;
    } else if (i == 3) {
      *r = *p;
      r++;
      if (*p == 0x22) {
        i = 0;
      } else if (*p == '%') {
        p++;
        *r = *p;
        r++;
      }
    }
  }
  *r = 0;
  timer = api_alloctimer();
  api_inittimer(timer, 128);
  p = txtbuf;
  for (;;) {
    if (('A' <= *p && *p <= 'G') || *p == 'R') {
      if (*p == 'R') {
        i = 0;
        s[0] = 0;
      } else {
        i = o * 12 + notetable[*p - 'A'] + 12;
        s[0] = 'O';
        s[1] = '0' + o;
        s[2] = *p;
        s[3] = ' ';
        s[4] = 0;
      }
      p++;
      if (*p == '+' || *p == '-' || *p == '#') {
        s[3] = *p;
        if (*p == '-') {
          i--;
        } else {
          i++;
        }
        p++;
      }
      if (i != note_old) {
        api_boxfilwin(win + 1, 32, 36, 63, 51, 8);
        if (s[0] != 0) {
          api_putstrwin(win + 1, 32, 36, 10, 4, s);
        }
        api_refreshwin(win, 32, 36, 64, 52);
        if (28 <= note_old && note_old <= 107) {
          api_boxfilwin(win, (note_old - 28) * 3 + 8, 60,
                        (note_old - 28) * 3 + 10, 76, 7);
        }
        if (28 <= i && i <= 107) {
          api_boxfilwin(win, (i - 28) * 3 + 8, 60, (i - 28) * 3 + 10, 76, 4);
        }
        if (s[0] != 0) {
          api_beep(tonetable[i % 12] >> (17 - i / 12));
        } else {
          api_beep(0);
        }
        note_old = i;
      }
      if ('0' <= *p && *p <= '9') {
        i = 192 / strtol(p, &p, 10);
      } else {
        i = l;
      }
      for (; *p == '.';) {
        p++;
        i += i / 2;
      }
      i *= (60 * 100 / 48);
      i /= t;
      if (s[0] != 0 && q < 8 && *p != '&') {
        j = i * q / 8;
        waittimer(timer, j);
        api_boxfilwin(win, 32, 36, 63, 51, 8);
        if (28 <= note_old && note_old <= 107) {
          api_boxfilwin(win, (note_old - 28) * 3 + 8, 60,
                        (note_old - 28) * 3 + 10, 76, 7);
        }
        note_old = 0;
        api_beep(0);
      } else {
        j = 0;
        if (*p == '&') {
          p++;
        }
      }
      waittimer(timer, i - j);
    } else if (*p == '<') {
      p++;
      o--;
    } else if (*p == '>') {
      p++;
      o++;
    } else if (*p == 'O') {
      o = strtol(p + 1, &p, 10);
    } else if (*p == 'Q') {
      q = strtol(p + 1, &p, 10);
    } else if (*p == 'L') {
      l = strtol(p + 1, &p, 10);
      if (l == 0) {
        goto syntax_error;
      }
      l = 192 / l;
      for (; *p == '.';) {
        p++;
        l += l / 2;
      }
    } else if (*p == 'T') {
      t = strtol(p + 1, &p, 10);
    } else if (*p == '$') {
      if (p[1] == 'K') {
        p += 2;
        for (; *p != 0x22; p++) {
          if (*p == 0) {
            goto syntax_error;
          }
        }
        p++;
        for (i = 0; i < 32; i++) {
          if (*p == 0) {
            goto syntax_error;
          }
          if (*p == 0x22) {
            break;
          }
          if (*p == '%') {
            s[i] = p[1];
            p += 2;
          } else {
            s[i] = *p;
            p++;
          }
        }
        if (i > 30) {
          end("karaoke too long.\n");
        }
        api_boxfilwin(win + 1, 8, 88, 247, 103, 7);
        s[i] = 0;
        if (i != 0) {
          api_putstrwin(win + 1, 128 - i * 4, 88, 0, i, s);
        }
        api_refreshwin(win, 8, 88, 248, 104);
      }
      for (; *p != ';'; p++) {
        if (*p == 0) {
          goto syntax_error;
        }
      }
      p++;
    } else if (*p == 0) {
      p = txtbuf;
    } else {
    syntax_error:
      end("mml syntax error.\n");
    }
  }
}


x86 assembly (clang, -O0):
<HariMain>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20060,%rsp
movl   $0x78,-0x20044(%rbp)
movl   $0x30,-0x20048(%rbp)
movl   $0x4,-0x2004c(%rbp)
movl   $0x7,-0x20050(%rbp)
movl   $0x0,-0x20054(%rbp)
lea    -0x20020(%rbp),%rdi
mov    $0x1e,%esi
call   10d0 <api_cmdline@plt>
lea    -0x20020(%rbp),%rax
mov    %rax,-0x20028(%rbp)
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jle    128b <HariMain+0x8b>
jmp    1274 <HariMain+0x74>
mov    -0x20028(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20028(%rbp)
jmp    125c <HariMain+0x5c>
jmp    1290 <HariMain+0x90>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jne    12bf <HariMain+0xbf>
jmp    12a8 <HariMain+0xa8>
mov    -0x20028(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20028(%rbp)
jmp    1290 <HariMain+0x90>
mov    -0x20028(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,-0x2003c(%rbp)
cmpl   $0xc,-0x2003c(%rbp)
jle    12ef <HariMain+0xef>
jmp    12e3 <HariMain+0xe3>
lea    0x1d16(%rip),%rdi
call   1080 <end@plt>
cmpl   $0x0,-0x2003c(%rbp)
jne    1305 <HariMain+0x105>
xor    %eax,%eax
mov    %eax,%edi
call   1080 <end@plt>
lea    -0x7000(%rbp),%rdi
mov    $0x100,%esi
mov    $0x70,%edx
mov    $0xffffffff,%ecx
lea    0x1cf0(%rip),%r8
call   10f0 <api_openwin@plt>
mov    %eax,-0x20034(%rbp)
mov    -0x20034(%rbp),%edi
mov    -0x2003c(%rbp),%r8d
mov    -0x20028(%rbp),%r9
mov    $0x80,%esi
mov    $0x20,%edx
xor    %ecx,%ecx
call   10c0 <api_putstrwin@plt>
mov    -0x20034(%rbp),%edi
mov    $0x8,%esi
mov    $0x3c,%edx
mov    $0xf7,%ecx
mov    $0x4c,%r8d
mov    $0x7,%r9d
call   1120 <api_boxfilwin@plt>
mov    -0x20034(%rbp),%edi
mov    $0x6,%esi
mov    $0x56,%edx
mov    $0xf9,%ecx
mov    $0x69,%r8d
mov    $0x7,%r9d
call   1120 <api_boxfilwin@plt>
mov    -0x20028(%rbp),%rdi
call   1040 <api_fopen@plt>
mov    %eax,-0x2003c(%rbp)
cmpl   $0x0,-0x2003c(%rbp)
jne    13c2 <HariMain+0x1c2>
jmp    12e3 <HariMain+0xe3>
mov    -0x2003c(%rbp),%edi
xor    %esi,%esi
call   1070 <api_fsize@plt>
mov    %eax,-0x20040(%rbp)
cmpl   $0x19000,-0x20040(%rbp)
jl     13ef <HariMain+0x1ef>
movl   $0x18fff,-0x20040(%rbp)
lea    -0x20000(%rbp),%rdi
mov    -0x20040(%rbp),%esi
mov    -0x2003c(%rbp),%edx
call   10a0 <api_fread@plt>
mov    -0x2003c(%rbp),%edi
call   1090 <api_fclose@plt>
movslq -0x20040(%rbp),%rax
movb   $0x0,-0x20000(%rbp,%rax,1)
lea    -0x20000(%rbp),%rax
mov    %rax,-0x20030(%rbp)
movl   $0x0,-0x2003c(%rbp)
lea    -0x20000(%rbp),%rax
mov    %rax,-0x20028(%rbp)
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     1703 <HariMain+0x503>
cmpl   $0x0,-0x2003c(%rbp)
jne    15ae <HariMain+0x3ae>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jle    15ae <HariMain+0x3ae>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    153a <HariMain+0x33a>
mov    -0x20028(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2a,%eax
jne    14b0 <HariMain+0x2b0>
movl   $0x1,-0x2003c(%rbp)
jmp    1535 <HariMain+0x335>
mov    -0x20028(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2f,%eax
jne    14d3 <HariMain+0x2d3>
movl   $0x2,-0x2003c(%rbp)
jmp    1530 <HariMain+0x330>
mov    -0x20028(%rbp),%rax
mov    (%rax),%cl
mov    -0x20030(%rbp),%rax
mov    %cl,(%rax)
mov    -0x20028(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x61,%eax
cmp    %ecx,%eax
jg     151e <HariMain+0x31e>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7a,%eax
jg     151e <HariMain+0x31e>
mov    -0x20030(%rbp),%rax
movsbl (%rax),%ecx
add    $0xffffffe0,%ecx
mov    %cl,(%rax)
mov    -0x20030(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20030(%rbp)
jmp    1535 <HariMain+0x335>
jmp    15a9 <HariMain+0x3a9>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x22,%eax
jne    1580 <HariMain+0x380>
mov    -0x20028(%rbp),%rax
mov    (%rax),%cl
mov    -0x20030(%rbp),%rax
mov    %cl,(%rax)
mov    -0x20030(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20030(%rbp)
movl   $0x3,-0x2003c(%rbp)
jmp    15a4 <HariMain+0x3a4>
mov    -0x20028(%rbp),%rax
mov    (%rax),%cl
mov    -0x20030(%rbp),%rax
mov    %cl,(%rax)
mov    -0x20030(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20030(%rbp)
jmp    15a9 <HariMain+0x3a9>
jmp    16e7 <HariMain+0x4e7>
cmpl   $0x1,-0x2003c(%rbp)
jne    1603 <HariMain+0x403>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
jne    1603 <HariMain+0x403>
mov    -0x20028(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2f,%eax
jne    1603 <HariMain+0x403>
mov    -0x20028(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20028(%rbp)
movl   $0x0,-0x2003c(%rbp)
jmp    16e2 <HariMain+0x4e2>
cmpl   $0x2,-0x2003c(%rbp)
jne    1632 <HariMain+0x432>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
jne    1632 <HariMain+0x432>
movl   $0x0,-0x2003c(%rbp)
jmp    16dd <HariMain+0x4dd>
cmpl   $0x3,-0x2003c(%rbp)
jne    16d8 <HariMain+0x4d8>
mov    -0x20028(%rbp),%rax
mov    (%rax),%cl
mov    -0x20030(%rbp),%rax
mov    %cl,(%rax)
mov    -0x20030(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20030(%rbp)
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x22,%eax
jne    1685 <HariMain+0x485>
movl   $0x0,-0x2003c(%rbp)
jmp    16d3 <HariMain+0x4d3>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x25,%eax
jne    16ce <HariMain+0x4ce>
mov    -0x20028(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20028(%rbp)
mov    -0x20028(%rbp),%rax
mov    (%rax),%cl
mov    -0x20030(%rbp),%rax
mov    %cl,(%rax)
mov    -0x20030(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20030(%rbp)
jmp    16d3 <HariMain+0x4d3>
jmp    16d8 <HariMain+0x4d8>
jmp    16dd <HariMain+0x4dd>
jmp    16e2 <HariMain+0x4e2>
jmp    16e7 <HariMain+0x4e7>
jmp    16ec <HariMain+0x4ec>
mov    -0x20028(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20028(%rbp)
jmp    1447 <HariMain+0x247>
mov    -0x20030(%rbp),%rax
movb   $0x0,(%rax)
mov    $0x0,%al
call   1060 <api_alloctimer@plt>
mov    %eax,-0x20038(%rbp)
mov    -0x20038(%rbp),%edi
mov    $0x80,%esi
call   1030 <api_inittimer@plt>
lea    -0x20000(%rbp),%rax
mov    %rax,-0x20028(%rbp)
mov    -0x20028(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x41,%eax
cmp    %ecx,%eax
jg     1762 <HariMain+0x562>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x47,%eax
jle    1775 <HariMain+0x575>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x52,%eax
jne    1c4f <HariMain+0xa4f>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x52,%eax
jne    179e <HariMain+0x59e>
movl   $0x0,-0x2003c(%rbp)
movb   $0x0,-0x20020(%rbp)
jmp    17fb <HariMain+0x5fb>
imul   $0xc,-0x2004c(%rbp),%eax
mov    -0x20028(%rbp),%rcx
movsbl (%rcx),%ecx
sub    $0x41,%ecx
movslq %ecx,%rdx
lea    0x3924(%rip),%rcx
add    (%rcx,%rdx,4),%eax
add    $0xc,%eax
mov    %eax,-0x2003c(%rbp)
movb   $0x4f,-0x20020(%rbp)
mov    -0x2004c(%rbp),%eax
add    $0x30,%eax
mov    %al,-0x2001f(%rbp)
mov    -0x20028(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x2001e(%rbp)
movb   $0x20,-0x2001d(%rbp)
movb   $0x0,-0x2001c(%rbp)
mov    -0x20028(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20028(%rbp)
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2b,%eax
je     1846 <HariMain+0x646>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
je     1846 <HariMain+0x646>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x23,%eax
jne    189d <HariMain+0x69d>
mov    -0x20028(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x2001d(%rbp)
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    187c <HariMain+0x67c>
mov    -0x2003c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2003c(%rbp)
jmp    188b <HariMain+0x68b>
mov    -0x2003c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2003c(%rbp)
mov    -0x20028(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20028(%rbp)
mov    -0x2003c(%rbp),%eax
cmp    -0x20054(%rbp),%eax
je     1a41 <HariMain+0x841>
mov    -0x20034(%rbp),%edi
add    $0x1,%edi
mov    $0x20,%esi
mov    $0x24,%edx
mov    $0x3f,%ecx
mov    $0x33,%r8d
mov    $0x8,%r9d
call   1120 <api_boxfilwin@plt>
movsbl -0x20020(%rbp),%eax
cmp    $0x0,%eax
je     1912 <HariMain+0x712>
mov    -0x20034(%rbp),%edi
add    $0x1,%edi
lea    -0x20020(%rbp),%r9
mov    $0x20,%esi
mov    $0x24,%edx
mov    $0xa,%ecx
mov    $0x4,%r8d
call   10c0 <api_putstrwin@plt>
mov    -0x20034(%rbp),%edi
mov    $0x20,%esi
mov    $0x24,%edx
mov    $0x40,%ecx
mov    $0x34,%r8d
call   10e0 <api_refreshwin@plt>
mov    $0x1c,%eax
cmp    -0x20054(%rbp),%eax
jg     198a <HariMain+0x78a>
cmpl   $0x6b,-0x20054(%rbp)
jg     198a <HariMain+0x78a>
mov    -0x20034(%rbp),%edi
mov    -0x20054(%rbp),%eax
sub    $0x1c,%eax
imul   $0x3,%eax,%esi
add    $0x8,%esi
mov    -0x20054(%rbp),%eax
sub    $0x1c,%eax
imul   $0x3,%eax,%ecx
add    $0xa,%ecx
mov    $0x3c,%edx
mov    $0x4c,%r8d
mov    $0x7,%r9d
call   1120 <api_boxfilwin@plt>
mov    $0x1c,%eax
cmp    -0x2003c(%rbp),%eax
jg     19e2 <HariMain+0x7e2>
cmpl   $0x6b,-0x2003c(%rbp)
jg     19e2 <HariMain+0x7e2>
mov    -0x20034(%rbp),%edi
mov    -0x2003c(%rbp),%eax
sub    $0x1c,%eax
imul   $0x3,%eax,%esi
add    $0x8,%esi
mov    -0x2003c(%rbp),%eax
sub    $0x1c,%eax
imul   $0x3,%eax,%ecx
add    $0xa,%ecx
mov    $0x3c,%edx
mov    $0x4c,%r8d
mov    $0x4,%r9d
call   1120 <api_boxfilwin@plt>
movsbl -0x20020(%rbp),%eax
cmp    $0x0,%eax
je     1a2e <HariMain+0x82e>
mov    -0x2003c(%rbp),%eax
mov    $0xc,%ecx
cltd
idiv   %ecx
movslq %edx,%rcx
lea    0x36a6(%rip),%rax
mov    (%rax,%rcx,4),%edi
mov    -0x2003c(%rbp),%eax
mov    $0xc,%ecx
cltd
idiv   %ecx
mov    $0x11,%ecx
sub    %eax,%ecx
sar    %cl,%edi
call   1110 <api_beep@plt>
jmp    1a35 <HariMain+0x835>
xor    %edi,%edi
call   1110 <api_beep@plt>
mov    -0x2003c(%rbp),%eax
mov    %eax,-0x20054(%rbp)
mov    -0x20028(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x30,%eax
cmp    %ecx,%eax
jg     1a98 <HariMain+0x898>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     1a98 <HariMain+0x898>
mov    -0x20028(%rbp),%rdi
lea    -0x20028(%rbp),%rsi
mov    $0xa,%edx
call   10b0 <strtol@plt>
mov    %eax,%ecx
mov    $0xc0,%eax
cltd
idiv   %ecx
mov    %eax,-0x2003c(%rbp)
jmp    1aa4 <HariMain+0x8a4>
mov    -0x20048(%rbp),%eax
mov    %eax,-0x2003c(%rbp)
jmp    1aa9 <HariMain+0x8a9>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    1aed <HariMain+0x8ed>
mov    -0x20028(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20028(%rbp)
mov    -0x2003c(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
add    -0x2003c(%rbp),%eax
mov    %eax,-0x2003c(%rbp)
jmp    1aa9 <HariMain+0x8a9>
imul   $0x7d,-0x2003c(%rbp),%eax
mov    %eax,-0x2003c(%rbp)
mov    -0x20044(%rbp),%ecx
mov    -0x2003c(%rbp),%eax
cltd
idiv   %ecx
mov    %eax,-0x2003c(%rbp)
movsbl -0x20020(%rbp),%eax
cmp    $0x0,%eax
je     1bff <HariMain+0x9ff>
cmpl   $0x8,-0x20050(%rbp)
jge    1bff <HariMain+0x9ff>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x26,%eax
je     1bff <HariMain+0x9ff>
mov    -0x2003c(%rbp),%eax
imul   -0x20050(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,-0x20040(%rbp)
mov    -0x20038(%rbp),%edi
mov    -0x20040(%rbp),%esi
call   1100 <waittimer@plt>
mov    -0x20034(%rbp),%edi
mov    $0x20,%esi
mov    $0x24,%edx
mov    $0x3f,%ecx
mov    $0x33,%r8d
mov    $0x8,%r9d
call   1120 <api_boxfilwin@plt>
mov    $0x1c,%eax
cmp    -0x20054(%rbp),%eax
jg     1be9 <HariMain+0x9e9>
cmpl   $0x6b,-0x20054(%rbp)
jg     1be9 <HariMain+0x9e9>
mov    -0x20034(%rbp),%edi
mov    -0x20054(%rbp),%eax
sub    $0x1c,%eax
imul   $0x3,%eax,%esi
add    $0x8,%esi
mov    -0x20054(%rbp),%eax
sub    $0x1c,%eax
imul   $0x3,%eax,%ecx
add    $0xa,%ecx
mov    $0x3c,%edx
mov    $0x4c,%r8d
mov    $0x7,%r9d
call   1120 <api_boxfilwin@plt>
movl   $0x0,-0x20054(%rbp)
xor    %edi,%edi
call   1110 <api_beep@plt>
jmp    1c33 <HariMain+0xa33>
movl   $0x0,-0x20040(%rbp)
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x26,%eax
jne    1c2e <HariMain+0xa2e>
mov    -0x20028(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20028(%rbp)
jmp    1c33 <HariMain+0xa33>
mov    -0x20038(%rbp),%edi
mov    -0x2003c(%rbp),%esi
sub    -0x20040(%rbp),%esi
call   1100 <waittimer@plt>
jmp    20e1 <HariMain+0xee1>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3c,%eax
jne    1c88 <HariMain+0xa88>
mov    -0x20028(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20028(%rbp)
mov    -0x2004c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2004c(%rbp)
jmp    20dc <HariMain+0xedc>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3e,%eax
jne    1cc1 <HariMain+0xac1>
mov    -0x20028(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20028(%rbp)
mov    -0x2004c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2004c(%rbp)
jmp    20d7 <HariMain+0xed7>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x4f,%eax
jne    1cfb <HariMain+0xafb>
mov    -0x20028(%rbp),%rdi
add    $0x1,%rdi
lea    -0x20028(%rbp),%rsi
mov    $0xa,%edx
call   10b0 <strtol@plt>
mov    %eax,-0x2004c(%rbp)
jmp    20d2 <HariMain+0xed2>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x51,%eax
jne    1d35 <HariMain+0xb35>
mov    -0x20028(%rbp),%rdi
add    $0x1,%rdi
lea    -0x20028(%rbp),%rsi
mov    $0xa,%edx
call   10b0 <strtol@plt>
mov    %eax,-0x20050(%rbp)
jmp    20cd <HariMain+0xecd>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x4c,%eax
jne    1dd7 <HariMain+0xbd7>
mov    -0x20028(%rbp),%rdi
add    $0x1,%rdi
lea    -0x20028(%rbp),%rsi
mov    $0xa,%edx
call   10b0 <strtol@plt>
mov    %eax,-0x20048(%rbp)
cmpl   $0x0,-0x20048(%rbp)
jne    1d7c <HariMain+0xb7c>
jmp    20ad <HariMain+0xead>
mov    $0xc0,%eax
cltd
idivl  -0x20048(%rbp)
mov    %eax,-0x20048(%rbp)
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    1dd2 <HariMain+0xbd2>
mov    -0x20028(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20028(%rbp)
mov    -0x20048(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
add    -0x20048(%rbp),%eax
mov    %eax,-0x20048(%rbp)
jmp    1d8e <HariMain+0xb8e>
jmp    20c8 <HariMain+0xec8>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x54,%eax
jne    1e11 <HariMain+0xc11>
mov    -0x20028(%rbp),%rdi
add    $0x1,%rdi
lea    -0x20028(%rbp),%rsi
mov    $0xa,%edx
call   10b0 <strtol@plt>
mov    %eax,-0x20044(%rbp)
jmp    20c3 <HariMain+0xec3>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x24,%eax
jne    2082 <HariMain+0xe82>
mov    -0x20028(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x4b,%eax
jne    201f <HariMain+0xe1f>
mov    -0x20028(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x20028(%rbp)
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x22,%eax
je     1e91 <HariMain+0xc91>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1e75 <HariMain+0xc75>
jmp    20ad <HariMain+0xead>
jmp    1e7a <HariMain+0xc7a>
mov    -0x20028(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20028(%rbp)
jmp    1e4a <HariMain+0xc4a>
mov    -0x20028(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20028(%rbp)
movl   $0x0,-0x2003c(%rbp)
cmpl   $0x20,-0x2003c(%rbp)
jge    1f6e <HariMain+0xd6e>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1ed2 <HariMain+0xcd2>
jmp    20ad <HariMain+0xead>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x22,%eax
jne    1eea <HariMain+0xcea>
jmp    1f6e <HariMain+0xd6e>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x25,%eax
jne    1f2c <HariMain+0xd2c>
mov    -0x20028(%rbp),%rax
mov    0x1(%rax),%cl
movslq -0x2003c(%rbp),%rax
mov    %cl,-0x20020(%rbp,%rax,1)
mov    -0x20028(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x20028(%rbp)
jmp    1f55 <HariMain+0xd55>
mov    -0x20028(%rbp),%rax
mov    (%rax),%cl
movslq -0x2003c(%rbp),%rax
mov    %cl,-0x20020(%rbp,%rax,1)
mov    -0x20028(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20028(%rbp)
jmp    1f5a <HariMain+0xd5a>
mov    -0x2003c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2003c(%rbp)
jmp    1ead <HariMain+0xcad>
cmpl   $0x1e,-0x2003c(%rbp)
jle    1f87 <HariMain+0xd87>
lea    0x1098(%rip),%rdi
call   1080 <end@plt>
mov    -0x20034(%rbp),%edi
add    $0x1,%edi
mov    $0x8,%esi
mov    $0x58,%edx
mov    $0xf7,%ecx
mov    $0x67,%r8d
mov    $0x7,%r9d
call   1120 <api_boxfilwin@plt>
movslq -0x2003c(%rbp),%rax
movb   $0x0,-0x20020(%rbp,%rax,1)
cmpl   $0x0,-0x2003c(%rbp)
je     1fff <HariMain+0xdff>
mov    -0x20034(%rbp),%edi
add    $0x1,%edi
mov    -0x2003c(%rbp),%eax
shl    $0x2,%eax
mov    $0x80,%esi
sub    %eax,%esi
mov    -0x2003c(%rbp),%r8d
lea    -0x20020(%rbp),%r9
mov    $0x58,%edx
xor    %ecx,%ecx
call   10c0 <api_putstrwin@plt>
mov    -0x20034(%rbp),%edi
mov    $0x8,%esi
mov    $0x58,%edx
mov    $0xf8,%ecx
mov    $0x68,%r8d
call   10e0 <api_refreshwin@plt>
jmp    2024 <HariMain+0xe24>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3b,%eax
je     206b <HariMain+0xe6b>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    204f <HariMain+0xe4f>
jmp    20ad <HariMain+0xead>
jmp    2054 <HariMain+0xe54>
mov    -0x20028(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20028(%rbp)
jmp    2024 <HariMain+0xe24>
mov    -0x20028(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20028(%rbp)
jmp    20be <HariMain+0xebe>
mov    -0x20028(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    20a8 <HariMain+0xea8>
lea    -0x20000(%rbp),%rax
mov    %rax,-0x20028(%rbp)
jmp    20b9 <HariMain+0xeb9>
jmp    20ad <HariMain+0xead>
lea    0xf79(%rip),%rdi
call   1080 <end@plt>
jmp    20be <HariMain+0xebe>
jmp    20c3 <HariMain+0xec3>
jmp    20c8 <HariMain+0xec8>
jmp    20cd <HariMain+0xecd>
jmp    20d2 <HariMain+0xed2>
jmp    20d7 <HariMain+0xed7>
jmp    20dc <HariMain+0xedc>
jmp    20e1 <HariMain+0xee1>
jmp    1738 <HariMain+0x538>

x86 assembly (clang, -O2):
<HariMain>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x20048,%rsp
lea    0x20(%rsp),%rdi
mov    $0x1e,%esi
call   10d0 <api_cmdline@plt>
lea    0x1f(%rsp),%rax
cs nopw 0x0(%rax,%rax,1)
nop
lea    0x1(%rax),%rdi
cmpb   $0x20,0x1(%rax)
mov    %rdi,%rax
jg     1230 <HariMain+0x30>
mov    %rdi,0x8(%rsp)
jne    125f <HariMain+0x5f>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cmpb   $0x20,0x1(%rdi)
lea    0x1(%rdi),%rdi
je     1250 <HariMain+0x50>
mov    %rdi,0x8(%rsp)
call   1050 <strlen@plt>
mov    %eax,%ebx
cmp    $0xd,%eax
jge    1311 <HariMain+0x111>
test   %ebx,%ebx
je     1325 <HariMain+0x125>
lea    0xf40(%rip),%r8
lea    0x19040(%rsp),%rdi
mov    $0x100,%esi
mov    $0x70,%edx
mov    $0xffffffff,%ecx
call   10f0 <api_openwin@plt>
mov    %eax,%r15d
mov    0x8(%rsp),%r9
mov    %eax,%edi
mov    $0x80,%esi
mov    $0x20,%edx
xor    %ecx,%ecx
mov    %ebx,%r8d
call   10c0 <api_putstrwin@plt>
mov    %r15d,%edi
mov    $0x8,%esi
mov    $0x3c,%edx
mov    $0xf7,%ecx
mov    $0x4c,%r8d
mov    $0x7,%r9d
call   1120 <api_boxfilwin@plt>
mov    %r15d,%edi
mov    $0x6,%esi
mov    $0x56,%edx
mov    $0xf9,%ecx
mov    $0x69,%r8d
mov    $0x7,%r9d
call   1120 <api_boxfilwin@plt>
mov    0x8(%rsp),%rdi
call   1040 <api_fopen@plt>
mov    $0x0,%ebx
test   %eax,%eax
jne    1331 <HariMain+0x131>
lea    0xe94(%rip),%rdi
call   1080 <end@plt>
test   %ebx,%ebx
jne    1277 <HariMain+0x77>
xor    %edi,%edi
call   1080 <end@plt>
jmp    1277 <HariMain+0x77>
mov    %eax,%ebp
lea    0x40(%rsp),%r12
xor    %ebx,%ebx
mov    %eax,%edi
xor    %esi,%esi
call   1070 <api_fsize@plt>
cmp    $0x18fff,%eax
mov    $0x18fff,%r14d
cmovl  %eax,%r14d
mov    %r12,%rdi
mov    %r14d,%esi
mov    %ebp,%edx
call   10a0 <api_fread@plt>
mov    %ebp,%edi
call   1090 <api_fclose@plt>
movslq %r14d,%rax
movb   $0x0,0x40(%rsp,%rax,1)
mov    %r12,0x8(%rsp)
mov    0x40(%rsp),%cl
test   %cl,%cl
je     149e <HariMain+0x29e>
lea    0x40(%rsp),%r12
mov    %r12,%rdx
jmp    13ba <HariMain+0x1ba>
movb   $0x22,(%r12)
add    $0x1,%r12
mov    $0x3,%ebx
nopw   0x0(%rax,%rax,1)
mov    0x8(%rsp),%rcx
lea    0x1(%rcx),%rdx
mov    %rdx,0x8(%rsp)
movzbl 0x1(%rcx),%ecx
test   %cl,%cl
je     149e <HariMain+0x29e>
test   %ebx,%ebx
jne    13f0 <HariMain+0x1f0>
cmp    $0x21,%cl
jl     13f0 <HariMain+0x1f0>
cmp    $0x22,%cl
je     1389 <HariMain+0x189>
cmp    $0x2f,%cl
jne    1482 <HariMain+0x282>
movzbl 0x1(%rdx),%ecx
mov    $0x1,%ebx
cmp    $0x2a,%cl
je     13a0 <HariMain+0x1a0>
cmp    $0x2f,%cl
jne    1466 <HariMain+0x266>
mov    $0x2,%ebx
jmp    13a0 <HariMain+0x1a0>
nop
cmp    $0x3,%ebx
je     141a <HariMain+0x21a>
cmp    $0x2,%ebx
je     1457 <HariMain+0x257>
cmp    $0x1,%ebx
jne    13a0 <HariMain+0x1a0>
mov    $0x1,%ebx
cmp    $0x2a,%cl
jne    13a0 <HariMain+0x1a0>
lea    0x1(%rdx),%rcx
cmpb   $0x2f,0x1(%rdx)
jne    13a0 <HariMain+0x1a0>
mov    %rcx,0x8(%rsp)
jmp    148a <HariMain+0x28a>
mov    %cl,(%r12)
lea    0x1(%r12),%rsi
mov    0x8(%rsp),%rdx
movzbl (%rdx),%ecx
xor    %ebx,%ebx
cmp    $0x22,%cl
je     1496 <HariMain+0x296>
cmp    $0x25,%cl
jne    1491 <HariMain+0x291>
lea    0x1(%rdx),%rcx
mov    %rcx,0x8(%rsp)
movzbl 0x1(%rdx),%ecx
mov    %cl,0x1(%r12)
add    $0x2,%r12
mov    $0x3,%ebx
jmp    13a0 <HariMain+0x1a0>
xor    %ebx,%ebx
cmp    $0xa,%cl
setne  %bl
add    %ebx,%ebx
jmp    13a0 <HariMain+0x1a0>
movb   $0x2f,(%r12)
mov    0x8(%rsp),%rcx
movzbl (%rcx),%ecx
add    $0x9f,%cl
cmp    $0x1a,%cl
setae  %cl
shl    $0x5,%cl
or     $0xf,%cl
mov    %cl,(%r12)
add    $0x1,%r12
xor    %ebx,%ebx
jmp    13a0 <HariMain+0x1a0>
mov    $0x3,%ebx
mov    %rsi,%r12
jmp    13a0 <HariMain+0x1a0>
movb   $0x0,(%r12)
xor    %ebx,%ebx
xor    %eax,%eax
call   1060 <api_alloctimer@plt>
mov    %eax,0x1c(%rsp)
mov    %eax,%edi
mov    $0x80,%esi
call   1030 <api_inittimer@plt>
lea    0x40(%rsp),%rdi
mov    %rdi,0x8(%rsp)
mov    %r15d,%r13d
mov    %r15d,%ebp
add    $0x1,%ebp
movl   $0x7,0x14(%rsp)
mov    $0x4,%r14d
mov    $0x30,%r15d
movl   $0x78,0x18(%rsp)
mov    %ebp,0x10(%rsp)
jmp    1523 <HariMain+0x323>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
xor    %r12d,%r12d
xor    %edi,%edi
call   1110 <api_beep@plt>
sub    %ebx,%ebp
mov    0x1c(%rsp),%edi
mov    %ebp,%esi
call   1100 <waittimer@plt>
mov    %r12d,%ebx
mov    0x10(%rsp),%ebp
mov    0x8(%rsp),%rdi
movzbl (%rdi),%eax
lea    -0x41(%rax),%ecx
cmp    $0x7,%cl
jae    15c0 <HariMain+0x3c0>
lea    (%r14,%r14,2),%ecx
lea    0xc53(%rip),%rdx
mov    -0x104(%rdx,%rax,4),%eax
lea    (%rax,%rcx,4),%r12d
add    $0xc,%r12d
movb   $0x4f,0x20(%rsp)
lea    0x30(%r14),%eax
mov    %al,0x21(%rsp)
mov    (%rdi),%al
mov    %al,0x22(%rsp)
movw   $0x20,0x23(%rsp)
lea    0x1(%rdi),%rax
mov    %rax,0x8(%rsp)
movzbl 0x1(%rdi),%eax
cmp    $0x2d,%rax
ja     15a7 <HariMain+0x3a7>
movabs $0x280800000000,%rcx
bt     %rax,%rcx
jae    15a7 <HariMain+0x3a7>
mov    %al,0x23(%rsp)
xor    %eax,%eax
cmpb   $0x2d,0x1(%rdi)
setne  %al
lea    (%r12,%rax,2),%r12d
add    $0xffffffff,%r12d
add    $0x2,%rdi
mov    %rdi,0x8(%rsp)
cmp    %ebx,%r12d
jne    15f0 <HariMain+0x3f0>
mov    %ebx,%r12d
jmp    1707 <HariMain+0x507>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cmp    $0x54,%al
ja     1a50 <HariMain+0x850>
lea    0xa31(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0x40(%rsp),%rax
mov    %rax,0x8(%rsp)
mov    0x8(%rsp),%rdi
jmp    1523 <HariMain+0x323>
nopl   0x0(%rax)
mov    %ebp,%edi
mov    $0x20,%esi
mov    $0x24,%edx
mov    $0x3f,%ecx
mov    $0x33,%r8d
mov    $0x8,%r9d
call   1120 <api_boxfilwin@plt>
cmpb   $0x0,0x20(%rsp)
je     163a <HariMain+0x43a>
mov    %ebp,%edi
mov    $0x20,%esi
mov    $0x24,%edx
mov    $0xa,%ecx
mov    $0x4,%r8d
lea    0x20(%rsp),%r9
call   10c0 <api_putstrwin@plt>
mov    %r13d,%edi
mov    $0x20,%esi
mov    $0x24,%edx
mov    $0x40,%ecx
mov    $0x34,%r8d
call   10e0 <api_refreshwin@plt>
lea    -0x1c(%rbx),%eax
cmp    $0x4f,%eax
ja     1682 <HariMain+0x482>
lea    (%rbx,%rbx,2),%esi
add    $0xffffffb4,%esi
lea    -0x4a(%rbx,%rbx,2),%ecx
mov    %r13d,%edi
mov    $0x3c,%edx
mov    $0x4c,%r8d
mov    $0x7,%r9d
call   1120 <api_boxfilwin@plt>
lea    -0x1c(%r12),%eax
cmp    $0x4f,%eax
ja     16b1 <HariMain+0x4b1>
lea    (%r12,%r12,2),%esi
add    $0xffffffb4,%esi
lea    -0x4a(%r12,%r12,2),%ecx
mov    %r13d,%edi
mov    $0x3c,%edx
mov    $0x4c,%r8d
mov    $0x4,%r9d
call   1120 <api_boxfilwin@plt>
xor    %edi,%edi
cmpb   $0x0,0x20(%rsp)
je     1702 <HariMain+0x502>
movslq %r12d,%rax
imul   $0x2aaaaaab,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
shr    $0x21,%rcx
add    %edx,%ecx
shl    $0x2,%ecx
lea    (%rcx,%rcx,2),%ecx
mov    %r12d,%edx
sub    %ecx,%edx
movslq %edx,%rcx
lea    0xa7a(%rip),%rdx
mov    (%rdx,%rcx,4),%edi
imul   $0xffffffffd5555555,%rax,%rcx
mov    %rcx,%rax
shr    $0x3f,%rax
shr    $0x21,%rcx
add    %eax,%ecx
add    $0x11,%cl
sar    %cl,%edi
call   1110 <api_beep@plt>
mov    0x8(%rsp),%rdi
mov    (%rdi),%cl
lea    -0x30(%rcx),%eax
cmp    $0x9,%al
ja     1740 <HariMain+0x540>
lea    0x8(%rsp),%rsi
mov    $0xa,%edx
call   10b0 <strtol@plt>
mov    %eax,%ecx
mov    $0xc0,%eax
xor    %edx,%edx
idiv   %ecx
mov    0x8(%rsp),%rdi
mov    (%rdi),%cl
cmp    $0x2e,%cl
je     1748 <HariMain+0x548>
jmp    1770 <HariMain+0x570>
nopl   (%rax)
mov    %r15d,%eax
cmp    $0x2e,%cl
jne    1770 <HariMain+0x570>
add    $0x1,%rdi
nopl   0x0(%rax)
mov    %eax,%ecx
mov    %rdi,0x8(%rsp)
shr    $0x1f,%eax
add    %ecx,%eax
sar    %eax
add    %ecx,%eax
movzbl (%rdi),%ecx
add    $0x1,%rdi
cmp    $0x2e,%cl
je     1750 <HariMain+0x550>
add    $0xffffffffffffffff,%rdi
imul   $0x7d,%eax,%eax
cltd
idivl  0x18(%rsp)
mov    %eax,%ebp
cmpb   $0x0,0x20(%rsp)
je     1820 <HariMain+0x620>
cmpl   $0x7,0x14(%rsp)
jg     1820 <HariMain+0x620>
cmp    $0x26,%cl
je     1820 <HariMain+0x620>
mov    %ebp,%eax
imul   0x14(%rsp),%eax
lea    0x7(%rax),%ebx
test   %eax,%eax
cmovns %eax,%ebx
sar    $0x3,%ebx
mov    0x1c(%rsp),%edi
mov    %ebx,%esi
call   1100 <waittimer@plt>
mov    %r13d,%edi
mov    $0x20,%esi
mov    $0x24,%edx
mov    $0x3f,%ecx
mov    $0x33,%r8d
mov    $0x8,%r9d
call   1120 <api_boxfilwin@plt>
lea    -0x1c(%r12),%eax
cmp    $0x4f,%eax
ja     1500 <HariMain+0x300>
lea    (%r12,%r12,2),%esi
add    $0xffffffb4,%esi
lea    -0x4a(%r12,%r12,2),%ecx
mov    %r13d,%edi
mov    $0x3c,%edx
mov    $0x4c,%r8d
mov    $0x7,%r9d
call   1120 <api_boxfilwin@plt>
jmp    1500 <HariMain+0x300>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
xor    %ebx,%ebx
cmp    $0x26,%cl
jne    150a <HariMain+0x30a>
add    $0x1,%rdi
mov    %rdi,0x8(%rsp)
jmp    150a <HariMain+0x30a>
cmpb   $0x4b,0x1(%rdi)
jne    19a0 <HariMain+0x7a0>
add    $0x2,%rdi
nopw   0x0(%rax,%rax,1)
mov    %rdi,0x8(%rsp)
movzbl (%rdi),%eax
test   %al,%al
je     1a50 <HariMain+0x850>
add    $0x1,%rdi
cmp    $0x22,%al
jne    1850 <HariMain+0x650>
mov    %rdi,0x8(%rsp)
xor    %r12d,%r12d
jmp    18a8 <HariMain+0x6a8>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl 0x1(%rax),%ecx
mov    $0x2,%edx
mov    %cl,0x21(%rsp,%r12,1)
add    %rdx,%rax
mov    %rax,0x8(%rsp)
add    $0x2,%r12
mov    $0x20,%ebp
mov    %rax,%rdi
cmp    $0x20,%r12
je     1917 <HariMain+0x717>
movzbl (%rdi),%eax
mov    $0x1,%ecx
cmp    $0x25,%al
je     18d0 <HariMain+0x6d0>
test   %al,%al
mov    0x10(%rsp),%ebp
je     1a50 <HariMain+0x850>
cmp    $0x22,%al
jne    18dd <HariMain+0x6dd>
jmp    190a <HariMain+0x70a>
cs nopw 0x0(%rax,%rax,1)
movzbl 0x1(%rdi),%eax
mov    $0x2,%ecx
mov    0x10(%rsp),%ebp
mov    %al,0x20(%rsp,%r12,1)
lea    (%rdi,%rcx,1),%rax
mov    %rax,0x8(%rsp)
movzbl (%rdi,%rcx,1),%ecx
mov    $0x1,%edx
cmp    $0x25,%cl
je     1880 <HariMain+0x680>
test   %cl,%cl
je     1a50 <HariMain+0x850>
cmp    $0x22,%cl
jne    1889 <HariMain+0x689>
add    $0x1,%r12
cmp    $0x1f,%r12d
jb     1ae4 <HariMain+0x8e4>
mov    %r12d,%ebp
lea    0x8a8(%rip),%rdi
call   1080 <end@plt>
mov    0x10(%rsp),%edi
mov    $0x8,%esi
mov    $0x58,%edx
mov    $0xf7,%ecx
mov    $0x67,%r8d
mov    $0x7,%r9d
call   1120 <api_boxfilwin@plt>
mov    %ebp,%eax
movb   $0x0,0x20(%rsp,%rax,1)
mov    %ebp,%r12d
mov    0x10(%rsp),%ebp
lea    0x0(,%r12,4),%eax
mov    $0x80,%esi
sub    %eax,%esi
mov    %ebp,%edi
mov    $0x58,%edx
xor    %ecx,%ecx
mov    %r12d,%r8d
lea    0x20(%rsp),%r9
call   10c0 <api_putstrwin@plt>
mov    %r13d,%edi
mov    $0x8,%esi
mov    $0x58,%edx
mov    $0xf8,%ecx
mov    $0x68,%r8d
call   10e0 <api_refreshwin@plt>
mov    0x8(%rsp),%rdi
nopl   0x0(%rax)
add    $0x1,%rdi
movzbl -0x1(%rdi),%eax
test   %al,%al
je     1a50 <HariMain+0x850>
cmp    $0x3b,%al
je     1ad5 <HariMain+0x8d5>
mov    %rdi,0x8(%rsp)
jmp    19a0 <HariMain+0x7a0>
add    $0x1,%rdi
mov    %rdi,0x8(%rsp)
add    $0xffffffff,%r14d
mov    0x8(%rsp),%rdi
jmp    1523 <HariMain+0x323>
add    $0x1,%rdi
mov    %rdi,0x8(%rsp)
add    $0x1,%r14d
mov    0x8(%rsp),%rdi
jmp    1523 <HariMain+0x323>
add    $0x1,%rdi
lea    0x8(%rsp),%rsi
mov    $0xa,%edx
call   10b0 <strtol@plt>
xor    %r15d,%r15d
test   %eax,%eax
je     1a50 <HariMain+0x850>
mov    %eax,%ecx
mov    $0xc0,%eax
xor    %edx,%edx
idiv   %ecx
mov    %eax,%r15d
mov    0x8(%rsp),%rax
cmpb   $0x2e,(%rax)
jne    1a5c <HariMain+0x85c>
add    $0x1,%rax
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %r15d,%ecx
mov    %rax,0x8(%rsp)
shr    $0x1f,%r15d
add    %ecx,%r15d
sar    %r15d
add    %ecx,%r15d
cmpb   $0x2e,(%rax)
lea    0x1(%rax),%rax
je     1a30 <HariMain+0x830>
jmp    1a5c <HariMain+0x85c>
lea    0x782(%rip),%rdi
call   1080 <end@plt>
mov    0x8(%rsp),%rdi
jmp    1523 <HariMain+0x323>
add    $0x1,%rdi
lea    0x8(%rsp),%rsi
mov    $0xa,%edx
call   10b0 <strtol@plt>
mov    %eax,%r14d
mov    0x8(%rsp),%rdi
jmp    1523 <HariMain+0x323>
add    $0x1,%rdi
lea    0x8(%rsp),%rsi
mov    $0xa,%edx
call   10b0 <strtol@plt>
mov    %eax,0x14(%rsp)
mov    0x8(%rsp),%rdi
jmp    1523 <HariMain+0x323>
movb   $0x0,0x20(%rsp)
xor    %r12d,%r12d
jmp    1566 <HariMain+0x366>
add    $0x1,%rdi
lea    0x8(%rsp),%rsi
mov    $0xa,%edx
call   10b0 <strtol@plt>
mov    %eax,0x18(%rsp)
mov    0x8(%rsp),%rdi
jmp    1523 <HariMain+0x323>
mov    %rdi,0x8(%rsp)
mov    0x8(%rsp),%rdi
jmp    1523 <HariMain+0x323>
mov    %ebp,%edi
mov    $0x8,%esi
mov    $0x58,%edx
mov    $0xf7,%ecx
mov    $0x67,%r8d
mov    $0x7,%r9d
call   1120 <api_boxfilwin@plt>
mov    %r12d,%eax
movb   $0x0,0x20(%rsp,%rax,1)
test   %r12d,%r12d
jne    1955 <HariMain+0x755>
jmp    197a <HariMain+0x77a>

LLVM IR (-O0):
@HariMain.tonetable = internal global [12 x i32] [i32 1071618315, i32 1135340056, i32 1202850889, i32 1274376125, i32 1350154473, i32 1430438836, i32 1515497155, i32 1605613306, i32 1701088041, i32 1802240000, i32 1909406767, i32 2022946002]
@HariMain.notetable = internal global [7 x i32] [i32 9, i32 11, i32 0, i32 2, i32 4, i32 5, i32 7]
@.str = [18 x i8] c"file open error.\0A\00"
@.str.1 = [8 x i8] c"mmlplay\00"
@.str.2 = [19 x i8] c"karaoke too long.\0A\00"
@.str.3 = [19 x i8] c"mml syntax error.\0A\00"
define void @HariMain() {
%1 = alloca [28672 x i8]
%2 = alloca [102400 x i8]
%3 = alloca [32 x i8]
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
store i32 120, i32* %10
store i32 48, i32* %11
store i32 4, i32* %12
store i32 7, i32* %13
store i32 0, i32* %14
%15 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 0
%16 = call i32 @api_cmdline(i8* %15, i32 30)
%17 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 0
store i8* %17, i8** %4
br label %18
18: ; preds = %24, %0
%19 = load i8*, i8** %4
%20 = load i8, i8* %19
%21 = sext i8 %20 to i32
%22 = icmp sgt i32 %21, 32
br i1 %22, label %23, label %27
23: ; preds = %18
br label %24
24: ; preds = %23
%25 = load i8*, i8** %4
%26 = getelementptr inbounds i8, i8* %25, i32 1
store i8* %26, i8** %4
br label %18
27: ; preds = %18
br label %28
28: ; preds = %34, %27
%29 = load i8*, i8** %4
%30 = load i8, i8* %29
%31 = sext i8 %30 to i32
%32 = icmp eq i32 %31, 32
br i1 %32, label %33, label %37
33: ; preds = %28
br label %34
34: ; preds = %33
%35 = load i8*, i8** %4
%36 = getelementptr inbounds i8, i8* %35, i32 1
store i8* %36, i8** %4
br label %28
37: ; preds = %28
%38 = load i8*, i8** %4
%39 = call i32 @strlen(i8* %38)
store i32 %39, i32* %8
%40 = load i32, i32* %8
%41 = icmp sgt i32 %40, 12
br i1 %41, label %42, label %45
42: ; preds = %37
br label %43
43: ; preds = %65, %42
%44 = call i32 @end(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str, i64 0, i64 0))
br label %45
45: ; preds = %43, %37
%46 = load i32, i32* %8
%47 = icmp eq i32 %46, 0
br i1 %47, label %48, label %50
48: ; preds = %45
%49 = call i32 @end(i8* null)
br label %50
50: ; preds = %48, %45
%51 = getelementptr inbounds [28672 x i8], [28672 x i8]* %1, i64 0, i64 0
%52 = call i32 @api_openwin(i8* %51, i32 256, i32 112, i32 -1, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.1, i64 0, i64 0))
store i32 %52, i32* %6
%53 = load i32, i32* %6
%54 = load i32, i32* %8
%55 = load i8*, i8** %4
%56 = call i32 @api_putstrwin(i32 %53, i32 128, i32 32, i32 0, i32 %54, i8* %55)
%57 = load i32, i32* %6
%58 = call i32 @api_boxfilwin(i32 %57, i32 8, i32 60, i32 247, i32 76, i32 7)
%59 = load i32, i32* %6
%60 = call i32 @api_boxfilwin(i32 %59, i32 6, i32 86, i32 249, i32 105, i32 7)
%61 = load i8*, i8** %4
%62 = call i32 @api_fopen(i8* %61)
store i32 %62, i32* %8
%63 = load i32, i32* %8
%64 = icmp eq i32 %63, 0
br i1 %64, label %65, label %66
65: ; preds = %50
br label %43
66: ; preds = %50
%67 = load i32, i32* %8
%68 = call i32 @api_fsize(i32 %67, i32 0)
store i32 %68, i32* %9
%69 = load i32, i32* %9
%70 = icmp sge i32 %69, 102400
br i1 %70, label %71, label %72
71: ; preds = %66
store i32 102399, i32* %9
br label %72
72: ; preds = %71, %66
%73 = getelementptr inbounds [102400 x i8], [102400 x i8]* %2, i64 0, i64 0
%74 = load i32, i32* %9
%75 = load i32, i32* %8
%76 = call i32 @api_fread(i8* %73, i32 %74, i32 %75)
%77 = load i32, i32* %8
%78 = call i32 @api_fclose(i32 %77)
%79 = load i32, i32* %9
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds [102400 x i8], [102400 x i8]* %2, i64 0, i64 %80
store i8 0, i8* %81
%82 = getelementptr inbounds [102400 x i8], [102400 x i8]* %2, i64 0, i64 0
store i8* %82, i8** %5
store i32 0, i32* %8
%83 = getelementptr inbounds [102400 x i8], [102400 x i8]* %2, i64 0, i64 0
store i8* %83, i8** %4
br label %84
84: ; preds = %218, %72
%85 = load i8*, i8** %4
%86 = load i8, i8* %85
%87 = sext i8 %86 to i32
%88 = icmp ne i32 %87, 0
br i1 %88, label %89, label %221
89: ; preds = %84
%90 = load i32, i32* %8
%91 = icmp eq i32 %90, 0
br i1 %91, label %92, label %159
92: ; preds = %89
%93 = load i8*, i8** %4
%94 = load i8, i8* %93
%95 = sext i8 %94 to i32
%96 = icmp sgt i32 %95, 32
br i1 %96, label %97, label %159
97: ; preds = %92
%98 = load i8*, i8** %4
%99 = load i8, i8* %98
%100 = sext i8 %99 to i32
%101 = icmp eq i32 %100, 47
br i1 %101, label %102, label %140
102: ; preds = %97
%103 = load i8*, i8** %4
%104 = getelementptr inbounds i8, i8* %103, i64 1
%105 = load i8, i8* %104
%106 = sext i8 %105 to i32
%107 = icmp eq i32 %106, 42
br i1 %107, label %108, label %109
108: ; preds = %102
store i32 1, i32* %8
br label %139
109: ; preds = %102
%110 = load i8*, i8** %4
%111 = getelementptr inbounds i8, i8* %110, i64 1
%112 = load i8, i8* %111
%113 = sext i8 %112 to i32
%114 = icmp eq i32 %113, 47
br i1 %114, label %115, label %116
115: ; preds = %109
store i32 2, i32* %8
br label %138
116: ; preds = %109
%117 = load i8*, i8** %4
%118 = load i8, i8* %117
%119 = load i8*, i8** %5
store i8 %118, i8* %119
%120 = load i8*, i8** %4
%121 = load i8, i8* %120
%122 = sext i8 %121 to i32
%123 = icmp sle i32 97, %122
br i1 %123, label %124, label %135
124: ; preds = %116
%125 = load i8*, i8** %4
%126 = load i8, i8* %125
%127 = sext i8 %126 to i32
%128 = icmp sle i32 %127, 122
br i1 %128, label %129, label %135
129: ; preds = %124
%130 = load i8*, i8** %5
%131 = load i8, i8* %130
%132 = sext i8 %131 to i32
%133 = add nsw i32 %132, -32
%134 = trunc i32 %133 to i8
store i8 %134, i8* %130
br label %135
135: ; preds = %129, %124, %116
%136 = load i8*, i8** %5
%137 = getelementptr inbounds i8, i8* %136, i32 1
store i8* %137, i8** %5
br label %138
138: ; preds = %135, %115
br label %139
139: ; preds = %138, %108
br label %158
140: ; preds = %97
%141 = load i8*, i8** %4
%142 = load i8, i8* %141
%143 = sext i8 %142 to i32
%144 = icmp eq i32 %143, 34
br i1 %144, label %145, label %151
145: ; preds = %140
%146 = load i8*, i8** %4
%147 = load i8, i8* %146
%148 = load i8*, i8** %5
store i8 %147, i8* %148
%149 = load i8*, i8** %5
%150 = getelementptr inbounds i8, i8* %149, i32 1
store i8* %150, i8** %5
store i32 3, i32* %8
br label %157
151: ; preds = %140
%152 = load i8*, i8** %4
%153 = load i8, i8* %152
%154 = load i8*, i8** %5
store i8 %153, i8* %154
%155 = load i8*, i8** %5
%156 = getelementptr inbounds i8, i8* %155, i32 1
store i8* %156, i8** %5
br label %157
157: ; preds = %151, %145
br label %158
158: ; preds = %157, %139
br label %217
159: ; preds = %92, %89
%160 = load i32, i32* %8
%161 = icmp eq i32 %160, 1
br i1 %161, label %162, label %176
162: ; preds = %159
%163 = load i8*, i8** %4
%164 = load i8, i8* %163
%165 = sext i8 %164 to i32
%166 = icmp eq i32 %165, 42
br i1 %166, label %167, label %176
167: ; preds = %162
%168 = load i8*, i8** %4
%169 = getelementptr inbounds i8, i8* %168, i64 1
%170 = load i8, i8* %169
%171 = sext i8 %170 to i32
%172 = icmp eq i32 %171, 47
br i1 %172, label %173, label %176
173: ; preds = %167
%174 = load i8*, i8** %4
%175 = getelementptr inbounds i8, i8* %174, i32 1
store i8* %175, i8** %4
store i32 0, i32* %8
br label %216
176: ; preds = %167, %162, %159
%177 = load i32, i32* %8
%178 = icmp eq i32 %177, 2
br i1 %178, label %179, label %185
179: ; preds = %176
%180 = load i8*, i8** %4
%181 = load i8, i8* %180
%182 = sext i8 %181 to i32
%183 = icmp eq i32 %182, 10
br i1 %183, label %184, label %185
184: ; preds = %179
store i32 0, i32* %8
br label %215
185: ; preds = %179, %176
%186 = load i32, i32* %8
%187 = icmp eq i32 %186, 3
br i1 %187, label %188, label %214
188: ; preds = %185
%189 = load i8*, i8** %4
%190 = load i8, i8* %189
%191 = load i8*, i8** %5
store i8 %190, i8* %191
%192 = load i8*, i8** %5
%193 = getelementptr inbounds i8, i8* %192, i32 1
store i8* %193, i8** %5
%194 = load i8*, i8** %4
%195 = load i8, i8* %194
%196 = sext i8 %195 to i32
%197 = icmp eq i32 %196, 34
br i1 %197, label %198, label %199
198: ; preds = %188
store i32 0, i32* %8
br label %213
199: ; preds = %188
%200 = load i8*, i8** %4
%201 = load i8, i8* %200
%202 = sext i8 %201 to i32
%203 = icmp eq i32 %202, 37
br i1 %203, label %204, label %212
204: ; preds = %199
%205 = load i8*, i8** %4
%206 = getelementptr inbounds i8, i8* %205, i32 1
store i8* %206, i8** %4
%207 = load i8*, i8** %4
%208 = load i8, i8* %207
%209 = load i8*, i8** %5
store i8 %208, i8* %209
%210 = load i8*, i8** %5
%211 = getelementptr inbounds i8, i8* %210, i32 1
store i8* %211, i8** %5
br label %212
212: ; preds = %204, %199
br label %213
213: ; preds = %212, %198
br label %214
214: ; preds = %213, %185
br label %215
215: ; preds = %214, %184
br label %216
216: ; preds = %215, %173
br label %217
217: ; preds = %216, %158
br label %218
218: ; preds = %217
%219 = load i8*, i8** %4
%220 = getelementptr inbounds i8, i8* %219, i32 1
store i8* %220, i8** %4
br label %84
221: ; preds = %84
%222 = load i8*, i8** %5
store i8 0, i8* %222
%223 = call i32 (...) @api_alloctimer()
store i32 %223, i32* %7
%224 = load i32, i32* %7
%225 = call i32 @api_inittimer(i32 %224, i32 128)
%226 = getelementptr inbounds [102400 x i8], [102400 x i8]* %2, i64 0, i64 0
store i8* %226, i8** %4
br label %227
227: ; preds = %679, %221
%228 = load i8*, i8** %4
%229 = load i8, i8* %228
%230 = sext i8 %229 to i32
%231 = icmp sle i32 65, %230
br i1 %231, label %232, label %237
232: ; preds = %227
%233 = load i8*, i8** %4
%234 = load i8, i8* %233
%235 = sext i8 %234 to i32
%236 = icmp sle i32 %235, 71
br i1 %236, label %242, label %237
237: ; preds = %232, %227
%238 = load i8*, i8** %4
%239 = load i8, i8* %238
%240 = sext i8 %239 to i32
%241 = icmp eq i32 %240, 82
br i1 %241, label %242, label %468
242: ; preds = %237, %232
%243 = load i8*, i8** %4
%244 = load i8, i8* %243
%245 = sext i8 %244 to i32
%246 = icmp eq i32 %245, 82
br i1 %246, label %247, label %249
247: ; preds = %242
store i32 0, i32* %8
%248 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 0
store i8 0, i8* %248
br label %271
249: ; preds = %242
%250 = load i32, i32* %12
%251 = mul nsw i32 %250, 12
%252 = load i8*, i8** %4
%253 = load i8, i8* %252
%254 = sext i8 %253 to i32
%255 = sub nsw i32 %254, 65
%256 = sext i32 %255 to i64
%257 = getelementptr inbounds [7 x i32], [7 x i32]* @HariMain.notetable, i64 0, i64 %256
%258 = load i32, i32* %257
%259 = add nsw i32 %251, %258
%260 = add nsw i32 %259, 12
store i32 %260, i32* %8
%261 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 0
store i8 79, i8* %261
%262 = load i32, i32* %12
%263 = add nsw i32 48, %262
%264 = trunc i32 %263 to i8
%265 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 1
store i8 %264, i8* %265
%266 = load i8*, i8** %4
%267 = load i8, i8* %266
%268 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 2
store i8 %267, i8* %268
%269 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 3
store i8 32, i8* %269
%270 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 4
store i8 0, i8* %270
br label %271
271: ; preds = %249, %247
%272 = load i8*, i8** %4
%273 = getelementptr inbounds i8, i8* %272, i32 1
store i8* %273, i8** %4
%274 = load i8*, i8** %4
%275 = load i8, i8* %274
%276 = sext i8 %275 to i32
%277 = icmp eq i32 %276, 43
br i1 %277, label %288, label %278
278: ; preds = %271
%279 = load i8*, i8** %4
%280 = load i8, i8* %279
%281 = sext i8 %280 to i32
%282 = icmp eq i32 %281, 45
br i1 %282, label %288, label %283
283: ; preds = %278
%284 = load i8*, i8** %4
%285 = load i8, i8* %284
%286 = sext i8 %285 to i32
%287 = icmp eq i32 %286, 35
br i1 %287, label %288, label %305
288: ; preds = %283, %278, %271
%289 = load i8*, i8** %4
%290 = load i8, i8* %289
%291 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 3
store i8 %290, i8* %291
%292 = load i8*, i8** %4
%293 = load i8, i8* %292
%294 = sext i8 %293 to i32
%295 = icmp eq i32 %294, 45
br i1 %295, label %296, label %299
296: ; preds = %288
%297 = load i32, i32* %8
%298 = add nsw i32 %297, -1
store i32 %298, i32* %8
br label %302
299: ; preds = %288
%300 = load i32, i32* %8
%301 = add nsw i32 %300, 1
store i32 %301, i32* %8
br label %302
302: ; preds = %299, %296
%303 = load i8*, i8** %4
%304 = getelementptr inbounds i8, i8* %303, i32 1
store i8* %304, i8** %4
br label %305
305: ; preds = %302, %283
%306 = load i32, i32* %8
%307 = load i32, i32* %14
%308 = icmp ne i32 %306, %307
br i1 %308, label %309, label %378
309: ; preds = %305
%310 = load i32, i32* %6
%311 = add nsw i32 %310, 1
%312 = call i32 @api_boxfilwin(i32 %311, i32 32, i32 36, i32 63, i32 51, i32 8)
%313 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 0
%314 = load i8, i8* %313
%315 = sext i8 %314 to i32
%316 = icmp ne i32 %315, 0
br i1 %316, label %317, label %322
317: ; preds = %309
%318 = load i32, i32* %6
%319 = add nsw i32 %318, 1
%320 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 0
%321 = call i32 @api_putstrwin(i32 %319, i32 32, i32 36, i32 10, i32 4, i8* %320)
br label %322
322: ; preds = %317, %309
%323 = load i32, i32* %6
%324 = call i32 @api_refreshwin(i32 %323, i32 32, i32 36, i32 64, i32 52)
%325 = load i32, i32* %14
%326 = icmp sle i32 28, %325
br i1 %326, label %327, label %341
327: ; preds = %322
%328 = load i32, i32* %14
%329 = icmp sle i32 %328, 107
br i1 %329, label %330, label %341
330: ; preds = %327
%331 = load i32, i32* %6
%332 = load i32, i32* %14
%333 = sub nsw i32 %332, 28
%334 = mul nsw i32 %333, 3
%335 = add nsw i32 %334, 8
%336 = load i32, i32* %14
%337 = sub nsw i32 %336, 28
%338 = mul nsw i32 %337, 3
%339 = add nsw i32 %338, 10
%340 = call i32 @api_boxfilwin(i32 %331, i32 %335, i32 60, i32 %339, i32 76, i32 7)
br label %341
341: ; preds = %330, %327, %322
%342 = load i32, i32* %8
%343 = icmp sle i32 28, %342
br i1 %343, label %344, label %358
344: ; preds = %341
%345 = load i32, i32* %8
%346 = icmp sle i32 %345, 107
br i1 %346, label %347, label %358
347: ; preds = %344
%348 = load i32, i32* %6
%349 = load i32, i32* %8
%350 = sub nsw i32 %349, 28
%351 = mul nsw i32 %350, 3
%352 = add nsw i32 %351, 8
%353 = load i32, i32* %8
%354 = sub nsw i32 %353, 28
%355 = mul nsw i32 %354, 3
%356 = add nsw i32 %355, 10
%357 = call i32 @api_boxfilwin(i32 %348, i32 %352, i32 60, i32 %356, i32 76, i32 4)
br label %358
358: ; preds = %347, %344, %341
%359 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 0
%360 = load i8, i8* %359
%361 = sext i8 %360 to i32
%362 = icmp ne i32 %361, 0
br i1 %362, label %363, label %374
363: ; preds = %358
%364 = load i32, i32* %8
%365 = srem i32 %364, 12
%366 = sext i32 %365 to i64
%367 = getelementptr inbounds [12 x i32], [12 x i32]* @HariMain.tonetable, i64 0, i64 %366
%368 = load i32, i32* %367
%369 = load i32, i32* %8
%370 = sdiv i32 %369, 12
%371 = sub nsw i32 17, %370
%372 = ashr i32 %368, %371
%373 = call i32 @api_beep(i32 %372)
br label %376
374: ; preds = %358
%375 = call i32 @api_beep(i32 0)
br label %376
376: ; preds = %374, %363
%377 = load i32, i32* %8
store i32 %377, i32* %14
br label %378
378: ; preds = %376, %305
%379 = load i8*, i8** %4
%380 = load i8, i8* %379
%381 = sext i8 %380 to i32
%382 = icmp sle i32 48, %381
br i1 %382, label %383, label %392
383: ; preds = %378
%384 = load i8*, i8** %4
%385 = load i8, i8* %384
%386 = sext i8 %385 to i32
%387 = icmp sle i32 %386, 57
br i1 %387, label %388, label %392
388: ; preds = %383
%389 = load i8*, i8** %4
%390 = call i32 @strtol(i8* %389, i8** %4, i32 10)
%391 = sdiv i32 192, %390
store i32 %391, i32* %8
br label %394
392: ; preds = %383, %378
%393 = load i32, i32* %11
store i32 %393, i32* %8
br label %394
394: ; preds = %392, %388
br label %395
395: ; preds = %400, %394
%396 = load i8*, i8** %4
%397 = load i8, i8* %396
%398 = sext i8 %397 to i32
%399 = icmp eq i32 %398, 46
br i1 %399, label %400, label %407
400: ; preds = %395
%401 = load i8*, i8** %4
%402 = getelementptr inbounds i8, i8* %401, i32 1
store i8* %402, i8** %4
%403 = load i32, i32* %8
%404 = sdiv i32 %403, 2
%405 = load i32, i32* %8
%406 = add nsw i32 %405, %404
store i32 %406, i32* %8
br label %395
407: ; preds = %395
%408 = load i32, i32* %8
%409 = mul nsw i32 %408, 125
store i32 %409, i32* %8
%410 = load i32, i32* %10
%411 = load i32, i32* %8
%412 = sdiv i32 %411, %410
store i32 %412, i32* %8
%413 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 0
%414 = load i8, i8* %413
%415 = sext i8 %414 to i32
%416 = icmp ne i32 %415, 0
br i1 %416, label %417, label %453
417: ; preds = %407
%418 = load i32, i32* %13
%419 = icmp slt i32 %418, 8
br i1 %419, label %420, label %453
420: ; preds = %417
%421 = load i8*, i8** %4
%422 = load i8, i8* %421
%423 = sext i8 %422 to i32
%424 = icmp ne i32 %423, 38
br i1 %424, label %425, label %453
425: ; preds = %420
%426 = load i32, i32* %8
%427 = load i32, i32* %13
%428 = mul nsw i32 %426, %427
%429 = sdiv i32 %428, 8
store i32 %429, i32* %9
%430 = load i32, i32* %7
%431 = load i32, i32* %9
%432 = call i32 @waittimer(i32 %430, i32 %431)
%433 = load i32, i32* %6
%434 = call i32 @api_boxfilwin(i32 %433, i32 32, i32 36, i32 63, i32 51, i32 8)
%435 = load i32, i32* %14
%436 = icmp sle i32 28, %435
br i1 %436, label %437, label %451
437: ; preds = %425
%438 = load i32, i32* %14
%439 = icmp sle i32 %438, 107
br i1 %439, label %440, label %451
440: ; preds = %437
%441 = load i32, i32* %6
%442 = load i32, i32* %14
%443 = sub nsw i32 %442, 28
%444 = mul nsw i32 %443, 3
%445 = add nsw i32 %444, 8
%446 = load i32, i32* %14
%447 = sub nsw i32 %446, 28
%448 = mul nsw i32 %447, 3
%449 = add nsw i32 %448, 10
%450 = call i32 @api_boxfilwin(i32 %441, i32 %445, i32 60, i32 %449, i32 76, i32 7)
br label %451
451: ; preds = %440, %437, %425
store i32 0, i32* %14
%452 = call i32 @api_beep(i32 0)
br label %462
453: ; preds = %420, %417, %407
store i32 0, i32* %9
%454 = load i8*, i8** %4
%455 = load i8, i8* %454
%456 = sext i8 %455 to i32
%457 = icmp eq i32 %456, 38
br i1 %457, label %458, label %461
458: ; preds = %453
%459 = load i8*, i8** %4
%460 = getelementptr inbounds i8, i8* %459, i32 1
store i8* %460, i8** %4
br label %461
461: ; preds = %458, %453
br label %462
462: ; preds = %461, %451
%463 = load i32, i32* %7
%464 = load i32, i32* %8
%465 = load i32, i32* %9
%466 = sub nsw i32 %464, %465
%467 = call i32 @waittimer(i32 %463, i32 %466)
br label %679
468: ; preds = %237
%469 = load i8*, i8** %4
%470 = load i8, i8* %469
%471 = sext i8 %470 to i32
%472 = icmp eq i32 %471, 60
br i1 %472, label %473, label %478
473: ; preds = %468
%474 = load i8*, i8** %4
%475 = getelementptr inbounds i8, i8* %474, i32 1
store i8* %475, i8** %4
%476 = load i32, i32* %12
%477 = add nsw i32 %476, -1
store i32 %477, i32* %12
br label %678
478: ; preds = %468
%479 = load i8*, i8** %4
%480 = load i8, i8* %479
%481 = sext i8 %480 to i32
%482 = icmp eq i32 %481, 62
br i1 %482, label %483, label %488
483: ; preds = %478
%484 = load i8*, i8** %4
%485 = getelementptr inbounds i8, i8* %484, i32 1
store i8* %485, i8** %4
%486 = load i32, i32* %12
%487 = add nsw i32 %486, 1
store i32 %487, i32* %12
br label %677
488: ; preds = %478
%489 = load i8*, i8** %4
%490 = load i8, i8* %489
%491 = sext i8 %490 to i32
%492 = icmp eq i32 %491, 79
br i1 %492, label %493, label %497
493: ; preds = %488
%494 = load i8*, i8** %4
%495 = getelementptr inbounds i8, i8* %494, i64 1
%496 = call i32 @strtol(i8* %495, i8** %4, i32 10)
store i32 %496, i32* %12
br label %676
497: ; preds = %488
%498 = load i8*, i8** %4
%499 = load i8, i8* %498
%500 = sext i8 %499 to i32
%501 = icmp eq i32 %500, 81
br i1 %501, label %502, label %506
502: ; preds = %497
%503 = load i8*, i8** %4
%504 = getelementptr inbounds i8, i8* %503, i64 1
%505 = call i32 @strtol(i8* %504, i8** %4, i32 10)
store i32 %505, i32* %13
br label %675
506: ; preds = %497
%507 = load i8*, i8** %4
%508 = load i8, i8* %507
%509 = sext i8 %508 to i32
%510 = icmp eq i32 %509, 76
br i1 %510, label %511, label %534
511: ; preds = %506
%512 = load i8*, i8** %4
%513 = getelementptr inbounds i8, i8* %512, i64 1
%514 = call i32 @strtol(i8* %513, i8** %4, i32 10)
store i32 %514, i32* %11
%515 = load i32, i32* %11
%516 = icmp eq i32 %515, 0
br i1 %516, label %517, label %518
517: ; preds = %511
br label %669
518: ; preds = %511
%519 = load i32, i32* %11
%520 = sdiv i32 192, %519
store i32 %520, i32* %11
br label %521
521: ; preds = %526, %518
%522 = load i8*, i8** %4
%523 = load i8, i8* %522
%524 = sext i8 %523 to i32
%525 = icmp eq i32 %524, 46
br i1 %525, label %526, label %533
526: ; preds = %521
%527 = load i8*, i8** %4
%528 = getelementptr inbounds i8, i8* %527, i32 1
store i8* %528, i8** %4
%529 = load i32, i32* %11
%530 = sdiv i32 %529, 2
%531 = load i32, i32* %11
%532 = add nsw i32 %531, %530
store i32 %532, i32* %11
br label %521
533: ; preds = %521
br label %674
534: ; preds = %506
%535 = load i8*, i8** %4
%536 = load i8, i8* %535
%537 = sext i8 %536 to i32
%538 = icmp eq i32 %537, 84
br i1 %538, label %539, label %543
539: ; preds = %534
%540 = load i8*, i8** %4
%541 = getelementptr inbounds i8, i8* %540, i64 1
%542 = call i32 @strtol(i8* %541, i8** %4, i32 10)
store i32 %542, i32* %10
br label %673
543: ; preds = %534
%544 = load i8*, i8** %4
%545 = load i8, i8* %544
%546 = sext i8 %545 to i32
%547 = icmp eq i32 %546, 36
br i1 %547, label %548, label %661
548: ; preds = %543
%549 = load i8*, i8** %4
%550 = getelementptr inbounds i8, i8* %549, i64 1
%551 = load i8, i8* %550
%552 = sext i8 %551 to i32
%553 = icmp eq i32 %552, 75
br i1 %553, label %554, label %642
554: ; preds = %548
%555 = load i8*, i8** %4
%556 = getelementptr inbounds i8, i8* %555, i64 2
store i8* %556, i8** %4
br label %557
557: ; preds = %569, %554
%558 = load i8*, i8** %4
%559 = load i8, i8* %558
%560 = sext i8 %559 to i32
%561 = icmp ne i32 %560, 34
br i1 %561, label %562, label %572
562: ; preds = %557
%563 = load i8*, i8** %4
%564 = load i8, i8* %563
%565 = sext i8 %564 to i32
%566 = icmp eq i32 %565, 0
br i1 %566, label %567, label %568
567: ; preds = %562
br label %669
568: ; preds = %562
br label %569
569: ; preds = %568
%570 = load i8*, i8** %4
%571 = getelementptr inbounds i8, i8* %570, i32 1
store i8* %571, i8** %4
br label %557
572: ; preds = %557
%573 = load i8*, i8** %4
%574 = getelementptr inbounds i8, i8* %573, i32 1
store i8* %574, i8** %4
store i32 0, i32* %8
br label %575
575: ; preds = %613, %572
%576 = load i32, i32* %8
%577 = icmp slt i32 %576, 32
br i1 %577, label %578, label %616
578: ; preds = %575
%579 = load i8*, i8** %4
%580 = load i8, i8* %579
%581 = sext i8 %580 to i32
%582 = icmp eq i32 %581, 0
br i1 %582, label %583, label %584
583: ; preds = %578
br label %669
584: ; preds = %578
%585 = load i8*, i8** %4
%586 = load i8, i8* %585
%587 = sext i8 %586 to i32
%588 = icmp eq i32 %587, 34
br i1 %588, label %589, label %590
589: ; preds = %584
br label %616
590: ; preds = %584
%591 = load i8*, i8** %4
%592 = load i8, i8* %591
%593 = sext i8 %592 to i32
%594 = icmp eq i32 %593, 37
br i1 %594, label %595, label %604
595: ; preds = %590
%596 = load i8*, i8** %4
%597 = getelementptr inbounds i8, i8* %596, i64 1
%598 = load i8, i8* %597
%599 = load i32, i32* %8
%600 = sext i32 %599 to i64
%601 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 %600
store i8 %598, i8* %601
%602 = load i8*, i8** %4
%603 = getelementptr inbounds i8, i8* %602, i64 2
store i8* %603, i8** %4
br label %612
604: ; preds = %590
%605 = load i8*, i8** %4
%606 = load i8, i8* %605
%607 = load i32, i32* %8
%608 = sext i32 %607 to i64
%609 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 %608
store i8 %606, i8* %609
%610 = load i8*, i8** %4
%611 = getelementptr inbounds i8, i8* %610, i32 1
store i8* %611, i8** %4
br label %612
612: ; preds = %604, %595
br label %613
613: ; preds = %612
%614 = load i32, i32* %8
%615 = add nsw i32 %614, 1
store i32 %615, i32* %8
br label %575
616: ; preds = %589, %575
%617 = load i32, i32* %8
%618 = icmp sgt i32 %617, 30
br i1 %618, label %619, label %621
619: ; preds = %616
%620 = call i32 @end(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.2, i64 0, i64 0))
br label %621
621: ; preds = %619, %616
%622 = load i32, i32* %6
%623 = add nsw i32 %622, 1
%624 = call i32 @api_boxfilwin(i32 %623, i32 8, i32 88, i32 247, i32 103, i32 7)
%625 = load i32, i32* %8
%626 = sext i32 %625 to i64
%627 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 %626
store i8 0, i8* %627
%628 = load i32, i32* %8
%629 = icmp ne i32 %628, 0
br i1 %629, label %630, label %639
630: ; preds = %621
%631 = load i32, i32* %6
%632 = add nsw i32 %631, 1
%633 = load i32, i32* %8
%634 = mul nsw i32 %633, 4
%635 = sub nsw i32 128, %634
%636 = load i32, i32* %8
%637 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 0
%638 = call i32 @api_putstrwin(i32 %632, i32 %635, i32 88, i32 0, i32 %636, i8* %637)
br label %639
639: ; preds = %630, %621
%640 = load i32, i32* %6
%641 = call i32 @api_refreshwin(i32 %640, i32 8, i32 88, i32 248, i32 104)
br label %642
642: ; preds = %639, %548
br label %643
643: ; preds = %655, %642
%644 = load i8*, i8** %4
%645 = load i8, i8* %644
%646 = sext i8 %645 to i32
%647 = icmp ne i32 %646, 59
br i1 %647, label %648, label %658
648: ; preds = %643
%649 = load i8*, i8** %4
%650 = load i8, i8* %649
%651 = sext i8 %650 to i32
%652 = icmp eq i32 %651, 0
br i1 %652, label %653, label %654
653: ; preds = %648
br label %669
654: ; preds = %648
br label %655
655: ; preds = %654
%656 = load i8*, i8** %4
%657 = getelementptr inbounds i8, i8* %656, i32 1
store i8* %657, i8** %4
br label %643
658: ; preds = %643
%659 = load i8*, i8** %4
%660 = getelementptr inbounds i8, i8* %659, i32 1
store i8* %660, i8** %4
br label %672
661: ; preds = %543
%662 = load i8*, i8** %4
%663 = load i8, i8* %662
%664 = sext i8 %663 to i32
%665 = icmp eq i32 %664, 0
br i1 %665, label %666, label %668
666: ; preds = %661
%667 = getelementptr inbounds [102400 x i8], [102400 x i8]* %2, i64 0, i64 0
store i8* %667, i8** %4
br label %671
668: ; preds = %661
br label %669
669: ; preds = %668, %653, %583, %567, %517
%670 = call i32 @end(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.3, i64 0, i64 0))
br label %671
671: ; preds = %669, %666
br label %672
672: ; preds = %671, %658
br label %673
673: ; preds = %672, %539
br label %674
674: ; preds = %673, %533
br label %675
675: ; preds = %674, %502
br label %676
676: ; preds = %675, %493
br label %677
677: ; preds = %676, %483
br label %678
678: ; preds = %677, %473
br label %679
679: ; preds = %678, %462
br label %227
}

LLVM IR (-O2):
@HariMain.tonetable = internal unnamed_addr constant [12 x i32] [i32 1071618315, i32 1135340056, i32 1202850889, i32 1274376125, i32 1350154473, i32 1430438836, i32 1515497155, i32 1605613306, i32 1701088041, i32 1802240000, i32 1909406767, i32 2022946002]
@HariMain.notetable = internal unnamed_addr constant [7 x i32] [i32 9, i32 11, i32 0, i32 2, i32 4, i32 5, i32 7]
@.str = [18 x i8] c"file open error.\0A\00"
@.str.1 = [8 x i8] c"mmlplay\00"
@.str.2 = [19 x i8] c"karaoke too long.\0A\00"
@.str.3 = [19 x i8] c"mml syntax error.\0A\00"
define void @HariMain() {
%1 = alloca [28672 x i8]
%2 = alloca [102400 x i8]
%3 = alloca [32 x i8]
%4 = alloca i8*
%5 = getelementptr inbounds [28672 x i8], [28672 x i8]* %1, i64 0, i64 0
%6 = getelementptr inbounds [102400 x i8], [102400 x i8]* %2, i64 0, i64 0
%7 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 0
%8 = bitcast i8** %4 to i8*
%9 = call i32 @api_cmdline(i8* %7, i32 30)
br label %10
10: ; preds = %10, %0
%11 = phi i8* [ %7, %0 ], [ %14, %10 ]
%12 = load i8, i8* %11
%13 = icmp sgt i8 %12, 32
%14 = getelementptr inbounds i8, i8* %11, i64 1
br i1 %13, label %10, label %15
15: ; preds = %10
store i8* %11, i8** %4
%16 = icmp eq i8 %12, 32
br i1 %16, label %17, label %23
17: ; preds = %15, %17
%18 = phi i8* [ %19, %17 ], [ %11, %15 ]
%19 = getelementptr inbounds i8, i8* %18, i64 1
%20 = load i8, i8* %19
%21 = icmp eq i8 %20, 32
br i1 %21, label %17, label %22
22: ; preds = %17
store i8* %19, i8** %4
br label %23
23: ; preds = %22, %15
%24 = phi i8* [ %11, %15 ], [ %19, %22 ]
%25 = call i32 @strlen(i8* %24)
%26 = icmp sgt i32 %25, 12
br i1 %26, label %27, label %30
27: ; preds = %35, %23
%28 = phi i32 [ %25, %23 ], [ 0, %35 ]
%29 = call i32 @end(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str, i64 0, i64 0))
br label %30
30: ; preds = %27, %23
%31 = phi i32 [ %28, %27 ], [ %25, %23 ]
%32 = icmp eq i32 %31, 0
br i1 %32, label %33, label %35
33: ; preds = %30
%34 = call i32 @end(i8* null)
br label %35
35: ; preds = %33, %30
%36 = call i32 @api_openwin(i8* %5, i32 256, i32 112, i32 -1, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.1, i64 0, i64 0))
%37 = load i8*, i8** %4
%38 = call i32 @api_putstrwin(i32 %36, i32 128, i32 32, i32 0, i32 %31, i8* %37)
%39 = call i32 @api_boxfilwin(i32 %36, i32 8, i32 60, i32 247, i32 76, i32 7)
%40 = call i32 @api_boxfilwin(i32 %36, i32 6, i32 86, i32 249, i32 105, i32 7)
%41 = load i8*, i8** %4
%42 = call i32 @api_fopen(i8* %41)
%43 = icmp eq i32 %42, 0
br i1 %43, label %27, label %44
44: ; preds = %35
%45 = call i32 @api_fsize(i32 %42, i32 0)
%46 = icmp slt i32 %45, 102399
%47 = select i1 %46, i32 %45, i32 102399
%48 = call i32 @api_fread(i8* %6, i32 %47, i32 %42)
%49 = call i32 @api_fclose(i32 %42)
%50 = sext i32 %47 to i64
%51 = getelementptr inbounds [102400 x i8], [102400 x i8]* %2, i64 0, i64 %50
store i8 0, i8* %51
store i8* %6, i8** %4
%52 = load i8, i8* %6
%53 = icmp eq i8 %52, 0
br i1 %53, label %105, label %54
54: ; preds = %44, %98
%55 = phi i8 [ %103, %98 ], [ %52, %44 ]
%56 = phi i32 [ %100, %98 ], [ 0, %44 ]
%57 = phi i8* [ %99, %98 ], [ %6, %44 ]
%58 = phi i8* [ %102, %98 ], [ %6, %44 ]
%59 = icmp eq i32 %56, 0
%60 = icmp sgt i8 %55, 32
%61 = select i1 %59, i1 %60, i1 false
br i1 %61, label %62, label %78
62: ; preds = %54
switch i8 %55, label %76 [
i8 47, label %63
i8 34, label %74
]
63: ; preds = %62
%64 = getelementptr inbounds i8, i8* %58, i64 1
%65 = load i8, i8* %64
switch i8 %65, label %67 [
i8 42, label %98
i8 47, label %66
]
66: ; preds = %63
br label %98
67: ; preds = %63
store i8 47, i8* %57
%68 = load i8*, i8** %4
%69 = load i8, i8* %68
%70 = add i8 %69, -97
%71 = icmp ult i8 %70, 26
%72 = select i1 %71, i8 15, i8 47
store i8 %72, i8* %57
%73 = getelementptr inbounds i8, i8* %57, i64 1
br label %98
74: ; preds = %62
store i8 34, i8* %57
%75 = getelementptr inbounds i8, i8* %57, i64 1
br label %98
76: ; preds = %62
store i8 %55, i8* %57
%77 = getelementptr inbounds i8, i8* %57, i64 1
br label %98
78: ; preds = %54
switch i32 %56, label %98 [
i32 1, label %79
i32 2, label %86
i32 3, label %89
]
79: ; preds = %78
%80 = icmp eq i8 %55, 42
br i1 %80, label %81, label %98
81: ; preds = %79
%82 = getelementptr inbounds i8, i8* %58, i64 1
%83 = load i8, i8* %82
%84 = icmp eq i8 %83, 47
br i1 %84, label %85, label %98
85: ; preds = %81
store i8* %82, i8** %4
br label %98
86: ; preds = %78
%87 = icmp eq i8 %55, 10
%88 = select i1 %87, i32 0, i32 2
br label %98
89: ; preds = %78
store i8 %55, i8* %57
%90 = getelementptr inbounds i8, i8* %57, i64 1
%91 = load i8*, i8** %4
%92 = load i8, i8* %91
switch i8 %92, label %97 [
i8 34, label %98
i8 37, label %93
]
93: ; preds = %89
%94 = getelementptr inbounds i8, i8* %91, i64 1
store i8* %94, i8** %4
%95 = load i8, i8* %94
store i8 %95, i8* %90
%96 = getelementptr inbounds i8, i8* %57, i64 2
br label %98
97: ; preds = %89
br label %98
98: ; preds = %86, %79, %81, %89, %97, %78, %63, %74, %76, %67, %66, %93, %85
%99 = phi i8* [ %57, %66 ], [ %73, %67 ], [ %75, %74 ], [ %77, %76 ], [ %57, %85 ], [ %96, %93 ], [ %57, %63 ], [ %57, %78 ], [ %90, %89 ], [ %90, %97 ], [ %57, %81 ], [ %57, %79 ], [ %57, %86 ]
%100 = phi i32 [ 2, %66 ], [ 0, %67 ], [ 3, %74 ], [ 0, %76 ], [ 0, %85 ], [ 3, %93 ], [ 1, %63 ], [ %56, %78 ], [ 0, %89 ], [ 3, %97 ], [ 1, %81 ], [ 1, %79 ], [ %88, %86 ]
%101 = load i8*, i8** %4
%102 = getelementptr inbounds i8, i8* %101, i64 1
store i8* %102, i8** %4
%103 = load i8, i8* %102
%104 = icmp eq i8 %103, 0
br i1 %104, label %105, label %54
105: ; preds = %98, %44
%106 = phi i8* [ %6, %44 ], [ %99, %98 ]
store i8 0, i8* %106
%107 = call i32 (...) @api_alloctimer()
%108 = call i32 @api_inittimer(i32 %107, i32 128)
store i8* %6, i8** %4
%109 = add nsw i32 %36, 1
%110 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 1
%111 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 2
%112 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 3
%113 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 4
br label %114
114: ; preds = %350, %105
%115 = phi i8* [ %6, %105 ], [ %356, %350 ]
%116 = phi i32 [ 120, %105 ], [ %351, %350 ]
%117 = phi i32 [ 48, %105 ], [ %352, %350 ]
%118 = phi i32 [ 4, %105 ], [ %353, %350 ]
%119 = phi i32 [ 7, %105 ], [ %354, %350 ]
%120 = phi i32 [ 0, %105 ], [ %355, %350 ]
%121 = load i8, i8* %115
%122 = add i8 %121, -65
%123 = icmp ult i8 %122, 7
br i1 %123, label %126, label %124
124: ; preds = %114
switch i8 %121, label %347 [
i8 82, label %125
i8 60, label %245
i8 62, label %248
i8 79, label %251
i8 81, label %254
i8 76, label %257
i8 84, label %274
i8 36, label %277
i8 0, label %346
]
125: ; preds = %124
store i8 0, i8* %7
br label %137
126: ; preds = %114
%127 = zext i8 %121 to i64
%128 = mul nsw i32 %118, 12
%129 = add nsw i64 %127, -65
%130 = getelementptr inbounds [7 x i32], [7 x i32]* @HariMain.notetable, i64 0, i64 %129
%131 = load i32, i32* %130
%132 = add i32 %128, 12
%133 = add i32 %132, %131
store i8 79, i8* %7
%134 = trunc i32 %118 to i8
%135 = add i8 %134, 48
store i8 %135, i8* %110
%136 = load i8, i8* %115
store i8 %136, i8* %111
store i8 32, i8* %112
store i8 0, i8* %113
br label %137
137: ; preds = %126, %125
%138 = phi i32 [ 0, %125 ], [ %133, %126 ]
%139 = getelementptr inbounds i8, i8* %115, i64 1
store i8* %139, i8** %4
%140 = load i8, i8* %139
switch i8 %140, label %147 [
i8 43, label %141
i8 45, label %141
i8 35, label %141
]
141: ; preds = %137, %137, %137
store i8 %140, i8* %112
%142 = load i8, i8* %139
%143 = icmp eq i8 %142, 45
%144 = select i1 %143, i32 -1, i32 1
%145 = add nsw i32 %144, %138
%146 = getelementptr inbounds i8, i8* %115, i64 2
store i8* %146, i8** %4
br label %147
147: ; preds = %137, %141
%148 = phi i32 [ %145, %141 ], [ %138, %137 ]
%149 = icmp eq i32 %148, %120
br i1 %149, label %187, label %150
150: ; preds = %147
%151 = call i32 @api_boxfilwin(i32 %109, i32 32, i32 36, i32 63, i32 51, i32 8)
%152 = load i8, i8* %7
%153 = icmp eq i8 %152, 0
br i1 %153, label %156, label %154
154: ; preds = %150
%155 = call i32 @api_putstrwin(i32 %109, i32 32, i32 36, i32 10, i32 4, i8* %7)
br label %156
156: ; preds = %154, %150
%157 = call i32 @api_refreshwin(i32 %36, i32 32, i32 36, i32 64, i32 52)
%158 = add i32 %120, -28
%159 = icmp ult i32 %158, 80
br i1 %159, label %160, label %165
160: ; preds = %156
%161 = mul nuw nsw i32 %120, 3
%162 = add nsw i32 %161, -76
%163 = add nsw i32 %161, -74
%164 = call i32 @api_boxfilwin(i32 %36, i32 %162, i32 60, i32 %163, i32 76, i32 7)
br label %165
165: ; preds = %160, %156
%166 = add i32 %148, -28
%167 = icmp ult i32 %166, 80
br i1 %167, label %168, label %173
168: ; preds = %165
%169 = mul nuw nsw i32 %148, 3
%170 = add nsw i32 %169, -76
%171 = add nsw i32 %169, -74
%172 = call i32 @api_boxfilwin(i32 %36, i32 %170, i32 60, i32 %171, i32 76, i32 4)
br label %173
173: ; preds = %168, %165
%174 = load i8, i8* %7
%175 = icmp eq i8 %174, 0
br i1 %175, label %184, label %176
176: ; preds = %173
%177 = srem i32 %148, 12
%178 = sext i32 %177 to i64
%179 = getelementptr inbounds [12 x i32], [12 x i32]* @HariMain.tonetable, i64 0, i64 %178
%180 = load i32, i32* %179
%181 = sdiv i32 %148, -12
%182 = add nsw i32 %181, 17
%183 = ashr i32 %180, %182
br label %184
184: ; preds = %173, %176
%185 = phi i32 [ %183, %176 ], [ 0, %173 ]
%186 = call i32 @api_beep(i32 %185)
br label %187
187: ; preds = %184, %147
%188 = phi i32 [ %120, %147 ], [ %148, %184 ]
%189 = load i8*, i8** %4
%190 = load i8, i8* %189
%191 = add i8 %190, -48
%192 = icmp ult i8 %191, 10
br i1 %192, label %193, label %198
193: ; preds = %187
%194 = call i32 @strtol(i8* %189, i8** %4, i32 10)
%195 = sdiv i32 192, %194
%196 = load i8*, i8** %4
%197 = load i8, i8* %196
br label %198
198: ; preds = %187, %193
%199 = phi i8 [ %197, %193 ], [ %190, %187 ]
%200 = phi i8* [ %196, %193 ], [ %189, %187 ]
%201 = phi i32 [ %195, %193 ], [ %117, %187 ]
%202 = icmp eq i8 %199, 46
br i1 %202, label %203, label %211
203: ; preds = %198, %203
%204 = phi i8* [ %206, %203 ], [ %200, %198 ]
%205 = phi i32 [ %208, %203 ], [ %201, %198 ]
%206 = getelementptr inbounds i8, i8* %204, i64 1
store i8* %206, i8** %4
%207 = sdiv i32 %205, 2
%208 = add nsw i32 %207, %205
%209 = load i8, i8* %206
%210 = icmp eq i8 %209, 46
br i1 %210, label %203, label %211
211: ; preds = %203, %198
%212 = phi i32 [ %201, %198 ], [ %208, %203 ]
%213 = phi i8* [ %200, %198 ], [ %206, %203 ]
%214 = phi i8 [ %199, %198 ], [ %209, %203 ]
%215 = mul nsw i32 %212, 125
%216 = sdiv i32 %215, %116
%217 = load i8, i8* %7
%218 = icmp eq i8 %217, 0
%219 = icmp sgt i32 %119, 7
%220 = select i1 %218, i1 true, i1 %219
%221 = icmp eq i8 %214, 38
%222 = select i1 %220, i1 true, i1 %221
br i1 %222, label %237, label %223
223: ; preds = %211
%224 = mul nsw i32 %216, %119
%225 = sdiv i32 %224, 8
%226 = call i32 @waittimer(i32 %107, i32 %225)
%227 = call i32 @api_boxfilwin(i32 %36, i32 32, i32 36, i32 63, i32 51, i32 8)
%228 = add i32 %188, -28
%229 = icmp ult i32 %228, 80
br i1 %229, label %230, label %235
230: ; preds = %223
%231 = mul nuw nsw i32 %188, 3
%232 = add nsw i32 %231, -76
%233 = add nsw i32 %231, -74
%234 = call i32 @api_boxfilwin(i32 %36, i32 %232, i32 60, i32 %233, i32 76, i32 7)
br label %235
235: ; preds = %230, %223
%236 = call i32 @api_beep(i32 0)
br label %240
237: ; preds = %211
br i1 %221, label %238, label %240
238: ; preds = %237
%239 = getelementptr inbounds i8, i8* %213, i64 1
store i8* %239, i8** %4
br label %240
240: ; preds = %237, %238, %235
%241 = phi i32 [ %225, %235 ], [ 0, %238 ], [ 0, %237 ]
%242 = phi i32 [ 0, %235 ], [ %188, %238 ], [ %188, %237 ]
%243 = sub nsw i32 %216, %241
%244 = call i32 @waittimer(i32 %107, i32 %243)
br label %350
245: ; preds = %124
%246 = getelementptr inbounds i8, i8* %115, i64 1
store i8* %246, i8** %4
%247 = add nsw i32 %118, -1
br label %350
248: ; preds = %124
%249 = getelementptr inbounds i8, i8* %115, i64 1
store i8* %249, i8** %4
%250 = add nsw i32 %118, 1
br label %350
251: ; preds = %124
%252 = getelementptr inbounds i8, i8* %115, i64 1
%253 = call i32 @strtol(i8* %252, i8** %4, i32 10)
br label %350
254: ; preds = %124
%255 = getelementptr inbounds i8, i8* %115, i64 1
%256 = call i32 @strtol(i8* %255, i8** %4, i32 10)
br label %350
257: ; preds = %124
%258 = getelementptr inbounds i8, i8* %115, i64 1
%259 = call i32 @strtol(i8* %258, i8** %4, i32 10)
%260 = icmp eq i32 %259, 0
br i1 %260, label %347, label %261
261: ; preds = %257
%262 = sdiv i32 192, %259
%263 = load i8*, i8** %4
%264 = load i8, i8* %263
%265 = icmp eq i8 %264, 46
br i1 %265, label %266, label %350
266: ; preds = %261, %266
%267 = phi i8* [ %269, %266 ], [ %263, %261 ]
%268 = phi i32 [ %271, %266 ], [ %262, %261 ]
%269 = getelementptr inbounds i8, i8* %267, i64 1
store i8* %269, i8** %4
%270 = sdiv i32 %268, 2
%271 = add nsw i32 %270, %268
%272 = load i8, i8* %269
%273 = icmp eq i8 %272, 46
br i1 %273, label %266, label %350
274: ; preds = %124
%275 = getelementptr inbounds i8, i8* %115, i64 1
%276 = call i32 @strtol(i8* %275, i8** %4, i32 10)
br label %350
277: ; preds = %124
%278 = getelementptr inbounds i8, i8* %115, i64 1
%279 = load i8, i8* %278
%280 = icmp eq i8 %279, 75
br i1 %280, label %281, label %337
281: ; preds = %277
%282 = getelementptr inbounds i8, i8* %115, i64 2
br label %283
283: ; preds = %286, %281
%284 = phi i8* [ %282, %281 ], [ %287, %286 ]
store i8* %284, i8** %4
%285 = load i8, i8* %284
switch i8 %285, label %286 [
i8 34, label %288
i8 0, label %347
]
286: ; preds = %283
%287 = getelementptr inbounds i8, i8* %284, i64 1
br label %283
288: ; preds = %283
%289 = getelementptr inbounds i8, i8* %284, i64 1
store i8* %289, i8** %4
br label %290
290: ; preds = %307, %288
%291 = phi i8* [ %289, %288 ], [ %311, %307 ]
%292 = phi i64 [ 0, %288 ], [ %312, %307 ]
%293 = load i8, i8* %291
switch i8 %293, label %297 [
i8 0, label %347
i8 34, label %314
i8 37, label %294
]
294: ; preds = %290
%295 = getelementptr inbounds i8, i8* %291, i64 1
%296 = load i8, i8* %295
br label %297
297: ; preds = %290, %294
%298 = phi i8 [ %296, %294 ], [ %293, %290 ]
%299 = phi i64 [ 2, %294 ], [ 1, %290 ]
%300 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 %292
store i8 %298, i8* %300
%301 = getelementptr inbounds i8, i8* %291, i64 %299
store i8* %301, i8** %4
%302 = or i64 %292, 1
%303 = load i8, i8* %301
switch i8 %303, label %307 [
i8 0, label %347
i8 34, label %314
i8 37, label %304
]
304: ; preds = %297
%305 = getelementptr inbounds i8, i8* %301, i64 1
%306 = load i8, i8* %305
br label %307
307: ; preds = %304, %297
%308 = phi i8 [ %306, %304 ], [ %303, %297 ]
%309 = phi i64 [ 2, %304 ], [ 1, %297 ]
%310 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 %302
store i8 %308, i8* %310
%311 = getelementptr inbounds i8, i8* %301, i64 %309
store i8* %311, i8** %4
%312 = add nuw nsw i64 %292, 2
%313 = icmp eq i64 %312, 32
br i1 %313, label %318, label %290
314: ; preds = %297, %290
%315 = phi i64 [ %292, %290 ], [ %302, %297 ]
%316 = trunc i64 %315 to i32
%317 = icmp ugt i32 %316, 30
br i1 %317, label %318, label %324
318: ; preds = %307, %314
%319 = phi i32 [ %316, %314 ], [ 32, %307 ]
%320 = call i32 @end(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.2, i64 0, i64 0))
%321 = call i32 @api_boxfilwin(i32 %109, i32 8, i32 88, i32 247, i32 103, i32 7)
%322 = zext i32 %319 to i64
%323 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 %322
store i8 0, i8* %323
br label %329
324: ; preds = %314
%325 = call i32 @api_boxfilwin(i32 %109, i32 8, i32 88, i32 247, i32 103, i32 7)
%326 = and i64 %315, 4294967295
%327 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 %326
store i8 0, i8* %327
%328 = icmp eq i32 %316, 0
br i1 %328, label %334, label %329
329: ; preds = %318, %324
%330 = phi i32 [ %319, %318 ], [ %316, %324 ]
%331 = mul i32 %330, -4
%332 = add i32 %331, 128
%333 = call i32 @api_putstrwin(i32 %109, i32 %332, i32 88, i32 0, i32 %330, i8* %7)
br label %334
334: ; preds = %329, %324
%335 = call i32 @api_refreshwin(i32 %36, i32 8, i32 88, i32 248, i32 104)
%336 = load i8*, i8** %4
br label %337
337: ; preds = %334, %277
%338 = phi i8* [ %115, %277 ], [ %336, %334 ]
br label %339
339: ; preds = %337, %342
%340 = phi i8* [ %343, %342 ], [ %338, %337 ]
%341 = load i8, i8* %340
switch i8 %341, label %342 [
i8 59, label %344
i8 0, label %347
]
342: ; preds = %339
%343 = getelementptr inbounds i8, i8* %340, i64 1
store i8* %343, i8** %4
br label %339
344: ; preds = %339
%345 = getelementptr inbounds i8, i8* %340, i64 1
store i8* %345, i8** %4
br label %350
346: ; preds = %124
store i8* %6, i8** %4
br label %350
347: ; preds = %283, %290, %297, %339, %124, %257
%348 = phi i32 [ 0, %257 ], [ %117, %124 ], [ %117, %339 ], [ %117, %297 ], [ %117, %290 ], [ %117, %283 ]
%349 = call i32 @end(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.3, i64 0, i64 0))
br label %350
350: ; preds = %266, %261, %245, %251, %344, %347, %346, %274, %254, %248, %240
%351 = phi i32 [ %116, %240 ], [ %116, %245 ], [ %116, %248 ], [ %116, %251 ], [ %116, %254 ], [ %116, %347 ], [ %276, %274 ], [ %116, %344 ], [ %116, %346 ], [ %116, %261 ], [ %116, %266 ]
%352 = phi i32 [ %117, %240 ], [ %117, %245 ], [ %117, %248 ], [ %117, %251 ], [ %117, %254 ], [ %348, %347 ], [ %117, %274 ], [ %117, %344 ], [ %117, %346 ], [ %262, %261 ], [ %271, %266 ]
%353 = phi i32 [ %118, %240 ], [ %247, %245 ], [ %250, %248 ], [ %253, %251 ], [ %118, %254 ], [ %118, %347 ], [ %118, %274 ], [ %118, %344 ], [ %118, %346 ], [ %118, %261 ], [ %118, %266 ]
%354 = phi i32 [ %119, %240 ], [ %119, %245 ], [ %119, %248 ], [ %119, %251 ], [ %256, %254 ], [ %119, %347 ], [ %119, %274 ], [ %119, %344 ], [ %119, %346 ], [ %119, %261 ], [ %119, %266 ]
%355 = phi i32 [ %242, %240 ], [ %120, %245 ], [ %120, %248 ], [ %120, %251 ], [ %120, %254 ], [ %120, %347 ], [ %120, %274 ], [ %120, %344 ], [ %120, %346 ], [ %120, %261 ], [ %120, %266 ]
%356 = load i8*, i8** %4
br label %114
}