// File: luooofan[P]hblzbd_compiler/src/Pass/convert_ssa.cpp
// Function: ConvertSSA::ConstructSSA4BB(IRBasicBlock*, SSAFunction*, std::unordered_map<IRBasicBlock*, SSABasicBlock*, std::hash<IRBasicBlock*>, std::equal_to<IRBasicBlock*>, std::allocator<std::pair<IRBasicBlock* const, SSABasicBlock*>>>&)
void ConvertSSA::ConstructSSA4BB(IRBasicBlock* bb, SSAFunction* ssafunc,
                                 std::unordered_map<IRBasicBlock*, SSABasicBlock*>& bb_map) {
  if (nullptr == bb) return;
#ifdef DEBUG_CONSTRUCT_SSA_PROCESS
  std::cout << "---Process BB:" << std::endl;
#endif

  auto ssabb = bb_map[bb];
  MyAssert(nullptr != ssabb);

  // for every ir
  for (auto ir_iter = bb->ir_list_.begin(); ir_iter != bb->ir_list_.end(); ++ir_iter) {
    auto ir = **ir_iter;
#ifdef DEBUG_CONSTRUCT_SSA_PROCESS
    // std::cout << "----Process IR:" << std::endl;
    ir.PrintIR(std::cout);
#endif
    switch (ir.op_) {
      // NOTE: assign和param可能传递i32 pointer 其他传递i32或者void arraytype只在alloca中不会传递
      // 从数组中取元素值只会出现在assign offset ir中 给数组元素赋值只会出现在assign ir中
      case ir::IR::OpKind::ADD:
      case ir::IR::OpKind::SUB:
      case ir::IR::OpKind::MUL:
      case ir::IR::OpKind::DIV:
      case ir::IR::OpKind::MOD: {
        auto lhs = ResolveOpn2Value(&(ir.opn1_), ssabb);
        auto rhs = ResolveOpn2Value(&(ir.opn2_), ssabb);
        auto res_comp_name = ir.res_.GetCompName();
        auto res =
            new BinaryOperator(new Type(Type::IntegerTyID), static_cast<BinaryOperator::OpKind>(GetOpKind(ir.op_)),
                               res_comp_name, lhs, rhs, ssabb);
        ProcessResValue(res_comp_name, &(ir.res_), res, ssabb);
        break;
      }
      case ir::IR::OpKind::NOT:
      case ir::IR::OpKind::NEG: {
        auto lhs = ResolveOpn2Value(&(ir.opn1_), ssabb);
        auto res_comp_name = ir.res_.GetCompName();
        auto res = new UnaryOperator(new Type(Type::IntegerTyID), static_cast<UnaryOperator::OpKind>(GetOpKind(ir.op_)),
                                     res_comp_name, lhs, ssabb);
        ProcessResValue(res_comp_name, &(ir.res_), res, ssabb);
        break;
      }
      case ir::IR::OpKind::LABEL: {  // label ir已经全被删了 执行流不会到这里
        MyAssert(0);
        break;
      }
      case ir::IR::OpKind::PARAM: {  // param ir全部跳过 等call的时候处理
        break;
      }
      case ir::IR::OpKind::CALL: {
        auto func_value = dynamic_cast<FunctionValue*>(glob_map[ir.opn1_.GetCompName()]);
        MyAssert(nullptr != func_value);
        // maintain call_func
        ssafunc->AddCallFunc(func_value);

        CallInst* call_inst = nullptr;
        if (ir.res_.type_ == Opn::Type::Null) {
          call_inst = new CallInst(func_value, ssabb);
        } else {
          auto res_comp_name = ir.res_.GetCompName();
          call_inst = new CallInst(new Type(Type::IntegerTyID), res_comp_name, func_value, ssabb);
          ProcessResValue(res_comp_name, &(ir.res_), call_inst, ssabb);
        }

        // 添加参数
        MyAssert(ir.opn2_.type_ == Opn::Type::Imm);
        // NOTE: a[10][10][10]  func(a[10]) many_params1|2 chaos_token
        static int temp_for_array_address_compute = 1;
        int arg_num = ir.opn2_.imm_num_;
        for (int i = 1; i <= arg_num; ++i) {
          auto param_ir = **(ir_iter - i);
          auto val = ResolveOpn2Value(&(param_ir.opn1_), ssabb);
          if (param_ir.opn1_.type_ == Opn::Type::Array) {
            // 先把基址+偏移算到一个temp value里 再把temp value加到arg里 不必记录
            // param_ir.PrintIR(std::cout);
            auto offset_val = ResolveOpn2Value(param_ir.opn1_.offset_, ssabb) /*一定找得到 不会新加指令*/;
            auto final_address = new BinaryOperator(val->GetType(), BinaryOperator::ADD,
                                                    std::to_string(temp_for_array_address_compute++) + "-temp", val,
                                                    offset_val, call_inst);
            call_inst->AddArg(final_address);
          } else {
            call_inst->AddArg(val);
          }
        }
        break;
      }
      case ir::IR::OpKind::RET: {
        if (ir.opn1_.type_ != ir::Opn::Type::Null) {  // return int;
          auto ret_val = ResolveOpn2Value(&(ir.opn1_), ssabb);
          new ReturnInst(ret_val, ssabb);
        } else {  // return void;
          new ReturnInst(ssabb);
        }
        break;
      }
      case ir::IR::OpKind::GOTO: {
        auto bb_val = dynamic_cast<BasicBlockValue*>(ResolveOpn2Value(&(ir.opn1_), ssabb));
        MyAssert(nullptr != bb_val);
        new BranchInst(bb_val, ssabb);
        break;
      }
      case ir::IR::OpKind::ASSIGN: {
        auto val = ResolveOpn2Value(&(ir.opn1_), ssabb);
        auto res_comp_name = ir.res_.GetCompName();
        Value* res = nullptr;
        if (ir.res_.type_ != ir::Opn::Type::Array) {  // NOTE: consider array address
          if (0 == ir.res_.scope_id_) {
            auto glob_var = glob_map[res_comp_name];
            new StoreInst(val, glob_var, ssabb);

            // maintain used_glob_var
            ssafunc->AddUsedGlobVar(dynamic_cast<GlobalVariable*>(glob_var));
          } else {
            res = new MovInst(val->GetType(), res_comp_name, val, ssabb);
            work_map[res_comp_name] = res;
          }
        } else {
          auto arr_base_ptr = ResolveOpn2Value(&(ir.res_), ssabb);
          MyAssert(arr_base_ptr->GetType()->IsPointer());
          auto offset = ResolveOpn2Value(ir.res_.offset_, ssabb);
          new StoreInst(val, arr_base_ptr, offset, ssabb);
        }
        break;
      }
      case ir::IR::OpKind::ASSIGN_OFFSET: {
        MyAssert(ir.opn1_.type_ == ir::Opn::Type::Array);
        auto arr_base_ptr = ResolveOpn2Value(&(ir.opn1_), ssabb);
        MyAssert(arr_base_ptr->GetType()->IsPointer());
        auto offset = ResolveOpn2Value(ir.opn1_.offset_, ssabb);

        auto res_comp_name = ir.res_.GetCompName();
        auto res = new LoadInst(new Type(Type::IntegerTyID), res_comp_name, arr_base_ptr, offset, ssabb);
        ProcessResValue(res_comp_name, &(ir.res_), res, ssabb);
        break;
      }
      case ir::IR::OpKind::JEQ:
      case ir::IR::OpKind::JNE:
      case ir::IR::OpKind::JLT:
      case ir::IR::OpKind::JLE:
      case ir::IR::OpKind::JGT:
      case ir::IR::OpKind::JGE: {
        auto lhs = ResolveOpn2Value(&(ir.opn1_), ssabb);
        auto rhs = ResolveOpn2Value(&(ir.opn2_), ssabb);
        auto bb_val = dynamic_cast<BasicBlockValue*>(ResolveOpn2Value(&(ir.res_), ssabb));
        MyAssert(nullptr != bb_val);
        new BranchInst(static_cast<BranchInst::Cond>(GetOpKind(ir.op_)), lhs, rhs, bb_val, ssabb);
        break;
      }
      case ir::IR::OpKind::VOID: {
        MyAssert(0);
        break;
      }
      case ir::IR::OpKind::PHI: {
        MyAssert(0 != ir.res_.scope_id_);  // 不会出现全局变量的phi结点
        auto res_comp_name = ir.res_.GetCompName();
        auto phi_inst = new PhiInst(new Type(Type::IntegerTyID), res_comp_name, ssabb);
        // 此时有的变量还未定义 不能在现在填
        // for (int i = 0; i < ir.phi_args_.size(); ++i) {
        //   auto arg_val = ResolveOpn2Value(&ir.phi_args_[i], ssabb);
        //   phi_inst->AddParam(arg_val, bb_map[bb->pred_[i]]->GetValue());
        // }
        ProcessResValue(res_comp_name, &(ir.res_), phi_inst, ssabb);
        break;
      }
      case ir::IR::OpKind::ALLOCA: {
        // alloca opn - imm : alloca quad-ir only for array. regard opn as one dimensional array
        MyAssert(ir.res_.type_ == ir::Opn::Type::Imm);

        // create a value which owns i32 pointer type
        auto ptr_type = new Type(Type::PointerTyID);
        const auto& array_name = ir.opn1_.GetCompName();
        auto value = new Value(ptr_type, array_name);
        work_map[array_name] = value;

        // auto type = new ArrayType(ir.res_.imm_num_);
        // new AllocaInst(type, ssabb);
        new AllocaInst(new ConstantInt(ir.res_.imm_num_), value, ssabb);

        break;
      }
      case ir::IR::OpKind::DECLARE: {
        // 生成argument 记录映射 以防函数参数被认为是未定义变量
        auto arg_comp_name = ir.opn1_.GetCompName();
        if (ir.opn1_.type_ == Opn::Type::Var) {
          work_map[arg_comp_name] =
              new Argument(new Type(Type::IntegerTyID), arg_comp_name, ir.res_.imm_num_, ssafunc->GetValue());
        } else {
          work_map[arg_comp_name] =
              new Argument(new Type(Type::PointerTyID), arg_comp_name, ir.res_.imm_num_, ssafunc->GetValue());
        }
        break;
      }
      default: {
        MyAssert(0);
        break;
      }
    }  // end of ir_op switch
  }    // end of ir for loop
}

// Assembly:
subq $0x878, %rsp            # imm = 0x878
movq %rdi, 0x870(%rsp)
movq %rsi, 0x868(%rsp)
movq %rdx, 0x860(%rsp)
movq %rcx, 0x858(%rsp)
movq 0x870(%rsp), %rax
movq %rax, 0x3c8(%rsp)
xorl %eax, %eax
cmpq 0x868(%rsp), %rax
jne 0x8a618
jmp 0x8c770
movq 0x858(%rsp), %rdi
leaq 0x868(%rsp), %rsi
callq 0x8d4b0
movq (%rax), %rax
movq %rax, 0x850(%rsp)
xorl %eax, %eax
cmpq 0x850(%rsp), %rax
jne 0x8a69b
movq 0xc199d(%rip), %rdi     # 0x14bfe8
leaq 0x6faa6(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, %rdi
leaq 0x73244(%rip), %rsi     # 0xfd8a5
callq 0x8330
movq %rax, %rdi
leaq 0x70d7a(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, %rdi
movl $0x113, %esi            # imm = 0x113
callq 0x8650
movq %rax, %rdi
movq 0xc18f4(%rip), %rsi     # 0x14bf80
callq 0x8380
movl $0xff, %edi
callq 0x8460
movq 0x868(%rsp), %rdi
addq $0x8, %rdi
callq 0x1b070
movq %rax, 0x848(%rsp)
movq 0x868(%rsp), %rdi
addq $0x8, %rdi
callq 0x1aeb0
movq %rax, 0x840(%rsp)
leaq 0x848(%rsp), %rdi
leaq 0x840(%rsp), %rsi
callq 0x493c0
testb $0x1, %al
jne 0x8a6eb
jmp 0x8c770
leaq 0x848(%rsp), %rdi
callq 0x1b4d0
movq (%rax), %rsi
leaq 0x760(%rsp), %rdi
callq 0x8d7d0
movl 0x760(%rsp), %eax
movq %rax, 0x3c0(%rsp)
subq $0x17, %rax
ja 0x8c6c5
movq 0x3c0(%rsp), %rax
leaq 0x73108(%rip), %rcx     # 0xfd838
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x3c8(%rsp), %rdi
leaq 0x768(%rsp), %rsi
movq 0x850(%rsp), %rdx
callq 0x876c0
movq %rax, 0x3b8(%rsp)
jmp 0x8a760
movq 0x3c8(%rsp), %rdi
movq 0x3b8(%rsp), %rax
movq %rax, 0x758(%rsp)
leaq 0x7a8(%rsp), %rsi
movq 0x850(%rsp), %rdx
callq 0x876c0
movq %rax, 0x3b0(%rsp)
jmp 0x8a797
movq 0x3b0(%rsp), %rax
movq %rax, 0x740(%rsp)
leaq 0x7e8(%rsp), %rsi
leaq 0x720(%rsp), %rdi
callq 0x43590
jmp 0x8a7be
movl $0x70, %edi
callq 0x8340
movq %rax, 0x3a8(%rsp)
jmp 0x8a7d2
movb $0x1, 0x6f7(%rsp)
movl $0x10, %edi
callq 0x8340
movq %rax, 0x3a0(%rsp)
jmp 0x8a7ee
movq 0x3a0(%rsp), %rdi
movl $0x2, %esi
callq 0x5e410
jmp 0x8a802
movl 0x760(%rsp), %edi
callq 0x87dd0
movl %eax, 0x39c(%rsp)
leaq 0x6f8(%rsp), %rdi
leaq 0x720(%rsp), %rsi
callq 0x81a0
jmp 0x8a82c
movl 0x39c(%rsp), %edx
movq 0x3a0(%rsp), %rsi
movq 0x3a8(%rsp), %rdi
movq 0x758(%rsp), %r8
movq 0x740(%rsp), %r9
movq 0x850(%rsp), %rcx
movq %rsp, %rax
movq %rcx, (%rax)
leaq 0x6f8(%rsp), %rcx
callq 0x8d8d0
jmp 0x8a870
movb $0x0, 0x6f7(%rsp)
leaq 0x6f8(%rsp), %rdi
callq 0x8728
movq 0x3a8(%rsp), %rax
movq 0x3c8(%rsp), %rdi
movq %rax, 0x718(%rsp)
leaq 0x7e8(%rsp), %rdx
movq 0x718(%rsp), %rcx
movq 0x850(%rsp), %r8
leaq 0x720(%rsp), %rsi
callq 0x87520
jmp 0x8a8c4
leaq 0x720(%rsp), %rdi
callq 0x8728
jmp 0x8c742
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
jmp 0x8c761
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
jmp 0x8a984
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
jmp 0x8a964
movq 0x3a0(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
movl $0x10, %esi
callq 0x8350
jmp 0x8a964
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
leaq 0x6f8(%rsp), %rdi
callq 0x8728
testb $0x1, 0x6f7(%rsp)
jne 0x8a970
jmp 0x8a982
movq 0x3a8(%rsp), %rdi
movl $0x70, %esi
callq 0x8350
jmp 0x8a984
leaq 0x720(%rsp), %rdi
callq 0x8728
jmp 0x8c761
movq 0x3c8(%rsp), %rdi
leaq 0x768(%rsp), %rsi
movq 0x850(%rsp), %rdx
callq 0x876c0
movq %rax, 0x390(%rsp)
jmp 0x8a9bd
movq 0x390(%rsp), %rax
movq %rax, 0x6e8(%rsp)
leaq 0x7e8(%rsp), %rsi
leaq 0x6c8(%rsp), %rdi
callq 0x43590
jmp 0x8a9e4
movl $0x70, %edi
callq 0x8340
movq %rax, 0x388(%rsp)
jmp 0x8a9f8
movb $0x1, 0x69f(%rsp)
movl $0x10, %edi
callq 0x8340
movq %rax, 0x380(%rsp)
jmp 0x8aa14
movq 0x380(%rsp), %rdi
movl $0x2, %esi
callq 0x5e410
jmp 0x8aa28
movl 0x760(%rsp), %edi
callq 0x87dd0
movl %eax, 0x37c(%rsp)
leaq 0x6a0(%rsp), %rdi
leaq 0x6c8(%rsp), %rsi
callq 0x81a0
jmp 0x8aa52
movl 0x37c(%rsp), %edx
movq 0x380(%rsp), %rsi
movq 0x388(%rsp), %rdi
movq 0x6e8(%rsp), %r8
movq 0x850(%rsp), %r9
leaq 0x6a0(%rsp), %rcx
callq 0x8da20
jmp 0x8aa88
movb $0x0, 0x69f(%rsp)
leaq 0x6a0(%rsp), %rdi
callq 0x8728
movq 0x388(%rsp), %rax
movq 0x3c8(%rsp), %rdi
movq %rax, 0x6c0(%rsp)
leaq 0x7e8(%rsp), %rdx
movq 0x6c0(%rsp), %rcx
movq 0x850(%rsp), %r8
leaq 0x6c8(%rsp), %rsi
callq 0x87520
jmp 0x8aadc
leaq 0x6c8(%rsp), %rdi
callq 0x8728
jmp 0x8c742
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
jmp 0x8ab83
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
jmp 0x8ab63
movq 0x380(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
movl $0x10, %esi
callq 0x8350
jmp 0x8ab63
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
leaq 0x6a0(%rsp), %rdi
callq 0x8728
testb $0x1, 0x69f(%rsp)
jne 0x8ab6f
jmp 0x8ab81
movq 0x388(%rsp), %rdi
movl $0x70, %esi
callq 0x8350
jmp 0x8ab83
leaq 0x6c8(%rsp), %rdi
callq 0x8728
jmp 0x8c761
movq 0xc144c(%rip), %rdi     # 0x14bfe8
leaq 0x6f555(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, 0x370(%rsp)
jmp 0x8abb2
movq 0x370(%rsp), %rdi
leaq 0x72ce4(%rip), %rsi     # 0xfd8a5
callq 0x8330
movq %rax, 0x368(%rsp)
jmp 0x8abd0
movq 0x368(%rsp), %rdi
leaq 0x7080b(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, 0x360(%rsp)
jmp 0x8abee
movq 0x360(%rsp), %rdi
movl $0x137, %esi            # imm = 0x137
callq 0x8650
movq %rax, 0x358(%rsp)
jmp 0x8ac0a
movq 0x358(%rsp), %rdi
movq 0xc1367(%rip), %rsi     # 0x14bf80
callq 0x8380
jmp 0x8ac20
movl $0xff, %edi
callq 0x8460
jmp 0x8c742
movq 0x3c8(%rsp), %rax
addq $0xe0, %rax
movq %rax, 0x350(%rsp)
leaq 0x768(%rsp), %rsi
leaq 0x670(%rsp), %rdi
callq 0x43590
jmp 0x8ac5c
movq 0x350(%rsp), %rdi
leaq 0x670(%rsp), %rsi
callq 0x8d2f0
movq %rax, 0x348(%rsp)
jmp 0x8ac7b
movq 0x348(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x340(%rsp)
cmpq $0x0, %rax
je 0x8ace3
movq 0x340(%rsp), %rdi
leaq 0xc082d(%rip), %rsi     # 0x14b4d0
leaq 0xc087e(%rip), %rdx     # 0x14b528
xorl %eax, %eax
movl %eax, %ecx
callq 0x8410
movq %rax, 0x338(%rsp)
jmp 0x8acef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
leaq 0x670(%rsp), %rdi
callq 0x8728
jmp 0x8c761
xorl %eax, %eax
movq %rax, 0x338(%rsp)
jmp 0x8acef
movq 0x338(%rsp), %rax
movq %rax, 0x330(%rsp)
leaq 0x670(%rsp), %rdi
callq 0x8728
movq 0x330(%rsp), %rax
movq %rax, 0x690(%rsp)
xorl %eax, %eax
cmpq 0x690(%rsp), %rax
jne 0x8adc1
movq 0xc12b5(%rip), %rdi     # 0x14bfe8
leaq 0x6f3be(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, 0x328(%rsp)
jmp 0x8ad49
movq 0x328(%rsp), %rdi
leaq 0x72b4d(%rip), %rsi     # 0xfd8a5
callq 0x8330
movq %rax, 0x320(%rsp)
jmp 0x8ad67
movq 0x320(%rsp), %rdi
leaq 0x70674(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, 0x318(%rsp)
jmp 0x8ad85
movq 0x318(%rsp), %rdi
movl $0x13f, %esi            # imm = 0x13F
callq 0x8650
movq %rax, 0x310(%rsp)
jmp 0x8ada1
movq 0x310(%rsp), %rdi
movq 0xc11d0(%rip), %rsi     # 0x14bf80
callq 0x8380
jmp 0x8adb7
movl $0xff, %edi
callq 0x8460
movq 0x860(%rsp), %rdi
movq 0x690(%rsp), %rsi
callq 0x61400
jmp 0x8add8
movq $0x0, 0x668(%rsp)
cmpl $0x4, 0x7e8(%rsp)
jne 0x8ae61
movl $0x68, %edi
callq 0x8340
movq %rax, 0x308(%rsp)
jmp 0x8ae02
movq 0x308(%rsp), %rdi
movq 0x690(%rsp), %rsi
movq 0x850(%rsp), %rdx
callq 0x8db00
jmp 0x8ae21
movq 0x308(%rsp), %rax
movq %rax, 0x668(%rsp)
jmp 0x8afa7
movq 0x308(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
movl $0x68, %esi
callq 0x8350
jmp 0x8c761
leaq 0x7e8(%rsp), %rsi
leaq 0x648(%rsp), %rdi
callq 0x43590
jmp 0x8ae78
movl $0x68, %edi
callq 0x8340
movq %rax, 0x300(%rsp)
jmp 0x8ae8c
movl $0x10, %edi
callq 0x8340
movq %rax, 0x2f8(%rsp)
jmp 0x8aea0
movq 0x2f8(%rsp), %rdi
movl $0x2, %esi
callq 0x5e410
jmp 0x8aeb4
movq 0x2f8(%rsp), %rsi
movq 0x300(%rsp), %rdi
movq 0x690(%rsp), %rcx
movq 0x850(%rsp), %r8
leaq 0x648(%rsp), %rdx
callq 0x8dc80
jmp 0x8aee3
movq 0x3c8(%rsp), %rdi
movq 0x300(%rsp), %rax
movq %rax, 0x668(%rsp)
leaq 0x7e8(%rsp), %rdx
movq 0x668(%rsp), %rcx
movq 0x850(%rsp), %r8
leaq 0x648(%rsp), %rsi
callq 0x87520
jmp 0x8af22
leaq 0x648(%rsp), %rdi
callq 0x8728
jmp 0x8afa7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
jmp 0x8af95
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
jmp 0x8af83
movq 0x2f8(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
movl $0x10, %esi
callq 0x8350
movq 0x300(%rsp), %rdi
movl $0x68, %esi
callq 0x8350
leaq 0x648(%rsp), %rdi
callq 0x8728
jmp 0x8c761
cmpl $0x1, 0x7a8(%rsp)
je 0x8b04a
movq 0xc102c(%rip), %rdi     # 0x14bfe8
leaq 0x6f135(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, 0x2f0(%rsp)
jmp 0x8afd2
movq 0x2f0(%rsp), %rdi
leaq 0x728c4(%rip), %rsi     # 0xfd8a5
callq 0x8330
movq %rax, 0x2e8(%rsp)
jmp 0x8aff0
movq 0x2e8(%rsp), %rdi
leaq 0x703eb(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, 0x2e0(%rsp)
jmp 0x8b00e
movq 0x2e0(%rsp), %rdi
movl $0x14d, %esi            # imm = 0x14D
callq 0x8650
movq %rax, 0x2d8(%rsp)
jmp 0x8b02a
movq 0x2d8(%rsp), %rdi
movq 0xc0f47(%rip), %rsi     # 0x14bf80
callq 0x8380
jmp 0x8b040
movl $0xff, %edi
callq 0x8460
movl 0x7ac(%rsp), %eax
movl %eax, 0x644(%rsp)
movl $0x1, 0x640(%rsp)
movl 0x640(%rsp), %eax
cmpl 0x644(%rsp), %eax
jg 0x8b30d
movslq 0x640(%rsp), %rsi
leaq 0x848(%rsp), %rdi
callq 0x1b480
movq %rax, 0x558(%rsp)
leaq 0x558(%rsp), %rdi
callq 0x1b4d0
movq (%rax), %rsi
leaq 0x560(%rsp), %rdi
callq 0x8d7d0
jmp 0x8b0b3
movq 0x3c8(%rsp), %rdi
leaq 0x568(%rsp), %rsi
movq 0x850(%rsp), %rdx
callq 0x876c0
movq %rax, 0x2d0(%rsp)
jmp 0x8b0da
movq 0x2d0(%rsp), %rax
movq %rax, 0x550(%rsp)
cmpl $0x5, 0x568(%rsp)
jne 0x8b2bf
movq 0x3c8(%rsp), %rdi
movq 0x598(%rsp), %rsi
movq 0x850(%rsp), %rdx
callq 0x876c0
movq %rax, 0x2c8(%rsp)
jmp 0x8b11f
movq 0x2c8(%rsp), %rax
movq %rax, 0x548(%rsp)
movl $0x70, %edi
callq 0x8340
movq %rax, 0x2c0(%rsp)
jmp 0x8b143
movb $0x1, 0x4ff(%rsp)
movq 0x550(%rsp), %rdi
callq 0x5e940
movq %rax, 0x2b8(%rsp)
jmp 0x8b162
movl 0xc124c(%rip), %esi     # 0x14c3b4
movl %esi, %eax
incl %eax
movl %eax, 0xc1242(%rip)     # 0x14c3b4
leaq 0x500(%rsp), %rdi
callq 0xc7b0
jmp 0x8b181
leaq 0x72743(%rip), %rdx     # 0xfd8cb
leaq 0x520(%rsp), %rdi
leaq 0x500(%rsp), %rsi
callq 0xcbd0
jmp 0x8b19f
movq 0x2b8(%rsp), %rsi
movq 0x2c0(%rsp), %rdi
movq 0x550(%rsp), %r8
movq 0x548(%rsp), %r9
movq 0x668(%rsp), %rcx
movq %rsp, %rax
movq %rcx, (%rax)
xorl %edx, %edx
leaq 0x520(%rsp), %rcx
callq 0x8dd50
jmp 0x8b1de
movb $0x0, 0x4ff(%rsp)
leaq 0x520(%rsp), %rdi
callq 0x8728
leaq 0x500(%rsp), %rdi
callq 0x8728
movq 0x2c0(%rsp), %rax
movq %rax, 0x540(%rsp)
movq 0x668(%rsp), %rdi
movq 0x540(%rsp), %rsi
callq 0x8dea0
jmp 0x8b227
jmp 0x8b2d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
jmp 0x8b2fb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
jmp 0x8b29f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
jmp 0x8b292
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
leaq 0x520(%rsp), %rdi
callq 0x8728
leaq 0x500(%rsp), %rdi
callq 0x8728
testb $0x1, 0x4ff(%rsp)
jne 0x8b2ab
jmp 0x8b2bd
movq 0x2c0(%rsp), %rdi
movl $0x70, %esi
callq 0x8350
jmp 0x8b2fb
movq 0x668(%rsp), %rdi
movq 0x550(%rsp), %rsi
callq 0x8dea0
jmp 0x8b2d6
jmp 0x8b2d8
leaq 0x560(%rsp), %rdi
callq 0x49400
movl 0x640(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x640(%rsp)
jmp 0x8b063
leaq 0x560(%rsp), %rdi
callq 0x49400
jmp 0x8c761
jmp 0x8c742
cmpl $0x4, 0x768(%rsp)
je 0x8b3ba
movq 0x3c8(%rsp), %rdi
leaq 0x768(%rsp), %rsi
movq 0x850(%rsp), %rdx
callq 0x876c0
movq %rax, 0x2b0(%rsp)
jmp 0x8b347
movq 0x2b0(%rsp), %rax
movq %rax, 0x4f0(%rsp)
movl $0x68, %edi
callq 0x8340
movq %rax, 0x2a8(%rsp)
jmp 0x8b36b
movq 0x2a8(%rsp), %rdi
movq 0x4f0(%rsp), %rsi
movq 0x850(%rsp), %rdx
callq 0x8df20
jmp 0x8b38a
jmp 0x8b412
movq 0x2a8(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
movl $0x68, %esi
callq 0x8350
jmp 0x8c761
movl $0x68, %edi
callq 0x8340
movq %rax, 0x2a0(%rsp)
jmp 0x8b3ce
movq 0x2a0(%rsp), %rdi
movq 0x850(%rsp), %rsi
callq 0x8e0a0
jmp 0x8b3e5
jmp 0x8b412
movq 0x2a0(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
movl $0x68, %esi
callq 0x8350
jmp 0x8c761
jmp 0x8c742
movq 0x3c8(%rsp), %rdi
leaq 0x768(%rsp), %rsi
movq 0x850(%rsp), %rdx
callq 0x876c0
movq %rax, 0x298(%rsp)
jmp 0x8b43e
movq 0x298(%rsp), %rax
cmpq $0x0, %rax
je 0x8b475
movq 0x298(%rsp), %rdi
leaq 0xc0075(%rip), %rsi     # 0x14b4d0
leaq 0xc00ae(%rip), %rdx     # 0x14b510
xorl %eax, %eax
movl %eax, %ecx
callq 0x8410
movq %rax, 0x290(%rsp)
jmp 0x8b481
xorl %eax, %eax
movq %rax, 0x290(%rsp)
jmp 0x8b481
movq 0x290(%rsp), %rax
movq %rax, 0x4e8(%rsp)
xorl %eax, %eax
cmpq 0x4e8(%rsp), %rax
jne 0x8b536
movq 0xc0b40(%rip), %rdi     # 0x14bfe8
leaq 0x6ec49(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, 0x288(%rsp)
jmp 0x8b4be
movq 0x288(%rsp), %rdi
leaq 0x723d8(%rip), %rsi     # 0xfd8a5
callq 0x8330
movq %rax, 0x280(%rsp)
jmp 0x8b4dc
movq 0x280(%rsp), %rdi
leaq 0x6feff(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, 0x278(%rsp)
jmp 0x8b4fa
movq 0x278(%rsp), %rdi
movl $0x16d, %esi            # imm = 0x16D
callq 0x8650
movq %rax, 0x270(%rsp)
jmp 0x8b516
movq 0x270(%rsp), %rdi
movq 0xc0a5b(%rip), %rsi     # 0x14bf80
callq 0x8380
jmp 0x8b52c
movl $0xff, %edi
callq 0x8460
movl $0x70, %edi
callq 0x8340
movq %rax, 0x268(%rsp)
jmp 0x8b54a
movq 0x268(%rsp), %rdi
movq 0x4e8(%rsp), %rsi
movq 0x850(%rsp), %rdx
callq 0x8e1a0
jmp 0x8b569
jmp 0x8c742
movq 0x268(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
movl $0x70, %esi
callq 0x8350
jmp 0x8c761
movq 0x3c8(%rsp), %rdi
leaq 0x768(%rsp), %rsi
movq 0x850(%rsp), %rdx
callq 0x876c0
movq %rax, 0x260(%rsp)
jmp 0x8b5c0
movq 0x260(%rsp), %rax
movq %rax, 0x4e0(%rsp)
leaq 0x7e8(%rsp), %rsi
leaq 0x4c0(%rsp), %rdi
callq 0x43590
jmp 0x8b5e7
movq $0x0, 0x4b8(%rsp)
cmpl $0x5, 0x7e8(%rsp)
je 0x8b824
xorl %eax, %eax
cmpl 0x810(%rsp), %eax
jne 0x8b73f
movq 0x3c8(%rsp), %rdi
addq $0xe0, %rdi
leaq 0x4c0(%rsp), %rsi
callq 0x8cd60
movq %rax, 0x258(%rsp)
jmp 0x8b636
movq 0x258(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x4b0(%rsp)
movl $0x68, %edi
callq 0x8340
movq %rax, 0x250(%rsp)
jmp 0x8b65d
movq 0x250(%rsp), %rdi
movq 0x4e0(%rsp), %rsi
movq 0x4b0(%rsp), %rdx
movq 0x850(%rsp), %rcx
callq 0x8cd90
jmp 0x8b684
movq 0x860(%rsp), %rax
movq %rax, 0x240(%rsp)
movq 0x4b0(%rsp), %rax
movq %rax, 0x248(%rsp)
cmpq $0x0, %rax
je 0x8b717
movq 0x248(%rsp), %rdi
leaq 0xbfe17(%rip), %rsi     # 0x14b4d0
leaq 0xbfe20(%rip), %rdx     # 0x14b4e0
xorl %eax, %eax
movl %eax, %ecx
callq 0x8410
movq %rax, 0x238(%rsp)
jmp 0x8b723
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
jmp 0x8b9e8
movq 0x250(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
movl $0x68, %esi
callq 0x8350
jmp 0x8b9e8
xorl %eax, %eax
movq %rax, 0x238(%rsp)
jmp 0x8b723
movq 0x240(%rsp), %rdi
movq 0x238(%rsp), %rsi
callq 0x614c0
jmp 0x8b73a
jmp 0x8b81f
movl $0x68, %edi
callq 0x8340
movq %rax, 0x230(%rsp)
jmp 0x8b753
movq 0x4e0(%rsp), %rdi
callq 0x5e940
movq %rax, 0x228(%rsp)
jmp 0x8b76a
movq 0x228(%rsp), %rsi
movq 0x230(%rsp), %rdi
movq 0x4e0(%rsp), %rcx
movq 0x850(%rsp), %r8
leaq 0x4c0(%rsp), %rdx
callq 0x8e330
jmp 0x8b799
movq 0x3c8(%rsp), %rdi
movq 0x230(%rsp), %rax
movq %rax, 0x4b8(%rsp)
movq 0x4b8(%rsp), %rax
movq %rax, 0x218(%rsp)
addq $0xa8, %rdi
leaq 0x4c0(%rsp), %rsi
callq 0x8cd60
movq %rax, 0x220(%rsp)
jmp 0x8b7df
movq 0x220(%rsp), %rax
movq 0x218(%rsp), %rcx
movq %rcx, (%rax)
jmp 0x8b81f
movq 0x230(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
movl $0x68, %esi
callq 0x8350
jmp 0x8b9e8
jmp 0x8b9d6
movq 0x3c8(%rsp), %rdi
leaq 0x7e8(%rsp), %rsi
movq 0x850(%rsp), %rdx
callq 0x876c0
movq %rax, 0x210(%rsp)
jmp 0x8b84b
movq 0x210(%rsp), %rax
movq %rax, 0x4a8(%rsp)
movq 0x4a8(%rsp), %rdi
callq 0x5e940
movq %rax, 0x208(%rsp)
jmp 0x8b872
movq 0x208(%rsp), %rdi
movq (%rdi), %rax
movq 0x30(%rax), %rax
callq *%rax
movb %al, 0x207(%rsp)
jmp 0x8b88c
movb 0x207(%rsp), %al
testb $0x1, %al
jne 0x8b932
jmp 0x8b89d
movq 0xc0744(%rip), %rdi     # 0x14bfe8
leaq 0x6e84d(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, 0x1f8(%rsp)
jmp 0x8b8ba
movq 0x1f8(%rsp), %rdi
leaq 0x71fdc(%rip), %rsi     # 0xfd8a5
callq 0x8330
movq %rax, 0x1f0(%rsp)
jmp 0x8b8d8
movq 0x1f0(%rsp), %rdi
leaq 0x6fb03(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, 0x1e8(%rsp)
jmp 0x8b8f6
movq 0x1e8(%rsp), %rdi
movl $0x182, %esi            # imm = 0x182
callq 0x8650
movq %rax, 0x1e0(%rsp)
jmp 0x8b912
movq 0x1e0(%rsp), %rdi
movq 0xc065f(%rip), %rsi     # 0x14bf80
callq 0x8380
jmp 0x8b928
movl $0xff, %edi
callq 0x8460
movq 0x3c8(%rsp), %rdi
movq 0x818(%rsp), %rsi
movq 0x850(%rsp), %rdx
callq 0x876c0
movq %rax, 0x1d8(%rsp)
jmp 0x8b959
movq 0x1d8(%rsp), %rax
movq %rax, 0x4a0(%rsp)
movl $0x68, %edi
callq 0x8340
movq %rax, 0x1d0(%rsp)
jmp 0x8b97d
movq 0x1d0(%rsp), %rdi
movq 0x4e0(%rsp), %rsi
movq 0x4a8(%rsp), %rdx
movq 0x4a0(%rsp), %rcx
movq 0x850(%rsp), %r8
callq 0x8e400
jmp 0x8b9ac
jmp 0x8b9d6
movq 0x1d0(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
movl $0x68, %esi
callq 0x8350
jmp 0x8b9e8
leaq 0x4c0(%rsp), %rdi
callq 0x8728
jmp 0x8c742
leaq 0x4c0(%rsp), %rdi
callq 0x8728
jmp 0x8c761
cmpl $0x5, 0x768(%rsp)
je 0x8ba9d
movq 0xc05d9(%rip), %rdi     # 0x14bfe8
leaq 0x6e6e2(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, 0x1c8(%rsp)
jmp 0x8ba25
movq 0x1c8(%rsp), %rdi
leaq 0x71e71(%rip), %rsi     # 0xfd8a5
callq 0x8330
movq %rax, 0x1c0(%rsp)
jmp 0x8ba43
movq 0x1c0(%rsp), %rdi
leaq 0x6f998(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, 0x1b8(%rsp)
jmp 0x8ba61
movq 0x1b8(%rsp), %rdi
movl $0x189, %esi            # imm = 0x189
callq 0x8650
movq %rax, 0x1b0(%rsp)
jmp 0x8ba7d
movq 0x1b0(%rsp), %rdi
movq 0xc04f4(%rip), %rsi     # 0x14bf80
callq 0x8380
jmp 0x8ba93
movl $0xff, %edi
callq 0x8460
movq 0x3c8(%rsp), %rdi
leaq 0x768(%rsp), %rsi
movq 0x850(%rsp), %rdx
callq 0x876c0
movq %rax, 0x1a8(%rsp)
jmp 0x8bac4
movq 0x1a8(%rsp), %rax
movq %rax, 0x498(%rsp)
movq 0x498(%rsp), %rdi
callq 0x5e940
movq %rax, 0x1a0(%rsp)
jmp 0x8baeb
movq 0x1a0(%rsp), %rdi
movq (%rdi), %rax
movq 0x30(%rax), %rax
callq *%rax
movb %al, 0x19f(%rsp)
jmp 0x8bb05
movb 0x19f(%rsp), %al
testb $0x1, %al
jne 0x8bbab
jmp 0x8bb16
movq 0xc04cb(%rip), %rdi     # 0x14bfe8
leaq 0x6e5d4(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, 0x190(%rsp)
jmp 0x8bb33
movq 0x190(%rsp), %rdi
leaq 0x71d63(%rip), %rsi     # 0xfd8a5
callq 0x8330
movq %rax, 0x188(%rsp)
jmp 0x8bb51
movq 0x188(%rsp), %rdi
leaq 0x6f88a(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, 0x180(%rsp)
jmp 0x8bb6f
movq 0x180(%rsp), %rdi
movl $0x18b, %esi            # imm = 0x18B
callq 0x8650
movq %rax, 0x178(%rsp)
jmp 0x8bb8b
movq 0x178(%rsp), %rdi
movq 0xc03e6(%rip), %rsi     # 0x14bf80
callq 0x8380
jmp 0x8bba1
movl $0xff, %edi
callq 0x8460
movq 0x3c8(%rsp), %rdi
movq 0x798(%rsp), %rsi
movq 0x850(%rsp), %rdx
callq 0x876c0
movq %rax, 0x170(%rsp)
jmp 0x8bbd2
movq 0x170(%rsp), %rax
movq %rax, 0x490(%rsp)
leaq 0x7e8(%rsp), %rsi
leaq 0x470(%rsp), %rdi
callq 0x43590
jmp 0x8bbf9
movl $0x68, %edi
callq 0x8340
movq %rax, 0x168(%rsp)
jmp 0x8bc0d
movl $0x10, %edi
callq 0x8340
movq %rax, 0x160(%rsp)
jmp 0x8bc21
movq 0x160(%rsp), %rdi
movl $0x2, %esi
callq 0x5e410
jmp 0x8bc35
movq 0x160(%rsp), %rsi
movq 0x168(%rsp), %rdi
movq 0x498(%rsp), %rcx
movq 0x490(%rsp), %r8
movq 0x850(%rsp), %r9
leaq 0x470(%rsp), %rdx
callq 0x8e680
jmp 0x8bc6c
movq 0x3c8(%rsp), %rdi
movq 0x168(%rsp), %rax
movq %rax, 0x468(%rsp)
leaq 0x7e8(%rsp), %rdx
movq 0x468(%rsp), %rcx
movq 0x850(%rsp), %r8
leaq 0x470(%rsp), %rsi
callq 0x87520
jmp 0x8bcab
leaq 0x470(%rsp), %rdi
callq 0x8728
jmp 0x8c742
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
jmp 0x8bd21
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
jmp 0x8bd0f
movq 0x160(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
movl $0x10, %esi
callq 0x8350
movq 0x168(%rsp), %rdi
movl $0x68, %esi
callq 0x8350
leaq 0x470(%rsp), %rdi
callq 0x8728
jmp 0x8c761
movq 0x3c8(%rsp), %rdi
leaq 0x768(%rsp), %rsi
movq 0x850(%rsp), %rdx
callq 0x876c0
movq %rax, 0x158(%rsp)
jmp 0x8bd5a
movq 0x3c8(%rsp), %rdi
movq 0x158(%rsp), %rax
movq %rax, 0x460(%rsp)
leaq 0x7a8(%rsp), %rsi
movq 0x850(%rsp), %rdx
callq 0x876c0
movq %rax, 0x150(%rsp)
jmp 0x8bd91
movq 0x3c8(%rsp), %rdi
movq 0x150(%rsp), %rax
movq %rax, 0x458(%rsp)
leaq 0x7e8(%rsp), %rsi
movq 0x850(%rsp), %rdx
callq 0x876c0
movq %rax, 0x148(%rsp)
jmp 0x8bdc8
movq 0x148(%rsp), %rax
cmpq $0x0, %rax
je 0x8bdff
movq 0x148(%rsp), %rdi
leaq 0xbf6eb(%rip), %rsi     # 0x14b4d0
leaq 0xbf724(%rip), %rdx     # 0x14b510
xorl %eax, %eax
movl %eax, %ecx
callq 0x8410
movq %rax, 0x140(%rsp)
jmp 0x8be0b
xorl %eax, %eax
movq %rax, 0x140(%rsp)
jmp 0x8be0b
movq 0x140(%rsp), %rax
movq %rax, 0x450(%rsp)
xorl %eax, %eax
cmpq 0x450(%rsp), %rax
jne 0x8bec0
movq 0xc01b6(%rip), %rdi     # 0x14bfe8
leaq 0x6e2bf(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, 0x138(%rsp)
jmp 0x8be48
movq 0x138(%rsp), %rdi
leaq 0x71a4e(%rip), %rsi     # 0xfd8a5
callq 0x8330
movq %rax, 0x130(%rsp)
jmp 0x8be66
movq 0x130(%rsp), %rdi
leaq 0x6f575(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, 0x128(%rsp)
jmp 0x8be84
movq 0x128(%rsp), %rdi
movl $0x19c, %esi            # imm = 0x19C
callq 0x8650
movq %rax, 0x120(%rsp)
jmp 0x8bea0
movq 0x120(%rsp), %rdi
movq 0xc00d1(%rip), %rsi     # 0x14bf80
callq 0x8380
jmp 0x8beb6
movl $0xff, %edi
callq 0x8460
movl $0x70, %edi
callq 0x8340
movq %rax, 0x118(%rsp)
jmp 0x8bed4
movl 0x760(%rsp), %edi
callq 0x87dd0
movq 0x118(%rsp), %rdi
movl %eax, %esi
movq 0x460(%rsp), %rdx
movq 0x458(%rsp), %rcx
movq 0x450(%rsp), %r8
movq 0x850(%rsp), %r9
callq 0x8e7b0
jmp 0x8bf11
jmp 0x8c742
movq 0x118(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
movl $0x70, %esi
callq 0x8350
jmp 0x8c761
movq 0xc00a0(%rip), %rdi     # 0x14bfe8
leaq 0x6e1a9(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, 0x110(%rsp)
jmp 0x8bf5e
movq 0x110(%rsp), %rdi
leaq 0x71938(%rip), %rsi     # 0xfd8a5
callq 0x8330
movq %rax, 0x108(%rsp)
jmp 0x8bf7c
movq 0x108(%rsp), %rdi
leaq 0x6f45f(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, 0x100(%rsp)
jmp 0x8bf9a
movq 0x100(%rsp), %rdi
movl $0x1a1, %esi            # imm = 0x1A1
callq 0x8650
movq %rax, 0xf8(%rsp)
jmp 0x8bfb6
movq 0xf8(%rsp), %rdi
movq 0xbffbb(%rip), %rsi     # 0x14bf80
callq 0x8380
jmp 0x8bfcc
movl $0xff, %edi
callq 0x8460
xorl %eax, %eax
cmpl 0x810(%rsp), %eax
jne 0x8c07a
movq 0xbfffc(%rip), %rdi     # 0x14bfe8
leaq 0x6e105(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, 0xf0(%rsp)
jmp 0x8c002
movq 0xf0(%rsp), %rdi
leaq 0x71894(%rip), %rsi     # 0xfd8a5
callq 0x8330
movq %rax, 0xe8(%rsp)
jmp 0x8c020
movq 0xe8(%rsp), %rdi
leaq 0x6f3bb(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, 0xe0(%rsp)
jmp 0x8c03e
movq 0xe0(%rsp), %rdi
movl $0x1a5, %esi            # imm = 0x1A5
callq 0x8650
movq %rax, 0xd8(%rsp)
jmp 0x8c05a
movq 0xd8(%rsp), %rdi
movq 0xbff17(%rip), %rsi     # 0x14bf80
callq 0x8380
jmp 0x8c070
movl $0xff, %edi
callq 0x8460
leaq 0x7e8(%rsp), %rsi
leaq 0x430(%rsp), %rdi
callq 0x43590
jmp 0x8c091
movl $0x68, %edi
callq 0x8340
movq %rax, 0xd0(%rsp)
jmp 0x8c0a5
movl $0x10, %edi
callq 0x8340
movq %rax, 0xc8(%rsp)
jmp 0x8c0b9
movq 0xc8(%rsp), %rdi
movl $0x2, %esi
callq 0x5e410
jmp 0x8c0cd
movq 0xc8(%rsp), %rsi
movq 0xd0(%rsp), %rdi
movq 0x850(%rsp), %rcx
leaq 0x430(%rsp), %rdx
callq 0x8ea40
jmp 0x8c0f4
movq 0x3c8(%rsp), %rdi
movq 0xd0(%rsp), %rax
movq %rax, 0x428(%rsp)
leaq 0x7e8(%rsp), %rdx
movq 0x428(%rsp), %rcx
movq 0x850(%rsp), %r8
leaq 0x430(%rsp), %rsi
callq 0x87520
jmp 0x8c133
leaq 0x430(%rsp), %rdi
callq 0x8728
jmp 0x8c742
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
jmp 0x8c1a9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
jmp 0x8c197
movq 0xc8(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
movl $0x10, %esi
callq 0x8350
movq 0xd0(%rsp), %rdi
movl $0x68, %esi
callq 0x8350
leaq 0x430(%rsp), %rdi
callq 0x8728
jmp 0x8c761
cmpl $0x1, 0x7e8(%rsp)
je 0x8c25e
movq 0xbfe18(%rip), %rdi     # 0x14bfe8
leaq 0x6df21(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, 0xc0(%rsp)
jmp 0x8c1e6
movq 0xc0(%rsp), %rdi
leaq 0x716b0(%rip), %rsi     # 0xfd8a5
callq 0x8330
movq %rax, 0xb8(%rsp)
jmp 0x8c204
movq 0xb8(%rsp), %rdi
leaq 0x6f1d7(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, 0xb0(%rsp)
jmp 0x8c222
movq 0xb0(%rsp), %rdi
movl $0x1b2, %esi            # imm = 0x1B2
callq 0x8650
movq %rax, 0xa8(%rsp)
jmp 0x8c23e
movq 0xa8(%rsp), %rdi
movq 0xbfd33(%rip), %rsi     # 0x14bf80
callq 0x8380
jmp 0x8c254
movl $0xff, %edi
callq 0x8460
movl $0x10, %edi
callq 0x8340
movq %rax, 0xa0(%rsp)
jmp 0x8c272
movq 0xa0(%rsp), %rdi
movl $0x4, %esi
callq 0x5e410
jmp 0x8c286
movq 0xa0(%rsp), %rax
movq %rax, 0x420(%rsp)
leaq 0x768(%rsp), %rsi
leaq 0x3f8(%rsp), %rdi
callq 0x43590
jmp 0x8c2ad
leaq 0x3f8(%rsp), %rax
movq %rax, 0x418(%rsp)
movl $0x48, %edi
callq 0x8340
movq %rax, 0x98(%rsp)
jmp 0x8c2d1
movq 0x98(%rsp), %rdi
movq 0x420(%rsp), %rsi
movq 0x418(%rsp), %rdx
callq 0x5e440
jmp 0x8c2f0
movq 0x3c8(%rsp), %rdi
movq 0x98(%rsp), %rax
movq %rax, 0x3f0(%rsp)
movq 0x3f0(%rsp), %rax
movq %rax, 0x88(%rsp)
addq $0xa8, %rdi
movq 0x418(%rsp), %rsi
callq 0x8cd60
movq %rax, 0x90(%rsp)
jmp 0x8c336
movq 0x90(%rsp), %rax
movq 0x88(%rsp), %rcx
movq %rcx, (%rax)
movl $0x68, %edi
callq 0x8340
movq %rax, 0x80(%rsp)
jmp 0x8c35d
movl $0x50, %edi
callq 0x8340
movq %rax, 0x78(%rsp)
jmp 0x8c36e
movq 0x78(%rsp), %rdi
movl 0x7ec(%rsp), %esi
callq 0x8cfa0
jmp 0x8c381
movq 0x78(%rsp), %rsi
movq 0x80(%rsp), %rdi
movq 0x3f0(%rsp), %rdx
movq 0x850(%rsp), %rcx
callq 0x8ea90
jmp 0x8c3a5
leaq 0x3f8(%rsp), %rdi
callq 0x8728
jmp 0x8c742
movq 0xa0(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
movl $0x10, %esi
callq 0x8350
jmp 0x8c761
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
jmp 0x8c46b
movq 0x98(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
movl $0x48, %esi
callq 0x8350
jmp 0x8c46b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
jmp 0x8c459
movq 0x78(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
movl $0x50, %esi
callq 0x8350
movq 0x80(%rsp), %rdi
movl $0x68, %esi
callq 0x8350
leaq 0x3f8(%rsp), %rdi
callq 0x8728
jmp 0x8c761
leaq 0x768(%rsp), %rsi
leaq 0x3d0(%rsp), %rdi
callq 0x43590
jmp 0x8c494
cmpl $0x0, 0x768(%rsp)
jne 0x8c5b1
movl $0x50, %edi
callq 0x8340
movq %rax, 0x70(%rsp)
jmp 0x8c4b3
movl $0x10, %edi
callq 0x8340
movq %rax, 0x68(%rsp)
jmp 0x8c4c4
movq 0x68(%rsp), %rdi
movl $0x2, %esi
callq 0x5e410
jmp 0x8c4d5
movl 0x7ec(%rsp), %eax
movl %eax, 0x5c(%rsp)
movq 0x860(%rsp), %rdi
callq 0x62a20
movq %rax, 0x60(%rsp)
jmp 0x8c4f4
movq 0x60(%rsp), %r8
movl 0x5c(%rsp), %ecx
movq 0x68(%rsp), %rsi
movq 0x70(%rsp), %rdi
leaq 0x3d0(%rsp), %rdx
callq 0x8eca0
jmp 0x8c516
movq 0x3c8(%rsp), %rdi
addq $0xa8, %rdi
leaq 0x3d0(%rsp), %rsi
callq 0x8cd60
movq %rax, 0x50(%rsp)
jmp 0x8c539
movq 0x50(%rsp), %rax
movq 0x70(%rsp), %rcx
movq %rcx, (%rax)
jmp 0x8c6a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
jmp 0x8c6b3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
jmp 0x8c59d
movq 0x68(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
movl $0x10, %esi
callq 0x8350
movq 0x70(%rsp), %rdi
movl $0x50, %esi
callq 0x8350
jmp 0x8c6b3
movl $0x50, %edi
callq 0x8340
movq %rax, 0x48(%rsp)
jmp 0x8c5c2
movl $0x10, %edi
callq 0x8340
movq %rax, 0x40(%rsp)
jmp 0x8c5d3
movq 0x40(%rsp), %rdi
movl $0x4, %esi
callq 0x5e410
jmp 0x8c5e4
movl 0x7ec(%rsp), %eax
movl %eax, 0x34(%rsp)
movq 0x860(%rsp), %rdi
callq 0x62a20
movq %rax, 0x38(%rsp)
jmp 0x8c603
movq 0x38(%rsp), %r8
movl 0x34(%rsp), %ecx
movq 0x40(%rsp), %rsi
movq 0x48(%rsp), %rdi
leaq 0x3d0(%rsp), %rdx
callq 0x8eca0
jmp 0x8c625
movq 0x3c8(%rsp), %rdi
addq $0xa8, %rdi
leaq 0x3d0(%rsp), %rsi
callq 0x8cd60
movq %rax, 0x28(%rsp)
jmp 0x8c648
movq 0x28(%rsp), %rax
movq 0x48(%rsp), %rcx
movq %rcx, (%rax)
jmp 0x8c6a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
jmp 0x8c690
movq 0x40(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x750(%rsp)
movl %eax, 0x74c(%rsp)
movl $0x10, %esi
callq 0x8350
movq 0x48(%rsp), %rdi
movl $0x50, %esi
callq 0x8350
jmp 0x8c6b3
leaq 0x3d0(%rsp), %rdi
callq 0x8728
jmp 0x8c742
leaq 0x3d0(%rsp), %rdi
callq 0x8728
jmp 0x8c761
movq 0xbf91c(%rip), %rdi     # 0x14bfe8
leaq 0x6da25(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, 0x20(%rsp)
jmp 0x8c6df
movq 0x20(%rsp), %rdi
leaq 0x711ba(%rip), %rsi     # 0xfd8a5
callq 0x8330
movq %rax, 0x18(%rsp)
jmp 0x8c6f7
movq 0x18(%rsp), %rdi
leaq 0x6ece7(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, 0x10(%rsp)
jmp 0x8c70f
movq 0x10(%rsp), %rdi
movl $0x1cd, %esi            # imm = 0x1CD
callq 0x8650
movq %rax, 0x8(%rsp)
jmp 0x8c725
movq 0x8(%rsp), %rdi
movq 0xbf84f(%rip), %rsi     # 0x14bf80
callq 0x8380
jmp 0x8c738
movl $0xff, %edi
callq 0x8460
leaq 0x760(%rsp), %rdi
callq 0x49400
leaq 0x848(%rsp), %rdi
callq 0x49460
jmp 0x8a6b4
leaq 0x760(%rsp), %rdi
callq 0x49400
jmp 0x8c778
addq $0x878, %rsp            # imm = 0x878
retq
movq 0x750(%rsp), %rdi
callq 0x8670
nopw %cs:(%rax,%rax)