// File: /workspace/github_c_makefile_star2_O0/hikalium[P]compilium/preprocessor.c
// Function: PreprocessBlock
static void PreprocessBlock(struct Node *replacement_list, int level) {
  struct Node *t;
  while (PeekToken()) {
    if ((t = ConsumeTokenStr("__LINE__"))) {
      char s[32];
      snprintf(s, sizeof(s), "%d", t->line);
      t->token_type = kTokenIntegerConstant;
      t->begin = t->src_str = strdup(s);
      t->length = strlen(t->begin);
      continue;
    }
    if ((t = ReadToken(kTokenLineComment))) {
      while (t && !IsEqualTokenWithCStr(t, "\n")) t = t->next_token;
      RemoveTokensTo(t);
      continue;
    }
    if ((t = ReadToken(kTokenBlockCommentBegin))) {
      while (t && !IsTokenWithType(t, kTokenBlockCommentEnd)) t = t->next_token;
      if (IsTokenWithType(t, kTokenBlockCommentEnd)) t = t->next_token;
      RemoveTokensTo(t);
      continue;
    }
    if (IsEqualTokenWithCStr((t = PeekToken()), "#")) {
      assert(t);
      t = SkipDelimiterTokensInLogicalLine(t->next_token);
      if (IsEqualTokenWithCStr(t, "define")) {
        assert(t);
        t = SkipDelimiterTokensInLogicalLine(t->next_token);
        struct Node *from = t;
        t = t->next_token;
        struct Node *ident_list = TryReadIdentListWrappedByParens(&t);
        t = SkipDelimiterTokensInLogicalLine(t);
        assert(t);
        struct Node *to_token_head = NULL;
        struct Node **to_token_last_holder = &to_token_head;
        while (t && !IsEqualTokenWithCStr(t, "\n")) {
          *to_token_last_holder = DuplicateToken(t);
          to_token_last_holder = &(*to_token_last_holder)->next_token;
          t = t->next_token;
        }
        assert(IsEqualTokenWithCStr(t, "\n"));
        RemoveTokensTo(t->next_token);
        PushKeyValueToList(replacement_list, CreateTokenStr(from),
                           CreateMacroReplacement(ident_list, to_token_head));
        continue;
      }
      if (IsEqualTokenWithCStr(t, "include")) {
        struct Node *token_include = t;
        const char *fname = NULL;
        const char *path = NULL;
        t = SkipDelimiterTokensInLogicalLine(t->next_token);
        if (IsTokenWithType(t, kTokenStringLiteral)) {
          char *tmp_fname = CreateTokenStr(t);
          tmp_fname++;  // Remove open "
          tmp_fname[strlen(tmp_fname) - 1] = 0;  // Remove close "
          fname = tmp_fname;
          RemoveTokensTo(t->next_token);
          path = CreateJoinedString(
              "./", fname);  // TODO: Make this relative to source, not cwd.
        } else if (IsEqualTokenWithCStr(t, "<")) {
          struct Node *markL = t;
          t = t->next_token;
          struct Node *begin = t;
          while (t && !IsEqualTokenWithCStr(t, ">")) {
            t = t->next_token;
          }
          if (!t) {
            ErrorWithToken(markL,
                           "Unexpected EOF. > is expected to match with this.");
          }
          struct Node *end = t;
          fname = CreateStrFromTokenRange(begin, end);
          RemoveTokensTo(end->next_token);
          if (!include_path) {
            ErrorWithToken(token_include,
                           "Include path is not provided in compiler args");
          }
          path = CreateJoinedString(include_path, fname);
        } else {
          ErrorWithToken(t, "Expected < or \" here");
        }
        assert(path);
        fprintf(stderr, "Include from: %s\n", path);
        FILE *fp = fopen(path, "rb");
        if (!fp) {
          ErrorWithToken(token_include, "File not found: %s", path);
        }
        const char *include_input = ReadFile(fp);
        InsertTokens(Tokenize(include_input));
        fclose(fp);
        continue;
      }
      if (IsEqualTokenWithCStr(t, "ifdef")) {
        struct Node *ifdef_token = t;
        t = SkipDelimiterTokensInLogicalLine(t->next_token);
        struct Node *e;
        bool cond = (e = GetNodeByTokenKey(replacement_list, t));
        // defined
        t = SkipDelimiterTokensInLogicalLine(t->next_token);
        RemoveTokensTo(t);
        if (cond) {
          PreprocessBlock(replacement_list, level + 1);
          if (IsEqualTokenWithCStr(PeekToken(), "else")) {
            RemoveCurrentToken();
            PreprocessRemoveBlock();
          }
        } else {
          PreprocessRemoveBlock();
          if (IsEqualTokenWithCStr(PeekToken(), "else")) {
            RemoveCurrentToken();
            PreprocessBlock(replacement_list, level + 1);
          }
        }
        t = PeekToken();
        if (!IsEqualTokenWithCStr(t, "endif")) {
          ErrorWithToken(ifdef_token,
                         "Unexpected eof. Expected #endif to match with this.");
        }
        t = SkipDelimiterTokensInLogicalLine(t->next_token);
        RemoveTokensTo(t);
        continue;
      }
      if (IsEqualTokenWithCStr(t, "endif")) {
        if (level == 0) {
          ErrorWithToken(t, "Unexpected endif here");
        }
        RemoveTokensTo(t);
        return;
      }
      if (IsEqualTokenWithCStr(t, "else")) {
        if (level == 0) {
          ErrorWithToken(t, "Unexpected else here");
        }
        RemoveTokensTo(t);
        return;
      }
      ErrorWithToken(NextToken(), "Not a valid macro");
    }
    struct Node *e;
    if ((e = GetNodeByTokenKey(replacement_list, (t = PeekToken())))) {
      assert(e->type == kNodeMacroReplacement);
      struct Node *rep = DuplicateTokenSequence(e->value);
      RemoveCurrentToken();
      if (!e->arg_expr_list) {
        // ident replace macro case
        InsertTokens(rep);
        continue;
      }
      // function-like macro case
      t = SkipDelimiterTokensInLogicalLine(t->next_token);
      if (!IsEqualTokenWithCStr(t, "(")) ErrorWithToken(t, "Expected ( here");
      t = t->next_token;
      struct Node *it;
      struct Node *arg_rep_list = AllocList();
      for (it = e->arg_expr_list; it; it = it->next_token) {
        if (IsEqualTokenWithCStr(it, ")")) break;
        struct Node *arg_token_head = NULL;
        struct Node **arg_token_last_holder = &arg_token_head;
        t = SkipDelimiterTokensInLogicalLine(t);
        for (; t; t = t->next_token) {
          if (IsEqualTokenWithCStr(t, ")") || IsEqualTokenWithCStr(t, ","))
            break;
          *arg_token_last_holder = DuplicateToken(t);
          arg_token_last_holder = &(*arg_token_last_holder)->next_token;
        }
        PushKeyValueToList(arg_rep_list, CreateTokenStr(it),
                           CreateMacroReplacement(NULL, arg_token_head));
        if (IsEqualTokenWithCStr(t, ")")) break;
        t = t->next_token;
      }
      if (!IsEqualTokenWithCStr(t, ")")) ErrorWithToken(t, "Expected ) here");
      RemoveTokensTo(t->next_token);
      // Insert & replace args
      InsertTokensWithIdentReplace(rep, arg_rep_list);
      continue;
    }
    NextToken();
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x130, %rsp            # imm = 0x130
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
callq 0xc130
cmpq $0x0, %rax
je 0xabb8
leaq 0x7127(%rip), %rdi      # 0x1126f
callq 0xc250
movq %rax, -0x18(%rbp)
cmpq $0x0, %rax
je 0xa1c9
leaq -0x40(%rbp), %rdi
movq -0x18(%rbp), %rax
movl 0x130(%rax), %ecx
movl $0x20, %esi
leaq 0x63d2(%rip), %rdx      # 0x10543
movb $0x0, %al
callq 0x2090
movq -0x18(%rbp), %rax
movl $0x3, 0x108(%rax)
leaq -0x40(%rbp), %rdi
callq 0x21a0
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x128(%rax)
movq -0x18(%rbp), %rax
movq %rcx, 0x118(%rax)
movq -0x18(%rbp), %rax
movq 0x118(%rax), %rdi
callq 0x2070
movl %eax, %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x120(%rax)
jmp 0xa132
movl $0x1a, %edi
callq 0xc170
movq %rax, -0x18(%rbp)
cmpq $0x0, %rax
je 0xa237
jmp 0xa1df
xorl %eax, %eax
cmpq $0x0, -0x18(%rbp)
movb %al, -0xf1(%rbp)
je 0xa20c
movq -0x18(%rbp), %rdi
leaq 0x608a(%rip), %rsi      # 0x10283
callq 0xbdf0
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
movb %al, -0xf1(%rbp)
movb -0xf1(%rbp), %al
testb $0x1, %al
jne 0xa218
jmp 0xa229
movq -0x18(%rbp), %rax
movq 0x110(%rax), %rax
movq %rax, -0x18(%rbp)
jmp 0xa1df
movq -0x18(%rbp), %rdi
callq 0xc460
jmp 0xa132
movl $0x1b, %edi
callq 0xc170
movq %rax, -0x18(%rbp)
cmpq $0x0, %rax
je 0xa2c0
jmp 0xa24d
xorl %eax, %eax
cmpq $0x0, -0x18(%rbp)
movb %al, -0xf2(%rbp)
je 0xa272
movq -0x18(%rbp), %rdi
movl $0x1c, %esi
callq 0xbbe0
xorb $-0x1, %al
movb %al, -0xf2(%rbp)
movb -0xf2(%rbp), %al
testb $0x1, %al
jne 0xa27e
jmp 0xa28f
movq -0x18(%rbp), %rax
movq 0x110(%rax), %rax
movq %rax, -0x18(%rbp)
jmp 0xa24d
movq -0x18(%rbp), %rdi
movl $0x1c, %esi
callq 0xbbe0
testb $0x1, %al
jne 0xa2a3
jmp 0xa2b2
movq -0x18(%rbp), %rax
movq 0x110(%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0xc460
jmp 0xa132
callq 0xc130
movq %rax, %rdi
movq %rdi, -0x18(%rbp)
leaq 0x6fa5(%rip), %rsi      # 0x11278
callq 0xbdf0
cmpl $0x0, %eax
je 0xa910
cmpq $0x0, -0x18(%rbp)
jne 0xa300
leaq 0x7216(%rip), %rdi      # 0x11505
leaq 0x6f84(%rip), %rsi      # 0x1127a
movl $0x5f, %edx
callq 0x4b20
movq -0x18(%rbp), %rax
movq 0x110(%rax), %rdi
callq 0xabd0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
leaq 0x6f6a(%rip), %rsi      # 0x11289
callq 0xbdf0
cmpl $0x0, %eax
je 0xa4ae
cmpq $0x0, -0x18(%rbp)
jne 0xa34c
leaq 0x71ca(%rip), %rdi      # 0x11505
leaq 0x6f38(%rip), %rsi      # 0x1127a
movl $0x62, %edx
callq 0x4b20
movq -0x18(%rbp), %rax
movq 0x110(%rax), %rdi
callq 0xabd0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x18(%rbp), %rax
movq 0x110(%rax), %rax
movq %rax, -0x18(%rbp)
leaq -0x18(%rbp), %rdi
callq 0xac40
movq %rax, -0x50(%rbp)
movq -0x18(%rbp), %rdi
callq 0xabd0
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
jne 0xa3b0
leaq 0x7166(%rip), %rdi      # 0x11505
leaq 0x6ed4(%rip), %rsi      # 0x1127a
movl $0x68, %edx
callq 0x4b20
movq $0x0, -0x58(%rbp)
leaq -0x58(%rbp), %rax
movq %rax, -0x60(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x18(%rbp)
movb %al, -0xf3(%rbp)
je 0xa3ed
movq -0x18(%rbp), %rdi
leaq 0x5ea9(%rip), %rsi      # 0x10283
callq 0xbdf0
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
movb %al, -0xf3(%rbp)
movb -0xf3(%rbp), %al
testb $0x1, %al
jne 0xa3f9
jmp 0xa42e
movq -0x18(%rbp), %rdi
callq 0xbcb0
movq %rax, %rcx
movq -0x60(%rbp), %rax
movq %rcx, (%rax)
movq -0x60(%rbp), %rax
movq (%rax), %rax
addq $0x110, %rax            # imm = 0x110
movq %rax, -0x60(%rbp)
movq -0x18(%rbp), %rax
movq 0x110(%rax), %rax
movq %rax, -0x18(%rbp)
jmp 0xa3c0
movq -0x18(%rbp), %rdi
leaq 0x5e4a(%rip), %rsi      # 0x10283
callq 0xbdf0
cmpl $0x0, %eax
jne 0xa45b
leaq 0x6e46(%rip), %rdi      # 0x11290
leaq 0x6e29(%rip), %rsi      # 0x1127a
movl $0x70, %edx
callq 0x4b20
movq -0x18(%rbp), %rax
movq 0x110(%rax), %rdi
callq 0xc460
movq -0x8(%rbp), %rax
movq %rax, -0x108(%rbp)
movq -0x48(%rbp), %rdi
callq 0xbd90
movq %rax, -0x100(%rbp)
movq -0x50(%rbp), %rdi
movq -0x58(%rbp), %rsi
callq 0x4140
movq -0x108(%rbp), %rdi
movq -0x100(%rbp), %rsi
movq %rax, %rdx
callq 0x4f60
jmp 0xa132
movq -0x18(%rbp), %rdi
leaq 0x6df5(%rip), %rsi      # 0x112ae
callq 0xbdf0
cmpl $0x0, %eax
je 0xa746
movq -0x18(%rbp), %rax
movq %rax, -0x68(%rbp)
movq $0x0, -0x70(%rbp)
movq $0x0, -0x78(%rbp)
movq -0x18(%rbp), %rax
movq 0x110(%rax), %rdi
callq 0xabd0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
movl $0x18, %esi
callq 0xbbe0
testb $0x1, %al
jne 0xa507
jmp 0xa577
movq -0x18(%rbp), %rdi
callq 0xbd90
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rax
movq %rax, -0x110(%rbp)
movq -0x80(%rbp), %rdi
callq 0x2070
movq %rax, %rcx
movq -0x110(%rbp), %rax
subq $0x1, %rcx
movb $0x0, (%rax,%rcx)
movq -0x80(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x18(%rbp), %rax
movq 0x110(%rax), %rdi
callq 0xc460
movq -0x70(%rbp), %rsi
leaq 0x6d4d(%rip), %rdi      # 0x112b6
callq 0xad90
movq %rax, -0x78(%rbp)
jmp 0xa69c
movq -0x18(%rbp), %rdi
leaq 0x67fb(%rip), %rsi      # 0x10d7d
callq 0xbdf0
cmpl $0x0, %eax
je 0xa688
movq -0x18(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x18(%rbp), %rax
movq 0x110(%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x90(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x18(%rbp)
movb %al, -0x111(%rbp)
je 0xa5e2
movq -0x18(%rbp), %rdi
leaq 0x5a8f(%rip), %rsi      # 0x1005e
callq 0xbdf0
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
movb %al, -0x111(%rbp)
movb -0x111(%rbp), %al
testb $0x1, %al
jne 0xa5ee
jmp 0xa5ff
movq -0x18(%rbp), %rax
movq 0x110(%rax), %rax
movq %rax, -0x18(%rbp)
jmp 0xa5b5
cmpq $0x0, -0x18(%rbp)
jne 0xa61b
movq -0x88(%rbp), %rdi
leaq 0x6ca5(%rip), %rsi      # 0x112b9
movb $0x0, %al
callq 0x4d50
movq -0x18(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x90(%rbp), %rdi
movq -0x98(%rbp), %rsi
callq 0xae40
movq %rax, -0x70(%rbp)
movq -0x98(%rbp), %rax
movq 0x110(%rax), %rdi
callq 0xc460
leaq 0xacf9(%rip), %rax      # 0x15350
cmpq $0x0, (%rax)
jne 0xa66f
movq -0x68(%rbp), %rdi
leaq 0x6c83(%rip), %rsi      # 0x112eb
movb $0x0, %al
callq 0x4d50
leaq 0xacda(%rip), %rax      # 0x15350
movq (%rax), %rdi
movq -0x70(%rbp), %rsi
callq 0xad90
movq %rax, -0x78(%rbp)
jmp 0xa69a
movq -0x18(%rbp), %rdi
leaq 0x6c86(%rip), %rsi      # 0x11319
movb $0x0, %al
callq 0x4d50
jmp 0xa69c
cmpq $0x0, -0x78(%rbp)
jne 0xa6bb
leaq 0x61e6(%rip), %rdi      # 0x10890
leaq 0x6bc9(%rip), %rsi      # 0x1127a
movl $0x99, %edx
callq 0x4b20
movq 0xa936(%rip), %rax      # 0x14ff8
movq (%rax), %rdi
movq -0x78(%rbp), %rdx
leaq 0x6c5e(%rip), %rsi      # 0x1132e
movb $0x0, %al
callq 0x2100
movq -0x78(%rbp), %rdi
leaq 0x6c5e(%rip), %rsi      # 0x11340
callq 0x2160
movq %rax, -0xa0(%rbp)
cmpq $0x0, -0xa0(%rbp)
jne 0xa70e
movq -0x68(%rbp), %rdi
movq -0x78(%rbp), %rdx
leaq 0x6c3c(%rip), %rsi      # 0x11343
movb $0x0, %al
callq 0x4d50
movq -0xa0(%rbp), %rdi
callq 0x5500
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rdi
callq 0xdb70
movq %rax, %rdi
callq 0xc4b0
movq -0xa0(%rbp), %rdi
callq 0x2060
jmp 0xa132
movq -0x18(%rbp), %rdi
leaq 0x6c05(%rip), %rsi      # 0x11356
callq 0xbdf0
cmpl $0x0, %eax
je 0xa884
movq -0x18(%rbp), %rax
movq %rax, -0xb0(%rbp)
movq -0x18(%rbp), %rax
movq 0x110(%rax), %rdi
callq 0xabd0
movq %rax, -0x18(%rbp)
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x50b0
movq %rax, -0xb8(%rbp)
cmpq $0x0, %rax
setne %al
andb $0x1, %al
movb %al, -0xb9(%rbp)
movq -0x18(%rbp), %rax
movq 0x110(%rax), %rdi
callq 0xabd0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0xc460
testb $0x1, -0xb9(%rbp)
je 0xa7fb
movq -0x8(%rbp), %rdi
movl -0xc(%rbp), %esi
addl $0x1, %esi
callq 0xa120
callq 0xc130
movq %rax, %rdi
leaq 0x6b77(%rip), %rsi      # 0x1135c
callq 0xbdf0
cmpl $0x0, %eax
je 0xa7f9
callq 0xc430
callq 0xaee0
jmp 0xa82f
callq 0xaee0
callq 0xc130
movq %rax, %rdi
leaq 0x6b4d(%rip), %rsi      # 0x1135c
callq 0xbdf0
cmpl $0x0, %eax
je 0xa82d
callq 0xc430
movq -0x8(%rbp), %rdi
movl -0xc(%rbp), %esi
addl $0x1, %esi
callq 0xa120
jmp 0xa82f
callq 0xc130
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
leaq 0x6b1e(%rip), %rsi      # 0x11361
callq 0xbdf0
cmpl $0x0, %eax
jne 0xa862
movq -0xb0(%rbp), %rdi
leaq 0x6b0c(%rip), %rsi      # 0x11367
movb $0x0, %al
callq 0x4d50
movq -0x18(%rbp), %rax
movq 0x110(%rax), %rdi
callq 0xabd0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0xc460
jmp 0xa132
movq -0x18(%rbp), %rdi
leaq 0x6ad2(%rip), %rsi      # 0x11361
callq 0xbdf0
cmpl $0x0, %eax
je 0xa8bf
cmpl $0x0, -0xc(%rbp)
jne 0xa8b1
movq -0x18(%rbp), %rdi
leaq 0x6af1(%rip), %rsi      # 0x1139b
movb $0x0, %al
callq 0x4d50
movq -0x18(%rbp), %rdi
callq 0xc460
jmp 0xabb8
movq -0x18(%rbp), %rdi
leaq 0x6a92(%rip), %rsi      # 0x1135c
callq 0xbdf0
cmpl $0x0, %eax
je 0xa8fa
cmpl $0x0, -0xc(%rbp)
jne 0xa8ec
movq -0x18(%rbp), %rdi
leaq 0x6acc(%rip), %rsi      # 0x113b1
movb $0x0, %al
callq 0x4d50
movq -0x18(%rbp), %rdi
callq 0xc460
jmp 0xabb8
callq 0xc400
movq %rax, %rdi
leaq 0x6abd(%rip), %rsi      # 0x113c6
movb $0x0, %al
callq 0x4d50
movq -0x8(%rbp), %rax
movq %rax, -0x120(%rbp)
callq 0xc130
movq -0x120(%rbp), %rdi
movq %rax, %rsi
movq %rsi, -0x18(%rbp)
callq 0x50b0
movq %rax, -0xc8(%rbp)
cmpq $0x0, %rax
je 0xabae
movq -0xc8(%rbp), %rax
cmpl $0x3, (%rax)
je 0xa968
leaq 0x6a81(%rip), %rdi      # 0x113d8
leaq 0x691c(%rip), %rsi      # 0x1127a
movl $0xd4, %edx
callq 0x4b20
movq -0xc8(%rbp), %rax
movq 0xa0(%rax), %rdi
callq 0xbd20
movq %rax, -0xd0(%rbp)
callq 0xc430
movq -0xc8(%rbp), %rax
cmpq $0x0, 0xb8(%rax)
jne 0xa9a9
movq -0xd0(%rbp), %rdi
callq 0xc4b0
jmp 0xa132
movq -0x18(%rbp), %rax
movq 0x110(%rax), %rdi
callq 0xabd0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
leaq 0x5b6c(%rip), %rsi      # 0x10534
callq 0xbdf0
cmpl $0x0, %eax
jne 0xa9e4
movq -0x18(%rbp), %rdi
leaq 0x6a1c(%rip), %rsi      # 0x113f9
movb $0x0, %al
callq 0x4d50
movq -0x18(%rbp), %rax
movq 0x110(%rax), %rax
movq %rax, -0x18(%rbp)
movb $0x0, %al
callq 0x4e30
movq %rax, -0xe0(%rbp)
movq -0xc8(%rbp), %rax
movq 0xb8(%rax), %rax
movq %rax, -0xd8(%rbp)
cmpq $0x0, -0xd8(%rbp)
je 0xab5f
movq -0xd8(%rbp), %rdi
leaq 0x6d13(%rip), %rsi      # 0x11745
callq 0xbdf0
cmpl $0x0, %eax
je 0xaa41
jmp 0xab5f
movq $0x0, -0xe8(%rbp)
leaq -0xe8(%rbp), %rax
movq %rax, -0xf0(%rbp)
movq -0x18(%rbp), %rdi
callq 0xabd0
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
je 0xaad8
movq -0x18(%rbp), %rdi
leaq 0x6ccc(%rip), %rsi      # 0x11745
callq 0xbdf0
cmpl $0x0, %eax
jne 0xaa98
movq -0x18(%rbp), %rdi
leaq 0x575c(%rip), %rsi      # 0x101ea
callq 0xbdf0
cmpl $0x0, %eax
je 0xaa9a
jmp 0xaad8
movq -0x18(%rbp), %rdi
callq 0xbcb0
movq %rax, %rcx
movq -0xf0(%rbp), %rax
movq %rcx, (%rax)
movq -0xf0(%rbp), %rax
movq (%rax), %rax
addq $0x110, %rax            # imm = 0x110
movq %rax, -0xf0(%rbp)
movq -0x18(%rbp), %rax
movq 0x110(%rax), %rax
movq %rax, -0x18(%rbp)
jmp 0xaa67
movq -0xe0(%rbp), %rax
movq %rax, -0x130(%rbp)
movq -0xd8(%rbp), %rdi
callq 0xbd90
movq %rax, -0x128(%rbp)
movq -0xe8(%rbp), %rsi
xorl %eax, %eax
movl %eax, %edi
callq 0x4140
movq -0x130(%rbp), %rdi
movq -0x128(%rbp), %rsi
movq %rax, %rdx
callq 0x4f60
movq -0x18(%rbp), %rdi
leaq 0x6c1b(%rip), %rsi      # 0x11745
callq 0xbdf0
cmpl $0x0, %eax
je 0xab36
jmp 0xab5f
movq -0x18(%rbp), %rax
movq 0x110(%rax), %rax
movq %rax, -0x18(%rbp)
movq -0xd8(%rbp), %rax
movq 0x110(%rax), %rax
movq %rax, -0xd8(%rbp)
jmp 0xaa16
movq -0x18(%rbp), %rdi
leaq 0x6bdb(%rip), %rsi      # 0x11745
callq 0xbdf0
cmpl $0x0, %eax
jne 0xab86
movq -0x18(%rbp), %rdi
leaq 0x688a(%rip), %rsi      # 0x11409
movb $0x0, %al
callq 0x4d50
movq -0x18(%rbp), %rax
movq 0x110(%rax), %rdi
callq 0xc460
movq -0xd0(%rbp), %rdi
movq -0xe0(%rbp), %rsi
callq 0xc520
jmp 0xa132
callq 0xc400
jmp 0xa132
addq $0x130, %rsp            # imm = 0x130
popq %rbp
retq
nopw %cs:(%rax,%rax)