// File: jstaursky[P]hutch/src/hutch.cpp
// Function: Hutch_Instructions::storeInstruction(Address const&, std::any)
void Hutch_Instructions::storeInstruction (Address const& addr, any insn)
{
    auto len = addr.getSpace ()->getTrans ()->instructionLength (addr);

    // Keep track of vector relocations for Hutch_Instructions::mark.
    auto ofront = (!instructions.empty ()) ? instructions.data () : 0;
    auto oback = (!instructions.empty ()) ?
                     instructions.data () + instructions.size () - 1 :
                     0;
    size_t fdiff, bdiff;

    // Do not need to track very initial run (when instructions.empty ())
    if (instructions.empty ()) {
        Instruction instr;
        instr.bytelength = len;
        instr.address = addr.getOffset ();
        if (insn.type () == typeid (string)) {
            instr.assembly = any_cast<string> (insn);
        }
        if (insn.type () == typeid (PcodeData)) {
            instr.pcode.push_back (any_cast<PcodeData> (insn));
        }
        instructions.push_back (instr);
        this->currentinsn = &instructions.back ();
        return;
    } else if ((insn.type () == typeid (PcodeData)) and
               (instructions.front ().pcode.empty ())) {
        instructions.front ().pcode.push_back (any_cast<PcodeData> (insn));
        instructions.front ().bytelength = len;
        this->currentinsn = &instructions.front ();

        // Move mark if vector instructions has moved.
        fdiff = instructions.data () - ofront;
        bdiff = (instructions.data () + instructions.size () - 1) - oback;
        mark = (mark != nullptr) ?
                     (fdiff != 0) || (bdiff != 0) ?
                     (fdiff > bdiff) ? mark + fdiff : mark + bdiff :
                     mark :
                     nullptr;
        return;
    }

    for (auto i = 0; i != instructions.size (); ++i) {
        if ((instructions[i].address == addr.getOffset ()) and
            (insn.type () == typeid (string))) {
            if (instructions[i].assembly == any_cast<string> (insn)) {
                this->currentinsn = &instructions[i];
                return;
            }
            if (instructions[i].assembly == "") {
                instructions[i].assembly = any_cast<string> (insn);
                instructions[i].bytelength = len;
                this->currentinsn = &instructions[i];
                return;
            }
        }
        if ((instructions[i].address == addr.getOffset ()) and
            (insn.type () == typeid (PcodeData))) {
            auto pcode = any_cast<PcodeData> (insn);
            if (find (instructions[i].pcode.begin (),
                      instructions[i].pcode.end (),
                      pcode) != instructions[i].pcode.end ()) {
                pcode.release ();
                this->currentinsn = &instructions[i];
                return;
            } else {
                instructions[i].pcode.push_back (any_cast<PcodeData> (insn));
                instructions[i].bytelength = len;
                this->currentinsn = &instructions[i];
                // Move mark if vector instructions has moved.
                fdiff = instructions.data () - ofront;
                bdiff =
                    (instructions.data () + instructions.size () - 1) - oback;
                mark = (mark != nullptr) ?
                             (fdiff != 0) || (bdiff != 0) ?
                             (fdiff > bdiff) ? mark + fdiff : mark + bdiff :
                             mark :
                             nullptr;
                return;
            }
        }
    }

    Instruction instr;

    instr.address = addr.getOffset ();
    instr.bytelength = len;

    if (insn.type () == typeid (string))
        instr.assembly = any_cast<string> (insn);
    if (insn.type () == typeid (PcodeData))
        instr.pcode.push_back (any_cast<PcodeData> (insn));

    auto index = distance (
        instructions.begin (),
        lower_bound (instructions.begin (), instructions.end (),
                     addr.getOffset (),
                     [](const Instruction& lhs, const uintb& rhs) -> bool {
                         return lhs.address < rhs;
                     }));

    if (instructions[index].address != addr.getOffset ()) {
        instructions.insert (instructions.begin () + index, instr);
        if (index > 0)
            this->currentinsn = &instructions[index - 1];
        else
            this->currentinsn = &instructions[index];
        // Move mark if vector instructions has moved.
        fdiff = instructions.data () - ofront;
        bdiff = (instructions.data () + instructions.size () - 1) - oback;
        mark = (mark != nullptr) ?
                     (fdiff != 0) || (bdiff != 0) ?
                     (fdiff > bdiff) ? mark + fdiff : mark + bdiff :
                     mark :
                     nullptr;
        return;
    }
    this->currentinsn = &instructions[index];
}

// Assembly:
subq $0x3e8, %rsp            # imm = 0x3E8
movq %rdx, 0x130(%rsp)
movq %rdi, 0x3e0(%rsp)
movq %rsi, 0x3d8(%rsp)
movq %rdx, 0x3d0(%rsp)
movq 0x3e0(%rsp), %rax
movq %rax, 0x138(%rsp)
movq 0x3d8(%rsp), %rdi
callq 0xd9cf0
movq %rax, %rdi
callq 0xdf7e0
movq %rax, %rdi
movq 0x3d8(%rsp), %rsi
movq (%rdi), %rax
callq *0x58(%rax)
movq 0x138(%rsp), %rdi
movl %eax, 0x3cc(%rsp)
addq $0x10, %rdi
callq 0xde940
testb $0x1, %al
jne 0x171d64
movq 0x138(%rsp), %rdi
addq $0x10, %rdi
callq 0xd66a0
movq %rax, 0x128(%rsp)
jmp 0x171d70
xorl %eax, %eax
movq %rax, 0x128(%rsp)
jmp 0x171d70
movq 0x138(%rsp), %rdi
movq 0x128(%rsp), %rax
movq %rax, 0x3c0(%rsp)
addq $0x10, %rdi
callq 0xde940
testb $0x1, %al
jne 0x171ddf
movq 0x138(%rsp), %rdi
addq $0x10, %rdi
callq 0xd66a0
movq 0x138(%rsp), %rdi
movq %rax, 0x118(%rsp)
addq $0x10, %rdi
callq 0xd1b60
movq %rax, %rcx
movq 0x118(%rsp), %rax
imulq $0x58, %rcx, %rcx
addq %rcx, %rax
addq $-0x58, %rax
movq %rax, 0x120(%rsp)
jmp 0x171deb
xorl %eax, %eax
movq %rax, 0x120(%rsp)
jmp 0x171deb
movq 0x138(%rsp), %rdi
movq 0x120(%rsp), %rax
movq %rax, 0x3b8(%rsp)
addq $0x10, %rdi
callq 0xde940
testb $0x1, %al
jne 0x171e15
jmp 0x171f8f
leaq 0x350(%rsp), %rdi
callq 0xd1510
movslq 0x3cc(%rsp), %rax
movq %rax, 0x358(%rsp)
movq 0x3d8(%rsp), %rdi
callq 0xe03b0
movq %rax, 0x110(%rsp)
jmp 0x171e49
movq 0x130(%rsp), %rdi
movq 0x110(%rsp), %rax
movq %rax, 0x350(%rsp)
callq 0xe0ce0
movq %rax, %rdi
movq 0x55cd8(%rip), %rsi     # 0x1c7b48
callq 0xd4eb0
testb $0x1, %al
jne 0x171e7b
jmp 0x171ee0
movq 0x130(%rsp), %rsi
leaq 0x320(%rsp), %rdi
callq 0xd31b0
jmp 0x171e92
leaq 0x350(%rsp), %rdi
addq $0x10, %rdi
leaq 0x320(%rsp), %rsi
callq 0xda960
leaq 0x320(%rsp), %rdi
callq 0xd4550
jmp 0x171ee0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
leaq 0x350(%rsp), %rdi
callq 0xd4fe0
jmp 0x172c30
movq 0x130(%rsp), %rdi
callq 0xe0ce0
movq %rax, %rdi
movq 0x55c71(%rip), %rsi     # 0x1c7b68
callq 0xd4eb0
testb $0x1, %al
jne 0x171f02
jmp 0x171f42
movq 0x130(%rsp), %rsi
leaq 0x380(%rsp), %rax
movq %rax, 0x108(%rsp)
leaq 0x300(%rsp), %rdi
callq 0xd9e80
jmp 0x171f29
movq 0x108(%rsp), %rdi
leaq 0x300(%rsp), %rsi
callq 0xd1700
jmp 0x171f40
jmp 0x171f42
movq 0x138(%rsp), %rdi
addq $0x10, %rdi
leaq 0x350(%rsp), %rsi
callq 0xe1040
jmp 0x171f5d
movq 0x138(%rsp), %rdi
addq $0x10, %rdi
callq 0xd3eb0
movq %rax, %rcx
movq 0x138(%rsp), %rax
movq %rcx, 0x28(%rax)
leaq 0x350(%rsp), %rdi
callq 0xd4fe0
jmp 0x172c28
movq 0x130(%rsp), %rdi
callq 0xe0ce0
movq %rax, %rdi
movq 0x55bc2(%rip), %rsi     # 0x1c7b68
callq 0xd4eb0
testb $0x1, %al
jne 0x171fb4
jmp 0x1721cb
movq 0x138(%rsp), %rdi
addq $0x10, %rdi
callq 0xd1520
movq %rax, %rdi
addq $0x30, %rdi
callq 0xd2700
testb $0x1, %al
jne 0x171fda
jmp 0x1721cb
movq 0x138(%rsp), %rdi
addq $0x10, %rdi
callq 0xd1520
movq 0x130(%rsp), %rsi
addq $0x30, %rax
movq %rax, 0xf0(%rsp)
leaq 0x2e0(%rsp), %rdi
callq 0xd9e80
movq 0xf0(%rsp), %rdi
leaq 0x2e0(%rsp), %rsi
callq 0xd1700
movq 0x138(%rsp), %rdi
movslq 0x3cc(%rsp), %rax
movq %rax, 0xf8(%rsp)
addq $0x10, %rdi
callq 0xd1520
movq 0xf8(%rsp), %rcx
movq 0x138(%rsp), %rdi
movq %rcx, 0x8(%rax)
addq $0x10, %rdi
callq 0xd1520
movq 0x138(%rsp), %rdi
movq %rax, 0x28(%rdi)
addq $0x10, %rdi
callq 0xd66a0
movq 0x138(%rsp), %rdi
movq 0x3c0(%rsp), %rcx
subq %rcx, %rax
movl $0x58, %ecx
cqto
idivq %rcx
movq %rax, 0x3b0(%rsp)
addq $0x10, %rdi
callq 0xd66a0
movq 0x138(%rsp), %rdi
movq %rax, 0x100(%rsp)
addq $0x10, %rdi
callq 0xd1b60
movq %rax, %rcx
movq 0x100(%rsp), %rax
imulq $0x58, %rcx, %rcx
addq %rcx, %rax
addq $-0x58, %rax
movq 0x3b8(%rsp), %rcx
subq %rcx, %rax
movl $0x58, %ecx
cqto
idivq %rcx
movq %rax, %rcx
movq 0x138(%rsp), %rax
movq %rcx, 0x3a8(%rsp)
cmpq $0x0, 0x30(%rax)
je 0x1721a6
cmpq $0x0, 0x3b0(%rsp)
jne 0x17211a
cmpq $0x0, 0x3a8(%rsp)
je 0x172180
movq 0x3b0(%rsp), %rax
cmpq 0x3a8(%rsp), %rax
jbe 0x17214e
movq 0x138(%rsp), %rax
movq 0x30(%rax), %rax
imulq $0x58, 0x3b0(%rsp), %rcx
addq %rcx, %rax
movq %rax, 0xe8(%rsp)
jmp 0x17216e
movq 0x138(%rsp), %rax
movq 0x30(%rax), %rax
imulq $0x58, 0x3a8(%rsp), %rcx
addq %rcx, %rax
movq %rax, 0xe8(%rsp)
movq 0xe8(%rsp), %rax
movq %rax, 0xe0(%rsp)
jmp 0x172194
movq 0x138(%rsp), %rax
movq 0x30(%rax), %rax
movq %rax, 0xe0(%rsp)
movq 0xe0(%rsp), %rax
movq %rax, 0xd8(%rsp)
jmp 0x1721b2
xorl %eax, %eax
movq %rax, 0xd8(%rsp)
jmp 0x1721b2
movq 0x138(%rsp), %rax
movq 0xd8(%rsp), %rcx
movq %rcx, 0x30(%rax)
jmp 0x172c28
jmp 0x1721cd
movl $0x0, 0x2dc(%rsp)
movq 0x138(%rsp), %rdi
movslq 0x2dc(%rsp), %rax
movq %rax, 0xd0(%rsp)
addq $0x10, %rdi
callq 0xd1b60
movq %rax, %rcx
movq 0xd0(%rsp), %rax
cmpq %rcx, %rax
je 0x172794
movq 0x138(%rsp), %rdi
addq $0x10, %rdi
movslq 0x2dc(%rsp), %rsi
callq 0xde8f0
movq (%rax), %rax
movq %rax, 0xc8(%rsp)
movq 0x3d8(%rsp), %rdi
callq 0xe03b0
movq %rax, %rcx
movq 0xc8(%rsp), %rax
cmpq %rcx, %rax
jne 0x1723fc
movq 0x130(%rsp), %rdi
callq 0xe0ce0
movq %rax, %rdi
movq 0x558df(%rip), %rsi     # 0x1c7b48
callq 0xd4eb0
testb $0x1, %al
jne 0x172277
jmp 0x1723fc
movq 0x138(%rsp), %rdi
addq $0x10, %rdi
movslq 0x2dc(%rsp), %rsi
callq 0xde8f0
movq 0x130(%rsp), %rsi
addq $0x10, %rax
movq %rax, 0xb8(%rsp)
leaq 0x2b8(%rsp), %rdi
callq 0xd31b0
movq 0xb8(%rsp), %rdi
leaq 0x2b8(%rsp), %rsi
callq 0xd3cf0
movb %al, 0xc7(%rsp)
leaq 0x2b8(%rsp), %rdi
callq 0xd4550
movb 0xc7(%rsp), %al
testb $0x1, %al
jne 0x1722e7
jmp 0x172314
movq 0x138(%rsp), %rdi
addq $0x10, %rdi
movslq 0x2dc(%rsp), %rsi
callq 0xde8f0
movq %rax, %rcx
movq 0x138(%rsp), %rax
movq %rcx, 0x28(%rax)
jmp 0x172c28
movq 0x138(%rsp), %rdi
addq $0x10, %rdi
movslq 0x2dc(%rsp), %rsi
callq 0xde8f0
movq %rax, %rdi
addq $0x10, %rdi
leaq 0x16d55(%rip), %rsi     # 0x189090
callq 0xe30f0
testb $0x1, %al
jne 0x172349
jmp 0x1723fa
movq 0x130(%rsp), %rsi
leaq 0x298(%rsp), %rdi
callq 0xd31b0
movq 0x138(%rsp), %rdi
addq $0x10, %rdi
movslq 0x2dc(%rsp), %rsi
callq 0xde8f0
movq %rax, %rdi
addq $0x10, %rdi
leaq 0x298(%rsp), %rsi
callq 0xda960
leaq 0x298(%rsp), %rdi
callq 0xd4550
movq 0x138(%rsp), %rdi
movslq 0x3cc(%rsp), %rax
movq %rax, 0xb0(%rsp)
addq $0x10, %rdi
movslq 0x2dc(%rsp), %rsi
callq 0xde8f0
movq 0xb0(%rsp), %rcx
movq 0x138(%rsp), %rdi
movq %rcx, 0x8(%rax)
addq $0x10, %rdi
movslq 0x2dc(%rsp), %rsi
callq 0xde8f0
movq %rax, %rcx
movq 0x138(%rsp), %rax
movq %rcx, 0x28(%rax)
jmp 0x172c28
jmp 0x1723fc
movq 0x138(%rsp), %rdi
addq $0x10, %rdi
movslq 0x2dc(%rsp), %rsi
callq 0xde8f0
movq (%rax), %rax
movq %rax, 0xa8(%rsp)
movq 0x3d8(%rsp), %rdi
callq 0xe03b0
movq %rax, %rcx
movq 0xa8(%rsp), %rax
cmpq %rcx, %rax
jne 0x17277c
movq 0x130(%rsp), %rdi
callq 0xe0ce0
movq %rax, %rdi
movq 0x55710(%rip), %rsi     # 0x1c7b68
callq 0xd4eb0
testb $0x1, %al
jne 0x172466
jmp 0x17277c
movq 0x130(%rsp), %rsi
leaq 0x278(%rsp), %rdi
callq 0xd9e80
movq 0x138(%rsp), %rdi
addq $0x10, %rdi
movslq 0x2dc(%rsp), %rsi
callq 0xde8f0
movq %rax, %rdi
addq $0x30, %rdi
callq 0xdc290
movq 0x138(%rsp), %rdi
movq %rax, 0x268(%rsp)
addq $0x10, %rdi
movslq 0x2dc(%rsp), %rsi
callq 0xde8f0
movq %rax, %rdi
addq $0x30, %rdi
callq 0xdcc40
movq %rax, 0x260(%rsp)
movq 0x268(%rsp), %rdi
movq 0x260(%rsp), %rsi
leaq 0x278(%rsp), %rdx
callq 0xd8310
movq 0x138(%rsp), %rdi
movq %rax, 0x270(%rsp)
addq $0x10, %rdi
movslq 0x2dc(%rsp), %rsi
callq 0xde8f0
movq %rax, %rdi
addq $0x30, %rdi
callq 0xdcc40
movq %rax, 0x258(%rsp)
leaq 0x270(%rsp), %rdi
leaq 0x258(%rsp), %rsi
callq 0xd84a0
testb $0x1, %al
jne 0x172542
jmp 0x17257c
leaq 0x278(%rsp), %rdi
callq 0xce580
movq 0x138(%rsp), %rdi
addq $0x10, %rdi
movslq 0x2dc(%rsp), %rsi
callq 0xde8f0
movq %rax, %rcx
movq 0x138(%rsp), %rax
movq %rcx, 0x28(%rax)
jmp 0x172c28
movq 0x138(%rsp), %rdi
addq $0x10, %rdi
movslq 0x2dc(%rsp), %rsi
callq 0xde8f0
movq 0x130(%rsp), %rsi
addq $0x30, %rax
movq %rax, 0x90(%rsp)
leaq 0x238(%rsp), %rdi
callq 0xd9e80
movq 0x90(%rsp), %rdi
leaq 0x238(%rsp), %rsi
callq 0xd1700
movq 0x138(%rsp), %rdi
movslq 0x3cc(%rsp), %rax
movq %rax, 0x98(%rsp)
addq $0x10, %rdi
movslq 0x2dc(%rsp), %rsi
callq 0xde8f0
movq 0x98(%rsp), %rcx
movq 0x138(%rsp), %rdi
movq %rcx, 0x8(%rax)
addq $0x10, %rdi
movslq 0x2dc(%rsp), %rsi
callq 0xde8f0
movq 0x138(%rsp), %rdi
movq %rax, 0x28(%rdi)
addq $0x10, %rdi
callq 0xd66a0
movq 0x138(%rsp), %rdi
movq 0x3c0(%rsp), %rcx
subq %rcx, %rax
movl $0x58, %ecx
cqto
idivq %rcx
movq %rax, 0x3b0(%rsp)
addq $0x10, %rdi
callq 0xd66a0
movq 0x138(%rsp), %rdi
movq %rax, 0xa0(%rsp)
addq $0x10, %rdi
callq 0xd1b60
movq %rax, %rcx
movq 0xa0(%rsp), %rax
imulq $0x58, %rcx, %rcx
addq %rcx, %rax
addq $-0x58, %rax
movq 0x3b8(%rsp), %rcx
subq %rcx, %rax
movl $0x58, %ecx
cqto
idivq %rcx
movq %rax, %rcx
movq 0x138(%rsp), %rax
movq %rcx, 0x3a8(%rsp)
cmpq $0x0, 0x30(%rax)
je 0x17275d
cmpq $0x0, 0x3b0(%rsp)
jne 0x1726d4
cmpq $0x0, 0x3a8(%rsp)
je 0x17273a
movq 0x3b0(%rsp), %rax
cmpq 0x3a8(%rsp), %rax
jbe 0x172708
movq 0x138(%rsp), %rax
movq 0x30(%rax), %rax
imulq $0x58, 0x3b0(%rsp), %rcx
addq %rcx, %rax
movq %rax, 0x88(%rsp)
jmp 0x172728
movq 0x138(%rsp), %rax
movq 0x30(%rax), %rax
imulq $0x58, 0x3a8(%rsp), %rcx
addq %rcx, %rax
movq %rax, 0x88(%rsp)
movq 0x88(%rsp), %rax
movq %rax, 0x80(%rsp)
jmp 0x17274e
movq 0x138(%rsp), %rax
movq 0x30(%rax), %rax
movq %rax, 0x80(%rsp)
movq 0x80(%rsp), %rax
movq %rax, 0x78(%rsp)
jmp 0x172766
xorl %eax, %eax
movq %rax, 0x78(%rsp)
jmp 0x172766
movq 0x138(%rsp), %rax
movq 0x78(%rsp), %rcx
movq %rcx, 0x30(%rax)
jmp 0x172c28
jmp 0x17277e
movl 0x2dc(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x2dc(%rsp)
jmp 0x1721d8
leaq 0x1e0(%rsp), %rdi
callq 0xd1510
movq 0x3d8(%rsp), %rdi
callq 0xe03b0
movq %rax, 0x70(%rsp)
jmp 0x1727b5
movq 0x130(%rsp), %rdi
movq 0x70(%rsp), %rax
movq %rax, 0x1e0(%rsp)
movslq 0x3cc(%rsp), %rax
movq %rax, 0x1e8(%rsp)
callq 0xe0ce0
movq %rax, %rdi
movq 0x5535f(%rip), %rsi     # 0x1c7b48
callq 0xd4eb0
testb $0x1, %al
jne 0x1727f4
jmp 0x172859
movq 0x130(%rsp), %rsi
leaq 0x1c0(%rsp), %rdi
callq 0xd31b0
jmp 0x17280b
leaq 0x1e0(%rsp), %rdi
addq $0x10, %rdi
leaq 0x1c0(%rsp), %rsi
callq 0xda960
leaq 0x1c0(%rsp), %rdi
callq 0xd4550
jmp 0x172859
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
leaq 0x1e0(%rsp), %rdi
callq 0xd4fe0
jmp 0x172c30
movq 0x130(%rsp), %rdi
callq 0xe0ce0
movq %rax, %rdi
movq 0x552f8(%rip), %rsi     # 0x1c7b68
callq 0xd4eb0
testb $0x1, %al
jne 0x17287b
jmp 0x1728b5
movq 0x130(%rsp), %rsi
leaq 0x210(%rsp), %rax
movq %rax, 0x68(%rsp)
leaq 0x1a0(%rsp), %rdi
callq 0xd9e80
jmp 0x17289f
movq 0x68(%rsp), %rdi
leaq 0x1a0(%rsp), %rsi
callq 0xd1700
jmp 0x1728b3
jmp 0x1728b5
movq 0x138(%rsp), %rdi
addq $0x10, %rdi
movq %rdi, 0x58(%rsp)
callq 0xdbd10
movq 0x58(%rsp), %rdi
movq %rax, 0x190(%rsp)
callq 0xdbd10
movq 0x58(%rsp), %rdi
movq %rax, 0x180(%rsp)
callq 0xd44c0
movq %rax, 0x178(%rsp)
movq 0x3d8(%rsp), %rdi
callq 0xe03b0
movq %rax, 0x60(%rsp)
jmp 0x17290b
movq 0x60(%rsp), %rax
movq %rax, 0x170(%rsp)
movq 0x180(%rsp), %rdi
movq 0x178(%rsp), %rsi
leaq 0x170(%rsp), %rdx
callq 0x172da0
movq %rax, 0x50(%rsp)
jmp 0x17293c
movq 0x50(%rsp), %rax
movq %rax, 0x188(%rsp)
movq 0x190(%rsp), %rdi
movq 0x188(%rsp), %rsi
callq 0xdd750
movq %rax, 0x48(%rsp)
jmp 0x172965
movq 0x138(%rsp), %rdi
movq 0x48(%rsp), %rax
movq %rax, 0x198(%rsp)
addq $0x10, %rdi
movq 0x198(%rsp), %rsi
callq 0xde8f0
movq (%rax), %rax
movq %rax, 0x38(%rsp)
movq 0x3d8(%rsp), %rdi
callq 0xe03b0
movq %rax, 0x40(%rsp)
jmp 0x1729a7
movq 0x38(%rsp), %rax
movq 0x40(%rsp), %rcx
cmpq %rcx, %rax
je 0x172be8
movq 0x138(%rsp), %rdi
addq $0x10, %rdi
movq %rdi, 0x28(%rsp)
callq 0xdbd10
movq %rax, 0x150(%rsp)
movq 0x198(%rsp), %rsi
leaq 0x150(%rsp), %rdi
callq 0xd5bc0
movq %rax, 0x158(%rsp)
leaq 0x160(%rsp), %rdi
leaq 0x158(%rsp), %rsi
callq 0xd0230
movq 0x28(%rsp), %rdi
movq 0x160(%rsp), %rsi
leaq 0x1e0(%rsp), %rdx
callq 0xdc0a0
movq %rax, 0x30(%rsp)
jmp 0x172a2b
movq 0x30(%rsp), %rax
movq %rax, 0x148(%rsp)
cmpq $0x0, 0x198(%rsp)
jle 0x172a71
movq 0x138(%rsp), %rdi
addq $0x10, %rdi
movq 0x198(%rsp), %rsi
subq $0x1, %rsi
callq 0xde8f0
movq %rax, %rcx
movq 0x138(%rsp), %rax
movq %rcx, 0x28(%rax)
jmp 0x172a99
movq 0x138(%rsp), %rdi
addq $0x10, %rdi
movq 0x198(%rsp), %rsi
callq 0xde8f0
movq %rax, %rcx
movq 0x138(%rsp), %rax
movq %rcx, 0x28(%rax)
movq 0x138(%rsp), %rdi
addq $0x10, %rdi
callq 0xd66a0
movq 0x138(%rsp), %rdi
movq 0x3c0(%rsp), %rcx
subq %rcx, %rax
movl $0x58, %ecx
cqto
idivq %rcx
movq %rax, 0x3b0(%rsp)
addq $0x10, %rdi
callq 0xd66a0
movq 0x138(%rsp), %rdi
movq %rax, 0x20(%rsp)
addq $0x10, %rdi
callq 0xd1b60
movq %rax, %rcx
movq 0x20(%rsp), %rax
imulq $0x58, %rcx, %rcx
addq %rcx, %rax
addq $-0x58, %rax
movq 0x3b8(%rsp), %rcx
subq %rcx, %rax
movl $0x58, %ecx
cqto
idivq %rcx
movq %rax, %rcx
movq 0x138(%rsp), %rax
movq %rcx, 0x3a8(%rsp)
cmpq $0x0, 0x30(%rax)
je 0x172bc1
cmpq $0x0, 0x3b0(%rsp)
jne 0x172b4a
cmpq $0x0, 0x3a8(%rsp)
je 0x172ba4
movq 0x3b0(%rsp), %rax
cmpq 0x3a8(%rsp), %rax
jbe 0x172b7b
movq 0x138(%rsp), %rax
movq 0x30(%rax), %rax
imulq $0x58, 0x3b0(%rsp), %rcx
addq %rcx, %rax
movq %rax, 0x18(%rsp)
jmp 0x172b98
movq 0x138(%rsp), %rax
movq 0x30(%rax), %rax
imulq $0x58, 0x3a8(%rsp), %rcx
addq %rcx, %rax
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rax
movq %rax, 0x10(%rsp)
jmp 0x172bb5
movq 0x138(%rsp), %rax
movq 0x30(%rax), %rax
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rax
movq %rax, 0x8(%rsp)
jmp 0x172bca
xorl %eax, %eax
movq %rax, 0x8(%rsp)
jmp 0x172bca
movq 0x138(%rsp), %rax
movq 0x8(%rsp), %rcx
movq %rcx, 0x30(%rax)
movl $0x1, 0x144(%rsp)
jmp 0x172c1b
movq 0x138(%rsp), %rdi
addq $0x10, %rdi
movq 0x198(%rsp), %rsi
callq 0xde8f0
movq %rax, %rcx
movq 0x138(%rsp), %rax
movq %rcx, 0x28(%rax)
movl $0x0, 0x144(%rsp)
leaq 0x1e0(%rsp), %rdi
callq 0xd4fe0
addq $0x3e8, %rsp            # imm = 0x3E8
retq
movq 0x348(%rsp), %rdi
callq 0xe0be0
nopl (%rax)