// File: luooofan[P]hblzbd_compiler/src/Pass/convert_ssa.cpp
// Function: ConvertSSA::Rename(IRBasicBlock*)
void ConvertSSA::Rename(IRBasicBlock* bb) {
#ifdef DEBUG_CONVERT_SSA_PROCESS
  std::cout << "rename for irbb: " << std::endl;
  // bb->EmitCode(std::cout);
#endif
  std::unordered_map<std::string, int> deftimes;
  // 对bb中每条ir的使用和定值var rename
  for (auto ir : bb->ir_list_) {
    // 不考虑对数组的定值和使用
    auto [def, use] = GetDefUsePtr(ir, false);
    auto [defvar, usevar] = GetDefUse(ir, false);
    if (ir->op_ != IR::OpKind::PHI) {
      for (int i = 0; i < use.size(); ++i) {
        if (this->stack_.find(usevar[i]) == this->stack_.end()) {
          MyAssert(this->count_.find(usevar[i]) == this->count_.end());
          this->stack_[usevar[i]].push(0);
          this->count_[usevar[i]] = 0;
        }
        use[i]->ssa_id_ = this->stack_[usevar[i]].top();
      }
    }
    for (int i = 0; i < def.size(); ++i) {
      if (deftimes.find(defvar[i]) == deftimes.end()) {
        deftimes[defvar[i]] = 1;
      } else {
        ++deftimes[defvar[i]];
      }
      if (this->count_.find(defvar[i]) == this->count_.end()) {
        MyAssert(this->stack_.find(defvar[i]) == this->stack_.end());
        this->stack_[defvar[i]].push(0);
        this->count_[defvar[i]] = 0;
      }
      int cnt = ++this->count_[defvar[i]];
      this->stack_[defvar[i]].push(cnt);
      def[i]->ssa_id_ = cnt;
    }
  }  // end of ir for-loop
  // 填写bb的succ中的phi ir
  // std::cout << "fill phi" << std::endl;
  for (auto succ : bb->succ_) {
    int order = std::distance(succ->pred_.begin(), std::find(succ->pred_.begin(), succ->pred_.end(), bb));
    MyAssert(order < succ->pred_.size());
    for (auto phi_ir : succ->ir_list_) {
      if (phi_ir->op_ == IR::OpKind::LABEL) continue;
      if (phi_ir->op_ != IR::OpKind::PHI) break;
      phi_ir->phi_args_[order] = phi_ir->res_;
      // NOTE here!!!
      const auto&& varname = phi_ir->res_.name_ + "." + std::to_string(phi_ir->res_.scope_id_);
      // std::cout << varname << std::endl;
      if (this->stack_.find(varname) == this->stack_.end()) {
        this->count_[varname] = 0;
        this->stack_[varname].push(0);
      }
      phi_ir->phi_args_[order].ssa_id_ = this->stack_[varname].top();
    }
  }
  // 遍历支配树子结点
  for (auto dom : bb->doms_) {
    Rename(dom);
  }
  // 维护stack
  for (auto it = deftimes.begin(); it != deftimes.end(); ++it) {
    auto& stack = this->stack_[(*it).first];
    for (int i = 0; i < (*it).second; ++i) {
      MyAssert(!stack.empty());
      stack.pop();
    }
  }
}

// Assembly:
subq $0x478, %rsp            # imm = 0x478
movq %rdi, 0x470(%rsp)
movq %rsi, 0x468(%rsp)
movq 0x470(%rsp), %rax
movq %rax, 0x1e8(%rsp)
leaq 0x430(%rsp), %rdi
callq 0x4fed0
movq 0x468(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x428(%rsp)
movq 0x428(%rsp), %rdi
callq 0x1b070
movq %rax, 0x420(%rsp)
movq 0x428(%rsp), %rdi
callq 0x1aeb0
movq %rax, 0x418(%rsp)
leaq 0x420(%rsp), %rdi
leaq 0x418(%rsp), %rsi
callq 0x493c0
testb $0x1, %al
jne 0x85dc0
jmp 0x866d0
leaq 0x420(%rsp), %rdi
callq 0x1b4d0
movq (%rax), %rax
movq %rax, 0x410(%rsp)
movq 0x410(%rsp), %rsi
leaq 0x3e0(%rsp), %rdi
xorl %edx, %edx
callq 0xc7c20
jmp 0x85df1
leaq 0x3e0(%rsp), %rdi
movq %rdi, 0x1e0(%rsp)
callq 0x8f300
movq 0x1e0(%rsp), %rdi
movq %rax, 0x3c8(%rsp)
callq 0x8f310
movq %rax, 0x3c0(%rsp)
movq 0x410(%rsp), %rsi
leaq 0x390(%rsp), %rdi
xorl %edx, %edx
callq 0xc83e0
jmp 0x85e3c
leaq 0x390(%rsp), %rdi
callq 0x8f320
movq %rax, 0x388(%rsp)
leaq 0x390(%rsp), %rdi
callq 0x8f330
movq %rax, 0x380(%rsp)
movq 0x410(%rsp), %rax
cmpl $0x15, (%rax)
je 0x86211
movl $0x0, 0x37c(%rsp)
movslq 0x37c(%rsp), %rax
movq %rax, 0x1d8(%rsp)
movq 0x3c0(%rsp), %rdi
callq 0x8f340
movq %rax, %rcx
movq 0x1d8(%rsp), %rax
cmpq %rcx, %rax
jae 0x8620f
movq 0x1e8(%rsp), %rax
addq $0x70, %rax
movq %rax, 0x1c8(%rsp)
movq 0x380(%rsp), %rdi
movslq 0x37c(%rsp), %rsi
callq 0x8f3b0
movq 0x1c8(%rsp), %rdi
movq %rax, %rsi
callq 0x8f380
movq %rax, 0x1d0(%rsp)
jmp 0x85ef6
movq 0x1e8(%rsp), %rdi
movq 0x1d0(%rsp), %rax
movq %rax, 0x370(%rsp)
addq $0x70, %rdi
callq 0x8f3d0
movq %rax, 0x368(%rsp)
leaq 0x370(%rsp), %rdi
leaq 0x368(%rsp), %rsi
callq 0x8f360
testb $0x1, %al
jne 0x85f3d
jmp 0x8616c
movq 0x1e8(%rsp), %rax
addq $0x38, %rax
movq %rax, 0x1b8(%rsp)
movq 0x380(%rsp), %rdi
movslq 0x37c(%rsp), %rsi
callq 0x8f3b0
movq 0x1b8(%rsp), %rdi
movq %rax, %rsi
callq 0x8f420
movq %rax, 0x1c0(%rsp)
jmp 0x85f80
movq 0x1e8(%rsp), %rdi
movq 0x1c0(%rsp), %rax
movq %rax, 0x360(%rsp)
addq $0x38, %rdi
callq 0x8f450
movq %rax, 0x358(%rsp)
leaq 0x360(%rsp), %rdi
leaq 0x358(%rsp), %rsi
callq 0x8f400
xorb $-0x1, %al
testb $0x1, %al
jne 0x85fc9
jmp 0x860b6
movq 0xc6018(%rip), %rdi     # 0x14bfe8
leaq 0x74121(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, 0x1b0(%rsp)
jmp 0x85fe6
movq 0x1b0(%rsp), %rdi
leaq 0x778b0(%rip), %rsi     # 0xfd8a5
callq 0x8330
movq %rax, 0x1a8(%rsp)
jmp 0x86004
movq 0x1a8(%rsp), %rdi
leaq 0x753d7(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, 0x1a0(%rsp)
jmp 0x86022
movq 0x1a0(%rsp), %rdi
movl $0x227, %esi            # imm = 0x227
callq 0x8650
movq %rax, 0x198(%rsp)
jmp 0x8603e
movq 0x198(%rsp), %rdi
movq 0xc5f33(%rip), %rsi     # 0x14bf80
callq 0x8380
jmp 0x86054
movl $0xff, %edi
callq 0x8460
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3d8(%rsp)
movl %eax, 0x3d4(%rsp)
jmp 0x86e24
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3d8(%rsp)
movl %eax, 0x3d4(%rsp)
jmp 0x866be
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3d8(%rsp)
movl %eax, 0x3d4(%rsp)
leaq 0x390(%rsp), %rdi
callq 0x8f530
jmp 0x866be
movq 0x1e8(%rsp), %rax
addq $0x70, %rax
movq %rax, 0x188(%rsp)
movq 0x380(%rsp), %rdi
movslq 0x37c(%rsp), %rsi
callq 0x8f3b0
movq 0x188(%rsp), %rdi
movq %rax, %rsi
callq 0x8f480
movq %rax, 0x190(%rsp)
jmp 0x860f9
movq 0x190(%rsp), %rdi
movl $0x0, 0x354(%rsp)
leaq 0x354(%rsp), %rsi
callq 0x8f4b0
jmp 0x8611b
movq 0x1e8(%rsp), %rax
addq $0x38, %rax
movq %rax, 0x178(%rsp)
movq 0x380(%rsp), %rdi
movslq 0x37c(%rsp), %rsi
callq 0x8f3b0
movq 0x178(%rsp), %rdi
movq %rax, %rsi
callq 0x8f4e0
movq %rax, 0x180(%rsp)
jmp 0x8615e
movq 0x180(%rsp), %rax
movl $0x0, (%rax)
movq 0x1e8(%rsp), %rax
addq $0x70, %rax
movq %rax, 0x168(%rsp)
movq 0x380(%rsp), %rdi
movslq 0x37c(%rsp), %rsi
callq 0x8f3b0
movq 0x168(%rsp), %rdi
movq %rax, %rsi
callq 0x8f480
movq %rax, 0x170(%rsp)
jmp 0x861af
movq 0x170(%rsp), %rdi
callq 0x371f0
movq %rax, 0x160(%rsp)
jmp 0x861c6
movq 0x160(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x15c(%rsp)
movq 0x3c0(%rsp), %rdi
movslq 0x37c(%rsp), %rsi
callq 0x8f510
movl 0x15c(%rsp), %ecx
movq (%rax), %rax
movl %ecx, 0x38(%rax)
movl 0x37c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x37c(%rsp)
jmp 0x85e82
jmp 0x86211
movl $0x0, 0x350(%rsp)
movslq 0x350(%rsp), %rax
movq %rax, 0x150(%rsp)
movq 0x3c8(%rsp), %rdi
callq 0x8f340
movq %rax, %rcx
movq 0x150(%rsp), %rax
cmpq %rcx, %rax
jae 0x86692
movq 0x388(%rsp), %rdi
movslq 0x350(%rsp), %rsi
callq 0x8f3b0
movq %rax, %rsi
leaq 0x430(%rsp), %rdi
callq 0x8f420
movq %rax, 0x148(%rsp)
jmp 0x8627c
movq 0x148(%rsp), %rax
movq %rax, 0x348(%rsp)
leaq 0x430(%rsp), %rdi
callq 0x8f450
movq %rax, 0x340(%rsp)
leaq 0x348(%rsp), %rdi
leaq 0x340(%rsp), %rsi
callq 0x8f400
testb $0x1, %al
jne 0x862bc
jmp 0x862fb
movq 0x388(%rsp), %rdi
movslq 0x350(%rsp), %rsi
callq 0x8f3b0
movq %rax, %rsi
leaq 0x430(%rsp), %rdi
callq 0x8f4e0
movq %rax, 0x140(%rsp)
jmp 0x862eb
movq 0x140(%rsp), %rax
movl $0x1, (%rax)
jmp 0x86339
movq 0x388(%rsp), %rdi
movslq 0x350(%rsp), %rsi
callq 0x8f3b0
movq %rax, %rsi
leaq 0x430(%rsp), %rdi
callq 0x8f4e0
movq %rax, 0x138(%rsp)
jmp 0x8632a
movq 0x138(%rsp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movq 0x1e8(%rsp), %rax
addq $0x38, %rax
movq %rax, 0x128(%rsp)
movq 0x388(%rsp), %rdi
movslq 0x350(%rsp), %rsi
callq 0x8f3b0
movq 0x128(%rsp), %rdi
movq %rax, %rsi
callq 0x8f420
movq %rax, 0x130(%rsp)
jmp 0x8637c
movq 0x1e8(%rsp), %rdi
movq 0x130(%rsp), %rax
movq %rax, 0x338(%rsp)
addq $0x38, %rdi
callq 0x8f450
movq %rax, 0x330(%rsp)
leaq 0x338(%rsp), %rdi
leaq 0x330(%rsp), %rsi
callq 0x8f400
testb $0x1, %al
jne 0x863c3
jmp 0x8659a
movq 0x1e8(%rsp), %rax
addq $0x70, %rax
movq %rax, 0x118(%rsp)
movq 0x388(%rsp), %rdi
movslq 0x350(%rsp), %rsi
callq 0x8f3b0
movq 0x118(%rsp), %rdi
movq %rax, %rsi
callq 0x8f380
movq %rax, 0x120(%rsp)
jmp 0x86406
movq 0x1e8(%rsp), %rdi
movq 0x120(%rsp), %rax
movq %rax, 0x328(%rsp)
addq $0x70, %rdi
callq 0x8f3d0
movq %rax, 0x320(%rsp)
leaq 0x328(%rsp), %rdi
leaq 0x320(%rsp), %rsi
callq 0x8f360
xorb $-0x1, %al
testb $0x1, %al
jne 0x8644f
jmp 0x864e4
movq 0xc5b92(%rip), %rdi     # 0x14bfe8
leaq 0x73c9b(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, 0x110(%rsp)
jmp 0x8646c
movq 0x110(%rsp), %rdi
leaq 0x7742a(%rip), %rsi     # 0xfd8a5
callq 0x8330
movq %rax, 0x108(%rsp)
jmp 0x8648a
movq 0x108(%rsp), %rdi
leaq 0x74f51(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, 0x100(%rsp)
jmp 0x864a8
movq 0x100(%rsp), %rdi
movl $0x235, %esi            # imm = 0x235
callq 0x8650
movq %rax, 0xf8(%rsp)
jmp 0x864c4
movq 0xf8(%rsp), %rdi
movq 0xc5aad(%rip), %rsi     # 0x14bf80
callq 0x8380
jmp 0x864da
movl $0xff, %edi
callq 0x8460
movq 0x1e8(%rsp), %rax
addq $0x70, %rax
movq %rax, 0xe8(%rsp)
movq 0x388(%rsp), %rdi
movslq 0x350(%rsp), %rsi
callq 0x8f3b0
movq 0xe8(%rsp), %rdi
movq %rax, %rsi
callq 0x8f480
movq %rax, 0xf0(%rsp)
jmp 0x86527
movq 0xf0(%rsp), %rdi
movl $0x0, 0x31c(%rsp)
leaq 0x31c(%rsp), %rsi
callq 0x8f4b0
jmp 0x86549
movq 0x1e8(%rsp), %rax
addq $0x38, %rax
movq %rax, 0xd8(%rsp)
movq 0x388(%rsp), %rdi
movslq 0x350(%rsp), %rsi
callq 0x8f3b0
movq 0xd8(%rsp), %rdi
movq %rax, %rsi
callq 0x8f4e0
movq %rax, 0xe0(%rsp)
jmp 0x8658c
movq 0xe0(%rsp), %rax
movl $0x0, (%rax)
movq 0x1e8(%rsp), %rax
addq $0x38, %rax
movq %rax, 0xc8(%rsp)
movq 0x388(%rsp), %rdi
movslq 0x350(%rsp), %rsi
callq 0x8f3b0
movq 0xc8(%rsp), %rdi
movq %rax, %rsi
callq 0x8f4e0
movq %rax, 0xd0(%rsp)
jmp 0x865dd
movq 0x1e8(%rsp), %rax
movq 0xd0(%rsp), %rdx
movl (%rdx), %ecx
incl %ecx
movl %ecx, (%rdx)
movl %ecx, 0x318(%rsp)
addq $0x70, %rax
movq %rax, 0xb8(%rsp)
movq 0x388(%rsp), %rdi
movslq 0x350(%rsp), %rsi
callq 0x8f3b0
movq 0xb8(%rsp), %rdi
movq %rax, %rsi
callq 0x8f480
movq %rax, 0xc0(%rsp)
jmp 0x86635
movq 0xc0(%rsp), %rdi
leaq 0x318(%rsp), %rsi
callq 0x37070
jmp 0x8664c
movl 0x318(%rsp), %eax
movl %eax, 0xb4(%rsp)
movq 0x3c8(%rsp), %rdi
movslq 0x350(%rsp), %rsi
callq 0x8f510
movl 0xb4(%rsp), %ecx
movq (%rax), %rax
movl %ecx, 0x38(%rax)
movl 0x350(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x350(%rsp)
jmp 0x8621c
leaq 0x390(%rsp), %rdi
callq 0x8f530
leaq 0x3e0(%rsp), %rdi
callq 0x8f560
leaq 0x420(%rsp), %rdi
callq 0x49460
jmp 0x85da2
leaq 0x3e0(%rsp), %rdi
callq 0x8f560
jmp 0x86e24
movq 0x468(%rsp), %rax
addq $0x40, %rax
movq %rax, 0x310(%rsp)
movq 0x310(%rsp), %rdi
callq 0x1cc40
movq %rax, 0x308(%rsp)
movq 0x310(%rsp), %rdi
callq 0x1cac0
movq %rax, 0x300(%rsp)
leaq 0x308(%rsp), %rdi
leaq 0x300(%rsp), %rsi
callq 0x492e0
testb $0x1, %al
jne 0x8672c
jmp 0x86be5
leaq 0x308(%rsp), %rdi
callq 0x49320
movq (%rax), %rax
movq %rax, 0x2f8(%rsp)
movq 0x2f8(%rsp), %rdi
addq $0x28, %rdi
callq 0x1cc40
movq %rax, 0x2e8(%rsp)
movq 0x2f8(%rsp), %rdi
addq $0x28, %rdi
callq 0x1cc40
movq %rax, 0x2d8(%rsp)
movq 0x2f8(%rsp), %rdi
addq $0x28, %rdi
callq 0x1cac0
movq %rax, 0x2d0(%rsp)
movq 0x2d8(%rsp), %rdi
movq 0x2d0(%rsp), %rsi
leaq 0x468(%rsp), %rdx
callq 0x49560
movq %rax, 0xa8(%rsp)
jmp 0x867b6
movq 0xa8(%rsp), %rax
movq %rax, 0x2e0(%rsp)
movq 0x2e8(%rsp), %rdi
movq 0x2e0(%rsp), %rsi
callq 0x495c0
movq %rax, 0xa0(%rsp)
jmp 0x867e5
movq 0xa0(%rsp), %rax
movl %eax, 0x2f4(%rsp)
movslq 0x2f4(%rsp), %rax
movq %rax, 0x98(%rsp)
movq 0x2f8(%rsp), %rdi
addq $0x28, %rdi
callq 0x1cd80
movq %rax, %rcx
movq 0x98(%rsp), %rax
cmpq %rcx, %rax
jb 0x868b8
movq 0xc57b8(%rip), %rdi     # 0x14bfe8
leaq 0x738c1(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, 0x90(%rsp)
jmp 0x86846
movq 0x90(%rsp), %rdi
leaq 0x77050(%rip), %rsi     # 0xfd8a5
callq 0x8330
movq %rax, 0x88(%rsp)
jmp 0x86864
movq 0x88(%rsp), %rdi
leaq 0x74b77(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, 0x80(%rsp)
jmp 0x86882
movq 0x80(%rsp), %rdi
movl $0x242, %esi            # imm = 0x242
callq 0x8650
movq %rax, 0x78(%rsp)
jmp 0x8689b
movq 0x78(%rsp), %rdi
movq 0xc56d9(%rip), %rsi     # 0x14bf80
callq 0x8380
jmp 0x868ae
movl $0xff, %edi
callq 0x8460
movq 0x2f8(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x2c8(%rsp)
movq 0x2c8(%rsp), %rdi
callq 0x1b070
movq %rax, 0x2c0(%rsp)
movq 0x2c8(%rsp), %rdi
callq 0x1aeb0
movq %rax, 0x2b8(%rsp)
leaq 0x2c0(%rsp), %rdi
leaq 0x2b8(%rsp), %rsi
callq 0x493c0
testb $0x1, %al
jne 0x86914
jmp 0x86bd1
leaq 0x2c0(%rsp), %rdi
callq 0x1b4d0
movq (%rax), %rax
movq %rax, 0x2b0(%rsp)
movq 0x2b0(%rsp), %rax
cmpl $0x7, (%rax)
jne 0x8693e
jmp 0x86bbf
movq 0x2b0(%rsp), %rax
cmpl $0x15, (%rax)
je 0x86950
jmp 0x86bd1
movq 0x2b0(%rsp), %rdi
movq %rdi, %rax
addq $0x88, %rax
movq %rax, 0x70(%rsp)
addq $0xc8, %rdi
movslq 0x2f4(%rsp), %rsi
callq 0x8ed50
movq 0x70(%rsp), %rsi
movq %rax, %rdi
callq 0x43230
jmp 0x86989
movq 0x2b0(%rsp), %rsi
addq $0x90, %rsi
leaq 0x76f2a(%rip), %rdx     # 0xfd8c9
leaq 0x268(%rsp), %rdi
callq 0xc720
jmp 0x869ae
movq 0x2b0(%rsp), %rax
movl 0xb0(%rax), %esi
leaq 0x248(%rsp), %rdi
callq 0xc7b0
jmp 0x869cb
leaq 0x288(%rsp), %rdi
leaq 0x268(%rsp), %rsi
leaq 0x248(%rsp), %rdx
callq 0xc630
jmp 0x869ea
leaq 0x248(%rsp), %rdi
callq 0x8728
leaq 0x268(%rsp), %rdi
callq 0x8728
movq 0x1e8(%rsp), %rdi
leaq 0x288(%rsp), %rax
movq %rax, 0x2a8(%rsp)
addq $0x70, %rdi
movq 0x2a8(%rsp), %rsi
callq 0x8f380
movq %rax, 0x68(%rsp)
jmp 0x86a34
movq 0x1e8(%rsp), %rdi
movq 0x68(%rsp), %rax
movq %rax, 0x240(%rsp)
addq $0x70, %rdi
callq 0x8f3d0
movq %rax, 0x238(%rsp)
leaq 0x240(%rsp), %rdi
leaq 0x238(%rsp), %rsi
callq 0x8f360
testb $0x1, %al
jne 0x86a78
jmp 0x86b53
movq 0x1e8(%rsp), %rdi
addq $0x38, %rdi
movq 0x2a8(%rsp), %rsi
callq 0x8f4e0
movq %rax, 0x60(%rsp)
jmp 0x86a98
movq 0x1e8(%rsp), %rdi
movq 0x60(%rsp), %rax
movl $0x0, (%rax)
addq $0x70, %rdi
movq 0x2a8(%rsp), %rsi
callq 0x8f480
movq %rax, 0x58(%rsp)
jmp 0x86ac3
movq 0x58(%rsp), %rdi
movl $0x0, 0x234(%rsp)
leaq 0x234(%rsp), %rsi
callq 0x8f4b0
jmp 0x86ae2
jmp 0x86b53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3d8(%rsp)
movl %eax, 0x3d4(%rsp)
jmp 0x86b1b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3d8(%rsp)
movl %eax, 0x3d4(%rsp)
leaq 0x248(%rsp), %rdi
callq 0x8728
leaq 0x268(%rsp), %rdi
callq 0x8728
jmp 0x86e24
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3d8(%rsp)
movl %eax, 0x3d4(%rsp)
leaq 0x288(%rsp), %rdi
callq 0x8728
jmp 0x86e24
movq 0x1e8(%rsp), %rdi
addq $0x70, %rdi
movq 0x2a8(%rsp), %rsi
callq 0x8f480
movq %rax, 0x50(%rsp)
jmp 0x86b73
movq 0x50(%rsp), %rdi
callq 0x371f0
movq %rax, 0x48(%rsp)
jmp 0x86b84
movq 0x48(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x44(%rsp)
movq 0x2b0(%rsp), %rdi
addq $0xc8, %rdi
movslq 0x2f4(%rsp), %rsi
callq 0x8ed50
movl 0x44(%rsp), %ecx
movl %ecx, 0x38(%rax)
leaq 0x288(%rsp), %rdi
callq 0x8728
leaq 0x2c0(%rsp), %rdi
callq 0x49460
jmp 0x868f6
jmp 0x86bd3
leaq 0x308(%rsp), %rdi
callq 0x49330
jmp 0x8670e
movq 0x468(%rsp), %rax
addq $0x258, %rax            # imm = 0x258
movq %rax, 0x228(%rsp)
movq 0x228(%rsp), %rdi
callq 0x1cc40
movq %rax, 0x220(%rsp)
movq 0x228(%rsp), %rdi
callq 0x1cac0
movq %rax, 0x218(%rsp)
leaq 0x220(%rsp), %rdi
leaq 0x218(%rsp), %rsi
callq 0x492e0
testb $0x1, %al
jne 0x86c40
jmp 0x86c80
leaq 0x220(%rsp), %rdi
callq 0x49320
movq 0x1e8(%rsp), %rdi
movq (%rax), %rax
movq %rax, 0x210(%rsp)
movq 0x210(%rsp), %rsi
callq 0x85d30
jmp 0x86c6f
jmp 0x86c71
leaq 0x220(%rsp), %rdi
callq 0x49330
jmp 0x86c25
leaq 0x430(%rsp), %rdi
callq 0x8f590
movq %rax, 0x208(%rsp)
leaq 0x430(%rsp), %rdi
callq 0x8f450
movq %rax, 0x200(%rsp)
leaq 0x208(%rsp), %rdi
leaq 0x200(%rsp), %rsi
callq 0x8f5c0
testb $0x1, %al
jne 0x86cc8
jmp 0x86e0f
movq 0x1e8(%rsp), %rax
addq $0x70, %rax
movq %rax, 0x30(%rsp)
leaq 0x208(%rsp), %rdi
callq 0x8f5e0
movq 0x30(%rsp), %rdi
movq %rax, %rsi
callq 0x8f480
movq %rax, 0x38(%rsp)
jmp 0x86cfa
movq 0x38(%rsp), %rax
movq %rax, 0x1f8(%rsp)
movl $0x0, 0x1f4(%rsp)
movl 0x1f4(%rsp), %eax
movl %eax, 0x2c(%rsp)
leaq 0x208(%rsp), %rdi
callq 0x8f5e0
movq %rax, %rcx
movl 0x2c(%rsp), %eax
cmpl 0x20(%rcx), %eax
jge 0x86dfb
movq 0x1f8(%rsp), %rdi
callq 0x371d0
movb %al, 0x2b(%rsp)
jmp 0x86d4d
movb 0x2b(%rsp), %al
testb $0x1, %al
jne 0x86d57
jmp 0x86dd4
movq 0xc528a(%rip), %rdi     # 0x14bfe8
leaq 0x73393(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, 0x20(%rsp)
jmp 0x86d71
movq 0x20(%rsp), %rdi
leaq 0x76b28(%rip), %rsi     # 0xfd8a5
callq 0x8330
movq %rax, 0x18(%rsp)
jmp 0x86d89
movq 0x18(%rsp), %rdi
leaq 0x74655(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, 0x10(%rsp)
jmp 0x86da1
movq 0x10(%rsp), %rdi
movl $0x259, %esi            # imm = 0x259
callq 0x8650
movq %rax, 0x8(%rsp)
jmp 0x86db7
movq 0x8(%rsp), %rdi
movq 0xc51bd(%rip), %rsi     # 0x14bf80
callq 0x8380
jmp 0x86dca
movl $0xff, %edi
callq 0x8460
movq 0x1f8(%rsp), %rdi
callq 0x37200
jmp 0x86de3
jmp 0x86de5
movl 0x1f4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x1f4(%rsp)
jmp 0x86d12
jmp 0x86dfd
leaq 0x208(%rsp), %rdi
callq 0x8f600
jmp 0x86c95
leaq 0x430(%rsp), %rdi
callq 0x8f630
addq $0x478, %rsp            # imm = 0x478
retq
leaq 0x430(%rsp), %rdi
callq 0x8f630
movq 0x3d8(%rsp), %rdi
callq 0x8670
nop