// File: /workspace/github_cpp_makefile_star2_O2/CMU-SAFARI[P]ramulator/src/Memory.h
// Function: ramulator::Memory<ramulator::DDR3, ramulator::Controller>::Memory(ramulator::Config const&, std::vector<ramulator::Controller<ramulator::DDR3>*, std::allocator<ramulator::Controller<ramulator::DDR3>*>>)
Memory(const Config& configs, vector<Controller<T>*> ctrls)
        : ctrls(ctrls),
          spec(ctrls[0]->channel->spec),
          addr_bits(int(T::Level::MAX))
    {
        // make sure 2^N channels/ranks
        // TODO support channel number that is not powers of 2
        int *sz = spec->org_entry.count;
        assert((sz[0] & (sz[0] - 1)) == 0);
        assert((sz[1] & (sz[1] - 1)) == 0);
        // validate size of one transaction
        int tx = (spec->prefetch_size * spec->channel_width / 8);
        tx_bits = calc_log2(tx);
        assert((1<<tx_bits) == tx);
        
        // Parsing mapping file and initialize mapping table
        use_mapping_file = false;
        dump_mapping = false;
        if (spec->standard_name.substr(0, 4) == "DDR3"){
            if (configs["mapping"] != "defaultmapping"){
              init_mapping_with_file(configs["mapping"]);
              // dump_mapping = true;
              use_mapping_file = true;
            }
        }
        // If hi address bits will not be assigned to Rows
        // then the chips must not be LPDDRx 6Gb, 12Gb etc.
        if (type != Type::RoBaRaCoCh && spec->standard_name.substr(0, 5) == "LPDDR")
            assert((sz[int(T::Level::Row)] & (sz[int(T::Level::Row)] - 1)) == 0);

        max_address = spec->channel_width / 8;

        for (unsigned int lev = 0; lev < addr_bits.size(); lev++) {
          addr_bits[lev] = calc_log2(sz[lev]);
            max_address *= sz[lev];
        }

        addr_bits[int(T::Level::MAX) - 1] -= calc_log2(spec->prefetch_size);

        // Initiating translation
        if (configs.contains("translation")) {
          translation = name_to_translation[configs["translation"]];
        }
        if (translation != Translation::None) {
          // construct a list of available pages
          // TODO: this should not assume a 4KB page!
          free_physical_pages_remaining = max_address >> 12;

          free_physical_pages.resize(free_physical_pages_remaining, -1);
        }

        dram_capacity
            .name("dram_capacity")
            .desc("Number of bytes in simulated DRAM")
            .precision(0)
            ;
        dram_capacity = max_address;

        num_dram_cycles
            .name("dram_cycles")
            .desc("Number of DRAM cycles simulated")
            .precision(0)
            ;
        num_incoming_requests
            .name("incoming_requests")
            .desc("Number of incoming requests to DRAM")
            .precision(0)
            ;
        num_read_requests
            .init(configs.get_core_num())
            .name("read_requests")
            .desc("Number of incoming read requests to DRAM per core")
            .precision(0)
            ;
        num_write_requests
            .init(configs.get_core_num())
            .name("write_requests")
            .desc("Number of incoming write requests to DRAM per core")
            .precision(0)
            ;
        incoming_requests_per_channel
            .init(sz[int(T::Level::Channel)])
            .name("incoming_requests_per_channel")
            .desc("Number of incoming requests to each DRAM channel")
            ;
        incoming_read_reqs_per_channel
            .init(sz[int(T::Level::Channel)])
            .name("incoming_read_reqs_per_channel")
            .desc("Number of incoming read requests to each DRAM channel")
            ;

        ramulator_active_cycles
            .name("ramulator_active_cycles")
            .desc("The total number of cycles that the DRAM part is active (serving R/W)")
            .precision(0)
            ;
        physical_page_replacement
            .name("physical_page_replacement")
            .desc("The number of times that physical page replacement happens.")
            .precision(0)
            ;
        maximum_bandwidth
            .name("maximum_bandwidth")
            .desc("The theoretical maximum bandwidth (Bps)")
            .precision(0)
            ;
        in_queue_req_num_sum
            .name("in_queue_req_num_sum")
            .desc("Sum of read/write queue length")
            .precision(0)
            ;
        in_queue_read_req_num_sum
            .name("in_queue_read_req_num_sum")
            .desc("Sum of read queue length")
            .precision(0)
            ;
        in_queue_write_req_num_sum
            .name("in_queue_write_req_num_sum")
            .desc("Sum of write queue length")
            .precision(0)
            ;
        in_queue_req_num_avg
            .name("in_queue_req_num_avg")
            .desc("Average of read/write queue length per memory cycle")
            .precision(6)
            ;
        in_queue_read_req_num_avg
            .name("in_queue_read_req_num_avg")
            .desc("Average of read queue length per memory cycle")
            .precision(6)
            ;
        in_queue_write_req_num_avg
            .name("in_queue_write_req_num_avg")
            .desc("Average of write queue length per memory cycle")
            .precision(6)
            ;
#ifndef INTEGRATED_WITH_GEM5
        record_read_requests
            .init(configs.get_core_num())
            .name("record_read_requests")
            .desc("record read requests for this core when it reaches request limit or to the end")
            ;

        record_write_requests
            .init(configs.get_core_num())
            .name("record_write_requests")
            .desc("record write requests for this core when it reaches request limit or to the end")
            ;
#endif

    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x5d8, %rsp            # imm = 0x5D8
movq %rdx, %rbx
movq %rsi, %r13
movq %rdi, %rbp
leaq 0x11c9a1(%rip), %rax    # 0x1334e8
movq %rax, (%rdi)
addq $0x8, %rdi
movq %rdi, 0x120(%rsp)
callq 0x186fa
leaq 0xa0(%rbp), %rdi
movq %rdi, 0x108(%rsp)
callq 0x186fa
leaq 0x138(%rbp), %rdi
movq %rdi, 0x100(%rsp)
callq 0x186fa
leaq 0x1d0(%rbp), %r14
movq %r14, %rdi
callq 0x1afb8
leaq 0x280(%rbp), %r15
movq %r15, %rdi
movq %r14, 0x118(%rsp)
callq 0x1afb8
leaq 0x330(%rbp), %rdi
movq %rdi, 0xf8(%rsp)
movq %r15, 0x110(%rsp)
callq 0x186fa
leaq 0x3c8(%rbp), %rdi
movq %rdi, 0xa0(%rsp)
callq 0x1afb8
leaq 0x478(%rbp), %rdi
movq %rdi, 0x98(%rsp)
callq 0x1afb8
leaq 0x528(%rbp), %rdi
movq %rdi, 0xf0(%rsp)
callq 0x186fa
leaq 0x5c0(%rbp), %rdi
movq %rdi, 0xe8(%rsp)
callq 0x186fa
leaq 0x658(%rbp), %rdi
movq %rdi, 0xe0(%rsp)
callq 0x186fa
leaq 0x6f0(%rbp), %rdi
movq %rdi, 0xd8(%rsp)
callq 0x186fa
leaq 0x788(%rbp), %rdi
movq %rdi, 0xd0(%rsp)
callq 0x186fa
leaq 0x820(%rbp), %rdi
movq %rdi, 0xc8(%rsp)
callq 0x186fa
leaq 0x8b8(%rbp), %rdi
movq %rdi, 0xc0(%rsp)
callq 0x186fa
leaq 0x950(%rbp), %rdi
movq %rdi, 0xb8(%rsp)
callq 0x186fa
leaq 0x9e8(%rbp), %rdi
movq %rdi, 0x90(%rsp)
callq 0x1afb8
leaq 0xa98(%rbp), %rdi
movq %rdi, 0x88(%rsp)
callq 0x1afb8
andl $0x0, 0xb58(%rbp)
andq $0x0, 0xb60(%rbp)
leaq 0xb58(%rbp), %rax
movq %rax, 0xb68(%rbp)
movq %rax, 0xb70(%rbp)
andq $0x0, 0xb78(%rbp)
movq $0x1, 0xb80(%rbp)
leaq 0x10(%rsp), %rdx
andl $0x0, (%rdx)
leaq 0xbb48f(%rip), %rsi     # 0xd218a
leaq 0x38(%rsp), %rdi
callq 0x1cea2
leaq 0x60(%rsp), %rdi
leaq 0x34(%rsp), %rdx
movl $0x1, (%rdx)
leaq 0xbb473(%rip), %rsi     # 0xd218f
callq 0x1cec4
leaq 0xb88(%rbp), %rdi
leaq 0x38(%rsp), %rsi
pushq $0x2
popq %rdx
leaq 0xf(%rsp), %rcx
leaq 0xe(%rsp), %r8
movq %rdi, 0xa8(%rsp)
callq 0x1cee6
pushq $0x28
popq %r14
leaq (%rsp,%r14), %rdi
addq $0x38, %rdi
callq 0xb568
addq $-0x28, %r14
cmpq $-0x28, %r14
jne 0x16d4b
xorpd %xmm0, %xmm0
andq $0x0, 0xbc8(%rbp)
movupd %xmm0, 0xbb8(%rbp)
andl $0x0, 0xbe0(%rbp)
andq $0x0, 0xbe8(%rbp)
leaq 0xbb8(%rbp), %rax
movq %rax, 0xb0(%rsp)
leaq 0xbe0(%rbp), %rax
movq %rax, 0xbf0(%rbp)
movq %rax, 0xbf8(%rbp)
andq $0x0, 0xc00(%rbp)
leaq 0xc08(%rbp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x16ad8
movq (%rbx), %rax
movq (%rax), %rax
movq 0x1098(%rax), %rax
movq 0x390(%rax), %rax
movq %rax, 0xc20(%rbp)
leaq 0xc28(%rbp), %rbx
pushq $0x5
popq %rsi
leaq 0x38(%rsp), %rdx
movq %rbx, %rdi
movq %r14, 0x130(%rsp)
callq 0x1cf2e
leaq 0xc50(%rbp), %rax
movq %rax, 0xc40(%rbp)
andq $0x0, 0xc48(%rbp)
movb $0x0, 0xc50(%rbp)
movq 0xc20(%rbp), %r15
movl 0x272c(%r15), %eax
leal -0x1(%rax), %ecx
testl %ecx, %eax
jne 0x17a24
movq %rbx, 0x128(%rsp)
movl 0x2730(%r15), %eax
leal -0x1(%rax), %ecx
testl %ecx, %eax
jne 0x17a3d
movl 0x2744(%r15), %eax
imull 0x2740(%r15), %eax
pushq $0x8
popq %r12
cltd
idivl %r12d
movl %eax, %ebx
movq %rbp, %rdi
movl %eax, %esi
callq 0x1cf80
movl %eax, 0xc64(%rbp)
pushq $0x1
popq %rdx
movl %eax, %ecx
shll %cl, %edx
cmpl %ebx, %edx
jne 0x17a56
andw $0x0, 0xc60(%rbp)
leaq 0x11f594(%rip), %rsi    # 0x136428
leaq 0x38(%rsp), %rdi
pushq $0x4
popq %rcx
xorl %edx, %edx
callq 0xb2f0
leaq 0xba4f3(%rip), %rsi     # 0xd139d
leaq 0x38(%rsp), %rbx
movq %rbx, %rdi
callq 0x110e2
movl %eax, %r14d
movq %rbx, %rdi
callq 0xb568
testb %r14b, %r14b
je 0x16f7a
leaq 0xba49e(%rip), %rsi     # 0xd1370
leaq 0x10(%rsp), %rdi
leaq 0x34(%rsp), %rdx
callq 0x10eea
leaq 0x38(%rsp), %rdi
leaq 0x10(%rsp), %rdx
movq %r13, %rsi
callq 0x10f26
leaq 0xba47e(%rip), %rsi     # 0xd1378
leaq 0x38(%rsp), %rbx
movq %rbx, %rdi
callq 0x10f86
movl %eax, %r14d
movq %rbx, %rdi
callq 0xb568
leaq 0x10(%rsp), %rdi
callq 0xb568
testb %r14b, %r14b
je 0x16f7a
leaq 0xba448(%rip), %rsi     # 0xd1370
leaq 0x38(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x10eea
leaq 0x5b8(%rsp), %rdi
leaq 0x38(%rsp), %rdx
movq %r13, %rsi
callq 0x10f26
leaq 0x5b8(%rsp), %rsi
movq %rbp, %rdi
callq 0x1cf8e
leaq 0x5b8(%rsp), %rdi
callq 0xb568
leaq 0x38(%rsp), %rdi
callq 0xb568
movb $0x1, 0xc60(%rbp)
cmpl $0x1, 0xb80(%rbp)
je 0x16fcf
leaq 0x11f49e(%rip), %rsi    # 0x136428
leaq 0x38(%rsp), %rdi
pushq $0x5
popq %rcx
xorl %edx, %edx
callq 0xb2f0
leaq 0xbb2da(%rip), %rsi     # 0xd227a
leaq 0x38(%rsp), %rbx
movq %rbx, %rdi
callq 0x110e2
movl %eax, %r14d
movq %rbx, %rdi
callq 0xb568
testb %r14b, %r14b
je 0x16fcf
movl 0x2738(%r15), %eax
leal -0x1(%rax), %ecx
testl %ecx, %eax
jne 0x17a73
movq 0xc20(%rbp), %rax
movq 0xc28(%rbp), %rcx
movl 0x2744(%rax), %eax
cltd
idivl %r12d
cltq
movq %rax, 0xb48(%rbp)
xorl %eax, %eax
movq 0x118(%rsp), %r14
movq 0x110(%rsp), %r12
movl %eax, %ebx
movq 0xc30(%rbp), %rax
subq %rcx, %rax
sarq $0x2, %rax
cmpq %rbx, %rax
jbe 0x1704d
movl 0x272c(%r15,%rbx,4), %esi
movq %rbp, %rdi
callq 0x1cf80
movq 0xc28(%rbp), %rcx
movl %eax, (%rcx,%rbx,4)
movslq 0x272c(%r15,%rbx,4), %rax
imulq 0xb48(%rbp), %rax
movq %rax, 0xb48(%rbp)
leal 0x1(%rbx), %eax
jmp 0x17002
movq 0xc20(%rbp), %rax
movl 0x2740(%rax), %esi
movq %rbp, %rdi
callq 0x1cf80
movq 0xc28(%rbp), %rcx
subl %eax, 0x10(%rcx)
leaq 0xbb24a(%rip), %rsi     # 0xd22bd
leaq 0x38(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x10eea
leaq 0x38(%rsp), %rsi
movq %r13, %rdi
callq 0x138f2
movl %eax, %ebx
leaq 0x38(%rsp), %rdi
callq 0xb568
testb %bl, %bl
je 0x170f5
leaq 0xbb217(%rip), %rsi     # 0xd22bd
leaq 0x10(%rsp), %rdi
leaq 0x34(%rsp), %rdx
callq 0x10eea
leaq 0x38(%rsp), %rdi
leaq 0x10(%rsp), %rdx
movq %r13, %rsi
callq 0x10f26
leaq 0x38(%rsp), %rsi
movq 0xa8(%rsp), %rdi
callq 0x1d444
movl (%rax), %eax
movl %eax, 0xb84(%rbp)
leaq 0x38(%rsp), %rdi
callq 0xb568
leaq 0x10(%rsp), %rdi
callq 0xb568
cmpl $0x0, 0xb84(%rbp)
je 0x17125
movq 0xb48(%rbp), %rsi
sarq $0xc, %rsi
movq %rsi, 0xbd0(%rbp)
leaq 0x38(%rsp), %rdx
orl $-0x1, (%rdx)
movq 0xb0(%rsp), %rdi
callq 0x1d4aa
leaq 0xbb19d(%rip), %rsi     # 0xd22c9
leaq 0x598(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x10eea
leaq 0x598(%rsp), %rsi
movq 0x120(%rsp), %rdi
callq 0x1a7c6
movq %rax, %rbx
leaq 0xbb17a(%rip), %rsi     # 0xd22d7
leaq 0x578(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x10eea
leaq 0x28(%rbx), %rdi
leaq 0x578(%rsp), %rsi
callq 0xb1c0
andl $0x0, 0x48(%rbx)
leaq 0x578(%rsp), %rdi
callq 0xb568
leaq 0x598(%rsp), %rdi
callq 0xb568
cvtsi2sdq 0xb48(%rbp), %xmm0
movsd %xmm0, 0x78(%rbp)
leaq 0xbb146(%rip), %rsi     # 0xd22f9
leaq 0x558(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x10eea
leaq 0x558(%rsp), %rsi
movq 0x108(%rsp), %rdi
callq 0x1a7c6
movq %rax, %rbx
leaq 0xbb121(%rip), %rsi     # 0xd2305
leaq 0x538(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x10eea
leaq 0x28(%rbx), %rdi
leaq 0x538(%rsp), %rsi
callq 0xb1c0
andl $0x0, 0x48(%rbx)
leaq 0x538(%rsp), %rdi
callq 0xb568
leaq 0x558(%rsp), %rdi
callq 0xb568
leaq 0xbb0f9(%rip), %rsi     # 0xd2325
leaq 0x518(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x10eea
leaq 0x518(%rsp), %rsi
movq 0x100(%rsp), %rdi
callq 0x1a7c6
movq %rax, %rbx
leaq 0xbb0da(%rip), %rsi     # 0xd2337
leaq 0x4f8(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x10eea
leaq 0x28(%rbx), %rdi
leaq 0x4f8(%rsp), %rsi
callq 0xb1c0
andl $0x0, 0x48(%rbx)
leaq 0x4f8(%rsp), %rdi
callq 0xb568
leaq 0x518(%rsp), %rdi
callq 0xb568
movl 0x44(%r13), %esi
movq %r14, %rdi
callq 0x1c698
leaq 0xbb41f(%rip), %rsi     # 0xd26d0
leaq 0x4d8(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x10eea
leaq 0x4d8(%rsp), %rsi
movq %r14, %rdi
callq 0x1aecc
movq %rax, %rbx
leaq 0xbb07e(%rip), %rsi     # 0xd235b
leaq 0x4b8(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x10eea
leaq 0x28(%rbx), %rdi
leaq 0x4b8(%rsp), %rsi
callq 0xb1c0
andl $0x0, 0x48(%rbx)
leaq 0x4b8(%rsp), %rdi
callq 0xb568
leaq 0x4d8(%rsp), %rdi
callq 0xb568
movl 0x44(%r13), %esi
movq %r12, %rdi
callq 0x1c698
leaq 0xbb403(%rip), %rsi     # 0xd2734
leaq 0x498(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x10eea
leaq 0x498(%rsp), %rsi
movq %r12, %rdi
callq 0x1aecc
movq %rax, %rbx
leaq 0xbb030(%rip), %rsi     # 0xd238d
leaq 0x478(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x10eea
leaq 0x28(%rbx), %rdi
leaq 0x478(%rsp), %rsi
callq 0xb1c0
andl $0x0, 0x48(%rbx)
leaq 0x478(%rsp), %rdi
callq 0xb568
leaq 0x498(%rsp), %rdi
callq 0xb568
movl 0x272c(%r15), %esi
movq 0xa0(%rsp), %rdi
callq 0x1c698
leaq 0xbb007(%rip), %rsi     # 0xd23c0
leaq 0x458(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x10eea
leaq 0x458(%rsp), %rsi
movq 0xa0(%rsp), %rdi
callq 0x1aecc
movq %rax, %rbx
leaq 0xbaff4(%rip), %rsi     # 0xd23de
leaq 0x438(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x10eea
addq $0x28, %rbx
leaq 0x438(%rsp), %rsi
movq %rbx, %rdi
callq 0xb1c0
leaq 0x438(%rsp), %rdi
callq 0xb568
leaq 0x458(%rsp), %rdi
callq 0xb568
movl 0x272c(%r15), %esi
movq 0x98(%rsp), %rdi
callq 0x1c698
leaq 0xbafca(%rip), %rsi     # 0xd240f
leaq 0x418(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x10eea
leaq 0x418(%rsp), %rsi
movq 0x98(%rsp), %rdi
callq 0x1aecc
movq %rax, %rbx
leaq 0xbafb8(%rip), %rsi     # 0xd242e
leaq 0x3f8(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x10eea
addq $0x28, %rbx
leaq 0x3f8(%rsp), %rsi
movq %rbx, %rdi
callq 0xb1c0
leaq 0x3f8(%rsp), %rdi
callq 0xb568
leaq 0x418(%rsp), %rdi
callq 0xb568
leaq 0xbafa7(%rip), %rsi     # 0xd2464
leaq 0x3d8(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x10eea
leaq 0x3d8(%rsp), %rsi
movq 0xf8(%rsp), %rdi
callq 0x1a7c6
movq %rax, %rbx
leaq 0xbaf8e(%rip), %rsi     # 0xd247c
leaq 0x3b8(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x10eea
leaq 0x28(%rbx), %rdi
leaq 0x3b8(%rsp), %rsi
callq 0xb1c0
andl $0x0, 0x48(%rbx)
leaq 0x3b8(%rsp), %rdi
callq 0xb568
leaq 0x3d8(%rsp), %rdi
callq 0xb568
leaq 0xbaf8c(%rip), %rsi     # 0xd24c2
leaq 0x398(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x10eea
leaq 0x398(%rsp), %rsi
movq 0xf0(%rsp), %rdi
callq 0x1a7c6
movq %rax, %rbx
leaq 0xbaf75(%rip), %rsi     # 0xd24dc
leaq 0x378(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x10eea
leaq 0x28(%rbx), %rdi
leaq 0x378(%rsp), %rsi
callq 0xb1c0
andl $0x0, 0x48(%rbx)
leaq 0x378(%rsp), %rdi
callq 0xb568
leaq 0x398(%rsp), %rdi
callq 0xb568
leaq 0xbaf69(%rip), %rsi     # 0xd2518
leaq 0x358(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x10eea
leaq 0x358(%rsp), %rsi
movq 0xe8(%rsp), %rdi
callq 0x1a7c6
movq %rax, %rbx
leaq 0xbaf4a(%rip), %rsi     # 0xd252a
leaq 0x338(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x10eea
leaq 0x28(%rbx), %rdi
leaq 0x338(%rsp), %rsi
callq 0xb1c0
andl $0x0, 0x48(%rbx)
leaq 0x338(%rsp), %rdi
callq 0xb568
leaq 0x358(%rsp), %rdi
callq 0xb568
leaq 0xbaf2a(%rip), %rsi     # 0xd2552
leaq 0x318(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x10eea
leaq 0x318(%rsp), %rsi
movq 0xe0(%rsp), %rdi
callq 0x1a7c6
movq %rax, %rbx
leaq 0xbaf0e(%rip), %rsi     # 0xd2567
leaq 0x2f8(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x10eea
leaq 0x28(%rbx), %rdi
leaq 0x2f8(%rsp), %rsi
callq 0xb1c0
andl $0x0, 0x48(%rbx)
leaq 0x2f8(%rsp), %rdi
callq 0xb568
leaq 0x318(%rsp), %rdi
callq 0xb568
leaq 0xbaee5(%rip), %rsi     # 0xd2586
leaq 0x2d8(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x10eea
leaq 0x2d8(%rsp), %rsi
movq 0xd8(%rsp), %rdi
callq 0x1a7c6
movq %rax, %rbx
leaq 0xbaece(%rip), %rsi     # 0xd25a0
leaq 0x2b8(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x10eea
leaq 0x28(%rbx), %rdi
leaq 0x2b8(%rsp), %rsi
callq 0xb1c0
andl $0x0, 0x48(%rbx)
leaq 0x2b8(%rsp), %rdi
callq 0xb568
leaq 0x2d8(%rsp), %rdi
callq 0xb568
leaq 0xbae9f(%rip), %rsi     # 0xd25b9
leaq 0x298(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x10eea
leaq 0x298(%rsp), %rsi
movq 0xd0(%rsp), %rdi
callq 0x1a7c6
movq %rax, %rbx
leaq 0xbae89(%rip), %rsi     # 0xd25d4
leaq 0x278(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x10eea
leaq 0x28(%rbx), %rdi
leaq 0x278(%rsp), %rsi
callq 0xb1c0
andl $0x0, 0x48(%rbx)
leaq 0x278(%rsp), %rdi
callq 0xb568
leaq 0x298(%rsp), %rdi
callq 0xb568
leaq 0xbae5b(%rip), %rsi     # 0xd25ee
leaq 0x258(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x10eea
leaq 0x258(%rsp), %rsi
movq 0xc8(%rsp), %rdi
callq 0x1a7c6
movq %rax, %rbx
leaq 0xbae3f(%rip), %rsi     # 0xd2603
leaq 0x238(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x10eea
leaq 0x28(%rbx), %rdi
leaq 0x238(%rsp), %rsi
callq 0xb1c0
movl $0x6, 0x48(%rbx)
leaq 0x238(%rsp), %rdi
callq 0xb568
leaq 0x258(%rsp), %rdi
callq 0xb568
leaq 0xbae28(%rip), %rsi     # 0xd2637
leaq 0x218(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x10eea
leaq 0x218(%rsp), %rsi
movq 0xc0(%rsp), %rdi
callq 0x1a7c6
movq %rax, %rbx
leaq 0xbae11(%rip), %rsi     # 0xd2651
leaq 0x1f8(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x10eea
leaq 0x28(%rbx), %rdi
leaq 0x1f8(%rsp), %rsi
callq 0xb1c0
movl $0x6, 0x48(%rbx)
leaq 0x1f8(%rsp), %rdi
callq 0xb568
leaq 0x218(%rsp), %rdi
callq 0xb568
leaq 0xbadf4(%rip), %rsi     # 0xd267f
leaq 0x1d8(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x10eea
leaq 0x1d8(%rsp), %rsi
movq 0xb8(%rsp), %rdi
callq 0x1a7c6
movq %rax, %rbx
leaq 0xbadde(%rip), %rsi     # 0xd269a
leaq 0x1b8(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x10eea
leaq 0x28(%rbx), %rdi
leaq 0x1b8(%rsp), %rsi
callq 0xb1c0
movl $0x6, 0x48(%rbx)
leaq 0x1b8(%rsp), %rdi
callq 0xb568
leaq 0x1d8(%rsp), %rdi
callq 0xb568
movl 0x44(%r13), %esi
movq 0x90(%rsp), %rdi
callq 0x1c698
leaq 0xbadb1(%rip), %rsi     # 0xd26c9
leaq 0x198(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x10eea
leaq 0x198(%rsp), %rsi
movq 0x90(%rsp), %rdi
callq 0x1aecc
movq %rax, %rbx
leaq 0xbad95(%rip), %rsi     # 0xd26de
leaq 0x178(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x10eea
addq $0x28, %rbx
leaq 0x178(%rsp), %rsi
movq %rbx, %rdi
callq 0xb1c0
leaq 0x178(%rsp), %rdi
callq 0xb568
leaq 0x198(%rsp), %rdi
callq 0xb568
movl 0x44(%r13), %esi
movq 0x88(%rsp), %rdi
callq 0x1c698
leaq 0xbad8c(%rip), %rsi     # 0xd272d
leaq 0x158(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x10eea
leaq 0x158(%rsp), %rsi
movq 0x88(%rsp), %rdi
callq 0x1aecc
movq %rax, %rbx
leaq 0xbad71(%rip), %rsi     # 0xd2743
leaq 0x138(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x10eea
addq $0x28, %rbx
leaq 0x138(%rsp), %rsi
movq %rbx, %rdi
callq 0xb1c0
leaq 0x138(%rsp), %rdi
callq 0xb568
leaq 0x158(%rsp), %rdi
callq 0xb568
addq $0x5d8, %rsp            # imm = 0x5D8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xba76b(%rip), %rdi     # 0xd2196
leaq 0xba77f(%rip), %rsi     # 0xd21b1
leaq 0xba785(%rip), %rcx     # 0xd21be
pushq $0x73
jmp 0x17a6d
leaq 0xba808(%rip), %rdi     # 0xd224c
leaq 0xba766(%rip), %rsi     # 0xd21b1
leaq 0xba76c(%rip), %rcx     # 0xd21be
pushq $0x74
jmp 0x17a6d
leaq 0xba80a(%rip), %rdi     # 0xd2267
leaq 0xba74d(%rip), %rsi     # 0xd21b1
leaq 0xba753(%rip), %rcx     # 0xd21be
pushq $0x78
popq %rdx
callq 0xb210
leaq 0xba806(%rip), %rdi     # 0xd2280
leaq 0xba730(%rip), %rsi     # 0xd21b1
leaq 0xba736(%rip), %rcx     # 0xd21be
movl $0x87, %edx
callq 0xb210
movq %rax, %r13
leaq 0x5b8(%rsp), %rdi
callq 0xb568
jmp 0x17dbc
jmp 0x17db9
jmp 0x17ea9
movq %rax, %r13
leaq 0x38(%rsp), %rdi
callq 0xb568
jmp 0x17acf
jmp 0x17acc
jmp 0x17ea9
jmp 0x17ea9
movq %rax, %r13
leaq 0x10(%rsp), %rdi
jmp 0x17dc1
jmp 0x17ea9
jmp 0x17ea9
movq %rax, %r13
leaq 0x138(%rsp), %rdi
callq 0xb568
jmp 0x17afa
jmp 0x17af7
movq %rax, %r13
leaq 0x158(%rsp), %rdi
jmp 0x17dc1
jmp 0x17ea9
movq %rax, %r13
leaq 0x178(%rsp), %rdi
callq 0xb568
jmp 0x17b23
jmp 0x17b20
movq %rax, %r13
leaq 0x198(%rsp), %rdi
jmp 0x17dc1
jmp 0x17ea9
movq %rax, %r13
leaq 0x1b8(%rsp), %rdi
callq 0xb568
jmp 0x17b4c
jmp 0x17b49
movq %rax, %r13
leaq 0x1d8(%rsp), %rdi
jmp 0x17dc1
jmp 0x17ea9
movq %rax, %r13
leaq 0x1f8(%rsp), %rdi
callq 0xb568
jmp 0x17b75
jmp 0x17b72
movq %rax, %r13
leaq 0x218(%rsp), %rdi
jmp 0x17dc1
jmp 0x17ea9
movq %rax, %r13
leaq 0x238(%rsp), %rdi
callq 0xb568
jmp 0x17b9e
jmp 0x17b9b
movq %rax, %r13
leaq 0x258(%rsp), %rdi
jmp 0x17dc1
jmp 0x17ea9
movq %rax, %r13
leaq 0x278(%rsp), %rdi
callq 0xb568
jmp 0x17bc7
jmp 0x17bc4
movq %rax, %r13
leaq 0x298(%rsp), %rdi
jmp 0x17dc1
jmp 0x17ea9
movq %rax, %r13
leaq 0x2b8(%rsp), %rdi
callq 0xb568
jmp 0x17bf0
jmp 0x17bed
movq %rax, %r13
leaq 0x2d8(%rsp), %rdi
jmp 0x17dc1
jmp 0x17ea9
movq %rax, %r13
leaq 0x2f8(%rsp), %rdi
callq 0xb568
jmp 0x17c19
jmp 0x17c16
movq %rax, %r13
leaq 0x318(%rsp), %rdi
jmp 0x17dc1
jmp 0x17ea9
movq %rax, %r13
leaq 0x338(%rsp), %rdi
callq 0xb568
jmp 0x17c42
jmp 0x17c3f
movq %rax, %r13
leaq 0x358(%rsp), %rdi
jmp 0x17dc1
jmp 0x17ea9
movq %rax, %r13
leaq 0x378(%rsp), %rdi
callq 0xb568
jmp 0x17c6b
jmp 0x17c68
movq %rax, %r13
leaq 0x398(%rsp), %rdi
jmp 0x17dc1
jmp 0x17ea9
movq %rax, %r13
leaq 0x3b8(%rsp), %rdi
callq 0xb568
jmp 0x17c94
jmp 0x17c91
movq %rax, %r13
leaq 0x3d8(%rsp), %rdi
jmp 0x17dc1
jmp 0x17ea9
movq %rax, %r13
leaq 0x3f8(%rsp), %rdi
callq 0xb568
jmp 0x17cbd
jmp 0x17cba
movq %rax, %r13
leaq 0x418(%rsp), %rdi
jmp 0x17dc1
jmp 0x17ea9
movq %rax, %r13
leaq 0x438(%rsp), %rdi
callq 0xb568
jmp 0x17ce6
jmp 0x17ce3
movq %rax, %r13
leaq 0x458(%rsp), %rdi
jmp 0x17dc1
jmp 0x17ea9
movq %rax, %r13
leaq 0x478(%rsp), %rdi
callq 0xb568
jmp 0x17d0f
jmp 0x17d0c
movq %rax, %r13
leaq 0x498(%rsp), %rdi
jmp 0x17dc1
jmp 0x17ea9
movq %rax, %r13
leaq 0x4b8(%rsp), %rdi
callq 0xb568
jmp 0x17d38
jmp 0x17d35
movq %rax, %r13
leaq 0x4d8(%rsp), %rdi
jmp 0x17dc1
jmp 0x17ea9
movq %rax, %r13
leaq 0x4f8(%rsp), %rdi
callq 0xb568
jmp 0x17d5e
jmp 0x17d5b
movq %rax, %r13
leaq 0x518(%rsp), %rdi
jmp 0x17dc1
jmp 0x17ea9
movq %rax, %r13
leaq 0x538(%rsp), %rdi
callq 0xb568
jmp 0x17d84
jmp 0x17d81
movq %rax, %r13
leaq 0x558(%rsp), %rdi
jmp 0x17dc1
jmp 0x17ea9
movq %rax, %r13
leaq 0x578(%rsp), %rdi
callq 0xb568
jmp 0x17daa
jmp 0x17da7
movq %rax, %r13
leaq 0x598(%rsp), %rdi
jmp 0x17dc1
jmp 0x17ea9
movq %rax, %r13
leaq 0x38(%rsp), %rdi
callq 0xb568
jmp 0x17eac
jmp 0x17ea9
jmp 0x17ea9
movq %rax, %r13
jmp 0x17ec5
movq %rax, %r13
jmp 0x17ed2
movq %rax, %r13
pushq $0x28
popq %rbx
leaq (%rsp,%rbx), %rdi
addq $0x38, %rdi
callq 0xb568
addq $-0x28, %rbx
cmpq $-0x28, %rbx
jne 0x17deb
jmp 0x17ef8
movq %rax, %r13
leaq 0x38(%rsp), %rdi
callq 0xb568
jmp 0x17ef8
movq %rax, %r13
jmp 0x17ef8
movq %rax, %r13
jmp 0x17f14
movq %rax, %r13
jmp 0x17f21
movq %rax, %r13
jmp 0x17f2e
movq %rax, %r13
jmp 0x17f3b
movq %rax, %r13
jmp 0x17f48
movq %rax, %r13
jmp 0x17f55
movq %rax, %r13
jmp 0x17f62
movq %rax, %r13
jmp 0x17f6f
movq %rax, %r13
jmp 0x17f7c
movq %rax, %r13
jmp 0x17f89
movq %rax, %r13
jmp 0x17f96
movq %rax, %r13
jmp 0x17fa3
movq %rax, %r13
jmp 0x17fb0
movq %rax, %r13
jmp 0x17fbd
movq %rax, %r13
jmp 0x17fca
movq %rax, %r13
jmp 0x17fd7
movq %rax, %r13
jmp 0x17fe4
movq %rax, %r13
leaq 0xc40(%rbp), %rdi
callq 0xb568
movq 0x128(%rsp), %rdi
callq 0x1b7dc
movq 0x130(%rsp), %rdi
callq 0x1ce5e
leaq 0xbd8(%rbp), %rdi
callq 0x1ee1a
movq 0xb0(%rsp), %rdi
callq 0x1b7dc
movq 0xa8(%rsp), %rdi
callq 0x1dcb8
addq $0xb50, %rbp            # imm = 0xB50
movq %rbp, %rdi
callq 0x1ee72
movq 0x88(%rsp), %rdi
callq 0x1af9e
movq 0x90(%rsp), %rdi
callq 0x1af9e
movq 0xb8(%rsp), %rdi
callq 0x186e4
movq 0xc0(%rsp), %rdi
callq 0x186e4
movq 0xc8(%rsp), %rdi
callq 0x186e4
movq 0xd0(%rsp), %rdi
callq 0x186e4
movq 0xd8(%rsp), %rdi
callq 0x186e4
movq 0xe0(%rsp), %rdi
callq 0x186e4
movq 0xe8(%rsp), %rdi
callq 0x186e4
movq 0xf0(%rsp), %rdi
callq 0x186e4
movq 0x98(%rsp), %rdi
callq 0x1af9e
movq 0xa0(%rsp), %rdi
callq 0x1af9e
movq 0xf8(%rsp), %rdi
callq 0x186e4
movq 0x110(%rsp), %rdi
callq 0x1af9e
movq 0x118(%rsp), %rdi
callq 0x1af9e
movq 0x100(%rsp), %rdi
callq 0x186e4
movq 0x108(%rsp), %rdi
callq 0x186e4
movq 0x120(%rsp), %rdi
callq 0x186e4
movq %r13, %rdi
callq 0xb4d0