// File: /workspace/github_cpp_makefile_star2_O1/Ziang95[P]Tomasulo_simulator/issue.cpp
// Function: issue_automat(void*)
void *issue_automat(void *arg)
{
    next_vdd = 0;
    const instr *tmp = nullptr;
    memCell Vj, Vk;
    int Qj, Qk;
    while (true)
    {
        at_rising_edge(next_vdd);
        tmp = nullptr;
        Qj = Qk = -1;
        tmp = instr_Q->getInstr();
        at_falling_edge(next_vdd);
        if (tmp)
        {
            msg_log("Issuing code: " + tmp->name, 2);
            resStation *avai = nullptr;
            switch (tmp->code)
            {
            case ADD: case ADDI: case SUB:
            {
                for (int i = 0; i < iAdder.size(); i++)
                    for (int j = 0; j < (*iAdder[i]).rs.size(); j++)
                        if ((*iAdder[i]).rs[j]->get_state() == false)
                            avai = (*iAdder[i]).rs[j];
                if (avai)
                {
                    get_reg_or_rob(tmp->oprnd1, Qj, Vj);
                    if (tmp->code == ADDI)
                        Vk.i = tmp->imdt;
                    else
                        get_reg_or_rob(tmp->oprnd2, Qk, Vk);
                    int dest;
                    try
                    {
                        dest = CPU_ROB->add_entry(tmp->name, tmp->dest, tmp->code);
                    }
                    catch(const int e)
                    {
                        err_log("ROB is full");
                        break;
                    }
                    if (check_squash())
                        break;
                    instr_Q->ptr_advance();
                    RAT[tmp->dest] = dest;
                    avai->set_code(tmp->code);
                    avai->fill_rs(dest, tmp, Qj, Qk, Vj, Vk);
                }
                else
                {
                    msg_log("No available iAdder rs, wait until next cycle", 2);
                    check_squash();
                }
                break;
            }
            case ADD_D: case SUB_D:
            {
                for (int i = 0; i < fAdder.size(); i++)
                    for (int j = 0; j < (*fAdder[i]).rs.size(); j++)
                        if ((*fAdder[i]).rs[j]->get_state() == false)
                            avai = (*fAdder[i]).rs[j];
                if (avai)
                {
                    get_reg_or_rob(tmp->oprnd1, Qj, Vj);
                    get_reg_or_rob(tmp->oprnd2, Qk, Vk);
                    int dest;
                    try
                    {
                        dest = CPU_ROB->add_entry(tmp->name, tmp->dest, tmp->code);
                    }
                    catch(const int e)
                    {
                        err_log("ROB is full");
                        break;
                    }
                    if (check_squash())
                        break;
                    instr_Q->ptr_advance();
                    RAT[tmp->dest] = dest;
                    avai->set_code(tmp->code);
                    avai->fill_rs(dest, tmp, Qj, Qk, Vj, Vk);
                }
                break;
            }
            case MUL_D:
            {
                for (int i = 0; i < fMtplr.size(); i++)
                    for (int j = 0; j < (*fMtplr[i]).rs.size(); j++)
                        if ((*fMtplr[i]).rs[j]->get_state() == false)
                            avai = (*fMtplr[i]).rs[j];
                if (avai)
                {
                    get_reg_or_rob(tmp->oprnd1, Qj, Vj);
                    get_reg_or_rob(tmp->oprnd2, Qk, Vk);
                    int dest;
                    try
                    {
                        dest = CPU_ROB->add_entry(tmp->name, tmp->dest, tmp->code);
                    }
                    catch(const int e)
                    {
                        err_log("ROB is full");
                        break;
                    }
                    if (check_squash())
                        break;
                    instr_Q->ptr_advance();
                    RAT[tmp->dest] = dest;
                    avai->set_code(tmp->code);
                    avai->fill_rs(dest, tmp, Qj, Qk, Vj, Vk);
                }
                else
                {
                    msg_log("No available fAdder rs, wait until next cycle", 2);
                    check_squash();
                }
                break;
            }
            case LD:
            {
                for (int i = 0; i < lsUnit.size(); i++)
                    for (int j = 0; j < (*lsUnit[i]).rs.size(); j++)
                        if ((*lsUnit[i]).rs[j]->get_state() == false)
                            avai = (*lsUnit[i]).rs[j];
                if (avai)
                {
                    get_reg_or_rob(tmp->oprnd1, Qj, Vj);
                    int dest;
                    try
                    {
                        dest = CPU_ROB->add_entry(tmp->name, tmp->dest, tmp->code);
                    }
                    catch(const int e)
                    {
                        err_log("ROB is full");
                        break;
                    }
                    if (check_squash())
                        break;
                    instr_Q->ptr_advance();
                    RAT[tmp->dest] = dest;
                    avai->fill_rs(dest, tmp, Qj, Qk, Vj, Vk);
                }
                else
                {
                    msg_log("No available LD rs, wait until next cycle", 2);
                    check_squash();
                }
                break;
            }
            case SD:
            {
                for (int i = 0; i < lsUnit.size(); i++)
                    for (int j = 0; j < (*lsUnit[i]).rs.size(); j++)
                        if ((*lsUnit[i]).rs[j]->get_state() == false)
                            avai = (*lsUnit[i]).rs[j];
                if (avai)
                {
                    get_reg_or_rob(tmp->oprnd1, Qj, Vj);
                    int dest;
                    try
                    {
                        dest = CPU_ROB->add_entry(tmp->name, "NO_RET", tmp->code);
                    }
                    catch(const int e)
                    {
                        err_log("ROB is full");
                        break;
                    }
                    if (check_squash())
                        break;
                    instr_Q->ptr_advance();
                    avai->set_code(SD);
                    avai->fill_rs(dest, tmp, Qj, Qk, Vj, Vk);
                }
                else
                {
                    msg_log("No available SD rs, wait until next cycle", 2);
                    check_squash();
                }
                break;
            }
            case BNE: case BEQ:
            {
                for (int i = 0; i < iAdder.size(); i++)
                    for (int j = 0; j < (*iAdder[i]).rs.size(); j++)
                        if ((*iAdder[i]).rs[j]->get_state() == false)
                            avai = (*iAdder[i]).rs[j];
                if (avai)
                {
                    get_reg_or_rob(tmp->oprnd1, Qj, Vj);
                    get_reg_or_rob(tmp->oprnd2, Qk, Vk);
                    int dest;
                    try
                    {
                        dest = CPU_ROB->add_entry(tmp->name, "NO_RET", tmp->code);
                    }
                    catch(const int e)
                    {
                        err_log("ROB is full");
                        break;
                    }
                    if (check_squash())
                        break;
                    ROBEntry *R = CPU_ROB->get_entry(dest);
                    R->instr_i = instr_Q->get_head();
                    R->bkupRAT = RAT;
                    avai->set_code(tmp->code);
                    avai->fill_rs(dest, tmp, Qj, Qk, Vj, Vk);
                    if (BTBEntry* predctr = CPU_BTB.getEntry(R->instr_i))
                    {
                        if (predctr->taken)
                            instr_Q->move_ptr(((R->instr_i)/8)*8 + (predctr->target)%8);
                        else
                            instr_Q->ptr_advance();
                    }
                    else
                        instr_Q->ptr_advance();
                }
                else
                {
                    msg_log("No available branch rs, wait until next cycle", 2);
                    check_squash();
                }
                break;
            }
            case NOP:
            {
                int dest;
                try
                {
                    dest = CPU_ROB->add_entry(tmp->name, "NO_RET", tmp->code);
                }
                catch(const int e)
                {
                    err_log("ROB is full");
                    break;
                }
                if (check_squash())
                    break;
                instr_Q->ptr_advance();
                nopBub->generate_bubble(dest);
                break;
            }
            default:
                if (check_squash())
                    break;
                break;
            }
        }
        else
            check_squash();
    }
    return nullptr;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x4c8, %rsp            # imm = 0x4C8
movl $0x0, 0xe41a(%rip)      # 0x1b348
leaq 0xe483(%rip), %rbx      # 0x1b3b8
leaq 0xe4c4(%rip), %r15      # 0x1b400
leaq 0xe405(%rip), %r14      # 0x1b348
movq %r14, %rdi
callq 0x9fdf
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
movl %eax, -0x40(%rbp)
movl %eax, -0x34(%rbp)
leaq 0xe403(%rip), %rax      # 0x1b360
movq (%rax), %rdi
callq 0xcd66
movq %rax, %r12
movq %r14, %rdi
callq 0xa03d
testq %r12, %r12
je 0xde8d
leaq -0x4e8(%rbp), %r14
movq %r14, %rdi
leaq 0x8672(%rip), %rsi      # 0x155fc
movq %r12, %rdx
callq 0x8bd0
movq %r14, %rdi
movl $0x2, %esi
callq 0x9f03
movq -0x4e8(%rbp), %rdi
leaq -0x4d8(%rbp), %rax
cmpq %rax, %rdi
je 0xcfb7
callq 0x3230
movl 0x20(%r12), %eax
cmpq $0xa, %rax
ja 0xde8d
leaq 0x85eb(%rip), %rcx      # 0x155b8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
movq %r12, -0x30(%rbp)
jmpq *%rax
movq 0x8(%rbx), %rax
cmpq (%rbx), %rax
je 0xd180
xorl %r14d, %r14d
xorl %r13d, %r13d
movq (%rbx), %rax
movq (%rax,%r14,8), %rcx
movq 0x3870(%rcx), %rax
cmpq %rax, 0x3878(%rcx)
je 0xd04a
xorl %r12d, %r12d
movq (%rax,%r12,8), %rdi
callq 0x13dc2
testb %al, %al
jne 0xd026
movq (%rbx), %rax
movq (%rax,%r14,8), %rax
movq 0x3870(%rax), %rax
movq (%rax,%r12,8), %r13
incq %r12
movq (%rbx), %rax
movq (%rax,%r14,8), %rcx
movq 0x3870(%rcx), %rax
movq 0x3878(%rcx), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %r12, %rcx
ja 0xd007
incq %r14
movq 0x8(%rbx), %rax
subq (%rbx), %rax
sarq $0x3, %rax
cmpq %r14, %rax
ja 0xcfed
jmp 0xd183
leaq 0xe367(%rip), %rdx      # 0x1b3d0
movq 0x8(%rdx), %rax
cmpq (%rdx), %rax
je 0xd59c
xorl %r14d, %r14d
xorl %r13d, %r13d
movq (%rdx), %rax
movq (%rax,%r14,8), %rcx
movq 0x3870(%rcx), %rax
cmpq %rax, 0x3878(%rcx)
je 0xd0e0
xorl %r12d, %r12d
movq (%rax,%r12,8), %rdi
callq 0x13dc2
leaq 0xe32a(%rip), %rdx      # 0x1b3d0
testb %al, %al
jne 0xd0bc
movq (%rdx), %rax
movq (%rax,%r14,8), %rax
movq 0x3870(%rax), %rax
movq (%rax,%r12,8), %r13
incq %r12
movq (%rdx), %rax
movq (%rax,%r14,8), %rcx
movq 0x3870(%rcx), %rax
movq 0x3878(%rcx), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %r12, %rcx
ja 0xd096
incq %r14
movq 0x8(%rdx), %rax
subq (%rdx), %rax
sarq $0x3, %rax
cmpq %r14, %rax
ja 0xd07c
jmp 0xd59f
movq 0x8(%rbx), %rax
cmpq (%rbx), %rax
je 0xd6e5
xorl %r14d, %r14d
xorl %r13d, %r13d
movq (%rbx), %rax
movq (%rax,%r14,8), %rcx
movq 0x3870(%rcx), %rax
cmpq %rax, 0x3878(%rcx)
je 0xd168
xorl %r12d, %r12d
movq (%rax,%r12,8), %rdi
callq 0x13dc2
testb %al, %al
jne 0xd144
movq (%rbx), %rax
movq (%rax,%r14,8), %rax
movq 0x3870(%rax), %rax
movq (%rax,%r12,8), %r13
incq %r12
movq (%rbx), %rax
movq (%rax,%r14,8), %rcx
movq 0x3870(%rcx), %rax
movq 0x3878(%rcx), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %r12, %rcx
ja 0xd125
incq %r14
movq 0x8(%rbx), %rax
subq (%rbx), %rax
sarq $0x3, %rax
cmpq %r14, %rax
ja 0xd10b
jmp 0xd6e8
xorl %r13d, %r13d
testq %r13, %r13
je 0xd1fc
leaq -0x4b8(%rbp), %r14
movq %r14, -0x4c8(%rbp)
movq -0x30(%rbp), %rax
movq 0x48(%rax), %rsi
movq 0x50(%rax), %rdx
addq %rsi, %rdx
leaq -0x4c8(%rbp), %r12
movq %r12, %rdi
callq 0x7168
movq %r12, %rdi
leaq -0x34(%rbp), %rsi
leaq -0x38(%rbp), %rdx
callq 0xcd88
movq -0x4c8(%rbp), %rdi
cmpq %r14, %rdi
je 0xd1d5
callq 0x3230
movq -0x30(%rbp), %r12
cmpl $0x4, 0x20(%r12)
leaq -0x498(%rbp), %r14
jne 0xd4ae
movl 0x88(%r12), %eax
movl %eax, -0x3c(%rbp)
jmp 0xd4f6
leaq -0x458(%rbp), %r14
movq %r14, -0x468(%rbp)
leaq -0x468(%rbp), %r12
movq %r12, %rdi
leaq 0x83fc(%rip), %rsi      # 0x15617
leaq 0x8422(%rip), %rdx      # 0x15644
callq 0x7202
movq %r12, %rdi
movl $0x2, %esi
callq 0x9f03
movq -0x468(%rbp), %rdi
jmp 0xde83
movq 0x8(%r15), %rax
cmpq (%r15), %rax
je 0xd947
xorl %r14d, %r14d
xorl %r13d, %r13d
movq (%r15), %rax
movq (%rax,%r14,8), %rcx
movq 0x3870(%rcx), %rax
cmpq %rax, 0x3878(%rcx)
je 0xd2b0
xorl %r12d, %r12d
movq (%rax,%r12,8), %rdi
callq 0x13dc2
testb %al, %al
jne 0xd28c
movq (%r15), %rax
movq (%rax,%r14,8), %rax
movq 0x3870(%rax), %rax
movq (%rax,%r12,8), %r13
incq %r12
movq (%r15), %rax
movq (%rax,%r14,8), %rcx
movq 0x3870(%rcx), %rax
movq 0x3878(%rcx), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %r12, %rcx
ja 0xd26d
incq %r14
movq 0x8(%r15), %rax
subq (%r15), %rax
sarq $0x3, %rax
cmpq %r14, %rax
ja 0xd253
jmp 0xd94a
leaq 0xe119(%rip), %rdx      # 0x1b3e8
movq 0x8(%rdx), %rax
cmpq (%rdx), %rax
je 0xdadb
xorl %r14d, %r14d
xorl %r13d, %r13d
movq (%rdx), %rax
movq (%rax,%r14,8), %rcx
movq 0x3870(%rcx), %rax
cmpq %rax, 0x3878(%rcx)
je 0xd346
xorl %r12d, %r12d
movq (%rax,%r12,8), %rdi
callq 0x13dc2
leaq 0xe0dc(%rip), %rdx      # 0x1b3e8
testb %al, %al
jne 0xd322
movq (%rdx), %rax
movq (%rax,%r14,8), %rax
movq 0x3870(%rax), %rax
movq (%rax,%r12,8), %r13
incq %r12
movq (%rdx), %rax
movq (%rax,%r14,8), %rcx
movq 0x3870(%rcx), %rax
movq 0x3878(%rcx), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %r12, %rcx
ja 0xd2fc
incq %r14
movq 0x8(%rdx), %rax
subq (%rdx), %rax
sarq $0x3, %rax
cmpq %r14, %rax
ja 0xd2e2
jmp 0xdade
movq 0x8(%r15), %rax
cmpq (%r15), %rax
je 0xdce6
xorl %r14d, %r14d
xorl %r13d, %r13d
movq (%r15), %rax
movq (%rax,%r14,8), %rcx
movq 0x3870(%rcx), %rax
cmpq %rax, 0x3878(%rcx)
je 0xd3ce
xorl %r12d, %r12d
movq (%rax,%r12,8), %rdi
callq 0x13dc2
testb %al, %al
jne 0xd3aa
movq (%r15), %rax
movq (%rax,%r14,8), %rax
movq 0x3870(%rax), %rax
movq (%rax,%r12,8), %r13
incq %r12
movq (%r15), %rax
movq (%rax,%r14,8), %rcx
movq 0x3870(%rcx), %rax
movq 0x3878(%rcx), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %r12, %rcx
ja 0xd38b
incq %r14
movq 0x8(%r15), %rax
subq (%r15), %rax
sarq $0x3, %rax
cmpq %r14, %rax
ja 0xd371
jmp 0xdce9
leaq 0xdf7b(%rip), %rax      # 0x1b368
movq (%rax), %r14
leaq -0x58(%rbp), %rax
movq %rax, -0x68(%rbp)
movq (%r12), %rsi
movq 0x8(%r12), %rdx
addq %rsi, %rdx
leaq -0x68(%rbp), %rdi
leaq -0x148(%rbp), %r12
callq 0x7168
leaq -0x138(%rbp), %rax
movq %rax, -0x148(%rbp)
movq %r12, %rdi
leaq 0x7e1d(%rip), %rsi      # 0x15249
leaq 0x7e1c(%rip), %rdx      # 0x1524f
callq 0x7202
movq -0x30(%rbp), %rax
movl 0x20(%rax), %ecx
movq %r14, %rdi
leaq -0x68(%rbp), %rsi
movq %r12, %rdx
callq 0x7fd2
movl %eax, %r14d
movq -0x148(%rbp), %rdi
leaq -0x138(%rbp), %rax
cmpq %rax, %rdi
je 0xd469
callq 0x3230
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0xd47b
callq 0x3230
callq 0xce47
testb %al, %al
jne 0xcf3c
leaq 0xded1(%rip), %rax      # 0x1b360
movq (%rax), %rdi
callq 0xcc44
leaq 0xdf12(%rip), %rax      # 0x1b3b0
movq (%rax), %rdi
movl %r14d, %esi
callq 0x696e
jmp 0xcf3c
movq %r14, -0x4a8(%rbp)
movq 0x68(%r12), %rsi
movq 0x70(%r12), %rdx
addq %rsi, %rdx
leaq -0x4a8(%rbp), %r12
movq %r12, %rdi
callq 0x7168
movq %r12, %rdi
leaq -0x40(%rbp), %rsi
leaq -0x3c(%rbp), %rdx
callq 0xcd88
movq -0x4a8(%rbp), %rdi
cmpq %r14, %rdi
movq -0x30(%rbp), %r12
je 0xd4f6
callq 0x3230
leaq 0xde6b(%rip), %rax      # 0x1b368
movq (%rax), %r14
leaq -0x118(%rbp), %rax
movq %rax, -0x128(%rbp)
movq (%r12), %rsi
movq 0x8(%r12), %rdx
addq %rsi, %rdx
leaq -0x128(%rbp), %rdi
callq 0x7168
movq %r14, -0x48(%rbp)
leaq -0x1f8(%rbp), %rax
movq %rax, -0x208(%rbp)
movq 0x28(%r12), %rsi
movq 0x30(%r12), %rdx
addq %rsi, %rdx
movq %r12, %r14
leaq -0x208(%rbp), %r12
movq %r12, %rdi
callq 0x7168
movl 0x20(%r14), %ecx
movq -0x48(%rbp), %rdi
leaq -0x128(%rbp), %rsi
movq %r12, %rdx
callq 0x7fd2
movl %eax, %r14d
movq -0x208(%rbp), %rdi
leaq -0x1f8(%rbp), %rax
cmpq %rax, %rdi
je 0xd589
callq 0x3230
movq -0x128(%rbp), %rdi
leaq -0x118(%rbp), %rax
jmp 0xdc26
xorl %r13d, %r13d
testq %r13, %r13
je 0xcf3c
leaq -0x438(%rbp), %r14
movq %r14, -0x448(%rbp)
movq -0x30(%rbp), %rax
movq 0x48(%rax), %rsi
movq 0x50(%rax), %rdx
addq %rsi, %rdx
leaq -0x448(%rbp), %r12
movq %r12, %rdi
callq 0x7168
movq %r12, %rdi
leaq -0x34(%rbp), %rsi
leaq -0x38(%rbp), %rdx
callq 0xcd88
movq -0x448(%rbp), %rdi
cmpq %r14, %rdi
je 0xd5f5
callq 0x3230
leaq -0x418(%rbp), %r14
movq %r14, -0x428(%rbp)
movq -0x30(%rbp), %rax
movq 0x68(%rax), %rsi
movq 0x70(%rax), %rdx
addq %rsi, %rdx
leaq -0x428(%rbp), %r12
movq %r12, %rdi
callq 0x7168
movq %r12, %rdi
leaq -0x40(%rbp), %rsi
leaq -0x3c(%rbp), %rdx
callq 0xcd88
movq -0x428(%rbp), %rdi
cmpq %r14, %rdi
je 0xd642
callq 0x3230
leaq 0xdd1f(%rip), %rax      # 0x1b368
movq (%rax), %rax
movq %rax, -0x48(%rbp)
leaq -0xf8(%rbp), %rax
movq %rax, -0x108(%rbp)
movq -0x30(%rbp), %r14
movq (%r14), %rsi
movq 0x8(%r14), %rdx
addq %rsi, %rdx
leaq -0x108(%rbp), %rdi
leaq -0x1e8(%rbp), %r12
callq 0x7168
leaq -0x1d8(%rbp), %rax
movq %rax, -0x1e8(%rbp)
movq 0x28(%r14), %rsi
movq 0x30(%r14), %rdx
addq %rsi, %rdx
movq %r12, %rdi
callq 0x7168
movl 0x20(%r14), %ecx
movq -0x48(%rbp), %rdi
leaq -0x108(%rbp), %rsi
movq %r12, %rdx
callq 0x7fd2
movl %eax, %r14d
movq -0x1e8(%rbp), %rdi
leaq -0x1d8(%rbp), %rax
cmpq %rax, %rdi
je 0xd6d2
callq 0x3230
movq -0x108(%rbp), %rdi
leaq -0xf8(%rbp), %rax
jmp 0xdc26
xorl %r13d, %r13d
testq %r13, %r13
je 0xd903
leaq -0x298(%rbp), %r14
movq %r14, -0x2a8(%rbp)
movq -0x30(%rbp), %rax
movq 0x48(%rax), %rsi
movq 0x50(%rax), %rdx
addq %rsi, %rdx
leaq -0x2a8(%rbp), %r12
movq %r12, %rdi
callq 0x7168
movq %r12, %rdi
leaq -0x34(%rbp), %rsi
leaq -0x38(%rbp), %rdx
callq 0xcd88
movq -0x2a8(%rbp), %rdi
cmpq %r14, %rdi
je 0xd73e
callq 0x3230
leaq -0x278(%rbp), %r14
movq %r14, -0x288(%rbp)
movq -0x30(%rbp), %rax
movq 0x68(%rax), %rsi
movq 0x70(%rax), %rdx
addq %rsi, %rdx
leaq -0x288(%rbp), %r12
movq %r12, %rdi
callq 0x7168
movq %r12, %rdi
leaq -0x40(%rbp), %rsi
leaq -0x3c(%rbp), %rdx
callq 0xcd88
movq -0x288(%rbp), %rdi
cmpq %r14, %rdi
je 0xd78b
callq 0x3230
leaq 0xdbd6(%rip), %rax      # 0x1b368
movq (%rax), %r14
leaq -0x78(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x30(%rbp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0x88(%rbp), %rdi
callq 0x7168
leaq -0x158(%rbp), %rax
movq %rax, -0x168(%rbp)
leaq -0x168(%rbp), %r12
movq %r12, %rdi
leaq 0x7a70(%rip), %rsi      # 0x15249
leaq 0x7a6f(%rip), %rdx      # 0x1524f
callq 0x7202
movq -0x30(%rbp), %rax
movl 0x20(%rax), %ecx
movq %r14, %rdi
leaq -0x88(%rbp), %rsi
movq %r12, %rdx
callq 0x7fd2
movl %eax, %r14d
movq -0x168(%rbp), %rdi
leaq -0x158(%rbp), %rax
cmpq %rax, %rdi
je 0xd819
callq 0x3230
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
cmpq %rax, %rdi
je 0xd82e
callq 0x3230
callq 0xce47
testb %al, %al
jne 0xcf3c
leaq 0xdb26(%rip), %rax      # 0x1b368
movq (%rax), %rdi
movl %r14d, -0x48(%rbp)
movl %r14d, %esi
callq 0x7f30
movq %rax, %r14
leaq 0xdb05(%rip), %rax      # 0x1b360
movq (%rax), %rdi
callq 0xcd5e
movl %eax, 0x64(%r14)
leaq 0x68(%r14), %rdi
leaq 0xe3ee(%rip), %rsi      # 0x1bc60
cmpq %rsi, %rdi
je 0xd87c
callq 0x922e
movq -0x30(%rbp), %r12
movl 0x20(%r12), %esi
movq %r13, %rdi
callq 0x139c0
movl -0x34(%rbp), %ecx
movl -0x40(%rbp), %r8d
movl -0x38(%rbp), %r9d
movl -0x3c(%rbp), %eax
movl %eax, (%rsp)
movq %r13, %rdi
movl -0x48(%rbp), %esi
movq %r12, %rdx
callq 0x139d4
movl 0x64(%r14), %esi
leaq 0xdab9(%rip), %rdi      # 0x1b370
callq 0x8f46
testq %rax, %rax
je 0xde97
leaq 0xda94(%rip), %rcx      # 0x1b360
movq (%rcx), %rdi
cmpb $0x1, 0x5(%rax)
jne 0xdea1
movl 0x64(%r14), %ecx
leal 0x7(%rcx), %edx
testl %ecx, %ecx
cmovnsl %ecx, %edx
andl $-0x8, %edx
movl (%rax), %esi
leal 0x7(%rsi), %eax
testl %esi, %esi
cmovnsl %esi, %eax
andl $-0x8, %eax
subl %eax, %esi
addl %edx, %esi
callq 0xcc3c
jmp 0xcf3c
leaq -0x238(%rbp), %r14
movq %r14, -0x248(%rbp)
leaq -0x248(%rbp), %r12
movq %r12, %rdi
leaq 0x7da5(%rip), %rsi      # 0x156c7
leaq 0x7dcb(%rip), %rdx      # 0x156f4
callq 0x7202
movq %r12, %rdi
movl $0x2, %esi
callq 0x9f03
movq -0x248(%rbp), %rdi
jmp 0xde83
xorl %r13d, %r13d
testq %r13, %r13
je 0xda97
leaq -0x2f8(%rbp), %r14
movq %r14, -0x308(%rbp)
movq -0x30(%rbp), %rax
movq 0x48(%rax), %rsi
movq 0x50(%rax), %rdx
addq %rsi, %rdx
leaq -0x308(%rbp), %r12
movq %r12, %rdi
callq 0x7168
movq %r12, %rdi
leaq -0x34(%rbp), %rsi
leaq -0x38(%rbp), %rdx
callq 0xcd88
movq -0x308(%rbp), %rdi
cmpq %r14, %rdi
je 0xd9a0
callq 0x3230
leaq 0xd9c1(%rip), %rax      # 0x1b368
movq (%rax), %r14
leaq -0x98(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0x30(%rbp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0xa8(%rbp), %rdi
leaq -0x188(%rbp), %r12
callq 0x7168
leaq -0x178(%rbp), %rax
movq %rax, -0x188(%rbp)
movq %r12, %rdi
leaq 0x7858(%rip), %rsi      # 0x15249
leaq 0x7857(%rip), %rdx      # 0x1524f
callq 0x7202
movq -0x30(%rbp), %rax
movl 0x20(%rax), %ecx
movq %r14, %rdi
leaq -0xa8(%rbp), %rsi
movq %r12, %rdx
callq 0x7fd2
movl %eax, %r14d
movq -0x188(%rbp), %rdi
leaq -0x178(%rbp), %rax
cmpq %rax, %rdi
je 0xda31
callq 0x3230
movq -0xa8(%rbp), %rdi
leaq -0x98(%rbp), %rax
cmpq %rax, %rdi
je 0xda49
callq 0x3230
callq 0xce47
testb %al, %al
jne 0xcf3c
leaq 0xd903(%rip), %rax      # 0x1b360
movq (%rax), %rdi
callq 0xcc44
movq %r13, %rdi
movl $0x7, %esi
callq 0x139c0
movl -0x34(%rbp), %ecx
movl -0x40(%rbp), %r8d
movl -0x38(%rbp), %r9d
movl -0x3c(%rbp), %eax
movl %eax, (%rsp)
movq %r13, %rdi
movl %r14d, %esi
movq -0x30(%rbp), %rdx
callq 0x139d4
jmp 0xcf3c
leaq -0x2b8(%rbp), %r14
movq %r14, -0x2c8(%rbp)
leaq -0x2c8(%rbp), %r12
movq %r12, %rdi
leaq 0x7be7(%rip), %rsi      # 0x1569d
leaq 0x7c09(%rip), %rdx      # 0x156c6
callq 0x7202
movq %r12, %rdi
movl $0x2, %esi
callq 0x9f03
movq -0x2c8(%rbp), %rdi
jmp 0xde83
xorl %r13d, %r13d
testq %r13, %r13
je 0xdca2
leaq -0x3d8(%rbp), %r14
movq %r14, -0x3e8(%rbp)
movq -0x30(%rbp), %rax
movq 0x48(%rax), %rsi
movq 0x50(%rax), %rdx
addq %rsi, %rdx
leaq -0x3e8(%rbp), %r12
movq %r12, %rdi
callq 0x7168
movq %r12, %rdi
leaq -0x34(%rbp), %rsi
leaq -0x38(%rbp), %rdx
callq 0xcd88
movq -0x3e8(%rbp), %rdi
cmpq %r14, %rdi
je 0xdb34
callq 0x3230
leaq -0x3b8(%rbp), %r14
movq %r14, -0x3c8(%rbp)
movq -0x30(%rbp), %rax
movq 0x68(%rax), %rsi
movq 0x70(%rax), %rdx
addq %rsi, %rdx
leaq -0x3c8(%rbp), %r12
movq %r12, %rdi
callq 0x7168
movq %r12, %rdi
leaq -0x40(%rbp), %rsi
leaq -0x3c(%rbp), %rdx
callq 0xcd88
movq -0x3c8(%rbp), %rdi
cmpq %r14, %rdi
je 0xdb81
callq 0x3230
leaq 0xd7e0(%rip), %rax      # 0x1b368
movq (%rax), %r14
leaq -0xd8(%rbp), %rax
movq %rax, -0xe8(%rbp)
movq -0x30(%rbp), %r12
movq (%r12), %rsi
movq 0x8(%r12), %rdx
addq %rsi, %rdx
leaq -0xe8(%rbp), %rdi
callq 0x7168
movq %r14, -0x48(%rbp)
leaq -0x1b8(%rbp), %rax
movq %rax, -0x1c8(%rbp)
movq 0x28(%r12), %rsi
movq 0x30(%r12), %rdx
addq %rsi, %rdx
movq %r12, %r14
leaq -0x1c8(%rbp), %r12
movq %r12, %rdi
callq 0x7168
movl 0x20(%r14), %ecx
movq -0x48(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
movq %r12, %rdx
callq 0x7fd2
movl %eax, %r14d
movq -0x1c8(%rbp), %rdi
leaq -0x1b8(%rbp), %rax
cmpq %rax, %rdi
je 0xdc18
callq 0x3230
movq -0xe8(%rbp), %rdi
leaq -0xd8(%rbp), %rax
cmpq %rax, %rdi
je 0xdc30
callq 0x3230
callq 0xce47
testb %al, %al
jne 0xcf3c
movq -0x30(%rbp), %r12
movl %r14d, -0x48(%rbp)
movq %r12, %r14
addq $0x28, %r14
leaq 0xd70d(%rip), %rax      # 0x1b360
movq (%rax), %rdi
callq 0xcc44
leaq 0xdffe(%rip), %rdi      # 0x1bc60
movq %r14, %rsi
callq 0xe4a8
movl -0x48(%rbp), %r14d
movl %r14d, (%rax)
movl 0x20(%r12), %esi
movq %r13, %rdi
callq 0x139c0
movl -0x34(%rbp), %ecx
movl -0x40(%rbp), %r8d
movl -0x38(%rbp), %r9d
movl -0x3c(%rbp), %eax
movl %eax, (%rsp)
movq %r13, %rdi
movl %r14d, %esi
movq %r12, %rdx
callq 0x139d4
jmp 0xcf3c
leaq -0x378(%rbp), %r14
movq %r14, -0x388(%rbp)
leaq -0x388(%rbp), %r12
movq %r12, %rdi
leaq 0x7984(%rip), %rsi      # 0x15645
leaq 0x79aa(%rip), %rdx      # 0x15672
callq 0x7202
movq %r12, %rdi
movl $0x2, %esi
callq 0x9f03
movq -0x388(%rbp), %rdi
jmp 0xde83
xorl %r13d, %r13d
testq %r13, %r13
je 0xde44
leaq -0x358(%rbp), %r14
movq %r14, -0x368(%rbp)
movq -0x30(%rbp), %rax
movq 0x48(%rax), %rsi
movq 0x50(%rax), %rdx
addq %rsi, %rdx
leaq -0x368(%rbp), %r12
movq %r12, %rdi
callq 0x7168
movq %r12, %rdi
leaq -0x34(%rbp), %rsi
leaq -0x38(%rbp), %rdx
callq 0xcd88
movq -0x368(%rbp), %rdi
cmpq %r14, %rdi
je 0xdd3f
callq 0x3230
leaq 0xd622(%rip), %rax      # 0x1b368
movq (%rax), %r12
leaq -0xb8(%rbp), %rax
movq %rax, -0xc8(%rbp)
movq -0x30(%rbp), %r14
movq (%r14), %rsi
movq 0x8(%r14), %rdx
addq %rsi, %rdx
leaq -0xc8(%rbp), %rdi
callq 0x7168
movq %r12, -0x48(%rbp)
leaq -0x198(%rbp), %rax
movq %rax, -0x1a8(%rbp)
movq 0x28(%r14), %rsi
movq 0x30(%r14), %rdx
addq %rsi, %rdx
leaq -0x1a8(%rbp), %r12
movq %r12, %rdi
callq 0x7168
movl 0x20(%r14), %ecx
movq -0x48(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
movq %r12, %rdx
callq 0x7fd2
movl %eax, %r12d
movq -0x1a8(%rbp), %rdi
leaq -0x198(%rbp), %rax
cmpq %rax, %rdi
je 0xddcf
callq 0x3230
movq -0xc8(%rbp), %rdi
leaq -0xb8(%rbp), %rax
cmpq %rax, %rdi
je 0xdde7
callq 0x3230
callq 0xce47
testb %al, %al
jne 0xcf3c
movq -0x30(%rbp), %r14
addq $0x28, %r14
leaq 0xd55d(%rip), %rax      # 0x1b360
movq (%rax), %rdi
callq 0xcc44
leaq 0xde4e(%rip), %rdi      # 0x1bc60
movq %r14, %rsi
callq 0xe4a8
movl %r12d, (%rax)
movl -0x34(%rbp), %ecx
movl -0x38(%rbp), %r9d
movl -0x3c(%rbp), %eax
movl %eax, (%rsp)
movq %r13, %rdi
movl %r12d, %esi
movq -0x30(%rbp), %rdx
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x139d4
jmp 0xcf3c
leaq -0x318(%rbp), %r14
movq %r14, -0x328(%rbp)
leaq -0x328(%rbp), %r12
movq %r12, %rdi
leaq 0x7810(%rip), %rsi      # 0x15673
leaq 0x7832(%rip), %rdx      # 0x1569c
callq 0x7202
movq %r12, %rdi
movl $0x2, %esi
callq 0x9f03
movq -0x328(%rbp), %rdi
cmpq %r14, %rdi
je 0xde8d
callq 0x3230
callq 0xce47
jmp 0xcf3c
leaq 0xd4c2(%rip), %rax      # 0x1b360
movq (%rax), %rdi
callq 0xcc44
jmp 0xcf3c
movq %rdx, %r14
movq %rax, %r13
movq -0x1c8(%rbp), %rdi
leaq -0x1b8(%rbp), %rax
cmpq %rax, %rdi
je 0xdef1
callq 0x3230
jmp 0xdef1
movq %rdx, %r14
movq %rax, %r13
movq -0x1a8(%rbp), %rdi
leaq -0x198(%rbp), %rax
cmpq %rax, %rdi
je 0xdf38
callq 0x3230
jmp 0xdf38
movq %rdx, %r14
movq %rax, %r13
movq -0xe8(%rbp), %rdi
leaq -0xd8(%rbp), %rax
cmpq %rax, %rdi
je 0xdf5c
callq 0x3230
jmp 0xdf5c
movq %rdx, %r14
movq %rax, %r13
movq -0x188(%rbp), %rdi
leaq -0x178(%rbp), %rax
cmpq %rax, %rdi
je 0xdfb3
callq 0x3230
jmp 0xdfb3
movq %rdx, %r14
movq %rax, %r13
movq -0xc8(%rbp), %rdi
leaq -0xb8(%rbp), %rax
cmpq %rax, %rdi
je 0xdfd3
callq 0x3230
jmp 0xdfd3
movq %rdx, %r14
movq %rax, %r13
cmpl $0x1, %r14d
jne 0xe41c
movq %r13, %rdi
callq 0x3120
leaq -0x398(%rbp), %r14
movq %r14, -0x3a8(%rbp)
leaq -0x3a8(%rbp), %r12
movq %r12, %rdi
leaq 0x767e(%rip), %rsi      # 0x1560b
leaq 0x7682(%rip), %rdx      # 0x15616
callq 0x7202
movq %r12, %rdi
callq 0x9777
movq -0x3a8(%rbp), %rdi
jmp 0xe2c9
movq %rdx, %r14
movq %rax, %r13
movq -0xa8(%rbp), %rdi
leaq -0x98(%rbp), %rax
cmpq %rax, %rdi
je 0xe02a
callq 0x3230
jmp 0xe02a
movq %rdx, %r14
movq %rax, %r13
cmpl $0x1, %r14d
jne 0xe41c
movq %r13, %rdi
callq 0x3120
leaq -0x338(%rbp), %r14
movq %r14, -0x348(%rbp)
leaq -0x348(%rbp), %r12
movq %r12, %rdi
leaq 0x7607(%rip), %rsi      # 0x1560b
leaq 0x760b(%rip), %rdx      # 0x15616
callq 0x7202
movq %r12, %rdi
callq 0x9777
movq -0x348(%rbp), %rdi
jmp 0xe2c9
movq %rdx, %r14
movq %rax, %r13
cmpl $0x1, %r14d
jne 0xe41c
movq %r13, %rdi
callq 0x3120
leaq -0x2d8(%rbp), %r14
movq %r14, -0x2e8(%rbp)
leaq -0x2e8(%rbp), %r12
movq %r12, %rdi
leaq 0x75b0(%rip), %rsi      # 0x1560b
leaq 0x75b4(%rip), %rdx      # 0x15616
callq 0x7202
movq %r12, %rdi
callq 0x9777
movq -0x2e8(%rbp), %rdi
jmp 0xe2c9
movq %rdx, %r14
movq %rax, %r13
movq -0x148(%rbp), %rdi
leaq -0x138(%rbp), %rax
cmpq %rax, %rdi
je 0xe0a1
callq 0x3230
jmp 0xe0a1
movq %rdx, %r14
movq %rax, %r13
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0xe0bb
callq 0x3230
jmp 0xe0bb
movq %rdx, %r14
movq %rax, %r13
cmpl $0x1, %r14d
jne 0xe41c
movq %r13, %rdi
callq 0x3120
leaq -0x218(%rbp), %r14
movq %r14, -0x228(%rbp)
leaq -0x228(%rbp), %r12
movq %r12, %rdi
leaq 0x751f(%rip), %rsi      # 0x1560b
leaq 0x7523(%rip), %rdx      # 0x15616
callq 0x7202
movq %r12, %rdi
callq 0x9777
movq -0x228(%rbp), %rdi
jmp 0xe2c9
movq %rdx, %r14
movq %rax, %r13
movq -0x168(%rbp), %rdi
leaq -0x158(%rbp), %rax
cmpq %rax, %rdi
je 0xe152
callq 0x3230
jmp 0xe152
movq %rdx, %r14
movq %rax, %r13
movq -0x1e8(%rbp), %rdi
leaq -0x1d8(%rbp), %rax
cmpq %rax, %rdi
je 0xe16f
callq 0x3230
jmp 0xe16f
movq %rdx, %r14
movq %rax, %r13
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
cmpq %rax, %rdi
je 0xe18f
callq 0x3230
jmp 0xe18f
movq %rdx, %r14
movq %rax, %r13
movq -0x108(%rbp), %rdi
leaq -0xf8(%rbp), %rax
cmpq %rax, %rdi
je 0xe1e6
callq 0x3230
jmp 0xe1e6
movq %rdx, %r14
movq %rax, %r13
cmpl $0x1, %r14d
jne 0xe41c
movq %r13, %rdi
callq 0x3120
leaq -0x258(%rbp), %r14
movq %r14, -0x268(%rbp)
leaq -0x268(%rbp), %r12
movq %r12, %rdi
leaq 0x744b(%rip), %rsi      # 0x1560b
leaq 0x744f(%rip), %rdx      # 0x15616
callq 0x7202
movq %r12, %rdi
callq 0x9777
movq -0x268(%rbp), %rdi
jmp 0xe2c9
movq %rdx, %r14
movq %rax, %r13
cmpl $0x1, %r14d
jne 0xe41c
movq %r13, %rdi
callq 0x3120
leaq -0x3f8(%rbp), %r14
movq %r14, -0x408(%rbp)
leaq -0x408(%rbp), %r12
movq %r12, %rdi
leaq 0x73f4(%rip), %rsi      # 0x1560b
leaq 0x73f8(%rip), %rdx      # 0x15616
callq 0x7202
movq %r12, %rdi
callq 0x9777
movq -0x408(%rbp), %rdi
jmp 0xe2c9
movq %rdx, %r14
movq %rax, %r13
movq -0x208(%rbp), %rdi
leaq -0x1f8(%rbp), %rax
cmpq %rax, %rdi
je 0xe25d
callq 0x3230
jmp 0xe25d
movq %rdx, %r14
movq %rax, %r13
movq -0x128(%rbp), %rdi
leaq -0x118(%rbp), %rax
cmpq %rax, %rdi
je 0xe27d
callq 0x3230
jmp 0xe27d
movq %rdx, %r14
movq %rax, %r13
cmpl $0x1, %r14d
jne 0xe41c
movq %r13, %rdi
callq 0x3120
leaq -0x478(%rbp), %r14
movq %r14, -0x488(%rbp)
leaq -0x488(%rbp), %r12
movq %r12, %rdi
leaq 0x735d(%rip), %rsi      # 0x1560b
leaq 0x7361(%rip), %rdx      # 0x15616
callq 0x7202
movq %r12, %rdi
callq 0x9777
movq -0x488(%rbp), %rdi
cmpq %r14, %rdi
je 0xe2d3
callq 0x3230
callq 0x33f0
jmp 0xcf3c
movq %rax, %r13
movq -0x2e8(%rbp), %rdi
jmp 0xe33b
jmp 0xe347
movq %rax, %r13
movq -0x348(%rbp), %rdi
jmp 0xe33b
jmp 0xe347
movq %rax, %r13
movq -0x3a8(%rbp), %rdi
jmp 0xe33b
jmp 0xe347
movq %rax, %r13
movq -0x228(%rbp), %rdi
jmp 0xe33b
jmp 0xe347
movq %rax, %r13
movq -0x408(%rbp), %rdi
jmp 0xe33b
jmp 0xe347
movq %rax, %r13
movq -0x268(%rbp), %rdi
jmp 0xe33b
jmp 0xe347
movq %rax, %r13
movq -0x488(%rbp), %rdi
cmpq %r14, %rdi
je 0xe34a
callq 0x3230
jmp 0xe34a
movq %rax, %r13
callq 0x33f0
jmp 0xe41c
movq %rax, %r13
movq -0x328(%rbp), %rdi
jmp 0xe412
movq %rax, %r13
movq -0x388(%rbp), %rdi
jmp 0xe412
movq %rax, %r13
movq -0x2c8(%rbp), %rdi
jmp 0xe412
movq %rax, %r13
movq -0x3c8(%rbp), %rdi
jmp 0xe412
movq %rax, %r13
movq -0x368(%rbp), %rdi
jmp 0xe412
movq %rax, %r13
movq -0x3e8(%rbp), %rdi
jmp 0xe412
movq %rax, %r13
movq -0x308(%rbp), %rdi
jmp 0xe412
movq %rax, %r13
movq -0x248(%rbp), %rdi
jmp 0xe412
movq %rax, %r13
movq -0x4a8(%rbp), %rdi
jmp 0xe412
movq %rax, %r13
movq -0x468(%rbp), %rdi
jmp 0xe412
movq %rax, %r13
movq -0x288(%rbp), %rdi
jmp 0xe412
movq %rax, %r13
movq -0x428(%rbp), %rdi
jmp 0xe412
movq %rax, %r13
movq -0x2a8(%rbp), %rdi
jmp 0xe412
movq %rax, %r13
movq -0x448(%rbp), %rdi
jmp 0xe412
movq %rax, %r13
movq -0x4c8(%rbp), %rdi
cmpq %r14, %rdi
je 0xe41c
callq 0x3230
movq %r13, %rdi
callq 0x3440
movq %rax, %r13
movq -0x4e8(%rbp), %rdi
leaq -0x4d8(%rbp), %rax
cmpq %rax, %rdi
jne 0xe417
jmp 0xe41c