#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 */
typedef char uint32_t;

/* Variables and functions */
int /*<<< orphan*/ cd_command(char *);
int /*<<< orphan*/ chain_command(char);
int /*<<< orphan*/ delete_command(char *);
int /*<<< orphan*/ dump_command(char *);
int /*<<< orphan*/ dump_fat_command(char *);
int /*<<< orphan*/ fat_command();
int /*<<< orphan*/ hdump_command(char *);
int /*<<< orphan*/ info_command();
int /*<<< orphan*/ ls_command(char *);
int /*<<< orphan*/ lsdel_command(char *);
int /*<<< orphan*/ mount_command(char *);
int /*<<< orphan*/ printf(char *);
int /*<<< orphan*/ quit_command();
int /*<<< orphan*/ show_command(char);
int sscanf(char const *, char *, char *, ...);
int /*<<< orphan*/ strcmp(char *, char *);
int /*<<< orphan*/ test_command(char);
int /*<<< orphan*/ test_fat_command();
int /*<<< orphan*/ umount_command();
int /*<<< orphan*/ undelete_command(char *);
int /*<<< orphan*/ wmount_command(char *);
void command_dispatcher(const char *command) {
  char verb[10];
  int len;
  len = sscanf(command, "%s", verb);
  if (len < 1)
    return;
  if (!strcmp(verb, "quit")) {
    quit_command();
  } else if (!strcmp(verb, "mount")) {
    char dev[(1000 * 1000)];
    int len = 0;
    len = sscanf(command, "%s %s", verb, dev);
    if (len < 2) {
      printf("mount mount-device\n");
      return;
    }
    mount_command(dev);
  } else if (!strcmp(verb, "wmount")) {
    char dev[(1000 * 1000)];
    int len = 0;
    len = sscanf(command, "%s %s", verb, dev);
    if (len < 2) {
      printf("wmount mount-device\n");
      return;
    }
    wmount_command(dev);
  } else if (!strcmp(verb, "umount")) {
    umount_command();
  } else if (!strcmp(verb, "cd")) {
    char path[(1000 * 1000)];
    int len;
    len = sscanf(command, "%s %s", verb, path);
    if (len < 2) {
      return;
    }
    cd_command(path);
  } else if (!strcmp(verb, "ls")) {
    char dir[(1000 * 1000)];
    int len;
    len = sscanf(command, "%s %s", verb, dir);
    if (len < 2) {
      ls_command(NULL);
      return;
    }
    ls_command(dir);
  } else if (!strcmp(verb, "lsdel")) {
    char dir[(1000 * 1000)];
    int len;
    len = sscanf(command, "%s %s", verb, dir);
    if (len < 2) {
      lsdel_command(NULL);
      return;
    }
    lsdel_command(dir);
  } else if (!strcmp(verb, "chain")) {
    uint32_t index;
    int len;
    len = sscanf(command, "%s %u", verb, &index);
    if (len < 2) {
      printf("chain cluster-number\n");
      return;
    }
    chain_command(index);
  } else if (!strcmp(verb, "fat")) {
    fat_command();
  } else if (!strcmp(verb, "dump_fat")) {
    char path[(1000 * 1000)];
    int len;
    len = sscanf(command, "%s %s", verb, path);
    if (len < 2) {
      printf("dump_fat file-path\n");
      return;
    }
    dump_fat_command(path);
  } else if (!strcmp(verb, "dump")) {
    char dir[(1000 * 1000)];
    int len;
    len = sscanf(command, "%s %s", verb, dir);
    if (len < 2) {
      printf("dump file-name");
      return;
    }
    dump_command(dir);
  } else if (!strcmp(verb, "hdump")) {
    char dir[(1000 * 1000)];
    int len;
    len = sscanf(command, "%s %s", verb, dir);
    if (len < 2) {
      printf("hdump file-name");
      return;
    }
    hdump_command(dir);
  } else if (!strcmp(verb, "delete")) {
    char dir[(1000 * 1000)];
    int len;
    len = sscanf(command, "%s %s", verb, dir);
    if (len < 2) {
      printf("delete file-name");
      return;
    }
    delete_command(dir);
  } else if (!strcmp(verb, "undelete")) {
    char dir[(1000 * 1000)];
    int len;
    len = sscanf(command, "%s %s", verb, dir);
    if (len < 2) {
      printf("undelete file-name");
      return;
    }
    undelete_command(dir);
  } else if (!strcmp(verb, "info")) {
    info_command();
  } else if (!strcmp(verb, "show")) {
    char c;
    int len;
    len = sscanf(command, "%s %c", verb, &c);
    if (len < 2) {
      printf("show w|c\n");
      return;
    }
    show_command(c);
  } else if (!strcmp(verb, "test_fat")) {
    test_fat_command();
  } else if (!strcmp(verb, "test")) {
    uint32_t index;
    int len;
    len = sscanf(command, "%s %u", verb, &index);
    if (len < 2) {
      printf("test cluster-number\n");
      return;
    }
    test_command(index);
  } else {
    printf("404 Not Found\n");
  }
}


x86 assembly (clang, -O0):
<command_dispatcher>:
push   %rbp
mov    %rsp,%rbp
sub    $0x989750,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rdi
lea    -0x12(%rbp),%rdx
lea    0xd9a(%rip),%rsi
mov    $0x0,%al
call   10e0 <sscanf@plt>
mov    %eax,-0x18(%rbp)
cmpl   $0x1,-0x18(%rbp)
jge    1287 <command_dispatcher+0x37>
jmp    1912 <command_dispatcher+0x6c2>
lea    -0x12(%rbp),%rdi
lea    0xd6e(%rip),%rsi
call   1090 <strcmp@plt>
cmp    $0x0,%eax
jne    12ac <command_dispatcher+0x5c>
mov    $0x0,%al
call   1070 <quit_command@plt>
jmp    1912 <command_dispatcher+0x6c2>
lea    -0x12(%rbp),%rdi
lea    0xd71(%rip),%rsi
call   1090 <strcmp@plt>
cmp    $0x0,%eax
jne    1321 <command_dispatcher+0xd1>
movl   $0x0,-0xf4264(%rbp)
mov    -0x8(%rbp),%rdi
lea    -0x12(%rbp),%rdx
lea    -0xf4260(%rbp),%rcx
lea    0xd20(%rip),%rsi
mov    $0x0,%al
call   10e0 <sscanf@plt>
mov    %eax,-0xf4264(%rbp)
cmpl   $0x2,-0xf4264(%rbp)
jge    1310 <command_dispatcher+0xc0>
lea    0xd0d(%rip),%rdi
call   1050 <printf@plt>
jmp    1912 <command_dispatcher+0x6c2>
lea    -0xf4260(%rbp),%rdi
call   1140 <mount_command@plt>
jmp    190d <command_dispatcher+0x6bd>
lea    -0x12(%rbp),%rdi
lea    0xcdf(%rip),%rsi
call   1090 <strcmp@plt>
cmp    $0x0,%eax
jne    1396 <command_dispatcher+0x146>
movl   $0x0,-0x1e84b4(%rbp)
mov    -0x8(%rbp),%rdi
lea    -0x12(%rbp),%rdx
lea    -0x1e84b0(%rbp),%rcx
lea    0xcab(%rip),%rsi
mov    $0x0,%al
call   10e0 <sscanf@plt>
mov    %eax,-0x1e84b4(%rbp)
cmpl   $0x2,-0x1e84b4(%rbp)
jge    1385 <command_dispatcher+0x135>
lea    0xc97(%rip),%rdi
call   1050 <printf@plt>
jmp    1912 <command_dispatcher+0x6c2>
lea    -0x1e84b0(%rbp),%rdi
call   10f0 <wmount_command@plt>
jmp    1908 <command_dispatcher+0x6b8>
lea    -0x12(%rbp),%rdi
lea    0xc86(%rip),%rsi
call   1090 <strcmp@plt>
cmp    $0x0,%eax
jne    13bb <command_dispatcher+0x16b>
mov    $0x0,%al
call   1110 <umount_command@plt>
jmp    1903 <command_dispatcher+0x6b3>
lea    -0x12(%rbp),%rdi
lea    0xc68(%rip),%rsi
call   1090 <strcmp@plt>
cmp    $0x0,%eax
jne    141a <command_dispatcher+0x1ca>
mov    -0x8(%rbp),%rdi
lea    -0x12(%rbp),%rdx
lea    -0x2dc700(%rbp),%rcx
lea    0xc1b(%rip),%rsi
mov    $0x0,%al
call   10e0 <sscanf@plt>
mov    %eax,-0x2dc704(%rbp)
cmpl   $0x2,-0x2dc704(%rbp)
jge    1409 <command_dispatcher+0x1b9>
jmp    1912 <command_dispatcher+0x6c2>
lea    -0x2dc700(%rbp),%rdi
call   10d0 <cd_command@plt>
jmp    18fe <command_dispatcher+0x6ae>
lea    -0x12(%rbp),%rdi
lea    0xc0c(%rip),%rsi
call   1090 <strcmp@plt>
cmp    $0x0,%eax
jne    1482 <command_dispatcher+0x232>
mov    -0x8(%rbp),%rdi
lea    -0x12(%rbp),%rdx
lea    -0x3d0950(%rbp),%rcx
lea    0xbbc(%rip),%rsi
mov    $0x0,%al
call   10e0 <sscanf@plt>
mov    %eax,-0x3d0954(%rbp)
cmpl   $0x2,-0x3d0954(%rbp)
jge    1471 <command_dispatcher+0x221>
xor    %eax,%eax
mov    %eax,%edi
call   10b0 <ls_command@plt>
jmp    1912 <command_dispatcher+0x6c2>
lea    -0x3d0950(%rbp),%rdi
call   10b0 <ls_command@plt>
jmp    18f9 <command_dispatcher+0x6a9>
lea    -0x12(%rbp),%rdi
lea    0xba7(%rip),%rsi
call   1090 <strcmp@plt>
cmp    $0x0,%eax
jne    14ea <command_dispatcher+0x29a>
mov    -0x8(%rbp),%rdi
lea    -0x12(%rbp),%rdx
lea    -0x4c4ba0(%rbp),%rcx
lea    0xb54(%rip),%rsi
mov    $0x0,%al
call   10e0 <sscanf@plt>
mov    %eax,-0x4c4ba4(%rbp)
cmpl   $0x2,-0x4c4ba4(%rbp)
jge    14d9 <command_dispatcher+0x289>
xor    %eax,%eax
mov    %eax,%edi
call   1150 <lsdel_command@plt>
jmp    1912 <command_dispatcher+0x6c2>
lea    -0x4c4ba0(%rbp),%rdi
call   1150 <lsdel_command@plt>
jmp    18f4 <command_dispatcher+0x6a4>
lea    -0x12(%rbp),%rdi
lea    0xb45(%rip),%rsi
call   1090 <strcmp@plt>
cmp    $0x0,%eax
jne    1555 <command_dispatcher+0x305>
mov    -0x8(%rbp),%rdi
lea    -0x12(%rbp),%rdx
lea    0xb2e(%rip),%rsi
lea    -0x4c4ba5(%rbp),%rcx
mov    $0x0,%al
call   10e0 <sscanf@plt>
mov    %eax,-0x4c4bac(%rbp)
cmpl   $0x2,-0x4c4bac(%rbp)
jge    1544 <command_dispatcher+0x2f4>
lea    0xb0c(%rip),%rdi
call   1050 <printf@plt>
jmp    1912 <command_dispatcher+0x6c2>
movsbl -0x4c4ba5(%rbp),%edi
call   1100 <chain_command@plt>
jmp    18ef <command_dispatcher+0x69f>
lea    -0x12(%rbp),%rdi
lea    0xb01(%rip),%rsi
call   1090 <strcmp@plt>
cmp    $0x0,%eax
jne    157a <command_dispatcher+0x32a>
mov    $0x0,%al
call   1130 <fat_command@plt>
jmp    18ea <command_dispatcher+0x69a>
lea    -0x12(%rbp),%rdi
lea    0xad7(%rip),%rsi
call   1090 <strcmp@plt>
cmp    $0x0,%eax
jne    15e5 <command_dispatcher+0x395>
mov    -0x8(%rbp),%rdi
lea    -0x12(%rbp),%rdx
lea    -0x5b8df0(%rbp),%rcx
lea    0xa5c(%rip),%rsi
mov    $0x0,%al
call   10e0 <sscanf@plt>
mov    %eax,-0x5b8df4(%rbp)
cmpl   $0x2,-0x5b8df4(%rbp)
jge    15d4 <command_dispatcher+0x384>
lea    0xa9b(%rip),%rdi
call   1050 <printf@plt>
jmp    1912 <command_dispatcher+0x6c2>
lea    -0x5b8df0(%rbp),%rdi
call   1160 <dump_fat_command@plt>
jmp    18e5 <command_dispatcher+0x695>
lea    -0x12(%rbp),%rdi
lea    0xa8a(%rip),%rsi
call   1090 <strcmp@plt>
cmp    $0x0,%eax
jne    1650 <command_dispatcher+0x400>
mov    -0x8(%rbp),%rdi
lea    -0x12(%rbp),%rdx
lea    -0x6ad040(%rbp),%rcx
lea    0x9f1(%rip),%rsi
mov    $0x0,%al
call   10e0 <sscanf@plt>
mov    %eax,-0x6ad044(%rbp)
cmpl   $0x2,-0x6ad044(%rbp)
jge    163f <command_dispatcher+0x3ef>
lea    0xa4b(%rip),%rdi
call   1050 <printf@plt>
jmp    1912 <command_dispatcher+0x6c2>
lea    -0x6ad040(%rbp),%rdi
call   1170 <dump_command@plt>
jmp    18e0 <command_dispatcher+0x690>
lea    -0x12(%rbp),%rdi
lea    0xa1e(%rip),%rsi
call   1090 <strcmp@plt>
cmp    $0x0,%eax
jne    16bb <command_dispatcher+0x46b>
mov    -0x8(%rbp),%rdi
lea    -0x12(%rbp),%rdx
lea    -0x7a1290(%rbp),%rcx
lea    0x986(%rip),%rsi
mov    $0x0,%al
call   10e0 <sscanf@plt>
mov    %eax,-0x7a1294(%rbp)
cmpl   $0x2,-0x7a1294(%rbp)
jge    16aa <command_dispatcher+0x45a>
lea    0x9df(%rip),%rdi
call   1050 <printf@plt>
jmp    1912 <command_dispatcher+0x6c2>
lea    -0x7a1290(%rbp),%rdi
call   10c0 <hdump_command@plt>
jmp    18db <command_dispatcher+0x68b>
lea    -0x12(%rbp),%rdi
lea    0x9cb(%rip),%rsi
call   1090 <strcmp@plt>
cmp    $0x0,%eax
jne    1726 <command_dispatcher+0x4d6>
mov    -0x8(%rbp),%rdi
lea    -0x12(%rbp),%rdx
lea    -0x8954e0(%rbp),%rcx
lea    0x91b(%rip),%rsi
mov    $0x0,%al
call   10e0 <sscanf@plt>
mov    %eax,-0x8954e4(%rbp)
cmpl   $0x2,-0x8954e4(%rbp)
jge    1715 <command_dispatcher+0x4c5>
lea    0x98f(%rip),%rdi
call   1050 <printf@plt>
jmp    1912 <command_dispatcher+0x6c2>
lea    -0x8954e0(%rbp),%rdi
call   10a0 <delete_command@plt>
jmp    18d6 <command_dispatcher+0x686>
lea    -0x12(%rbp),%rdi
lea    0x95e(%rip),%rsi
call   1090 <strcmp@plt>
cmp    $0x0,%eax
jne    1791 <command_dispatcher+0x541>
mov    -0x8(%rbp),%rdi
lea    -0x12(%rbp),%rdx
lea    -0x989730(%rbp),%rcx
lea    0x8b0(%rip),%rsi
mov    $0x0,%al
call   10e0 <sscanf@plt>
mov    %eax,-0x989734(%rbp)
cmpl   $0x2,-0x989734(%rbp)
jge    1780 <command_dispatcher+0x530>
lea    0x922(%rip),%rdi
call   1050 <printf@plt>
jmp    1912 <command_dispatcher+0x6c2>
lea    -0x989730(%rbp),%rdi
call   1060 <undelete_command@plt>
jmp    18d1 <command_dispatcher+0x681>
lea    -0x12(%rbp),%rdi
lea    0x90f(%rip),%rsi
call   1090 <strcmp@plt>
cmp    $0x0,%eax
jne    17b6 <command_dispatcher+0x566>
mov    $0x0,%al
call   1080 <info_command@plt>
jmp    18cc <command_dispatcher+0x67c>
lea    -0x12(%rbp),%rdi
lea    0x8ef(%rip),%rsi
call   1090 <strcmp@plt>
cmp    $0x0,%eax
jne    1821 <command_dispatcher+0x5d1>
mov    -0x8(%rbp),%rdi
lea    -0x12(%rbp),%rdx
lea    0x8d7(%rip),%rsi
lea    -0x989735(%rbp),%rcx
mov    $0x0,%al
call   10e0 <sscanf@plt>
mov    %eax,-0x98973c(%rbp)
cmpl   $0x2,-0x98973c(%rbp)
jge    1810 <command_dispatcher+0x5c0>
lea    0x8b5(%rip),%rdi
call   1050 <printf@plt>
jmp    1912 <command_dispatcher+0x6c2>
movsbl -0x989735(%rbp),%edi
call   1040 <show_command@plt>
jmp    18c7 <command_dispatcher+0x677>
lea    -0x12(%rbp),%rdi
lea    0x899(%rip),%rsi
call   1090 <strcmp@plt>
cmp    $0x0,%eax
jne    1846 <command_dispatcher+0x5f6>
mov    $0x0,%al
call   1120 <test_fat_command@plt>
jmp    18c2 <command_dispatcher+0x672>
lea    -0x12(%rbp),%rdi
lea    0x87d(%rip),%rsi
call   1090 <strcmp@plt>
cmp    $0x0,%eax
jne    18b1 <command_dispatcher+0x661>
mov    -0x8(%rbp),%rdi
lea    -0x12(%rbp),%rdx
lea    0x7d2(%rip),%rsi
lea    -0x98973d(%rbp),%rcx
mov    $0x0,%al
call   10e0 <sscanf@plt>
mov    %eax,-0x989744(%rbp)
cmpl   $0x2,-0x989744(%rbp)
jge    18a0 <command_dispatcher+0x650>
lea    0x83d(%rip),%rdi
call   1050 <printf@plt>
jmp    1912 <command_dispatcher+0x6c2>
movsbl -0x98973d(%rbp),%edi
call   1030 <test_command@plt>
jmp    18bd <command_dispatcher+0x66d>
lea    0x830(%rip),%rdi
call   1050 <printf@plt>
jmp    18c2 <command_dispatcher+0x672>
jmp    18c7 <command_dispatcher+0x677>
jmp    18cc <command_dispatcher+0x67c>
jmp    18d1 <command_dispatcher+0x681>
jmp    18d6 <command_dispatcher+0x686>
jmp    18db <command_dispatcher+0x68b>
jmp    18e0 <command_dispatcher+0x690>
jmp    18e5 <command_dispatcher+0x695>
jmp    18ea <command_dispatcher+0x69a>
jmp    18ef <command_dispatcher+0x69f>
jmp    18f4 <command_dispatcher+0x6a4>
jmp    18f9 <command_dispatcher+0x6a9>
jmp    18fe <command_dispatcher+0x6ae>
jmp    1903 <command_dispatcher+0x6b3>
jmp    1908 <command_dispatcher+0x6b8>
jmp    190d <command_dispatcher+0x6bd>
jmp    1912 <command_dispatcher+0x6c2>
add    $0x989750,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<command_dispatcher>:
push   %rbx
sub    $0xf4250,%rsp
mov    %rdi,%rbx
lea    0xda6(%rip),%rsi
lea    0x6(%rsp),%rdx
xor    %eax,%eax
call   10e0 <sscanf@plt>
test   %eax,%eax
jle    176b <command_dispatcher+0x51b>
mov    $0x74697571,%eax
xor    0x6(%rsp),%eax
movzbl 0xa(%rsp),%ecx
or     %eax,%ecx
je     1430 <command_dispatcher+0x1e0>
mov    $0x6e756f6d,%eax
xor    0x6(%rsp),%eax
movzwl 0xa(%rsp),%ecx
xor    $0x74,%ecx
or     %eax,%ecx
je     143c <command_dispatcher+0x1ec>
mov    $0x756f6d77,%ecx
xor    0x6(%rsp),%ecx
mov    $0x746e75,%eax
mov    0x9(%rsp),%edx
xor    %eax,%edx
or     %ecx,%edx
je     1465 <command_dispatcher+0x215>
mov    $0x756f6d75,%ecx
xor    0x6(%rsp),%ecx
xor    0x9(%rsp),%eax
or     %ecx,%eax
je     14a5 <command_dispatcher+0x255>
movzwl 0x6(%rsp),%eax
xor    $0x6463,%eax
movzbl 0x8(%rsp),%ecx
or     %ax,%cx
je     14c0 <command_dispatcher+0x270>
movzwl 0x6(%rsp),%eax
xor    $0x736c,%eax
movzbl 0x8(%rsp),%ecx
or     %ax,%cx
je     14f3 <command_dispatcher+0x2a3>
mov    $0x6564736c,%eax
xor    0x6(%rsp),%eax
movzwl 0xa(%rsp),%ecx
xor    $0x6c,%ecx
or     %eax,%ecx
je     151f <command_dispatcher+0x2cf>
mov    $0x69616863,%eax
xor    0x6(%rsp),%eax
movzwl 0xa(%rsp),%ecx
xor    $0x6e,%ecx
or     %eax,%ecx
je     155a <command_dispatcher+0x30a>
cmpl   $0x746166,0x6(%rsp)
je     1595 <command_dispatcher+0x345>
movabs $0x7461665f706d7564,%rax
66 61 74
mov    0x6(%rsp),%rcx
xor    %rax,%rcx
movzbl 0xe(%rsp),%edx
or     %rcx,%rdx
je     15b0 <command_dispatcher+0x360>
mov    $0x706d7564,%ecx
xor    0x6(%rsp),%ecx
movzbl 0xa(%rsp),%edx
or     %ecx,%edx
je     15dc <command_dispatcher+0x38c>
mov    $0x6d756468,%ecx
xor    0x6(%rsp),%ecx
movzwl 0xa(%rsp),%edx
xor    $0x70,%edx
or     %ecx,%edx
je     161c <command_dispatcher+0x3cc>
mov    $0x656c6564,%ecx
xor    0x6(%rsp),%ecx
mov    $0x657465,%edx
xor    0x9(%rsp),%edx
or     %ecx,%edx
je     165c <command_dispatcher+0x40c>
movabs $0x6574656c65646e75,%rcx
65 74 65
xor    0x6(%rsp),%rcx
movzbl 0xe(%rsp),%edx
or     %rcx,%rdx
je     169c <command_dispatcher+0x44c>
mov    $0x6f666e69,%ecx
xor    0x6(%rsp),%ecx
movzbl 0xa(%rsp),%edx
or     %ecx,%edx
je     16dc <command_dispatcher+0x48c>
mov    $0x776f6873,%ecx
xor    0x6(%rsp),%ecx
movzbl 0xa(%rsp),%edx
or     %ecx,%edx
je     16f4 <command_dispatcher+0x4a4>
add    $0x405f010,%rax
xor    0x6(%rsp),%rax
movzbl 0xe(%rsp),%ecx
or     %rax,%rcx
je     1720 <command_dispatcher+0x4d0>
mov    $0x74736574,%eax
xor    0x6(%rsp),%eax
movzbl 0xa(%rsp),%ecx
or     %eax,%ecx
je     1735 <command_dispatcher+0x4e5>
lea    0xcb5(%rip),%rdi
jmp    148c <command_dispatcher+0x23c>
xor    %eax,%eax
call   1080 <quit_command@plt>
jmp    176b <command_dispatcher+0x51b>
lea    0xbc2(%rip),%rsi
lea    0x6(%rsp),%rdx
lea    0x10(%rsp),%rcx
mov    %rbx,%rdi
xor    %eax,%eax
call   10e0 <sscanf@plt>
cmp    $0x1,%eax
jg     1496 <command_dispatcher+0x246>
lea    0xc28(%rip),%rdi
jmp    148c <command_dispatcher+0x23c>
lea    0xb99(%rip),%rsi
lea    0x6(%rsp),%rdx
lea    0x10(%rsp),%rcx
mov    %rbx,%rdi
xor    %eax,%eax
call   10e0 <sscanf@plt>
cmp    $0x1,%eax
jg     14b1 <command_dispatcher+0x261>
lea    0xbfe(%rip),%rdi
call   1030 <puts@plt>
jmp    176b <command_dispatcher+0x51b>
lea    0x10(%rsp),%rdi
call   1140 <mount_command@plt>
jmp    176b <command_dispatcher+0x51b>
xor    %eax,%eax
call   1110 <umount_command@plt>
jmp    176b <command_dispatcher+0x51b>
lea    0x10(%rsp),%rdi
call   10f0 <wmount_command@plt>
jmp    176b <command_dispatcher+0x51b>
lea    0xb3e(%rip),%rsi
lea    0x6(%rsp),%rdx
lea    0x10(%rsp),%rcx
mov    %rbx,%rdi
xor    %eax,%eax
call   10e0 <sscanf@plt>
cmp    $0x2,%eax
jl     176b <command_dispatcher+0x51b>
lea    0x10(%rsp),%rdi
call   10d0 <cd_command@plt>
jmp    176b <command_dispatcher+0x51b>
lea    0xb0b(%rip),%rsi
lea    0x6(%rsp),%rdx
lea    0x10(%rsp),%rcx
mov    %rbx,%rdi
xor    %eax,%eax
call   10e0 <sscanf@plt>
cmp    $0x1,%eax
jg     154b <command_dispatcher+0x2fb>
xor    %edi,%edi
call   10b0 <ls_command@plt>
jmp    176b <command_dispatcher+0x51b>
lea    0xadf(%rip),%rsi
lea    0x6(%rsp),%rdx
lea    0x10(%rsp),%rcx
mov    %rbx,%rdi
xor    %eax,%eax
call   10e0 <sscanf@plt>
cmp    $0x1,%eax
jg     1586 <command_dispatcher+0x336>
xor    %edi,%edi
call   1150 <lsdel_command@plt>
jmp    176b <command_dispatcher+0x51b>
lea    0x10(%rsp),%rdi
call   10b0 <ls_command@plt>
jmp    176b <command_dispatcher+0x51b>
lea    0xaca(%rip),%rsi
lea    0x6(%rsp),%rdx
lea    0x10(%rsp),%rcx
mov    %rbx,%rdi
xor    %eax,%eax
call   10e0 <sscanf@plt>
cmp    $0x1,%eax
jg     15a1 <command_dispatcher+0x351>
lea    0xb1d(%rip),%rdi
jmp    148c <command_dispatcher+0x23c>
lea    0x10(%rsp),%rdi
call   1150 <lsdel_command@plt>
jmp    176b <command_dispatcher+0x51b>
xor    %eax,%eax
call   1130 <fat_command@plt>
jmp    176b <command_dispatcher+0x51b>
movsbl 0x10(%rsp),%edi
call   1100 <chain_command@plt>
jmp    176b <command_dispatcher+0x51b>
lea    0xa4e(%rip),%rsi
lea    0x6(%rsp),%rdx
lea    0x10(%rsp),%rcx
mov    %rbx,%rdi
xor    %eax,%eax
call   10e0 <sscanf@plt>
cmp    $0x1,%eax
jg     160d <command_dispatcher+0x3bd>
lea    0xadc(%rip),%rdi
jmp    148c <command_dispatcher+0x23c>
lea    0xa22(%rip),%rsi
lea    0x6(%rsp),%rdx
lea    0x10(%rsp),%rcx
mov    %rbx,%rdi
xor    %eax,%eax
call   10e0 <sscanf@plt>
cmp    $0x1,%eax
jg     164d <command_dispatcher+0x3fd>
lea    0xa3e(%rip),%rdi
call   1060 <printf@plt>
jmp    176b <command_dispatcher+0x51b>
lea    0x10(%rsp),%rdi
call   1160 <dump_fat_command@plt>
jmp    176b <command_dispatcher+0x51b>
lea    0x9e2(%rip),%rsi
lea    0x6(%rsp),%rdx
lea    0x10(%rsp),%rcx
mov    %rbx,%rdi
xor    %eax,%eax
call   10e0 <sscanf@plt>
cmp    $0x1,%eax
jg     168d <command_dispatcher+0x43d>
lea    0x9fd(%rip),%rdi
call   1060 <printf@plt>
jmp    176b <command_dispatcher+0x51b>
lea    0x10(%rsp),%rdi
call   1170 <dump_command@plt>
jmp    176b <command_dispatcher+0x51b>
lea    0x9a2(%rip),%rsi
lea    0x6(%rsp),%rdx
lea    0x10(%rsp),%rcx
mov    %rbx,%rdi
xor    %eax,%eax
call   10e0 <sscanf@plt>
cmp    $0x1,%eax
jg     16cd <command_dispatcher+0x47d>
lea    0x9d8(%rip),%rdi
call   1060 <printf@plt>
jmp    176b <command_dispatcher+0x51b>
lea    0x10(%rsp),%rdi
call   10c0 <hdump_command@plt>
jmp    176b <command_dispatcher+0x51b>
lea    0x962(%rip),%rsi
lea    0x6(%rsp),%rdx
lea    0x10(%rsp),%rcx
mov    %rbx,%rdi
xor    %eax,%eax
call   10e0 <sscanf@plt>
cmp    $0x1,%eax
jg     16e8 <command_dispatcher+0x498>
lea    0x996(%rip),%rdi
call   1060 <printf@plt>
jmp    176b <command_dispatcher+0x51b>
lea    0x10(%rsp),%rdi
call   10a0 <delete_command@plt>
jmp    176b <command_dispatcher+0x51b>
xor    %eax,%eax
call   1090 <info_command@plt>
jmp    176b <command_dispatcher+0x51b>
lea    0x10(%rsp),%rdi
call   1070 <undelete_command@plt>
jmp    176b <command_dispatcher+0x51b>
lea    0x97b(%rip),%rsi
lea    0x6(%rsp),%rdx
lea    0x10(%rsp),%rcx
mov    %rbx,%rdi
xor    %eax,%eax
call   10e0 <sscanf@plt>
cmp    $0x1,%eax
jg     1729 <command_dispatcher+0x4d9>
lea    0x9ab(%rip),%rdi
jmp    148c <command_dispatcher+0x23c>
xor    %eax,%eax
call   1120 <test_fat_command@plt>
jmp    176b <command_dispatcher+0x51b>
movsbl 0x10(%rsp),%edi
call   1050 <show_command@plt>
jmp    176b <command_dispatcher+0x51b>
lea    0x8ef(%rip),%rsi
lea    0x6(%rsp),%rdx
lea    0x10(%rsp),%rcx
mov    %rbx,%rdi
xor    %eax,%eax
call   10e0 <sscanf@plt>
cmp    $0x1,%eax
jg     1761 <command_dispatcher+0x511>
lea    0x973(%rip),%rdi
jmp    148c <command_dispatcher+0x23c>
movsbl 0x10(%rsp),%edi
call   1040 <test_command@plt>
add    $0xf4250,%rsp
pop    %rbx
ret

LLVM IR (-O0):
@.str = [3 x i8] c"%s\00"
@.str.1 = [5 x i8] c"quit\00"
@.str.2 = [6 x i8] c"mount\00"
@.str.3 = [6 x i8] c"%s %s\00"
@.str.4 = [20 x i8] c"mount mount-device\0A\00"
@.str.5 = [7 x i8] c"wmount\00"
@.str.6 = [21 x i8] c"wmount mount-device\0A\00"
@.str.7 = [7 x i8] c"umount\00"
@.str.8 = [3 x i8] c"cd\00"
@.str.9 = [3 x i8] c"ls\00"
@.str.10 = [6 x i8] c"lsdel\00"
@.str.11 = [6 x i8] c"chain\00"
@.str.12 = [6 x i8] c"%s %u\00"
@.str.13 = [22 x i8] c"chain cluster-number\0A\00"
@.str.14 = [4 x i8] c"fat\00"
@.str.15 = [9 x i8] c"dump_fat\00"
@.str.16 = [20 x i8] c"dump_fat file-path\0A\00"
@.str.17 = [5 x i8] c"dump\00"
@.str.18 = [15 x i8] c"dump file-name\00"
@.str.19 = [6 x i8] c"hdump\00"
@.str.20 = [16 x i8] c"hdump file-name\00"
@.str.21 = [7 x i8] c"delete\00"
@.str.22 = [17 x i8] c"delete file-name\00"
@.str.23 = [9 x i8] c"undelete\00"
@.str.24 = [19 x i8] c"undelete file-name\00"
@.str.25 = [5 x i8] c"info\00"
@.str.26 = [5 x i8] c"show\00"
@.str.27 = [6 x i8] c"%s %c\00"
@.str.28 = [10 x i8] c"show w|c\0A\00"
@.str.29 = [9 x i8] c"test_fat\00"
@.str.30 = [5 x i8] c"test\00"
@.str.31 = [21 x i8] c"test cluster-number\0A\00"
@.str.32 = [15 x i8] c"404 Not Found\0A\00"
define void @command_dispatcher(i8* %0) {
%2 = alloca i8*
%3 = alloca [10 x i8]
%4 = alloca i32
%5 = alloca [1000000 x i8]
%6 = alloca i32
%7 = alloca [1000000 x i8]
%8 = alloca i32
%9 = alloca [1000000 x i8]
%10 = alloca i32
%11 = alloca [1000000 x i8]
%12 = alloca i32
%13 = alloca [1000000 x i8]
%14 = alloca i32
%15 = alloca i8
%16 = alloca i32
%17 = alloca [1000000 x i8]
%18 = alloca i32
%19 = alloca [1000000 x i8]
%20 = alloca i32
%21 = alloca [1000000 x i8]
%22 = alloca i32
%23 = alloca [1000000 x i8]
%24 = alloca i32
%25 = alloca [1000000 x i8]
%26 = alloca i32
%27 = alloca i8
%28 = alloca i32
%29 = alloca i8
%30 = alloca i32
store i8* %0, i8** %2
%31 = load i8*, i8** %2
%32 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%33 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %31, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8* %32)
store i32 %33, i32* %4
%34 = load i32, i32* %4
%35 = icmp slt i32 %34, 1
br i1 %35, label %36, label %37
36: ; preds = %1
br label %290
37: ; preds = %1
%38 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%39 = call i32 @strcmp(i8* %38, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0))
%40 = icmp ne i32 %39, 0
br i1 %40, label %43, label %41
41: ; preds = %37
%42 = call i32 (...) @quit_command()
br label %290
43: ; preds = %37
%44 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%45 = call i32 @strcmp(i8* %44, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.2, i64 0, i64 0))
%46 = icmp ne i32 %45, 0
br i1 %46, label %59, label %47
47: ; preds = %43
store i32 0, i32* %6
%48 = load i8*, i8** %2
%49 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%50 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %5, i64 0, i64 0
%51 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %48, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8* %49, i8* %50)
store i32 %51, i32* %6
%52 = load i32, i32* %6
%53 = icmp slt i32 %52, 2
br i1 %53, label %54, label %56
54: ; preds = %47
%55 = call i32 @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.4, i64 0, i64 0))
br label %290
56: ; preds = %47
%57 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %5, i64 0, i64 0
%58 = call i32 @mount_command(i8* %57)
br label %289
59: ; preds = %43
%60 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%61 = call i32 @strcmp(i8* %60, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.5, i64 0, i64 0))
%62 = icmp ne i32 %61, 0
br i1 %62, label %75, label %63
63: ; preds = %59
store i32 0, i32* %8
%64 = load i8*, i8** %2
%65 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%66 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %7, i64 0, i64 0
%67 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %64, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8* %65, i8* %66)
store i32 %67, i32* %8
%68 = load i32, i32* %8
%69 = icmp slt i32 %68, 2
br i1 %69, label %70, label %72
70: ; preds = %63
%71 = call i32 @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.6, i64 0, i64 0))
br label %290
72: ; preds = %63
%73 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %7, i64 0, i64 0
%74 = call i32 @wmount_command(i8* %73)
br label %288
75: ; preds = %59
%76 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%77 = call i32 @strcmp(i8* %76, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.7, i64 0, i64 0))
%78 = icmp ne i32 %77, 0
br i1 %78, label %81, label %79
79: ; preds = %75
%80 = call i32 (...) @umount_command()
br label %287
81: ; preds = %75
%82 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%83 = call i32 @strcmp(i8* %82, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.8, i64 0, i64 0))
%84 = icmp ne i32 %83, 0
br i1 %84, label %96, label %85
85: ; preds = %81
%86 = load i8*, i8** %2
%87 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%88 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %9, i64 0, i64 0
%89 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %86, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8* %87, i8* %88)
store i32 %89, i32* %10
%90 = load i32, i32* %10
%91 = icmp slt i32 %90, 2
br i1 %91, label %92, label %93
92: ; preds = %85
br label %290
93: ; preds = %85
%94 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %9, i64 0, i64 0
%95 = call i32 @cd_command(i8* %94)
br label %286
96: ; preds = %81
%97 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%98 = call i32 @strcmp(i8* %97, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0))
%99 = icmp ne i32 %98, 0
br i1 %99, label %112, label %100
100: ; preds = %96
%101 = load i8*, i8** %2
%102 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%103 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %11, i64 0, i64 0
%104 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %101, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8* %102, i8* %103)
store i32 %104, i32* %12
%105 = load i32, i32* %12
%106 = icmp slt i32 %105, 2
br i1 %106, label %107, label %109
107: ; preds = %100
%108 = call i32 @ls_command(i8* null)
br label %290
109: ; preds = %100
%110 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %11, i64 0, i64 0
%111 = call i32 @ls_command(i8* %110)
br label %285
112: ; preds = %96
%113 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%114 = call i32 @strcmp(i8* %113, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0))
%115 = icmp ne i32 %114, 0
br i1 %115, label %128, label %116
116: ; preds = %112
%117 = load i8*, i8** %2
%118 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%119 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %13, i64 0, i64 0
%120 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %117, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8* %118, i8* %119)
store i32 %120, i32* %14
%121 = load i32, i32* %14
%122 = icmp slt i32 %121, 2
br i1 %122, label %123, label %125
123: ; preds = %116
%124 = call i32 @lsdel_command(i8* null)
br label %290
125: ; preds = %116
%126 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %13, i64 0, i64 0
%127 = call i32 @lsdel_command(i8* %126)
br label %284
128: ; preds = %112
%129 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%130 = call i32 @strcmp(i8* %129, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.11, i64 0, i64 0))
%131 = icmp ne i32 %130, 0
br i1 %131, label %143, label %132
132: ; preds = %128
%133 = load i8*, i8** %2
%134 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%135 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %133, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.12, i64 0, i64 0), i8* %134, i8* %15)
store i32 %135, i32* %16
%136 = load i32, i32* %16
%137 = icmp slt i32 %136, 2
br i1 %137, label %138, label %140
138: ; preds = %132
%139 = call i32 @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.13, i64 0, i64 0))
br label %290
140: ; preds = %132
%141 = load i8, i8* %15
%142 = call i32 @chain_command(i8 signext %141)
br label %283
143: ; preds = %128
%144 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%145 = call i32 @strcmp(i8* %144, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.14, i64 0, i64 0))
%146 = icmp ne i32 %145, 0
br i1 %146, label %149, label %147
147: ; preds = %143
%148 = call i32 (...) @fat_command()
br label %282
149: ; preds = %143
%150 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%151 = call i32 @strcmp(i8* %150, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.15, i64 0, i64 0))
%152 = icmp ne i32 %151, 0
br i1 %152, label %165, label %153
153: ; preds = %149
%154 = load i8*, i8** %2
%155 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%156 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %17, i64 0, i64 0
%157 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %154, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8* %155, i8* %156)
store i32 %157, i32* %18
%158 = load i32, i32* %18
%159 = icmp slt i32 %158, 2
br i1 %159, label %160, label %162
160: ; preds = %153
%161 = call i32 @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.16, i64 0, i64 0))
br label %290
162: ; preds = %153
%163 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %17, i64 0, i64 0
%164 = call i32 @dump_fat_command(i8* %163)
br label %281
165: ; preds = %149
%166 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%167 = call i32 @strcmp(i8* %166, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.17, i64 0, i64 0))
%168 = icmp ne i32 %167, 0
br i1 %168, label %181, label %169
169: ; preds = %165
%170 = load i8*, i8** %2
%171 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%172 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %19, i64 0, i64 0
%173 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %170, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8* %171, i8* %172)
store i32 %173, i32* %20
%174 = load i32, i32* %20
%175 = icmp slt i32 %174, 2
br i1 %175, label %176, label %178
176: ; preds = %169
%177 = call i32 @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.18, i64 0, i64 0))
br label %290
178: ; preds = %169
%179 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %19, i64 0, i64 0
%180 = call i32 @dump_command(i8* %179)
br label %280
181: ; preds = %165
%182 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%183 = call i32 @strcmp(i8* %182, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.19, i64 0, i64 0))
%184 = icmp ne i32 %183, 0
br i1 %184, label %197, label %185
185: ; preds = %181
%186 = load i8*, i8** %2
%187 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%188 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %21, i64 0, i64 0
%189 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %186, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8* %187, i8* %188)
store i32 %189, i32* %22
%190 = load i32, i32* %22
%191 = icmp slt i32 %190, 2
br i1 %191, label %192, label %194
192: ; preds = %185
%193 = call i32 @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.20, i64 0, i64 0))
br label %290
194: ; preds = %185
%195 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %21, i64 0, i64 0
%196 = call i32 @hdump_command(i8* %195)
br label %279
197: ; preds = %181
%198 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%199 = call i32 @strcmp(i8* %198, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.21, i64 0, i64 0))
%200 = icmp ne i32 %199, 0
br i1 %200, label %213, label %201
201: ; preds = %197
%202 = load i8*, i8** %2
%203 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%204 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %23, i64 0, i64 0
%205 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %202, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8* %203, i8* %204)
store i32 %205, i32* %24
%206 = load i32, i32* %24
%207 = icmp slt i32 %206, 2
br i1 %207, label %208, label %210
208: ; preds = %201
%209 = call i32 @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.22, i64 0, i64 0))
br label %290
210: ; preds = %201
%211 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %23, i64 0, i64 0
%212 = call i32 @delete_command(i8* %211)
br label %278
213: ; preds = %197
%214 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%215 = call i32 @strcmp(i8* %214, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.23, i64 0, i64 0))
%216 = icmp ne i32 %215, 0
br i1 %216, label %229, label %217
217: ; preds = %213
%218 = load i8*, i8** %2
%219 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%220 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %25, i64 0, i64 0
%221 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %218, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8* %219, i8* %220)
store i32 %221, i32* %26
%222 = load i32, i32* %26
%223 = icmp slt i32 %222, 2
br i1 %223, label %224, label %226
224: ; preds = %217
%225 = call i32 @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.24, i64 0, i64 0))
br label %290
226: ; preds = %217
%227 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %25, i64 0, i64 0
%228 = call i32 @undelete_command(i8* %227)
br label %277
229: ; preds = %213
%230 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%231 = call i32 @strcmp(i8* %230, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.25, i64 0, i64 0))
%232 = icmp ne i32 %231, 0
br i1 %232, label %235, label %233
233: ; preds = %229
%234 = call i32 (...) @info_command()
br label %276
235: ; preds = %229
%236 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%237 = call i32 @strcmp(i8* %236, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.26, i64 0, i64 0))
%238 = icmp ne i32 %237, 0
br i1 %238, label %250, label %239
239: ; preds = %235
%240 = load i8*, i8** %2
%241 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%242 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %240, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.27, i64 0, i64 0), i8* %241, i8* %27)
store i32 %242, i32* %28
%243 = load i32, i32* %28
%244 = icmp slt i32 %243, 2
br i1 %244, label %245, label %247
245: ; preds = %239
%246 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.28, i64 0, i64 0))
br label %290
247: ; preds = %239
%248 = load i8, i8* %27
%249 = call i32 @show_command(i8 signext %248)
br label %275
250: ; preds = %235
%251 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%252 = call i32 @strcmp(i8* %251, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.29, i64 0, i64 0))
%253 = icmp ne i32 %252, 0
br i1 %253, label %256, label %254
254: ; preds = %250
%255 = call i32 (...) @test_fat_command()
br label %274
256: ; preds = %250
%257 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%258 = call i32 @strcmp(i8* %257, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.30, i64 0, i64 0))
%259 = icmp ne i32 %258, 0
br i1 %259, label %271, label %260
260: ; preds = %256
%261 = load i8*, i8** %2
%262 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%263 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %261, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.12, i64 0, i64 0), i8* %262, i8* %29)
store i32 %263, i32* %30
%264 = load i32, i32* %30
%265 = icmp slt i32 %264, 2
br i1 %265, label %266, label %268
266: ; preds = %260
%267 = call i32 @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.31, i64 0, i64 0))
br label %290
268: ; preds = %260
%269 = load i8, i8* %29
%270 = call i32 @test_command(i8 signext %269)
br label %273
271: ; preds = %256
%272 = call i32 @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.32, i64 0, i64 0))
br label %273
273: ; preds = %271, %268
br label %274
274: ; preds = %273, %254
br label %275
275: ; preds = %274, %247
br label %276
276: ; preds = %275, %233
br label %277
277: ; preds = %276, %226
br label %278
278: ; preds = %277, %210
br label %279
279: ; preds = %278, %194
br label %280
280: ; preds = %279, %178
br label %281
281: ; preds = %280, %162
br label %282
282: ; preds = %281, %147
br label %283
283: ; preds = %282, %140
br label %284
284: ; preds = %283, %125
br label %285
285: ; preds = %284, %109
br label %286
286: ; preds = %285, %93
br label %287
287: ; preds = %286, %79
br label %288
288: ; preds = %287, %72
br label %289
289: ; preds = %288, %56
br label %290
290: ; preds = %36, %54, %70, %92, %107, %123, %138, %160, %176, %192, %208, %224, %245, %266, %289, %41
ret void
}

LLVM IR (-O2):
@.str = [3 x i8] c"%s\00"
@.str.1 = [5 x i8] c"quit\00"
@.str.2 = [6 x i8] c"mount\00"
@.str.3 = [6 x i8] c"%s %s\00"
@.str.5 = [7 x i8] c"wmount\00"
@.str.7 = [7 x i8] c"umount\00"
@.str.8 = [3 x i8] c"cd\00"
@.str.9 = [3 x i8] c"ls\00"
@.str.10 = [6 x i8] c"lsdel\00"
@.str.11 = [6 x i8] c"chain\00"
@.str.12 = [6 x i8] c"%s %u\00"
@.str.14 = [4 x i8] c"fat\00"
@.str.15 = [9 x i8] c"dump_fat\00"
@.str.17 = [5 x i8] c"dump\00"
@.str.18 = [15 x i8] c"dump file-name\00"
@.str.19 = [6 x i8] c"hdump\00"
@.str.20 = [16 x i8] c"hdump file-name\00"
@.str.21 = [7 x i8] c"delete\00"
@.str.22 = [17 x i8] c"delete file-name\00"
@.str.23 = [9 x i8] c"undelete\00"
@.str.24 = [19 x i8] c"undelete file-name\00"
@.str.25 = [5 x i8] c"info\00"
@.str.26 = [5 x i8] c"show\00"
@.str.27 = [6 x i8] c"%s %c\00"
@.str.29 = [9 x i8] c"test_fat\00"
@.str.30 = [5 x i8] c"test\00"
@str = [19 x i8] c"mount mount-device\00"
@str.33 = [20 x i8] c"wmount mount-device\00"
@str.34 = [21 x i8] c"chain cluster-number\00"
@str.35 = [19 x i8] c"dump_fat file-path\00"
@str.36 = [9 x i8] c"show w|c\00"
@str.37 = [20 x i8] c"test cluster-number\00"
@str.38 = [14 x i8] c"404 Not Found\00"
define void @command_dispatcher(i8* nocapture %0) {
%2 = alloca [10 x i8]
%3 = alloca [1000000 x i8]
%4 = alloca [1000000 x i8]
%5 = alloca [1000000 x i8]
%6 = alloca [1000000 x i8]
%7 = alloca [1000000 x i8]
%8 = alloca i8
%9 = alloca [1000000 x i8]
%10 = alloca [1000000 x i8]
%11 = alloca [1000000 x i8]
%12 = alloca [1000000 x i8]
%13 = alloca [1000000 x i8]
%14 = alloca i8
%15 = alloca i8
%16 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 0
%17 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8* %16)
%18 = icmp slt i32 %17, 1
br i1 %18, label %200, label %19
19: ; preds = %1
%20 = call i32 @bcmp(i8* dereferenceable(5) %16, i8* dereferenceable(5) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i64 5)
%21 = icmp eq i32 %20, 0
br i1 %21, label %22, label %24
22: ; preds = %19
%23 = call i32 (...) @quit_command()
br label %200
24: ; preds = %19
%25 = call i32 @bcmp(i8* dereferenceable(6) %16, i8* dereferenceable(6) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.2, i64 0, i64 0), i64 6)
%26 = icmp eq i32 %25, 0
br i1 %26, label %27, label %36
27: ; preds = %24
%28 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %3, i64 0, i64 0
%29 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8* %16, i8* %28)
%30 = icmp slt i32 %29, 2
br i1 %30, label %31, label %33
31: ; preds = %27
%32 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @str, i64 0, i64 0))
br label %35
33: ; preds = %27
%34 = call i32 @mount_command(i8* %28)
br label %35
35: ; preds = %33, %31
br label %200
36: ; preds = %24
%37 = call i32 @bcmp(i8* dereferenceable(7) %16, i8* dereferenceable(7) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.5, i64 0, i64 0), i64 7)
%38 = icmp eq i32 %37, 0
br i1 %38, label %39, label %48
39: ; preds = %36
%40 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %4, i64 0, i64 0
%41 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8* %16, i8* %40)
%42 = icmp slt i32 %41, 2
br i1 %42, label %43, label %45
43: ; preds = %39
%44 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str.33, i64 0, i64 0))
br label %47
45: ; preds = %39
%46 = call i32 @wmount_command(i8* %40)
br label %47
47: ; preds = %45, %43
br label %200
48: ; preds = %36
%49 = call i32 @bcmp(i8* dereferenceable(7) %16, i8* dereferenceable(7) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.7, i64 0, i64 0), i64 7)
%50 = icmp eq i32 %49, 0
br i1 %50, label %51, label %53
51: ; preds = %48
%52 = call i32 (...) @umount_command()
br label %200
53: ; preds = %48
%54 = call i32 @bcmp(i8* dereferenceable(3) %16, i8* dereferenceable(3) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.8, i64 0, i64 0), i64 3)
%55 = icmp eq i32 %54, 0
br i1 %55, label %56, label %62
56: ; preds = %53
%57 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %5, i64 0, i64 0
%58 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8* %16, i8* %57)
%59 = icmp slt i32 %58, 2
br i1 %59, label %199, label %60
60: ; preds = %56
%61 = call i32 @cd_command(i8* %57)
br label %200
62: ; preds = %53
%63 = call i32 @bcmp(i8* dereferenceable(3) %16, i8* dereferenceable(3) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0), i64 3)
%64 = icmp eq i32 %63, 0
br i1 %64, label %65, label %74
65: ; preds = %62
%66 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %6, i64 0, i64 0
%67 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8* %16, i8* %66)
%68 = icmp slt i32 %67, 2
br i1 %68, label %69, label %71
69: ; preds = %65
%70 = call i32 @ls_command(i8* null)
br label %73
71: ; preds = %65
%72 = call i32 @ls_command(i8* %66)
br label %73
73: ; preds = %71, %69
br label %200
74: ; preds = %62
%75 = call i32 @bcmp(i8* dereferenceable(6) %16, i8* dereferenceable(6) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0), i64 6)
%76 = icmp eq i32 %75, 0
br i1 %76, label %77, label %86
77: ; preds = %74
%78 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %7, i64 0, i64 0
%79 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8* %16, i8* %78)
%80 = icmp slt i32 %79, 2
br i1 %80, label %81, label %83
81: ; preds = %77
%82 = call i32 @lsdel_command(i8* null)
br label %85
83: ; preds = %77
%84 = call i32 @lsdel_command(i8* %78)
br label %85
85: ; preds = %83, %81
br label %200
86: ; preds = %74
%87 = call i32 @bcmp(i8* dereferenceable(6) %16, i8* dereferenceable(6) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.11, i64 0, i64 0), i64 6)
%88 = icmp eq i32 %87, 0
br i1 %88, label %89, label %98
89: ; preds = %86
%90 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.12, i64 0, i64 0), i8* %16, i8* %8)
%91 = icmp slt i32 %90, 2
br i1 %91, label %92, label %94
92: ; preds = %89
%93 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([21 x i8], [21 x i8]* @str.34, i64 0, i64 0))
br label %97
94: ; preds = %89
%95 = load i8, i8* %8
%96 = call i32 @chain_command(i8 signext %95)
br label %97
97: ; preds = %94, %92
br label %200
98: ; preds = %86
%99 = call i32 @bcmp(i8* dereferenceable(4) %16, i8* dereferenceable(4) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.14, i64 0, i64 0), i64 4)
%100 = icmp eq i32 %99, 0
br i1 %100, label %101, label %103
101: ; preds = %98
%102 = call i32 (...) @fat_command()
br label %200
103: ; preds = %98
%104 = call i32 @bcmp(i8* dereferenceable(9) %16, i8* dereferenceable(9) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.15, i64 0, i64 0), i64 9)
%105 = icmp eq i32 %104, 0
br i1 %105, label %106, label %115
106: ; preds = %103
%107 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %9, i64 0, i64 0
%108 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8* %16, i8* %107)
%109 = icmp slt i32 %108, 2
br i1 %109, label %110, label %112
110: ; preds = %106
%111 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @str.35, i64 0, i64 0))
br label %114
112: ; preds = %106
%113 = call i32 @dump_fat_command(i8* %107)
br label %114
114: ; preds = %112, %110
br label %200
115: ; preds = %103
%116 = call i32 @bcmp(i8* dereferenceable(5) %16, i8* dereferenceable(5) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.17, i64 0, i64 0), i64 5)
%117 = icmp eq i32 %116, 0
br i1 %117, label %118, label %127
118: ; preds = %115
%119 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %10, i64 0, i64 0
%120 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8* %16, i8* %119)
%121 = icmp slt i32 %120, 2
br i1 %121, label %122, label %124
122: ; preds = %118
%123 = call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.18, i64 0, i64 0))
br label %126
124: ; preds = %118
%125 = call i32 @dump_command(i8* %119)
br label %126
126: ; preds = %124, %122
br label %200
127: ; preds = %115
%128 = call i32 @bcmp(i8* dereferenceable(6) %16, i8* dereferenceable(6) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.19, i64 0, i64 0), i64 6)
%129 = icmp eq i32 %128, 0
br i1 %129, label %130, label %139
130: ; preds = %127
%131 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %11, i64 0, i64 0
%132 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8* %16, i8* %131)
%133 = icmp slt i32 %132, 2
br i1 %133, label %134, label %136
134: ; preds = %130
%135 = call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.20, i64 0, i64 0))
br label %138
136: ; preds = %130
%137 = call i32 @hdump_command(i8* %131)
br label %138
138: ; preds = %136, %134
br label %200
139: ; preds = %127
%140 = call i32 @bcmp(i8* dereferenceable(7) %16, i8* dereferenceable(7) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.21, i64 0, i64 0), i64 7)
%141 = icmp eq i32 %140, 0
br i1 %141, label %142, label %151
142: ; preds = %139
%143 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %12, i64 0, i64 0
%144 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8* %16, i8* %143)
%145 = icmp slt i32 %144, 2
br i1 %145, label %146, label %148
146: ; preds = %142
%147 = call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.22, i64 0, i64 0))
br label %150
148: ; preds = %142
%149 = call i32 @delete_command(i8* %143)
br label %150
150: ; preds = %148, %146
br label %200
151: ; preds = %139
%152 = call i32 @bcmp(i8* dereferenceable(9) %16, i8* dereferenceable(9) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.23, i64 0, i64 0), i64 9)
%153 = icmp eq i32 %152, 0
br i1 %153, label %154, label %163
154: ; preds = %151
%155 = getelementptr inbounds [1000000 x i8], [1000000 x i8]* %13, i64 0, i64 0
%156 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8* %16, i8* %155)
%157 = icmp slt i32 %156, 2
br i1 %157, label %158, label %160
158: ; preds = %154
%159 = call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @.str.24, i64 0, i64 0))
br label %162
160: ; preds = %154
%161 = call i32 @undelete_command(i8* %155)
br label %162
162: ; preds = %160, %158
br label %200
163: ; preds = %151
%164 = call i32 @bcmp(i8* dereferenceable(5) %16, i8* dereferenceable(5) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.25, i64 0, i64 0), i64 5)
%165 = icmp eq i32 %164, 0
br i1 %165, label %166, label %168
166: ; preds = %163
%167 = call i32 (...) @info_command()
br label %200
168: ; preds = %163
%169 = call i32 @bcmp(i8* dereferenceable(5) %16, i8* dereferenceable(5) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.26, i64 0, i64 0), i64 5)
%170 = icmp eq i32 %169, 0
br i1 %170, label %171, label %180
171: ; preds = %168
%172 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.27, i64 0, i64 0), i8* %16, i8* %14)
%173 = icmp slt i32 %172, 2
br i1 %173, label %174, label %176
174: ; preds = %171
%175 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @str.36, i64 0, i64 0))
br label %179
176: ; preds = %171
%177 = load i8, i8* %14
%178 = call i32 @show_command(i8 signext %177)
br label %179
179: ; preds = %176, %174
br label %200
180: ; preds = %168
%181 = call i32 @bcmp(i8* dereferenceable(9) %16, i8* dereferenceable(9) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.29, i64 0, i64 0), i64 9)
%182 = icmp eq i32 %181, 0
br i1 %182, label %183, label %185
183: ; preds = %180
%184 = call i32 (...) @test_fat_command()
br label %200
185: ; preds = %180
%186 = call i32 @bcmp(i8* dereferenceable(5) %16, i8* dereferenceable(5) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.30, i64 0, i64 0), i64 5)
%187 = icmp eq i32 %186, 0
br i1 %187, label %188, label %197
188: ; preds = %185
%189 = call i32 (i8*, i8*, i8*, ...) @sscanf(i8* %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.12, i64 0, i64 0), i8* %16, i8* %15)
%190 = icmp slt i32 %189, 2
br i1 %190, label %191, label %193
191: ; preds = %188
%192 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str.37, i64 0, i64 0))
br label %196
193: ; preds = %188
%194 = load i8, i8* %15
%195 = call i32 @test_command(i8 signext %194)
br label %196
196: ; preds = %193, %191
br label %200
197: ; preds = %185
%198 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @str.38, i64 0, i64 0))
br label %200
199: ; preds = %56
br label %200
200: ; preds = %196, %179, %162, %150, %138, %126, %114, %97, %85, %73, %60, %47, %35, %22, %101, %166, %183, %197, %51, %199, %1
ret void
}