// File: /workspace/github_cpp_makefile_star2_O2/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 $0x4d8, %rsp            # imm = 0x4D8
andl $0x0, 0xb92e(%rip)      # 0x16350
leaq 0xb93f(%rip), %r12      # 0x16368
leaq 0xb990(%rip), %rbx      # 0x163c0
leaq 0xb9d1(%rip), %r15      # 0x16408
leaq 0xb912(%rip), %r14      # 0x16350
movq %r14, %rdi
callq 0x83e0
orl $-0x1, -0x4c(%rbp)
orl $-0x1, -0x30(%rbp)
movq (%r12), %rdi
callq 0xa892
movq %rax, %r13
movq %r14, %rdi
callq 0x8437
testq %r13, %r13
je 0xb583
leaq -0x438(%rbp), %r14
movq %r14, %rdi
leaq 0x4b80(%rip), %rsi      # 0xf5fc
movq %r13, %rdx
callq 0x7331
movq %r14, %rdi
pushq $0x2
popq %rsi
callq 0x8343
movq %r14, %rdi
callq 0x3140
movl 0x20(%r13), %eax
cmpq $0xa, %rax
ja 0xb583
movq %r13, -0x48(%rbp)
leaq 0x4b08(%rip), %rcx      # 0xf5b8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq (%rbx), %rcx
xorl %r13d, %r13d
xorl %r14d, %r14d
movq 0x8(%rbx), %rax
subq %rcx, %rax
sarq $0x3, %rax
cmpq %r13, %rax
jbe 0xab1c
xorl %r12d, %r12d
movq (%rcx,%r13,8), %rdx
movq 0x3870(%rdx), %rax
movq 0x3878(%rdx), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
cmpq %r12, %rdx
jbe 0xab17
movq (%rax,%r12,8), %rdi
callq 0xe90e
movq (%rbx), %rcx
testb %al, %al
jne 0xab12
movq (%rcx,%r13,8), %rax
movq 0x3870(%rax), %rax
movq (%rax,%r12,8), %r14
incq %r12
jmp 0xaad5
incq %r13
jmp 0xaac2
testq %r14, %r14
je 0xae9c
movq -0x48(%rbp), %r13
leaq 0x48(%r13), %rsi
leaq -0x418(%rbp), %r12
movq %r12, %rdi
callq 0x3350
movq %r12, %rdi
leaq -0x30(%rbp), %rsi
leaq -0x3c(%rbp), %rdx
callq 0xa8b0
movq %r12, %rdi
callq 0x3140
cmpl $0x4, 0x20(%r13)
jne 0xb3bd
movl 0x88(%r13), %eax
movl %eax, -0x40(%rbp)
leaq -0x3d8(%rbp), %r12
jmp 0xb3f3
leaq 0xb85c(%rip), %rax      # 0x163d8
movq (%rax), %rcx
xorl %r13d, %r13d
xorl %r14d, %r14d
leaq 0xb84c(%rip), %rax      # 0x163d8
movq 0x8(%rax), %rax
subq %rcx, %rax
sarq $0x3, %rax
cmpq %r13, %rax
jbe 0xabed
xorl %r12d, %r12d
movq (%rcx,%r13,8), %rdx
movq 0x3870(%rdx), %rax
movq 0x3878(%rdx), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
cmpq %r12, %rdx
jbe 0xabe8
movq (%rax,%r12,8), %rdi
callq 0xe90e
leaq 0xb80b(%rip), %rcx      # 0x163d8
movq (%rcx), %rcx
testb %al, %al
jne 0xabe3
movq (%rcx,%r13,8), %rax
movq 0x3870(%rax), %rax
movq (%rax,%r12,8), %r14
incq %r12
jmp 0xab9f
incq %r13
jmp 0xab85
testq %r14, %r14
leaq 0xb771(%rip), %r12      # 0x16368
je 0xaa37
movq -0x48(%rbp), %r13
leaq 0x48(%r13), %rsi
leaq -0x378(%rbp), %r12
movq %r12, %rdi
callq 0x3350
movq %r12, %rdi
leaq -0x30(%rbp), %rsi
leaq -0x3c(%rbp), %rdx
callq 0xa8b0
movq %r12, %rdi
callq 0x3140
leaq 0x68(%r13), %rsi
leaq -0x358(%rbp), %r12
movq %r12, %rdi
callq 0x3350
movq %r12, %rdi
leaq -0x4c(%rbp), %rsi
leaq -0x40(%rbp), %rdx
callq 0xa8b0
movq %r12, %rdi
callq 0x3140
leaq 0xb712(%rip), %rax      # 0x16370
movq (%rax), %r12
leaq -0x158(%rbp), %rdi
movq %r13, %rsi
callq 0x3350
movq %r12, -0x38(%rbp)
movq %r13, %r12
movq %r13, %rsi
addq $0x28, %rsi
leaq -0x4f8(%rbp), %r13
movq %r13, %rdi
movq %rsi, -0x58(%rbp)
callq 0x3350
movl 0x20(%r12), %ecx
movq -0x38(%rbp), %rdi
leaq -0x158(%rbp), %r12
movq %r12, %rsi
movq %r13, %rdx
callq 0x6d06
jmp 0xb15a
movq (%rbx), %rcx
xorl %r13d, %r13d
xorl %r14d, %r14d
movq 0x8(%rbx), %rax
subq %rcx, %rax
sarq $0x3, %rax
cmpq %r13, %rax
jbe 0xad14
xorl %r12d, %r12d
movq (%rcx,%r13,8), %rdx
movq 0x3870(%rdx), %rax
movq 0x3878(%rdx), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
cmpq %r12, %rdx
jbe 0xad0f
movq (%rax,%r12,8), %rdi
callq 0xe90e
movq (%rbx), %rcx
testb %al, %al
jne 0xad0a
movq (%rcx,%r13,8), %rax
movq 0x3870(%rax), %rax
movq (%rax,%r12,8), %r14
incq %r12
jmp 0xaccd
incq %r13
jmp 0xacba
testq %r14, %r14
je 0xb4c2
movq -0x48(%rbp), %r13
leaq 0x48(%r13), %rsi
leaq -0x218(%rbp), %r12
movq %r12, %rdi
callq 0x3350
movq %r12, %rdi
leaq -0x30(%rbp), %rsi
leaq -0x3c(%rbp), %rdx
callq 0xa8b0
movq %r12, %rdi
callq 0x3140
movq %r13, %rsi
addq $0x68, %rsi
leaq -0x1f8(%rbp), %r12
movq %r12, %rdi
callq 0x3350
movq %r12, %rdi
leaq -0x4c(%rbp), %rsi
leaq -0x40(%rbp), %rdx
callq 0xa8b0
movq %r12, %rdi
callq 0x3140
leaq 0xb5ef(%rip), %rax      # 0x16370
movq (%rax), %r12
leaq -0x98(%rbp), %rdi
movq %r13, %rsi
callq 0x3350
leaq -0x478(%rbp), %r13
movq %r13, %rdi
leaq 0x44a5(%rip), %rsi      # 0xf249
leaq -0x29(%rbp), %rdx
callq 0x3100
movq -0x48(%rbp), %rax
movl 0x20(%rax), %ecx
movq %r12, %rdi
leaq -0x98(%rbp), %r12
movq %r12, %rsi
movq %r13, %rdx
callq 0x6d06
movl %eax, -0x38(%rbp)
movq %r13, %rdi
callq 0x3140
movq %r12, %rdi
callq 0x3140
callq 0xa955
testb %al, %al
leaq 0xb57e(%rip), %r12      # 0x16368
jne 0xaa37
leaq 0xb579(%rip), %rax      # 0x16370
movq (%rax), %rdi
movl -0x38(%rbp), %esi
callq 0x6c7e
movq %rax, %r13
movq (%r12), %rdi
callq 0xa88a
movl %eax, 0x64(%r13)
leaq 0x68(%r13), %rdi
leaq 0xbe4b(%rip), %rsi      # 0x16c68
callq 0x79a4
movq -0x48(%rbp), %rax
movl 0x20(%rax), %esi
movq %r14, %rdi
callq 0xe720
movl -0x30(%rbp), %ecx
movl -0x4c(%rbp), %r8d
movl -0x3c(%rbp), %r9d
movl -0x40(%rbp), %eax
movl %eax, (%rsp)
movq %r14, %rdi
movl -0x38(%rbp), %esi
movq -0x48(%rbp), %rdx
callq 0xe734
movl 0x64(%r13), %esi
leaq 0xb51c(%rip), %rdi      # 0x16378
callq 0x770a
testq %rax, %rax
je 0xb58d
movq %rax, %rcx
movq (%r12), %rdi
cmpb $0x1, 0x5(%rax)
jne 0xb591
movl 0x64(%r13), %eax
cltd
pushq $0x8
popq %r8
idivl %r8d
movl %eax, %esi
movl (%rcx), %eax
cltd
idivl %r8d
leal (%rdx,%rsi,8), %esi
callq 0xa79a
jmp 0xaa37
leaq -0x398(%rbp), %r14
movq %r14, %rdi
leaq 0x476a(%rip), %rsi      # 0xf617
leaq -0x29(%rbp), %rdx
callq 0x3100
leaq 0xb4ab(%rip), %r12      # 0x16368
movq %r14, %rdi
pushq $0x2
popq %rsi
callq 0x8343
jmp 0xb57b
movq (%r15), %rcx
xorl %r13d, %r13d
xorl %r14d, %r14d
movq 0x8(%r15), %rax
subq %rcx, %rax
sarq $0x3, %rax
cmpq %r13, %rax
jbe 0xaf30
xorl %r12d, %r12d
movq (%rcx,%r13,8), %rdx
movq 0x3870(%rdx), %rax
movq 0x3878(%rdx), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
cmpq %r12, %rdx
jbe 0xaf2b
movq (%rax,%r12,8), %rdi
callq 0xe90e
movq (%r15), %rcx
testb %al, %al
jne 0xaf26
movq (%rcx,%r13,8), %rax
movq 0x3870(%rax), %rax
movq (%rax,%r12,8), %r14
incq %r12
jmp 0xaee9
incq %r13
jmp 0xaed6
testq %r14, %r14
je 0xb4f3
movq -0x48(%rbp), %r13
movq %r13, %rsi
addq $0x48, %rsi
leaq -0xd8(%rbp), %r12
movq %r12, %rdi
callq 0x3350
movq %r12, %rdi
leaq -0x30(%rbp), %rsi
leaq -0x3c(%rbp), %rdx
callq 0xa8b0
leaq 0xb3fe(%rip), %r12      # 0x16368
leaq -0xd8(%rbp), %rdi
callq 0x3140
leaq 0xb3f3(%rip), %rax      # 0x16370
movq (%rax), %rax
movq %rax, -0x38(%rbp)
leaq -0xb8(%rbp), %rdi
movq %r13, %rsi
callq 0x3350
leaq -0x498(%rbp), %r13
movq %r13, %rdi
leaq 0x42a5(%rip), %rsi      # 0xf249
leaq -0x29(%rbp), %rdx
callq 0x3100
movq -0x48(%rbp), %rax
movl 0x20(%rax), %ecx
movq -0x38(%rbp), %rdi
leaq -0xb8(%rbp), %r12
movq %r12, %rsi
movq %r13, %rdx
callq 0x6d06
movl %eax, -0x38(%rbp)
movq %r13, %rdi
callq 0x3140
movq %r12, %rdi
callq 0x3140
callq 0xa955
testb %al, %al
leaq 0xb37d(%rip), %r12      # 0x16368
jne 0xaa37
movq (%r12), %rdi
callq 0xa7a2
movq %r14, %rdi
pushq $0x7
popq %rsi
callq 0xe720
movl -0x30(%rbp), %ecx
movl -0x4c(%rbp), %r8d
movl -0x3c(%rbp), %r9d
movl -0x40(%rbp), %eax
movl %eax, (%rsp)
movq %r14, %rdi
movl -0x38(%rbp), %esi
movq -0x48(%rbp), %rdx
callq 0xe734
jmp 0xaa37
leaq 0xb3bf(%rip), %rax      # 0x163f0
movq (%rax), %rcx
xorl %r13d, %r13d
xorl %r14d, %r14d
leaq 0xb3af(%rip), %rax      # 0x163f0
movq 0x8(%rax), %rax
subq %rcx, %rax
sarq $0x3, %rax
cmpq %r13, %rax
jbe 0xb0a2
xorl %r12d, %r12d
movq (%rcx,%r13,8), %rdx
movq 0x3870(%rdx), %rax
movq 0x3878(%rdx), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
cmpq %r12, %rdx
jbe 0xb09d
movq (%rax,%r12,8), %rdi
callq 0xe90e
leaq 0xb36e(%rip), %rcx      # 0x163f0
movq (%rcx), %rcx
testb %al, %al
jne 0xb098
movq (%rcx,%r13,8), %rax
movq 0x3870(%rax), %rax
movq (%rax,%r12,8), %r14
incq %r12
jmp 0xb054
incq %r13
jmp 0xb03a
testq %r14, %r14
je 0xb521
movq -0x48(%rbp), %r13
leaq 0x48(%r13), %rsi
leaq -0x318(%rbp), %r12
movq %r12, %rdi
callq 0x3350
movq %r12, %rdi
leaq -0x30(%rbp), %rsi
leaq -0x3c(%rbp), %rdx
callq 0xa8b0
movq %r12, %rdi
callq 0x3140
leaq 0x68(%r13), %rsi
leaq -0x2f8(%rbp), %r12
movq %r12, %rdi
callq 0x3350
movq %r12, %rdi
leaq -0x4c(%rbp), %rsi
leaq -0x40(%rbp), %rdx
callq 0xa8b0
movq %r12, %rdi
callq 0x3140
leaq 0xb264(%rip), %rax      # 0x16370
movq (%rax), %r12
leaq -0x138(%rbp), %rdi
movq %r13, %rsi
callq 0x3350
movq %r12, -0x38(%rbp)
movq %r13, %r12
movq %r13, %rsi
addq $0x28, %rsi
leaq -0x4d8(%rbp), %r13
movq %r13, %rdi
movq %rsi, -0x58(%rbp)
callq 0x3350
movl 0x20(%r12), %ecx
movq -0x38(%rbp), %rdi
leaq -0x138(%rbp), %r12
movq %r12, %rsi
movq %r13, %rdx
callq 0x6d06
movl %eax, -0x38(%rbp)
movq %r13, %rdi
callq 0x3140
movq %r12, %rdi
callq 0x3140
callq 0xa955
testb %al, %al
leaq 0xb1ed(%rip), %r12      # 0x16368
jne 0xaa37
movq (%r12), %rdi
callq 0xa7a2
leaq 0xbad7(%rip), %rdi      # 0x16c68
movq -0x58(%rbp), %rsi
callq 0xba4c
movl -0x38(%rbp), %ecx
movl %ecx, (%rax)
movq -0x48(%rbp), %r13
movl 0x20(%r13), %esi
movq %r14, %rdi
callq 0xe720
movl -0x30(%rbp), %ecx
movl -0x4c(%rbp), %r8d
movl -0x3c(%rbp), %r9d
movl -0x40(%rbp), %eax
movl %eax, (%rsp)
movq %r14, %rdi
movl -0x38(%rbp), %esi
jmp 0xb4b5
movq (%r15), %rcx
xorl %r13d, %r13d
xorl %r14d, %r14d
movq 0x8(%r15), %rax
subq %rcx, %rax
sarq $0x3, %rax
cmpq %r13, %rax
jbe 0xb22e
xorl %r12d, %r12d
movq (%rcx,%r13,8), %rdx
movq 0x3870(%rdx), %rax
movq 0x3878(%rdx), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
cmpq %r12, %rdx
jbe 0xb229
movq (%rax,%r12,8), %rdi
callq 0xe90e
movq (%r15), %rcx
testb %al, %al
jne 0xb224
movq (%rcx,%r13,8), %rax
movq 0x3870(%rax), %rax
movq (%rax,%r12,8), %r14
incq %r12
jmp 0xb1e7
incq %r13
jmp 0xb1d4
testq %r14, %r14
je 0xb54f
movq -0x48(%rbp), %r13
leaq 0x48(%r13), %rsi
leaq -0x118(%rbp), %r12
movq %r12, %rdi
callq 0x3350
movq %r12, %rdi
leaq -0x30(%rbp), %rsi
leaq -0x3c(%rbp), %rdx
callq 0xa8b0
leaq 0xb103(%rip), %r12      # 0x16368
leaq -0x118(%rbp), %rdi
callq 0x3140
leaq 0xb0f8(%rip), %rax      # 0x16370
movq (%rax), %rax
movq %rax, -0x38(%rbp)
leaq -0xf8(%rbp), %rdi
movq %r13, %rsi
callq 0x3350
movq %r13, %rsi
addq $0x28, %rsi
leaq -0x4b8(%rbp), %r13
movq %r13, %rdi
movq %rsi, -0x58(%rbp)
callq 0x3350
movq -0x48(%rbp), %rax
movl 0x20(%rax), %ecx
movq -0x38(%rbp), %rdi
leaq -0xf8(%rbp), %r12
movq %r12, %rsi
movq %r13, %rdx
callq 0x6d06
movl %eax, -0x38(%rbp)
movq %r13, %rdi
callq 0x3140
movq %r12, %rdi
callq 0x3140
callq 0xa955
testb %al, %al
leaq 0xb082(%rip), %r12      # 0x16368
jne 0xaa37
movq (%r12), %rdi
callq 0xa7a2
leaq 0xb96c(%rip), %rdi      # 0x16c68
movq -0x58(%rbp), %rsi
callq 0xba4c
movl -0x38(%rbp), %esi
movl %esi, (%rax)
movl -0x30(%rbp), %ecx
movl -0x3c(%rbp), %r9d
movl -0x40(%rbp), %eax
movl %eax, (%rsp)
movq %r14, %rdi
movq -0x48(%rbp), %rdx
pushq $-0x1
popq %r8
callq 0xe734
jmp 0xaa37
leaq 0xb03d(%rip), %rax      # 0x16370
movq (%rax), %r14
leaq -0x78(%rbp), %rdi
movq -0x48(%rbp), %rsi
callq 0x3350
leaq -0x458(%rbp), %r13
movq %r13, %rdi
leaq 0x3ef5(%rip), %rsi      # 0xf249
leaq -0x29(%rbp), %rdx
callq 0x3100
movq -0x48(%rbp), %rax
movl 0x20(%rax), %ecx
movq %r14, %rdi
leaq -0x78(%rbp), %r12
movq %r12, %rsi
movq %r13, %rdx
callq 0x6d06
movl %eax, %r14d
movq %r13, %rdi
callq 0x3140
movq %r12, %rdi
callq 0x3140
callq 0xa955
testb %al, %al
leaq 0xafd1(%rip), %r12      # 0x16368
jne 0xaa37
movq (%r12), %rdi
callq 0xa7a2
leaq 0xb00b(%rip), %rax      # 0x163b8
movq (%rax), %rdi
movl %r14d, %esi
callq 0x5530
jmp 0xaa37
leaq 0x68(%r13), %rsi
leaq -0x3f8(%rbp), %r13
movq %r13, %rdi
callq 0x3350
movq %r13, %rdi
leaq -0x4c(%rbp), %rsi
leaq -0x40(%rbp), %rdx
callq 0xa8b0
leaq -0x3d8(%rbp), %r12
movq %r13, %rdi
callq 0x3140
movq -0x48(%rbp), %r13
leaq 0xaf76(%rip), %rax      # 0x16370
movq (%rax), %rax
movq %rax, -0x38(%rbp)
leaq -0x178(%rbp), %rdi
movq %r13, %rsi
callq 0x3350
movq %r13, %rsi
addq $0x28, %rsi
movq %r12, %rdi
movq %rsi, -0x58(%rbp)
callq 0x3350
movl 0x20(%r13), %ecx
movq -0x38(%rbp), %rdi
movq %r12, %r13
leaq -0x178(%rbp), %r12
movq %r12, %rsi
movq %r13, %rdx
callq 0x6d06
movl %eax, -0x38(%rbp)
movq %r13, %rdi
callq 0x3140
movq %r12, %rdi
callq 0x3140
callq 0xa955
testb %al, %al
leaq 0xaf07(%rip), %r12      # 0x16368
jne 0xaa37
movq (%r12), %rdi
callq 0xa7a2
leaq 0xb7f1(%rip), %rdi      # 0x16c68
movq -0x58(%rbp), %rsi
callq 0xba4c
movl -0x38(%rbp), %r12d
movl %r12d, (%rax)
movq -0x48(%rbp), %r13
movl 0x20(%r13), %esi
movq %r14, %rdi
callq 0xe720
movl -0x30(%rbp), %ecx
movl -0x4c(%rbp), %r8d
movl -0x3c(%rbp), %r9d
movl -0x40(%rbp), %eax
movl %eax, (%rsp)
movq %r14, %rdi
movl %r12d, %esi
leaq 0xaeb3(%rip), %r12      # 0x16368
movq %r13, %rdx
callq 0xe734
jmp 0xaa37
leaq -0x1b8(%rbp), %r14
movq %r14, %rdi
leaq 0x41f4(%rip), %rsi      # 0xf6c7
leaq -0x29(%rbp), %rdx
callq 0x3100
leaq 0xae85(%rip), %r12      # 0x16368
movq %r14, %rdi
pushq $0x2
popq %rsi
callq 0x8343
jmp 0xb57b
leaq -0x238(%rbp), %r14
movq %r14, %rdi
leaq 0x4199(%rip), %rsi      # 0xf69d
leaq -0x29(%rbp), %rdx
callq 0x3100
leaq 0xae54(%rip), %r12      # 0x16368
movq %r14, %rdi
pushq $0x2
popq %rsi
callq 0x8343
jmp 0xb57b
leaq -0x2b8(%rbp), %r14
movq %r14, %rdi
leaq 0x4113(%rip), %rsi      # 0xf645
leaq -0x29(%rbp), %rdx
callq 0x3100
leaq 0xae26(%rip), %r12      # 0x16368
movq %r14, %rdi
pushq $0x2
popq %rsi
callq 0x8343
jmp 0xb57b
leaq -0x278(%rbp), %r14
movq %r14, %rdi
leaq 0x4113(%rip), %rsi      # 0xf673
leaq -0x29(%rbp), %rdx
callq 0x3100
leaq 0xadf8(%rip), %r12      # 0x16368
movq %r14, %rdi
pushq $0x2
popq %rsi
callq 0x8343
movq %r14, %rdi
callq 0x3140
callq 0xa955
jmp 0xaa37
movq (%r12), %rdi
callq 0xa7a2
jmp 0xaa37
movq %rdx, %r14
movq %r13, %rdi
movq %rax, %r13
callq 0x3140
jmp 0xb5c8
movq %rdx, %r14
movq %r13, %rdi
movq %rax, %r13
callq 0x3140
leaq 0xada8(%rip), %r12      # 0x16368
jmp 0xb5fa
movq %rdx, %r14
movq %rax, %r13
leaq 0xad99(%rip), %r12      # 0x16368
leaq -0x138(%rbp), %rdi
callq 0x3140
jmp 0xb615
movq %rdx, %r14
movq %r13, %rdi
movq %rax, %r13
callq 0x3140
leaq 0xad76(%rip), %r12      # 0x16368
jmp 0xb654
movq %rdx, %r14
movq %rax, %r13
leaq -0xf8(%rbp), %rdi
callq 0x3140
jmp 0xb668
movq %rdx, %r14
movq %rax, %r13
leaq 0xad53(%rip), %r12      # 0x16368
cmpl $0x1, %r14d
jne 0xb9f5
movq %r13, %rdi
callq 0x3110
leaq -0x2d8(%rbp), %r14
movq %r14, %rdi
leaq 0x3fd3(%rip), %rsi      # 0xf60b
leaq -0x29(%rbp), %rdx
callq 0x3100
movq %r14, %rdi
callq 0x7ee9
jmp 0xb892
movq %rdx, %r14
movq %rax, %r13
leaq -0xb8(%rbp), %rdi
callq 0x3140
jmp 0xb6a7
movq %rdx, %r14
movq %rax, %r13
cmpl $0x1, %r14d
jne 0xb9f5
movq %r13, %rdi
callq 0x3110
leaq -0x298(%rbp), %r14
movq %r14, %rdi
leaq 0x3f80(%rip), %rsi      # 0xf60b
leaq -0x29(%rbp), %rdx
callq 0x3100
movq %r14, %rdi
callq 0x7ee9
jmp 0xb892
movq %rdx, %r14
movq %rax, %r13
cmpl $0x1, %r14d
jne 0xb9f5
movq %r13, %rdi
callq 0x3110
leaq -0x258(%rbp), %r14
movq %r14, %rdi
leaq 0x3f41(%rip), %rsi      # 0xf60b
leaq -0x29(%rbp), %rdx
callq 0x3100
movq %r14, %rdi
callq 0x7ee9
jmp 0xb892
movq %rdx, %r14
movq %r13, %rdi
movq %rax, %r13
callq 0x3140
leaq 0xac73(%rip), %r12      # 0x16368
jmp 0xb6fd
movq %rdx, %r14
movq %rax, %r13
leaq -0x78(%rbp), %rdi
callq 0x3140
jmp 0xb70e
movq %rdx, %r14
movq %rax, %r13
cmpl $0x1, %r14d
jne 0xb9f5
movq %r13, %rdi
callq 0x3110
leaq -0x198(%rbp), %r14
movq %r14, %rdi
leaq 0x3eda(%rip), %rsi      # 0xf60b
leaq -0x29(%rbp), %rdx
callq 0x3100
movq %r14, %rdi
callq 0x7ee9
jmp 0xb892
movq %rdx, %r14
movq %r13, %rdi
movq %rax, %r13
callq 0x3140
jmp 0xb76d
movq %rdx, %r14
movq %r13, %rdi
movq %rax, %r13
callq 0x3140
jmp 0xb788
movq %rdx, %r14
movq %rax, %r13
leaq 0xabf4(%rip), %r12      # 0x16368
leaq -0x98(%rbp), %rdi
callq 0x3140
jmp 0xb7aa
movq %rdx, %r14
movq %rax, %r13
leaq 0xabd9(%rip), %r12      # 0x16368
leaq -0x158(%rbp), %rdi
callq 0x3140
jmp 0xb7f0
movq %rdx, %r14
movq %rax, %r13
leaq 0xabbe(%rip), %r12      # 0x16368
cmpl $0x1, %r14d
jne 0xb9f5
movq %r13, %rdi
callq 0x3110
leaq -0x1d8(%rbp), %r14
movq %r14, %rdi
leaq 0x3e3e(%rip), %rsi      # 0xf60b
leaq -0x29(%rbp), %rdx
callq 0x3100
movq %r14, %rdi
callq 0x7ee9
jmp 0xb892
movq %rdx, %r14
movq %rax, %r13
leaq 0xab78(%rip), %r12      # 0x16368
cmpl $0x1, %r14d
jne 0xb9f5
movq %r13, %rdi
callq 0x3110
leaq -0x338(%rbp), %r14
movq %r14, %rdi
leaq 0x3df8(%rip), %rsi      # 0xf60b
leaq -0x29(%rbp), %rdx
callq 0x3100
movq %r14, %rdi
callq 0x7ee9
jmp 0xb892
movq %rdx, %r14
movq %r13, %rdi
movq %rax, %r13
callq 0x3140
jmp 0xb83c
movq %rdx, %r14
movq %rax, %r13
leaq 0xab25(%rip), %r12      # 0x16368
leaq -0x178(%rbp), %rdi
callq 0x3140
jmp 0xb85e
movq %rdx, %r14
movq %rax, %r13
leaq 0xab0a(%rip), %r12      # 0x16368
cmpl $0x1, %r14d
jne 0xb9f5
movq %r13, %rdi
callq 0x3110
leaq -0x3b8(%rbp), %r14
movq %r14, %rdi
leaq 0x3d8a(%rip), %rsi      # 0xf60b
leaq -0x29(%rbp), %rdx
callq 0x3100
movq %r14, %rdi
callq 0x7ee9
movq %r14, %rdi
callq 0x3140
callq 0x33f0
jmp 0xaa37
movq %rax, %r13
leaq -0x258(%rbp), %rdi
jmp 0xb902
jmp 0xb909
movq %rax, %r13
leaq -0x298(%rbp), %rdi
jmp 0xb902
jmp 0xb909
movq %rax, %r13
leaq -0x2d8(%rbp), %rdi
jmp 0xb902
jmp 0xb909
movq %rax, %r13
leaq -0x198(%rbp), %rdi
jmp 0xb902
jmp 0xb909
movq %rax, %r13
leaq -0x338(%rbp), %rdi
jmp 0xb902
jmp 0xb909
movq %rax, %r13
leaq -0x1d8(%rbp), %rdi
jmp 0xb902
jmp 0xb909
movq %rax, %r13
leaq -0x3b8(%rbp), %rdi
callq 0x3140
jmp 0xb90c
movq %rax, %r13
callq 0x33f0
jmp 0xb9f5
movq %rax, %r13
leaq -0x278(%rbp), %rdi
jmp 0xb9f0
movq %rax, %r13
leaq -0x2b8(%rbp), %rdi
jmp 0xb9f0
movq %rax, %r13
leaq -0x238(%rbp), %rdi
jmp 0xb9f0
jmp 0xb9a5
jmp 0xb9a5
jmp 0xb9a5
movq %rax, %r13
leaq -0x2f8(%rbp), %rdi
jmp 0xb9f0
movq %rax, %r13
leaq -0x118(%rbp), %rdi
jmp 0xb9f0
movq %rax, %r13
leaq -0x318(%rbp), %rdi
jmp 0xb9f0
movq %rax, %r13
leaq -0xd8(%rbp), %rdi
jmp 0xb9f0
movq %rax, %r13
leaq -0x1b8(%rbp), %rdi
jmp 0xb9f0
jmp 0xb9a5
movq %rax, %r13
leaq -0x3f8(%rbp), %rdi
jmp 0xb9f0
movq %rax, %r13
leaq -0x398(%rbp), %rdi
jmp 0xb9f0
movq %rax, %r13
jmp 0xb9f5
movq %rax, %r13
leaq -0x1f8(%rbp), %rdi
jmp 0xb9f0
movq %rax, %r13
leaq -0x358(%rbp), %rdi
jmp 0xb9f0
movq %rax, %r13
leaq -0x218(%rbp), %rdi
jmp 0xb9f0
movq %rax, %r13
leaq -0x378(%rbp), %rdi
jmp 0xb9f0
movq %rax, %r13
leaq -0x418(%rbp), %rdi
jmp 0xb9f0
movq %rax, %r13
leaq -0x438(%rbp), %rdi
callq 0x3140
movq %r13, %rdi
callq 0x3440