// File: /workspace/github_cpp_makefile_star2_O3/gulamf[P]NRF24LE1Flash/src/HexUtils.cpp
// Function: HexUtils::ParseHexFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&)
vector<HexRecord> *HexUtils::ParseHexFile(string fileName, string &debugInfo)
{
    ifstream *streamReader;
    uint numHexRecords = 0;
    HexRecord curHexRecord;
    vector<HexRecord> *hexRecords = new vector<HexRecord>();

    try
    {
        streamReader = new ifstream(fileName.c_str());
    }
    catch (...)
    {
        return NULL;
    }

    debugInfo = "";

    if (!streamReader->is_open()) return NULL;

    while (!streamReader->eof())
    {
        char line[4096];
        debugInfo += ToString(numHexRecords + 1) + ") ";
        line[0]=0;
        streamReader->getline(line,4096);
        if(streamReader->eof() && line[0]==0)
            break;
        if(strcmp(line,":00000001FF")==0) {
            int y;
            y++;
        }
        curHexRecord.rawStr =  line;
        debugInfo += curHexRecord.rawStr;
        debugInfo += "\r\n";

        if (curHexRecord.rawStr[0] != ':')
        {
            debugInfo += "\tInvalid Record\r\n";
        }
        else
        {
            debugInfo += "\tValid Record\r\n";
        }

        curHexRecord.len = ParseHex<int>(curHexRecord.rawStr.substr(1, 2));
        debugInfo += "\tLength: 0x" + ToHexString(curHexRecord.len) + "\r\n";

        curHexRecord.address = ParseHex<int>(curHexRecord.rawStr.substr(3, 4));
        debugInfo += "\tAddress: 0x" + ToHexString(curHexRecord.address) + "\r\n";

        curHexRecord.type = ParseHex<int>(curHexRecord.rawStr.substr(7, 2));

        debugInfo += "\tType: 0x" + ToHexString(curHexRecord.type);

        switch (curHexRecord.type)
        {
            case 0:
                debugInfo += " (Data record)\r\n";
                break;
            case 1:
                debugInfo += " (End of file record)\r\n";
                break;
            case 2:
                debugInfo += " (Extended segment address record)\r\n";
                break;
            case 3:
                debugInfo += " (Start segment address record)\r\n";
                break;
            case 4:
                debugInfo += " (Extended linear address record)\r\n";
                break;
            case 5:
                debugInfo += " (Start linear address record)\r\n";
                break;
            default:
                debugInfo += " (Unknown record type)\r\n";
                break;
        }

        if (curHexRecord.len > 0)
        {
            curHexRecord.data = new uint8_t[curHexRecord.len];
            debugInfo += "\tData: 0x";

            for (uint x = 0; x < curHexRecord.len; x++)
            {
                string s = curHexRecord.rawStr.substr(9 + (x * 2), 2);
                uint8_t t = ParseHex<uint8_t>(s);
                curHexRecord.data[x]=t;

                if (curHexRecord.data[x] < 0x10)
                    debugInfo += "0";

                debugInfo += ToHexString(curHexRecord.data[x]);
            }

            debugInfo += "\r\n";
        }
        else
        {
            debugInfo += "\tNo data\r\n";
        }

        curHexRecord.checkSum = ParseHex<int>(curHexRecord.rawStr.substr(9 + (curHexRecord.len * 2), 2));
        debugInfo += "\tRecord checksum: 0x" + ToHexString(curHexRecord.checkSum) + "\r\n";

        curHexRecord.calcSum = 0;

        for (uint x = 1; x < 9 + (curHexRecord.len * 2); x += 2)
        {
            curHexRecord.calcSum += ParseHex<int>(curHexRecord.rawStr.substr(x, 2));
        }

        curHexRecord.calcSum = -curHexRecord.calcSum;
        curHexRecord.calcSum &= 0xFF;

        debugInfo += "\tCalculated checksum: 0x" + ToHexString(curHexRecord.calcSum) + "\r\n";

        if (curHexRecord.calcSum == curHexRecord.checkSum)
        {
            debugInfo += "\tChecksums match\r\n\r\n";
        }
        else
        {
            debugInfo += "\tChecksums do not match\r\n\r\n";
            return NULL;
        }

        hexRecords->push_back(curHexRecord);
        numHexRecords++;
    }

    streamReader->close();

    return hexRecords;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x10b8, %rsp           # imm = 0x10B8
movq %rsi, %r14
movq %rdi, %rbx
leaq -0x90(%rbp), %rax
movq %rax, -0x10(%rax)
movq $0x0, -0x8(%rax)
movb $0x0, (%rax)
movl $0x18, %edi
callq 0x2210
movq %rax, %r15
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movq $0x0, 0x10(%rax)
movl $0x208, %edi            # imm = 0x208
callq 0x2210
movq %rax, %r12
movq (%rbx), %rsi
movq %rax, %rdi
movl $0x8, %edx
callq 0x23a0
movq 0x8(%r14), %rdx
leaq 0x1b10(%rip), %rcx      # 0x7a51
movq %r14, %rdi
xorl %esi, %esi
xorl %r8d, %r8d
callq 0x2310
movq %r12, %rdi
addq $0x78, %rdi
callq 0x2080
testb %al, %al
je 0x6907
movq %r15, -0xd0(%rbp)
movq (%r12), %rax
movq -0x18(%rax), %rax
movq %r12, -0xc8(%rbp)
testb $0x2, 0x20(%r12,%rax)
jne 0x68e3
leaq -0x38(%rbp), %r12
leaq -0x58(%rbp), %rbx
xorl %eax, %eax
leaq -0xc0(%rbp), %rsi
leaq -0x48(%rbp), %r13
incl %eax
movq %rax, -0xd8(%rbp)
movl %eax, -0xc0(%rbp)
leaq -0x68(%rbp), %r15
movq %r15, %rdi
callq 0x6aaa
movq %r15, %rdi
leaq 0x1926(%rip), %rsi      # 0x78e4
callq 0x23b0
movq %r12, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x5fe3
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x5feb
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
movq %rdx, -0x40(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
movq %r14, %rdi
callq 0x20c0
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x6027
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x2220
movq -0x68(%rbp), %rdi
cmpq %rbx, %rdi
je 0x603c
movq -0x58(%rbp), %rsi
incq %rsi
callq 0x2220
movb $0x0, -0x10e0(%rbp)
movq -0xc8(%rbp), %rcx
movq (%rcx), %rax
movq -0x18(%rax), %rdi
addq %rcx, %rdi
movl $0xa, %esi
callq 0x21f0
movsbl %al, %ecx
movl $0x1000, %edx           # imm = 0x1000
movq -0xc8(%rbp), %rdi
leaq -0x10e0(%rbp), %rsi
callq 0x23c0
movq -0xc8(%rbp), %rcx
movq (%rcx), %rax
movq -0x18(%rax), %rax
testb $0x2, 0x20(%rcx,%rax)
je 0x609b
cmpb $0x0, -0x10e0(%rbp)
je 0x68e3
movq -0x98(%rbp), %r15
leaq -0x10e0(%rbp), %r12
movq %r12, %rdi
callq 0x2110
leaq -0xa0(%rbp), %rdi
xorl %esi, %esi
movq %r15, %rdx
leaq -0x58(%rbp), %rbx
movq %r12, %rcx
leaq -0x38(%rbp), %r12
movq %rax, %r8
callq 0x2310
movq -0xa0(%rbp), %rsi
movq -0x98(%rbp), %rdx
movq %r14, %rdi
callq 0x20c0
movq %r14, %rdi
leaq 0x195f(%rip), %rsi      # 0x7a4f
callq 0x23b0
movq -0xa0(%rbp), %rax
cmpb $0x3a, (%rax)
leaq 0x17e1(%rip), %rsi      # 0x78e7
leaq 0x17ec(%rip), %rax      # 0x78f9
cmoveq %rax, %rsi
movq %r14, %rdi
callq 0x23b0
movl $0x1, %edx
movl $0x2, %ecx
movq %r13, %rdi
leaq -0xa0(%rbp), %rsi
callq 0x2230
movq %r13, %rdi
callq 0x6b43
movw %ax, -0x80(%rbp)
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x6157
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x2220
movzwl -0x80(%rbp), %eax
movzwl %ax, %esi
leaq -0xc0(%rbp), %r15
movq %r15, %rdi
callq 0x6ecc
movl $0xb, %r8d
movq %r15, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x178c(%rip), %rcx      # 0x7909
callq 0x2260
movq %rbx, -0x68(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x61a2
movq %rdx, -0x68(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x58(%rbp)
jmp 0x61a8
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
movq %rdx, -0x60(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x68(%rbp), %rdi
leaq 0x1885(%rip), %rsi      # 0x7a4f
callq 0x23b0
movq %r12, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x61ef
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x61f7
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
movq %rdx, -0x40(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
movq %r14, %rdi
callq 0x20c0
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x6233
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x2220
movq -0x68(%rbp), %rdi
cmpq %rbx, %rdi
je 0x6248
movq -0x58(%rbp), %rsi
incq %rsi
callq 0x2220
movq -0xc0(%rbp), %rdi
leaq -0xb0(%rbp), %rax
cmpq %rax, %rdi
je 0x626a
movq -0xb0(%rbp), %rsi
incq %rsi
callq 0x2220
movl $0x3, %edx
movl $0x4, %ecx
movq %r13, %rdi
leaq -0xa0(%rbp), %rsi
callq 0x2230
movq %r13, %rdi
callq 0x6b43
movw %ax, -0x7e(%rbp)
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x62a8
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x2220
movzwl -0x7e(%rbp), %eax
movzwl %ax, %esi
movq %r15, %rdi
callq 0x6ecc
movl $0xc, %r8d
movq %r15, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x164e(%rip), %rcx      # 0x7915
callq 0x2260
movq %rbx, -0x68(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x62ec
movq %rdx, -0x68(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x58(%rbp)
jmp 0x62f2
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
movq %rdx, -0x60(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x68(%rbp), %rdi
leaq 0x173b(%rip), %rsi      # 0x7a4f
callq 0x23b0
movq %r12, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x6339
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x6341
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
movq %rdx, -0x40(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
movq %r14, %rdi
callq 0x20c0
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x637d
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x2220
movq -0x68(%rbp), %rdi
cmpq %rbx, %rdi
je 0x6392
movq -0x58(%rbp), %rsi
incq %rsi
callq 0x2220
movq -0xc0(%rbp), %rdi
leaq -0xb0(%rbp), %rax
cmpq %rax, %rdi
je 0x63b4
movq -0xb0(%rbp), %rsi
incq %rsi
callq 0x2220
movl $0x7, %edx
movl $0x2, %ecx
movq %r13, %rdi
leaq -0xa0(%rbp), %rsi
callq 0x2230
movq %r13, %rdi
callq 0x6b43
movw %ax, -0x7c(%rbp)
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x63f2
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x2220
movzwl -0x7c(%rbp), %eax
movzwl %ax, %esi
leaq -0x68(%rbp), %r15
movq %r15, %rdi
callq 0x6ecc
movl $0x9, %r8d
movq %r15, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x150d(%rip), %rcx      # 0x7922
callq 0x2260
movq %r12, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x643a
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x6442
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
movq %rdx, -0x40(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
movq %r14, %rdi
callq 0x20c0
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x647e
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x2220
movq -0x68(%rbp), %rdi
cmpq %rbx, %rdi
je 0x6493
movq -0x58(%rbp), %rsi
incq %rsi
callq 0x2220
movzwl -0x7c(%rbp), %eax
leaq 0x1543(%rip), %rsi      # 0x79e1
cmpq $0x6, %rax
jae 0x64b2
leaq 0x15e9(%rip), %rcx      # 0x7a94
movslq (%rcx,%rax,4), %rsi
addq %rcx, %rsi
movq %r14, %rdi
callq 0x23b0
movzwl -0x80(%rbp), %edi
leaq 0x153f(%rip), %rsi      # 0x7a04
testq %rdi, %rdi
je 0x65b0
callq 0x2030
movq %rax, -0x78(%rbp)
movq %r14, %rdi
leaq 0x1519(%rip), %rsi      # 0x79fa
callq 0x23b0
cmpw $0x0, -0x80(%rbp)
leaq 0x155d(%rip), %rsi      # 0x7a4f
je 0x65b0
movl $0x9, %r15d
xorl %ebx, %ebx
movl $0x2, %ecx
movq %r13, %rdi
leaq -0xa0(%rbp), %rsi
movq %r15, %rdx
callq 0x2230
movq %r13, %rdi
callq 0x6b8e
movq -0x78(%rbp), %rcx
movb %al, (%rcx,%rbx)
movq -0x78(%rbp), %rax
movb (%rax,%rbx), %al
cmpb $0xf, %al
ja 0x6547
movq %r14, %rdi
leaq 0xd5a(%rip), %rsi       # 0x7295
callq 0x23b0
movq -0x78(%rbp), %rax
movb (%rax,%rbx), %al
movzbl %al, %esi
leaq -0x68(%rbp), %rdi
callq 0x6ecc
movq -0x68(%rbp), %rsi
movq -0x60(%rbp), %rdx
movq %r14, %rdi
callq 0x20c0
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x657c
movq -0x58(%rbp), %rsi
incq %rsi
callq 0x2220
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x6591
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x2220
incq %rbx
movzwl -0x80(%rbp), %eax
addq $0x2, %r15
cmpq %rax, %rbx
jb 0x6500
leaq 0x14a3(%rip), %rsi      # 0x7a4f
leaq -0x58(%rbp), %rbx
movq %r14, %rdi
callq 0x23b0
movzwl -0x80(%rbp), %eax
leaq 0x9(,%rax,2), %rdx
movl $0x2, %ecx
movq %r13, %rdi
leaq -0xa0(%rbp), %rsi
callq 0x2230
movq %r13, %rdi
callq 0x6b43
movw %ax, -0x70(%rbp)
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x65fd
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x2220
movzwl -0x70(%rbp), %eax
movzwl %ax, %esi
leaq -0xc0(%rbp), %r15
movq %r15, %rdi
callq 0x6ecc
movl $0x14, %r8d
movq %r15, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x13ec(%rip), %rcx      # 0x7a0f
callq 0x2260
movq %rbx, -0x68(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x6648
movq %rdx, -0x68(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x58(%rbp)
jmp 0x664e
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
movq %rdx, -0x60(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x68(%rbp), %rdi
leaq 0x13df(%rip), %rsi      # 0x7a4f
callq 0x23b0
movq %r12, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x6695
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x669d
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
movq %rdx, -0x40(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
movq %r14, %rdi
callq 0x20c0
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x66d9
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x2220
movq -0x68(%rbp), %rdi
cmpq %rbx, %rdi
je 0x66ee
movq -0x58(%rbp), %rsi
incq %rsi
callq 0x2220
movq -0xc0(%rbp), %rdi
leaq -0xb0(%rbp), %rax
cmpq %rax, %rdi
leaq -0xa0(%rbp), %rbx
je 0x6717
movq -0xb0(%rbp), %rsi
incq %rsi
callq 0x2220
movw $0x0, -0x6e(%rbp)
movl $0x1, %r15d
movl $0x2, %ecx
movq %r13, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x2230
movq %r13, %rdi
callq 0x6b43
addw %ax, -0x6e(%rbp)
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x6757
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x2220
addq $0x2, %r15
movzwl -0x80(%rbp), %eax
leaq 0x9(,%rax,2), %rax
cmpq %rax, %r15
jb 0x6723
movzwl -0x6e(%rbp), %eax
xorl %ecx, %ecx
subw %ax, %cx
movzbl %cl, %esi
movw %si, -0x6e(%rbp)
leaq -0xc0(%rbp), %r15
movq %r15, %rdi
callq 0x6ecc
leaq -0x58(%rbp), %rbx
movl $0x18, %r8d
movq %r15, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x1281(%rip), %rcx      # 0x7a24
callq 0x2260
movq %rbx, -0x68(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x67c8
movq %rdx, -0x68(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x58(%rbp)
jmp 0x67ce
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
movq %rdx, -0x60(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x68(%rbp), %rdi
leaq 0x125f(%rip), %rsi      # 0x7a4f
callq 0x23b0
movq %r12, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x6815
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x681d
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
movq %rdx, -0x40(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
movq %r14, %rdi
callq 0x20c0
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x6859
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x2220
movq -0x68(%rbp), %rdi
cmpq %rbx, %rdi
je 0x686e
movq -0x58(%rbp), %rsi
incq %rsi
callq 0x2220
movq -0xc0(%rbp), %rdi
leaq -0xb0(%rbp), %rax
cmpq %rax, %rdi
je 0x6890
movq -0xb0(%rbp), %rsi
incq %rsi
callq 0x2220
movzwl -0x6e(%rbp), %eax
cmpw -0x70(%rbp), %ax
jne 0x68f8
movq %r14, %rdi
leaq 0x1199(%rip), %rsi      # 0x7a3d
callq 0x23b0
movq -0xd0(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x6be0
movq -0xc8(%rbp), %rcx
movq (%rcx), %rax
movq -0x18(%rax), %rax
testb $0x2, 0x20(%rcx,%rax)
movq -0xd8(%rbp), %rax
leaq -0xc0(%rbp), %rsi
je 0x5f99
movq -0xc8(%rbp), %rdi
callq 0x2070
movq -0xd0(%rbp), %rbx
jmp 0x6909
leaq 0x1153(%rip), %rsi      # 0x7a52
movq %r14, %rdi
callq 0x23b0
xorl %ebx, %ebx
movq -0xa0(%rbp), %rdi
leaq -0x90(%rbp), %rax
cmpq %rax, %rdi
je 0x692b
movq -0x90(%rbp), %rsi
incq %rsi
callq 0x2220
movq %rbx, %rax
addq $0x10b8, %rsp           # imm = 0x10B8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x6a7d
movq %rax, %rbx
movl $0x208, %esi            # imm = 0x208
movq %r12, %rdi
callq 0x2220
jmp 0x695a
movq %rax, %rbx
movq %rbx, %rdi
callq 0x2100
callq 0x2340
jmp 0x6907
jmp 0x6a7d
jmp 0x6a7d
jmp 0x69a4
jmp 0x69c2
jmp 0x69e4
jmp 0x69a4
jmp 0x69c2
jmp 0x69e4
jmp 0x6a7d
jmp 0x6a7d
jmp 0x6a7d
jmp 0x6a7d
jmp 0x6a7d
jmp 0x6a7d
jmp 0x6a7d
jmp 0x69a4
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x69c5
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x2220
jmp 0x69c5
jmp 0x6a10
jmp 0x69c2
movq %rax, %rbx
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x69e7
movq -0x58(%rbp), %rsi
incq %rsi
callq 0x2220
jmp 0x69e7
jmp 0x6a09
jmp 0x69e4
movq %rax, %rbx
movq -0xc0(%rbp), %rdi
leaq -0xb0(%rbp), %rax
cmpq %rax, %rdi
je 0x6a80
movq -0xb0(%rbp), %rsi
jmp 0x6a71
jmp 0x6a7d
movq %rax, %rbx
jmp 0x6a28
jmp 0x6a7d
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x6a28
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x2220
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x6a80
movq -0x58(%rbp), %rsi
jmp 0x6a71
jmp 0x6a3f
jmp 0x6a7d
movq %rax, %rbx
jmp 0x6a60
movq %rax, %rbx
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x6a60
movq -0x58(%rbp), %rsi
incq %rsi
callq 0x2220
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x6a80
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x2220
jmp 0x6a80
jmp 0x6a7d
movq %rax, %rbx
leaq -0x90(%rbp), %rax
movq -0xa0(%rbp), %rdi
cmpq %rax, %rdi
je 0x6aa2
movq -0x90(%rbp), %rsi
incq %rsi
callq 0x2220
movq %rbx, %rdi
callq 0x2380