// File: rfotino[P]consolite-compiler/src/syntax.cpp
// Function: ForStatement::parse(Tokenizer*, std::vector<std::shared_ptr<FunctionToken>, std::allocator<std::shared_ptr<FunctionToken>>> const&, std::vector<std::shared_ptr<GlobalVarToken>, std::allocator<std::shared_ptr<GlobalVarToken>>> const&, std::vector<std::shared_ptr<ParamToken>, std::allocator<std::shared_ptr<ParamToken>>> const&, std::vector<std::shared_ptr<LocalVarToken>, std::allocator<std::shared_ptr<LocalVarToken>>> const&, std::vector<std::shared_ptr<LabelStatement>, std::allocator<std::shared_ptr<LabelStatement>>>&, std::vector<std::shared_ptr<GotoStatement>, std::allocator<std::shared_ptr<GotoStatement>>>&, std::shared_ptr<FunctionToken> const&)
bool ForStatement::parse(
      Tokenizer *tokenizer,
      const std::vector<std::shared_ptr<FunctionToken>>& functions,
      const std::vector<std::shared_ptr<GlobalVarToken>>& globals,
      const std::vector<std::shared_ptr<ParamToken>>& parameters,
      const std::vector<std::shared_ptr<LocalVarToken>>& localVars,
      std::vector<std::shared_ptr<LabelStatement>>& labels,
      std::vector<std::shared_ptr<GotoStatement>>& gotos,
      const std::shared_ptr<FunctionToken>& currentFunc) {
  _lineNum = tokenizer->peekNext().line();
  // Start with the "for" keyword.
  if (!_expect(tokenizer, "for")) {
    return false;
  }
  // Next get the "(" token.
  if (!_expect(tokenizer, "(")) {
    return false;
  }
  // Get the INIT_LIST.
  if (";" != tokenizer->peekNext().str()) {
    while (true) {
      std::shared_ptr<ExprToken> expr(new ExprToken());
      if (!expr->parse(tokenizer, functions, globals, parameters, localVars)) {
        return false;
      }
      _initExprs.push_back(expr);
      // If the next token is not a comma, we are done. Otherwise consume
      // the comma and continue.
      if ("," != tokenizer->peekNext().str()) {
        break;
      }
      tokenizer->getNext();
    }
  }
  // Make sure the INIT_LIST ended with a ';'.
  if (!_expect(tokenizer, ";")) {
    return false;
  }
  // Get the COND_EXPR. If the next token is a ';', then the COND_EXPR
  // is an implicit truthy value.
  if (";" == tokenizer->peekNext().str()) {
    _condExpr = std::shared_ptr<ExprToken>(new ExprToken(1));
  } else {
    _condExpr = std::shared_ptr<ExprToken>(new ExprToken());
    if (!_condExpr->parse(tokenizer, functions, globals,
                          parameters, localVars)) {
      return false;
    }
  }
  // Make sure the COND_EXPR ended with a ';'.
  if (!_expect(tokenizer, ";")) {
    return false;
  }
  // Get the LOOP_LIST.
  if (")" != tokenizer->peekNext().str()) {
    while (true) {
      std::shared_ptr<ExprToken> expr(new ExprToken());
      if (!expr->parse(tokenizer, functions, globals, parameters, localVars)) {
        return false;
      }
      _loopExprs.push_back(expr);
      // If the next token is not a comma, we are done. Otherwise consume
      // the comma and continue.
      if ("," != tokenizer->peekNext().str()) {
        break;
      }
      tokenizer->getNext();
    }
  }
  // Make sure the LOOP_LIST ended with a ')'.
  if (!_expect(tokenizer, ")")) {
    return false;
  }
  // Get the statement that is the body of the loop, make sure it is valid.
  _body = StatementToken::parse(tokenizer, functions, globals, parameters,
                                localVars, labels, gotos, currentFunc, true);
  if (!_body) {
    return false;
  }
  return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x4c0, %rsp            # imm = 0x4C0
movq 0x20(%rbp), %rax
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x3a0(%rbp)
movq -0x18(%rbp), %rsi
leaq -0x68(%rbp), %rdi
movq %rdi, -0x398(%rbp)
callq 0x6bae0
movq -0x398(%rbp), %rdi
callq 0x32270
movl %eax, -0x38c(%rbp)
jmp 0x2b702
movq -0x3a0(%rbp), %rax
movl -0x38c(%rbp), %ecx
movl %ecx, 0x8(%rax)
leaq -0x68(%rbp), %rdi
callq 0x99b0
movq -0x18(%rbp), %rax
movq %rax, -0x3b0(%rbp)
leaq -0x99(%rbp), %rdi
movq %rdi, -0x3a8(%rbp)
callq 0x8760
movq -0x3a8(%rbp), %rdx
leaq 0x446fe(%rip), %rsi     # 0x6fe45
leaq -0x98(%rbp), %rdi
callq 0xced0
jmp 0x2b755
movq -0x3b0(%rbp), %rdi
leaq -0x98(%rbp), %rsi
movl $0x1, %edx
callq 0x6da60
movb %al, -0x3b1(%rbp)
jmp 0x2b775
movb -0x3b1(%rbp), %al
xorb $-0x1, %al
movb %al, -0x3b2(%rbp)
leaq -0x98(%rbp), %rdi
callq 0x8848
leaq -0x99(%rbp), %rdi
callq 0x8460
movb -0x3b2(%rbp), %al
testb $0x1, %al
jne 0x2b7a7
jmp 0x2b801
movb $0x0, -0x1(%rbp)
jmp 0x2c2ac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x99b0
jmp 0x2c2ba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x2b7f0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x98(%rbp), %rdi
callq 0x8848
leaq -0x99(%rbp), %rdi
callq 0x8460
jmp 0x2c2ba
movq -0x18(%rbp), %rax
movq %rax, -0x3c8(%rbp)
leaq -0xc1(%rbp), %rdi
movq %rdi, -0x3c0(%rbp)
callq 0x8760
movq -0x3c0(%rbp), %rdx
leaq 0x43880(%rip), %rsi     # 0x6f0ad
leaq -0xc0(%rbp), %rdi
callq 0xced0
jmp 0x2b83b
movq -0x3c8(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
movl $0x1, %edx
callq 0x6da60
movb %al, -0x3c9(%rbp)
jmp 0x2b85b
movb -0x3c9(%rbp), %al
xorb $-0x1, %al
movb %al, -0x3ca(%rbp)
leaq -0xc0(%rbp), %rdi
callq 0x8848
leaq -0xc1(%rbp), %rdi
callq 0x8460
movb -0x3ca(%rbp), %al
testb $0x1, %al
jne 0x2b88d
jmp 0x2b8cd
movb $0x0, -0x1(%rbp)
jmp 0x2c2ac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x2b8bc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0xc0(%rbp), %rdi
callq 0x8848
leaq -0xc1(%rbp), %rdi
callq 0x8460
jmp 0x2c2ba
movq -0x18(%rbp), %rsi
leaq -0x118(%rbp), %rdi
movq %rdi, -0x3d8(%rbp)
callq 0x6bae0
movq -0x3d8(%rbp), %rsi
leaq -0xe8(%rbp), %rdi
callq 0xd5c0
jmp 0x2b8f9
leaq 0x44351(%rip), %rdi     # 0x6fc51
leaq -0xe8(%rbp), %rsi
callq 0xd8e0
movb %al, -0x3d9(%rbp)
jmp 0x2b914
leaq -0xe8(%rbp), %rdi
callq 0x8848
leaq -0x118(%rbp), %rdi
callq 0x99b0
movb -0x3d9(%rbp), %al
testb $0x1, %al
jne 0x2b93b
jmp 0x2bb5e
jmp 0x2b93d
movl $0x28, %edi
callq 0x83e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x3e8(%rbp)
callq 0x32670
jmp 0x2b95b
movq -0x3e8(%rbp), %rsi
leaq -0x128(%rbp), %rdi
movq %rdi, -0x3f8(%rbp)
callq 0x33ab0
movq -0x3f8(%rbp), %rdi
callq 0x33ae0
movq %rax, %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
movq -0x30(%rbp), %r8
movq -0x38(%rbp), %r9
callq 0x1d9b0
movb %al, -0x3e9(%rbp)
jmp 0x2b9a5
movb -0x3e9(%rbp), %al
testb $0x1, %al
jne 0x2ba2e
jmp 0x2b9b1
movb $0x0, -0x1(%rbp)
movl $0x1, -0x12c(%rbp)
jmp 0x2bb15
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x2b9ea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x8848
leaq -0x118(%rbp), %rdi
callq 0x99b0
jmp 0x2c2ba
movq -0x3e8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
movl $0x28, %esi
callq 0x83f0
jmp 0x2c2ba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x2bb4b
movq -0x3a0(%rbp), %rdi
addq $0x30, %rdi
leaq -0x128(%rbp), %rsi
callq 0x33b00
jmp 0x2ba47
movq -0x18(%rbp), %rsi
leaq -0x180(%rbp), %rdi
callq 0x6bae0
jmp 0x2ba59
leaq -0x150(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0xd5c0
jmp 0x2ba6e
leaq 0x44002(%rip), %rdi     # 0x6fa77
leaq -0x150(%rbp), %rsi
callq 0xd8e0
movb %al, -0x3f9(%rbp)
jmp 0x2ba89
leaq -0x150(%rbp), %rdi
callq 0x8848
leaq -0x180(%rbp), %rdi
callq 0x99b0
movb -0x3f9(%rbp), %al
testb $0x1, %al
jne 0x2baad
jmp 0x2baed
movl $0x3, -0x12c(%rbp)
jmp 0x2bb15
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x2badf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x150(%rbp), %rdi
callq 0x8848
leaq -0x180(%rbp), %rdi
callq 0x99b0
jmp 0x2bb4b
movq -0x18(%rbp), %rsi
leaq -0x1b0(%rbp), %rdi
callq 0x6ae20
jmp 0x2baff
leaq -0x1b0(%rbp), %rdi
callq 0x99b0
movl $0x0, -0x12c(%rbp)
leaq -0x128(%rbp), %rdi
callq 0x33b70
movl -0x12c(%rbp), %eax
movl %eax, -0x400(%rbp)
testl %eax, %eax
je 0x2bb46
jmp 0x2bb33
movl -0x400(%rbp), %eax
subl $0x1, %eax
je 0x2c2ac
jmp 0x2bb44
jmp 0x2bb5c
jmp 0x2b93d
leaq -0x128(%rbp), %rdi
callq 0x33b70
jmp 0x2c2ba
jmp 0x2bb5e
movq -0x18(%rbp), %rax
movq %rax, -0x410(%rbp)
leaq -0x1d1(%rbp), %rdi
movq %rdi, -0x408(%rbp)
callq 0x8760
movq -0x408(%rbp), %rdx
leaq 0x440c7(%rip), %rsi     # 0x6fc51
leaq -0x1d0(%rbp), %rdi
callq 0xced0
jmp 0x2bb98
movq -0x410(%rbp), %rdi
leaq -0x1d0(%rbp), %rsi
movl $0x1, %edx
callq 0x6da60
movb %al, -0x411(%rbp)
jmp 0x2bbb8
movb -0x411(%rbp), %al
xorb $-0x1, %al
movb %al, -0x412(%rbp)
leaq -0x1d0(%rbp), %rdi
callq 0x8848
leaq -0x1d1(%rbp), %rdi
callq 0x8460
movb -0x412(%rbp), %al
testb $0x1, %al
jne 0x2bbea
jmp 0x2bc2a
movb $0x0, -0x1(%rbp)
jmp 0x2c2ac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x2bc19
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x1d0(%rbp), %rdi
callq 0x8848
leaq -0x1d1(%rbp), %rdi
callq 0x8460
jmp 0x2c2ba
movq -0x18(%rbp), %rsi
leaq -0x228(%rbp), %rdi
movq %rdi, -0x420(%rbp)
callq 0x6bae0
movq -0x420(%rbp), %rsi
leaq -0x1f8(%rbp), %rdi
callq 0xd5c0
jmp 0x2bc56
leaq 0x43ff4(%rip), %rdi     # 0x6fc51
leaq -0x1f8(%rbp), %rsi
callq 0xd590
movb %al, -0x421(%rbp)
jmp 0x2bc71
leaq -0x1f8(%rbp), %rdi
callq 0x8848
leaq -0x228(%rbp), %rdi
callq 0x99b0
movb -0x421(%rbp), %al
testb $0x1, %al
jne 0x2bc98
jmp 0x2bd4f
movl $0x28, %edi
callq 0x83e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x430(%rbp)
movl $0x1, %esi
callq 0x1fc10
jmp 0x2bcbb
movq -0x430(%rbp), %rsi
leaq -0x238(%rbp), %rdi
callq 0x33ab0
movq -0x3a0(%rbp), %rdi
addq $0x10, %rdi
leaq -0x238(%rbp), %rsi
callq 0x35810
leaq -0x238(%rbp), %rdi
callq 0x33b70
jmp 0x2be00
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x2bd1c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x1f8(%rbp), %rdi
callq 0x8848
leaq -0x228(%rbp), %rdi
callq 0x99b0
jmp 0x2c2ba
movq -0x430(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
movl $0x28, %esi
callq 0x83f0
jmp 0x2c2ba
movl $0x28, %edi
callq 0x83e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x438(%rbp)
callq 0x32670
jmp 0x2bd6d
movq -0x438(%rbp), %rsi
leaq -0x248(%rbp), %rdi
callq 0x33ab0
movq -0x3a0(%rbp), %rdi
addq $0x10, %rdi
leaq -0x248(%rbp), %rsi
callq 0x35810
leaq -0x248(%rbp), %rdi
callq 0x33b70
movq -0x3a0(%rbp), %rdi
addq $0x10, %rdi
callq 0x33ae0
movq %rax, %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
movq -0x30(%rbp), %r8
movq -0x38(%rbp), %r9
callq 0x1d9b0
testb $0x1, %al
jne 0x2bdfe
movb $0x0, -0x1(%rbp)
jmp 0x2c2ac
movq -0x438(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
movl $0x28, %esi
callq 0x83f0
jmp 0x2c2ba
jmp 0x2be00
movq -0x18(%rbp), %rax
movq %rax, -0x448(%rbp)
leaq -0x269(%rbp), %rdi
movq %rdi, -0x440(%rbp)
callq 0x8760
movq -0x440(%rbp), %rdx
leaq 0x43e25(%rip), %rsi     # 0x6fc51
leaq -0x268(%rbp), %rdi
callq 0xced0
jmp 0x2be3a
movq -0x448(%rbp), %rdi
leaq -0x268(%rbp), %rsi
movl $0x1, %edx
callq 0x6da60
movb %al, -0x449(%rbp)
jmp 0x2be5a
movb -0x449(%rbp), %al
xorb $-0x1, %al
movb %al, -0x44a(%rbp)
leaq -0x268(%rbp), %rdi
callq 0x8848
leaq -0x269(%rbp), %rdi
callq 0x8460
movb -0x44a(%rbp), %al
testb $0x1, %al
jne 0x2be8c
jmp 0x2becc
movb $0x0, -0x1(%rbp)
jmp 0x2c2ac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x2bebb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x268(%rbp), %rdi
callq 0x8848
leaq -0x269(%rbp), %rdi
callq 0x8460
jmp 0x2c2ba
movq -0x18(%rbp), %rsi
leaq -0x2c0(%rbp), %rdi
movq %rdi, -0x458(%rbp)
callq 0x6bae0
movq -0x458(%rbp), %rsi
leaq -0x290(%rbp), %rdi
callq 0xd5c0
jmp 0x2bef8
leaq 0x44a6f(%rip), %rdi     # 0x7096e
leaq -0x290(%rbp), %rsi
callq 0xd8e0
movb %al, -0x459(%rbp)
jmp 0x2bf13
leaq -0x290(%rbp), %rdi
callq 0x8848
leaq -0x2c0(%rbp), %rdi
callq 0x99b0
movb -0x459(%rbp), %al
testb $0x1, %al
jne 0x2bf3a
jmp 0x2c15d
jmp 0x2bf3c
movl $0x28, %edi
callq 0x83e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x468(%rbp)
callq 0x32670
jmp 0x2bf5a
movq -0x468(%rbp), %rsi
leaq -0x2d0(%rbp), %rdi
movq %rdi, -0x478(%rbp)
callq 0x33ab0
movq -0x478(%rbp), %rdi
callq 0x33ae0
movq %rax, %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
movq -0x30(%rbp), %r8
movq -0x38(%rbp), %r9
callq 0x1d9b0
movb %al, -0x469(%rbp)
jmp 0x2bfa4
movb -0x469(%rbp), %al
testb $0x1, %al
jne 0x2c02d
jmp 0x2bfb0
movb $0x0, -0x1(%rbp)
movl $0x1, -0x12c(%rbp)
jmp 0x2c114
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x2bfe9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x290(%rbp), %rdi
callq 0x8848
leaq -0x2c0(%rbp), %rdi
callq 0x99b0
jmp 0x2c2ba
movq -0x468(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
movl $0x28, %esi
callq 0x83f0
jmp 0x2c2ba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x2c14a
movq -0x3a0(%rbp), %rdi
addq $0x48, %rdi
leaq -0x2d0(%rbp), %rsi
callq 0x33b00
jmp 0x2c046
movq -0x18(%rbp), %rsi
leaq -0x320(%rbp), %rdi
callq 0x6bae0
jmp 0x2c058
leaq -0x2f0(%rbp), %rdi
leaq -0x320(%rbp), %rsi
callq 0xd5c0
jmp 0x2c06d
leaq 0x43a03(%rip), %rdi     # 0x6fa77
leaq -0x2f0(%rbp), %rsi
callq 0xd8e0
movb %al, -0x479(%rbp)
jmp 0x2c088
leaq -0x2f0(%rbp), %rdi
callq 0x8848
leaq -0x320(%rbp), %rdi
callq 0x99b0
movb -0x479(%rbp), %al
testb $0x1, %al
jne 0x2c0ac
jmp 0x2c0ec
movl $0x5, -0x12c(%rbp)
jmp 0x2c114
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x2c0de
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x2f0(%rbp), %rdi
callq 0x8848
leaq -0x320(%rbp), %rdi
callq 0x99b0
jmp 0x2c14a
movq -0x18(%rbp), %rsi
leaq -0x350(%rbp), %rdi
callq 0x6ae20
jmp 0x2c0fe
leaq -0x350(%rbp), %rdi
callq 0x99b0
movl $0x0, -0x12c(%rbp)
leaq -0x2d0(%rbp), %rdi
callq 0x33b70
movl -0x12c(%rbp), %eax
movl %eax, -0x480(%rbp)
testl %eax, %eax
je 0x2c145
jmp 0x2c132
movl -0x480(%rbp), %eax
subl $0x1, %eax
je 0x2c2ac
jmp 0x2c143
jmp 0x2c15b
jmp 0x2bf3c
leaq -0x2d0(%rbp), %rdi
callq 0x33b70
jmp 0x2c2ba
jmp 0x2c15d
movq -0x18(%rbp), %rax
movq %rax, -0x490(%rbp)
leaq -0x371(%rbp), %rdi
movq %rdi, -0x488(%rbp)
callq 0x8760
movq -0x488(%rbp), %rdx
leaq 0x447e5(%rip), %rsi     # 0x7096e
leaq -0x370(%rbp), %rdi
callq 0xced0
jmp 0x2c197
movq -0x490(%rbp), %rdi
leaq -0x370(%rbp), %rsi
movl $0x1, %edx
callq 0x6da60
movb %al, -0x491(%rbp)
jmp 0x2c1b7
movb -0x491(%rbp), %al
xorb $-0x1, %al
movb %al, -0x492(%rbp)
leaq -0x370(%rbp), %rdi
callq 0x8848
leaq -0x371(%rbp), %rdi
callq 0x8460
movb -0x492(%rbp), %al
testb $0x1, %al
jne 0x2c1e9
jmp 0x2c229
movb $0x0, -0x1(%rbp)
jmp 0x2c2ac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x2c218
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x370(%rbp), %rdi
callq 0x8848
leaq -0x371(%rbp), %rdi
callq 0x8460
jmp 0x2c2ba
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
movq -0x30(%rbp), %r8
movq -0x38(%rbp), %r9
movq 0x10(%rbp), %r11
movq 0x18(%rbp), %r10
movq 0x20(%rbp), %rax
leaq -0x388(%rbp), %rdi
movq %r11, (%rsp)
movq %r10, 0x8(%rsp)
movq %rax, 0x10(%rsp)
movl $0x1, 0x18(%rsp)
callq 0x27d10
movq -0x3a0(%rbp), %rdi
addq $0x20, %rdi
leaq -0x388(%rbp), %rsi
callq 0x357b0
leaq -0x388(%rbp), %rdi
callq 0xfcd0
movq -0x3a0(%rbp), %rdi
addq $0x20, %rdi
callq 0x34140
testb $0x1, %al
jne 0x2c2a8
movb $0x0, -0x1(%rbp)
jmp 0x2c2ac
movb $0x1, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x4c0, %rsp            # imm = 0x4C0
popq %rbp
retq
movq -0x70(%rbp), %rdi
callq 0x8750
nopw %cs:(%rax,%rax)